Эквивалент инструкции 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
из клетки.