Технологии построения и использования кластерных систем

Оценка производительности кластерных систем с использованием теста Linpack

Разбить на страницы
Показывать лекцию целиком

5.1. Цель лабораторной работы

В ходе лабораторной работы слушатель выполняет полный цикл действий, необходимых для компиляции и запуска теста, включая установку необходимого системного программного обеспечения. Все упражнения лабораторной работы выполняются в среде Microsoft Windows (XP и выше). При установке программного обеспечения, компиляции и запуске тестов, везде, если это особо не оговорено, предполагается, что речь идет о 32-битных версиях соответствующих программ.

Примерное время выполнения лабораторной работы: 120 минут.

5.2. Задание 1.: Установка системного программного обеспечения

Для успешной компиляции и запуска теста, необходимо установить следующие компоненты:

  • Исходный текст Linpack.
  • Какую-либо реализацию MPI.
  • Компилятор языка C.
  • Какую-либо реализацию BLAS.
  • В качестве реализации MPI при выполнении данной лабораторной работы будет использоваться MPICH2 for Microsoft Windows (реализация свободно доступна по адресу http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads).

    В качестве библиотеки, реализующей BLAS (Basic Linear Algebra Subprograms - набор базовых операций линейной алгебры) будет использоваться Intel® Math Kernel Library 9.1 Cluster Edition (ознакомительная версия этой библиотеки, с ограничением времени действия, доступна по адресу http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=1968lang=eng).

    В качестве компилятора C , будет использоваться - Intel® C++ Compiler for Windows (ознакомительная версия, с ограничением времени действия, доступна по адресу http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=906lang=eng).

    В комплект поставки Intel® Math Kernel Library 9.1 Cluster Edition входит исходный код теста Linpack и набор make-файлов, адаптированных для компиляции Linpack с использованием компилятора Intel C++ и Intel® Math Kernel Library 9.1 Cluster Edition в качестве реализации BLAS. Процедура сборки теста предполагает использование в качестве сборщика Intel® Visual Fortran Compiler for Windows (ознакомительная версия, с ограничением времени действия, доступна по адресу http://www.intel.com/cd/software/products/asmo-na/eng/compilers/278834.htm ).

    Таким образом, для выполнения данного упражнения, необходимо предварительно подготовить следующие инсталляционные пакеты:

  • MPICH2 for Microsoft Windows.
  • Intel® Math Kernel Library Cluster Edition.
  • Intel® C++ Compiler for Windows.
  • Intel® Visual Fortran Compiler for Windows.
  • На компьютере, на котором будет выполняться лабораторная работа, предварительно должна быть установлена среда разработки Microsoft Visual Studio версии 2005 или выше.

    В случае если установлена среда Microsoft Visual Studio версии 2005, дополнительно необходимо установить Microsoft Visual C++ 2005 SP1 Redistributable Package (может быть загружен с сайта Microsoft Update).

    Установка всего программного обеспечения должна производиться пользователем, имеющим права администратора.

    5.2.1. Установка MPI (MPICH2 for Microsoft Windows)

    Установка MPICH2 for Microsoft Windows достаточна проста и после запуска инсталляционного пакета занимает всего несколько шагов:

    Необходимо принять условия лицензионного соглашения.

    Ввести пароль для доступа к сервису удаленного запуска программ (этот сервис используется утилитой запуска параллельных программ для запуска процессов на удаленных узлах - этот пароль должен быть одинаков для всех узлов, на которых предполагается осуществлять параллельные запуски).

    Выбрать каталог, в который будет установлен MPICH2 и определить, должен ли продукт быть доступен только устанавливающему его пользователю, или всем пользователям системы.

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

    После выполнения указанных действий, MPICH2 for Microsoft Windows успешно установлен.

    5.2.2. Установка Intel® Math Kernel Library Cluster Edition

    Для успешной установки Intel® Math Kernel Library Cluster Edition потребуется дистрибутив, загруженный с сайта Intel и файл регистрации, либо серийный номер (выдается при регистрации на сайте Intel).

    После запуска файла дистрибутива:

    Необходимо выбрать каталог, в который будут распакованы исполняемые файлы, использующиеся при установке продукта (затем этот каталог может быть удален).

    При установке продукта используется один из двух способов проверки ключа - ввод серийного номера (при этом для его проверки программа установки отправит его в Intel, т.е. для этого способа проверки необходимо наличие подключения к Internet), либо указание пути к ключевому файлу (для этого способа проверки соединения с Internet не требуется). Следует обратить внимание, что в пути к файлу лицензии не должно содержаться пробелов и русских (любых "не английских") символов.

    Необходимо принять условия лицензионного соглашения.

    Выбрать каталог, в который будет установлен продукт.

    Выбрать установку соответствующих переменных окружения.

    После выбора пункта "Install" начнется установка продукта.

    5.2.3. Установка Intel® C++ Compiler for Windows

    Для успешной установки Intel® C++ Compiler for Windows потребуется дистрибутив, загруженный с сайта Intel и файл регистрации, либо серийный номер (выдается при регистрации на сайте Intel).

    После запуска файла дистрибутива необходимо выбрать каталог, в который будут распакованы исполняемые файлы, использующиеся при установке продукта (затем этот каталог может быть удален).

    При установке продукта используется один из двух способов проверки ключа - ввод серийного номера (при этом для его проверки программа установки отправит его в Intel, т.е. для этого способа проверки необходимо наличие подключения к Internet), либо указание пути к ключевому файлу (для этого способа проверки соединения с Internet не требуется). Следует обратить внимание, что в пути к файлу лицензии не должно содержаться пробелов и русских (любых "не английских") символов.

    В списке устанавливаемых продуктов нужно выбрать, по крайней мере, установку компилятора и интеграцию с Microsoft Visual Studio.

    Необходимо принять условия лицензионного соглашения

    Ввести сведения о пользователе и организации и определить, должен ли продукт быть доступен только устанавливающему его пользователю, или всем пользователям системы.

    Выбрать тип установки (при выборе настраиваемой установки становится доступным выбор списка устанавливаемых компонент).

    После выбора типа установки, производится последовательная установка компилятора…

    …отладчика

    … и интеграция с Microsoft Visual Studio.

    Выбор пункта "Finish" завершает установку.

    5.2.4. Установка Intel® Visual Fortran Compiler for Windows

    Для успешной установки Intel® Visual Fortran Compiler for Windows потребуется дистрибутив, загруженный с сайта Intel и файл регистрации, либо серийный номер (выдается при регистрации на сайте Intel).

    После запуска файла дистрибутива необходимо выбрать каталог, в который будут распакованы исполняемые файлы, использующиеся при установке продукта (затем этот каталог может быть удален).

    При установке продукта используется один из двух способов проверки ключа - ввод серийного номера (при этом для его проверки установщик отправит его в Intel, т.е. для этого способа проверки необходимо наличие подключения к Internet), либо указание пути к ключевому файлу (для этого способа проверки соединения с Internet не требуется). Следует обратить внимание, что в пути к файлу лицензии не должно содержаться пробелов и русских (любых "не английских") символов.

    Необходимо принять условия лицензионного соглашения.

    Выбрать тип установки (при выборе настраиваемой установки становится доступным выбор списка устанавливаемых компонент).

    Выбор пункта "Finish" завершает установку.

    5.3. Задание 2.: Компиляция теста Linpack

    После установки всех необходимых компонентов можно приступить к компиляции теста. Исходный код теста располагается в каталоге <MKL_HOME>\benchmarks\mp_linpack, где <MKL_HOME> - каталог, в который была установлена библиотека Intel® Math Kernel Library Cluster Edition.

    Структура каталога с тестом - следующая:

  • include - заголовочные файлы.
  • makes - make-файлы, по одному для каждого каталога с кодом.
  • man - файлы справки, устанавливаемые при установке теста на Unix-системах.
  • setup -make-файлы, служащие для установки (инсталляции) теста на Unix-системах.
  • src - каталог, содержащий исходный код (разбитый по категориям), решающий задачу Linpack.
  • testing - каталог, содержащий исходный код тестовой оболочки.
  • www - документация по тесту.
  • В корне каталога находятся make-файлы, обслуживающие в целом процесс компиляции теста. Эти make-файлы настроены для использования компилятора Intel и MKL в качестве библиотеки, реализующей BLAS.

    Поскольку, в поставке MKL, кроме исходного кода теста присутствуют заранее настроенные make-файлы, теоретически, процесс компиляции теста является очень простым и состоит из 3-х шагов:

  • Запуск командной строки C++ Build Environment for applications running on IA-32 (При установке Intel® C++ Compiler for Windows с параметрами по умолчанию, доступен из меню "Пуск-> Intel(R) Software Development Tools-> Intel(R) C++ Compiler-> C++ Build Environment for applications running on IA-32")
  • В командной строке C++ Build Environment for applications running on IA-32 перейти в каталог
  • Выполнить команду компиляции. Команда компиляции имеет следующий вид:
  • nmake /f Makefile [arch=ia32/em64t/ia64] [LAdir="LAdir"] [MPIdir="mpidir"] [mpi="mpi"] [help|target]

    где:

  • arch - целевая архитектура, для которой должен быть скомпилирован тест,
  • LAdir - путь до каталога, в котором установлена библиотека BLAS,
  • MPIdir - путь до каталога, в котором установлена реализация MPI,
  • mpi - версия mpi,
  • target -цель сборки (компиляция, запуск теста, удаление построенных файлов).
  • Полная справка по необходимым для построения теста аргументам может быть получена при вызове утилиты nmake в каталоге теста, без параметров.

    В случае если MPI, MKL и компиляторы установлены в каталоги по умолчанию, команда компиляции теста принимает следующий вид: nmake /f Makefile mpi=mpich2 arch=ia32 instal. Т.е. целевая архитектура - ia32, версия mpi - mpich2, действие - install.

    Однако, к сожалению, поставляемые с данной версией Linpack make-файлы имеют ряд синтаксических ошибок, которые приводят к тому, что процесс компиляции, будучи запущенным, практически сразу же из-за них прерывается.

    Устранение этих ошибок само по себе могло бы стать самостоятельным заданием для отдельной лабораторной работы, однако, поскольку рассмотрение синтаксиса для утилиты nmake выходит за пределы данного курса, приведем здесь правки, которые необходимо внести, для обеспечения работоспособности make-файлов:

  • Поскольку в MPICH2 изменилось название библиотеки, содержащей реализацию функций MPI (ранее называлась mpich2.lib, в последней версии - mpi.lib ) в файле Make.inc (корневой раздел), в строках 76, 210, 352 необходимо название библиотеки изменить на mpi.lib
  • В файлах директории makes:
  • Файл Make.auxil - в строках с 56 по 70 удалить все вхождения символов "$(INCdep)"
  • Файл Make.blas - в строках с 53 по 69 удалить все вхождения символов "$(INCdep)"
  • Файл Make.comm - в строках с 55 по 81 удалить все вхождения символов "$(INCdep)"
  • Файл Make.gesv - в строках с 51 по 53 удалить все вхождения символов "$(INCdep)"
  • Файл Make.grid - в строках с 54 по 74 удалить все вхождения символов "$(INCdep)"
  • Файл Make.matgen - в строках с 54 по 66 удалить все вхождения символов "$(INCdep)"
  • Файл Make.panel - в строках с 55 по 61 удалить все вхождения символов "$(INCdep)"
  • Файл Make. pauxil - в строках с 60 по 108 удалить все вхождения символов "$(INCdep)"
  • Файл Make.pfact - в строках с 57 по 89 удалить все вхождения символов "$(INCdep)"
  • Файл Make. pgesv - в строках с 60 по 106 удалить все вхождения символов "$(INCdep)"
  • Файл Make. pmatgen - в строке 52 удалить символы "$(INCdep)"
  • Файл Make. ptest - в строках с 61 по 65 удалить все вхождения символов "$(INCdep)"
  • Файл Make. ptimer - в строках с 51 по 55 удалить все вхождения символов "$(INCdep)"
  • Файл Make. test - в строках с 60 по 64 удалить все вхождения символов "$(INCdep)"
  • Файл Make. timer - в строках с 52 по 56 удалить все вхождения символов "$(INCdep)"
  • Файл Make. units - в строках с 63 по 83 удалить все вхождения символов "$(INCdep)"
  • При редактировании make-файлов, следует следить за тем, чтобы удаление символов или редактирование строк не приводило к разрушению структуры make-файлов.

    Для успешной компиляции теста, кроме редактирования make-файлов, необходимо выполнить еще одно действие - в переменной окружения PATH необходимо прописать пути до исполняемых файлов компиляторов С++ и Fortran (icl и ifort) - соответственно <IC_Compiler>\IA32\Bin и <IF_Compiler>\ IA32\Bin, где <IC_Compiler> -каталог, в который был установлен Intel® C++ Compiler for Windows, <IF_Compiler> - каталог, в который был установлен Intel® Visual Fortran Compiler for Windows. Нужно это потому, что при компиляции теста используется icl, а для его сборки - ifort, а по умолчанию путь к ifort в C++ Build Environment for applications running on IA-32 не установлен.

    После выполнения всех этих действий, Linpack может быть скомпилирован командой: nmake /f Makefile mpi=mpich2 arch=ia32 install (при условии что MKL и MPI были установлены в каталоги по умолчанию - в противном случае нужно использовать параметры LAdir и MPIdir).

    В результате выполнения команды, в созданном при выполнении компиляции каталоге .\bin\ia32 будет построен исполняемый файл теста Linpack - xhpl.exe.

    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 без параметров).

    Страницы:

    5.1. Цель лабораторной работы

    В ходе лабораторной работы слушатель выполняет полный цикл действий, необходимых для компиляции и запуска теста, включая установку необходимого системного программного обеспечения. Все упражнения лабораторной работы выполняются в среде Microsoft Windows (XP и выше). При установке программного обеспечения, компиляции и запуске тестов, везде, если это особо не оговорено, предполагается, что речь идет о 32-битных версиях соответствующих программ.

    Примерное время выполнения лабораторной работы: 120 минут.

    5.2. Задание 1.: Установка системного программного обеспечения

    Для успешной компиляции и запуска теста, необходимо установить следующие компоненты:

  • Исходный текст Linpack.
  • Какую-либо реализацию MPI.
  • Компилятор языка C.
  • Какую-либо реализацию BLAS.
  • В качестве реализации MPI при выполнении данной лабораторной работы будет использоваться MPICH2 for Microsoft Windows (реализация свободно доступна по адресу http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads).

    В качестве библиотеки, реализующей BLAS (Basic Linear Algebra Subprograms - набор базовых операций линейной алгебры) будет использоваться Intel® Math Kernel Library 9.1 Cluster Edition (ознакомительная версия этой библиотеки, с ограничением времени действия, доступна по адресу http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=1968lang=eng).

    В качестве компилятора C , будет использоваться - Intel® C++ Compiler for Windows (ознакомительная версия, с ограничением времени действия, доступна по адресу http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=906lang=eng).

    В комплект поставки Intel® Math Kernel Library 9.1 Cluster Edition входит исходный код теста Linpack и набор make-файлов, адаптированных для компиляции Linpack с использованием компилятора Intel C++ и Intel® Math Kernel Library 9.1 Cluster Edition в качестве реализации BLAS. Процедура сборки теста предполагает использование в качестве сборщика Intel® Visual Fortran Compiler for Windows (ознакомительная версия, с ограничением времени действия, доступна по адресу http://www.intel.com/cd/software/products/asmo-na/eng/compilers/278834.htm ).

    Таким образом, для выполнения данного упражнения, необходимо предварительно подготовить следующие инсталляционные пакеты:

  • MPICH2 for Microsoft Windows.
  • Intel® Math Kernel Library Cluster Edition.
  • Intel® C++ Compiler for Windows.
  • Intel® Visual Fortran Compiler for Windows.
  • На компьютере, на котором будет выполняться лабораторная работа, предварительно должна быть установлена среда разработки Microsoft Visual Studio версии 2005 или выше.

    В случае если установлена среда Microsoft Visual Studio версии 2005, дополнительно необходимо установить Microsoft Visual C++ 2005 SP1 Redistributable Package (может быть загружен с сайта Microsoft Update).

    Установка всего программного обеспечения должна производиться пользователем, имеющим права администратора.

    5.2.1. Установка MPI (MPICH2 for Microsoft Windows)

    Установка MPICH2 for Microsoft Windows достаточна проста и после запуска инсталляционного пакета занимает всего несколько шагов:

    Необходимо принять условия лицензионного соглашения.

    Ввести пароль для доступа к сервису удаленного запуска программ (этот сервис используется утилитой запуска параллельных программ для запуска процессов на удаленных узлах - этот пароль должен быть одинаков для всех узлов, на которых предполагается осуществлять параллельные запуски).

    Выбрать каталог, в который будет установлен MPICH2 и определить, должен ли продукт быть доступен только устанавливающему его пользователю, или всем пользователям системы.

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

    После выполнения указанных действий, MPICH2 for Microsoft Windows успешно установлен.

    5.2.2. Установка Intel® Math Kernel Library Cluster Edition

    Для успешной установки Intel® Math Kernel Library Cluster Edition потребуется дистрибутив, загруженный с сайта Intel и файл регистрации, либо серийный номер (выдается при регистрации на сайте Intel).

    После запуска файла дистрибутива:

    Необходимо выбрать каталог, в который будут распакованы исполняемые файлы, использующиеся при установке продукта (затем этот каталог может быть удален).

    При установке продукта используется один из двух способов проверки ключа - ввод серийного номера (при этом для его проверки программа установки отправит его в Intel, т.е. для этого способа проверки необходимо наличие подключения к Internet), либо указание пути к ключевому файлу (для этого способа проверки соединения с Internet не требуется). Следует обратить внимание, что в пути к файлу лицензии не должно содержаться пробелов и русских (любых "не английских") символов.

    Необходимо принять условия лицензионного соглашения.

    Выбрать каталог, в который будет установлен продукт.

    Выбрать установку соответствующих переменных окружения.

    После выбора пункта "Install" начнется установка продукта.

    5.2.3. Установка Intel® C++ Compiler for Windows

    Для успешной установки Intel® C++ Compiler for Windows потребуется дистрибутив, загруженный с сайта Intel и файл регистрации, либо серийный номер (выдается при регистрации на сайте Intel).

    После запуска файла дистрибутива необходимо выбрать каталог, в который будут распакованы исполняемые файлы, использующиеся при установке продукта (затем этот каталог может быть удален).

    При установке продукта используется один из двух способов проверки ключа - ввод серийного номера (при этом для его проверки программа установки отправит его в Intel, т.е. для этого способа проверки необходимо наличие подключения к Internet), либо указание пути к ключевому файлу (для этого способа проверки соединения с Internet не требуется). Следует обратить внимание, что в пути к файлу лицензии не должно содержаться пробелов и русских (любых "не английских") символов.

    В списке устанавливаемых продуктов нужно выбрать, по крайней мере, установку компилятора и интеграцию с Microsoft Visual Studio.

    Необходимо принять условия лицензионного соглашения

    Ввести сведения о пользователе и организации и определить, должен ли продукт быть доступен только устанавливающему его пользователю, или всем пользователям системы.

    Выбрать тип установки (при выборе настраиваемой установки становится доступным выбор списка устанавливаемых компонент).

    После выбора типа установки, производится последовательная установка компилятора…

    …отладчика

    … и интеграция с Microsoft Visual Studio.

    Выбор пункта "Finish" завершает установку.

    5.2.4. Установка Intel® Visual Fortran Compiler for Windows

    Для успешной установки Intel® Visual Fortran Compiler for Windows потребуется дистрибутив, загруженный с сайта Intel и файл регистрации, либо серийный номер (выдается при регистрации на сайте Intel).

    После запуска файла дистрибутива необходимо выбрать каталог, в который будут распакованы исполняемые файлы, использующиеся при установке продукта (затем этот каталог может быть удален).

    При установке продукта используется один из двух способов проверки ключа - ввод серийного номера (при этом для его проверки установщик отправит его в Intel, т.е. для этого способа проверки необходимо наличие подключения к Internet), либо указание пути к ключевому файлу (для этого способа проверки соединения с Internet не требуется). Следует обратить внимание, что в пути к файлу лицензии не должно содержаться пробелов и русских (любых "не английских") символов.

    Необходимо принять условия лицензионного соглашения.

    Выбрать тип установки (при выборе настраиваемой установки становится доступным выбор списка устанавливаемых компонент).

    Выбор пункта "Finish" завершает установку.

    5.3. Задание 2.: Компиляция теста Linpack

    После установки всех необходимых компонентов можно приступить к компиляции теста. Исходный код теста располагается в каталоге <MKL_HOME>\benchmarks\mp_linpack, где <MKL_HOME> - каталог, в который была установлена библиотека Intel® Math Kernel Library Cluster Edition.

    Структура каталога с тестом - следующая:

  • include - заголовочные файлы.
  • makes - make-файлы, по одному для каждого каталога с кодом.
  • man - файлы справки, устанавливаемые при установке теста на Unix-системах.
  • setup -make-файлы, служащие для установки (инсталляции) теста на Unix-системах.
  • src - каталог, содержащий исходный код (разбитый по категориям), решающий задачу Linpack.
  • testing - каталог, содержащий исходный код тестовой оболочки.
  • www - документация по тесту.
  • В корне каталога находятся make-файлы, обслуживающие в целом процесс компиляции теста. Эти make-файлы настроены для использования компилятора Intel и MKL в качестве библиотеки, реализующей BLAS.

    Поскольку, в поставке MKL, кроме исходного кода теста присутствуют заранее настроенные make-файлы, теоретически, процесс компиляции теста является очень простым и состоит из 3-х шагов:

  • Запуск командной строки C++ Build Environment for applications running on IA-32 (При установке Intel® C++ Compiler for Windows с параметрами по умолчанию, доступен из меню "Пуск-> Intel(R) Software Development Tools-> Intel(R) C++ Compiler-> C++ Build Environment for applications running on IA-32")
  • В командной строке C++ Build Environment for applications running on IA-32 перейти в каталог
  • Выполнить команду компиляции. Команда компиляции имеет следующий вид:
  • nmake /f Makefile [arch=ia32/em64t/ia64] [LAdir="LAdir"] [MPIdir="mpidir"] [mpi="mpi"] [help|target]

    где:

  • arch - целевая архитектура, для которой должен быть скомпилирован тест,
  • LAdir - путь до каталога, в котором установлена библиотека BLAS,
  • MPIdir - путь до каталога, в котором установлена реализация MPI,
  • mpi - версия mpi,
  • target -цель сборки (компиляция, запуск теста, удаление построенных файлов).
  • Полная справка по необходимым для построения теста аргументам может быть получена при вызове утилиты nmake в каталоге теста, без параметров.

    В случае если MPI, MKL и компиляторы установлены в каталоги по умолчанию, команда компиляции теста принимает следующий вид: nmake /f Makefile mpi=mpich2 arch=ia32 instal. Т.е. целевая архитектура - ia32, версия mpi - mpich2, действие - install.

    Однако, к сожалению, поставляемые с данной версией Linpack make-файлы имеют ряд синтаксических ошибок, которые приводят к тому, что процесс компиляции, будучи запущенным, практически сразу же из-за них прерывается.

    Устранение этих ошибок само по себе могло бы стать самостоятельным заданием для отдельной лабораторной работы, однако, поскольку рассмотрение синтаксиса для утилиты nmake выходит за пределы данного курса, приведем здесь правки, которые необходимо внести, для обеспечения работоспособности make-файлов:

  • Поскольку в MPICH2 изменилось название библиотеки, содержащей реализацию функций MPI (ранее называлась mpich2.lib, в последней версии - mpi.lib ) в файле Make.inc (корневой раздел), в строках 76, 210, 352 необходимо название библиотеки изменить на mpi.lib
  • В файлах директории makes:
  • Файл Make.auxil - в строках с 56 по 70 удалить все вхождения символов "$(INCdep)"
  • Файл Make.blas - в строках с 53 по 69 удалить все вхождения символов "$(INCdep)"
  • Файл Make.comm - в строках с 55 по 81 удалить все вхождения символов "$(INCdep)"
  • Файл Make.gesv - в строках с 51 по 53 удалить все вхождения символов "$(INCdep)"
  • Файл Make.grid - в строках с 54 по 74 удалить все вхождения символов "$(INCdep)"
  • Файл Make.matgen - в строках с 54 по 66 удалить все вхождения символов "$(INCdep)"
  • Файл Make.panel - в строках с 55 по 61 удалить все вхождения символов "$(INCdep)"
  • Файл Make. pauxil - в строках с 60 по 108 удалить все вхождения символов "$(INCdep)"
  • Файл Make.pfact - в строках с 57 по 89 удалить все вхождения символов "$(INCdep)"
  • Файл Make. pgesv - в строках с 60 по 106 удалить все вхождения символов "$(INCdep)"
  • Файл Make. pmatgen - в строке 52 удалить символы "$(INCdep)"
  • Файл Make. ptest - в строках с 61 по 65 удалить все вхождения символов "$(INCdep)"
  • Файл Make. ptimer - в строках с 51 по 55 удалить все вхождения символов "$(INCdep)"
  • Файл Make. test - в строках с 60 по 64 удалить все вхождения символов "$(INCdep)"
  • Файл Make. timer - в строках с 52 по 56 удалить все вхождения символов "$(INCdep)"
  • Файл Make. units - в строках с 63 по 83 удалить все вхождения символов "$(INCdep)"
  • При редактировании make-файлов, следует следить за тем, чтобы удаление символов или редактирование строк не приводило к разрушению структуры make-файлов.

    Для успешной компиляции теста, кроме редактирования make-файлов, необходимо выполнить еще одно действие - в переменной окружения PATH необходимо прописать пути до исполняемых файлов компиляторов С++ и Fortran (icl и ifort) - соответственно <IC_Compiler>\IA32\Bin и <IF_Compiler>\ IA32\Bin, где <IC_Compiler> -каталог, в который был установлен Intel® C++ Compiler for Windows, <IF_Compiler> - каталог, в который был установлен Intel® Visual Fortran Compiler for Windows. Нужно это потому, что при компиляции теста используется icl, а для его сборки - ifort, а по умолчанию путь к ifort в C++ Build Environment for applications running on IA-32 не установлен.

    После выполнения всех этих действий, Linpack может быть скомпилирован командой: nmake /f Makefile mpi=mpich2 arch=ia32 install (при условии что MKL и MPI были установлены в каталоги по умолчанию - в противном случае нужно использовать параметры LAdir и MPIdir).

    В результате выполнения команды, в созданном при выполнении компиляции каталоге .\bin\ia32 будет построен исполняемый файл теста Linpack - xhpl.exe.

    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 без параметров).

    Вернуться к учебному плану