Ich habe eine serielle Anwendung, die ich mit OpenMP parallelisiert habe. Ich habe einfach folgendes zu meiner Hauptschleife hinzugefügt:
#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;
}
Es scheint gut zu funktionieren: Am Anfang führen alle meine Worker-Threads eine Iteration der Schleife aus, alles geht schnell, und ich habe eine 100%ige CPU-Auslastung (auf einem Quad-Core-Rechner). Nach einem Moment hält jedoch einer der Worker-Threads an und bleibt in einer Funktion namens _vcomp::PersistentThreadFunc
de vcomp90.dll
(die Datei ist vctools\openmprt\src\ttpool.cpp
), und dann ein anderer usw., bis nur noch der Hauptthread funktioniert.
Hat jemand eine Idee, warum das passiert? Das Problem tritt auf, nachdem etwa die Hälfte der Iterationen ausgeführt worden ist.