exponenta event banner

Сравните ваш кластер с задачей высокопроизводительных вычислений

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

Подготовка вызова HPC

Запуск параллельного пула работников в кластере с помощью parpool функция. По умолчанию parpool создает параллельный пул с использованием профиля кластера по умолчанию. Проверьте профиль кластера по умолчанию на вкладке Главная в разделе Параллельный > Выберите кластер по умолчанию. В этом эталоне работники общаются друг с другом. Для обеспечения оптимизации межсетевого взаимодействия установите 'SpmdEnabled' кому true.

pool = parpool('SpmdEnabled',true);
Starting parallel pool (parpool) using the 'MyCluster' profile ...
connected to 64 workers.

Используйте hpccDataSizes функция для вычисления размера проблемы для каждого отдельного теста, который соответствует требованиям HPC Challenge. Этот размер зависит от количества работников и объема памяти, доступной каждому работнику. Например, разрешить использование 1 ГБ на работника.

gbPerWorker = 1;
dataSizes = hpccDataSizes(pool.NumWorkers,gbPerWorker);

Запуск задачи высокопроизводительных вычислений

Эталонный тест HPC Challenge состоит из нескольких частей, каждая из которых исследует производительность различных аспектов системы. В следующем коде каждая функция выполняет один тест и возвращает таблицу строк, содержащую результаты производительности. Эти функции тестируют различные операции в распределенных массивах. Разделы MATLAB распределяют массивы между несколькими параллельными работниками, чтобы они могли использовать объединенную память и вычислительные ресурсы кластера. Дополнительные сведения о распределенных массивах см. в разделе Распределенные массивы.

HPL

hpccHPL(m), известный как Linpack Benchmark, измеряет скорость выполнения для решения линейной системы уравнений. Он создает случайную распределенную вещественную матрицу A размера mоколо-m и действительный случайный распределенный вектор b длины mи измеряет время для решения системы x = A\b параллельно. Производительность возвращается в гигафлопс (миллиарды операций с плавающей запятой в секунду).

hplResult = hpccHPL(dataSizes.HPL);
Starting HPCC benchmark: HPL with data size: 27.8255 GB. Running on a pool of 64 workers
Analyzing and transferring files to the workers ...done.
Finished HPCC benchmark: HPL in 196.816 seconds.

DGEMM

hpccDGEMM(m) измеряет скорость выполнения вещественного умножения матрица-матрица. Он создает случайные распределенные вещественные матрицы A, B, и C, размера mоколо-mи измеряет время для выполнения умножения матрицы C = beta*C + alpha*A*B параллельно, где alpha и beta являются случайными скалярами. Производительность возвращается в гигафлопс.

dgemmResult = hpccDGEMM(dataSizes.DGEMM);
Starting HPCC benchmark: DGEMM with data size: 9.27515 GB. Running on a pool of 64 workers
Analyzing and transferring files to the workers ...done.
Finished HPCC benchmark: DGEMM in 69.3654 seconds.

ПОТОК

hpccSTREAM(m) оценивает пропускную способность памяти кластера. Он создает случайные распределенные векторы b и c длины mи случайный скаляр kи вычисляет a = b + c*k. Этот эталонный тест не использует обмен данными между сотрудниками. Производительность возвращается в гигабайтах в секунду.

streamResult = hpccSTREAM(dataSizes.STREAM);
Starting HPCC benchmark: STREAM with data size: 10.6667 GB. Running on a pool of 64 workers
Analyzing and transferring files to the workers ...done.
Finished HPCC benchmark: STREAM in 0.0796962 seconds.

PTRANS

hpccPTRANS(m) измеряет скорость межпроцессной связи системы. Он создает две случайные распределенные матрицы A и B размера mоколо-mи вычисляет A' + B. Результат возвращается в гигабайтах в секунду.

ptransResult = hpccPTRANS(dataSizes.PTRANS);
Starting HPCC benchmark: PTRANS with data size: 9.27515 GB. Running on a pool of 64 workers
Analyzing and transferring files to the workers ...done.
Finished HPCC benchmark: PTRANS in 6.43994 seconds.

RandomAccess

hpccRandomAccess(m) измеряет количество ячеек памяти в распределенном векторе, которые могут быть случайно обновлены в секунду. Результат пересчитывается в GUPS, giga обновляется в секунду. В этом тесте рабочие используют генератор случайных чисел, скомпилированный в функцию MEX. Подключите версию этой функции MEX для каждой архитектуры операционной системы к параллельному пулу, чтобы работники могли получить доступ к той, которая соответствует их операционной системе.

addAttachedFiles(pool,{'hpccRandomNumberGeneratorKernel.mexa64','hpccRandomNumberGeneratorKernel.mexw64','hpccRandomNumberGeneratorKernel.mexmaci64'});
randomAccessResult = hpccRandomAccess(dataSizes.RandomAccess);
Starting HPCC benchmark: RandomAccess with data size: 16 GB. Running on a pool of 64 workers
Analyzing and transferring files to the workers ...done.
Finished HPCC benchmark: RandomAccess in 208.103 seconds.

FFT

hpccFFT(m) измеряет скорость выполнения вычисления параллельного быстрого преобразования Фурье (FFT) для распределенного вектора длины m. Этот тест измеряет как арифметические возможности системы, так и характеристики связи. Производительность возвращается в гигафлопс.

fftResult = hpccFFT(dataSizes.FFT);
Starting HPCC benchmark: FFT with data size: 8 GB. Running on a pool of 64 workers
Analyzing and transferring files to the workers ...done.
Finished HPCC benchmark: FFT in 11.772 seconds.

Просмотр результатов

В результате каждого теста создается одна строка таблицы со статистикой. Объедините эти строки, чтобы получить сводку результатов теста.

allResults = [hplResult; dgemmResult; streamResult; ...
              ptransResult; randomAccessResult; fftResult];
disp(allResults);
      Benchmark       DataSizeGB      Time      Performance    PerformanceUnits
    ______________    __________    ________    ___________    ________________

    "HPL"               27.826        196.82       773.11         "GFlops"     
    "DGEMM"             9.2752        69.365       1266.4         "GFlops"     
    "STREAM"            10.667      0.079696       431.13         "GBperSec"   
    "PTRANS"            9.2752        6.4399       1.5465         "GBperSec"   
    "RandomAccess"          16         208.1     0.010319         "GUPS"       
    "FFT"                    8        11.772       6.6129         "GFlops"     

Разгрузка вычислений с помощью batch

Вы можете использовать batch выгрузить вычисления в HPC Challenge в кластер и продолжить работу в MATLAB.

Перед использованием batch, удалите текущий параллельный пул. Пакетное задание не может быть обработано, если параллельный пул уже использует всех доступных работников.

delete(gcp);

Отправить функцию hpccBenchmark как пакетное задание для кластера с помощью batch. Эта функция вызывает тесты в HPC Challenge и возвращает результаты в таблице. При использовании batch, работник принимает роль клиента MATLAB и выполняет функцию. Кроме того, укажите следующие аргументы пары имя-значение:

  • 'Pool'Создание параллельного пула с работниками для задания. В этом случае укажите 32 рабочих. hpccBenchmark запускает HPC Challenge для этих работников.

  • 'AttachedFiles': Передает файлы работникам пула. В этом случае приложите версию hpccRandomNumberGeneratorKernel для каждой архитектуры операционной системы. Работники получают доступ к той, которая соответствует их операционной системе, когда они выполняют hpccRandomAccess тест.

  • 'CurrentFolder': Задание рабочей папки рабочих. Если этот аргумент не указан, MATLAB изменяет текущий каталог работников на текущий каталог в клиенте MATLAB. Установить для него значение '.' если вы хотите использовать текущую папку работников. Это полезно, когда работники имеют другую файловую систему.

gbPerWorker = 1;
job = batch(@hpccBenchmark,1,{gbPerWorker}, ...
    'Pool',32, ...
    'AttachedFiles',{'hpccRandomNumberGeneratorKernel.mexa64','hpccRandomNumberGeneratorKernel.mexw64','hpccRandomNumberGeneratorKernel.mexmaci64'}, ...
    'CurrentFolder','.');

После отправки задания можно продолжить работу в MATLAB. Проверить состояние задания можно с помощью монитора заданий. На вкладке Главная (Home) в области Среда (Environment) выберите Параллельный (Parallel) > Контролировать задания (Monitor Jobs).

В этом случае дождитесь завершения задания. Чтобы получить результаты из кластера, используйте fetchOutputs функция.

wait(job);
results = fetchOutputs(job);
disp(results{1})
      Benchmark       DataSizeGB      Time      Performance    PerformanceUnits
    ______________    __________    ________    ___________    ________________

    "HPL"               13.913        113.34        474.69        "GFlops"     
    "DGEMM"             4.6376        41.915        740.99        "GFlops"     
    "STREAM"            5.3333      0.074617        230.24        "GBperSec"   
    "PTRANS"            4.6376        3.7058        1.3437        "GBperSec"   
    "RandomAccess"           8        189.05     0.0056796        "GUPS"       
    "FFT"                    4        7.6457        4.9153        "GFlops"     

При использовании больших кластеров увеличиваются доступные вычислительные ресурсы. Если время, потраченное на расчеты, перевешивает время, потраченное на обмен данными между рабочими, то ваша проблема может хорошо масштабироваться. На следующем рисунке показано масштабирование эталонного теста HPL с количеством работников в кластере с 4 машины и 18 физические ядра на машину. Обратите внимание, что в этом тесте размер данных увеличивается с числом работников.

См. также

|

Связанные темы