启用分析时禁用 OpenMP
Posted
技术标签:
【中文标题】启用分析时禁用 OpenMP【英文标题】:Disabling OpenMP when Profiling Enabled 【发布时间】:2015-02-28 14:46:34 【问题描述】:在分析我的 C 代码时,我想禁用/减少 OMP 线程的数量为 1。经过简短的搜索,我找到了这个 question。因此,我决定做类似的事情
#ifdef foo
#define omp_get_thread_num() 0
#endif
其中foo
是一个宏,如果在使用 GCC 编译时设置了 -pg
标志,则该宏为真。
然后我的问题是,foo
的值是多少,现在这种方法是否允许我获得合理的分析信息(通过强制 OpenMP 只使用一个线程)。
【问题讨论】:
【参考方案1】:更改 OpenMP 线程数的最简单方法是在程序启动期间使用环境变量 OMP_NUM_THREADS。要获得 a.out 的单线程执行:
$> OMP_NUM_THREADS=1 ./a.out
这应该返回用于分析的合理数据。如果您完全删除 OpenMP,您将在一定程度上更改您的应用程序,因此分析可能不那么相关。
【讨论】:
甚至(但不如export OMP_NUM_THREADS=1
便携)taskset -c 0 ./a.out
,以限制可用于 omp 运行时的 CPU 内核。以上是关于启用分析时禁用 OpenMP的主要内容,如果未能解决你的问题,请参考以下文章
BFD:矮人错误:使用 GNU 4.7.2 使用 HPCToolKit 分析 openmp 程序时