在Fortran

时间:2016-06-30 13:25:00

标签: fortran mpi openmp ipc zeromq

目前我有以下用例。

  1. Master启动并读入控制文件。此文件包含有关在此运行中应使用哪些Slave的信息。每个用户都可以编写自己的Slaves并将其添加到列表中。每次运行中使用的奴隶各不相同。在每次运行之间重新编译Master以添加/减去从属是不可行的。
  2. Master将下一个Slave所需的数据打印到文件中。
  3. Master启动Slave(一个slave是一个单独的程序),它依次读取文件中的数据,处理它,并将其打印回文件。
  4. Master从文件中读取数据。
  5. 如果完成任务列表,Master会将结果写入文件并停止,否则将启动下一个任务,并且该过程将返回到2.
  6. 如你所见,这不是超级有效的。每次启动主站或从站时执行的读/写是流程中的瓶颈。特别是因为列表中通常有+25个任务,每个任务都有一个单独的Slave来执行任务。因此,我一直在考虑离开"文件"系统并迁移到更好的东西。我尝试过使用稍微好一点的管道和套接字(在C语言中编写一个由我的Fortran程序调用的客户端/服务器通信系统)。我也研究了OpenMP,MPI和ZeroMQ(我没有让ZeroMQ与Fortran一起工​​作),结果各不相同。有人可能会争辩说,每次添加或减少Slave时都应该重写整个程序,但我们每次都要讨论数百万行必须重新编译的行。

    现在,我转向社区提出问题:鉴于我上面所说的内容(每个Slave彼此调用并且只通过Master进行通信(即Master - > Slave1 - > Master - > Slave2) - > Master - > SlaveN - > Master))在Master和Slaves之间进行任何沟通方式都会有多少或更不明智?

    干杯

0 个答案:

没有答案
相关问题