在 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 表示不进行并行处理。

【讨论】:

并行处理没有发生还是被忽略了?我从来没有想过这个。当您使用 mulpsmulss 时,为什么不直接使用 mulps 而忽略其他元素?【参考方案2】:

SSE 支持两种操作模式:

打包模式 - 指令在所有数据操作数上并行运行 标量模式 - 指令对最不重要的打包数据操作数对进行操作。

Source

【讨论】:

以上是关于在 SIMD 操作的上下文中,非压缩指令和压缩指令有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

tar7z(7zip)压缩/解压缩指令的使用

Linux下文件的打包解压缩指令——tar,bzip2

Dockerfile 指令详解

向量体系结构----SIMD指令集扩展和GPU

使用 windows 批处理指令(BAT文件)进行压缩文件(zip)解压操作

linux打包及备份指令