我想使用AVX將4個打包的64位整數轉換爲4個打包的64位浮點數。我已經試過類似:AVX將64位整數轉換爲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}
參見:[?加載64位整數爲雙精度SSE2寄存器的最佳方式](http://stackoverflow.com/q/ 15569015)。請注意,如果您不想對包裝雙向量中的位進行假設(或使用醜陋的修改),則始終可以執行兩個'CVTDQ2PD',一旦使用較低的32位,然後再使用較高位32位,最後將壓縮雙向量加在一起。 – rwong 2015-04-17 04:47:22