) и я бы не стал мечтать об использовании чего-то еще, кроме lfence, просто потому что. Ваши замечания, конечно, верны.
unsigned int lo = 0;
unsigned int hi = 0;
__asm__ __volatile__ (
"mfence;rdtsc" : "=a"(lo), "=d"(hi) : : "memory"
);
mfence
иведенном выше коде это необходимо?
Согласно моему тесту, переупорядочение процессора не найдено.
Фрагмент тестового кода приведен ниже.
inline uint64_t clock_cycles() {
unsigned int lo = 0;
unsigned int hi = 0;
__asm__ __volatile__ (
"rdtsc" : "=a"(lo), "=d"(hi)
);
return ((uint64_t)hi << 32) | lo;
}
unsigned t1 = clock_cycles();
unsigned t2 = clock_cycles();
assert(t2 > t1);