2

我正在尝试了解有关 SSE/SSE2 如何工作的更多信息:我知道 SSE/SSE2 使用大小为 128 位(16 字节)的 mmx 寄存器,并且通常这些寄存器有 4 个浮点单元格,我可以通过打包来存储我的浮点数. 在得到结果之前,我应该“解压它们”。

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

4

2 回答 2

6

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

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

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

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

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

当然,如果coord您存储了四个 、 和 值数组,而不是值数组,我们X可以将新值存储到数组中各自的槽中,而无需打包/解包这些值。YZW

于 2013-01-30T18:19:56.247 回答
0

因为这些寄存器是 SSE 指令的输入/输出。

于 2013-01-30T18:20:19.210 回答