所以我在超级计算机上使用高斯09(计算化学软件)做了很多工作。
要提交工作,请使用以下命令行
g09sub input.com -n 2 -m 4gb -t 200:00:00
其中n是使用的处理器数量,m是请求的内存,t是请求的时间。
我想知道是否有一种编写脚本的方法,该脚本将提交文件夹中的前10个.com文件,然后在完成后再提交另一个.com文件。
我有一个脚本可以一次提交一个文件夹中的所有.com文件,但是我可以限制在使用的超级计算机上可以排队的作业数量。
当前脚本如下
#!/bin/bash
#SBATCH --partition=shared
for i in *.com
do g09sub $i -n 2 -m 4gb -t 200:00:00
done
因此1.com,2.com,3.com等将同时提交。
我想要的是全部拥有1.com,2.com,3.com,4.com,5.com,6.com,7.com,8.com,9.com和10.com同时开始,然后每个完成都有另一个.com文件开始。因此,任何一个文件夹中最多只能同时运行10个作业。
如果有用,则每个作业在完成后都会创建一个.log文件。
尽管我不确定它是否重要,但超级计算机使用PBS排队系统。
答案 0 :(得分:2)
尝试xargs
或GNU parallel
xargs
ls *.com | xargs -I {} g09sub -P 10 {} -n 2 -m 4gb -t 200:00:00
说明:
-I {}
告诉{}
代表输入文件名-P 10
一次设置最多职位parallel
ls *.com | parallel -P 10 g09sub {} -n 2 -m 4gb -t 200:00:00 # GNU parallel supports -P too
ls *.com | parallel --jobs 10 g09sub {} -n 2 -m 4gb -t 200:00:00
说明:
{}
代表输入文件名--jobs 10
一次设置最多职位答案 1 :(得分:1)
不确定超级计算机的可用性,但是GNU bash手册底部的3.2.6 GNU Parallel下提供了一个parallel
示例。
Bash中没有内置并行运行命令的方法。 GNU Parallel是用于执行此操作的工具。
...
最后,可以使用Parallel并行运行一系列Shell命令,类似于“ cat文件| bash’。获取文件名列表,创建一系列shell命令以对其进行操作并将命令列表馈送到shell并不少见。并行可以加快速度。假设该文件包含一个外壳命令列表,每行一个,
parallel -j 10 < file
将使用shell评估命令(因为没有显式命令 (作为参数提供),以每次10个shell作业的块的形式提供。
在我无法使用该选项的情况下,使用jobs
函数的效果很差。例如:
for entry in *.com; do
while [ $(jobs | wc -l) -gt 9 ]; do
sleep 1 # this is in seconds; your sleep may support 'arbitrary floating point number'
done
g09sub ${entry} -n 2 -m 4gb -t 200:00:00 &
done
$(jobs | wc -l)
计算${cmd} &