在 SIMD 操作的上下文中,非打包指令和打包指令有什么区别?

What is the difference between non-packed and packed instruction in the context of SIMD-operations?

在 SIMD 操作的上下文中,非打包指令和打包指令有什么区别?

我正在阅读一篇关于针对 SSE 优化代码的文章:

http://www.cortstratton.org/articles/OptimizingForSSE.php#batch

当我阅读

时出现了这个问题

"As an added bonus, movss is a non-packed instruction, which allows us to make better use of the parallel instruction decoders.."

那有什么区别呢?

根据我的理解,packed 意味着概念上不止一个值被传输或用作操作数,而 non-packed 意味着只有一个值被处理; 非打包表示不进行并行处理。

SSE支持两种操作模式:

  • 打包模式 - 指令对所有数据操作数并行操作
  • 标量模式 - 指令对打包数据操作数的最低有效对进行操作。

Source