Linux内核中使用扩展指令集(SSE,MMX)吗?

那么,他们带来(至less应该带来)性能的大幅提高,不是吗?

所以,我还没有看到任何Linux内核源代码,但是我很想问:它们是用什么方式? (在这种情况下 – 对于没有这种指令的系统,必须有一些特殊的“代码上限”)?

SSE和MMX指令集在音频/视频和游戏工作之外具有有限的价值。 你可能会在内核的黑暗角落找到一些明确的用途,但我不会指望它。 一般情况下的答案是“不,它们不被使用”,它们也不用于大多数非内核/用户空间应用程序。

内核有时可以选择性地使用特定于特定CPU的某些x86指令(例如存在于某些AMD或Intel型号,但不是全部,反之亦然),例如syscall ,但这些与您所使用的SIMD指令集不同指的是,而不是一些更广泛的类似主题的扩展的一部分。

Mark回答之后,我看了看。 我可以很容易地识别他们正在使用的唯一地方是在RAID 6库 (它也支持AltiVec,这是PowerPC SIMD指令集)。

(注意只是在树上,有很多内核“知道”SSE / MMX支持用户空间的应用程序,但实际上并没有使用它的地方,还有一些不幸的变量名称,与SSE无关,例如在SCTP实施中)。

他们在内核中使用了一些东西,比如

  • 软件RAID
  • 加密(可能)

不过,我相信它总是首先检查他们的存在。

在内核代码中使用向量寄存器和浮点寄存器有严格的限制。 请参阅“不同C ++编译器和操作系统的调用约定”的第6.3章。 http://www.agner.org/optimize/#manuals

“CPU SIMD指令使用FPU”

恩,不,据我了解。 它们部分是FPU指令的现代和更高效的替代品,但SIMD指令集的很大一部分是处理整数运算的。 我从来没有看过很难,但我想(好吧,希望)最近的海湾合作委员会版本生成的SIMD代码将不会打破任何寄存器或状态。