Я хочу использовать счетчики производительности оборудования, которые поставляются с многоядерными процессорами Intel и AMD x86_64 для вычисления количества отставших магазинов программой. Я хочу, чтобы каждый поток вычислил свои отставные магазины отдельно. Это можно сделать? И если да, то как в C/С++?
Использование счетчиков производительности оборудования в Linux
Ответ 1
Вы можете использовать Perfctr или PAPI, если вы хотите считать аппаратные события в какой-то части программы внутренне (без запуска какого-либо стороннего инструмента).
Perfctr quickstart: http://www.ale.csce.kyushu-u.ac.jp/~satoshi/how_to_use_perfctr.htm
Домашняя страница PAPI: http://icl.cs.utk.edu/papi/
PerfSuite хороший документ: http://perfsuite.ncsa.illinois.edu/publications/LJ135/x27.html
Если вы можете сделать это извне, существует команда perf
для современной Linux.
Первичная вики: https://perf.wiki.kernel.org/index.php/Main_Page
Ответ 2
Лучший подход будет заключаться в использовании perf в linux, о чем упоминалось osgx, поскольку он является частью ядра linux. Но он также может быть вызван в коде C/С++, и нет необходимости в том, чтобы он был внешним перт-статусом.
Просто загрузите исходный код ядра и взгляните на него. Или, альтернативно, взгляните на эту библиотеку, я думаю, google:
http://perfmon2.sourceforge.net/docs_v4.html
он является частью проекта perfmon2, но предназначен для работы с perf. Посмотрите на каталог perf_examples, и вы получите эту идею. Вот как я обрабатываю перфомансы из моих кодов C.
Ответ 3
Официальное приложение от AMD называется CodeAnalyst
Ответ 4
Выключено oprofile
еще?