МИНОБРНАУКИ РФ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ “САРАТОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ Н.Г.ЧЕРНЫШЕВСКОГО” (СГУ) УДК 004.4 УТВЕРЖДАЮ Ректор Федерального государственного бюджетного образовательного учреждения высшего профессионального образования “Саратовский государственный университет имени Н.Г.Чернышевского” _____________________ Л.Ю.Коссович «_____» _________________2011г. МП ОТЧЕТ О НАУЧНО-ИССЛЕДОВАТЕЛЬСКОЙ РАБОТЕ по Государственному контракту от 7 сентября 2009 года № 07.Р20.11.0029 “Подготовка и переподготовка профильных специалистов на базе центров образования и разработок в сфере информационных технологий в Южном и Северо-Кавказском федеральных округах” Тема НИР: “Исследования по оптимальному использованию распределенной и кэш памяти” Научный руководитель Б.Я. Штейнберг Саратов 2011 Список исполнителей Научный руководитель НИР, зав. каф. Алгебры и дискретной математики мехмата ЮФУ, д.т.н. Штейнберг Б.Я. (введение) _________________ подпись, дата Исполнители темы Студент 2 курса магистратуры факультета математики, механики и компьютерных наук ЮФУ Студент 2 курса магистратуры факультета математики, механики и компьютерных наук ЮФУ Гервич Лев (раздел 1, 2) _________________ подпись, дата ______________ подпись, дата 2 Юрушкин Михаил (раздел 3, 4, 6) Содержание Список исполнителей ....................................................................................................................................................... 2 Содержание ....................................................................................................................................................................... 3 Обозначения и сокращения ............................................................................................................................................. 4 Реферат .............................................................................................................................................................................. 6 Введение ............................................................................................................................................................................ 7 1 Параллельный итерационный алгоритм решения задачи Дирихле ........................................................................ 11 1.1 Задача Дирихле для уравнения Лапласа............................................................................................................. 11 1.2 Разностная схема .................................................................................................................................................. 12 1.3 Последовательный алгоритм (метод Якоби) ..................................................................................................... 13 1.4 Организация параллельных вычислений для систем с распределенной памятью ......................................... 15 1.5 Параллельный алгоритм решения задачи Дирихле №1 .................................................................................... 16 1.6 Параллельный алгоритм №1, написанный на псевдокоде: .............................................................................. 18 2 Размещение данных с перекрытием для задачи Дирихле........................................................................................ 20 2.1 Параллельный алгоритм решения задачи Дирихле №2 .................................................................................... 20 2.2 Параллельный алгоритм №2, написанный на псевдокоде................................................................................ 22 2.3 Численные эксперименты .................................................................................................................................... 23 2.4 Использование перекрытий для алгоритма параллельного итерационного умножения ленточной матрицы на вектор ...................................................................................................................................................................... 24 3 Использование блочного распределения данных в задаче Дирихле и оптимизация в кэш-памяти .................... 34 4 Реализация алгоритма распределения данных в общей и распределенной памяти в системе ДВОР ................. 36 4. 1 Блочно-аффинное распределение массивов в распределенной памяти ......................................................... 36 4.2 Поддерживаемые входные языки ....................................................................................................................... 39 4.3 Особенности реализации ..................................................................................................................................... 39 4.4 Результаты численных экспериментов, использования блочного распределения данных ........................... 40 5 Реализация ВЕБ-интерфейса ...................................................................................................................................... 43 5.1 Входные программы............................................................................................................................................. 43 5.2 Автоматическое распределение данных под кэш-память ................................................................................ 44 6 Расширение языка ФОРТРАН для аффинных размещений данных в распределенной памяти .......................... 47 6.1 Влияние особенностей внутреннего представления ДВОР на парсер языка ФОРТРАН .............................. 48 Приложение 1. РИД (Результаты интеллектуальной деятельности), в разработке которых принимали участие исполнители данной темы. ............................................................................................................................................ 55 3 Обозначения и сокращения ДВОР Диалоговый высокоуровневый оптимизирующий распараллеливатель MPI Message Passing Interface - интерфейс передачи сообщений MPP Massively Parallel Processors - массивно-параллельная архитектура MIMD Multiple Instruction, Multiple Data - много потоков команд, много потоков данных (МКМД) MISD Multiple Instruction, Single Data - много потоков команд, один поток данных (МКОД) SIMD Single Instruction, Multiple Data - один поток команд, много потоков данных (ОКМД) SISD Single Instruction, Single Data - один поток команд, один поток данных (ОКОД) SMP Symmetric Multiprocessing – симметричное мультипроцессирование в вычислительных системах SPMD Single Program, Multiple Data - одна программа, много потоков данных (ОПМД) PVM Parallel Virtual Machine - виртуальная параллельная машина БД База данных ВК Вычислительный комплекс ВС Вычислительная система НИР Научно-исследовательская работа РИД ОКР Результат интеллектуальной деятельности Опытно-конструкторские работы 4 ОНТД Отчетная научно-техническая документация ООП Объектно-ориентированный подход ОП Оперативная память ОС Операционная система ПИК Программно-информационный комплекс ПК Персональный компьютер ПО Программное обеспечение ПЭ Процессорные элементы РИД Результат интеллектуальной деятельности САПР Система автоматизированного проектирования СЛАУ Система линейных алгебраических уравнений 5 Реферат Отчет 56 с., 10 рис., 6 табл., 26 источников, 1 прил. УРАВНЕНИЯ МАТЕМАТИЧЕСКОЙ ФИЗИКИ, ЧИСЛЕННЫЕ МЕТОДЫ, АВТОМАТИЧЕСКОЕ РАСПАРАЛЛЕЛИВАНИЕ, РАСПРЕДЕЛЕННАЯ ПАМЯТЬ, КЭШ-ПАМЯТЬ, РАЗМЕЩЕНИЕ, РАЗМЕЩЕНИЕ С ОПТИМИЗАЦИЯ ПЕРЕКРЫТИЯМИ, БЛОЧНО-АФИННОЕ МЕЖПРОЦЕССОРНЫХ ПЕРЕСЫЛОК, ОПТИМИЗАЦИЯ КЭШ-ПРОМАХОВ, КЛАСТЕРНЫЕ СИСТЕМЫ, ПАРАЛЛЕЛЬНЫЕ ВЫЧИСЛЕНИЯ Научно-исследовательская работа по теме «Исследования по оптимальному использованию распределенной и кэш памяти» выполняется в рамках федеральной целевой программы развития образования на 2011-2015 годы по Государственному контракту от 7 сентября 2009 года № 07.Р20.11.0029. Объектом исследования являются вычисления в общей и распределенной памяти. Цель работы — разработка методов оптимизации проводились численные работы с общей и распределенной памятью. В процессе работы эксперименты на высокопроизводительных вычислительных системах. В результате исследования были разработаны методы, позволяющие ускорить производительность программ. Методы были продемонстрированы на примере метода Якоби для задачи Дирихле для уравнения Лапласа, заданного в трехмерной области. Настоящий отчет является заключительным. Работа в рамках проекта завершена в соответствии с календарным планом Государственного контракта от 7 сентября 2009 года № 07.Р20.11.0029. 6 Введение В данной работе исследуется одновременное использование двух методов оптимизации использования распределенной и кэш-памяти, которые разрабатываются авторами. На основе этих методов разработан параллельный итерационный алгоритм решения задачи Дирихле, который использует нестандартное размещение данных как на уровне взаимодействия процессоров в высокопроизводительном кластере, так и на уровне общей памяти. Такое размещение данных позволяет существенно увеличить производительность алгоритмом. программы Проведены по сравнению численные со стандартным эксперименты параллельным на нескольких высокопроизводительных кластерах. Ведутся работы по автоматизации использования рассматриваемых методов оптимизации. На основе распараллеливающей системы ДВОР [1, 2], в состав разработчиков которой входят авторы данной работы, разрабатывается оптимизирующий распараллеливающий конвертор [3]. Актуальность выбранной темы состоит в том, что параллельные компьютеры входят в нашу жизнь очень стремительно, а параллельные программы на этих компьютерах параллельного часто показывают программирования низкую еще не эффективность. гарантирует, Знание что технологий разрабатываемая параллельная программа окажется эффективной. И дело здесь не только в пресловутых пересылках данных. Рассмотрим проблему подробнее. Когда компьютеры только появились и начали развиваться, самой долгой операцией было умножение чисел (деление дольше, но встречается значительно реже). Подготовка данных для вычислений не составляла сколько-нибудь заметного времени. Тогда получила активное развитие теория сложности алгоритмов. Сложность алгоритма – это количество вычислительных операций, как функция входных данных. Параллельные алгоритмы – это алгоритмы, в которых одновременно выполняются арифметические операции. В нынешнем поколении компьютеров все наоборот. Чтение 7 данных из оперативной памяти примерно в 20 раз дольше их перемножения. И это отставание скорости доступа к данным относительно скорости их обработки продолжает усугубляться [4]. Из этого вытекает, что в нынешних условиях следует минимизировать, в первую очередь, обращения к памяти (такой оптимизации посвящена данная работа). Сложность алгоритмов нужно рассматривать, как количество обращений к памяти, а не количество вычислительных операций. И еще: компиляторы, как и 50 лет назад, размещают данные в памяти независимо от исполняемого кода. Например, в языке ФОРТРАН матрицы размещаются в линейной оперативной памяти по столбцам, в языках Си и Паскаль – по строкам. Это иногда приводит к неэффективному использованию кэш-памяти. Один из методов оптимизации данной работы состоит в переразмещении данных, исправляющей неэффективность компилятора. Авторы данной работы ведут эксперименты (в сети Интернет выложена первая такая программа [3]) по созданию компиляторов нового поколения, в которых пользователь получает возможность описывать размещение данных, причем, например, для матриц, не только «по строкам» или «по столбцам», но и по блокам, и в скошенном виде и др. Стандартная библиотека MPI предполагает, что в каждом процессоре находятся все данные программы полностью. Для многих задач рассылка всех данных избыточна (и приводит к неоправданным расходам памяти и времени). Многие программисты делают специальные ухищрения, чтобы обойти эту неэффективность. Так делается и в данной работе: в каждом процессоре хранится лишь необходимая часть данных. В автораспараллеливателе [3] такое распределение выполняется автоматически. Суть метода размещения данных в распределенной памяти с перекрытиями состоит в том, чтобы за счет некоторого увеличения объема хранимых данных в каждом процессоре (в некоторых процессорах часть хранимых данных одинакова) и количества выполняемых операций сократить количество межпроцессорных пересылок (обращений к памяти 8 соседних процессоров – самая долгая операция). Возможность автоматически размещать данные с перекрытиями пока в [3] не реализована – но это задача не долгого времени. Метод переразмещения данных в оперативной памяти с оптимизацией использования кэш-памяти приводит к написанию специальной подпрограммы, которая данные переразмещает выгодным образом, и к связанному с этим изменению оптимизируемой программы. Изменение оптимизируемой программы производится с использованием системы переразмещения данных ДВОР. в Там общей реализованы памяти. и специальные Эту возможность команды автоматического переразмещения можно проверить на задаче перемножения матриц в том же ON-LINEАвтораспараллеливателе [3]. Оба описанных метода разрабатываются авторами данной работы [1, 5], а в данной работе исследуется эффективность их сочетания на примере оптимизации параллельной программы решения трехмерной задачи Дирихле для уравнения Лапласа итерационным методом Якоби. В тексте, для наглядности, приводятся иллюстрации для двумерного случая этой задачи. Проведены численные эксперименты на высокопроизводительных кластерах INFINI ЮГИНФО (Южный федеральный университет) [6] и РВС (Институт прикладной математики РАН им. М.В. Келдыша) [7]. По сравнению со стандартным параллельным алгоритмом данный алгоритм дает ускорение в 2.4 раза. Проведенные численные эксперименты служат обоснованием распараллеливающих/оптимизирующих разработан экспериментальный их компиляторах. На внедрения мехмате ЮФУ в уже автоматический распараллеливатель программ с автоматическим размещением данных в распределенной памяти [1] на основе Диалогового высокоуровневого оптимизирующего распараллеливателя программ (ДВОР) [8]. Реализовано также автоматическое перераспределение элементов матриц для оптимизации кэш-памяти [1]. 9 Проект ДВОР представляет собой программный инструментальный комплекс, ориентированный на разработку распараллеливающих и оптимизирующих компиляторов с языков программирования высокого уровня (C, Фортран и возможно добавление других процедурных языков), систем полуавтоматического распараллеливания. В данной работе также приводится описание используемых методов при численных решениях некоторых других задач. 10 1 Параллельный итерационный алгоритм решения задачи Дирихле Такие стационарные процессы, как теплопроводность, колебания, диффузия, описываются уравнениями эллиптического типа. Наиболее распространенным уравнением данного типа является уравнение Лапласа: ∆𝑢(𝑥, 𝑦, 𝑧) = 0[9]. Трехмерное уравнение Лапласа используется в теории электромагнитных полей и волн для расчета трехмерного электрического поля [10] а также для задач стационарного теплового поля [9]. 1.1 Задача Дирихле для уравнения Лапласа Рассмотрим задачу Дирихле для уравнения Лапласа [9], заданную на декартовом произведении D=[0,1]×[0,1]. Для задачи Дирихле ставятся граничные условия первого рода [9]: u (x,0,z)=a(x,z) u (x,1,z)=b(x,z) u (y,0,z)=c (y,z) u (y,1,z)=d (y,z) u (x,y,0)=e(x,y) u (x,y,1)=f(x,y) 11 1.2 Разностная схема Одним из наиболее применяемых методов численного решения уравнения Лапласа является метод конечных разностей (метод сеток) [11]. В данном методе область решения представляется в виде равномерной сетки узлов. Так, например, прямоугольная сетка в области может быть задана в виде (рисунок 1): Рисунок 1 - Метод сеток для двумерной задачи Дирихле Разобьем каждое измерение области D на n+1 отрезков. Величина n задает количество узлов по каждой из координат области D. 12 Обозначим приближение функции u(xi,yj,zk) в точках (xi,yj,zk) , используемое в сеточном представлении, через uijk. Тогда, с использованием семиточечного шаблона для вычисления значений производных, уравнение Лапласа может быть представлено в конечно-разностной форме. 𝑢𝑖𝑗𝑘 = (𝑢𝑖𝑗+1𝑘 +𝑢𝑖𝑗−1𝑘 +𝑢𝑖−1𝑗𝑘 +𝑢𝑖+1𝑗𝑘 +𝑢𝑖𝑗𝑘−1 +𝑢𝑖𝑗𝑘+1 ) 6 , 𝑖 = 1. . 𝑛 − 1, 𝑗 = 1. . 𝑛 − 1, 𝑘 = 1. . 𝑛 − 1 (*) Граничные условия записываются следующим образом: 𝑢𝑖0𝑘 = 𝑎(𝑖 ∗ ℎ, 𝑘 ∗ ℎ) 𝑢𝑖𝑛𝑘 = 𝑏(𝑖 ∗ ℎ, 𝑘 ∗ ℎ) 𝑢0𝑗𝑘 = 𝑐(𝑗 ∗ ℎ, 𝑘 ∗ ℎ) 𝑢𝑛𝑗𝑘 = 𝑑(𝑗 ∗ ℎ, 𝑘 ∗ ℎ) 𝑢𝑖𝑗0 = 𝑒(𝑖 ∗ ℎ, 𝑗 ∗ ℎ) 𝑢𝑖𝑗𝑛 = 𝑓(𝑖 ∗ ℎ, 𝑗 ∗ ℎ) 1.3 Последовательный алгоритм (метод Якоби) Разностное уравнение, записанное в форме (*), позволяет определить новые значения по известным значениям функции в соседних узлах используемого шаблона. Общая схема для итерационных алгоритмов решения задачи Дирихле такова: вначале строится некоторое приближение решение, а затем оно уточняется с использованием разностного соотношения [12]. Метод Якоби для проведения итераций уточнения использует правило 13 𝑢𝑙 𝑖𝑗𝑘 = (𝑢𝑙−1 𝑖𝑗+1𝑘 +𝑢𝑙−1 𝑖𝑗−1𝑘 +𝑢𝑙−1 𝑖−1𝑗𝑘 +𝑢𝑙−1 𝑖+1𝑗𝑘 +𝑢𝑙−1 𝑖𝑗𝑘−1 +𝑢𝑙−1 𝑖𝑗𝑘+1 ) 6 , 𝑖 = 1. . 𝑛 − 1, 𝑗 = 1. . 𝑛 − 1, 𝑘 = 1. . 𝑛 − 1, по которому очередное l-ое приближение значения uijk вычисляется по предпоследнему (l-1)-ому приближению значений ui-1jk, uij-1k, uijk-1, ui+1jk, uij+1k и uijk+1. Количество итераций для метода Якоби выбирается фиксировано. Последовательность решений, получаемых методом сеток, равномерно сходится к решению задачи Дирихле, а погрешность решения имеет порядок h2 [11]. Рассмотренный алгоритм (метод Якоби) на псевдокоде, приближенном к алгоритмическому языку С, может быть представлен в виде: For (i=0,…,maxIt) { For (j=1,..,n-1) For (k=1,..,n-1) For (s=1,..,n-1) B[j,k,s]=1/6*(U[j,k-1,s]+ U[j,k+1,s]+ U[j-1,k,s]+ U[j+1,k,s]+U[j,k,s-1]+ U[j,k,s+1]) For (j=1,..,n-1) For (k=1,..,n-1) For (s=1,..,n-1) U[j,k,s]=B[j,k,s] } 14 1.4 Организация параллельных вычислений для систем с распределенной памятью Благодаря широкому распространению высокопроизводительных кластерных вычислительных систем стало актуальным распределенной памятью. Вычисления в использование процессоров с распределенной памяти отличны от вычислений в общей памяти тем, что в распределенной памяти для взаимодействия процессоров используется интерфейс передачи сообщений [14]. Системы с распределенной памятью являются архитектурно более сложными устройствами, чем системы с общей памятью. В 1994 г. был принят стандарт MPI (Message Passing Interface) - библиотека функций, обеспечивающая взаимодействие параллельных процессов с помощью механизма передачи сообщений [14]. В MPI поддерживаются интерфейсы для языков C и FORTRAN. В настоящее время MPI является основной технологией программирования для высокопроизводительных систем с распределенной памятью [15]. Для нижеизложенных алгоритмов применяется блочная схема разделения данных. При блочном представлении данных происходит увеличение количества граничных строк на каждом процессоре по сравнению с ленточным. Это приводит, к большему количеству пересылаемых при обмене граничных строк. Однако, блочная схема представления области решения становится оправданной при большом количестве узлов сетки, так как при увеличении числа пересылок уменьшается объем каждой из них, что приводит к уменьшению затрат на обмены данными [12]. Блоки трехмерной сетки Дирихле размещаются по процессорным элементам согласно топологии 3D-куб (рисунок 2). 15 Рисунок 2 - Размещение блоков на 8-процессорном 3D-кубе 1.5 Параллельный алгоритм решения задачи Дирихле №1 Проиллюстрируем данный алгоритм на примере двумерной задачи Дирихле. Естественным образом его можно обобщить для трехмерной задачи. Пусть p2 – количество процессорных элементов вычислительной системы. Разобьем нашу область на p2 блоков (рисунок 3) и разместим блоки в соответствии с виртуальной топологией двумерной решетки. Каждый блок нумеруется индексами i, j в соответствии с расположением на решетке. Правым соседом процессора по i-му измерению называется процессор, у которого i-й индекс на единицу больше текущего. Левым соседом процессора по i-му измерению называется процессор, у которого i-й индекс на единицу меньше текущего. Аналогично определяются соседи по j-му измерению [13]. Без пересылки данных мы не сможем произвести итерацию метода Якоби для граничных элементов блока. 16 Поэтому перед выполнением итерации необходимо произвести по i-му измерению обмен граничных строк, а по j-му – граничных столбцов (рисунок 4). Каждый процессор отсылает верхнюю граничную строку левому соседу по i-му измерению, а нижнюю – правому. Точно также процессор отсылает правый граничный столбец правому соседу по j-му измерению, а левый – левому. Такая пересылка производится на каждой итерации. После пересылки в каждом блоке (рисунок 5) для внутренних элементов нового блока выполняется итерация цикла. Рисунок 3 - Размещение блоков на процессорной решетке Рисунок 4 - Схема межпроцессорных обменов данными для стандартного параллельного алгоритма решения двумерной задачи Дирихле 17 Рисунок 5 - Данные одного блока (в центре) и пересылаемые к нему данные из других блоков (по периметру, выделены синим цветом). 1.6 Параллельный алгоритм №1, написанный на псевдокоде: For (l=0,…,maxIt) { Send (right_ neighbor_j, U[I,n/p-1]) Recv (right_ neighbor_j, U[I,n/p]) Send (left_ neighbor_j, U[I,1]) Recv (left_ neighbor_j, U[I,0]) Send (right_ neighbor_i, U[n/p-1,j]) Recv (right_ neighbor_i, U[n/p,j]) Send (left_ neighbor_i, U[1,j]) Recv (left_ neighbor_i, U[0,j]) For (i=1,..., n/p-1) For (j=1,..., n/p-1) 18 B[i,j]=0.25*(U[I,j-1]+ U[I,j+1]+ U[I-1,j]+ U[I+1,j]) For (i=1,..., n/p-1) For (j=1,..., n/p-1) U[i,j]=B[i,j], } /* U[i,0], U[i,n/p], U[0,j], U[n/p,j] (i=1,..,n/p-1, j=1,..,n/p-1)– строки и столбцы, полученные от соседних процессоров. */ 19 2 Размещение данных с перекрытием для задачи Дирихле В рассматриваемом выше параллельном алгоритме на каждой итерации происходит пересылка данных. Инициализация одной пересылки данных является дорогой операцией. Поэтому для того, чтобы ускорить алгоритм, необходимо уменьшить частоту пересылок. Это можно сделать с применением техники размещения данных с перекрытиями. Такая техника уже была применена в алгоритме параллельного итерационного умножения ленточной матрицы на вектор [5]. 2.1 Параллельный алгоритм решения задачи Дирихле №2 Данный алгоритм мы также проиллюстрируем на примере двумерной задачи Дирихле. Размер перекрытия – количество строк (столбцов), размещенных в текущем процессоре, но принадлежащих также блоку соседнего процессора. Выберем для метода Якоби размер перекрытия, равный m. На первой итерации каждый процессор отсылает m верхних граничных строк левому соседу по i-му измерению, а m нижних – правому. Затем процессор отсылает m правых граничных столбцов правому соседу по j-му измерению, а m левых – левому. Однако такой пересылки недостаточно для выполнения итерации метода Якоби. Необходимо произвести также обмен граничных подблоков размера (m)*(m) по всем диагоналям решетки так, как это показано на рисунке 6. Теперь для внутренних элементов нового блока можно выполнить итерацию метода Якоби. На следующей итерации граничные элементы каждого блока можно отбросить (рисунок 7). Тогда для новых внутренних элементов блока можно снова выполнить итерацию метода Якоби. И так далее до m-й итерации, на которой необходимо снова выполнить описанную пересылку. Таким образом, пересылка выполняется через каждые m-1 итераций. Данный метод можно обобщить для n-мерной задачи Дирихле. 20 Например, для трехмерной задачи аналогичные пересылки будут производиться в соответствии с виртуальной топологией куба. Рисунок 6 - Схема межпроцессорных обменов данными для параллельного алгоритма решения двумерной задачи Дирихле с перекрытиями Сравнивая данный алгоритм с предыдущим, получаем, что: 1) Количество алгебраических операций у алгоритма №2 больше, чем у алгоритма №1. 2) Объем пересылок у обоих алгоритмов одинаков. 3) Пересылки алгоритма №2 коммуникационно более сложны, чем пересылки алгоритма №1. 4) Частота пересылок алгоритма №2 меньше частоты пересылок алгоритма №1. Надо отметить, что данная задача плохо масштабируема. Если сетка содержит малое количество элементов, т.е. количество алгебраических операций невелико, то распараллеливание не даст выигрыша в производительности. 21 Рисунок 7 - Данные одного блока (в центре) и пересылаемые к нему из других блоков (по периметру и по углам, выделены синим цветом) 2.2 Параллельный алгоритм №2, написанный на псевдокоде For (l=0,…,maxIt) { If (l%m==0) { Left_board=1; Right_board=n/p+2*m-1 SendRecv (right_ neighbor_j) SendRecv (left_ neighbor_j) SendRecv (right_ neighbor_i) SendRecv (left_ neighbor_i) SendRecv (left_ neighbor_ij) 22 SendRecv (right_ neighbor_ij) SendRecv (left_ neighbor_ji) SendRecv (right_ neighbor_ji) } For (i= Left_board,..., Right_board) For (j== Left_board,..., Right_board) B[i,j]=0.25*(U[I,j-1]+ U[I,j+1]+ U[I-1,j]+ U[I+1,j]) For (i= Left_board,..., Right_board) For (i= Left_board,..., Right_board) U[i,j]=B[i,j], Left_board++; Right_Board--; } 2.3 Численные эксперименты Численные эксперименты (таблица 1) проводились на кластере INFINI Югинфо. INFINI — Linux-кластер, состоящий из 20 вычислительных узлов, соединенных служебной сетью Gigabit Ethernet и скоростной коммуникационной сетью SDR Infiniband (скорость передачи 700 Мб/сек, латентность 5 мксек). Каждый вычислительный узел представляет собой компьютер с процессором Intel Pentium 4 3.4 Ггц и оперативной памятью DDR2 2Гб. Производительность каждого вычислительного узла на тесте Linpack составляет 5.8 Gflops, а всего кластера в целом 115 Gflops. При разработке использовались среда параллельного программирования 1.1.0) и компилятор GCC 4.3.2. 23 MPI (MVAPICH- Таблица 1 Результаты численных экспериментов Кластер Размерно Количест Количеств Время INFINI сть сетки во о итераций Югинфо Время Время Время простого простого алгоритма алгоритма Процессор алгорит алгоритма с с ов ма с перекрытие перекрытие блочность м ю м и блочность ю 500*500 2000 8 26m *500 24m 36s 13m 38s 11m 24s 27s Также для экспериментов был использован кластер РВС ИПМ РАН им. М.В. Келдыша. Для выполнения рассматриваемой программы был предоставлен доступ к двум четырехпроцессорным узлам; каждый процессор - Intel Xeon CPU E5430 2.66 GHz [7]. На предоставленной конфигурации ускорения программы не получено. 2.4 Использование перекрытий для алгоритма параллельного итерационного умножения ленточной матрицы на вектор Дана матрица A размера n*n с шириной полуленты, равной h. Если выбрать размер перекрытия, равный целому числу m*h, то пересылки данных размера (m+1)* h между двумя соседними процессорами могут выполняться через m итераций. Дан вектор X размерности n. Пусть p - количество процессоров в распределенной системе. Матрица и вектор размещены на распределенной системе так, как показано на рисунке 8. Будем считать, что ширина полуленты мала по сравнению с величиной n/p. 24 Рисунок 8 - Размещение данных с перекрытием для параллельного итерационного умножения ленточной матрицы на вектор Можно выделить следующие шаги алгоритма: 1) На итерациях, кратных m+1, каждый процессор пересылает свои крайние (m+1)*h элементов соседним (рисунок 9). 2) На остальных итерациях в каждом процессоре происходит умножение полосы на вектор. 3) На каждом шаге размер используемой полосы уменьшается на h. Рисунок 9 - Параллельное итерационное умножение ленточной матрицы на вектор 25 2.5 Зависимость количества пересылок от перекрытия Теоретическое оптимальное перекрытие для заданного числа процессоров можно определить следующим образом. Пусть t - время выполнения одной операции умножения, s – количество итераций, n – размерность матрицы, w – ширина ленты, m – коэффициент перекрытия, α и β – параметры пересылки. Тогда время выполнения алгоритма можно выразить функцией: 𝑁 𝛼 ∗ (2 ∗ ℎ ∗ (𝑚 + 1)) + 𝛽 𝑓(𝑝, 𝑚) = 𝑠 ∗ (( + 2 ∗ 𝑚 ∗ ℎ) ∗ 𝑤 ∗ 𝑡 + ) 𝑝 𝑚 Найдем минимум этой функции, взяв производную и приравняв ее к нулю: 𝑓 ′(𝑝,𝑚) = 𝑠 ∗ ((2 ∗ ℎ) ∗ 𝑤 ∗ 𝑡 − 𝛼 ∗ (2 ∗ ℎ) + 𝛽 )=0 𝑚2 Отсюда: 𝑚=√ α∗(w−1)+β 2∗(w−1)∗w∗t . Так как m не может превышать количество итераций, то: 26 α ∗ (w − 1) + β 𝑚 = min(√ , 𝑠) 2 ∗ (w − 1) ∗ w ∗ t Подставим в 𝑓(𝑝, 𝑚) результаты численных экспериментов, определим методом наименьших квадратов значения t, α и β, и найдем оптимальные коэффициенты перекрытий для кластера ЮГИНФО [6] и кластера мехмата [16] (Таблица 2). Кластер мехмата состоит из 8 узлов, соединенных скоростной сетью DDR Infiniband (Doube Rate — полоса пропускания 1400 Мб/сек, латентность 3.5 мксек) и служебной сетью Gigabit Ethernet. Архитектура InfiniBand доставляет данные со скоростью 10 Гбит/с в любую точку коммутируемой структуры, на практике реализуя принцип "Равная пропускная способность повсеместно" [17]. Узел содержит два 4ядерных процессора Intel Xeon CPU E5345 2.33GHz и 16 Гб памяти. Пиковая производительность кластера составляет 596,48 Gflops. При разработке использовались среда параллельного программирования MPI (ОpenMPI) и компилятор GCC 4.3.2 [18]. N – размерность матрицы (тыс.), С – количество ненулевых элементов матрицы (тыс.), S – количество итераций, W – ширина ленты, M – коэффициент перекрытия. Красным цветом выделены минимальные значения времени выполнения относительно размера перекрытия. Численные эксперименты (таблица 2) были проведены на кластере INFINI ЮГИНФО и кластере мехмата ЮФУ. Алгоритмы реализованы на языке C с использованием MPI. Результаты получены при помощи компилятора GCC 4.3.2. Данные, используемые в численных экспериментах, имеют тип double. Для матриц с небольшой шириной ленты алгоритм с перекрытием дает преимущество по времени, равное примерно 5-35 % (для разных значений размера перекрытия) по сравнению с алгоритмом без перекрытий. 27 Таблица 2 Результаты численных экспериментов Результаты N С S W M численных экспериментов Время Время Время Время Оптим вычисления вычислен вычислен вычисл альн. на 2-х ия на 4-х ия на 8-и ения перекр процессора процессор процессор на 16-и ытие х (мкс) ах (мкс) ах (мкс) процес сорах (мкс) Кластер Югинфо t=0.31 α=-19.2 β=1059.3 10 110 10 11 0 7802 5816 4353 1 7912 4736 2908 2 7752 4859 2764 3 7755 4880 2767 4 7750 4683 2761 5 7741 4926 2802 6 7749 4925 2837 7 7745 4839 2860 28 5 Продолжение таблицы 2 100 100 210 210 1000 51000 10 10 20 21 21 51 8 7740 5041 3297 9 7741 4975 2960 0 137446 83968 44575 1 137677 83992 43321 2 137073 82585 47855 3 136835 83253 43402 4 137081 83326 43473 5 136939 83397 43814 6 137196 83445 44355 7 137718 87855 42931 8 139090 82841 43432 9 138924 83752 43503 0 6132951 3617505 1820556 1 6164810 3634748 1833732 2 6166975 3634610 1835665 3 6169422 3640731 1835961 4 6173357 3635246 1834647 5 6174070 3639808 1836198 6 6184052 3638184 1840778 7 6175629 3645770 1835706 8 6179146 3648682 1848569 29 2 0 Продолжение таблицы 2 9 6187218 3640720 1834191 10 6183602 3641997 1835449 11 6182875 3641498 1847674 12 6178978 3640823 1835963 13 6181043 3653139 1836963 14 6188460 3649840 1836643 15 6180727 3647187 1841029 16 6181781 3658477 1844165 17 6186632 3659002 1844066 18 6181863 3657980 1843463 19 6182622 3656583 1838980 Кластер Мехмата t=1.99 α=-1033.7 β=54119.1 10 11 10 11 0 18750 14539 9222 6470 1 19034 12076 7160 4006 2 18740 11327 6177 3240 3 18642 11426 6431 3414 4 18698 11292 5836 3154 30 9 Продолжение таблицы 2 100 2100 10 21 5 18727 11303 6215 3165 6 18711 11282 6115 3204 7 18768 11437 6386 3316 8 18786 11398 6290 3324 9 18815 11279 5982 3261 0 363189 214782 107031 57218 1 364967 213043 105399 54436 2 363757 212282 104866 54369 3 364408 212973 104667 55146 4 364331 212413 105034 54947 6 364482 212849 106725 54847 7 364718 213479 105550 55324 8 364462 213013 106336 55227 31 6 Продолжение таблицы 2 1000 51000 20 51 9 364890 213206 106521 54992 0 17176645 10000587 5047703 2501710 1 17218020 10031959 5015586 2506813 2 17230905 10014442 5026692 2505745 3 17217670 10064864 5023911 2547858 4 17253409 10069403 5024048 2510202 5 17313577 10070307 5031840 2512560 6 17328930 10077497 5022203 2513230 32 0-1 Продолжение таблицы 2 7 17320145 10043063 5023704 2522242 8 17259943 10042949 5034142 2515344 9 17257819 10132734 5076641 2514344 10 17343238 10035892 5038547 2521490 12 17264563 10035730 5047477 2518771 13 17243089 10038220 5041863 2520044 14 17268488 10039153 5039753 2511958 15 17242286 10039369 5037905 2524376 16 17261063 10036746 5040371 2540525 17 17244634 10033394 5041525 2514426 18 17267694 10031260 5061878 2519838 19 17256613 10033403 5042530 2520141 33 3 Использование блочного распределения данных в задаче Дирихле и оптимизация в кэш-памяти В стандартной реализации итерационного алгоритма метода Якоби самым долгосчитаемым участком кода является гнездо циклов, внутри которого происходит расчет приближенного решения задачи Дирихле в узлах сетки (массив U) . Если размерность задачи - N, а размер сетки - m, то сложность вычислений оценивается как функция O(m^N). Допустим, решается трехмерная задачи Дирихле. Тогда рассматриваемый кусок кода, будет иметь следующий вид (для языка СИ): for (i = 0,.., m-1) for (j = 0,.., m-1) for (k = 0,.., m-1) B[i][j][k] = 1/6*(U[i-1][j][k] + U[i+1][j][k]+U[i][j-1][k] + U[i][j+1][k]+U[i][j][k-1] + U[i][j][k+1]); При его выполнении на современных процессорах будет происходить много кэш-промахов, т.к. элементы массива U, к которым происходит обращение на каждой итерации, находятся в разных участках памяти. Данная проблема является общей для многих задач математической физики. Решением данной проблемы является блочное хранение данных и соответствующая модификация алгоритма: //Блочный алгоритм решения трехмерной распределение данных. for (di = 0,.., m/d) 34 задачи Дирихле, использующий for (dj = 0,.., m/d) for (dk = 0,.., m/d) for (i = 0,.., d) for (j = 0,.., d) for (k = 0,.., d) B[ind_B(di,dj,dk, i, j, k)] = 1/6*(U[ind_U(di,dj,dk, i-1, j, k)] + U[ind_U(di,dj,dk, i+1, j, k)] + U[ind_U(di,dj,dk, i, j-1, k)]+U[ind_U(di,dj,dk, i, j+1, k)] + U[ind_U(di,dj,dk, i, j, k-1)] + U[ind_U(di,dj,dk, i, j, k+1)]); где d - размер блока, который зависит от размера L1-кэша вычислительной системы. Ind_B, Ind_U - функции блочного перераспределения данных. 35 4 Реализация алгоритма распределения данных в общей и распределенной памяти в системе ДВОР 4. 1 Блочно-аффинное распределение массивов в распределенной памяти Пусть X[0..N1, 0..N2, .., 0..Nm] - многомерный массив. Координата с номером i может принимать значения в диапазоне [0..Ni -1]. Размещение многомерного массива X по процессорным элементам (ПЭ) - это сопоставление каждого элемента этого массива с номером процессора в котором он будет размещен. Распределение многомерного массива X по процессорным элементам (ПЭ) – это размещение массива X, при котором каждый элемент X сопоставляется с ячейкой памяти, в которой он будет находиться. В системе ДВОР используются аффинные по модулю P размещения данных [19]. Элемент X(i1, i2, …, im) m-мерного массива X размещается в ПЭ с номером u = (i1*s1 + i2*s2 + ... + in*sn + s0) mod P. (1) so, s1, ... sn - известные константы, зависящие от данного массива X, P - количество процессоров. Введем многомерный массив XX, зависящий от массива X и параметров si. В этом массиве будут сохраняться распределяемые элементы массива X. Массив XX хранится на каждом процессоре. На данный момент система ДВОР использует аффинное размещение массивов, если s0 = 0, s1 = 0, … s(k-1) = 0, sk = 1, s(k+1) = 0, …, sm = 0. (2) Размерность массива XX в этом случае равна (N1, N2, …, N(k-1), ]Nk/P[, N(k+1), …, Nm). 36 Если для текущего процессора i1, i2, …, im удовлетворяют (1), то XX(i1, i2, …, i(k-1), ]ik/P[, i(k+1), …, im) будет равен X(i1, i2, …, im). В остальных случаях размерность массива XX равна (N1, …, Nm). И XX[i1, i2, …, im] будет равен X[i1, i2, …, im] при любых допустимых значениях i1, i2, …, im. На входную программу накладывается дополнительное ограничение: инициализация массива X должна проводиться до исполнимых операторов. В таком случае система ДВОР проведет размещение массива X, используя следующий алгоритм: 1. Инициализировать массив X на нулевом процессоре. 2. До начала вычислений, переслать элементы массива X во все P процессоров. Если элементы si удовлетворяют (2), то при пересылке элементов в отдельный процессор используется формула (1). Иначе массив X пересылается полностью (на данном этапе развития системы ДВОР). 3. В каждом процессоре сохранить полученные данные в массиве XX. 4. Учитывая номер текущего ПЭ, заменить обращения к элементам массива X на обращения к элементам массива XX. 5. Добавить межпроцессорные пересылки, если требуется. Пусть матрица в распределенной памяти хранится по столбцам. Сдвинем каждую строку на (I-1) ПЭ вправо, где I – номер строки. Полученное размещение называется скошенной формой хранения массива (рисунок 10). 37 Рисунок 10 - Скошенная форма хранения матрицы. Оно позволяет одновременно считать все элементы любого столбца или все элементы любой строки (что невозможно при традиционных размещениях по строкам или столбцам). Данное размещение является частным случаем аффинных размещений: s0 = 0, s1 = 1, s2 = 1. В следующих алгоритмах скошенная форма матрицы [20] имеет преимущество по сравнению с хранением по строкам или столбцам: обращение матрицы методом Жордана, обращение треугольной матрицы, метод квадратного корня, LU-разложение с перестановкой строк. 38 4.2 Поддерживаемые входные языки На данный момент размещение данных в виде специальных директив компиляции поддерживается в следующих языках: ● СИ (СИ99) ● ФОРТРАН 77 4.3 Особенности реализации Реализован алгоритм, определяющий адрес ячейки памяти на принимающем процессоре, в которой будет находиться пересылаемый элемент после пересылки. Сложность вычисления адреса - О(n), где n – размерность размещаемого массива. При этом размер локальной памяти, используемой для хранения принимаемых данных на каждом из процессоров является оптимальным и равен O(N/P) при больших N, где N – размер размещаемого массива, P – количество процессоров. Данная директива также может использоваться для размещения массивов на мнопроцессорной архитектуре. Размещаемый массив делится на блоки, и они пересылаются другим процессорам в соответствии с параметрами блочно-аффинного размещения. Принимающие процессоры сохраняют блоки в своей локальной памяти. Данное расширение может использоваться при оптимизации работы с кэшпамятью, а также для минимизации пересылок при автоматическом размещении данных на многопроцессорную архитектуру в классе блочно-аффинных размещений [21]. При использовании реализованных операций на однопроцессорном компьютере, достигается увеличение производительности в блочных численных методах. Известно, что блочная структура многих алгоритмов дает существенное увеличение производительности. Предлагаемый в данной работе подход дает дополнительное ускорение: 39 4.4 Результаты численных экспериментов, использования блочного распределения данных Тест 1. Возведение матрицы в квадрат Intel® Pentium® Processor E5300 (2M Cache, 2.60 GHz, 800 MHz FSB) N = 1000 – размер матрицы d – размер блока В таблице 3 приведены результаты численных экспериментов. Таблица 3 Результаты сравнения стандартного и блочного алгоритмов решения задачи возведения матрицы в квадрат d 50 Стандартный Блочный код + распределение Ускорение алгоритм (мс) массивов (мс) 2012 1341 1.5 Тест 2. Умножение матриц Intel® Pentium® Processor E5300 (2M Cache, 2.60 GHz, 800 MHz FSB) N = 2000 d - размер блока В таблице 4 приведены результаты численных экспериментов. Таблица 4 Результаты сравнения стандартного и блочного алгоритмов решения задачи умножения матриц d 50 Стандартный Блочный код + распределение Ускорение алгоритм (мс) массивов (мс) 15538 10515 1.48 40 Тест 3. LU-разложение матрицы Intel® Pentium® Processor E5300 (2M Cache, 2.60 GHz, 800 MHz FSB) N = 1000 – размер матрицы d – размер блока В таблице 5 приведены результаты численных экспериментов. Таблица 5 Результаты сравнения стандартного и блочного алгоритмов решения задачи LU-разложения матрицы d 40 Стандартный Блочный код + распределение Ускорение алгоритм (мс) массивов (мс) 1395 416 3.35 Тест 4. Задача Дирихле Intel® Pentium® Processor E5300 (2M Cache, 2.60 GHz, 800 MHz FSB) N = 4000 d – размер блока В таблице 6 приведены результаты численных экспериментов. Таблица 6 Результаты сравнения стандартного и блочного алгоритмов решения задачи Дирихле d 40 Стандартный Блочный код + распределение Ускорение алгоритм (мс) массивов (мс) 379 133 2.84 41 Протестировать работу данного ускорителя http://ops.opsgroup.ru/opsweb-datadistr.php. 42 можно по следующему адресу: 5 Реализация ВЕБ-интерфейса OPS Web является веб-интерфейсом к некоторым функциям ДВОР. Адрес в интернете: http://ops.opsgroup.ru/opsweb-datadistr.php. 5.1 Входные программы На вход OPS Web принимаются программы на языке C, соответствующие стандарту СИ99. Программа должна состоять из одного файла. Если Ваша программа 43 включает нестандартные заголовочные файлы, то перед загрузкой в OPS Web нужно включить их исходный код в текст программы с помощью препроцессора. 5.2 Автоматическое распределение данных под кэш-память Реализовано расширение языка СИ (C99) операциями работы с памятью. Данное расширение может использоваться при оптимизации работы с кэш-памятью, а также для минимизации Автоматическая пересылок генерация при MPI-кода автоматическом с размещении размещением данных данных в (см. ДВОР) на многопроцессорную архитектуру. При использовании реализованных операций на однопроцессорном компьютере, достигается увеличение производительности в блочных численных методах. Расширение реализовано в виде директивы компилятора, в которой указываются параметры разбиения (размеры блоков) и количество процессоров на целевой архитектуре. #pragma ops distribute data(<Имя массива>, <dimi>, P, <di>) • dimi - список, верхние границы массива; • P - количество процессоров (равно 1 в случае оптимизации под кэш-память); • di - список, размеры блока; Директиву нужно вставлять после инициализации размещаемого массива и до начала работы с ним. Все параметры директивы должны быть константами времени компиляции. Пример. Реализация алгоритма ускорения блочного умножения матриц (A=B*C) с использованием директивы распределения данных. A, B, C -- матрицы размера N×N. d -- размер блока double**A, **B, **C; ... 44 #pragma ops distribute data(A, N, N, 1, d, d) #pragma ops distribute data(B, N, N, 1, d, d) #pragma ops distribute data(C, N, N, 1, d, d) for (bi = 0; bi < blockCount; bi++) for (bj = 0; bj < blockCount; bj++) for (bk = 0; bk < blockCount; bk++) for (i = 0; i < d; i++) for (j = 0; j < d; j++) for (k =0; k <d; k++) C[bi*d+i][bj*d+j] += A[bi*d+i][bk*d+k]*B[bk*d+k][bj*d+j]; Для того, чтобы получить ускорение входная программа должна удовлетворять следующими требованиям: Директива “ops distribute” не должна быть вложена в тело цикла. Чем в большее количество она вложена, тем медленнее будет работать результирующая программа. Программа должна иметь блочный вид. Т.е. записана так, чтобы при ее выполнении обращения к элементам распределенного массива как можно чаще находились в одном блоке. Например, программа содержащая блок for (I = 0; I < N; i++) for(j=0; j < N; j++) for (k=0; k < N; k++) C[i][j] += A[i][k] * A[k][j] Не имеет блочный вид. Ее нужно преобразовать к следующему виду: 45 for (di = 0; I < N/d; i++) for(dj=0; j < N/d; j++) for (dk=0; k < N/d; k++) for (I = 0; I < d; i++) for(j=0; j < d; j++) for (k=0; k < d; k++) C[di*d+i][dj*d+j] += A[di*d+i][dk*d+k] * A[dk*d+k][dj*d+j] Индексы в блочной программе должны иметь вид “di * d + I”, где di –индекс блока (счетчик одного из внешних циклов), d – размерность блока, i – относительный номер элемента в блоке (счетчик одного из внутренних циклов). Размер блока не должен быть очень большим. Для большинства случаев оптимальное значение находится в диапазоне 40-50 элементов 46 6 Расширение языка ФОРТРАН для аффинных размещений данных в распределенной памяти В рамках системы ДВОР одним из авторов статьи был разработан парсер языка ФОРТРАН, предназначенный для ускорения блочных алгоритмов, написанных на ФОРТРАН. Поддержка автоматического размещения данных реализована в виде специальных директив компилятора, которые принимают на вход информацию о размещаемом массиве и параметр размещения. Пример. Реализация ускорения блочного умножения матриц использованием директивы распределения данных. A, B, C – матрицы размера NxN. d – размер блока double**A, **B, **C; .... #pragma ops distribute data(A, N, N, 1, d, d) #pragma ops distribute data(B, N, N, 1, d, d) #pragma ops distribute data(C, N, N, 1, d, d) for (bi = 0; bi < blockCount; bi++) for (bj = 0; bj < blockCount; bj++) for (bk = 0; bk < blockCount; bk++) for (i = 0; i < d; i++) for (j = 0; j < d; j++) for (k =0; k <d; k++) C[bi*d+i][bj*d+j] += A[bi*d+i][bk*d+k]*B[bk*d+k][bj*d+j]; 47 (A=B*C) с Парсер удовлетворяет стандарту ФОРТРАН 77, а также включает некоторые конструкции работы с динамической памятью из ФОРТРАН 90/95. Парсер полностью разбирает пакет численных методов ACELAN [22]. Корректность работы парсера проверялась на тестах из GCC [7], Parawise [23], ParcBench [24]. Разработанный парсер собирается в среде VisualStudio 2005/2008. Также поддерживается сборка под Linux. При разработке парсера языка ФОРТРАН использовался генератор парсеров ANTLR [26]. В качестве исходной грамматики была взята грамматика языка ФОРТРАН из проекта Open Fortran Parser [25]. На каждом этапе (фазе лексического, синтаксического и семантического анализа) осуществляется проверка на наличие ошибок во входной программе. 6.1 Влияние особенностей внутреннего представления ДВОР на парсер языка ФОРТРАН Внутреннее представление ДВОР имеет структуру близкую к языку СИ, а не ФОРТРАН. В связи с этим возникло много проблем, связанных с отображением программ на языке ФОРТРАН во внутреннее представление. Рассмотрим примеры решения некоторых таких проблем. Пример, иллюстрирующий решение проблемы отображения COMMON-блоков: Фрагмент кода SUBROUTINE A ... COMMON / SampleCommonBlock / iVar1_1, iVar1_2 48 ... END SUBROUTINE A SUBROUTINE B ... COMMON / SampleCommonBlock / iVar2_1, iVar2_2 ... END SUBROUTINE B отображается во внутреннее представление следующим образом: struct SampleCommonBlock { union A { int ivar1_1, ivar1_2 } union B { int ivar2_1, ivar2_2 } } SampleCommonBlock sampleCommonBlock_BlockVariable; void A() { ... } void B() { ... } 49 Пример, иллюстрируется решение проблемы, связанной с отображением срезов массивов. Фрагмент кода X[1:10:2,1..10] = 1 отображается во внутреннее представление следующим образом: for (i = 1; i<=10; i+=2) for (j = 1; j<=10, j+=1) X[i][j] = 1; Разработан вывод из внутреннего представления в ФОРТРАН 90/95. 50 Заключение В результате научно-исследовательской работы по теме “Исследования по оптимальному использованию распределенной и кэш памяти” проведено исследование эффективности одновременно двух оптимизаций параллельного алгоритма решения трехмерной задачи Дирихле: размещения данных с перекрытиями в распределенной памяти и блочного размещения данных в оперативной памяти. Проведенные численные эксперименты показали ускорение оптимизированной программы в 2.4 раза по сравнению с обычной параллельной программой. Как видно из отчетных материалов, все исследовательские задачи по проекту выполнены полностью с должным качеством. 51 Список использованных источников 1. Штейнберг Б.Я., Абрамов А.А., Алымова Е.В., Баглий А.П., Гуда С.А., Дубров Д.В., Е.Н. Кравченко, Р.И. Морылев, Нис З.Я., Петренко В.В., Полуян С.В., Скиба И.С., Шаповалов В.Н., Штейнберг О.Б., Штейнберг Р.Б., Юрушкин М.В. Диалоговый высокоуровневый распараллеливатель суперкомпьютерные (ДВОР) центры распараллеливатель // Научный и задачи: сервис оптимизирующий в Труды сети Интернет: Международной суперкомпьютерной конференции (20-25 сентября 2010 г., г. Новороссийск). М.: Изд-во МГУ, 2010. - (с. 71-75). 2. Открытая распараллеливающая система [Электронный ресурс]: [web-сайт]. – Режим доступа: http://ops.rsu.ru/about.shtml/. – 18.11.2011. 3. Автораспараллеливатель [Электронный ресурс]: [web-сайт]. – Режим доступа: http://ops.opsgroup.ru/opsweb-datadistr.php. – 18.11.2011. 4. Корнеев В.В. Проблемы программирования суперкомпьютеров на базе многоядерных мультитредовых кристаллов. Научный сервис в сети Интернет: масштабируемость, параллельность, эффективность: Труды Всероссийской суперкомпьютерной конференции (21-26 сентября 2009 г., г. Новороссийск).– М.: Изд-во МГУ, 2009. 5. Гервич Л. Р., Штейнберг Б.Я. Параллельное итерационное умножение матрицы на вектор // Труды научной школы И.Б. Симоненко, отв. ред.: Я. М. Ерусалимский, Б.Я. Штейнберг. Ростов н/Д: Изд-во ЮФУ, 2010. С. 275. 6. Кластер INFINI, г. Ростов-на-Дону, ЮГИНФО ЮФУ [Электронный ресурс]: Режим [web-сайт].– доступа: http://www.parallel.ru/russia/russian_clusters.html#infini. – 16.11.2011. 7. Институт Прикладной Математики им. М.В. Келдыша [Электронный ресурс]: [web-сайт]. - Режим доступа: http://www.kiam.ru/. – 17.11.2011. 52 8. Штейнберг Б.Я., Штейнберг Р.Б., Морылев Р.И., Петренко В.В., Полуян С.В., Штейнберг О.Б., Баглий А.П., Нис З.Я., Скиба И.С., Юрушкин М.В., Шаповалов В.Н.,Алымова Е.В., Кравченко Е.Н., Гуда С.А. Свидетельство о государственной регистрации программы для ЭВМ № 2011617205 “Диалоговый высокоуровневый оптимизирующий распараллеливатель программ”. 9. Тихонов А. Н., Самарский А. А. Уравнения математической физики.- М.: Наука, 1977. 10. Гольдштейн Л. Д., Зернов Н. В. Электромагнитные поля и волны. Изд. 2-е, перераб. и дополненное. М.: Изд-во «Советское радио», 1971. 11. Самарский А.А., Гулин А.В. Численные методы.- М.: Наука, 1989. 12. Решение дифференциальных уравнений в частных производных [Электронный ресурс]: [web-сайт]. - Режим доступа: http://www.software.unn.ac.ru/ccam/files/HTML_Version/part6.html. – 17.11.2011. 13. Корнеев В.Д. Параллельное программирование в MPI.- Новосибирск: Изд-во СО РАН, 2000. 14. MPI: A Message-Passing Interface Standard. Message Passing Interface Forum. Version 1.1. 1995 [Электронный ресурс]: [web-сайт]. - Режим доступа: http://www-unix.mcs.anl.gov/mpi. – 15.11.2011. 15. Букатов А.А., Дацюк В.Н., Жегуло А.И. Программирование многопроцессорных вычислительных систем. - Ростов-на-Дону: Изд-во ООО "ЦВВР", 2003. 16. Кластер мехмата ЮФУ[Электронный ресурс]: [web-сайт]. - Режим доступа: http://cluster.mmcs.sfedu.ru/FrontPage. – 15.11.2011. 17. Дайерлинг К. InfiniBand: архитектура коммутации для серверов, запоминающих устройств и коммуникационных систем [Электронный ресурс]/ Дайерлинг К.//Мир компьютерной автоматизации:научный журнал. - Режим доступа: http://www.mka.ru/?p=44434. – 16.11.2011. 53 18. Cистема компиляторов GCC[Электронный ресурс]: [web-сайт]. - Режим доступа: http://gcc.gnu.org/. - 17.11.2011. 19. Штейнберг Б.Я., Кравченко Е.Н., Морылев Р.И., Нис З.Я., Петренко В.В., Скиба И.С., Шаповалов В.Н., Штейнберг О.Б., Штейнберг Р.Б. Особенности реализации распараллеливающих преобразований программ в ДВОР // Изв. вузов. Приборостроение, №8. 20. Прангишвили И.В., Виленкин С.Я., Медведев И.Л., Параллельные вычислительные системы с общим управлением// М.: Энергоатомиздат, 1983. – 312 с. 21. Б.Я. Штейнберг. Оптимизация размещения данных в параллельной памяти. // Издательство Южного федерального университета. Ростов-на-Дону. 2010. 22. Наседкин А. В., Скалиух А. С., Соловьев А. Н. Пакет ACELAN и конечноэлементное моделирование гидроакустических пьезопреобразователей // Известия ВУЗов. Северо-Кавказский регион. Естеств. науки. 2001. Спецвыпуск. Математическое моделирование. 23. Полуавтоматическая распараллеливающая система ParaWise [Электронный ресурс]: [web-сайт]. - Режим доступа:http://www.parallelsp.com/parawise.htm – 14.11.2011. 24. PARallel Kernels and BENCHmarks[Электронный ресурс]: [web-сайт]. - Режим доступа: www.netlib.org/parkbench/ - 11.11.2011. 25. Open Fortran Parser[Электронный ресурс]: [web-сайт]. - Режим доступа: http://fortran-parser.sourceforge.net/ - 13.11.2011. 26. Сайт генератора парсеров ANTLR[Электронный ресурс]: [web-сайт]. - Режим доступа: http://www.antlr.org/- 13.11.2011. 54 Приложение А. РИД (Результаты интеллектуальной деятельности), в разработке которых принимали участие исполнители данной темы. Рисунок А.1 - Свидетельство о государственной регистрации программы для ЭВМ № 2011617205 «Диалоговый высокоуровневый оптимизирующий распараллеливатель программ» 55 Рисунок А.2 - Свидетельство о государственной регистрации программы для ЭВМ № 2011617952 «Параллельные решатели для пакета ACELAN» 56