Я хотел бы преобразовать 4 упакованных 64-битных целых числа в 4 упакованных 64-битных числа с плавающей запятой, используя AVX. Я пробовал что-то вроде:
int_64t *ls = (int64_t *) _mm_malloc(256, 32);
ls[0] = a;
//...
ls[3] = d;
__mm256i packed = _mm256_load_si256((__m256i const *)ls);
Что будет отображаться в отладчике:
(gdb) print packed
$4 = {1234, 5678, 9012, 3456}
Пока хорошо, но единственная операция приведения/преобразования, которую я могу найти, это _mm256i_castsi256_pd, которая не дает мне того, что я хочу:
__m256d pd = _mm256_castsi256_pd(packed);
(gdb) print pd
$5 = {6.0967700696809824e-321, 2.8053047370865979e-320, 4.4525196003213139e-320, 1.7074908720273481e-320}
То, что я действительно хотел бы видеть, это:
(gdb) print pd
$5 = {1234.0, 5678.0, 9012.0, 3456.0}
CVTDQ2PD
, один раз используя младшие 32-биты, а затем снова используя верхние 32-биты. бит, и, наконец, сложить вместе вектор Packed-Double. - person rwong   schedule 17.04.2015