Я ищу код / функции C ++, которые позволяют отслеживать операции чтения / записи в кэше / кэшах ЦП для многоядерных процессоров, чтобы иметь возможность обнаруживать узкие места производительности из-за конкуренции между несколькими ядрами, обращающимися к одним и тем же местам памяти.
Все, что даже близко, ценится. Кто-нибудь может помочь? Заранее спасибо.
Спасибо за все ответы до сих пор. Пройдя через них, я думаю, что мне нужно немного конкретнее разобраться с решением актуальной проблемы.
На этом этапе было бы очень полезно получить некоторые фрагменты кода VC ++, например, как я могу определить тип процессора, тип кеша и когда он читает / записывает данные из / в которые адресует в этот кеш.
Это не должно быть очень сложным, мне просто нужно работать простым способом.
Лучший / самый простой инструмент, который я мог найти, это perf
Например, следующая команда:
perf stat -e LLC-load-misses,LLC-store-misses /bin/ls
Выведет количество пропущенных кеша последнего уровня для запуска ls
,
увидеть perf --help
Другие хорошие инструменты Vtune, или же cachegrind
который был упомянут ранее.
Для программного подхода вы также можете проверить PAPI API.
Других решений пока нет …