You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MPI_Allgather使用问题求助:多进程数据聚合结果异常

MPI_Allgather 使用错误修正

你的问题出在对MPI_Allgather参数的理解偏差:

  • MPI_Allgather的第四个参数recvcount,指的是单个进程发送过来的元素数量,而非所有进程发送的总元素数。
  • 你写的k*(nProc-1)会让MPI误以为每个进程要给你发这么多元素,但实际上每个进程只发k个int,导致缓冲区只被填充了部分数据,所以最终只看到自身和进程0的元素。

正确的调用方式应该把recvcount设为k——因为每个进程都发送k个int,所以每个进程从每个源进程接收k个int,最终所有进程的数据会被拼接成总长度为k*nProc的数组(如果你的场景中进程数nProc等于k,那就是你要的k*k长度)。

修正后的代码:

int c[k];
int mtemp[k * nProc]; // 缓冲区大小要足够容纳所有进程的k个元素
MPI_Allgather(&c[0], k, MPI_INT, &mtemp[0], k, MPI_INT, MPI_COMM_WORLD);

执行后,mtemp会按进程编号顺序存储所有进程的c数组:比如进程0的元素在mtemp[0..k-1],进程1的在mtemp[k..2k-1],以此类推,每个进程都能拿到所有进程的向量数据。

内容的提问来源于stack exchange,提问作者AlessandroIV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:42:41