Интерактивный запуск цикла параллельно с использованием parfor

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

Этот пример вычисляет спектральный радиус матрицы и преобразует for-цикл в a 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-цикл с a 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. 
    The parfor пробежать на четырех рабочих примерно в три раза быстрее, чем соответствующий for-цикл запуск. Ускорение меньше, чем идеальное ускорение коэффициента четыре на четырех рабочих. Это связано с параллельными накладными расходами, включая время, необходимое для передачи данных от клиента работникам и обратно. Этот пример показывает хорошую скорость с относительно маленькими параллельными накладными расходами и выгоды от преобразования в parfor-цикл. Не все for-итерации цикла можно превратить в более быстрые parfor-циклы. Дополнительные сведения см. в разделе «Решите, когда использовать parfor».

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

В этом примере вам удалось ускорить вычисление, преобразовав for-цикл в a parfor-задать на четырех рабочих. Вы можете сократить прошедшее время еще больше, увеличив количество работников в вашем параллельном пуле, см. Шкалу Up parfor-Loops to Cluster and Cloud.

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

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

Можно запустить Simulink® модели параллельно с parsim команда вместо использования parfor-циклы. Для получения дополнительной информации и примеров использования Simulink параллельно, смотрите Запустить Несколько Симуляций (Simulink).

См. также

| | |

Похожие темы