sse- все статьи тега
Перевод SSE в Neon: как упаковать и затем извлечь 32-битный результат
Я должен перевести следующие инструкции из SSE в Neon uint32_t a = _mm_cvtsi128_si32(_mm_shuffle_epi8(a,SHUFFLE_MASK) ); Где: static const __m128i SHUFFLE_MASK = _mm_setr_epi8(3, 7, 11, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1); Поэтому в основном я должен взять 4,8, 12 и 16 байт из регистра и поместить его в uint32_t. Похоже на инструкцию по упаковке (в SSE я, кажется, помню, что использовал shuffle, потому что он сохраняет ...
Visual Studio 2017: mm load ps часто компилируется в movups
Я смотрю на сгенерированную сборку для моего кода (используя Visual Studio 2017) и заметил, что _mm_load_ps часто (всегда?) компилируется в movups. Данные, которые я использую _mm_load_ps, определяются следующим образом: struct alignas(16) Vector { float v[4]; } // often embedded in other structs like this struct AABB { Vector min; Vector max; bool intersection(/* parameters */) const; } Теперь, когда я использую эту конструкцию, произойдет следующее: // this code __mm12 ...
mm extract epi8 (...) intrinsic, который принимает в качестве аргумента не-литеральное целое число
В последнее время я использую SSE intrinsic int _mm_extract_epi8 (__m128i src, const int ndx), который, согласно ссылке "извлекает целочисленный байт из упакованного целочисленного элемента массива, выбранного индексом". Это именно то, чего я хочу. Однако я определяю индекс через _mm_cmpestri на _m128i, который выполняет упакованное сравнение строковых данных с явными длинами и генерирует индекс. Диапазон данного показателя составляет 0..16 где 0..15 представляет допустимый индекс, а 16 означае ...
Сдвиг 4 целых чисел вправо на разные значения SIMD
SSE не предоставляет способа сдвига упакованных целых чисел на переменную величину (я могу использовать любые инструкции AVX и старше). Вы можете делать только однообразные смены. Результат, которого я пытаюсь достичь для каждого целого числа в векторе, таков. i[0] = i[0] & 0b111111; i[1] = (i[1]>>6) & 0b111111; i[2] = (i[2]>>12) & 0b111111; i[3] = (i[3]>>18) & 0b111111; По существу пытается изолировать другую группу из 6 битов в каждом целом числе. Так како ...
Заголовочные файлы для встроенных SIMD x86
какие заголовочные файлы обеспечивают встроенные функции для различных расширений набора инструкций x86 SIMD (MMX, SSE, AVX,...)? Кажется, невозможно найти такой список в интернете. Поправьте меня, если я ошибаюсь. ...