AVX 将 64 位整数转换为 64 位浮点数

2023-12-31

我想使用 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}

全部cast内在函数执行按位转换,这就是为什么您看不到有意义的结果。

向量转换(cvt64 位整数和 64 位浮点之间不存在内在函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVX 将 64 位整数转换为 64 位浮点数 的相关文章

随机推荐