2013-04-16 12 views
5

W another question on SO staraliśmy (i udało się), aby znaleźć sposób, aby zastąpić brakujący instrukcji AVX:Intel AVX: Dlaczego w przypadku zmiennoprzecinkowej zmiennoprzecinkowej nie ma wersji 256-bitowej produktu dot?

__m256d _mm256_dp_pd(__m256d m1, __m256d m2, const int mask); 

ktoś wie dlaczego ta instrukcja brakuje? Częściowa odpowiedź: here.

+0

Co to znaczy "zaginić"? Istnieją dosłownie miliony rzeczy, do których AVX nie ma instrukcji, i nie ma racjonalnego uzasadnienia poza tym, że "instrukcja nie była częścią AVX" – jalf

+2

Moja zła, "brakująca" w tym sensie, że chciałbym, żeby AVX ją wdrożył i ponieważ wersja pojedynczej precyzji już istnieje (_mm256_dp_ps). Chciałbym zrozumieć, dlaczego zdecydowali się go nie realizować (z powodów filozoficznych lub technicznych). Ale masz rację, to może nie być najlepsze określenie. –

+2

Instrukcje dot-produktu są powolne, bozo rozszerzenia ISA, które prawie nic nie robią, z wyjątkiem zachęcania początkujących programistów wektorowych do wyboru układów danych z głowami kości. Ogólnie rzecz biorąc, należy unikać operacji poziomych, kiedy tylko jest to możliwe, a produkty dot są jednymi z najgorszych przestępców. –

Odpowiedz

11

Podstawową przyczyną tego i różnych innych ograniczeń AVX jest to, że AVX w architekturze to niewiele więcej niż dwie jednostki wykonawcze SSE obok siebie - zauważysz, że praktycznie żadna instrukcja AVX nie działa poziomo w poprzek granicy między dwiema 128-bitowymi połówkami wektor (który jest szczególnie denerwujący w przypadku vpalignr). Ogólnie rzecz biorąc, wydajcie po prostu dwie 128-bitowe operacje SSE równolegle, co jest przydatne w przypadku większości instrukcji, które działają w sposób elementarny, ale nie są tak użyteczne, jak właściwe 256-bitowe wdrożenie SIMD.

Powiązane problemy