gpt4 book ai didi

c - MPI 局部变量损坏,为什么?

转载 作者:行者123 更新时间:2023-11-30 15:50:21 25 4
gpt4 key购买 nike

披露:这是一个家庭作业问题。我目前正在 MPI 中编写一个矩阵乘法器,并且正在尝试诊断段错误。我已将范围缩小到给定的代码段,但我完全困惑为什么会发生这种情况,否则我对 MPI 有根本性的误解(完全有可能)。

主进程的 ID 为 0,4 个从进程的 ID 为 1-4。从属进程计算出输出矩阵的 block 并将其发送回主进程后,我用此代码接收它们。我包含了一些打印语句,显示了此变量损坏发生的位置:

    for(i=1;i<numtasks;i++) {
source = i;
thischunksize = lindex-findex+1;
rc = MPI_Irecv(&Rbuf, thischunksize*rnx, MPI_INT, source, RCHUNKTAG, MP\
I_COMM_WORLD, request+4);
printf("0: D Just checking, i is %d and source is %d\n", i, source);
rc = MPI_Wait(request+4, status+4);
printf("0: E Just checking, i is %d and source is %d\n", i, source);
for(j=0;j<thischunksize*rnx;j++)
{
R[findex*rnx + j] = Rbuf[j];
}
}

输出为:

0: D Just checking, i is 1 and source is 1
0: E Just checking, i is 0 and source is 0

因此,当 MPI_Wait 函数运行时,这些变量的值会发生变化。为什么?主进程和从进程都使用 i 变量,但我认为这并不重要;我假设每个进程都有自己的内存;这不是 MPI 的全部意义吗?

如果需要,我可以显示其余的代码,但我不确定是否有必要。感谢您的帮助!

最佳答案

回答我自己的问题以供将来引用。

而不是

rc = MPI_Irecv(&Rbuf, thischunksize*rnx, MPI_INT, source, RCHUNKTAG, MP\
I_COMM_WORLD, request+4);

应该是

rc = MPI_Irecv(Rbuf, thischunksize*rnx, MPI_INT, source, RCHUNKTAG, MP\
I_COMM_WORLD, request+4);

我愚蠢地获取了指针的地址。我不确定我是否应该保留这个...如果我应该删除这个问题,请告诉我,我会的。

关于c - MPI 局部变量损坏,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com