) и я бы не стал мечтать об использовании чего-то еще, кроме 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);

Ответы на вопрос(2)

Ваш ответ на вопрос