【发布时间】:2026-02-21 08:15:01
【问题描述】:
我是 MPI 新手,我有一个 256 整数数组,我想将每个数字除以 16,我建议在每个处理器上分散 32 个元素,但我无法收集它们,因为每个返回值都包含 32 数组
int globalhistogram[256];
float globalProb[256];
float* localprob = new float[32];
int localpixel[32];
MPI_Scatter(&globalhistogram, 32, MPI_INT, localpixel, 32, MPI_INT, 0, MPI_COMM_WORLD);
for (int i = 0; i < 32; i++)
{
localprob[i] = (float)localpixel[i] / 16;
}
MPI_Gather(localprob, 32, MPI_FLOAT, &globalprob, 32, MPI_FLOAT, 0, MPI_COMM_WORLD);
【问题讨论】:
-
在分散调用中,将
&globalhistogram更改为histogram,在收集调用中,将&globalprob更改为globalprob。您的间接级别太高了:globalprob已经是缓冲区地址。 -
你正在运行 8 个 MPI 任务,对吧?
-
是的 8 个任务,我想将每个任务的输出收集到一个数组中,但每个任务都返回一个包含 32 个元素的数组