【发布时间】:2015-06-22 05:43:49
【问题描述】:
我有使用 OMP 工具编写的 C/C++ 源文件。例如,在 C++ 类文件中:
#pragma omp parallel sections
{
#pragma omp section
cp = ModularSquareRoot(cp, m_p);
#pragma omp section
cq = ModularSquareRoot(cq, m_q);
}
为了进行基准测试和测试,我想用-fopenmp 构建库,但在这个特定的类文件上禁用它。我希望我可以在类的头文件中添加类似#pragma omp disable 或类似的内容,以便为翻译单元禁用它。但是#pragma omp disable 被默默地忽略了。
我已经浏览了Using OpenMP: Portable Shared Memory Parallel Programming,但我还没有看到如何去做。 (我很可能会错过它,因为我还没有完全阅读它)。
我试图避免修改 CXXFLAGS、makefile 配方和 Visual Studio 项目设置。
有没有办法在源文件的特定翻译单元中禁用 OMP?
【问题讨论】:
-
谢谢阿维。它们都不适用。 (1) 使用 Cmake,这是一个基于 makefile 的项目。 (2) 要求我修改makefile 和recipes。 (3) 为整个程序禁用它。我有兴趣一次为一个翻译单元禁用它,而无需为翻译单元做更多的
#pragma omp off。当然,我不是唯一一个想要这样做的人...... -
3 本身并不禁用整个程序。您可以将
omp_set_num_threads(1);放在翻译单元的开头,将omp_set_num_threads(backed_up_N);放在末尾,有效地消除并行化(实际上并没有禁用 OMP)。 -
备注:使用
omp_set_num_threads(1);或禁用 OMP 会产生不同的行为。设置omp_set_num_threads(1);会显示更慢。因此,对于基准测试,我更喜欢禁用它以衡量并行效率。 -
@coincoin 同意。我以为我在评论中说得很清楚,但澄清总是好的。