2017-09-17 3 views
-1

私はOpen MPIで並列計算を学ぼうとしています。私はMacBook ProでUbuntu 16ブートを使用しています。UbuntuのMPIコードには1つのプロセッサしか使われていません

私はOpenMPをインストールし、それをテストするためにhello_worldを実行しようとしました。

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

int main(int argc, char** argv) { 
// Initialize the MPI environment 
MPI_Init(NULL, NULL); 

// Get the number of processes 
int world_size; 
MPI_Comm_size(MPI_COMM_WORLD, &world_size); 

// Get the rank of the process 
int world_rank; 
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 

// Get the name of the processor 
char processor_name[MPI_MAX_PROCESSOR_NAME]; 
int name_len; 
MPI_Get_processor_name(processor_name, &name_len); 

// Print off a hello world message 
printf("Hello world from processor %s, rank %d" 
     " out of %d processors\n", 
     processor_name, world_rank, world_size); 

// Finalize the MPI environment. 
MPI_Finalize(); 
} 

私はmpiccでそれをコンパイルしても問題がなかったが、私はそれを起動しようとすると、私はそうで./hello_world -n 4./hello_world -n 2./hello_world -np 4ため、同じ結果を得てきました。

それは、常に書き込み:

をこんにちは、世界は、プロセッサのubuntu-MACから、1つのプロセッサ

のうちランク0それは、いくつかのプロセッサ上で実行できない理由を私は理解していません。..私はそれを間違って起動するのですか、それとも私の設定か他の何かですか?

答えて

3

これは間違って実行されています。プログラムはmpirunまたはmpiexecで起動する必要があります。これにより、MPIは必要な数のプロセスを起動できます。次のようにあなたがそれをコンパイルして実行することができ、あなたは、ファイルのhello.cであなたのプログラムを持っているとしましょう:

次の出力例は示さなければならない
mpicc -o hello hello.c 
mpirun -np 4 ./hello 

:あなたのように、

Hello world from processor sagan, rank 1 out of 4 processors 
Hello world from processor sagan, rank 2 out of 4 processors 
Hello world from processor sagan, rank 3 out of 4 processors 
Hello world from processor sagan, rank 0 out of 4 processors 

は、プログラムをスタンドアロンで実行しますhelloプログラムはフラグ-nを解析していないので、1つのプロセスしか生成されません。一方、mpirunは、-npフラグを使用して、必要な数のプロセスを起動します。

+0

ありがとうございました。私はそれを知りませんでした:) –

+1

@ValentinMercierそれがあなたを助けるならば、答えを受け入れることを忘れないでください。 –

関連する問題