我正在使用 OpenMP 研究并行算法。从 CPU 使用率来看,我写的很多“顺序”代码实际上是并行执行的。
例如:
#pragma omp parallel for if (par == "parallel")
for (int64_t u = 1; u <= n; ++u) {
for (int64_t v = u + 1; v <= n; ++v) {
....
}
}
如果设置了标志,则这是有条件的并行。设置标志后,我看到 16 核机器上的 CPU 使用率为 1500%。在未设置标志的情况下,我仍然看到 250% 的 CPU 使用率。
我想这是由于正在进行一些自动并行化。正确的?海湾合作委员会会这样做吗?
由于我需要比较顺序运行时间和并行运行时间,我希望未使用 ( #pragma omp parallel...
etc.) 注释的代码仅在一个 CPU 上运行。我可以轻松实现这一目标吗?是否有一个 GCC 标志,我可以通过它切换自动并行化并在我用 OpenMP 显式注释的地方具有并行性?