Tôi có hàm VHDL sau đây nhân một ma trận mxn đã cho a
bằng một vectơ 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;
Nó hoạt động tốt nhưng điều này thực sự thực hiện trong phần cứng? Cụ thể, điều tôi muốn biết là liệu nó có đủ thông minh để nhận ra rằng nó có thể song song hóa vòng lặp for bên trong hay không, về cơ bản là tính toán một sản phẩm chấm cho mỗi hàng của ma trận. Nếu không, cách đơn giản nhất (tức là cú pháp đẹp) để song song phép nhân vectơ ma trận là gì?