Tengo la siguiente función VHDL que multiplica una matriz mxn dada a
por un vector nx1 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;
Funciona bien, pero ¿qué es lo que realmente se implementa en el hardware? Específicamente, lo que quiero saber es si es lo suficientemente inteligente como para darse cuenta de que puede paralelizar el bucle for interno, esencialmente calculando un producto punto para cada fila de la matriz. Si no es así, ¿cuál es la forma más sencilla (es decir, una sintaxis agradable) de paralelizar la multiplicación matriz-vector?