Конвертировать Matlabpool в Parla в Matlab - PullRequest
1 голос
/ 19 апреля 2020

У меня есть код из matlab 2010a, который я хочу запустить в matlab 2019a, я использую параллелизм.

matlabpool open 4 %prepares matlab to run in 4 parallel procesors
j1 = batch('parallel1', 'matlabpool', 0);
pause(1)
j2 = batch('parallel2', 'matlabpool', 0);
pause(1)
j3 = batch('parallel3', 'matlabpool', 0);
pause(1)
j4 = batch('parallel4', 'matlabpool', 0);

matlabpool close

Но код не запускается в этой версии matlab, потому что Я должен использовать пул. Итак, я прошу кого-то, кто знает, как преобразовать или как изменить эту часть кода для запуска в моей новой версии Matlab.

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Дословный перевод вашего кода заключается в следующем:

parpool(4) % Creates a parallel pool with 4 workers
j1 = batch('parallel1', 'Pool', 0) % creates a batch job with no pool
... % etc.

Однако мне любопытно, действительно ли это то, что вы хотите сделать. Команда parpool(4) запускает 4 рабочих процесса, которые будут использоваться вашим рабочим столом MATLAB - когда вы используете parfor, spmd или parfeval. Каждая команда batch порождает дополнительный рабочий процесс, который не может получить доступ к рабочим из параллельного пула.

0 голосов
/ 19 апреля 2020

Первым шагом является проверка оригинальной документации, поскольку 2010a больше не находится в сети здесь соответствующая документация 2013a . В нем по-прежнему объясняется matlabpool:

'Matlabpool' - целое число, указывающее число работников, которые нужно преобразовать в пул MATLAB для задания в дополнение к работнику, выполняющему пакетное задание. Сценарий или функция использует этот пул для выполнения операторов, таких как parfor и spmd, которые находятся внутри кода пакета. Поскольку для пула MATLAB требуется N рабочих в дополнение к рабочему, выполняющему пакет, в кластере должно быть не менее N + 1 рабочих. Вам не нужно иметь пул MATLAB, уже запущенный для выполнения пакета; и новый пул, который открывается в пакете, не связан с пулом MATLAB, который вы, возможно, уже открыли. (См. Запуск параллельной партии L oop.) Значение по умолчанию равно 0, что заставляет скрипт или функцию работать только на одном рабочем столе без пула MATLAB.

В текущих версиях MATLAB эта опция заменяется параметром пула . 0 По-прежнему поведение по умолчанию, вы можете использовать:

j1 = batch('parallel1');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...