BASH脚本,用于生成并行C++;工作 我是一个业余的C++程序员,试图学习基本的shell脚本。我有一个复杂的C++程序,它从不同的参数值中读取代码,参数为h ,然后按顺序执行每个参数值的一个或多个模拟。这些模拟需要很长时间才能运行。因为我有一个可用的集群,所以我想有效地并行化这个任务,在一个单独的处理器上运行每个参数值的模拟。我假设学习shell脚本技术比OpenMPI更容易。我的集群运行在LSF平台上

BASH脚本,用于生成并行C++;工作 我是一个业余的C++程序员,试图学习基本的shell脚本。我有一个复杂的C++程序,它从不同的参数值中读取代码,参数为h ,然后按顺序执行每个参数值的一个或多个模拟。这些模拟需要很长时间才能运行。因为我有一个可用的集群,所以我想有效地并行化这个任务,在一个单独的处理器上运行每个参数值的模拟。我假设学习shell脚本技术比OpenMPI更容易。我的集群运行在LSF平台上,c++,bash,shell,scripting,C++,Bash,Shell,Scripting,如何在Bash中编写输入参数,使它们分布在多个处理器中,每个处理器都使用该值执行程序?我希望避免交互式提交。理想情况下,我会将输入保存在Bash读取的文本文件中,并向每个作业传递两个参数:一个实际参数值和一个参数ID 提前感谢您提供的任何线索和建议 我的解决方案 GNU Parallel看起来确实很灵巧,但我最终(在IT管理员的帮助下)编写了一个简单的bash脚本,该脚本响应屏幕上的三个输入(治疗标识符、治疗/参数值和模拟标识符): 文件treatments.txt包含我想要改变的值的列表,

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

提前感谢您提供的任何线索和建议


我的解决方案

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


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

我的最佳尝试是将程序的多个实例放在后台,让操作系统的调度程序接管,将它们放在不同的处理器上。AFAIK在任何shell中都无法指定给定进程应该在哪个处理器上运行

大意是:

#!/bin/sh

for arg in foo bar baz; do
   ./your_program "$arg" &
done

假设您希望使用输入并行运行程序
simulate
bar
baz
qux
,那么最简单的方法是:

inputs="foo bar baz quux"

# Launch processes in the background with &
children=""
for x in $inputs; do
    simulate "$x" > "$x.output" &
    $children = "$children $!"
done

# Wait for each to finish
for $pid in $children; do
    wait $pid
done

for x in $inputs; do
    echo "simulate '$x' gave:"
    cat "$x.output"
    rm -f "$x.output"
done
问题在于,所有模拟都是同时启动的,因此,如果您的输入数量远大于您的CPU/内核数量,它们可能会淹没系统。

请检查:

编辑:

或者,检查xargs的-p参数,例如:

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

拥有
Parameters.h
文件是否意味着输入值是硬编码的,并在可执行文件中编译?或者在运行时编程解析该文件?当前,输入值硬编码为constdouble-TREATMENTS[NUM_-TREATMENTS]={…};,但我当然可以在运行时将它们作为输入读入。这在OpenMPI集群中有效吗?您的代码假设内核知道集群,并且可以相应地迁移进程。我以为只有MOSIX支持这样的假设。我没有集群的经验,谢谢。我正在与集群管理员联系,看看是否支持它,并开始学习教程。如果一切顺利的话(至少在理论上),我会接受这个答案。谢谢——我用我的bash脚本做了类似的事情。我已经在上面粘贴了我的脚本。
time echo {1..5} | xargs -n 1 -P 5 sleep