HPL: Оценка производительности Raspberry Pi

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

Введение

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

Что такое HPL?

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

1 Установка зависимых ПО

HPL имеет несколько зависимых ПО, которые обязательны к установке:

  • gfortran – компилятор fortran
  • MPICH2 – реализация MPI
  • mpich2-dev – средства разработки
  • BLAS - подпрограммы базовой линейной алгебры (для систем на Linux эту подпрограмму можно найти в библиотеках Atlas, GotoBLAS, Intel MKL)

Для установки остальных программ введём следующее:

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

Только этот шаг повторяется для остальных узлов.

2 Загрузка и установка HPL

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

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. Это делается из-за того, что сборочный файл содержит всю информацию о настройках системы (Raspberry Pi) и детали различных библиотек, таких как: mpich2, пакетов atlas/blas, домашней директории т.д.

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

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

makeh arch=rpi

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

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

Создадим файл с названием "HPL.dat" в папке "bin/rpi" и скопируем в него следующее:

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 Запуск 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 и её значение приблизительно равно 21e-01 Gflops , преобразовав значение получаем 121 Mega FLOPS (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

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

Соответствующие изменения могут выполняться в зависимости от количества узлов или процессоров в системе.

1 Комментарий

  • sxiii

    написал sxiii

    Пятница, 06 Апрель 2018 22:57

    MPdir = /usr/local/mpich2 уже нет такой папки, актуальная версия mpi - 3, непонятно как заставить её работать... Нашёл фрагменты софта в /usr/include/mpi а также бинарники в /usr/bin на armbian (orange pi)

Авторизуйтесь, чтобы получить возможность оставлять комментарии

Похожие материалы (по тегу)

Go to top