Parallel processing MPI素数

Parallel processing MPI素数,parallel-processing,mpi,primes,Parallel Processing,Mpi,Primes,我想用mpi库找到并行算法来查找素数。我找到了这个算法,但当我在代码块上运行时,我总是得到 Sorry - this exercise requires an even number of tasks. evenly divisible into 2500000 . Try 4 or 8. What it means?how can i obtain number of tasks. 获取MPI程序执行期间进程数的常用方法是调用MPI\u COMM\u SIZE子例程,

我想用mpi库找到并行算法来查找素数。我找到了这个算法,但当我在代码块上运行时,我总是得到

    Sorry - this exercise requires an even number of tasks.
   evenly divisible into 2500000 .  Try 4 or 8.



 What it means?how can i obtain number of tasks.

获取MPI程序执行期间进程数的常用方法是调用
MPI\u COMM\u SIZE
子例程,如下所示

call MPI_COMM_SIZE(MPI_COMM_WORLD, num_procs, ierr)
其中
num_procs
是一个整数,它将等于调用完成后的进程数。我希望你所说的任务和我所说的过程是一样的

注意,我在Fortran写了这个调用,C和C++绑定也是可用的,尽管后者似乎不利于。 这意味着什么

这意味着您可能需要查看源代码并尝试了解它是如何工作的。High Performance Mark已指向正确的MPI调用,如果您查看
main
函数的开头,您将看到以下几行:

MPI通信大小(MPI通信世界和ntasks);
如果((ntasks%2)!=0)| |((限制%ntasks)!=0)){
printf(“对不起-此练习需要偶数个任务。\n”);
printf(“可平均分割为%d。尝试4或8。\n”,限制);
MPI_Finalize();
出口(0);
}
显然,它需要偶数个MPI进程(否则
ntasks%2!=0
),并且该数字还应除以
限制(在这种情况下等于
2500000
)。MPI程序应通过MPI启动程序执行,在大多数情况下称为
mpiexec
mpirun
。它将进程数作为参数。如果不通过
mpiexec
运行代码,大多数MPI实现的行为就像程序是使用

mpiexec -np 1 ./program
1
不是偶数,因此
if
条件的第一部分计算为true,并执行中止代码

您应该使用
mpiexec-np executable
在终端中运行程序,其中
是所需的MPI进程数,
executable
是可执行文件的名称<代码>
应为偶数,并应除以
2500000
。我建议使用
2
4
8
<代码>10也可以。除非您的开发系统具有多核CPU或/和多个CPU,否则您不会看到速度的任何提高


您提到了代码::块。查看关于如何通过
mpiexec运行MPI程序的一些想法

好的,我发现了什么问题,代码中有可选部分/****可选:按这样的方式打印每个素数,但仍然不知道如何获取处理器号。例如,我想看看使用3、5或10处理器时速度有多快