2016-10-06 15 views
1

У меня есть дилемма оптимизации последовательности заданий сетки SGE, которые имеют определенную зависимость от них, но не выяснили правильный способ указания -hold_jid.Зависимость задания сетки SGE

Предположим, у нас есть рабочие места, такие как:

job1: qsub -N job1 ... 
job2: qsub -N job2 -hold_jid job1 
job3: qsub -N job3 -hold_jid job2 

то порядок исполнения гарантированно будет job1-> job2-> job3.

Однако предположим, что в сложной job2, есть встроенный ПГОС работу, скажем, job2a:

job2a: qsub -N job2a.${timestamp_of_submission} 

В этом случае, я не понял, способ, чтобы убедиться, пробег job3 после job2a завершается.

attempt1:

qsub -N job3 -hold_jid job2 ... 

Тогда, конечно, job3 ждет, пока job2 заканчивается, однако, нет никакой гарантии, что job3 будет выполняться после того, как job2a, что и я хотел.

attempt2:

qsub -N job3 -hold_jid job2a* ... 

затем job3, кажется, выполняется сразу, так как job2a не отображается в массиве заданий, пока job2 не начнет работать. Примечание. Я использовал *, чтобы избежать указания точного имени job2a, потому что временная метка представления трудно догадаться заранее.

Любой знает способ достижения цепочки зависимостей как job1-> job2-> job2a-> job3? Спасибо!

ответ

0

Вы пробовали давать -hold_jid список Id работы:

qsub -N job2 
qsub -N job2a 
qsub -N job3 -hold_jid job2,job2a.${timestamp_of_submission} 

В качестве альтернативы, захватывая Id задания должны также работать:

job2a=$(qsub -N job2a.${timestamp_of_submission} | perl -p -e "s/Your job (\d+) .*/\1/g;") 
qsub -N job3 -hold_jid job2,${job2a} 

EDIT

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

Так что я хотел бы предложить следующее:

job2list=$(qsub -N job2 | perl -p -e "s/Your job (\d+) .*/\1/g;") 

Вышеприведенные хранит идентификатор задания для задания 2.

Тогда каждый раз, когда вы отправляете работу job2a типа сделать:

job2a=$(qsub -N job2a.${timestamp_of_submission} | perl -p -e "s/Your job (\d+) .*/\1/g;") 
job2list="${job2list},${job2a}" 

Вышеуказанное будет присваивать id задания job2a id для job2.

Когда готов отправить задание 3 сделать:

qsub -N job3 -hold_jid ${job2list} 
+0

спасибо, но это не работает для меня: в моем случае, я попытался -hold_jid job2, job2a *, потому что на самом деле существует несколько суб-заданий для job2a , все с тем же префиксом 'job2a'. Во время выполнения job3 дождался завершения job2, но не дождался завершения каких-либо заданий job2a *. – galactica

+0

Чтобы уточнить, вы добавили все id задания job2a в параметр '-hold_jid', или вы использовали подстановочный знак (' * ')? – Vince

+0

Я использовал подстановочный знак, потому что невозможно перечислить все имена заданий «на лету», т. Е. Список временных меток представления – galactica