gpt4 book ai didi

c - SSE 寄存器中的 "Extend"数据类型大小

转载 作者:太空狗 更新时间:2023-10-29 16:13:16 24 4
gpt4 key购买 nike

我正在使用 VS2005(在工作中)并且需要一个执行以下操作的 SSE 内在函数:

我有一个预先存在的 __m128i n 填充了 16 位整数 a_1,a_2,....,a_8

因为我现在想做的一些计算需要 32 位而不是 16 位,所以我想从 n 中提取两组 16 位整数,并将它们放入两个单独的 __m128i 分别包含 a_1,...,a_4a_5,...,a_8

我可以使用各种 _mm_set 内在函数手动执行此操作,但那些会导致汇编中有八个 mov,我希望会有更快的速度方法来做到这一点。

最佳答案

假设我正确理解了您想要实现的目标(将一个 vector 中的 8 x 16 位解压缩为两个 4 x 32 位整数 vector ),我通常在 SSE2 和更高版本中这样做:

__mm128i v = _mm_set_epi16(7, 6, 5, 4, 3, 2, 1, 0);  // v = { 7, 6, 5, 4, 3, 2, 1, 0 }
__mm128i v_lo = _mm_srai_epi32(_mm_unpacklo_epi16(v, v), 16); // v_lo = { 3, 2, 1, 0 }
__mm128i v_hi = _mm_srai_epi32(_mm_unpackhi_epi16(v, v), 16); // v_hi = { 7, 6, 5, 4 }

关于c - SSE 寄存器中的 "Extend"数据类型大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com