In meiner Hauptfunktion eingestellt I:htop und OpenMP Threads
omp_set_num_threads(20);
die OpenMP 20 Threads verwenden erzählt (haben 40 Threads zur Verfügung).
ich meinen Code dann ausführen, die die Richtlinie enthält:
#pragma omp parallel for shared(x,y,z)
für das Haupt for-Schleife, und die CPU-Auslastung durch htop Monitor (vielleicht nicht die beste Art und Weise, aber immer noch). Es gibt 50 "Aufgaben", die die for-Schleife ausführen muss und die jeweils eine Weile dauern. Was ich durch htop beobachte, ist, dass nach Beendigung der Aufgaben die Anzahl der Threads sinkt. Genauer gesagt, erwarte ich, dass bei Verwendung von 20 Threads eine CPU-Auslastung von 2000% angezeigt wird, bis weniger als 20 Tasks übrig sind, nach denen sich die Threads "befreien" sollten. Was ich jedoch sehe, ist zuerst 2000%, und nachdem n Aufgaben abgeschlossen ist, sehe ich 2000% - (n * 100%) Leistung. So scheint es, dass die Threads beim Abschluss der Aufgaben heruntergefahren werden, anstatt neue Aufgaben zu übernehmen.
Ist dies, dass Sound ungerade erwartet oder tut werden?
also nach 20 Aufgaben der CPU-Auslastung sinkt auf Null und Ihre parallele Schleife nie beendet? –
Nein, es endet. Meine Frage ist, warum die Threads zu sterben scheinen, wenn noch Aufgaben zu bearbeiten sind. Da – user1938803
50 geteilt durch 20 2.5 ist und der Standardschleife Planung mit den meisten Compilern ist 'static' daher die Hälfte der Fäden verarbeiten zwei Iterationen und die andere Hälfte - drei Iterationen. –