Mam zapakowany wektor czterech 64-bitowych wartości zmiennoprzecinkowych.
Chciałbym uzyskać sumę elementów wektora.Najszybszy sposób na zrobienie sumy wektorowej z instrukcjami AVX
Z SSE (i przy użyciu 32-bitowych pływaków) może po prostu wykonaj następujące czynności:
v_sum = _mm_hadd_ps(v_sum, v_sum);
v_sum = _mm_hadd_ps(v_sum, v_sum);
Niestety, mimo AVX oferuje dyspozycję _mm256_hadd_pd, różni się w wyniku z wersji SSE. Sądzę, że wynika to z faktu, że większość instrukcji AVX działa jako instrukcje SSE dla każdego niskiego i wysokiego 128-bitowego oddzielnie, bez przekraczania granicy 128-bitowej.
Idealne rozwiązanie, którego szukam, powinno być zgodne z następującymi wytycznymi:
1) stosować wyłącznie instrukcje AVX/AVX2. (bez SSE)
2) zrób to w nie więcej niż 2-3 instrukcjach.
Jednak każdy efektywny/elegancki sposób to zrobić (nawet bez przestrzegania powyższych wytycznych) jest zawsze dobrze przyjęty.
Wielkie dzięki za pomoc.
-Luigi Castelli
Rozpocznij '_mm256_extractf128_ps'' _mm_add_ps' dwóch części razem, a następnie użyć [istniejące sposoby redukcji 128b wektor] (http://stackoverflow.com/questions/6996764/fastest-way-to -do-poziomej-float-wektor-sum-na-x86). –