我尝试了以下“hello world”代码,首先在我的系统(8 核)上,然后在服务器(160 核)上:
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
我预计服务器运行效率更高,因为它在起点每个进程都有一个可用的内核,但结果相反。
8 cores : 2.25 sec
160 cores : 5.65 sec
如果我对每个流程的核心分配感到困惑,请纠正我。另请解释默认情况下如何完成映射?我知道有几种方法可以手动完成,要么使用 rankfile,要么使用与套接字/核心关联相关的一些选项。我想知道如何在 openMPI 中处理进程以及默认情况下如何为它们提供资源?