AVX を使用して、4 つのパックされた 64 ビット整数を 4 つのパックされた 64 ビット浮動小数点数に変換したいと思います。私は次のようなことを試しました:
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}