是否存在与 x86 PAUSE 指令等效的指令,它被放置在繁忙的等待循环中以提高性能,尤其是在 PowerPC 上的 SMT 机器上?
问问题
3032 次
3 回答
11
在 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?
于 2011-03-25T01:08:50.963 回答
4
Cell 内部的 PowerPC 将识别某些 NOP 编码作为调整核心中两个物理线程的相对优先级的指示。文档列出了这些特殊 NOP的cctpl
、cctpm
和cctph
扩展助记符。
从 Google 的其他搜索结果来看,IBM RS64 行似乎也有类似的特殊 NOP 指令,因此该功能可能已经在各种 IBM PowerPC 芯片的“Book IV”中出现了相当长的一段时间。
Power ISA 2.06文档在第 3 章中有额外的特殊 NOP 定义,带有扩展的助记符,如yield
、mdoio
和mdoom
. 它还定义了与 Cell 相同的cctpl
NOP cctpm
。
于 2011-03-25T00:02:25.083 回答
4
于 2011-09-28T20:05:14.940 回答