这是什么意思?
这意味着您可能必须查看源代码并尝试了解它的工作原理。高性能标记已经指向正确的 MPI 调用,如果您查看main
函数的开头,您会看到以下几行:
MPI_Comm_size(MPI_COMM_WORLD,&ntasks);
if (((ntasks%2) !=0) || ((LIMIT%ntasks) !=0)) {
printf("Sorry - this exercise requires an even number of tasks.\n");
printf("evenly divisible into %d. Try 4 or 8.\n",LIMIT);
MPI_Finalize();
exit(0);
}
显然,它需要偶数个 MPI 进程(否则ntasks%2 != 0
),这个数字也应该除以LIMIT
(在这种情况下等于2500000
)。MPI 程序应通过 MPI 启动器执行,在大多数情况下称为mpiexec
或mpirun
。它将进程数作为参数。如果您不通过 运行代码mpiexec
,大多数 MPI 实现的行为就好像程序是使用
mpiexec -np 1 ./program
1
不是偶数,因此if
条件的第一部分计算为真,中止代码被执行。
您应该做的是在终端中使用 运行程序mpiexec -np <# of procs> executable
,其中<# of procs>
是所需的 MPI 进程数,executable
是可执行文件的名称。<# of procs>
应该是平的,应该分2500000
的。我建议使用2
,4
或8
. 10
也会这样做。除非您的开发系统具有多核 CPU 或/和多个 CPU,否则您不会看到速度有任何改进。
你提到代码::块。有关如何使其运行 MPI 程序的一些想法,请参见此处mpiexec
。