Соображения при переносе программы MS VC++ (одиночная машина) в кластер пород
Я пытаюсь портировать программу MS VC++ для запуска на кластере камней! Я не очень хорошо разбираюсь в Linux, но мне не терпится научиться, и я думаю, что портирование не будет для меня невозможной задачей. Однако я не понимаю, как воспользоваться преимуществами узлов кластера. потому что кажется, что выполнение кода выполняется только на сервере переднего плана (очевидно).
Я немного прочитал о MPI, и кажется, что я должен использовать MPI для связи между узлами. Программа в настоящее время написана так, что у меня есть основной поток, который синхронизирует все рабочие потоки. Основной поток также получает команды для управления моделированием или запроса его состояния. Если симуляция настроена правильно, связь между исполняющими потоками может быть значительно минимизирована. Чего я не понимаю, так это как запустить процесс на вычислительных узлах и как мне обрабатывать сбои в узлах? А может быть, должны быть и другие вещи, которые я должен учитывать при переносе моей программы в кластер?
1 ответ
Первым шагом является портирование многопоточной программы MS VC++ для запуска на одном компьютере с Linux.
После того, как вы преодолели эту точку, измените вашу программу для использования MPI в дополнение к потокам (или вместо потоков). Вы также можете сделать это на одном компьютере.
Чтобы запустить программу на нескольких узлах в вашем кластере, вам нужно будет отправить программу в любую систему планирования, которую вы используете в кластере. Команда для этого зависит от программного обеспечения планирования, используемого для вашего кластера Rocks. Спросите своего администратора. Это может выглядеть примерно так mpirun -np 32 yourprogram
,
Обработка сбоев узлов - это широкий вопрос. Ваш первый проход, вероятно, должен просто сообщить о сбое, а затем провалить программу. Если программа не занимает много времени для вычисления в кластере, то перезапуск программы с настройкой для отказавшего узла может быть достаточно хорошим. Кроме того, ваше приложение может записать на диск промежуточную информацию, необходимую для возобновления с того места, где оно было остановлено. Это называется контрольной точкой вашего приложения. Таким образом, когда происходит сбой узла, задание не выполняется, но перезапуск задания не начинается с самого начала. Гораздо более продвинутой была бы попытка фактически обнаружить сбои узла и перепланировать рабочую единицу, которая была на отказавшем узле. Это предполагает, что рабочая единица не имеет неидемпотентных побочных эффектов. Такие вещи становятся действительно сложными. Контрольная точка, скорее всего, достаточно хороша.