我尝试了以下“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();
}
我使用mpirun -np 160 ./hello
运行160个流程的程序
我期望服务器运行更高效,因为它在起始点为每个进程提供单个核心,但结果相反。
8 cores : 2.25 sec
160 cores : 5.65 sec
如果我对每个流程的核心任务感到困惑,请纠正我。 另请说明默认情况下如何完成映射?我知道有几种方法可以通过使用rankfile或使用与socket / core affinity相关的一些选项手动完成。 我想知道如何在openMPI中处理这些进程以及默认情况下如何为它们提供资源?
答案 0 :(得分:2)
你实际上并没有衡量任何可以从规模中受益的东西的表现。你唯一测量的是启动时间。在这种情况下,您可能希望启动更多进程需要更多时间。您必须启动进程,连接网络连接等。此外,您的笔记本电脑和服务器每个核心都有一个进程,因此不会从一个进程更改为另一个进程。
更好地测量是否拥有更多内核更有效的测量是进行某种样本计算并测量更多内核的加速。您可以尝试传统的PI计算。