clflush() в процессорах i3 или i7
Можно ли использовать инструкцию / функцию clflush в процессорах i3/i7 для очистки кеша и проверки, пустой кеш или нет?? Если это так - пожалуйста, предложите правильный формат использования (непосредственно в C или в сборке на C)
Мне сказали, что clflush работает правильно, помимо процессоров Core 2 Duo. Я задаю этот вопрос после перенаправления с этой ссылки (ниже) ------->
¨ Есть ли способ проверить, был ли недавно очищен кэш процессора?¨
мои результаты не соответствуют ожидаемым. Это то, что я получаю эти результаты:
взял 83 тика
взял 66 тиков
флеш: взял 52 галочки
взял 45 тиков
-------------------> Как процессор может брать меньше тиков после очистки кэша? (см. строки 2 и 3 результатов, которые я получил)
1 ответ
rdtsc
не является сериализационной инструкцией, так как измерение не является точным. В качестве быстрого взлома вы можете вставить cpuid
позвоните, позаботившись об обновлении списка clobber тоже:
asm volatile ("cpuid; rdtsc" : "=a" (a), "=d" (d) : : "ebx", "ecx");
По крайней мере, для меня это изменило результаты в соответствии с ожиданиями.