是否存在等效的x86 PAUSE指令,该指令位于繁忙的等待循环中以提高性能,特别是在PowerPC上的SMT机器上?
答案 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的cctpl
,cctpm
和cctph
扩展助记符。
从其他Google搜索结果来看,看起来IBM RS64系列产品可能具有类似的特殊NOP指令,因此这项功能可能已经在各种IBM PowerPC芯片的“Book IV”中使用了很长时间。
Power ISA 2.06 document在第3章中提供了额外的特殊NOP定义,其中包括yield
,mdoio
和mdoom
等扩展助记符。它还定义了与Cell中的cctpl
和cctpm
相同的NOP。
答案 2 :(得分:4)