用于生成并行C++作业输入的BASH脚本

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.