Ich habe die folgende VHDL-Funktion, die eine gegebene mxn-Matrix a
mit einem nx1-Vektor multipliziert b
:
function matrix_multiply_by_vector(a: integer_matrix; b: integer_vector; m: integer; n: integer)
return integer_vector is variable c : integer_vector(m-1 downto 0) := (others => 0);
begin
for i in 0 to m-1 loop
for j in 0 to n-1 loop
c(i) := c(i) + (a(i,j) * b(j));
end loop;
end loop;
return c;
end matrix_multiply_by_vector;
Es funktioniert gut, aber was implementiert dies tatsächlich in Hardware? Insbesondere möchte ich wissen, ob es intelligent genug ist, um zu erkennen, dass es die innere for-Schleife parallelisieren kann, wobei im Wesentlichen ein Punktprodukt für jede Zeile der Matrix berechnet wird. Wenn nicht, wie lässt sich die Matrix-Vektor-Multiplikation am einfachsten (dh mit einer schönen Syntax) parallelisieren?