是否在Linux内核中使用了扩展指令集(SSE,MMX)?

Ben*_*man 6 linux cpu assembly

好吧,他们带来(至少应该带来)性能的大幅提升,不是吗?

所以,我还没有看到任何Linux内核资源,但是我们很乐意问:它们是否以某种方式使用?(在这种情况下 - 对于没有这种指令的系统,必须有一些特殊的"代码限制"?)

Nic*_*ght 7

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

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

在Mark回答之后,我去寻找.我可以轻松识别它们的唯一地方是RAID 6库(它也支持AltiVec,即PowerPC SIMD指令集).

(要小心点击树,有很多地方内核"知道"SSE/MMX以支持用户空间应用程序,但实际上并没有使用它.还有一些不幸的变量名称绝对存在与SSE无关,例如在SCTP实现中.)

  • @ us2012这可能是一个非常糟糕的主意,如果没有其他原因,内核不是为它设计的,你可能会意外地破坏用户空间SIMD寄存器值(或者用户空间可能会破坏内核代码留下的值) .搞乱内核编译标志通常是一个坏主意,它往往会破坏事物,或者通过提出模糊的GCC错误,或打破低级别的假设.除非您正在进行研究,否则编译标志选择最好留给内核开发人员.你不想只是试图从你的系统中挤出更多的性能. (5认同)

A F*_*Fog 5

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