【发布时间】:2015-10-19 21:05:48
【问题描述】:
我想加快我在 linux 中的计算速度?例如,我有以下脚本:example.sh
#!/bin/bash
n1=1; n2=1000
while [ $n1 -le $n2 ]
do
cat << EOF > test.f
open (1,file='$n1.txt',form='formatted', status='unknown')
write (1, *) "Hello World!"
stop;end
EOF
gfortran test.f
./a.out
(( n1++ ))
done
如果我执行上面的example.sh,那么它将执行1000次。我原来的 fortran 程序很小,执行一次大约需要 3 分钟。所以完成我的脚本需要大约 2 天的时间。那么如何使用多 CPU 来加快速度呢?我的系统显示 CPU:8。
【问题讨论】:
-
你正在通过脚本编写一个fortran程序,编译这个程序,然后运行它?这必须是你这样做的最糟糕的方式。将您的循环和代码全部放在一个 fortran 程序中,该程序采用输入参数并编译/运行一次。然后我们可以谈谈如何实现 MPI。
-
谢谢@NoseKnowsAll。是的,我的脚本编写了一个 fortran 程序,编译然后运行。因为相同的 fortran 程序将针对许多不同的文本文件执行。所以你的意思是我应该用fortran代码写所有东西?
-
是的。至少,编写一个接受文件名的 fortran 程序。编译一次。运行您的脚本循环,它只会更改您输入到程序中的文件名。你应该只编译一次程序。
-
之后的下一步是编写一个 fortran 程序,该程序接受一个文件名,该文件名对应于包含您要运行的所有文件名的 ASCII 文件。然后,您的循环将位于 fortran 程序的内部,理论上您可以使用 MPI 或 OpenMP 实现该循环。
-
@NoseKnowsAll Unix 的方式是让程序将文件作为参数处理,而不是读取文件列表。这允许“自然”使用带有 globbing 的 shell。而且 Fortran 现在有了正确的读取参数的方法,因此非常适合。
标签: linux shell unix parallel-processing mpi