在我的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
语句被关闭。
答案 0 :(得分:2)
关于an interesting question关于非工作OpenMP代码的一些住所后,事实证明只用{-fopenmp
替换-lgomp
就可以获得与GCC相当的存根OpenMP库。 {1}}。我怀疑它是一个预期的功能,但它开箱即用。
答案 1 :(得分:1)
最简单的解决方案是:
如果您的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