Иногда я встречаюсь с кодом, который читает TSC с rdtsc
инструкция, но вызовы cpuid
прямо прежде.
Почему звонит cpuid
необходимо? Я понимаю, что это может иметь некоторое отношение к другому наличию ядер значения TSC, но что точно происходит, когда Вы называете те две инструкции в последовательности?
Это нужно для того, чтобы предотвратить внеочередное выполнение. По ссылке, которая сейчас исчезла из сети (но которая была случайно скопирована сюда до того, как исчезла), приведен текст из статьи "Мониторинг производительности" некоего Джона Экердала:
Процессоры Pentium Pro и Pentium II поддерживают выполнение инструкций не в том порядке, в котором вы их запрограммировали. Это может стать источником ошибок, если не принять меры.
Чтобы предотвратить это, программист должен сериализовать очередь инструкций. Это можно сделать, вставив перед инструкцией RDTSC сериализующую инструкцию, например, инструкцию CPUID.