-1

mpiライブラリで素数を見つける並列アルゴリズムを見つけたかったのですが、これを見つけましたが、コードブロックで実行すると、常に取得されます

    Sorry - this exercise requires an even number of tasks.
   evenly divisible into 2500000 .  Try 4 or 8.



 What it means?how can i obtain number of tasks.

https://computing.llnl.gov/tutorials/mpi/samples/C/mpi_prime.c

4

2 に答える 2

1

その意味?

つまり、おそらくソース コードを見て、それがどのように機能するかを理解しようとする必要があるということです。High Performance Mark は既に適切な MPI 呼び出しを指しています。main関数の先頭を見ると、次の行が表示されます。

MPI_Comm_size(MPI_COMM_WORLD,&ntasks);
if (((ntasks%2) !=0) || ((LIMIT%ntasks) !=0)) {
   printf("Sorry - this exercise requires an even number of tasks.\n");
   printf("evenly divisible into %d.  Try 4 or 8.\n",LIMIT);
   MPI_Finalize();
   exit(0);
   }

明らかに、偶数の MPI プロセスが必要であり (それ以外の場合はntasks%2 != 0)、この数も除算する必要がありますLIMIT(この場合は に等しくなり2500000ます)。mpiexecMPI プログラムは、ほとんどの場合、またはと呼ばれる MPI ランチャーを介して実行する必要がありますmpirun。プロセス数をパラメーターとして取ります。を介してコードを実行しない場合mpiexec、ほとんどの MPI 実装は、プログラムが を使用して開始されたかのように動作します。

mpiexec -np 1 ./program

1は偶数ではないため、条件の最初の部分がiftrue と評価され、中止コードが実行されます。

を使用して端末でプログラムを実行する必要がありますmpiexec -np <# of procs> executable。ここ<# of procs>で、 は目的の MPI プロセス数、executableは実行可能ファイルの名前です。<# of procs>は偶数で、割る必要があります250000024またはを使用することをお勧めし8ます。10もするでしょう。開発システムにマルチコア CPU または複数の CPU が搭載されていない限り、速度の向上は見られません。

あなたは Code::Blocks について言及しています。を介して MPI プログラムを実行する方法については、こちらを参照してくださいmpiexec

于 2012-10-22T11:11:52.850 に答える
0

MPI プログラムの実行中にプロセス数を取得する通常の方法は、次のMPI_COMM_SIZEようにサブルーチンを呼び出すことです。

call MPI_COMM_SIZE(MPI_COMM_WORLD, num_procs, ierr)

ここnum_procsで、呼び出しが完了した後のプロセス数に等しい整数です。あなたがタスクと呼んでいるものは、私がプロセスと呼んでいるものと同じだと思います。

私は Fortran で呼び出しを書いていることに注意してください。C および C++ バインディングも利用できますが、後者は支持されなくなっているようです。

于 2012-10-22T08:47:29.427 に答える