我正在写一个项目,它首先指定根进程读取一个大型数据文件并进行一些计算,然后将计算结果广播给所有其他进程。这是我的代码:(1)它使用nsample=30000从txt文件中读取随机数(2)通过某种规则生成dens_ent矩阵(3)广播到其他进程。顺便说一句,我在gfortran中使用OpenMPI。(dens_ent,N,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierr)
问题出现了:(1) IF (
通过使用并发队列,我可以很容易地处理收集本地请求任务,并且MPI本机支持将异步任务入队。// ... erase the freed MPI_Request from requests类似地,如果我只是让mpi worker等待并发队列中的新任务可用,然后使用MPI_Testany之类的东西轮询MPI响应,那么在最好的情况下,响应可能需要很长时间才能真正到达本地worker,而在最坏的情况下,mpi worker将死锁,因为它正在等待本地任务,
然后,我决定用mpi4py编写它,以运行多个进程。该程序可以工作,但它返回的pi值与最初的python版本不同。当我更多地研究这个问题时,我发现当我用更多的处理器运行它时,它会返回一个不太准确的值。为什么MPI版本会用更多的处理器来改变结果?另外,使用广播而不是发送大量单独的信息更有意义吗?如果广播更有效,我将如何实施它?#!/apps/moose/miniconda/bin/python
from <e