nỗ lực ban đầu của tôi trông như thế này (phải chúng tôi muốn nhân)Làm cách nào để thực hiện thao tác ma trận 8 x 8 bằng SSE?
__m128 mat[n]; /* rows */
__m128 vec[n] = {1,1,1,1};
float outvector[n];
for (int row=0;row<n;row++) {
for(int k =3; k < 8; k = k+ 4)
{
__m128 mrow = mat[k];
__m128 v = vec[row];
__m128 sum = _mm_mul_ps(mrow,v);
sum= _mm_hadd_ps(sum,sum); /* adds adjacent-two floats */
}
_mm_store_ss(&outvector[row],_mm_hadd_ps(sum,sum));
}
Nhưng điều này rõ ràng không hoạt động. Làm thế nào để tôi tiếp cận điều này?
tôi nên tải 4 tại một thời điểm ....
Một câu hỏi khác là: nếu mảng của tôi là rất lớn (nói n = 1000), làm thế nào tôi có thể làm cho nó 16-byte thẳng hàng? Điều đó thậm chí có thể?
Bạn mong đợi kết quả gì? Tôi không thấy bất kỳ ma trận, chỉ có một phép nhân vectơ. Ngoài ra, nơi nào 3, 8 và 4 đến từ đâu? – pezcode
@ user963889, kích thước không có ý nghĩa gì. Bạn đang cố làm gì vậy? Nhân một vectơ 8x1, hoặc mảng vectơ, bởi ma trận 8x8? –
@BrettHale Giả sử chúng ta có 8x8 bội số một vector 8x1. Tôi muốn nhận được 8x1 kết quả. Tôi bị mắc kẹt. Các bạn có thể dẫn tôi đi đúng hướng không? Cảm ơn. – user1012451