启用分析时禁用 OpenMP

Disabling OpenMP when Profiling Enabled

在分析我的 C 代码时,我想 disable/reduce OMP 线程数为 1。经过简短搜索后,我找到了 question。因此,我决定做类似

的事情
#ifdef foo
    #define omp_get_thread_num() 0
#endif

其中 foo 是一个宏,如果在使用 GCC 编译时设置了 -pg 标志,则该宏为真。

然后我的问题是,foo 的值是多少?此方法现在是否允许我获得合理的分析信息(通过强制 OpenMP 仅使用一个线程)。

更改 OpenMP 线程数的最简单方法是在程序启动期间使用环境变量 OMP_NUM_THREADS。要获得 a.out 的单线程执行:

$> OMP_NUM_THREADS=1 ./a.out

这应该是 return 用于分析的合理数据。如果您完全删除 OpenMP,您的应用程序将有所改变,因此分析可能不那么相关。