c - 如果集合在进程之间不可分割,则使用 MPI_Scatter

标签 c mpi

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

div = N/size;
if (N%size != 0)
    if (rank == 0)
        div++;

其中 rank 是当前进程的排名,为根进程提供一个元素。但它仍然无法正常工作。我怎么解决这个问题? 提前谢谢你。

最佳答案

如果你必须分配一个数字数组,不能平均分配给所有进程,使用MPI_Scatterv相反。

关于c - 如果集合在进程之间不可分割,则使用 MPI_Scatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21332313/

相关文章:

C - 从文件中读取字符

python - MPI4Py 分散 sendbuf 参数类型?

c - MPI编程中如何随机选择主处理器?

c - 如何使用并行计算机 (MPI) 进行矩阵乘法

c - MPI 上带有指针的结构

c - 奇怪的 strstr 行为

c - 如何仅使用服务器的 IP 连接到服务器?

c - 如何使用 gcc 修复 SDL2 编译错误?

c - 关于整数格式转换

c++ - 不同进程数的不同浮点答案