2016-07-09 30 views
-2

Ich habe eine Wettervorhersage-Software mit OpenMPI in doppelter Genauigkeit auf Ubuntu 14.04 und Intel iFort Compiler kompiliert. Ich bin jedoch nicht in der Lage, einige Probleme herauszufinden. Ich muss herausfinden, wie viele Prozessoren ich an mpirun senden muss. Dies ist die Ausgabe von lscpuErmittlung der Anzahl der Prozessoren für die Verwendung von Openmpi

x86_64 
CPU op-mode(s):  32-bit, 64-bit 
Byte Order:   Little Endian 
CPU(s):    4 
On-line CPU(s) list: 0-3 
Thread(s) per core: 2 
Core(s) per socket: 2 
Socket(s):    1 
NUMA node(s):   1 
Vendor ID:    GenuineIntel 
CPU family:   6 
Model:     60 
Stepping:    3 
CPU MHz:    800.000 
BogoMIPS:    6784.93 
Virtualization:  VT-x 
L1d cache:    32K 
L1i cache:    32K 
L2 cache:    256K 
L3 cache:    3072K 
NUMA node0 CPU(s):  0-3output of lscpu 

Dies ist der Befehl, den ich meine Software verwenden mpirun -np 4 aaa zu laufen. Aber wenn ich dies tun, bekomme ich diese Fehler -

MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD 
with errorcode 1001. 

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. 
You may or may not see output from other processes, depending on 
exactly when Open MPI kills them. 

Wenn ich np auf 1 gesetzt, es erfolgreich ausgeführt wird, aber die CPU nicht vollständig nutzen. Die CPU-Nutzung variiert von 3% bis 35%, aber die Speicherauslastung beträgt fast 100% und das System friert für etwa 10 Minuten ein und wird mit der Fehlermeldung

forrtl strenger (41) unzureichender virtueller Speicher beendet.

Ich habe WRF (die Software für diese Frage ist nicht WRF) mit mehreren Semaphoren ausgeführt und ich habe keine Geschwindigkeit oder Speicherprobleme erlebt. Ich könnte auf einfache Genauigkeit neu kompilieren, aber bevor ich das tue, möchte ich in der Lage sein, die Anzahl der Kerne (Prozessoren) herauszufinden, die an mpirun gesendet werden.

Antwort

1

Die meisten Intel-CPUs (einschließlich des von Ihnen verwendeten) verfügen über eine virtuelle Ausführungseinheit, die zwei simultane Befehlsströme ermöglicht, die allgemein als "Hyperthreading" bezeichnet werden. Für den Linux-Kernel erscheint dies als zusätzlicher CPU-Kern. Daher teilt Ihnen lscpu mit, dass vier CPU-Kerne vorhanden sind (CPU(s): 4). Suchen Sie sorgfältig auf dem Rest des Ausgangs, werden Sie sehen, dass es in der Tat nur zwei CPU-Kern:

Thread(s) per core: 2 <--- this is hyperthreading 
Core(s) per socket: 2 
Socket(s):    1 

ich in der Regel nicht empfohlen, mehrere MPI-Prozesse auf einem einzigen physischen CPU-Kern läuft, auch wenn es ist Hyperthreading. Es neigt dazu, zu einer nachteiligen Leistung zu führen, und in Ihrem Fall stürzt es manchmal ab. Versuchen Sie es mit mpiexec -np 2 aaa und sehen Sie, was passiert. Wenn es erneut abstürzt, ist etwas anderes nicht in Ordnung.

Wenn ich np auf 1 setze, läuft es erfolgreich, aber verwendet die CPU nicht vollständig. Die CPU-Nutzung variiert von 3% bis 35%, aber die Speicherauslastung beträgt fast 100% und das System friert etwa zehn Minuten lang ein und wird mit der Fehlermeldung forrtl strenger (41) unzureichender virtueller Speicher beendet.

Möglicherweise müssen Sie eine kleinere Problemgröße ausführen. Dieser Computer verfügt nicht über genügend physischen Speicher, um die angeforderten Zuordnungen zu erfüllen, und verwendet virtuellen Speicher (im Wesentlichen Festplattenspeicher), um zu versuchen, sie zu erfüllen, aber immer noch knapp. In jedem Fall möchten Sie beim Ausführen einer Simulation keinen virtuellen Speicher verwenden (dieser ist ~ 1000x langsamer als der Hauptspeicher, der bereits langsam ist).

+0

schöne Antwort. Lass mich all diese Informationen aufnehmen! – gansub

+0

absorbiert all das. Die Leute, die die Software entwickelt haben, haben mich gebeten, mit einfacher Genauigkeit neu zu kompilieren, anstatt eine kleinere Problemgröße zu verwenden. Gedanken dazu? – gansub

+0

Ich gehe davon aus, dass es einen Gitter- oder AMR-Fluiddynamik-Löser verwendet, so dass eine Änderung der Genauigkeit das Problem um die Hälfte reduzieren würde. Es ist nur eine Frage, ob Sie mit der reduzierten Genauigkeit umgehen können. Das hängt empfindlich von Ihrem Problem ab. – Tim