Россия, г. Саранск |
Оценка производительности кластерных систем с использованием теста Linpack
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 перейти в каталог <MKL_HOME>\benchmarks\mp_linpack
- Выполнить команду компиляции. Команда компиляции имеет следующий вид:
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.