SGE / UGE / etc..стандартизированный способ отправки заданий OpenMP на несколько ядер?
Я ищу способ отправить задание OpenMP планировщику Grid Engine, указав при этом количество ядер, на которых оно должно выполняться. Что-то эквивалентное варианту LSF -n или варианту PBS -l узлов=[count].
Когда я ищу на этом, я вижу кучу ответов, определяющих синтаксис, как " - pe threaded [количество ядер]". В этих ответах нет упоминания о необходимости создания параллельной среды, называемой"потоковой". Но когда я пробую этот синтаксис, он терпит неудачу, говоря, что запрошенная параллельная среда threaded не существует. И когда я набираю "qconf-spl", единственным результатом, который я получаю, является"make". Итак-должна ли эта" потоковая " параллельная среда существовать по умолчанию, или это то, что должно быть создано вручную в кластере?
Если он должен быть создан вручную, существует ли какой-либо другой синтаксис для отправки заданий нескольким ядрам, который не зависит от настраиваемого именования в кластере? Это относится к сторонней программе, которая подчиняется кластеру, так что Я не хочу полагаться не только на клиента, создавшего это ЧП, но и на то, что он назвал его так же, и т. д... Я надеялся, что вариант-l может иметь что-то, но я не смог найти никакой перестановки, чтобы достичь этого.
1 ответ:
Если вы получаете только "make" как возможную параллельную среду, то это означает, что в вашем кластере нет параллельных сред.
Существует два решения вашей проблемы, в зависимости от этих двух ситуаций:
A) у вас есть доступ root/admin к кластеруБ) вы не
В случае B, хорошо попросите вашего администратора создать параллельную среду. В случае а необходимо создать параллельную среду. Чтобы создать новую параллельную среду, необходимо тип (требуется привилегия root/admin):
qconf -ap <pe_name>
И редактор по умолчанию будет начинаться с файла pe_conf по умолчанию, который вы должны отредактировать. Если вам нужно настроить только параллельную среду openMP, вы можете использовать следующие опции:
pe_name smp slots 9999 user_lists NONE xuser_lists NONE start_proc_args /bin/true stop_proc_args /bin/true allocation_rule $pe_slots control_slaves FALSE job_is_first_task FALSE urgency_slots min accounting_summary TRUE
И для параллельной среды MPI:
pe_name mpi slots 9999 user_lists NONE xuser_lists NONE start_proc_args /opt/sge/mpi/startmpi.sh $pe_hostfile stop_proc_args /opt/sge/mpi/stopmpi.sh allocation_rule $fill_up control_slaves FALSE job_is_first_task TRUE urgency_slots min accounting_summary TRUE
Как вы заметили, в последнем случае вы укажете SGE на правильный сценарий инициализации и сценарий завершения работы для вашей конфигурации MPI. В первом случае вы просто указываете на
/bin/true
.В
allocation_rule
отличаются в этом примере.$fill_up
означает, что SGE заполнит любой процессор, который он может найти, частями задания MPI, в то время как для конфигурацииsmp
вы просто выделяете правильное количество слотов на той же машине, т. е.$pe_slots
.Если вы используете MPI, ваши узлы должны быть соединены с помощью высокопроизводительного коммутатора, такого какinfiniband , иначе ваши рабочие места будут тратить гораздо больше времени на общение, чем на вычисления.
Править: о, Кстати: правильный synthax, чтобы представить работу с a параллельная среда эффективно:
qsub -pe <pe_name> <nb_slots>
ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: окончательный ответ на этот вопрос содержится в комментариях ниже. На практике SGE не может обрабатывать многопоточные задания, если в кластере не задана параллельная среда (PE). Если у вас нет прав администратора в кластере, вы должны либо угадать для правильного PE, который должен использоваться с помощью
qconf -spl
и проверить различные PEs с помощьюqconf -sp <pe_name>
, либо добавить опцию в своем программном обеспечении, которая позволяет пользователям указывать PE это нужно использовать.В противном случае, т. е. если в кластере нет PE, вы не можете использовать параллельную версию вашего программного обеспечения.
См. В комментариях для получения дополнительной информации.