OProfile с OpenMP

Я использую OProfile для параллельного кода OpenMP, выполняя следующие действия:

$ gcc -I/usr/include/hdf5/serial/ -std=c11 -O3 -fopt-info -fopenmp sp_linsvm.c -o sp_linsvm -lhdf5_serial
$ sudo ocount --events=CPU_CLK_UNHALTED,LLC_MISSES,LLC_REFS,MEM_INST_RETIRED,BR_MISP_EXEC, ./sp_linsvm
Events were actively counted for 22.0 seconds.
Event counts (scaled) for /home/aidan/progs/linsvm/sp_linsvm:
    Event                    Count                    % time counted
    BR_MISP_EXEC             6,523,181                80.00
    CPU_CLK_UNHALTED         225,384,009,348          80.00
    LLC_MISSES               276,587,407              80.02
    LLC_REFS                 1,098,236,806            80.00
    MEM_INST_RETIRED         51,754,855,734           79.99

Как я узнаю, считаются ли события по процессору или по целому? Я уверен, что в целом они близки к цифрам, если я скомпилировал без OpenMP, но я хочу быть уверен.

1 ответ

Решение

Режим по умолчанию для ocount ... ./program это "команда". Как я понимаю без -t (--separate-thread) или же -c (--separate-cpu) параметры, данные из всех потоков агрегируется.

Итак, проверьте документацию http://oprofile.sourceforge.net/doc/controlling-counter.html и попробуйте -t / -c опции...

--separate-thread / -t Эта опция может использоваться вместе с опцией --process-list или --thread-list для отображения количества событий для каждого потока (для процесса). Без этой опции все подсчеты агрегируются.

--separate-cpu / -c Эта опция может использоваться в сочетании с опцией --system-wide или --cpu-list для отображения количества событий для каждого процессора. Без этой опции все подсчеты агрегируются.

Другие вопросы по тегам