gpt4 book ai didi

c++ - SSE/SSE2 指令的打包和解包数据?

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:00 25 4
gpt4 key购买 nike

我想了解更多有关 SSE/SSE2 工作原理的信息:我知道 SSE/SSE2 使用大小为 128 位(16 字节)的 mmx 寄存器,通常这些寄存器有 4 个浮点单元,我可以在其中存储我的通过包装漂浮。在得到结果之前,我应该“解压它们”。

我的问题是:因为我是菜鸟,为什么要将这些值打包到 xmm 寄存器中,为什么要解包它们?这有什么好处?

最佳答案

您不必打包/解包它们。如果数字已经是正确的格式,您只需使用合适的移动指令将它们加载到寄存器或内存操作数中,以将内存内容用作加法、减法等的第二个操作数。

有时会发生的情况是数据没有在正确的计算位置结束,无法到达需要去的地方,这就是各种打包和解包指令派上用场的地方。

例如,您正在对此进行一些 3D 图形数学运算

struct coord { float X, Y, Z, W; };

但是为了提高计算效率,我们一次加载了四个这样的结构,一个寄存器中所有四个的 X,另一个寄存器中所有四个的 Y等等。现在,例如,在我们将所有 XYZW 值相乘之后[一次四个] 使用转换矩阵来缩放/旋转对象,我们需要再次将其存储回 X、Y、Z 和 W,这是通过将适当的元素“解包”回其相应的 来完成的XYZW 单个条目。

当然,如果您存储的不是 coord 值的数组,而是存储 XYZ 的四个数组W 值,我们可以只将新值存储到数组中它们各自的槽中,而无需打包/解包值。

关于c++ - SSE/SSE2 指令的打包和解包数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610749/

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