【问题标题】:Disabling OpenMP when Profiling Enabled启用分析时禁用 OpenMP
【发布时间】:2015-02-28 14:46:34
【问题描述】:

在分析我的 C 代码时,我想禁用/减少 OMP 线程的数量为 1。经过简短的搜索,我找到了这个 question。因此,我决定做类似的事情

#ifdef foo
    #define omp_get_thread_num() 0
#endif

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

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

【问题讨论】:

    标签: c macros profiling 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 内核。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多