Эквивалент инструкции x86 PAUSE для PPC

Существует ли эквивалент инструкции x86 PAUSE, которая помещается в занятые циклы ожидания для повышения производительности, особенно на компьютерах SMT, в PowerPC?

3 ответа

Решение

В ядре 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?

PowerPC внутри Cell будет распознавать определенные кодировки NOP как индикацию для настройки относительного приоритета двух физических потоков в ядре. В документации перечислены cctpl, cctpm, а также cctph расширенная мнемоника для этих специальных NOP.

Судя по другим результатам Google, похоже, что, возможно, линейка IBM RS64 имела аналогичные специальные инструкции NOP, поэтому эта функциональность, вероятно, была в "Книге IV" различных чипов IBM PowerPC в течение достаточно долгого времени.

Документ Power ISA 2.06 содержит дополнительные специальные определения NOP в главе 3 с такими расширенными мнемониками, как yield, mdoio, а также mdoom, Он также определяет те же NOP, что и cctpl а также cctpm из клетки.

Другие вопросы по тегам