Am schnellsten horizontale Vektor-Summe mit AVX-Instruktionen

Habe ich eine gepackte Vektor von vier 64-bit-floating-point-Werte.
Ich möchte die Summe der Vektor-Elemente.

Mit SSE (und mit 32-bit floats) konnte ich nur Folgendes tun:

v_sum = _mm_hadd_ps(v_sum, v_sum);
v_sum = _mm_hadd_ps(v_sum, v_sum);

Leider, obwohl AVX verfügt über eine _mm256_hadd_pd Anweisung, es unterscheidet sich im Ergebnis von der SSE-version. Ich glaube, dies ist aufgrund der Tatsache, dass die meisten AVX-Instruktionen arbeiten, als SSE-Anweisungen für jede low-und high-128-bits separat, ohne Sie je überschreiten der 128-bit-Grenze.

Idealerweise die Lösung, die ich Suche, sollten Sie diese Richtlinien befolgen:
1) nur verwenden, AVX/AVX2-Instruktionen. (kein SSE)
2) tun Sie es in nicht mehr als 2-3 Anweisungen.

Jedoch, eine effiziente und elegante Art und Weise, es zu tun (auch ohne die oben genannten Richtlinien) ist immer gut angenommen.

Vielen Dank für jede Hilfe.

-Luigi Castelli

InformationsquelleAutor der Frage Luigi Castelli | 2012-03-19

Schreibe einen Kommentar