【发布时间】:2016-04-26 21:36:21
【问题描述】:
我有以下代码:
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,例如在变量名称之前设置&,然后运行。
MPI_init 和其他所需函数在其他类中调用,我也在其中创建了此类对象。
有人可以帮我吗?
【问题讨论】:
-
如果您解释了代码的哪一部分导致了错误,您的问题会更清楚:您的许多 MPI 调用中的哪一个导致
Null buffer pointer?Segmentation fault是从哪一行抛出的? -
@Edward 对,那是我尝试从双数组中获取数据的时候。
标签: c++ segmentation-fault mpi