2017-11-14 2 views
0

Ich entwickle derzeit ein Hybrid-Programm mit C++. Ich benutze sowohl openMP als auch MPI. Ich weiß jedoch nicht, wie ich die Anzahl der Prozessoren und Threads für meinen Job festlegen soll. Nehmen wir an, ich möchte 5 Knoten verwenden und ich möchte einen MPI-Prozessor auf jedem Knoten und ich möchte 24 Threads pro Knoten.Lokalisierressource für OpenMP + MPI-Anwendung

Dies ist, wie ich my_job einreichen jetzt:

qsub -l select=5:ncpus=24:mpiprocs=5 -l place=scatter:exclhost my_job 

und auf my_job Skript, ich bin dies

#PBS -l select=5:ncpus=24:mpiprocs=5 
export OMP_NUM_THREADS=24 
mpic++ -O3 myprogram.cpp -o out -fopenmp -lquadmath -std=gnu++11 
mpirun -n 5 ./out 

jedoch tue, ist die Leistung sehr langsam, was ich denke, dass Es könnte ein Problem damit geben, wie ich meine Ressourcen finde.

Irgendwelche Vorschläge?

Antwort

2
+0

Dank Gilles, ich denke, das könnte das Problem lösen. Ich werde es jetzt versuchen und sehen, ob es einen Unterschied in der Leistung gibt. Schätze deine Hilfe. – emadalamoudi

+0

Das ist etwas fehlt neben ich vergesse die Anzahl der Prozessor pro Knoten beim Ausführen des Auftrags angeben: mpirun -n 5 -ppn 1 ./out – emadalamoudi

+0

welche MPI-Bibliothek verwenden Sie? Wenn dies Open MPI ist und es mit tm-Unterstützung erstellt wurde, sollte das überhaupt nicht benötigt werden. –

0

Dank Gilles würde, ich vergesse auch die Anzahl der Prozessor pro Knoten angeben, wenn die Aufgabe ausgeführt wird:

mpirun -n 5 -ppn 1 ./out 

Außerdem habe ich diese Zeile hinzugefügt my_job Skript:

export IPATH_NO_CPUAFFINITY=1 // - tells the underlying software not to pin each process to one CPU core, which would effectively disable OpenMP parallelism. 

beide Lösungen hatten verbesserte Leistung "viel".