如果集合在进程中不可分,则使用MPI_Scatter

dam*_*aar 8 c mpi

我有一个使用MPI_Scatter()和MPI_Gather()的程序.程序将整数N作为输入,并将素数从2返回到N.我创建一个数字从2到N的数组,并且MPI_Scatter将数组拆分为N /(procs)元素,然后将它们分配给过程.如果我插入一个数字N,它对于进程数('size')可以被整除,一切正常,但是当我输入一个不能为'size'整除的N时,我会有一些错误.例如:N = 16,size = 4 => 16/4 = 4,所以N%size == 0,但是当N%size!= 0时,我会有错误.我试着添加:

div = N/size;
if (N%size != 0)
    if (rank == 0)
        div++;
Run Code Online (Sandbox Code Playgroud)

rank是当前进程的等级,为根进程提供一个元素.但它仍然无法正常工作.我怎么解决这个问题?先感谢您.

har*_*dkl 10

如果必须分发一组数字,这些数字不能平均分配给所有进程,请改用MPI_Scatterv.