Sar*_*rah 2 c++ bash shell scripting
我是一个业余的C++程序员,试图了解基本的shell脚本.我有一个复杂的C++程序,当前从中读取不同的参数值Parameters.h
,然后按顺序执行每个参数值的一个或多个模拟.这些模拟需要很长时间才能运行.由于我有一个可用的集群,我想有效地并行化这个作业,在一个单独的处理器上运行每个参数值的模拟.我假设为了这个目的,比OpenMPI更容易学习shell脚本技术.我的集群在LSF平台上运行.
如何在Bash中编写输入参数,以便它们分布在多个处理器中,每个处理器都使用该值执行程序?我想避免互动提交.理想情况下,我在Bash读取的文本文件中有输入,并且我将两个参数传递给每个作业:实际参数值和参数ID.
提前感谢任何线索和建议.
我的解决方案
GNU Parallel确实看起来很漂亮,但我最终(在IT管理员的帮助下)编写了一个简单的bash脚本来回显屏幕三个输入(治疗标识符,治疗/参数值和模拟标识符):
#!/bin/bash
j=1
for treatment in cat treatments.txt
; do
for experiment in cat simulations.txt
; do
bsub -oo tr_${j}_sim_${experiment}_screen
-eo tr_${j}_sim_${experiment}_err
-q short_serial "echo \"$j $treatment $experiment\" | ./a.out"
done
let j=$j+1
done
该文件treatments.txt
包含我想要改变的值simulations.txt
的列表,包含我想要运行的所有模拟标识符的列表(当前只有1,...,s,其中s是我想要的模拟总数每个治疗),以及处理被索引1 ... j
.
也许退房:http://www.gnu.org/software/parallel/
编辑:
或者,查看xargs的-P参数,例如:
time echo {1..5} | xargs -n 1 -P 5 sleep
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
741 次 |
最近记录: |