Оценка производительности кластерных систем с использованием теста Linpack
5.4. Задание 3.: Запуск теста Linpack
Производительность, показываемая тестом Linpack при решении системы линейных уравнений, существенным образом зависит не только от физических характеристик вычислительных узлов (таких как производительности процессоров узлов, входящих в вычислительную систему, размеры их оперативной памяти, характеристики среды передачи данных и т.д.), но и от параметров самой задачи - размера матрицы, топологии решетки, размере блоков, на которые разбиваются исходные вектора и т.д.
Вообще говоря, количество параметров задачи, оказывающих влияние на результат (время решения, и, в конечном итоге - показатель производительности) - достаточно велико. Таким образом, тестирование вычислительной системы тестом Linpack представляет собой последовательное выполнение тестов, отличающихся друг от друга параметрами задачи, с тем, чтобы подобрать такие параметры, на которых тест для данной конкретной вычислительной системы показывает наилучшие результаты. Важнейшими параметрами, оказывающими максимальное влияние на результаты теста, являются: размер матрицы, топология вычислительной решетки, параметр, описывающий распределение векторов. Остальные параметры теста также оказывают влияние на конечный результат, однако считается что это влияние меньше, чем у вышеперечисленных параметров.
Учитывая все вышеперечисленное, разработчиками теста Linpack была создана так называемая тестовая оболочка, задачей которой является последовательное проведение ряда тестов, в соответствии с определенным сценарием. Тестовый сценарий описывается в файле HPL.dat (по умолчанию должен находиться в том же каталоге, из которого запускается тест), в котором перечисляются существенные параметры алгоритма. Для облегчения проведения тестирования в файле HPL.dat может быть задана последовательность параметров, при этом будет выполнена серия тестов со всеми перечисленными значениями.
Ниже приведен пример конфигурационного файла HPL.dat для теста Linpack, строки которого для удобства пронумерованы
- HPLinpack benchmark input file
- Innovative Computing Laboratory, University of Tennessee
- HPL.out output file name (if any)
- 0 device out (6=stdout,7=stderr,file)
- 3 # of problems sizes (N)
- 1000 2000 3000 Ns
- 2 # of NBs
- 112 120 128 NBs
- 0 PMAP process mapping (0=Row-,1=Column-major)
- 4 # of process grids (P x Q)
- 1 2 1 4 Ps
- 1 2 4 1 Qs
- 16.0 threshold
- 1 # of panel fact
- 0 1 2 PFACTs (0=left, 1=Crout, 2=Right)
- 2 # of recursive stopping criterium
- 4 2 NBMINs (>= 1)
- 1 # of panels in recursion
- 2 NDIVs
- 1 # of recursive panel fact.
- 1 0 2 RFACTs (0=left, 1=Crout, 2=Right)
- 1 # of broadcast
- 0 BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
- 1 # of lookahead depth
- 0 DEPTHs (>=0)
- 2 SWAP (0=bin-exch,1=long,2=mix)
- 256 swapping threshold
- 1 L1 in (0=transposed,1=no-transposed) form
- 1 U in (0=transposed,1=no-transposed) form
- 0 Equilibration (0=no,1=yes)
- 8 memory alignment in double (> 0)
В приведенном файле строки 1,2 служат для идентификации файла и более никакой роли не играют (нужно заметить, что они переносятся в файл результата HPL.out). Строки 3,4 определяют, каким образом будет осуществляться вывод результатов теста. Строки 5,6 содержат перечисление размерностей задач, которые будут решаться в ходе теста. Строки 7,8 определяют различные варианты параметра NB. Следует отметить, что тест устроен таким образом, что перебирает всевозможные варианты заданных параметров, таким образом для трех различных размерностей и двух вариантов NB тест будет выполнен шесть раз. Поскольку число различных параметров в конфигурационном файле велико, следует быть осторожным и не забывать об этой особенности. Строки 10,11,12 определяют различные варианты сетки P Q, для которых будет выполнен тест. Строка 13 задает константу . Остальные строки (14-31) задают другие параметры алгоритма, которые в данном разделе не рассматривались.
Результатом работы теста является достаточно объемный файл, в котором для каждого набора параметров, определенном в конфигурационном файле указана достигнутая производительность на тесте, а также имеющаяся погрешность решения.
Ниже приведен фрагмент этого файла (в приведенном примере запуск был осуществлен на одном узле):
====================================================================== HPLinpack 1.0a -- High-Performance Linpack benchmark -- January 20, 2004 Written by A. Petitet and R. Clint Whaley, Innovative Computing Labs., UTK ====================================================================== 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 : 1000 2000 3000 NB : 112 120 PMAP : Row-major process mapping P : 1 2 1 4 Q : 1 2 4 1 PFACT : Left NBMIN : 4 2 NDIV : 2 RFACT : Crout BCAST : 1ring DEPTH : 0 SWAP : Mix (threshold = 256) L1 : no-transposed form U : no-transposed form EQUIL : no ALIGN : 8 double precision words ---------------------------------------------------------------------- - The matrix A is randomly generated for each test. - The following scaled residual checks will be computed: 1) ||Ax-b||_oo / ( eps * ||A||_1 * N ) 2) ||Ax-b||_oo / ( eps * ||A||_1 * ||x||_1 ) 3) ||Ax-b||_oo / ( eps * ||A||_oo * ||x||_oo ) - The relative machine precision (eps) is taken to be 1.110223e-016 - Computational tests pass if scaled residuals are less than 16.0 ====================================================================== T/V N NB P Q Time Gflops ---------------------------------------------------------------------- W00C2L4 1000 112 1 1 0.99 6.731e-001 ---------------------------------------------------------------------- ||Ax-b||_oo /( eps * ||A||_1 * N) = 1.4543523 ...... PASSED ||Ax-b||_oo /( eps * ||A||_1 * ||x||_1 ) = 0.0352991 ...... PASSED ||Ax-b||_oo /( eps * ||A||_oo * ||x||_oo ) = 0.0085280 ...... PASSED ====================================================================== T/V N NB P Q Time Gflops ---------------------------------------------------------------------- W00C2L2 1000 112 1 1 0.79 8.467e-001 ---------------------------------------------------------------------- ||Ax-b||_oo /( eps * ||A||_1 * N ) = 1.3432175 ...... PASSED ||Ax-b||_oo /( eps * ||A||_1 * ||x||_1 ) = 0.0326017 ...... PASSED ||Ax-b||_oo /( eps * ||A||_oo * ||x||_oo ) = 0.0078763 ...... PASSED ======================================================================
Поскольку на реальной вычислительной системе каждый отдельный тест (решение конкретной системы линейных уравнений методом, с вполне определенными параметрами) занимает достаточно продолжительное время, интересным является вопрос о том, какие параметры должны задаваться в конфигурационном файле, для того, чтобы, с одной стороны, не выполнить слишком много тестов, и, с другой стороны, не пропустить то значение параметров, на котором достигается оптимум производительности.
Частично, ответ на этот вопрос дается в документе HPL Tuning (находится в каталоге www, вместе с другой документацией по тесту), частично - в других источниках (см. например, [3],[5]).
По всей видимости, можно сформулировать следующие эмпирические правила:
- Поскольку общим эффектом является рост производительности при росте размерности задачи, размерность задачи должна быть максимально-допустимой для того размера оперативной памяти, которой обладают вычислительные узлы (при превышении объема доступной оперативной памяти, начинается процессы страничного обмена с диском, что резко снижает производительность). Поскольку матрица распределяется между всеми вычислительными узлами, общий размер матрицы, должен соответствовать этому "общему" объему памяти всех вычислительных узлов. Поскольку матрица распределяется между узлами равномерно, узлы, с меньшим объемом оперативной памяти, могут снижать общую производительность системы.
- По всей видимости, лучшие показатели производительности достигаются для решеток либо максимально "узких" (вида 1хN), либо максимально приближенных к "квадратным" (вида PхQ, где P и Q - близки). Поскольку, в общем случае, наблюдается рост производительности с увеличением числа вычислительных узлов (при условии схожести их основных характеристик), следует строить решетки таким образом, чтобы в вычислениях участвовало как можно большее количество вычислительных узлов.
Что касается значения параметра NB (параметр распределения), то его значение зависит от характеристик параллельной вычислительной системы в целом, и должно подбираться индивидуально (обычно значение лежит в пределах 16 - 256).
Запуск теста выглядит стандартно для приложения MPI:
Mpiexec -np X xhpl.exe
где X - количество процессов, которое необходимо запустить. Это количество процессов должно соответствовать максимальному значению PxQ, указанному в файле HPL.dat. Следует обратить внимание, что как и при запуске любого другого приложения MPI, имя запускаемого файла должно быть разрешимо на каждом из узлов. Стандартным способом является создание общего ресурса, доступного на каждом из узлов, размещение исполняемого файла на этом общем ресурсе и запуск командой, подобной следующей:
Mpiexec -np X \\servername\sharename\xhpl.exe
При этом файл HPL.dat должен находиться в этом же каталоге.
В случае, если необходимо явно указать имена узлов, на которых должен быть запущен тест, можно воспользоваться конфигурационным файлом (формат конфигурационного файла выдается в случае запуска утилиты mpiexec без параметров).