Вы здесь

Пример параллельной программы

Пример взят с сайта MathWorks и иллюстрирует основные (базовые) принципы программирования параллельной программы-функции.

Копия работающей функции, т.е. задача (Task), для которой значение labindex равно 1, создает магический квадрат (magic square) с числом строк и столбцов равным числу выполняющихся копий (numlabs) и рассылает матрицу с помощью labBbroadcast остальным копиям. Каждая копия вычисляет сумму одного столбца матрицы. Все эти суммы столбцов объединяются с помощью функции gplus, чтобы вычислить общую сумму элементов изначального магического квадрата.
    function total_sum = colsum
    if labindex == 1
      % Send magic square to other labs
      A = labBroadcast(1,magic(numlabs))
    else
      % Receive broadcast on other labs
      A = labBroadcast(1)
    end
    % Calculate sum of column identified by labindex for this lab
    column_sum = sum(A(:,labindex))
    % Calculate total sum by combining column sum from all labs
    total_sum = gplus(column_sum)
    end

Существуют альтернативные методы получения данных копиями функций, например, создание матрицы в каждой копии или чтение каждой копией своей части данных из файла на диске и т.д.

В прикрепленном файле ml_session.PNG (см. ниже) демонстрируется запуск функции colsum в окне системы Matlab с использованием 4-х вычислительных процессов и максимальным временем счета 1 минута.

Функция хранится как файл colsum.m в каталоге ng5 пользователя (полный путь: /home/u1303/ng5).
После запуска функции colsum с помощью служебной функции imm_sch_f, например
    job = imm_sch_f(4,1,'colsum',1,{});

или
    job = imm_sch(4,1,@colsum,1);

выдается сообщение:
Job output will be written to: /home/u1303/ng5/Job1.mpiexec.out
,
в котором указано имя сформированной работы Job1.
Проверив состояние работы и убедившись, что она закончилась, можно выдать результаты счета.

Прикрепленный файлРазмер
Иконка изображения ml_session.PNG73.66 КБ