Runtime openMPI中的可用内核与进程数

Runtime openMPI中的可用内核与进程数,runtime,ipc,openmpi,Runtime,Ipc,Openmpi,我尝试了以下“hello world”代码,首先在我的系统(8个内核)上,然后在服务器(160个内核)上: intmain(intargc,char*argv[]){ 国际货币、等级、名称; 字符处理器名称[最大处理器名称]; 双t; t=MPI_Wtime(); MPI_Init(&argc,&argv); MPI通信大小(MPI通信世界和numprocs); MPI通信等级(MPI通信世界和等级); MPI获取处理器名称(处理器名称和名称); //printf(“进程%d在%s上,共%d\n

我尝试了以下“hello world”代码,首先在我的系统(8个内核)上,然后在服务器(160个内核)上:

intmain(intargc,char*argv[]){
国际货币、等级、名称;
字符处理器名称[最大处理器名称];
双t;
t=MPI_Wtime();
MPI_Init(&argc,&argv);
MPI通信大小(MPI通信世界和numprocs);
MPI通信等级(MPI通信世界和等级);
MPI获取处理器名称(处理器名称和名称);
//printf(“进程%d在%s上,共%d\n”,级别,处理器名称,numprocs);
printf(“%f---%d---%s\n”,MPI\u Wtime()-t,秩,处理器名称);
sleep(.5);//为了确保每个进程都需要大量的时间来完成
MPI_Finalize();
}
我使用
mpirun-np160./hello
我希望服务器的运行效率更高,因为它在开始时每个进程都有一个单独的内核,但结果恰恰相反

8 cores : 2.25 sec
160 cores : 5.65 sec
如果我对每个流程的核心任务感到困惑,请纠正我。 另外,请解释默认情况下映射是如何完成的?我知道有几种方法可以手动完成,可以使用rankfile,也可以使用一些与套接字/核心关联相关的选项。
我想知道openMPI是如何处理这些进程的,以及默认情况下是如何为它们提供资源的?

在这里,您实际上并没有衡量任何可以从扩展中获益的性能。你唯一要测量的是启动时间。在这种情况下,您可能希望启动更多的进程需要更多的时间。您必须启动进程、连接网络连接等。此外,您的笔记本电脑和服务器的每个核心都有一个进程,这样就不会从一个进程切换到另一个进程


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

我想,这不是由于SSH滞后或类似的原因。如果您不是在问一个与语言无关的问题,不要标记C和C++。@ WUG我会在下次注意。我认为它是语言特定的,因为OpenMPi实现。你用哪一个编译它?使用MPIC++,文件是CPP文件。测试更多核是否更有效的一个更好的测量是做一些样本计算:你不认为,进行睡眠调用与给定进程的计算相同吗?我明确地提供了它,只是为了考虑启动时间以外的其他因素。睡眠呼叫不是计算。这只会导致进程无所作为。使用并行处理(无论是MPI、线程还是其他)的全部原因是,您希望处理一个在本地计算机上无法解决或需要花费太长时间才能解决的大问题,然后将问题分解,以便可以由多个进程同时解决。在应用程序中,没有任何计算。您只是在测量启动所有进程所需的时间。我的观点是:这是非常确定的,每个进程必须至少需要一个内核才能执行。那么您认为我的计算机(8个内核)的处理时间大约是2秒吗?如果有160个进程,每个进程平均需要0.5秒才能完成,那么在整个处理过程中必须有等待时间。我不知道我还能说什么。很明显你不明白我想解释什么。你计算的不是处理时间。你没有做任何处理。您只是在启动一个应用程序,然后再次停止它。