启用分析时禁用 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的主要内容,如果未能解决你的问题,请参考以下文章

在运行时启用和禁用 gprof?

使用显式 openMP 任务分析 OpenMP 程序

BFD:矮人错误:使用 GNU 4.7.2 使用 HPCToolKit 分析 openmp 程序时

禁用本地构建的代码分析

在 iOS 应用程序运行时启用/禁用 Crashlytics

如何在 Visual Studio 2017 上禁用代码分析?