如何解决MPI + OpenACC:#pragma acc host_data use_device如何工作?
#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 举报,一经查实,本站将立刻删除。