В интерактивном режиме запустите цикл в параллели Используя parfor

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

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

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

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

Измените свои параллельные настройки, чтобы управлять, автоматически создан ли параллельный пул, и сколько времени это остается доступным перед таймаутом. Для получения дополнительной информации о настройках смотрите, Задают Ваши Параллельные Настройки.

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

Смотрите также

| | |

Похожие темы