Да, время может существенно зависеть от регистра. Вот несколько примеров (измеренных на Intel Core i7-8700K):
- Чтение регистра E8H (IA32_APERF) требует около 91 тактов ядра.
- Регистр чтения 1A0 (IA32_MISC_ENABLE) обычно требует от ~ 500 до ~ 550 циклов ядра.
- Регистр чтения 19CH (IA32_THERM_STATUS) обычно требует от ~ 900 до ~ 1050 ядра циклов.
- Чтение регистра 198H (IA32_PERF_STATUS) обычно требует от ~ 5300 до ~ 5700 циклов ядра.
Вот nanoBench команды, которые я использовал для измерений:
sudo ./kernel-nanoBench.sh -asm "rdmsr" -asm_init "mov RCX, 0xE8"
sudo ./kernel-nanoBench.sh -asm "rdmsr" -asm_init "mov RCX, 0x1A0"
sudo ./kernel-nanoBench.sh -asm "rdmsr" -asm_init "mov RCX, 0x19C"
sudo ./kernel-nanoBench.sh -asm "rdmsr" -asm_init "mov RCX, 0x198"