“cpuid” прежде “rdtsc”

Иногда я встречаюсь с кодом, который читает TSC с rdtsc инструкция, но вызовы cpuid прямо прежде.

Почему звонит cpuid необходимо? Я понимаю, что это может иметь некоторое отношение к другому наличию ядер значения TSC, но что точно происходит, когда Вы называете те две инструкции в последовательности?

18
задан Peter Cordes 16 January 2019 в 09:50
поделиться

1 ответ

Это нужно для того, чтобы предотвратить внеочередное выполнение. По ссылке, которая сейчас исчезла из сети (но которая была случайно скопирована сюда до того, как исчезла), приведен текст из статьи "Мониторинг производительности" некоего Джона Экердала:

Процессоры Pentium Pro и Pentium II поддерживают выполнение инструкций не в том порядке, в котором вы их запрограммировали. Это может стать источником ошибок, если не принять меры.

Чтобы предотвратить это, программист должен сериализовать очередь инструкций. Это можно сделать, вставив перед инструкцией RDTSC сериализующую инструкцию, например, инструкцию CPUID.

18
ответ дан 30 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: