【发布时间】:2020-02-05 08:49:06
【问题描述】:
我有一个 fortran 模拟程序,它从 .dat 获取输入。这个文件有 100.000 行,需要很长时间才能运行。该程序采用第一行,运行所有模拟并将结果写入 .out 并传递到下一行。我有一台 16 个 cpu 的计算机,那么我该如何将我的数据分成 16 个部分并在每个 cpu 中分别运行呢?我正在使用 ubuntu 的机器上运行。每一行都完全独立于另一行。 例如我的数据是 HeadData10000.dat,那么我有一个文件 Simulation.ini,在这种情况下输入数据的名称为:HeadData10000.dat,输出数据的名称。所以文件 Simulation.ini 会是这样的
HeadData10000.dat
outputdata.out
然后现在我有两台计算机,所以我将 HeadData10000.dat 分成两个文件,然后为每个输入数据执行两个 Simulation.ini,然后在每台计算机上像这样运行它:./simulation.exe<.>
【问题讨论】:
-
每一行的处理是否完全独立于前几行的处理?我的意思是,如果数据文件中的行以相反的顺序输入,它仍然有效吗?
-
我不知道如何在 Fortran 中完成,但通常可以通过使用 threads 和 thread pools 来解决(如果每个输入行的数据是独立的)。
-
如果每一行的处理独立于前面的行,你可以很方便地使用GNU Parallel,这里是优秀的PDF...zenodo.org/record/1146014/files/…你需要
--pipe-part参数.请提供几行数据文件以及如何为其中一行运行 fortran 代码。编辑您的问题,不要将代码放入 cmets。谢谢。