问题描述
#pragma acc parallel loop present(phi[:ny_tot][:nx_tot],send_buf[:NX_GLOB+2*NGHOST],recv_buf[NX_GLOB+2*NGHOST])
for (i = ibeg; i <= iend; i++) send_buf[i] = phi[j][i];
#pragma acc host_data use_device(send_buf,recv_buf)
{
MPI_Sendrecv (send_buf,iend+1,MPI_DOUBLE,procR[1],recv_buf,MPI_COMM_WORLD,MPI_STATUS_IGnorE);
}
#pragma acc parallel loop present(phi[:ny_tot][:nx_tot],recv_buf[NX_GLOB+2*NGHOST])
for (i = ibeg; i <= iend; i++) phi[j+1][i] = recv_buf[i];
我需要这部分代码在GPU上运行,并且我也希望MPI消息仅涉及设备。为此,我看到#pragma acc host_data use_device()
应该是完美的,但是编译器似乎看不到它(-Minfo = accel),并且在运行该应用程序时出现错误:
您的应用程序之一的终止终止
PID 36444在Inspiron-7501上运行
出口码:139
清理剩余过程
您可以忽略下面的清理消息
您的应用程序以退出字符串终止:分段错误(信号11)
#pragma acc parallel loop present(phi[:ny_tot][:nx_tot],recv_buf[NX_GLOB+2*NGHOST])
for (i = ibeg; i <= iend; i++) send_buf[i] = phi[j][i];
#pragma acc update self(send_buf[:NX_GLOB+2*NGHOST])
MPI_Sendrecv (send_buf,MPI_STATUS_IGnorE);
#pragma acc update device(recv_buf[NX_GLOB+2*NGHOST])
#pragma acc parallel loop present(phi[:ny_tot][:nx_tot],recv_buf[NX_GLOB+2*NGHOST])
for (i = ibeg; i <= iend; i++) phi[j+1][i] = recv_buf[i];
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)