parfor- циклы в кластере и облакеВ этом примере выполняется запуск на локальном многоядерном рабочем столе и измерение времени, необходимого для выполнения вычисления, как функции увеличения числа работников. Тест называется строгим тестом масштабирования. Это позволяет измерить уменьшение времени, необходимого для расчета, при добавлении дополнительных работников. Эта зависимость называется ускорением и позволяет оценить параллельную масштабируемость кода. Затем можно решить, полезно ли увеличивать число сотрудников в параллельном пуле и масштабироваться до кластерных и облачных вычислений.
Создайте функцию.
edit MyCode
В редакторе MATLAB ® введите новоеparfor-закольцовывание и добавление tic и toc для измерения прошедшего времени.
function a = MyCode(A) tic parfor i = 1:200 a(i) = max(abs(eig(rand(A)))); end toc end
Сохраните файл и закройте редактор.
В меню Parallel > Parallel Preferences убедитесь, что кластер по умолчанию является локальным (настольный компьютер).
В окне команд MATLAB определите параллельный пул размера 1 и выполните функцию на одном работнике для расчета затраченного времени. Обратите внимание на прошедшее время для одного работника и завершите работу параллельного пула.
parpool(1); a = MyCode(1000);
Elapsed time is 172.529228 seconds.
delete(gcp);
Откройте новый параллельный пул из двух работников и снова запустите функцию.
parpool(2); a = MyCode(1000);
Обратите внимание на прошедшее время; вы должны видеть, что теперь это уменьшилось по сравнению с единственным случаем работника.
Попробуйте 4, 8, 12 и 16 работников. Измерьте параллельную масштабируемость, построив график времени для каждого числа работников в масштабе журнала.

На рисунке показана масштабируемость типичного многоядерного настольного ПК (точки данных синего круга). Строгий тест масштабирования показывает почти линейное ускорение и значительную параллельную масштабируемость для восьми сотрудников. Из цифры видно, что в данном случае мы не добиваемся дальнейшего ускорения для более чем восьми работников. Это означает, что на локальном настольном компьютере все ядра полностью используются для 8 рабочих. В зависимости от оборудования на локальном рабочем столе можно получить другой результат. Чтобы ускорить параллельное приложение, рассмотрите возможность масштабирования до облачных или кластерных вычислений.
Если вы исчерпали своих местных работников, как в предыдущем примере, вы можете расширить свой расчет до облачных вычислений. Проверьте доступ к облачным вычислениям в меню Parallel > Discover Clusters.
Откройте параллельный пул в облаке и запустите приложение без изменения кода.
parpool(16); a = MyCode(1000);
Обратите внимание на время, затраченное на увеличение числа работников кластера. Измерение параллельной масштабируемости путем построения графика затраченного времени в зависимости от количества работников в масштабе журнала.

На рисунке показана типичная производительность для работников в облаке (красный плюс точки данных). Этот строгий тест масштабирования показывает линейное ускорение и 100% параллельное масштабирование до 16 работников в облаке. Рассмотрите возможность дальнейшего масштабирования вычислений путем увеличения числа работников в облаке или в вычислительном кластере. Обратите внимание, что параллельная масштабируемость может быть различной в зависимости от оборудования для большего числа сотрудников и других приложений.
Если у вас есть прямой доступ к кластеру, вы можете масштабировать расчеты, используя работников кластера. Проверьте доступ к кластерам в меню Parallel > Discover Clusters. При наличии учетной записи выберите кластер, откройте параллельный пул и запустите приложение без изменения кода.
parpool(64); a = MyCode(1000);

На рисунке показана типичная высокая производительность масштабирования для работников кластера (черные точки данных x). Обратите внимание, что вы достигаете 100% параллельной масштабируемости, продолжая работать в кластере не менее 80 сотрудников. Обратите внимание, что это приложение масштабируется линейно - ускорение равно количеству используемых работников.
В этом примере показано ускорение, равное количеству работников. Не каждая задача может достичь аналогичного ускорения, см., например, Интерактивно запустить цикл параллельно, используя parfor.
Для выполнения конкретных задач могут потребоваться различные подходы. Дополнительные сведения об альтернативных подходах см. в разделе Выбор решения для параллельных вычислений.
Совет
Вы можете далее профилировать parfor-закольцовывание путем измерения количества данных, передаваемых работникам и от них в параллельном пуле с помощью ticBytes и tocBytes. Дополнительные сведения и примеры см. в разделе Профилирование циклов parefor.