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 проверьте, что ваш Default Cluster local (ваша настольная машина).
В Командном Окне 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 . Если у вас есть учетная запись, выберите cluster, откройте параллельный пул и запустите приложение, не меняя код.
parpool(64); a = MyCode(1000);
Рисунок показывает типовую высокую эффективность масштабирования для работников кластера (черные точки данных x). Обратите внимание, что вы достигаете 100% параллельной масштабируемости, сохраняясь по крайней мере до 80 рабочих мест в кластере. Обратите внимание, что это приложение масштабируется линейно - скорость равна количеству используемых работников.
Этот пример показывает скорость, равную количеству работников. Не каждая задача может достичь подобной скорости, см., Например, Интерактивно Запустить Цикл Параллельно Используя parfor.
Для выполнения конкретных задач могут потребоваться различные подходы. Дополнительные сведения об альтернативных подходах см. в разделе Выбор решения для параллельных вычислений.
Совет
Вы можете продолжить профиль a parfor
-цикл путем измерения того, сколько данных передается работникам в параллельный пул и от них при помощи ticBytes
и tocBytes
. Для получения дополнительной информации и примеров смотрите Профилирование циклов parfor.