8

是否存在与 x86 PAUSE 指令等效的指令,它被放置在繁忙的等待循环中以提高性能,尤其是在 PowerPC 上的 SMT 机器上?

4

3 回答 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的cctplcctpmcctph扩展助记符。

从 Google 的其他搜索结果来看,IBM RS64 行似乎也有类似的特殊 NOP 指令,因此该功能可能已经在各种 IBM PowerPC 芯片的“Book IV”中出现了相当长的一段时间。

Power ISA 2.06文档在第 3 章中有额外的特殊 NOP 定义,带有扩展的助记符,如yieldmdoiomdoom. 它还定义了与 Cell 相同的cctplNOP cctpm

于 2011-03-25T00:02:25.083 回答
4

在此处输入图像描述

于 2011-09-28T20:05:14.940 回答