0

我尝试了以下“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 中处理进程以及默认情况下如何为它们提供资源?

4

1 回答 1

2

您实际上并没有衡量任何可以从这里的规模受益的东西的性能。您唯一要测量的是启动时间。在这种情况下,您会期望启动更多进程会花费更多时间。您必须启动进程、连接网络连接等。此外,您的笔记本电脑和服务器的每个内核都有一个进程,因此不会从一个进程更改为另一个进程。

测试拥有更多内核是否更有效的更好测量方法是进行某种样本计算并测量拥有更多内核的加速。您可以尝试传统的 PI 计算。

于 2013-07-09T20:44:45.560 回答