gpt4 book ai didi

c++ - MPI_Send 双指针

转载 作者:行者123 更新时间:2023-11-28 00:07:13 25 4
gpt4 key购买 nike

我有以下代码:

double * myX;
double * myY;
double * myZ;
int amount;
int count; // number of process

void SomeClass::someMethod(double *x, double *y, double *z, int amount) {

if (myId == 0) {
myX = x;
myY = y;
myZ = z;
amount = amount;
for(int i = 1; i < count; ++i) {
MPI_Send(&amount, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
MPI_Send(myX, amount, MPI_DOUBLE, i, 0, MPI_COMM_WORLD);
MPI_Send(myY, amount, MPI_DOUBLE, i, 0, MPI_COMM_WORLD);
MPI_Send(myX, amount, MPI_DOUBLE, i, 0, MPI_COMM_WORLD);
}
}
}

void SomeClass::anotherMethod(void) {

if(myId != 0) {
MPI_Recv(&amount, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
MPI_Recv(myX, amount, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
MPI_Recv(myY, amount, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
MPI_Recv(myZ, amount, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}

// rest of code
MPI_Reduce(args);
}

但是我遇到了问题,因为当我运行这段代码时我得到 Null buffer pointer 或当我更改某些东西时得到 Segmentation fault,例如设置 & 在 var 名称之前,然后运行。

MPI_init 和其他需要的函数在其他类中调用,我也在其中创建此类对象。

有人可以帮助我吗?

最佳答案

MPI_Recv 会将它接收到的数据复制到第一个参数指定的缓冲区(下例中为 myX):

MPI_Recv(myX, amount, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);

问题是您还没有创建缓冲区来存储它。

你可以这样做:

myX = new double[amount];

例如创建缓冲区,不要忘记之后再次释放内存:

delete[] myX;

关于c++ - MPI_Send 双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34910230/

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