Ich muss die Ausführungszeit einer Schleife mit verschiedenen Scheduling-Typ und Thread-Nummer mit openMP vergleichen.Wie dynamisch Scheduling-Typ wählen?
I Themen Nummer dynamisch, indem ein int
Variable direkt im Pragma Makro einstellen:
int threads_number = 4;
#pragma omp parallel for num_threads(threads_number)
Aber ich versuche zu tun, das gleiche für schedule
, ich static
, dynamic
und guided
Typen vergleichen müssen . Aber es scheint, dass ich einen int als enum oder einen char*
als Namen für diesen nicht verwenden kann.
Gibt es eine Möglichkeit, es dynamisch zu wählen, oder muss ich die Schleife 3 mal schreiben und wählen, welche mit einer if
aufrufen, die irgendwie schmutzig scheint?
Hinweis definiert zur Verfügung, die mit Zeitplan (Laufzeit) und dann omp_sched_static kann leicht schlechtere Ergebnisse für den statischen Zeitplan liefern, als wenn der Compiler wüsste, dass der Zeitplan zum Zeitpunkt der Kompilierung statisch war. Das liegt daran, dass der Compiler, wenn er weiß, dass der Zeitplan statisch ist, besseren Code generieren kann, der keine Aufrufe in die Laufzeit für die Planung innerhalb der Schleife hat. Wenn der Zeitplan jedoch dynamisch sein kann, muss er ein teurereres Codegenerierungsmuster verwenden, das einen Zeitplanungsaufruf für jeden "Blockgrößen" -Satz von Iterationen vornimmt. –