Варьирование входных параметров в разных процессорах

У меня есть программа с различными входными параметрами, которые должны выполнять те же функции в программе. Как я могу заставить каждый набор Входных параметров работать на разных процессорах в сетке. Пожалуйста, помогите, если у вас есть хоть какая-то идея. Было бы очень помочь! Программа на C ++

1

Решение

Это зависит от того, какой менеджер ресурсов кластера вы используете. Большинство поддерживают так называемые Массив заданий, где выполняется много экземпляров одного и того же задания, и через среду передается параметр, обычно простой целочисленный индекс текущего задания. Это то, что мы называем платформой параллельных вычислений для бедного человека 🙂

Так как я только широко использовал Sun Grid Engine (сейчас Oracle Grid Engine, также с открытым исходным кодом вилки под именем Open Grid Scheduler а также Сын Grid Engine существует) и Платформа LSF (теперь IBM LSF, также доступный как очень похожий с открытым исходным кодом openlava планировщик заданий), я могу только написать о них (и в некоторой степени о Torque).

С SGE работа массива может выглядеть так:

#!/usr/bin/env zsh
#$ -cwd
#$ -N jobname
#$ -t 1-100
## Other resource requirements
#$ -l h_rt=0:30:00
#$ -l h_mem=1200M
#$ -pe openmp 12

export OMP_NUM_THREADS=12
density=$((SGE_TASK_ID * 0.06))       # zsh specific
/path/to/executable -d density < input_${SGE_TASK_ID} > output_${SGE_TASK_ID}

Здесь -t 1-100 параметр для qsub создает задание массива из 100 задач, пронумерованных от 1 в 100, SGE передает номер текущей задачи в SGE_TASK_ID переменная окружения. Вы можете использовать его для выбора подходящего входного файла или для вычисления других входных параметров. SGE автоматически добавляет суффикс к выходным файлам задания и файлам ошибок с идентификатором задачи. Обратите внимание, что использование литералов с плавающей точкой в $(()) по-видимому zsh-конкретный.

Задания в массиве в Torque создаются точно так же, как в SGE через -t параметр. С версиями Torque до 2.3 -t принимает один аргумент — количество задач, а затем номера задач от 0 на это число минус 1. Начиная с Torque 2.3, можно указать диапазоны, как с SGE:

#!/usr/bin/env zsh
#PBS -N jobname
#PBS -l nodes=1,walltime=00:30:00
#PBS -t 1-100

cd ${PBS_O_WORKDIR}

export OMP_NUM_THREADS=12
density=$((PBS_ARRAYID * 0.06))       # zsh specific
/path/to/executable -d density < input_${PBS_ARRAYID} > output_${PBS_ARRAYID}

Основное отличие от SGE состоит в том, что переменная среды идентификатора задачи называется PBS_ARRAYID, Увидеть Представление работы часть в руководстве по крутящему моменту.

С LSF работа массива может выглядеть так:

#!/usr/bin/env zsh

#BSUB -J jobname[1-100]
# Have separate error file for each job
#BSUB -e error_%I
# Other resource requirements, e.g.
#BSUB -W 0:30
#BSUB -M 1200
#BSUB -n 1
#BSUB -x

export OMP_NUM_THREADS=12
density=$((LSF_JOBINDEX * 0.06))       # zsh specific
/path/to/executable -d density < input_${LSF_JOBINDEX} > output_${LSF_JOBINDEX}

Здесь добавление спецификации диапазона [1-100] после имени задания создает массив заданий. LSF передает идентификатор задачи через LSF_JOBINDEX переменная окружения. Вы можете использовать его точно так же, как в случае с SGE.

1

Другие решения

Вам необходимо указать, какую параллельную парадигму вы используете. MPI, OpenMP, что-то другое.

Обычно применяемый подход заключается в использовании какого-либо канала связи и отправке векторов параметров из «основного» процесса во все остальные.

Чаще всего широковещательные параметры передаются, когда они совпадают, но основная задача может выполнять итерацию по набору из них и отправлять каждую из них друг другу через коммуникатор 1: 1.

Иногда параметры подготавливаются в одном или нескольких файлах, и каждая задача считывает свои собственные установленные параметры.

Все зависит от сайта, на котором развернуто ваше приложение, и от масштаба работы. То есть если у вас есть 1 миллион задач для работы на суперкомпьютере, файловый подход может быть плохой идеей.

0

По вопросам рекламы [email protected]