Текущая версия анализатора не предоставляет DVM/OpenMP эксперту информацию об особенностях цикла. Недостающую информацию должен сообщать пользователь, используя специальные комментарии. Рассмотрим их подробнее.
Если программист хочет задать дополнительную информацию о программе, он должен вставить в текст программы комментарий, начинающийся с последовательности символов CPRG. Всё, что идёт после этих символов записывается в Базу Данных в таблицу специальных комментариев. Если требуется прокомментировать свойства какого-нибудь цикла, комментарии вставляются перед заголовком цикла.
DVM/OpenMP-эксперт обрабатывает следующие специальные комментарии:
· private(<переменная>) – задаёт переменную, для которой порождается локальная копия в каждой нити; начальные значения локальных переменной не определено.
· private_all(<переменная>) – задаёт переменную, которая будет private на протяжении всей программы.
· first_private(<переменная>) – задаёт переменную, для которой порождается локальная копия в каждой нити; локальные копии переменных инициализируются значением этой переменной в нити-мастере;.
|
|
· last_private(<переменная>) –переменной присваивается результат с последнего витка цикла;
· reduction(<переменная>(<оператор>)) - задаёт оператор и переменную; для переменной создаются локальные копии в каждой нити; локальные копии инициализируются соответственно типу оператора (для аддитивных операций – 0 или его аналоги, для мультипликативных операций – 1 или её аналоги); над локальными копиями переменной после выполнения всех операторов параллельной области выполняется заданный оператор [9]. В Таблице 1 отражено соответствие между текстовым представлением <оператор> и его аналогом на языке Fortran.
<оператор> | Оператор языка Fortran |
SUM | + |
PRODUCT | * |
MAX | Max |
MIN | Min |
AND | .and. |
OR | .or. |
EQV | .eqv. |
NEQV | .neqv. |
Таблица 1. Редукционные операции.
Аргументы командной строки
Рассмотрим аргументы командной строки, доступные при использовании DVM/OpenMP-эксперта.
Ключ | Описание |
-omp | Отрабатывает только OpenMP-эксперт. На выходе получаем параллельную программу для SMP-системы на языке Fortran-OpenMP. |
-dvm | Отрабатывает только DVM-эксперт. На выходе получаем параллельную программу для кластера на языке Fortran-DVM. |
-omp -dvm | Если присутствуют оба ключа (или нет ни одного из этих ключей), отрабатывает DVM/OpenMP-эксперт. На выходе получаем параллельную программу для SMP-кластера на языке Fortran-DVM/OpenMP |
-variants | Включается режим, в котором на выходе выдаются все варианты распараллеливания. Это могут быть DVM-варианты, OpenMP-варианты или DVM/OpenMP-варианты в зависимости от присутствия ключей -omp и -dvm. |
-nproc <число> | Задаем количество узлов кластера |
-ncore <число> | Задаем количество ядер, находящихся на каждом из узлов |
Таблица 2.Аргументы командной строки
|
|
Результаты тестирования
Тестирование анализатора проводилось на программах, реализующих решение уравнения Пуассона в трехмерном пространстве классическими итерационными методами: методом Якоби, методом последовательной верхней релаксации (SOR), методом красно-черного упорядочения (RedBlack), а также тесте, разработанном NASA Ames Research Center (LU). В тестах Якоби, SOR и RedBlack использовалась матрица размером 3000x3000.
DVM/OpenMP-варианты, полученные на указанных тестах с помощью DVM/OpenMP-эксперта, успешно прошли проверку на инструменте Intel Thread Checker 3.1. Intel Thread Checker – инструмент для отладки параллельных программ. Он осуществляет поиск мест с возможным недетерминированным поведением многопоточной программы, написанной как на основе библиотеки потоков (Windows или POSIX threads), так и с использованием технологии OpenMP. Intel Thread Checker рассматривает DVM/OpenMP-вариант как программу на языке Fortran-OpenMP. Отметим, что Intel Thread Checker не в состоянии проверить отсутствие ошибок в работе конвейерного алгоритма.
Тесты NAS являются самопроверяющимися, что позволяет убедиться в том, что распараллеленная программа выдает такой же результат, что и последовательная программа. Все сгенерированные DVM/OpenMP-варианты теста LU прошли проверку успешно.
Также отметим, что скорость работы DVM/OpenMP-эксперта почти не уступает скорости DVM-эксперта. Замедление в работе отражено в Таблице 3 на различных тестах.
Название теста | Замедление работы эксперта |
Якоби | 0,45% |
SOR | 0,18% |
RedBlack | 3% |
LU | 0,0683% |
Таблица 3. Замедление работы DVM/OpenMP-эксперта по сравнению с DVM-экспертом
В Таблице 4 приведены времена выполнения DVM/OpenMP-вариантов для тестовых программ. В Таблице 5 – ускорения программ. Ускорение вычисляется как отношение времени выполнения теста на одном ядре ко времени выполнения распараллеленного теста на нескольких ядрах. Программы компилировались как Fortran-OpenMP-программы, и запускались на вычислительном комплексе IBM eServer pSeries 690 (Regatta).
Количество ядер | Времена выполнения тестовых программ, сек. | |||
Якоби | SOR | RedBlack | LU | |
1 | 2,26 | 0,42 | 5,48 | 206,41 |
2 | 1,41 | 0,28 | 3,39 | 148,44 |
4 | 0,91 | 0,23 | 3,36 | 125,79 |
8 | 0,76 | 0,46 | 6,13 | 117,21 |
Таблица 4. Времена запуска тестовых программ, в секундах
Количество ядер | Ускорение тестовых программ | |||
Якоби | SOR | RedBlack | LU | |
2 | 1,60 | 1,50 | 1,62 | 1,39 |
4 | 2,48 | 1,83 | 1,63 | 1,64 |
8 | 2,97 | 0,91 | 0,89 | 1,76 |
Таблица 5. Ускорения, продемонстрированное на тестовых программах
Графики временен выполнения и ускорений распараллеленных тестовых примеров можно найти в Приложении А.
Заключение
В рамках дипломной работы был реализована программа DVM/OpenMP-эксперт. Общий объем разработанного кода составил более 2000 строк на языке С++.
DVM/OpenMP-эксперт входит в состав экспериментальной системы автоматизации распараллеливания. За основу разработки был взят компонент системы, реализованный к моменту начала работы над поставленной задачей – DVM-эксперт.
Работа системы успешно прошла проверку инструментом Intel Thread Checker, а также самопроверяющимся тестом от NASA Ames Research Center. Также система была протестирована на Fotran-программах, реализующих следующие алгоритмы: классический алгоритм Якоби, алгоритм верхней релаксации (SOR), алгоритм решения системы линейных алгебраический уравнения методом Гаусса, алгоритм красно-черного упорядочения (RedBlack), а также на тесте NAS LU. Распараллеленные тесты продемонстрировали ускорение при запуске на SMP-системе.
Приложение А. Графики времен выполнения и ускорений распараллеленных тестовых программ
|
|
График 1.А График 1.Б