【问题标题】:OProfile with OpenMP使用 OpenMP 的 OProfile
【发布时间】:2016-01-06 00:40:05
【问题描述】:

我通过执行以下操作将 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

我如何知道事件是按 CPU 计算的还是作为一个整体计算的?我很确定它作为一个整体,因为如果我在没有 OpenMP 的情况下编译它们接近数字,但我想确定。

【问题讨论】:

    标签: parallel-processing profiling openmp oprofile


    【解决方案1】:

    ocount ... ./program 的默认模式是“命令”。据我了解,如果没有 -t (--separate-thread) 或 -c (--separate-cpu) 选项,来自所有线程的数据都会被聚合。

    所以,检查文档http://oprofile.sourceforge.net/doc/controlling-counter.html#controlling-ocount 并尝试-t / -c 选项...

    --separate-thread / -t 此选项可以与 --process-list 或 --thread-list 选项结合使用,以基于每个线程(每个进程)显示事件计数。如果没有此选项,所有计数都会汇总。

    --separate-cpu / -c 此选项可以与 --system-wide 或 --cpu-list 选项结合使用,以基于每个 cpu 显示事件计数。如果没有此选项,所有计数都会汇总。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多