AVX 32位整数到双精度浮点数最佳实践

问题描述 投票:0回答:1

我有一个 32 位整数数组,我想将其转换为双精度数,并希望使用

_mm256_cvtepi32_pd()
来执行转换。

我的问题是这个内在函数仅将寄存器中 8 个整数中的 4 个转换为双精度数。

源数组实际上是来自 FPGA 的 64 位结构,其中我的整数值只有结构前 32 位顶部的 24 位,我使用

_mm256_i32gather_epi32()
_mm256_srli_epi32()
来提取和将数据移入适当的 8 元素 32 位整数 YMM 寄存器,我也将存储该寄存器(使用
_mm256_store_si256()
)并希望保留一份副本。

我想知道将 YMM 寄存器中的所有 8 个元素转换为双精度的“最佳实践”是什么。

最好的计划是采用 YMM,转换为双精度(使用

_mm256_cvtepi32_pd()
),用
_mm256_store_si256()
存储,然后将 YMM 逻辑右移 64 位并在另一半重复转换?或者还有其他更好的方法吗?

avx
1个回答
0
投票

使用适当的指令集 利用 AVX 提供的转换指令,例如“vcvtps2pd”和其他相关指令。它们可以有效地将打包单精度浮点数转换为双精度浮点数。如果初始数据是32位整数,则可能需要使用适当的指令逐步执行转换(例如,先将整数转换为单精度,然后再转换为双精度)。根据具体处理器的指令集支持选择最合适的。

© www.soinside.com 2019 - 2024. All rights reserved.