在 SIMD 操作的上下文中,非压缩指令和压缩指令有啥区别?
Posted
技术标签:
【中文标题】在 SIMD 操作的上下文中,非压缩指令和压缩指令有啥区别?【英文标题】:What is the difference between non-packed and packed instruction in the context of SIMD-operations?在 SIMD 操作的上下文中,非压缩指令和压缩指令有什么区别? 【发布时间】:2015-05-04 10:19:28 【问题描述】:在 SIMD 操作的上下文中,非压缩指令和压缩指令有什么区别?
我正在阅读一篇关于优化 SSE 代码的文章:
http://www.cortstratton.org/articles/OptimizingForSSE.php#batch
当我阅读时出现了这个问题
“作为一个额外的好处,movss 是一个非压缩指令,它使我们能够更好地利用并行指令解码器..”
那么有什么区别呢?
【问题讨论】:
非打包并不是真正的 SIMD。它使用 SIMD 寄存器,但仅使用寄存器的第一个元素。即使是标量值,64 位浮点指针操作也使用 SIMD 寄存器。但是,标量整数值仍使用标量寄存器。 SIMD 整数指令不具备标量指令的所有功能(目前)。 【参考方案1】:在我的理解中,packed 意味着概念上不止一个值被传输或用作操作数,而 non-packed 意味着只处理一个值; non-packed 表示不进行并行处理。
【讨论】:
并行处理没有发生还是被忽略了?我从来没有想过这个。当您使用mulps
与 mulss
时,为什么不直接使用 mulps
而忽略其他元素?【参考方案2】:
SSE 支持两种操作模式:
打包模式 - 指令在所有数据操作数上并行运行 标量模式 - 指令对最不重要的打包数据操作数对进行操作。Source
【讨论】:
以上是关于在 SIMD 操作的上下文中,非压缩指令和压缩指令有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章