Эквивалент инструкции x86 PAUSE для PPC - PullRequest
6 голосов
/ 25 марта 2011

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

Ответы [ 3 ]

10 голосов
/ 25 марта 2011

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

4 голосов
/ 29 сентября 2011

enter image description here

4 голосов
/ 25 марта 2011

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 для Cell.

...