У нас есть проблема, которая смущающе параллельна - мы запускаем большое количество экземпляров одной программы с различным набором данных для каждой;мы делаем это просто, отправляя приложение много раз в очередь пакетов с разными параметрами каждый раз.
Однако при большом количестве заданий не все они выполняются.Похоже, что это не проблема в очереди - все задания запущены.
Похоже, проблема в том, что при большом количестве запущенных приложений многие задания заканчиваются примерно одинакововремя и, следовательно, все пытаются выписать свои данные в параллельную файловую систему в одно и то же время.
Тогда возникает проблема, заключающаяся в том, что либо программа не может записать в файловую систему и каким-то образом вылетает, либо просто сидит там, ожидая записи, и система очереди пакетов убивает задание после того, как оно выполненожду слишком долго(Из того, что я понял по этой проблеме, большинство заданий, которые не могут быть выполнены, если не все, не оставляют основные файлы)
Каков наилучший способ планирования записи на диск, чтобы избежать этой проблемы?Я упоминаю, что наша программа смущающе параллельна, чтобы подчеркнуть тот факт, что каждый процесс не знает о других - они не могут общаться друг с другом, чтобы каким-то образом планировать свои записи.
Хотя у меня есть исходный код дляПрограмма, мы хотели бы решить проблему, не изменяя ее, если это возможно, поскольку мы не поддерживаем или не разрабатываем ее (плюс большинство комментариев на итальянском языке).
У меня были некоторые мысли овещество:
- Каждое задание сначала записывается на локальный (рабочий) диск узла.Затем мы можем запустить другое задание, которое время от времени проверяет, какие задания завершены, и перемещает файлы с локальных дисков в параллельную файловую систему.
- Используйте оболочку MPI для программы в системе master / slave,где мастер управляет очередью заданий и передает их каждому рабу;и подчиненная оболочка запускает приложения и ловит исключение (могу ли я сделать это надежно в течение тайм-аута файловой системы в C ++ или, возможно, Java?) и отправляет сообщение мастеру для повторного запуска задания
Тем временем мне нужно приставать к своим руководителям для получения дополнительной информации о самой ошибке - я никогда не сталкивался с ней лично, но мне не приходилось использовать программу для очень большого количества наборов данных (пока).
В случае, если это полезно: мы запускаем Solaris в нашей системе HPC с системой пакетной очереди SGE (Sun GridEngine).Файловая система - NFS4, а серверы хранения также работают под управлением Solaris.Узлы HPC и серверы хранения обмениваются данными по оптоволоконным каналам.