Сконфигурируйте опции для связи MPI
mpiSettings('DeadlockDetection','on')
mpiSettings('MessageLogging','on')
mpiSettings('MessageLoggingDestination','CommandWindow')
mpiSettings('MessageLoggingDestination','stdout')
mpiSettings('MessageLoggingDestination','File','filename')
mpiSettings('DeadlockDetection','on') включает обнаружение взаимоблокировки во время вызовов labSend и labReceive. Если обнаружена взаимоблокировка, вызов функции labReceive может вызвать ошибку. Хотя нет необходимости включать обнаружение тупика у всех работников, это самая полезная опция. Значение по умолчанию 'off' для связи с рабочими местами и 'on' внутри spmd операторы. После изменения настройки в spmd оператор, установка остается в эффекте до тех пор, пока параллельный пул не закроется.
Если вы используете большое количество рабочих мест, вы можете столкнуться с увеличением эффективности, отключив обнаружение взаимоблокировок.
Если некоторые работники не звонят labSend или labReceive в течение длительных периодов времени обнаружение взаимоблокировки может вызвать ошибки связи. Если вы столкнулись с ошибками, попробуйте отключить обнаружение взаимоблокировки.
mpiSettings('MessageLogging','on') включает логгирование сообщений MPI. Значение по умолчанию является 'off'. Адресатом по умолчанию является MATLAB® Командное окно.
mpiSettings('MessageLoggingDestination','CommandWindow') отправляет данные регистрации MPI в Командное окно MATLAB. Если задача в задании связи настроена на захват окна Command Window, информация регистрации MPI будет присутствовать в CommandWindowOutput задачи свойство.
mpiSettings('MessageLoggingDestination','stdout') отправляет информацию регистрации MPI в стандартный выход для процесса MATLAB. Если вы используете MATLAB Job Scheduler, это файл журнала службы mjs.
mpiSettings('MessageLoggingDestination','File','filename') отправляет данные регистрации MPI в указанный файл.
Установите обнаружение взаимоблокировки для задания связи внутри jobStartup.m файл для этого задания:
% Inside jobStartup.m for the communicating job mpiSettings('DeadlockDetection','on'); myLogFname = sprintf('%s_%d.log',tempname,labindex); mpiSettings('MessageLoggingDestination','File',myLogFname); mpiSettings('MessageLogging','on');
Отключите обнаружение взаимоблокировки для всех последующих spmd операторы, которые используют тот же параллельный пул:
spmd;mpiSettings('DeadlockDetection','off');endУстановка MessageLoggingDestination не включает автоматически логгирование сообщений. Для активизации логгирования сообщений требуется отдельный вызов.
mpiSettings должен вызываться не клиент, а рабочий. То есть его следует вызывать внутри функции задачи, внутри jobStartup.m, или в пределах taskStartup.m.