РАЗРАБОТКА ПАКЕТОВ ПРИКЛАДНЫХ ПРОГРАММ В ИНСТРУМЕНТАЛЬНОМ КОМПЛЕКСЕ ORLANDO TOOLS Горский С.А. (г. Иркутск, Институт динамики систем и теории управления СО РАН) В работе обсуждается реализация способов распараллеливания вычислений в инструментальном комплексе ORLANDO (Objects Relations in LANguage of DescriptiOns) TOOLS, предназначенном для разработки и применения пакетов параллельных программ. Введение. Математическое моделирование с применением средств вычислительной техники является широко используемым инструментом проведения исследований при анализе сложных систем (экономических, производственных, информационных и др.) в различных отраслях науки, образования и бизнеса. Одним из основных этапов этого процесса, вслед за построением математической модели системы, является вычислительный эксперимент, позволяющий осуществить численное исследование полученной модели путем воспроизведения поведения системы в различных условиях или в различных ее модификациях. При этом, зачастую, возникает необходимость выполнения массовых ресурсоемких вычислений. На сегодняшний день для решения подобных задач имеются разнообразные программные и аппаратные средства проведения высокопроизводительных вычислений на параллельных компьютерах. Однако массовое использование такого рода вычислений сдерживается рядом нерешенных на сегодняшний день проблем параллельного программирования, в том числе, сложностями для исследователя (специалиста в своей предметной области), возникающими при разработке им параллельных алгоритмов, написании и выполнении параллельных программ и др. (см., например, [1]). Одним из подходов, позволяющих частично решить эти проблемы, является применение для организации параллельных и распределенных вычислений пакетов прикладных программ в рамках технологии модульного программирования [2]. В этом случае появляется необходимость создания для них системных компонентов, основанных на гибком сочетании уже существующих и разработке новых методов, моделей и языков в рамках парадигмы параллельного программирования. В частности разрабатываемые средства должны поддерживать распараллеливание вычислений по управлению и по данным. Способы решения этих вопросов в пакетах прикладных программ представлены в данной работе. Пакеты прикладных программ. Пакет прикладных программ рассматривается в нашем подходе традиционно [3] – как совокупность прикладного и системного программного обеспечения. Прикладное программное обеспечение (функциональное наполнение пакета программ) представляет собой набор (библиотеку) вычислительных модулей. Под модулем понимается подпрограмма на языке программирования Си или Фортран, спецификации по ее назначению, применению, формату входных и выходных формальных параметров, времени выполнения для той или иной программно-аппаратной платформы, инструкции по ее трансляции, компиляции и дальнейшему размещению объектных и загрузочных модулей и т.п. Системное программное обеспечение включает средства для описания модели предмет- ной области, формирования постановок исследовательских задач и организации процесса их решения. Параллелизм по управлению. Параллелизм по управлению изначально присущ пакетам прикладных программ, так как модели предметных областей, создаваемые в рамках подобных пакетов, относятся к классу вычислительных моделей [4] и позволяют описывать вычислительные возможности пакета программ при решении определенного класса задач. Такую вычислительную модель можно определить как совокупность значимых величин (параметров) предметной области и информационно-логических связей между ними, реализуемых модулями пакета программ. Она, по сути, определяет правила применения и сочетания модулей в процессе решения задачи и позволяет автоматически осуществлять планирование вычислений по непроцедурной постановке задачи вида «по заданным значениям параметров x1, x2, …, xk вычислить значения параметров y1, y2, …, yr». В простейшем случае концептуальная схема модели предметной области пакета прикладных программ определяется структурой [5] S=<Z, W, F>, где Z={z1, z2,…,zm} – множество параметров предметной области; W={w1, w2, …, wk} – множество допустимых типов данных; F={f1, f2, …, fn} – множество вычислительных модулей1 предметной области. С каждым модулем fi связано два множества параметров IN i, OUT i Z, называемых соответственно его входом и выходом. Вход модуля IN i определяет параметры, значения которых необходимо задать, чтобы получить значения параметров, представленных выходом OUT i. План решения задачи строится автоматически по непроцедурной постановке задачи, формулируемой на S, и является в общем случае параллельным. Параллелизм по данным. Для описания параллелизма по данным множество допустимых типов данных W концептуальной схемы предметной области S было расширено новым типом данных параметр-список (здесь термин список понимается в смысле Д. Кнута [6]), предназначенным для определения параллельных структур данных2. Параметр-список создается на основе одного параметра любого типа (скалярного, векторного или матричного) и включает множество вариантов значений этого параметра. Число элементов параметрасписка задается параметром-скаляром целого типа. Основное отличие параметра-списка от параметра-массива заключается в способе обработки элементов параметров таких типов. Параметр-массив целиком передается в вычислительный модуль, в котором далее осуществляется его обработка, в то время как параметр-список может обрабатываться поэлементно (в общем случае параллельно) множеством экземпляров вычислительного модуля на разных процессорах. Наличие в концептуальной схеме предметной области параметров-списков приводит к появлению в процессе вычислений новых объектов (элементов параметровсписков и обрабатывающих их экземпляров модулей) и требует построения модели с более высоким уровнем детализации объектов предметной области и отношений между ними. Определим модель вычислений в виде структуры CM=<S, PE, FE>, где S – это рассмотренная выше концептуальная схема предметной области, PE={pe1, pe2, …, pev} – множество элементов параметров-списков, FE={fe1, fe2, …, feu} – множество экземпляров модулей предметной области, v,uN. Для формального описания модели вычислений применим слеЗдесь модуль рассматривается как объект концептуальной схемы предметной области. Под параллельной структурой данных здесь понимается способ организации данных, позволяющий выполнять независимую параллельную обработку элементов этой структуры в рамках конкретной вычислительной системы (например, параллельный список в языке программирования Пифагор [8]. 1 2 дующую нотацию [7]: R(O1(n1,n2):O2(n3,n4)/с), где O1, O2 – множества объектов предметной области, связанные бинарным отношением R; n1, n2 – числа, которые означают соответственно минимальное и максимальное число элементов O1, связанных с элементом O2; n3, n4 – числа, которые означают соответственно минимальное и максимальное число элементов O2, связанных с элементом O1; c – ограничение целостности, накладываемое на элементы O2, участвующие в отношении R. Тогда связи между множествами основных объектов модели вычислений зададим следующими отношениями3 (рис. 1): 1) R1(Z(1, m): W(1, 1)) – типизированные параметры; 2) R2(Z(1, m):F(1, n)/c1) – входные параметры из ZI Z для модулей из F; c1 – ограничение на множество входных параметров модуля (IN i OUT i =); 3) R3(Z(1, m):F(1, n)/c1) – выходные параметры из ZO Z для модулей из F; c1 – ограничение на множество выходных параметров модуля (OUT i IN i =); 4) R4(ZB(1, 2):ZA(1, ma)/c2) – параметры из ZB Z, задающие границы изменения индексов параметров-массивов из ZA Z, 1 ma < m; c2 – ограничение, требующее, чтобы эти параметры были скалярами целого типа; 5) R5(ZL(1, 1):ZU(1, 1)/c3) – параметры-списки из ZL Z, создаваемые на основе параметров из ZU Z; c3 – ограничение, накладываемое на тип параметра, на основе которого создается список (он может быть параметром любого типа, кроме списка); 6) R6(ZB(1, 1):ZL(1, ml)/c2) – параметры из ZB Z, задающие число элементов параметров-списков из ZL Z, 1 ml < m; c2 – ограничение целостности, требующее, чтобы эти параметры были скалярами целого типа; 7) R7(F(1, 1):FE(1, r)) – экземпляры модуля, r N; 8) R8(ZL(1, 1):PE(1, s)) – элементы параметров-списков, s N; 9) R9(FE(1, r):PE(1, s)/c4) – входные элементы параметров-списков экземпляра модуля, r, s N; с4 – ограничение, требующее, чтобы индексы этих элементов и обрабатывающего их экземпляра модуля совпадали; 10) R10(FE(1, r):PE(1, s)/c5) – выходные элементы параметров-списков экземпляра модуля, r, s N; с5 – ограничение, требующее, чтобы индексы этих элементов и обрабатывающего их экземпляра модуля совпадали. R4 R2 R3 F R7 FE R5 R9 R10 R1 Z R8 W R6 PE Рис. 1. Модель вычислений Обработка параметров-списков. В процессе вычислений параметры-списки могут обрабатываться как неделимые структуры данных, так и поэлементно. В первом случае обСледует отметить, что для задания некоторых из этих отношений используются вспомогательные объекты предметной области. 3 работка параметра-списка осуществляется аналогично обработке параметра-массива (рис. 2. а). Во втором случае под поэлементной обработкой параметров-списков подразумевается следующее (рис. 2. б): пусть x, y – параметры-списки, созданные на основе параметров x и y, модуль fi: IN i OUT i предназначен для их поэлементной обработки, x IN i, y OUT i. Интерпретация модуля fi выполняется следующим образом: 1) происходит параллельный запуск r экземпляров (r – размерность списков x, y ) модуля fi, j-му экземпляру модуля fij передается j-й элемент списка x; 2) результат присваивается j-му элементу списка y. x' x' x1 x2 Модуль fi z Модуль fi y' x1 Процесс fi 1 y1 x2 Процесс fi2 y2 ... ... ... ... xr xr Процесс fir yr а) б) Рис. 2. Обработка параметра-списка как неделимой структуры данных (а) и поэлементная обработка параметра-списка (б) Инструментальный комплекс ORLANDO TOOLS. Представленные выше модели и структуры данных были реализованы на практике и на данный момент используются для организации параллельных вычислений в инструментальном комплексе (ИК) ORLANDO TOOLS. Данный ИК предназначен для автоматизации процессов создания и выполнения параллельных программ, ориентированных на вычислительные системы, работающие под управлением ОС Linux. Архитектура ИК включает следующие основные компоненты: многооконный текстовый редактор, транслятор, подсистему компиляции, подсистему запуска, базы расчетных данных. Все эти компоненты устанавливаются и запускаются на рабочей станции пользователя. Пакет Градиент. В данном разделе с целью иллюстрации возможности эффективного применения предложенных структур данных и средств их обработки для организации параллельных вычислений рассматривается пакет ГРАДИЕНТ, предназначенный для поиска глобального минимума многоэкстремальной функции f (x) с помощью известного метода мультистарта. Сутью метода мультистарта является сведение поиска глобального минимума функции к поиску локальных минимумов. При этом для поиска локальных минимумов используется тот или ином алгоритм локального спуска, производимого из некоторого множества N начальных точек. Из полученных точек локальных минимумов выбирается точка с наименьшим значением, которая принимается за точку глобального минимума. Для операции локального спуска выполняется параллельный запуск множества экземпляров её модуля. Элементы параметров-списков начальных точек и точек локального минимума, являющихся соответственно входным и выходным параметрами операции локального спуска, обрабатываются независимо друг от друга в отдельных процессах – экземплярах модуля этой операции. Информационный двудольный ориентированный граф, представляющий схему решения задачи, изображён на рис. 3. Пакет ГРАДИЕНТ использовался для поиска глобального минимума ряда многоэкстремальных функций (Катковника, Растригина, Griewank), относящихся к классу сложных задач оптимизации. Все функции имеют глобальный экстремум в начале координат, равный 0. Функция в текстовом виде Длина текста функции Смещение для расчета градиента Количество координат Число границ Область начальных точек Число точек Начальные точки Генерация начальных точек Координаты глобального минимума Точки локальных минимумов Начальная точка Начальная точка Начальная точка Grad Локальный Grad спуск Лок. минимум Лок. минимум Лок. минимум Выбор глобального минимума Начальное значение шага смещения Максимальное число вызовов функции Точность вычислений Количество координат и значение лок. минимума Значение глобального минимума Рис. 3. Информационный двудольный ориентированный граф 1) Функция Катковника: f (x,y)=0.5(x2+y2)(1+0.5cos(1.5x)cos(πy)+0.5cos( 5 x)cos(3.5y)). 2) Функция Растригина: f (x,y)=0.1x2 + 0.1y2 – 4cos(0.8x) – 4cos(0.8y) + 8. 3) Функция Griewank: f x, y 10 0.005 x 2 y 2 cosx cos y 2 2 10 Вычислительные эксперименты были проведены на вычислительном кластере МВС1000М/16 ИДСТУ СО РАН. Для проведения расчетов на вычислительном кластере создавались параллельные виртуальные машины, включающие от 1 до 8 двухпроцессорных узлов кластера. Результаты расчетов представлены в табл. 1. Таблица 1. Время поиска глобального минимума многоэкстремальных функций Область № Функция (x,y) 1 Катковника 2 Растригина [-200:200]*[-200:200] 3 Griewank [-20:20]*[-20:20] [-20:20]*[-20:20] Время в секундах/Эффективность распараллеливания в % Число точек Число процессоров 1 2 4 8 16 1000 490 245 / 100 123 / 99,6 64 / 95,7 31 / 95 10000 426 213 / 100 112 / 95 60 / 89 34 / 78 100000 626 313 / 100 157 / 99,7 82 / 95,4 42 / 93,2 Проведенные вычислительные эксперименты позволяют сделать следующие выводы. Методы, алгоритмы и средства, реализованные в инструментальном комплексе ORLANDO TOOLS, обеспечивают достижение хорошей эффективности при распараллеливании процесса вычислений для научных прикладных задач, позволяющих осуществлять их разбиение на независимые части с большой вычислительной мощностью. Технология создания параллельных программ. Рассмотрим технологию создания параллельных программ, реализованную в ИК ORLANDO TOOLS, на примере пакета Градиент. I. Пользователь описывает концептуальную схему предметной области на специализированном языке ORLANDO в разработанном текстовом редакторе. Описание предметной области для пакета Градиент представлено в табл. 2. Таблица 2. Описание предметной области пакета Градиент на языке ORLANDO PARAMETER I2 PointCount;// количество начальных точек для метода мультистарта PARAMETER I2 SPxy;// количество координат начальной точки PARAMETER I2 EPxyv;// число элементов вектора EndPoint PARAMETER I2 Flen;// длина текстовой строки, которая задает функцию PARAMETER I1 Function BOUNDS(Flen);// минимизируемая функция в текстовом виде PARAMETER I2 BCount;// количество границ на координату PARAMETER R8 Bounds BOUNDS (SPxy,BCount);// матрица, задающая границы изменения координат PARAMETER R8 StartPoint BOUNDS (SPxy);// вектор, содержащий координаты начальной точки PARAMETER R8 EndPoint BOUNDS (EPxyv);// вектор, содержащий координаты точки и значение локального минимума PARAMETER R8 Val;// значение глобального минимума PARAMETER R8 GrIncrement;// приращение, с помощью которого вычисляется значение градиента в точке PARAMETER R8 InitialShift;// начальное значение шага смещения PARAMETER I2 MaxCall;// максимальное число вызовов функции PARAMETER R8 Accuracy;// точность вычисления локального минимума PARAMETER R8 MPoint BOUNDS(SPxy);// координаты точки глобального минимума PARALLEL ParStartPoint OF StartPoint SIZE(PointCount);// параметр-список, созданный на основе параметра StartPoint PARALLEL ParEndPoint OF EndPoint SIZE(PointCount);// параметр-список, созданный на основе параметра EndPoint MODULE CPP Gen FUNCTION generate (IN I2, IN I2, IN I2, OUT R8[P3]{P2}, IN R8 []) INCLUDE <grad.h> FILES <> LIBS <libeasynum.a;> COMPILER <-I/common/orlando/easynum/h/ -leasynum -I/common/orlando/MathParser/ L/common/orlando/MathParser/ -lmathparser>; MODULE CPP Grad FUNCTION grad (IN I2, IN R8[P1],IN I2,OUT R8[P3],IN R8,IN R8,IN I2,IN R8,IN I2,IN I1[]) INCLUDE <grad.h> FILES <> LIBS <> COMPILER <-I/common/orlando/easynum/h/ -leasynum -I/common/orlando/MathParser/ L/common/orlando/MathParser/ -lmathparser>; MODULE CPP Res FUNCTION R8=res (IN I2,IN I2,IN R8[]{},IN I2, OUT R8[P4]) INCLUDE <grad.h> FILES <> LIBS <> COMPILER <-I/common/orlando/easynum/h/ -leasynum -I/common/orlando/MathParser/ L/common/orlando/MathParser/ -lmathparser>; OPERATION GEN IF BCount BY Gen (BCount,PointCount,SPxy,ParStartPoint,Bounds); OPERATION GRAD BY Grad (IN SPxy,IN StartPoint,IN EPxyv,EndPoint,IN GrIncrement,IN InitialShift,IN MaxCall,IN Accuracy,IN Flen,IN Function); OPERATION RES BY Val = Res (PointCount,EPxyv,ParEndPoint,SPxy,MPoint); INITIAL BCount=2; II. Пользователь формирует постановку исследовательской задачи на языке ORLANDO (табл. 3). Таблица 3. Постановка исследовательской задачи на языке ORLANDO TASK Gradient (IN PointCount,IN SPxy, IN EPxyv, OUT Val, OUT MPoint, IN GrIncrement, IN InitialShift, IN MaxCall,IN Flen,IN Function,IN Bounds,IN BCount,IN Accuracy); DATABASE Gr <C:\Java programms\Parameters>; SOLVE S OF Gradient FROM Gr 8 (IN PointCount,IN SPxy, IN EPxyv, OUT Val, OUT MPoint, IN GrIncrement, IN InitialShift, IN MaxCall, IN Flen,IN Function,IN Bounds,IN BCount,IN Accuracy); III. Планировщик ИК ORLANDO TOOLS [9] по команде пользователя проводит анализ концептуальной схемы с целью выявления ее внутреннего параллелизма и синтезирует параллельный план решения задачи. IV. Транслятор ИК ORLANDO TOOLS автоматически производит построение параллельной управляющей программы, реализующей план решения задачи. V. Пользователь осуществляет выполнение созданных параллельных программ с помощью подсистемы запуска. В ходе вычислительного эксперимента пользователь может использовать базы расчетных данных. Заключение. Представленные в работе инструментальные средства, реализующие новые возможности системной части пакетов прикладных программ, отличаются от известных тем, что они поддерживают параллелизм, как по управлению, так и по данным, обеспечивая тем самым удобную высокоуровневую среду, ориентированную на специалистапредметника. Разработанные модели, методы и алгоритмы, составляющие основу инструментального комплекса с автоматическим конструированием параллельных программ, способны уменьшить трудозатраты на создание последних, повысить их качество, а также значительно сократить сроки выполнения многовариантных расчетов в процессе проведения вычислительного эксперимента. ЛИТЕРАТУРА 1. Воеводин В.В. Параллельные вычисления / В.В. Воеводин, Вл.В. Воеводин – СПб.: БХВ-Петербург, 2002. – 608 с. 2. Майерс Г. Надежность программного обеспечения / Г. Майерс – М.: Мир, 1980. – 360с. 3. Горбунов-Посадов М.М. Системное обеспечение пакетов прикладных программ. / М.М. Горбунов-Посадов, Д.А. Корягин, В.В. Мартынюк – М.: Наука, 1990. – 208 с. 4. Тыугу Э.Х. Концептуальное программирование / Э.Х. Тыугу – М.: Наука, 1984. – 256с. 5. Опарин Г.А. Булево моделирование планирования действий в распределенных вычислительных системах / Г.А. Опарин, А.П. Новопашин // Теория и системы управления. – 2004. – № 5. – С.105-108. 6. Кнут Д. Искусство программирования / Д. Кнут. – М.; СПб.; Киев: ИД «Вильямс», 2000. Т. 1–3. 7. Цикритзис Д. Модели данных / Д. Цикритзис, Ф. Лоховски. – М.: Финансы и статистика, 1985. – 344 с. 8. Легалов А.И. Функциональный язык для создания архитектурно-независимых параллельных программ / А.И. Легалов // Вычислительные технологии. – 2005, №1(10). – С.71-89. 9. Новопашин А.П. Методы и инструментальные средства крупноблочного синтеза параллельных программ для вычислительных кластеров. Автореф. дис. канд. техн. наук. Иркутск: ИДСТУ СО РАН, 2005. – 26 с.