Поиск по сайту:

HPL (High Performance Linpack): сравнительный анализ Raspberry PI


На этой странице

  1. Введение
  2. Что такое HPL?
  3. 1 Установка зависимостей
  4. 2 Загрузите HPL и настройте его.
  5. 3 Настройте файл Make.rpi
  6. 4 Компиляция HPL
  7. 5 Создание входного файла HPL
  8. 6 Запуск HPL на одном узле
  9. 7 Запуск HPL на нескольких узлах

Бенчмаркинг — это процесс запуска некоторых стандартных программ для оценки скорости, достигнутой системой. Существует ряд стандартных программ тестирования, и в этом руководстве мы тестируем систему Linux с помощью хорошо известной программы под названием HPL, также известной как High Performance Linpack.

Вступление

В этом руководстве мы расскажем, как провести бенчмаркинг однопроцессорной системы Raspberry Pi. Сначала мы проверим один узел, а затем продолжим тестирование нескольких узлов, каждый из которых представляет Raspberry Pi. Здесь следует отметить несколько вещей. Во-первых, бенчмаркинг одного или нескольких узлов требует соблюдения нескольких зависимостей, которые будут рассмотрены в этом руководстве. НО, на нескольких узлах есть еще больше зависимостей, таких как реализация MPI (например, MPICH или OpenMPI), которая должна быть построена и запущена для работы HPL. Поэтому для сравнительного анализа нескольких узлов я предполагаю, что на ваших узлах установлен и работает MPICH.

Что такое ХПЛ?

HPL — это программный пакет, который решает (случайную) плотную линейную систему в арифметике с двойной точностью (64 бита) на компьютерах с распределенной памятью. Пакет HPL предоставляет программу тестирования и измерения времени для количественной оценки точности полученного решения, а также времени, которое потребовалось для его вычисления. Наилучшая производительность, достижимая с помощью этого программного обеспечения в вашей системе, зависит от множества факторов. Эта реализация является масштабируемой в том смысле, что их параллельная эффективность поддерживается постоянной по отношению к использованию памяти процессором. Таким образом, мы можем использовать это для параллельного тестирования одного процессора или ряда распределенных процессоров. Итак, приступим к установке HPL.

1 Установка зависимостей

HPL имеет несколько программных зависимостей, которые должны быть удовлетворены, прежде чем его можно будет установить. Они есть:

  • gfortran — компилятор программ на языке Фортран
  • MPICH2 – реализация MPI.
  • mpich2-dev — средства разработки
  • BLAS — базовые подпрограммы линейной алгебры

Здесь мы предполагаем, что у вас установлен MPICH2. Чтобы установить другие зависимости и пакеты, используйте следующую команду:

sudo apt-get install libatlas-base-dev libmpich2-dev gfortran

Только этот шаг необходимо повторить в каждом из узлов (Pis), присутствующих в кластере.

2 Скачайте HPL и установите его

Загрузите пакет HPL отсюда. Следующее, что нужно сделать, это извлечь tar-файл и создать make-файл на основе заданного шаблона. Откройте терминал и перейдите в каталог, в котором хранится загруженный tar-файл HPL. Выполните следующий набор команд одну за другой.

tar xf hpl-2.1.tar.gz
cd hpl-2.1/setup
sh make_generic
cd ..
cp setup/Make.UNKNOWN Make.rpi

Последняя команда копирует содержимое Make.UNKNOWN в Make.rpi. Мы делаем это потому, что файл make содержит все детали конфигурации системы ( Raspberry Pi), а также детали различных библиотек, таких как mpich2, пакеты atlas/blas, домашний каталог и т. д. На следующем шаге мы вносим изменения. в файл Make.rpi.

3 Настройте файл Make.rpi

Это важный шаг. Показанные ниже изменения зависят от вашей системы. Здесь я показываю это применительно к моей системе. Обратите внимание, что для следующих изменений показаны параметры, разбросанные по всему файлу Make.rpi. Поэтому я предлагаю вам найти каждый параметр и заменить или добавить изменения и только затем перейти к следующему параметру.

Откройте файл Make.rpi в текстовом редакторе с помощью команды:

nano Make.rpi

Внесите следующие изменения в файл.

ARCH         = rpi
TOPdir       = $(HOME)/hpl-2.1
MPdir        = /usr/local/mpich2
MPinc        = -I $(MPdir)/include
MPlib        = $(MPdir)/lib/libmpich.a
LAdir        = /usr/lib/atlas-base/
LAlib        = $(LAdir)/libf77blas.a $(LAdir)/libatlas.a

4 Компиляция HPL

Как только файл Make будет готов, мы можем начать компиляцию HPL. Файл \.xhpl\ будет присутствовать в папке \bin/rpi\ в папке HPL. Выполните следующую команду:

makeh arch=rpi

5 Создание входного файла HPL

Ниже приведен пример файла \HPL.dat\. Это входной файл для HPL при запуске. Значения, предоставленные в этом файле, используются для создания и вычисления проблемы. Вы можете использовать этот файл напрямую для запуска тестов для одного узла. Создайте файл в папке \bin/rpi\ и назовите его \HPL.dat\. скопируйте содержимое ниже в этот файл.

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
5040         Ns
1            # of NBs
128          NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
1            Ps
1            Qs
16.0         threshold
1            # of panel fact
2            PFACTs (0=left, 1=Crout, 2=Right)
1            # of recursive stopping criterium
4            NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
1            # of recursive panel fact.
1            RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
1            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

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

6 Запуск HPL на одном узле

Как только файл HPL.dat будет готов, мы можем запустить HPL. Приведенный выше файл HPL.dat предназначен для одного узла или процессора. Произведение значений P*Q в приведенном выше файле дает количество процессоров, для которых тестируется HPL. Таким образом, из приведенного выше файла P=1 и Q=1 , 1*1=1, то есть для одного процессора. Теперь для его запуска используйте команды:

cd bin/rpi
./xhpl

Вывод выглядит примерно так, как показано ниже:

================================================================================
HPLinpack 2.1  --  High-Performance Linpack benchmark  --   October 26, 2012
Written by A. Petitet and R. Clint Whaley,  Innovative Computing Laboratory, UTK
Modified by Piotr Luszczek, Innovative Computing Laboratory, UTK
Modified by Julien Langou, University of Colorado Denver
================================================================================

An explanation of the input/output parameters follows:
T/V    : Wall time / encoded variant.
N      : The order of the coefficient matrix A.
NB     : The partitioning blocking factor.
P      : The number of process rows.
Q      : The number of process columns.
Time   : Time in seconds to solve the linear system.
Gflops : Rate of execution for solving the linear system.

The following parameter values will be used:

N      :   5040 
NB     :     128 
PMAP   : Row-major process mapping
P      :       1 
Q      :       1 
PFACT  :   Right 
NBMIN  :       4 
NDIV   :       2 
RFACT  :   Crout 
BCAST  :  1ringM 
DEPTH  :       1 
SWAP   : Mix (threshold = 64)
L1     : transposed form
U      : transposed form
EQUIL  : yes
ALIGN  : 8 double precision words

--------------------------------------------------------------------------------

- The matrix A is randomly generated for each test.
- The following scaled residual check will be computed:
      ||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N )
- The relative machine precision (eps) is taken to be               1.110223e-16
- Computational tests pass if scaled residuals are less than                16.0

Кроме того, мы должны сосредоточиться на конечном результате. Окончательный вывод, который приходит на терминал, будет выглядеть примерно так, как показано ниже. Последнее значение дает скорость, а значения до этого показывают различные предоставленные параметры. В приведенном ниже содержимом скорость показана в Gflops, и ее значение составляет около 1.21e-01 Gflops, что при преобразовании дает 121 мегафлопс (MFLOPS).

================================================================================
T/V                N    NB     P     Q               Time                 Gflops
--------------------------------------------------------------------------------
WR11C2R4       21400   128     3    11              537.10              1.210e-01
HPL_pdgesv() start time Mon Jun 23 17:29:42 2014

HPL_pdgesv() end time   Mon Jun 23 17:55:19 2014

--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)=        0.0020152 ...... PASSED
================================================================================

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

7 Запуск HPL на нескольких узлах

Если мы хотим запустить HPL для нескольких узлов, нам придется изменить файл HPL.dat. Здесь давайте предположим, что у нас есть 32 узла. Таким образом, произведение P*Q должно быть 32. Я выбрал P=4, Q=8, таким образом, 4*8=32. Итак, помимо этого изменения, нам придется изменить значение N, методом проб и ошибок мы получили максимальную скорость для N=17400. Окончательное содержимое файла показано ниже. внесите соответствующие изменения в файл \HPL.dat\.

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
1            # of problems sizes (N)
17400         Ns
1            # of NBs
128          NBs
0            PMAP process mapping (0=Row-,1=Column-major)
1            # of process grids (P x Q)
4            Ps
8            Qs
16.0         threshold
1            # of panel fact
2            PFACTs (0=left, 1=Crout, 2=Right)
1            # of recursive stopping criterium
4            NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
1            # of recursive panel fact.
1            RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
1            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
1            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

Как только это будет сделано, нам придется снова запустить HPL. Используйте следующую команду. Не забудьте изменить путь в приведенной ниже команде, чтобы он представлял путь к машинному файлу в вашей системе.

cd bin/rpi
mpiexec -f ~/mpi_testing/machinefile -n 32 ./xhpl

Результат этого будет аналогичен показанному выше для одного узла, но скорость у него определенно будет выше.

Такого рода изменения могут быть сделаны в зависимости от количества узлов или процессоров в системе, и можно узнать результаты тестов. И, как я упоминал ранее, чтобы узнать больше о том, как установить значения в файле HPL.dat, перейдите к документу здесь и прочтите его.