最初にシステム(8コア)で、次にサーバー(160コア)で、次の「hello world」コードを試しました。
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
double t;
t=MPI_Wtime();
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
//printf("Process %d on %s out of %d\n", rank, processor_name, numprocs);
printf("%f---%d---%s\n",MPI_Wtime()-t,rank,processor_name);
sleep(.5);//to make sure, each process needs a significant amount of time to finish
MPI_Finalize();
}
160 のプロセスを使用してプログラムを実行しました。mpirun -np 160 ./hello
サーバーの実行は、開始点で各プロセスに 1 つのコアを使用できるため、より効率的であると期待していましたが、結果は逆でした。
8 cores : 2.25 sec
160 cores : 5.65 sec
各プロセスへのコア割り当てに関して混乱している場合は、修正してください。また、マッピングがデフォルトでどのように行われるかを説明してください。ランクファイルを使用するか、ソケット/コアのアフィニティに関連するいくつかのオプションを使用して、手動で行う方法がいくつかあることを私は知っています。プロセスが openMPI でどのように処理され、デフォルトでどのようにリソースが与えられるかを知りたいですか?