Сравнительный код C - Flush Cache
Мне интересно, можно ли принудительно очистить кэш внутри c, используя Linux x86. Я прочитал несколько ответов, отвечающих, как сделать это в оболочке или используя asm/cache.h (требуя от меня написания модуля linux...)
Я использую библиотеку PAPI, которая позволяет мне приблизиться к точному количеству тактов, которое требуется для выполнения данного блока кода. Однако, так как я хочу определить время некоторых чрезвычайно коротких функций, мне нужно многократно запускать функции для получения точной статистики (вызов функции синхронизации занимает больше времени, чем выполнение кода в блоках). При многократном запуске кода кэш ускоряет выполнение последовательных вызовов одного и того же блока кода, и я хотел бы предотвратить это!
1 ответ
Я не знаю ни одного стандартного способа сделать это, кроме загрузки другой вещи в кеш. Мой обычный обходной путь - просто обработать что-то достаточно большое, чтобы "охладить" кэш, скажем, умножение матрицы.