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

标签 c++ bash shell scripting

我是一名业余 C++ 程序员,正在尝试学习基本的 shell 脚本。我有一个复杂的 C++ 程序,它当前从 Parameters.h 中读取不同的参数值,然后按顺序对每个参数值执行一个或多个模拟。这些模拟需要很长时间才能运行。由于我有一个可用的集群,我想有效地并行化这项工作,在单独的处理器上为每个参数值运行模拟。我假设为此目的学习 shell 脚本技术比 OpenMPI 更容易。我的集群在 LSF 平台上运行。

我如何在 Bash 中编写我的输入参数,以便它们分布在多个处理器中,每个处理器都使用该值执行程序?我想避免交互式提交。理想情况下,我会将输入保存在 Bash 读取的文本文件中,并将两个参数传递给每个作业:一个实际参数值和一个参数 ID。

提前感谢任何线索和建议。


我的解决方案

GNU Parallel 看起来很漂亮,但我最终(在 IT 管理员的帮助下)编写了一个简单的 bash 脚本来回显屏幕三个输入(治疗标识符、治疗/参数值和模拟标识符):

#!/bin/bash 
j=1
for treatment in <code>cat treatments.txt</code>; do
  for experiment in <code>cat simulations.txt</code>; do
   bsub -oo <code>tr_${j}_sim_${experiment}_screen</code> -eo <code>tr_${j}_sim_${experiment}_err</code> -q short_serial "echo \"$j $treatment $experiment\" | ./a.out"
  done
  let j=$j+1 
done

文件 treatments.txt 包含我想要改变的值的列表,simulations.txt 包含我想要的所有模拟标识符的列表运行(目前只有 1,...,s,其中 s 是每次治疗我想要的模拟总数),治疗的索引为 1...j

最佳答案

也许 checkout :http://www.gnu.org/software/parallel/

编辑:

或者,查看 xargs 的 -P 参数,例如:

time echo {1..5} | xargs -n 1 -P 5 sleep

关于c++ - 用于为并行 C++ 作业生成输入的 BASH 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673584/

相关文章:

c++ - 从已编译的应用程序创建 Windows 服务

c++ - 插入已排序的 vector<unique_ptr<pair<>>> 时避免堆分配

java - 创建一个 shell 脚本来运行 Java 程序

linux - 有什么办法可以保留文件名(+日期小时)

linux - 如何根据行字段为每一行添加前缀

python - 如何在 powershell 中搜索字符串并删除该行?

c++ - 如何获得 future 值(value)?

C++:使用 getline 从文本文件输入要么跳过第一行,要么弄乱其余部分

linux - 使用 shell 脚本运行配置单元查询

shell - hdfs 权限被拒绝