Ich führe die folgende Schleife mit etwa 8 OpenMP-Threads:
%Vor%Wegen NUMA möchte ich die erste Hälfte der Schleife (i = 0, ..., n / 2-1) mit den Threads 0,1,2,3 ausführen und zweite Hälfte (i = n / 2, ..., n-1) mit den Fäden 4,5,6,7.
Im Wesentlichen möchte ich zwei Schleifen parallel ausführen, wobei jede Schleife eine separate Gruppe von OpenMP-Threads verwendet.
Wie erreiche ich das mit OpenMP?
Danke
PS: Im Idealfall, wenn Threads aus einer Gruppe mit ihrer Hälfte der Schleife fertig sind, und die andere Hälfte der Schleife immer noch nicht fertig ist, möchte ich Threads aus der fertigen Gruppe bei der unfertige Gruppe, die die andere Hälfte der Schleife.
Ich denke über etwas wie unten nach, aber ich frage mich, ob ich das mit OpenMP und ohne zusätzliche Buchhaltung tun kann:
%Vor% Am besten ist es, geschachtelte Parallelisierung zuerst über NUMA-Knoten und dann innerhalb jedes Knotens zu verwenden. dann können Sie die Infrastruktur für dynamic
verwenden, während die Daten immer noch zwischen den Thread-Gruppen aufgeteilt werden:
Dies führt zu
%Vor%Beachten Sie jedoch, dass der verschachtelte Ansatz die Thread-Zuweisungen möglicherweise über das Ein-Level-Threading ändern kann. Sie müssen wahrscheinlich mit KMP_AFFINITY oder anderen Mechanismen ein wenig mehr spielen, um die Bindungen wieder zu korrigieren.
>Tags und Links multithreading performance openmp affinity numa