2012-04-03 5 views
1

Sorry, ich bin mir sicher, einen dummen Fehler gemacht, aber nicht geklappt.Falsche MPI-Anzahl der Prozessoren

ich die Erstellung einer einfachen mpi Hallo Welt:

#include <stdio.h> 
#include <mpi.h> 

int main (argc, argv) 
    int argc; 
    char *argv[]; 
{ 
    int rank, size; 

    MPI_Init (&argc, &argv);  /* starts MPI */ 
    MPI_Comm_rank (MPI_COMM_WORLD, &rank);  /* get current process id */ 
    MPI_Comm_size (MPI_COMM_WORLD, &size);  /* get number of processes */ 
    printf("Hello world from process %d of %d\n", rank, size); 
    MPI_Finalize(); 
    return 0; 
} 

Und:

> mpicc -o hello_world_c hello_world.c 
> mpirun -np 4 hello_world_c 

Aber kehrt:

Hello world from process 0 of 1 
Hello world from process 0 of 1 
Hello world from process 0 of 1 
Hello world from process 0 of 1 

Aber mein Computer ist ein Core i7 mit 4 Kernen . Und alles scheint in Ordnung zu sein, dh. cat/proc/cpuinfo zeigt die 4 Prozessoren

was passiert ??? Vielen Dank im Voraus !!!!

+1

Sieht es nicht ein Problem mit dem MPI-Code. Welche MPI-Bibliothek hast du installiert? Wie hast du es installiert? –

+0

mögliches Duplikat von [MPI \ _Rank gibt dieselbe Prozessnummer für alle Prozesse zurück] (http://stackoverflow.com/questions/20287564/mpi-rank-return-same-process-number-for-all-process) –

Antwort

5

Es ist nichts falsch mit Ihrem Code. Das einzige Problem, das sein kann, ist mit Ihrer mpi-Installation.

Hinweis:

Es gibt einen Unterschied zwischen Prozessor-Kern. es ist nicht das Gleiche.

+0

Ok, Vielen Dank!!! Weißt du, was ich in meiner mpi-Installation ändern muss ??? –

+0

Wie haben Sie es installiert? Welchen Computer verwendest du? verwendest du win7? – lolo

+0

nein nein, ich benutze Ubuntu und eine reguläre Installation. Paket mpich2 –

0

Ich weiß nicht, wie Sie es kompilieren können:

int main (argc, argv) 
int argc; 
char *argv[]; 

wird

int main (int argc, char *argv[]) 

ist ein weiterer Punkt geändert werden, dass mpi-Message-Interface ist vorbei, die Nachrichten zwischen Prozessen nicht Kerne geht oder Prozessoren Wenn Sie ein 4-Kern-System haben, können Sie Ihren Code mit so vielen Prozessen ausführen, wie Ihr RAM es zulässt, aber nur 4 Prozesse arbeiten zu jeder Zeit und andere Prozesse müssen warten, sodass es effizient ist, dass Sie nur 4 Prozesse verwenden.

1

In diesem Fall benötigen Sie mpiexec aus dem 'mpich2' Paket.

Entfernen Sie zuerst alle auf Ihrem Computer installierten MPI-Pakete. Wenn Ihr Server Ubuntu ist, können Sie den Befehl:

sudo apt-get purge mpi mpich2 openmpi-common 

Um sicherzustellen, dass Sie alle Pakete entfernt haben, versuchen Sie diesen Befehl

which mpiexec 

Wenn Sie nichts als Antwort bekam, bereits entfernt alle Pakete.

dann das Paket von mpich2

sudo apt-get install mpich2 

Versuchen Sie hierzu den Code erneut zu kompilieren und auszuführen! Hoffe diese Hilfe!

0

sudo apt-get install libopenmpi-dev openmpi-bin openmpi-doc 

Jetzt installieren kompilieren und Ausführen von Code

enter image description here

Verwandte Themen