Востокин С.В. ( easts@mail.ru) - (Самарский государственный аэрокосмический университет им. академика С.П. Королева (национальный исследовательский университет), доктор технических наук, Литвинов В.Г. ( doom-black@mail.ru) - (Самарский государственный аэрокосмический университет им. академика С.П. Королева (национальный исследовательский университет), Хайрутдинов А.Р. (khairutdinov@yandex.ru) - (Самарский государственный аэрокосмический университет им. академика С.П. Королева (национальный исследовательский университет) | |
Ключевые слова: численное моделирование., автоматизация программирования, доменно-ориентированный язык, схемы программ, модель вычислений, параллельное программирование, комплекс программ |
|
Keywords: numerical simulation, automation of programming, domain specific language, program schema, computational model, parallel programming, software |
|
|
Технические средства параллельного программирования широкодоступны и разнообразны: это многоядерные настольные системы, кластерные системы и суперкомпьютеры, распределенные системы в сети Интернет, GPGPU-процессоры. Однако при проведении исследований специалисты прикладных областей зачастую отказываются от использования высокопроизводительных вычислительных систем в численном моделировании, применяя традиционные последовательные алгоритмы. С одной стороны, ограничение их применения обусловлено наличием фундаментальных проблем параллельных вычислений: сложностью выявления ошибок, трудностью развертывания программ в разных архитектурах, проблемой масштабируемости алгоритмов. С другой – субъективными и технологическими проблемами, такими как недостаток квалификации в области параллельного программирования, отсутствие удобных для использования непрограммистами инструментальных средств, удлинение и удорожание цикла разработки ПО численного моделирования. В статье развивается подход, описанный в [1], позволяющий расширить и упростить применение высокопроизводительной вычислительной техники в численном моделировании. Ключевыми концепциями данного подхода являются применение типовых решений (паттернов) параллельного программирования, автоматическое распараллеливание и развертывание кода в различных програм- мно-аппаратных архитектурах, разделение ролей системный программист – прикладной программист, использование интегрированных сред разработки (IDE) и методов визуализации кода на основе технологий XML. Программный комплекс Graphplus templet [2] основан на модели процессов диффузного типа, в которой конструктивными элементами являются процессы и каналы. Процессы – пассивные объекты. Двунаправленные каналы, соединяющие пару процессов, – активные объекты. Процессы реализуют свои методы при поступлении сообщений по каналам и могут сформировать произвольное число ответных сообщений. Данная модель позволяет исключить конфликты одновременного доступа к памяти, свойственные многопоточной модели, гибко управлять состоянием вычислений, эффективно использовать компьютеры с распределенной и общей памятью. Особенностью предлагаемого подхода является передача семантики модели программирования не на специальном, а на традиционном языке программирования. Примитивы для задания параллелизма не применяются. Для этого в препроцессоре системы Graphplus templet реализованы два алгоритма: алгоритм проверки интерпретируемости последовательной программы в терминах модели и алгоритм ее распараллеливания. Алгоритм распараллеливания выполняет автоматическое преобразование исходной последовательной программы в параллельную программу с теми же функциональными свойствами. Программа в комплексе Graphplus templet состоит из модулей исходного кода. Каждый модуль, интерпретируемый в терминах модели, снабжается XML-спецификацией, в которой описываются процессы и каналы. Код модуля проверяется на соответствие этой спецификации. Код состоит из чередующихся фрагментов – блоков, сопоставленных элементам модели, а также тел методов и определенных пользователем структур данных. Границы таких фрагментов аннотированы при помощи специальных комментариев. Алгоритм генерации кода по XML-спецификации на известном языке является эталонным, то есть он документирован и именно им определяется семантика модели. Алгоритм основан на преобразованиях по шаблонам, так что связь между частями XML-спецификации и сгенерированным кодом легко обнаруживается при их сравнении. Алгоритм распараллеливания кода следующий: 1) извлечение блоков пользовательского кода из исходной последовательной программы; 2) генерация новой программы с примитивами, необходимыми для данного варианта развертывания; 3) включение извлеченных пользовательских блоков в код сгенерированной параллельной программы. Примененный подход не требует лексического и синтаксического анализатора для целевого языка, позволяет точно сформулировать семантику модели программирования в терминах последовательного языка; исходная программа является последовательной, поэтому отлаживается обычным способом. Алгоритм генерации кода реализован авторами в специальном препроцессоре gpt.exe. Код программы пишется на языке C++. Модулем в данном случае является пара файлов: заголовочный файл с расширением (*.h) и файл реализации с расширением (*.cpp). Каждому модулю в проекте для IDE Microsoft Visual Studio соответствует файл с его XML-спецификацией, который включается в папку ресурсов приложения. Для файла XML-спецификации в проекте указывается, что перед сборкой проекта (pre-built) он должен быть обработан программой gpt.exe. Она генерирует фрагменты кода в файлах модуля. Кроме того, для файла XML-спецификации в настройках проекта указывается редактор. Им может быть как XML-редактор, визуализирующий модель посредством XSL-трансформации, так и специальный графический редактор, визуализирующий модель в виде ориентированного графа. В процессе итеративной разработки, состоящей из чередующихся шагов редактирования, сборки и запуска программы, пользователь редактирует XML-спецификацию и код модуля. Препроцессор синхронизирует обе части модуля при каждой сборке. Вопрос контроля ошибок решен следующим образом. Проверяется правильность формата XML-файла и выполняется восстановление значений пропущенных атрибутов подстановкой значений по умолчанию. Никакого контроля при генерации больше не требуется. В случае возникновения конфликтов они разрешаются так: если пользователь сформировал блоки, не соответствующие структурным элементам модели, они выносятся в отдельное место в файле модуля; если в XML-спецификацию добавлен новый элемент, для которого не было пользовательского блока, то генерируется пустой блок с комментарием, указывающим на необходимость его определения. Остальной контроль выполняется компилятором и системой исполнения языка C++. Описанная схема работы обеспечивает уверенность в правильном функционировании кода параллельной программы, так как весь критический код является открытым для анализа и отладки, а технически сложные части анализа выполняются надежным штатным компилятором. В вычислительных экспериментах исследовались две типовые схемы вычислений для вариантов развертывания параллельного кода под архитектуры Win32 и POSIX. С их помощью решены задачи математического моделирования с целью оценки реальных ускорений и эффективности распараллеливания. Для решения задачи нелинейной динамики использовалась схема ADI [2], реализующая метод переменных направлений в общей памяти. Алгоритм схемы предусматривает чередование построчного и постолбцового сканирования области заданного размера. Элементарные операции над ячейкой области на четных и нечетных обходах, а также структура данных зависят от конкретного алгоритма. Авторами рассматривалась параллельная реализация численного метода, описанного в работе [3]. Временные характеристики решения задачи нелинейной динамики приведены в таблице 1. В экспериментах на многоядерной настольной системе решалась задача на области размером 5000×5000 по пространству и 10 отсчетов по времени. Использовался компьютер Samsung RF710 (Intel Core i5 M460 2,53GHz) с установленной ОС Windows 7 Ultimate 64 bits. Здесь и далее количество логических процессов – это параметр, влияющий на масштабируемость параллельного алгоритма. Значение его подбирается опытным путем для конкретных ЭВМ, схемы и алгоритма. Во всех экспериментах учитывалось время инициализации и очистки. Таблица 1 Временные характеристики решения задачи нелинейной динамики
В экспериментах на узле суперкомпьютера решалась задача на сеточной области размером 5000´5000 по пространству и 10 отсчетов по времени. Использовался вычислительный узел суперкомпьютера «Сергей Королев» со следующими характеристиками: тип узла IBM BladeCenter HS22; процессоры 2х Intel Xeon X5560, 2.80GHz, 8MB Cache; оперативная память 12 Гб; жесткий диск 76Гб или 146Гб SAS 10K 16Mb Cache; тип системной сети InfiniBand DDR, QDR; операционная система Red Hat Enterprise Linux 5.6. Для задачи о распространении плоской световой волны на основе численного решения уравнений Максвелла проведено распараллеливание последовательного алгоритма из работы [4]. Для этого использовалась схема конвейера PLine [2]. В ней расчетная область представляет собой цепочку ячеек, над которыми последовательно выполняется элементарная операция. Фронт вычислений распространяется слева направо. Элементарная операция не может запускаться в соседних ячейках. В рассмотренной реализации ячейка хранит 3 вектора проекций электромагнитного поля, размер сеточной области в экспериментах составлял 50×201, количество итераций численного метода – 799. В экспериментах на многоядерной настольной системе, результаты которых показаны в табли- це 2, использовался компьютер Samsung Q210 (Intel Core 2 Duo 2GHz) с установленной ОС Windows Vista Home 32 bits. Таблица 2 Временные характеристики решения задачи о распространении плоской световой волны
В экспериментах на узле суперкомпьютера, результаты которых показаны в таблице 2, применялся узел кластера «Сергей Королев» с такими же характеристиками, как при решении задачи нелинейной динамики. Таким образом, программный комплекс Graphplus templet наряду с преимуществами в скорости разработки и возможностью автоматически развертывать исходную последовательную программу в разных архитектурах обеспечивает достаточно эффективное распараллеливание кода. Код системы Graphplus templet зарегистрирован Федеральным институтом промышленной собственности и открыт для некоммерческого применения (http://graphplus.ssau.ru). Авторы выражают признательность Самарскому государственному аэрокосмическому университету и администраторам суперкомпьютера «Сергей Королев» за помощь в проведении вычислительных экспериментов. Литература 1. Востокин С.В. Визуальное моделирование в разработке параллельных алгоритмов. Метод и программные средства. LAMBERT Academic Publishing, 2011. 304 c. 2. Востокин С.В., Хайрутдинов А.Р., Литвинов В.Г. Программный комплекс параллельного программирования Graphplus templet // Вестн. СамГТУ: Сер. Физматнауки, 2011. № 4 (25). C. 146–153. 3. Курушина С.Е. Аналитическое исследование и численное моделирование контрастных диссипативных структур в поле флуктуаций динамических переменных // Изв. вузов: Прикладная нелинейная динамика, 2009. № 6. C. 125–138. 4. Головашкин Д.Л., Сойфер В.А. Анализ прохождения электромагнитного излучения через дифракционную линзу // Автометрия. 1999. № 5. C. 119–121. |
http://swsys.ru/index.php?id=3203&lang=%E2%8C%A9%3Den&like=1&page=article |
|