Есть ли более дешевая инструкция для сериализации, чем cpuid?

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

К сожалению, cpuid занимает примерно 1000 циклов в моей системе, поэтому мне интересно, знает ли кто-нибудь о более дешевой (меньше циклов и не читает или записывает в память) инструкции сериализации?

Я посмотрел на iret, но это, похоже, изменяет поток управления, что также нежелательно.

Я действительно посмотрел на белую газету, связанную с Алексом, в ответ на rstscp, но он говорит:

Инструкция RDTSCP ждет, пока все предыдущие инструкции не были выполненных перед чтением счетчика. Однако последующие инструкции могут начать выполнение до того, как операция чтения выполняется.

Эта вторая точка, кажется, делает ее менее идеальной.

Ответы

Ответ 1

Вы посмотрели инструкцию rdtscp? Это прочитанная сериализованная версия rdtsc.

Для бенчмаркинга я бы рекомендовал прочитать этот технический документ. Он предоставляет несколько лучших практик для измерения тактов.

Alex (Intel)

Ответ 2

Ответ, по-видимому, нет. В Руководство Intel, том 3a содержит только 3 команды с привилегированным сериализацией (cpuid, iret и rsm), а последние два, по-видимому, имеют побочные эффекты при контрольном потоке.

Ответ 3

Ну, я думаю, это полезно: lfence.Ref this "64-ia-32-architecture-software-development-manual" Vol.2B 4-301