Tôi có một véc-tơ đóng gói gồm bốn giá trị dấu phẩy động 64 bit.
Tôi muốn lấy tổng các phần tử của vectơ.Cách nhanh nhất để thực hiện tổng số vectơ ngang với các chỉ dẫn AVX
Với SSE (và sử dụng phao nổi 32-bit) Tôi chỉ có thể làm như sau:
v_sum = _mm_hadd_ps(v_sum, v_sum);
v_sum = _mm_hadd_ps(v_sum, v_sum);
Thật không may, mặc dù AVX có hướng dẫn _mm256_hadd_pd, nó khác ở chỗ là kết quả từ các phiên bản SSE. Tôi tin rằng điều này là do thực tế là hầu hết các hướng dẫn AVX hoạt động như các chỉ lệnh SSE cho từng bit 128 bit thấp và riêng biệt, không bao giờ vượt qua ranh giới 128 bit.
Lý tưởng nhất, giải pháp tôi đang tìm kiếm phải tuân thủ các nguyên tắc sau:
1) chỉ sử dụng hướng dẫn AVX/AVX2. (không có SSE)
2) thực hiện không quá 2-3 hướng dẫn.
Tuy nhiên, bất kỳ cách hiệu quả/thanh lịch nào để thực hiện (thậm chí không tuân theo các nguyên tắc trên) luôn được chấp nhận.
Cảm ơn bạn rất nhiều vì đã giúp đỡ.
-Luigi Castelli
Bắt đầu với '_mm256_extractf128_ps',' _mm_add_ps' hai nửa lại với nhau, sau đó sử dụng [các phương pháp hiện có để giảm một vector 128B] (http://stackoverflow.com/questions/6996764/fastest-way-to -do-horizontal-float-vector-sum-on-x86). –