распределенные вычисления в Matlab с помощью sge (qsub) - PullRequest
2 голосов
/ 23 апреля 2011

Недавно я получил доступ для запуска моих кодов в кластере.Мой код полностью распараллелен, но я не знаю, как лучше всего использовать его параллельную природу.Я должен вычислить элементы большой матрицы, и каждый из них не зависит от других.Я хочу отправить задание на несколько машин (например, на 100), чтобы ускорить вычисление матрицы.

Сейчас я написал сценарий для отправки нескольких заданий, каждое из которых отвечает за вычисление части матрицы.и сохраните его в файле .mat.В конце я объединяю их, чтобы получить всю матрицу.Для отправки каждого отдельного задания я создал новый файл .m (run1.m, run.2, ...) для установки переменной, а затем запустил функцию для вычисления связанной части в матрице.Таким образом, в основном run1.m равен

id=1;compute_dists_matrix

, а затем compute_dists_matrix использует id, чтобы найти часть, которую он собирается вычислить.Затем я написал скрипт для создания run1.m через run60.m и qsub их в кластер.

Интересно, есть ли лучший способ сделать это, например, с использованием некоторых функций MATLAB.Потому что это кажется очень типичной задачей.

Ответы [ 2 ]

3 голосов
/ 24 апреля 2011

Да, это работает, но не идеально, и, как вы говорите, это общая проблема. Matlab имеет инструментарий параллельного программирования .

Есть ли в вашем кластере это? Если так, то распределенные массивы стоит посмотреть. Если у них нет доступа к этому, то то, что вы делаете, это единственный другой путь. Вы можете обернуть ваш run1.m, run2.m в управляющий скрипт, чтобы автоматизировать его для вас ...

0 голосов
/ 06 марта 2013

Я считаю, что вы можете использовать аргументы командной строки для идентификатора и отправлять задания с диапазоном значений для этого идентификатора.Аргументы командной строки можно обработать, запустив MATLAB из командной строки без IDE и указав имя сценария, который должен быть выполнен, и список аргументов.Я думаю, вы можете установить зависимости в вашем менеджере заданий и создать сценарий «Reduce» для объединения частичных результатов (из файлов).Весь процесс может управляться из одного скрипта, который будет генерировать идентификатор и другие необходимые аргументы и передавать задания обработки и постобработки с зависимостями.

...