CPUID можно использовать в качестве инструкции сериализации, как описано здесь и здесь. Каков минимальный/простейший синтаксис ассемблера, чтобы использовать его таким образом на С++?
// Is that enough?
// What to do with registers and memory?
// Is volatile necessary?
asm volatile("CPUID":::);
cpuid
перезаписывает регистры, по крайней мере вам нужно перечислитьeax
,ebx
,ecx
иedx
как затирающие. Да,volatile
нужно. - person Jester   schedule 29.01.2018#include <intrin.h>
и используйте функцию__cpuid()
. - person Kelvin Sherlock   schedule 29.01.2018rdtsc
, используйтеlfence
. Intel гарантирует его работу (по крайней мере, на процессорах Intel). См. stackoverflow.com/questions/38994549/. (Однако на AMD кажется, что вам нужноmfence
вместоlfence
< /a>, так чтоcpuid
, по-видимому, более переносим) - person Peter Cordes   schedule 29.01.2018