Я программист-любитель C ++, пытающийся научиться основам сценариев оболочки.У меня есть сложная программа на C ++, которая в настоящее время читает значения различных параметров, начиная с Parameters.h
, а затем последовательно выполняет одно или несколько моделирований с каждым значением параметра.Эти симуляции требуют много времени для запуска.Поскольку у меня есть доступный кластер, я бы хотел эффективно распараллелить это задание, запустив симуляции для каждого значения параметра на отдельном процессоре.Я предполагаю, что для этой цели легче изучить методы сценариев оболочки, чем OpenMPI.Мой кластер работает на платформе LSF.
Как я могу записать свои входные параметры в Bash, чтобы они распределялись между несколькими процессорами, каждый из которых выполняет программу с этим значением?Я хотел бы избежать интерактивной подачи.В идеале, у меня были бы входные данные в текстовом файле, который читает Bash, и я бы передавал два параметра каждому заданию: фактическое значение параметра и идентификатор параметра.
Заранее спасибо за любые выводы ипредложения.
мое решение
GNU Parallel выглядит не очень красиво, но в итоге (с помощью ИТ-администратора) я написал простой скрипт bash, которыйвыводит на экран три входа (идентификатор обработки, значение обработки / параметра и идентификатор моделирования):
<code>#!/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
.