作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将经典的 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
处收到错误。有谁知道为什么?我做错了什么?
最佳答案
您正在对所有线程的所有请求调用MPI_Waitall
。即使请求还没有打开,或者已经被其他线程完成。确保每个请求只等待一次,在您的情况下,在线程中您正在启动非阻塞通信。
request + nthreads * 2 + tid
,而不是
request + nthreads + 2 + tid
。然而,简单地创建一个线程本地
MPI_Request[4]
数组并等待它会更干净、更好,同时也解决了最初的问题。
关于c - 使用 MPI_THREAD_MULTIPLE 的混合循环并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202874/
我正在尝试将经典的 MPI_Issend MPI_Irecv 与 OpenMP 线程和 MPI_THREAD_MULTIPLE 进行光环交换并行化。也就是说,每个线程都会向右侧和左侧发送主缓冲区的一部
我是一名优秀的程序员,十分优秀!