SGE/UGE/etc..standized ли способ отправки заданий OpenMP на несколько ядер?
Я ищу способ отправить задание OpenMP в планировщик Grid Engine, указав при этом количество ядер, на которых оно должно работать. Что-то, эквивалентное опции LSF -n, или опции -l PBS -s=[count].
Когда я ищу по этому вопросу, я вижу кучу ответов с указанием синтаксиса, например "-pe threadaded [число ядер]". В этих ответах нет упоминания о необходимости создания параллельной среды, называемой "поточная". Но когда я пытаюсь использовать этот синтаксис, он терпит неудачу, говоря, что запрошенная параллельная среда в потоке не существует. И когда я набираю "qconf -spl", единственный результат, который я получаю, это "make". Итак, должна ли эта "многопоточная" параллельная среда существовать по умолчанию или это что-то, что должно быть создано вручную в кластере?
Если он должен быть создан вручную, есть ли другой синтаксис для отправки заданий нескольким ядрам, который не зависит от настраиваемого именования в кластере? Это для сторонней программы, отправляющей данные в кластер, поэтому я не хочу полагаться не только на клиент, создавший этот pe, но и присвоив ему то же имя и т. Д. Я надеялся, что опция -l может есть что-то, но я не смог найти никакой перестановки этого для достижения этого.
1 ответ
Если вы получаете только "сделать" как возможную параллельную среду, то это означает, что в вашем кластере не заданы параллельные среды.
Есть два решения вашей проблемы, в зависимости от этих двух ситуаций:
А) у вас есть права доступа root/admin к кластеру
Б) ты не
В случае B, попросите вашего администратора создать параллельную среду. В случае A вы должны создать параллельную среду. Чтобы создать новую параллельную среду, вы должны набрать (требуется привилегия 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, иначе ваши задания будут тратить гораздо больше времени на общение, чем на вычисления.
РЕДАКТИРОВАТЬ: о, кстати: правильный синтакс, чтобы представить работу в параллельной среде эффективно:
qsub -pe <pe_name> <nb_slots>
ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: окончательный ответ на вопрос приводится в комментариях ниже. На практике SGE не может обрабатывать многопоточные задания, если в кластере не установлена параллельная среда (PE). Если у вас нет прав администратора в кластере, вы должны либо угадать правильный PE, который нужно использовать, используя qconf -spl
и проверять различные PE с qconf -sp <pe_name>
или добавьте параметр в своем программном обеспечении, который позволяет пользователям указывать PE, который должен использоваться.
В противном случае, т. Е. Если в кластере нет PE, вы не сможете использовать параллельную версию программного обеспечения.
Смотрите комментарии для получения дополнительной информации.