大佬教程收集整理的这篇文章主要介绍了我是否需要为MPI :: Isend提供相应的MPI :: Irecv?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
基本问题是我需要为MPI :: Isend提供相应的R_651_11845@PI :: Irecv吗?
也就是说,即使消息发送是非阻塞的,只要我在重新使用发送缓冲区之前等待发送完成,我是否需要使用非阻塞接收&等待接收发送的缓冲区?
我的观点是,我希望在发送消息时使用非阻塞发送来“执行其他操作”但接收器进程将立即使用缓冲区,因此我希望它们阻塞直到真正接收到缓冲区.
看起来我应该能够接收到MPI :: Recv的消息,即使它们是用MPI :: Isend发送的,但我想知道我是否遗漏了什么?
一点简单的伪代码
if( rank == 0 ){ int r; for ( int i = 0; i < n; i++ ){ // DO SOME stuFF HERE... request.Wait(status); request2.Wait(status); request3.Wait(status); r = i; memcpy( key,fromKey(i),...); memcpy( trace,fromTrace(i),...); request = MPI::COMM_WORLD.Isend( &r,1,MPI::INT,node,tag ); request2 = MPI::COMM_WORLD.Isend( key,10,tag ); request3 = MPI::COMM_WORLD.Isend( trace,nBytes@R_891_10586@l,MPI::BYTE,tag ); // DO SOME MORE stuFF HERE. } r = -1; request = MPI::COMM_WORLD.Isend( &r,tag ); // Carry on ... } else { int r = -1; MPI::COMM_WORLD.Recv( &r,tag,status ); while( r >= 0 ){ MPI::COMM_WORLD.Recv( &key,status ); memcpy( saveKey,key,...); MPI::COMM_WORLD.Recv( &trace,status ); memcpy( saveTrace,trace,...); MPI::COMM_WORLD.Recv( &r,status ); }
以上是大佬教程为你收集整理的我是否需要为MPI :: Isend提供相应的MPI :: Irecv?全部内容,希望文章能够帮你解决我是否需要为MPI :: Isend提供相应的MPI :: Irecv?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。