В еще один вопрос по SO мы попытались (и преуспели) найти способ заменить отсутствующую инструкцию AVX:
__m256d _mm256_dp_pd(__m256d m1, __m256d m2, const int mask);
Кто-нибудь знает причину, почему эта инструкция отсутствует? Частичный ответ Вот.
Основная причина этого и различных других ограничений AVX заключается в том, что архитектурно AVX немного больше, чем два исполнительных блока SSE бок о бок — вы заметите, что практически никакие инструкции AVX не работают горизонтально через границу между двумя 128-битными половинами вектора (что особенно раздражает в случае vpalignr
). В целом, вы просто получаете две параллельные 128-битные операции SSE, что полезно для большинства команд, которые просто работают поэлементно, но не так полезны, как правильная реализация 256-битной SIMD.
Других решений пока нет …