Parallel processing 多核并行计算,用于与程序一起独立运行的数据

Parallel processing 多核并行计算,用于与程序一起独立运行的数据,parallel-processing,Parallel Processing,我有一个用fortran编写的模拟程序,它从.dat获取输入。这个文件有100.000行,这需要很长时间才能运行。程序取第一行,运行所有模拟,并写入一个。输出结果并传递到下一行。我有一台有16个cpu的计算机,那么我如何将数据分成16个部分,并在每个cpu中分别运行它呢?我在一台有ubuntu的机器上运行。它完全独立于每条线路。 例如,我的数据是HeadData10000.dat,那么我有一个文件simulation.ini,其中包含本例中输入数据的名称:HeadData10000.dat和输出

我有一个用fortran编写的模拟程序,它从.dat获取输入。这个文件有100.000行,这需要很长时间才能运行。程序取第一行,运行所有模拟,并写入一个。输出结果并传递到下一行。我有一台有16个cpu的计算机,那么我如何将数据分成16个部分,并在每个cpu中分别运行它呢?我在一台有ubuntu的机器上运行。它完全独立于每条线路。 例如,我的数据是HeadData10000.dat,那么我有一个文件simulation.ini,其中包含本例中输入数据的名称:HeadData10000.dat和输出数据的名称。因此文件simulation.ini将如下所示

HeadData10000.dat
outputdata.out

现在我有两台计算机,所以我将我的HeadData10000.dat拆分为两个文件,对每个输入数据执行两个simulation.ini,并在每台计算机中这样运行:./simulation.exe假设100000个作业的列表称为
“jobs.txt”
,如下所示:

JobA
JobB
JobC
JobD
您可以运行以下命令:

parallel 'printf "{}\n{.}.out" | ./simulation.exe' < jobs.txt 
如果有多台服务器可用,请查看使用
-S
参数将作业分配到GNU Parallel以将作业分配到机器上。另外,查看用于获取进度报告的
--eta
--bar
参数

我使用
printf“line1\n line2”
生成两行输入,以避免创建和删除100000个文件


默认情况下,GNU Parallel将保持每个CPU核运行一个作业,因此在16核机器上始终会有16个作业运行,但是如果您想使用
Parallel-j 8
,可以将其更改为8。您还可以指定要在第二台(及后续)计算机上运行的作业数。

每一行的处理是否完全独立于前一行的处理?我的意思是,如果数据文件中的行是以相反的顺序输入的,它还会工作吗?我不知道如何在Fortran中实现,但通常可以通过使用线程和线程池(如果每个输入行的数据是独立的)来解决这一问题。如果每一行的处理独立于前面的行,你可以很容易地使用GNU并行,优秀的PDF在这里。。。您需要
--管道零件
参数。请给出数据文件的几行,以及如何为其中一行运行fortran代码。编辑您的问题,不要在注释中添加代码。谢谢。我的回答解决了你的问题吗?如果是这样,请考虑接受它作为您的答案-点击空心蜱/支票旁边的选票计数。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢服务器没有安装GNU,因此我无法使用此命令。不过,我在自己的机器上试用过,非常有用,谢谢!请参阅GNU Parallel的作者Ole Tange提供的无需root访问的10秒GNU Parallel的简易安装。。。谢谢,但问题是我没有在服务器上安装任何东西的权限。请阅读-尤其是关于
--嵌入
的部分。
parallel --dry-run 'printf "{}\n{.}.out" | ./simulation.exe' < jobs.txt 
printf "JobA\nJobA.out" | ./simulation.exe
printf "JobB\nJobB.out" | ./simulation.exe
printf "JobC\nJobC.out" | ./simulation.exe
printf "JobD\nJobD.out" | ./simulation.exe