libPAPI: максимальное количество одновременных событий - PullRequest
0 голосов
/ 28 июня 2018

Я хочу использовать PAPI 5.5.1 , чтобы проверить характеристики некоторых моих текстовых алгоритмов, чтобы наблюдать различия в циклах, количестве неверных прогнозов и конвейере. Я проверил собственные события , предоставленные библиотекой, и подтвердил, что они поддерживаются моим компьютером с помощью инструментов papi_avail .

Хорошо работает, когда я пытаюсь измерить до 5 собственных событий одновременно. Но после этого PAPI отказывается начинать считать.

Вот мои упрощенные вещи:

#define NB_EVENTS 6
int CS_Events[NB_EVENTS] = {PAPI_BR_INS, PAPI_BR_MSP, PAPI_TOT_CYC, PAPI_TOT_INS, PAPI_RES_STL, PAPI_TOT_IIS};
PAPI_start_counters(CS_Events, NB_EVENTS); /* return PAPI_ECNFLCT */

PAPI_ECNFLCT описание :

Аппаратное событие существует, но не может быть подсчитано из-за ограничений ресурса счетчика


Я больше не нашел об этом в документации по PAPI / perf. (Мне интересны процессоры x86 (32 | 64) и ARM).

  • Так что, кажется, есть аппаратное ограничение для счетчиков?

  • Существует ли значение табличного процессора / лимита, чтобы его узнать?

  • Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 29 июня 2018

PAPI (и другие библиотеки мониторинга производительности) основаны на счетчиках производительности оборудования. По сути, вы программируете некоторый Машинно-специфический регистр для мониторинга набора событий. Очевидно, что количество событий, которые вы можете отслеживать, ограничено числом от 4 до 8, в зависимости также от того, включена ли у вас гиперпоточность или нет (т. Е. При отключенной гиперпоточности у вас есть доступ к большему количеству). Как отмечалось в комментариях, зная архитектуру, которую вы используете, вы можете узнать количество доступных счетчиков, просмотрев документацию.

Если вы хотите смоделировать больше событий, чем число доступных счетчиков, вам следует использовать метод, называемый мультиплексированием. Вы можете сделать это с PAPI, но я никогда не пробовал: http://icl.cs.utk.edu/projects/papi/wiki/Multiplexing.

Вы также можете попробовать использовать perf . Это очень хорошо и имеет утилиту трассировки.

...