У меня есть следующая функция VHDL, которая умножает данную матрицу a
mxn на вектор 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;
Это работает хорошо, но что это на самом деле реализует в аппаратном обеспечении? В частности, я хочу знать, достаточно ли он умен, чтобы понять, что он может распараллелить внутренний цикл for, по сути вычисляя точечное произведение для каждой строки матрицы. Если нет, то каков самый простой (то есть хороший синтаксис) способ распараллеливания умножения матрицы на вектор?