2 Stimmen

Worker-Threads beenden ihre Arbeit nach einem Moment

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X