Я хочу проверить производительность программы пользовательского пространства в Linux, работающей на x86. Чтобы рассчитать производительность, мне необходимо сбросить в память определенные строки кеша (убедитесь, что эти строки недействительны, и при следующем запросе будет промах кеша).
Я уже видел предложения с использованием cacheflush(2), который должен быть системным вызовом, но g++ жалуется на то, что он не объявлен. Кроме того, я не могу использовать clflush_cache_range, который, по-видимому, может быть вызван только в программе ядра. Прямо сейчас я попытался использовать следующий код:
static inline void clflush(volatile void *__p)
{
asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p));
}
Но это дает следующую ошибку при компиляции:
ошибка: ожидаемое первичное выражение перед 'volatile'
Затем я изменил его следующим образом:
static inline void clflush(volatile void *__p)
{
asm volatile("clflush %0" :: "m" (__p));
}
Он успешно скомпилирован, но результаты синхронизации не изменились. Я подозреваю, что компилятор удалил его с целью оптимизации. У кого-нибудь есть идеи, как я могу решить эту проблему?
#include <asm/cachectl.h>
? - person Swordfish   schedule 08.05.2019_mm_clflush
изemmintrin.h
и имейте в виду, что создание флеша требует времени. - person Filip Dimitrovski   schedule 08.05.2019cachectl()
недоступен для вашей платформы. - person Swordfish   schedule 08.05.2019