私は最初の MPICH2 プログラムを立ち上げ、2 台の PC の LAN で実行しました。クライアントで入力しているコマンドは次のとおりです。
root@ubuntu:/home# mpiexec -f hosts.cfg -n 4 ./hello
Hello world from process 3 of 4
Hello world from process 2 of 4
Hello world from process 1 of 4
Hello world from process 0 of 4
私のプログラムはこれです:
/* C Example */
#include <mpi.h>
#include <stdio.h>
int main (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;
}
MPI_hello.c をローカルでコンパイルして、各マシンで実行可能ファイルを取得しました。
次のようなものを出力する必要があるように、コードを変更したいと思います。
Hello world from process 3 running on PC2 of 4
Hello world from process 2 running on PC2 of 4
Hello world from process 1 running on PC1 of 4
Hello world from process 0 running on PC1 of 4
PC1 と PC2 は、MPI プログラムを実行する 2 台の PC の名前です。したがって、基本的には、各プロセスとともにコンピューターの名前を取得する API を探しています。
どうすればいいですか?
アップデート
damienfrancois の両方の回答は完全にうまくいきました。ここに私の出力があります:
root@ubuntu:/home# mpiexec -f hosts.cfg -n 4 ./hello
Hello world from process 1 running on PC1 of 4
Hello world from process 3 running on PC1 of 4
Hello world from process 2 running on PC2 of 4
Hello world from process 0 running on PC2 of 4
プロセス ID の割り当てはアフィニティの問題であり、hosts.cfg ファイルで言及する必要があります。