Профилирование параллельного распределения работы

В этом примере показано, как решить смущающе параллельную задачу с неравномерным распределением работы с помощью for drange. for drange итерации разделений одинаково. В результате это может сделать субоптимальное выравнивание нагрузки, которое отображается использованием параллельного профилировщика. Процедуры, описанные здесь, также применимы к другим проблемам распределения работы.

Предпосылки:

Графики в этом примере производятся из кластера MATLAB® с 12 узлами. Если не в противном случае заданный, все остальное показывают, работая на локальном кластере с 4 узлами. В частности, весь вывод текста от локального кластера.

Этот пример использует for drange проиллюстрировать, как вы используете профилировщик, чтобы наблюдать субоптимальное распределение нагрузки. Давайте посмотрим на этот смущающе параллельный for drange цикл.

Алгоритм

Цель в pctdemo_aux_proftaskpar пример должен вычислить eig из случайной матрицы увеличивающегося размера и выбора максимальное значение от итогового вектора. Важнейшей проблемой является увеличивающийся матричный размер на основе счетчика цикла ii. Вот основная итерация:

v(ii) = max( abs( eig( rand(ii) ) ) );

Фактический for цикл виден в примере кода.

Код для этого примера может быть найден в pctdemo_aux_proftaskpar.

Включение сбора данных параллельного профилировщика

Хорошая практика должна сбросить параллельный профилировщик на кластере перед включением mpiprofile в pmode. Это убеждается, что данные очищены, и профилировщик выключен и в значении по умолчанию-messagedetail установка.

P>> mpiprofile reset;
P>> mpiprofile on;

В for drange не может быть никакой связи между лабораториями так -messagedetail может быть установлен в упрощенный (см., помогают mpiprofile). Если вы не задаете -messagedetail опция и вы запускаете программу без коммуникации, вы получаете 0s в коммуникационных полях.

P>> v = zeros( 1, 300, codistributor() );
P>> tic;pctdemo_aux_proftaskpar('drange');toc;
1    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 0.287845 seconds.
2    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 0.351070 seconds.
3    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 0.335363 seconds.
4    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 0.412805 seconds.
5    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 0.482021 seconds.
6    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 0.683651 seconds.
7    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 0.838188 seconds.
8    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 1.005636 seconds.
9    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 1.128090 seconds.
10    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 1.398578 seconds.
11    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 1.589610 seconds.
12    Start of for-drange loop.
     The computational complexity increases with the loop index.
     Done
     Elapsed time is 1.825993 seconds.

В этом алгоритме прошедшее время должно всегда быть самым долгим на последней лаборатории. Мы используем tic toc здесь так, чтобы мы можем сравнить самое долгое время выполнения с parfor. Использование профилирования в parfor цикл с mpiprofile в настоящее время не поддержан.

Выполнение параллельного графического интерфейса профилировщика

Чтобы получить интерфейс профилировщика, просто введите mpiprofile viewer в pmode. Можно также просмотреть данные из параллельного задания. Смотрите справку или документацию для получения информации о том, как сделать это.

P>> mpiprofile viewer; % The viewer action also turns off the profiler
1    Sending  pmode lab2client  to the MATLAB client for asynchronous evaluation.

Когда интерфейс профилировщика открывается, по умолчанию Функциональный Сводный отчет показывают для лаборатории 1. Нажмите Compare макс. по сравнению с min TotalTime, чтобы видеть различие в распределении работы между первой и последней лабораторией для всех вызванных функций. Посмотрите на pctdemo_aux_proftaskpar функция:

Наблюдение неравномерного распределения работы

Вот несколько шагов для определения неравномерного распределения работы на работниках MATLAB. Неравномерное распределение работы почти наверняка предотвращает оптимальное ускорение последовательных алгоритмов.

  1. Выберите max Time Aggregate от поля списка Manual Comparison Selection (см. Используя Параллельный Профилировщик в Pmode). С этим выбором можно наблюдать эффективное общее время для параллельной программы.

  2. Нажмите Compare макс. по сравнению с min TotalTime. Как вы видите, этот цикл берет намного дольше на последнем работнике MATLAB по сравнению с первым. for drange ясно не распределяет работу правильно, по крайней мере, на этих двух лабораториях. Чтобы подтвердить это верно для всех лабораторий, можно использовать функцию гистограммы страницы Plot View. Прежде, чем сделать так, нажмите pctdemo_aux_proftaskpar функция, чтобы получить более определенные графики.

  3. Нажмите Plot Time Histograms, чтобы видеть, как время вычисления было распределено на четырех локальных лабораториях. Наблюдайте общую гистограмму времени выполнения.

В главной фигуре этой страницы только первые несколько лабораторий занимают приблизительно то же количество времени; другие берут значительно дольше. Этими значительными различиями в общем распределении во времени является индикатор субоптимального выравнивания нагрузки.

Используя PARFOR для лучшего распределения работы

Оптимальная производительность для этого типа параллелизма требует ручного распределения итераций в pmode или использование parfor с parpool. Чтобы поправиться работают распределение (с pmode) в этом типе проблемы, необходимо создать случайное распределение задач, а не использовать for drange статически разделить итерации.

Используя parfor обычно лучше подходит для этого типа задачи. С parfor (i=n:N) создайте вас, получают динамическое распределение работы, которое разделяет итерации во время выполнения через все лаборатории. Таким образом кластер лучше используется. Вы видите это путем выполнения той же функции за пределами pmode использование parfor создать. Это приводит к значительно более высокому ускорению по сравнению с for drange.

Чтобы попробовать это parfor, запустите следующие команды на клиенте MATLAB за пределами pmode.

pmode close;

parpool;

tic;pctdemo_aux_proftaskpar('parfor');toc;

Необходимо получить выход, который похож: Сделанное Прошедшее время составляет 6,376887 секунд.

Существует значительное ускорение (это почти в два раза быстрее на кластере с 4 узлами), использование parfor вместо for drange, без изменения в фактическом алгоритме. Обратите внимание на то, что parfor действует в качестве стандартного for цикл в pmode. Гарантируйте, что вы пробуете parfor за пределами pmode, чтобы получить ускорение. Смотрите справку для parpool и parfor.

Параллелизация последовательных циклов for

Сделать сериал (итерация независимый) for- параллель цикла необходимо добавить drange опция, когда в параллельном задании или замене for с parfor. parfor цикл будет только работать, как предназначено с parpool. Можно просмотреть различные стили параллелизма цикла for в коде, показанном в этом примере. См. pctdemo_aux_proftaskpar. parfor версия находится под случаем 'parfor' и drange версия находится под случаем 'drange'.

Для просмотра документации необходимо авторизоваться на сайте