У мене є така функція 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;
Це добре працює, але що це насправді реалізує в апараті? Зокрема, те, що я хочу знати, це якщо він досить розумний, щоб зрозуміти, що він може паралелізувати внутрішню для циклу, по суті обчислюючи крапковий добуток для кожного рядка матриці. Якщо ні, то який найпростіший (тобто приємний синтаксис) спосіб паралелізації множення матричного вектора?