У меня есть последовательное приложение, которое я распараллелил с использованием 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% загрузка процессора (на четырехъядерной машине). Однако через некоторое время один из рабочих потоков останавливается и остается в функции с именем _vcomp::PersistentThreadFunc
из vcomp90.dll
(файл vctools\openmprt\src\ttpool.cpp
), затем в другом и т. Д., Пока только основной поток не заработает. .
У кого-нибудь есть идея, почему это происходит? Это начинает происходить после выполнения примерно половины итераций.