我有一个使用 OpenMP 并行化的串行应用程序。我只是将以下内容添加到我的主循环中:
#pragma omp parallel for default(shared)
for (int i = 0; i < numberOfEmitters; ++i)
{
computeTrajectoryParams* params = new computeTrajectoryParams;
// defining params...
outputs[i] = (int*) ComputeTrajectory(params);
delete params;
}
它似乎运作良好:一开始,我所有的工作线程都执行循环的迭代,一切都进行得很快,并且我有 100% 的 CPU 负载(在四核机器上)。然而,片刻之后,其中一个工作线程停止,并停留在_vcomp::PersistentThreadFunc
从vcomp90.dll
(文件为vctools\openmprt\src\ttpool.cpp
)调用的函数中,然后是另一个,等等......直到只有主线程仍在工作。
有人知道为什么会这样吗?这在执行了大约一半的迭代后开始发生。