相当于PPC的x86 PAUSE指令

时间:2011-03-24 21:05:10

标签: powerpc spinlock

是否存在等效的x86 PAUSE指令,该指令位于繁忙的等待循环中以提高性能,特别是在PowerPC上的SMT机器上?

3 个答案:

答案 0 :(得分:10)

在Linux内核中,我们在arch / powerpc / include / asm / processor.h

中有这个
/* Macros for adjusting thread priority (hardware multi-threading) */
#define HMT_very_low()   asm volatile("or 31,31,31   # very low priority")
#define HMT_low()    asm volatile("or 1,1,1      # low priority")
#define HMT_medium_low() asm volatile("or 6,6,6      # medium low priority")
#define HMT_medium()     asm volatile("or 2,2,2      # medium priority")
#define HMT_medium_high() asm volatile("or 5,5,5      # medium high priority")
#define HMT_high()   asm volatile("or 3,3,3      # high priority")

我不熟悉x86 PAUSE,但听起来像“或31,31,31”就是你想要的。

你在做哪个powerpc处理器?对于SMT,它必须是POWER5,6或7?

答案 1 :(得分:4)

Cell内部的PowerPC将识别某些NOP编码作为指示,以调整核心中两个物理线程的相对优先级。 documentation列出了这些特殊NOP的cctplcctpmcctph扩展助记符。

从其他Google搜索结果来看,看起来IBM RS64系列产品可能具有类似的特殊NOP指令,因此这项功能可能已经在各种IBM PowerPC芯片的“Book IV”中使用了很长时间。

Power ISA 2.06 document在第3章中提供了额外的特殊NOP定义,其中包括yieldmdoiomdoom等扩展助记符。它还定义了与Cell中的cctplcctpm相同的NOP。

答案 2 :(得分:4)

enter image description here