linux - 如何在 Linux 中使用多 CPU 来加快计算速度

标签 linux shell unix parallel-processing mpi

我想知道如何在 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。

最佳答案

GNU Parallel做得很好。

GNU Parallel 可用于使用一台或多台计算机并行执行作业。这消除了管理进程的需要,并为我们提供了一种并行执行二进制文件的方法。

因此,您的脚本(让我们称之为 test.sh)变为

#!/bin/bash
n1=$1
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

您现在可以使用“parallel”调用脚本 test.sh,如下所示。

seq 1000 | parallel -j 8 --workdir $PWD ./test.sh {}

-j 8 指定要运行的作业数。这将启动 ./test.sh 1, ./test.sh 2, ./test.sh 3 ... ./test.sh 1000 并确保其中 8 个并行运行。

关于linux - 如何在 Linux 中使用多 CPU 来加快计算速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691047/

相关文章:

linux - 将 Bash 变量传递给 awk 脚本

c - 在 C 中实现 ls -al 命令

linux - 以编程方式区分 DDR3

linux - 将多行的输出列分配给不同的变量?

bash - 对于不引用可执行文件的命令,等同于 "which"的是什么?

bash - 你如何在 UNIX/BASH 中扩展变量?

linux - 使用 Perl/AWK 将两行合并为一行

unix - 删除文件中的非ASCII字符

php - 跟踪用户的带宽

swift - 查看 SSH 连接是否成功