OpenMP: Splitting-Schleife basierend auf NUMA

8

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%     
user2052436 25.07.2014, 14:12
quelle

1 Antwort

5

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:

%Vor%

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.

>     
Jonathan Dursi 25.07.2014, 15:16
quelle