在我的c ++项目中禁用OpenMP pragma语句

时间:2013-06-13 18:17:49

标签: c++ macros openmp pragma

在我的c ++项目中,有几个#pragma omp parallel for private(i)语句。当我尝试使用valgrind跟踪代码中的错误时,OpenMP装饰会导致“可能丢失”的内存泄漏消息。我想完全禁用所有上述#pragma语句,以便我可以隔离问题。

但是,我在代码中使用omp_get_wtime(),我不希望禁用这些函数调用。因此,我不想完全禁用项目中的所有OpenMP功能。

如何关闭所有#pragma omp parallel for private(i)语句?

我使用Eclipse CDT自动管理makefile,因此我通常在发布模式下编译:{{1​​}}。理想情况下,我希望我的问题的解决方案允许我使用诸如make all -C release之类的语句进行编译,这将导致所有上述make all -C release -TURN_OFF_PARALLEL语句被关闭。

3 个答案:

答案 0 :(得分:2)

关于an interesting question关于非工作OpenMP代码的一些住所后,事实证明只用{-fopenmp替换-lgomp就可以获得与GCC相当的存根OpenMP库。 {1}}。我怀疑它是一个预期的功能,但它开箱即用。

答案 1 :(得分:1)

最简单的解决方案是:

  1. 禁用OpenMP
  2. 链接OpenMP存根库函数
  3. 如果您的OpenMP实现不提供存根函数,您可以从standard的附录B创建自己的复制。

答案 2 :(得分:1)

对于GCC,我没有看到只使用存根的选项。 OpenMP标准的附录B说

    double omp_get_wtime(void)
    {
    /* This function does not provide a working
    * wallclock timer. Replace it with a version
    * customized for the target machine.
    */
    return 0.0;
    }

如果你真的想要时间那就没用了。使用GCC,要么你必须编写自己的时间函数,要么搜索" #pragma omp"并用" // #pragma omp"

替换它

您可以仅为GCC实现自己的时间函数,而不是更改整个代码库。 Computing time in linux :granularity and precision