В принципе, как я могу записать эквивалент этого с помощью встроенных AVX2? Мы предполагаем, что result_in_float
имеет тип __m256
, а result
имеет тип short int*
или short int[8]
.Как преобразовать вектор float в short int с помощью команд avx?
for(i = 0; i < 8; i++)
result[i] = (short int)result_in_float[i];
Я знаю, что поплавки могут быть преобразованы в 32-битных целых чисел, используя __m256i _mm256_cvtps_epi32(__m256 m1)
внутренней, но не имеют ни малейшего представления о том, как преобразовать эти 32 битные целые дальше 16-битных целых чисел. И я не хочу этого, но также хранить эти значения (в виде 16-битных целых чисел) в памяти, и я хочу сделать это с помощью векторных инструкций.
Поиск по интернету, я нашел внутреннее имя _mm256_mask_storeu_epi16
, но я не уверен, что это будет трюк, поскольку я не мог найти пример его использования.
Я использую как C и C++. И эти внутренности могут быть вызваны из любого из них. Вот почему. – pythonic
Используйте vpshufb с соответствующими байтовыми выделениями, затем любая тасовка, которая приносит значение вниз от верхней 128-битной полосы до нижней. –
Все в порядке, если они насыщаются вместо обертывания при переполнении (от int до короткого, а не от float до int step)? – harold