exponenta event banner

Интерактивное параллельное выполнение цикла с помощью parfor

В этом примере вы начинаете с медленного for- петля, и вы ускоряете расчет с помощью parfor-loop вместо этого. parfor разделяет выполнение for-итерации петель над рабочими в параллельном пуле.

В этом примере вычисляется спектральный радиус матрицы и преобразуется for-закольцовывание в parfor-луп. Узнайте, как измерить результирующее ускорение.

  1. В редакторе MATLAB ® введите следующее:for-луп. Добавить tic и toc для измерения прошедшего времени.

    tic
    n = 200;
    A = 500;
    a = zeros(n);
    for i = 1:n
        a(i) = max(abs(eig(rand(A))));
    end
    toc
  2. Запустите сценарий и запишите истекшее время.

    Elapsed time is 31.935373 seconds.

  3. В сценарии замените for-закольцовывание с помощью parfor-луп.

    tic
    n = 200;
    A = 500;
    a = zeros(n);
    parfor i = 1:n
        a(i) = max(abs(eig(rand(A))));
    end
    toc

  4. Запустите новый сценарий и запустите его еще раз. Обратите внимание, что первый прогон выполняется медленнее, чем второй, поскольку параллельный пул занимает некоторое время, чтобы запустить и сделать код доступным для работников. Обратите внимание на прошедшее время для второго прогона.

    По умолчанию MATLAB автоматически открывает параллельный пул работников на локальном компьютере.

    Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
    ...
    Elapsed time is 10.760068 seconds. 
    parfor запуск на четырех рабочих примерно в три раза быстрее, чем соответствующий for-loop запуск. Ускорение меньше, чем идеальное ускорение в четыре раза на четырех рабочих. Это связано с параллельными накладными расходами, включая время, необходимое для передачи данных от клиента работникам и обратно. Этот пример показывает хорошую скорость с относительно небольшими параллельными служебными данными и преимуществами преобразования в parfor-луп. Не все for-итерации цикла можно быстрее превратить в parfor-контуры. Дополнительные сведения см. в разделе Решение о том, когда использовать Parfor.

Одно ключевое требование для использования parfor-loops означает, что отдельные итерации должны быть независимыми. Независимые проблемы, подходящие для parfor обработка включает моделирование Монте-Карло и протягивание параметров. Следующие шаги см. в разделе Преобразование циклов for-Loops в контуры parfor-Loops.

В этом примере удалось ускорить вычисление путем преобразования for-закольцовывание в parfor-закольцовывание на четырех рабочих. Можно еще больше сократить время, увеличив число работников в параллельном пуле. См. раздел Масштабирование петель в кластер и облако.

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

Измените настройки параллели, чтобы определить, создается ли параллельный пул автоматически, и как долго он остается доступным до истечения времени ожидания. Дополнительные сведения о настройках см. в разделе Определение параллельных настроек.

Вы можете запускать модели Simulink ® параллельно с parsim вместо использования команды parfor-контуры. Дополнительные сведения и примеры параллельного использования Simulink см. в разделе Запуск нескольких моделирований (Simulink).

См. также

| | |

Связанные темы