Масштабирование циклов parfor до кластеров и облачных платформ

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

  1. Создайте функцию.

      edit MyCode
  2. В Редакторе MATLAB® введите новый parfor - цикл и добавьте tic, и toc, чтобы измерить время протек.

    function a = MyCode(A)
    
    tic
    parfor i = 1:200
        a(i) = max(abs(eig(rand(A))));
    end
    toc
    
  3. Сохраните файл и закройте Редактор.

  4. В меню Parallel> Parallel Preferences проверяйте, что вашим Default Cluster является local (ваша настольная машина).

  5. В Окне Команды MATLAB задайте параллельный пул размера 1 и запустите свою функцию на одном рабочем, чтобы вычислить прошедшее время. Отметьте прошедшее время одним рабочим и закройте ваш параллельный пул.

    parpool(1);
    a = MyCode(1000);
    
    Elapsed time is 172.529228 seconds.
    
    delete(gcp);
    
  6. Откройте новый параллельный пул двух рабочих и запустите функцию снова.

    parpool(2);
    a = MyCode(1000);
    

    Отметьте прошедшее время; необходимо видеть, что это теперь уменьшилось по сравнению с одним случаем рабочего.

  7. Попробуйте 4, 8, 12 и 16 рабочих. Измерьте параллельную масштабируемость путем графического вывода прошедшего времени для каждого количества рабочих на двойной логарифмической шкале.

    Данные показывают масштабируемость для типичного многожильного настольного ПК (синие круговые точки данных). Сильный тест масштабирования показывает почти линейное ускорение и значительную параллельную масштабируемость максимум для восьми рабочих. Заметьте от фигуры, что в этом случае мы не достигаем дальнейшего ускорения больше чем для восьми рабочих. Этот результат означает, что на локальной настольной машине все ядра полностью используются для 8 рабочих. Можно получить различный результат на локальном рабочем столе, в зависимости от оборудования. Чтобы далее ускорить ваше параллельное приложение, рассмотрите увеличение масштаба к облачным или кластерным вычислениям.

  8. Если вы исчерпали своих локальных рабочих, как в предыдущем примере, можно увеличить вычисление к облачным вычислениям. Проверяйте свой доступ к облачным вычислениям из меню Parallel> Discover Clusters .

    Откройте параллельный пул в облаке и запустите ваше приложение, не изменяя ваш код.

    parpool(16);
    a = MyCode(1000);
    

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

    Данные показывают типичную производительность для рабочих в облаке (красный плюс точки данных). Этот сильный тест масштабирования показывает линейному ускорению и 100%-й параллельной масштабируемости до 16 рабочих в облаке. Рассмотрите дальнейшее увеличение масштаба своего вычисления путем увеличения числа рабочих в облаке или на вычислить кластере. Обратите внимание на то, что параллельная масштабируемость может отличаться, в зависимости от вашего оборудования для большего числа рабочих и других приложений.

  9. Если у вас есть прямой доступ к кластеру, можно увеличить вычисление с помощью рабочих на кластере. Проверяйте свой доступ к кластерам из меню Parallel> Discover Clusters . Если у вас есть учетная запись, выберите cluster, откройте параллельный пул и запустите ваше приложение, не изменяя ваш код.

    parpool(64);
    a = MyCode(1000);
    

    Данные показывают типичную сильную производительность масштабирования для рабочих на кластере (черные x точки данных). Заметьте, что вы достигаете 100%-й параллельной масштабируемости, сохраняющейся по крайней мере до 80 рабочих на кластере. Обратите внимание на то, что это приложение масштабируется линейно - ускорение равно количеству используемых рабочих.

    Этот пример показывает ускорение, равное количеству рабочих. Не каждая задача может достигнуть подобного ускорения, видеть, например, В интерактивном режиме Выполнение Цикл в параллели Используя parfor.

    Вам могут быть нужны разные подходы для ваших конкретных задач. Чтобы узнать больше об альтернативных подходах, смотрите, Выбирают Parallel Computing Solution.

Совет

Можно далее профилировать parfor - цикл путем измерения, сколько данных передается и от рабочих в параллельном пуле при помощи ticBytes и tocBytes. Для получения дополнительной информации и примеры, смотрите Профильные циклы parfor.

Похожие темы