Действия
MPI примеры¶
Запуск MPI процесса на каждые n ядер¶
Иногда нужно запустить mpi процессы так, чтобы у каждого процесса в распоряжении оказалось n ядер. По умолчанию mpiexec запускает по одному процессу на каждое ядро выделенное планировщиком. Для того чтобы добиться требуемого поведения рекомендуется использовать следующую конструкцию в скрипте запуска:
#!/bin/bash
module purge
module load openmpi/pgi
cpus_per_proc=2
node_count=()
node_list=""
tasks=$(($PBS_NP/$cpus_per_proc))
actual_tasks=0
echo "Trying to run $tasks mpi tasks, $cpus_per_proc cores per task" >&2
if [ $PBS_NP -ne $(($tasks * $cpus_per_proc)) ] ; then
echo "Warning! Some cores will not be used. Consider better resource request." >&2
fi
for node in `cat $PBS_NODEFILE` ; do
if [ -z ${node_count[$node]} ] ; then
node_count[$node]=0
fi
node_count[$node]=$(( ${node_count[$node]} + 1 ))
if [ ${node_count[$node]} -eq $cpus_per_proc ] ; then
node_list=${node_list}${node}" "
node_count[$node]=0
actual_tasks=$(($actual_tasks+1))
fi
done
if [ $actual_tasks -ne $tasks ] ; then
echo "Can't find enough nodes!" >&2
echo "Only $actual_tasks mpi tasks can be run on current allocation." >&2
echo "List of allocated nodes:" >&2
cat $PBS_NODEFILE >&2
exit 13
fi
echo "Will run $tasks mpi processes on nodes: $node_list" >&2
mpiexec -np $tasks --cpus-per-proc $cpus_per_proc -nooversubscribe $PBS_O_WORKDIR/test
Ключевым моментом является использование опции
--cpus-per-proc
. Кроме того данный скрипт проверяет, что выделенные узлы подходят для запуска такой задачи.
Обновлено Владимир Кихтенко больше 12 лет назад · 1 изменени(я, ий)