【发布时间】:2021-02-12 10:54:39
【问题描述】:
我一直在经历Intel Intrinsics,每个函数都在处理整数、浮点数或双精度数,它们是打包、解包或扩展打包的。
似乎这个问题应该在互联网上的某个地方得到回答,但我根本找不到答案。
那个包装的东西是什么?
【问题讨论】:
-
正常打包仅意味着您在一个 16 字节向量中有 4 个浮点数,例如
addps xmm0, xmm1。 “解包”不是描述 SIMD 数据格式的正常方式;你能给出一个你看到这个使用的特定上下文吗? Unpacking 是您可以对数据执行的操作,例如扩展每个元素,或者在 SSE 指令的情况下,从 2 个向量中交错元素。 IDK 为什么将其称为“解包”。 -
打包为“打包在一个寄存器中”。扩展压缩似乎意味着“扩展以使用压缩整数”。 “解压”是,IDK,可能只使用标量或将寄存器视为一个整体
-
这就是我所说的unpacking。我想这就像@PeterCordes 的意思。
-
谢谢你们,我现在明白了。我想你应该回答这个问题,因为我似乎无法在 stackoverflow 上找到所有内容。
-
@MargaretBloom:我猜“扩展压缩”只是对
pmovsxwd或其他任何东西的误解:“将压缩的 16 位整数符号扩展为压缩的 32 位整数”。扩展是动词,正在执行的操作,不是存储格式描述的一部分。搜索“Extended packed”在该指南中找不到任何匹配项,这很好,因为它听起来毫无意义。
标签: cpu-architecture sse simd avx avx2