J'ai la fonction VHDL suivante qui multiplie une matrice a
mxn donnée par un vecteur 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;
Cela fonctionne bien, mais qu'est-ce que cela implémente réellement dans le matériel? Plus précisément, ce que je veux savoir, c'est s'il est suffisamment intelligent pour réaliser qu'il peut paralléliser la boucle for interne, calculant essentiellement un produit scalaire pour chaque ligne de la matrice. Sinon, quelle est la manière la plus simple (c'est-à-dire la syntaxe agréable) de paralléliser la multiplication matrice-vecteur?