【发布时间】:2017-05-03 08:11:05
【问题描述】:
我正在尝试并行化经典的 MPI_Issend MPI_Irecv 以使用 OpenMP 线程和 MPI_THREAD_MULTIPLE 进行光环交换。也就是说,每个线程将向左右发送主缓冲区的一部分,每个线程负责从右侧和左侧获取缓冲区的一部分。
#pragma omp parallel private(i,tid)
{
tid = omp_get_thread_num();
nthreads = omp_get_num_threads();
// starting position for each thread
int sizeid = SIZE/nthreads;
int startid = sizeid*tid;
int tstep;
for (tstep = 0; tstep < 5; tstep++){
MPI_Irecv(&recvright[startid], sizeid, MPI_INT, right, tid+101, comm, request + tid);
MPI_Irecv(&recvleft[startid], sizeid, MPI_INT, left, tid+201, comm, request + nthreads + 1 + tid);
MPI_Issend(&sendleft[startid], sizeid, MPI_INT, left, tid+101, comm, request + nthreads + 2 + tid);
MPI_Issend(&sendright[startid], sizeid, MPI_INT, right, tid+201, comm, request + nthreads + 3 + tid);
MPI_Waitall(4*nthreads, request, status);
}
}
但是我在MPI_Waitall 收到错误。有谁知道为什么?我做错了什么?
【问题讨论】: