Использование аппаратных счетчиков производительности в Linux - PullRequest
15 голосов
/ 18 августа 2011

Я хочу использовать аппаратные счетчики производительности, которые поставляются с многоядерными процессорами Intel и AMD x86_64, чтобы вычислить количество удаленных хранилищ по программе. Я хочу, чтобы каждый поток вычислял свои списанные магазины отдельно. Это можно сделать? И если да, то как в C / C ++?

Ответы [ 4 ]

10 голосов
/ 18 августа 2011

Вы можете использовать Perfctr или PAPI, если вы хотите подсчитать аппаратные события для некоторой части программы внутри себя (без запуска какого-либо стороннего инструмента).

Быстрый запуск Perfctr: 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.

perf wiki: https://perf.wiki.kernel.org/index.php/Main_Page

3 голосов
/ 18 мая 2012

Наилучшим подходом будет использование perf в linux, как упоминалось в osgx, поскольку оно является частью ядра linux. Но он также может быть вызван в коде C / C ++, и нет необходимости, чтобы это были внешние вызовы perf stat.

Просто скачайте исходный код ядра и посмотрите на него. Или, альтернативно, взгляните на эту библиотеку, я думаю, по Google:

http://perfmon2.sourceforge.net/docs_v4.html

это часть проекта perfmon2, но она предназначена для работы с perf. Взгляните на каталог perf_examples, и вы получите идею. Именно так я обрабатываю перф-вызовы из моих C-кодов.

2 голосов
/ 23 августа 2011

Официальное приложение от AMD называется CodeAnalyst

0 голосов
/ 18 августа 2011

Выписан oprofile еще?

http://oprofile.sourceforge.net/

...