Научная статья на тему 'Непроцедурный язык норма и методы его трансляции для параллельных архитектур'

Непроцедурный язык норма и методы его трансляции для параллельных архитектур Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
303
52
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ / АВТОМАТИЗАЦИЯ ПРОГРАММИРОВАНИЯ / НЕПРОЦЕДУРНЫЕ СПЕЦИФИКАЦИИ / ГРАФИЧЕСКИЕ ПРОЦЕССОРЫ / ГИБРИДНЫЕ АРХИТЕКТУРЫ / ЯЗЫК НОРМА / PARALLEL PROGRAMMING / PROGRAMMING AUTOMATION / NONPROCEDURAL SPECIFICATIONS / GPU / HYBRID ARCHITECTURES / NORMA LANGUAGE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Андрианов Александр Николаевич, Баранова Татьяна Петровна, Бугеря Александр Борисович, Ефимкин Кирилл Николаевич

Предлагается декларативный подход к созданию прикладного программного обеспечения для высокопроизводительных вычислительных систем. Рассматриваются методы автоматического построения программ для различных параллельных архитектур по непроцедурным спецификациям на языке НОРМА. Описана структура созданного на основе рассмотренных методов компилятора и произведена оценка его эффективности. Приводятся результаты применения компилятора для нескольких прикладных задач.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Андрианов Александр Николаевич, Баранова Татьяна Петровна, Бугеря Александр Борисович, Ефимкин Кирилл Николаевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

NONPROCEDURAL NORMA LANGUAGE AND ITS TRANSLATION METHODS FOR PARALLEL ARCHITECTURES

The paper proposes a declarative approach to creating software applications for high-performance computing systems. The methods of automatic programs generating for different parallel architectures from NORMA language nonprocedural specifications are considered. The structure of the compiler created using these techniques is described. The performance of automatically generated programs is estimated. The results of the compiler applied for solving several different tasks are presented.

Текст научной работы на тему «Непроцедурный язык норма и методы его трансляции для параллельных архитектур»

ИНФОРМАТИКА, ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И УПРАВЛЕНИЕ INFORMATICS, COMPUTER ENGINEERING AND CONTROL

УДК 004.4'242, 004.4'422, 004.432.4 DOI: 10.17213/0321-2653-2017-3-5-12

НЕПРОЦЕДУРНЫЙ ЯЗЫК НОРМА И МЕТОДЫ ЕГО ТРАНСЛЯЦИИ ДЛЯ ПАРАЛЛЕЛЬНЫХ АРХИТЕКТУР*

© 2017 г. А.Н. Андрианов, Т.П. Баранова, А.Б. Бугеря, К.Н. Ефимкин

Институт прикладной математики им. М.В. Келдыша РАН, г. Москва, Россия

NONPROCEDURAL NORMA LANGUAGE AND ITS TRANSLATION METHODS FOR PARALLEL ARCHITECTURES

A.N. Andrianov, T.P. Baranova, A.B. Bugerya, K.N. Efimkin

Keldysh Institute of Applied Mathematics RAS, Moscow, Russia

Андрианов Александр Николаевич - д-р физ.-мат. наук, ведущий науч. сотрудник, Институт прикладной математики им. М.В. Келдыша РАН, г. Москва, Россия. E-mail: and@a5.kiam.ru

Баранова Татьяна Петровна - науч. сотрудник, Институт прикладной математики им. М.В. Келдыша РАН, г. Москва, Россия. E-mail: bart1950@yandex.ru

Бугеря Александр Борисович - канд. физ.-мат. наук, ст. науч. сотрудник, Институт прикладной математики им. М.В. Келдыша РАН, г. Москва, Россия. E-mail: shurabug@yandex.ru

Ефимкин Кирилл Николаевич - канд. физ.-мат. наук, начальник отдела, Институт прикладной математики им. М.В. Келдыша РАН, г. Москва, Россия. E-mail: bigcrocodile@yandex.ru

Andrianov Alexander Nikolaevich - Doctor of Physical and Mathematical Sciences, Leading researcher officer, Keldysh Institute of Applied Mathematics RAS, Moscow, Russia. E-mail: and@a5.kiam.ru

Baranova Tatiana Petrovna - research officer, Keldysh Institute of Applied Mathematics RAS, Moscow, Russia. E-mail: bart1950@yandex.ru

Bugerya Alexander Borisovich - Candidate of Physical and Mathematical Sciences, Senior research officer, Keldysh Institute of Applied Mathematics RAS, Moscow, Russia. E-mail: shurabug@yandex.ru

Efimkin Kirill Nikolaevich - Candidate of Physical and Mathematical Sciences, head of department, Keldysh Institute of Applied Mathematics RAS, Moscow, Russia. E-mail: bigcrocodile@yandex.ru

Предлагается декларативный подход к созданию прикладного программного обеспечения для высокопроизводительных вычислительных систем. Рассматриваются методы автоматического построения программ для различных параллельных архитектур по непроцедурным спецификациям на языке НОРМА. Описана структура созданного на основе рассмотренных методов компилятора и произведена оценка его эффективности. Приводятся результаты применения компилятора для нескольких прикладных задач.

Ключевые слова: параллельное программирование; автоматизация программирования; непроцедурные спецификации; графические процессоры; гибридные архитектуры; язык НОРМА.

The paper proposes a declarative approach to creating software applications for high-performance computing systems. The methods of automatic programs generating for different parallel architectures from NORMA language nonprocedural specifications are considered. The structure of the compiler created using these techniques is described. The performance of automatically generated programs is estimated. The results of the compiler applied for solving several different tasks are presented.

Keywords: parallel programming; programming automation; nonprocedural specifications; GPU; hybrid architectures; NORMA language.

* Работа выполнена при поддержке Российского фонда фундаментальных исследований, проект 15-01-03039-а.

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION.

Введение

В современном научном сообществе задача разработки эффективных параллельных программ имеет важное стратегическое значение. Несмотря на то что параллельное программирование появилось уже достаточно давно (успешно развивается и активно исследуется), вопрос создания эффективных параллельных программ для решения расчетных задач до сих пор крайне актуален для программистов и прикладных специалистов. В составе средств разработки программ для новых параллельных архитектур со временем появляются различные новые инструменты и библиотеки, предоставляющие прикладному программисту эффективные элементарные «кирпичики» для конструирования своей программы. Их наличие, несомненно, существенно облегчает задачу прикладному специалисту, но только в том случае, если все его потребности в высокопроизводительных вычислениях покрываются имеющимися распараллеленными пакетами и/или библиотеками. Если же с помощью таких готовых средств построить решение для своей задачи не удаётся, то иного пути, кроме как изучить специальные инструменты программирования для целевой архитектуры и начать реализовывать свой алгоритм этими средствами на достаточно низком уровне, у прикладного специалиста нет.

Надежды на автоматическое распараллеливание уже написанных последовательных программ на различные виды параллельных архитектур пока не оправдываются, несмотря на то что фирмы-производители аппаратных решений давно активно поддерживают данное направление исследований. Из уже реализованных подходов можно отметить те, которые базируются на вполне разумном симбиозе распараллеливающего компилятора и подсказок со стороны программиста, выполненных в виде специальных программных директив, например ОрепАСС [1].

В такой ситуации интерес представляют подходы к построению параллельных программ, точно определяющие границы того, что и как можно автоматически распараллелить, и предоставляющие возможности для автоматизированного построения эффективных параллельных программ. Одним из таких подходов является непроцедурный язык НОРМА [2].

Декларативный подход. Язык НОРМА

Один из возможных подходов к решению

TECHNICAL SCIENCE. 2017. No 3

проблемы автоматизации параллельного программирования вычислительных задач является подход с использованием декларативных (непроцедурных) языков. При использовании этого подхода прикладной специалист программирует решение вычислительной задачи на непроцедурном языке (понятия, связанные с архитектурой параллельного компьютера, моделями параллелизма и прочие детали целевой системы при этом не используются), а затем компилятор автоматически строит параллельную программу (уже учитывая архитектуру целевого параллельного компьютера, модели параллелизма и прочие заданные параметры компиляции). С учетом отмеченных выше проблем привлекательность этого подхода в настоящее время только усиливается, и интерес к идеям непроцедурного декларативного программирования и реализации этих идей в языках программирования неуклонно растет. Но следует отметить, что в общем случае задача автоматического эффективного синтеза параллельной программы по непроцедурной спецификации может оказаться не разрешимой.

Идеи декларативного программирования были сформулированы еще в прошлом веке, теоретические исследования этого подхода для класса вычислительных задач проведены в пионерских работах И.Б. Задыхайло еще в 1963 г. [3]. Непроцедурный язык НОРМА и система программирования НОРМА [2, 4, 5] разработаны в ИПМ им. М.В. Келдыша РАН также достаточно давно и предназначены для автоматизации решения вычислительных сеточных задач на параллельных компьютерах. Расчетные формулы записываются на языке НОРМА в математическом, привычном для прикладного специалиста виде. Язык НОРМА позволяет описывать решение широкого класса задач математической физики. Программа на языке НОРМА имеет очень высокий уровень абстракции и отражает метод решения, а не его реализацию при конкретных условиях. Такое описание не ориентировано на конкретную архитектуру компьютера, поэтому оно предоставляет большие возможности для выявления естественного параллелизма и организации вычислений.

Специфические свойства и ограничения языка НОРМА можно описать следующим образом:

1. Декларативность. Программа (и каждый ее оператор) описывает запрос на вычисление. Каким образом этот запрос реализуется, не

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION.

указывается. Нет понятий памяти, управления (переходов, циклов и тому подобное).

2. Однократное присваивание - величины могут принимать значения только один раз, переприсваивание значений невозможно. Язык НОРМА принадлежит к классу SAL-языков (Single Assignment Language). Нет глобальных переменных и побочных эффектов.

3. Ограничение на вид индексных выражений у величин - индексные выражения имеют вид (A*i + Cj)/B + C2, где i - индексная переменная, A и B - натуральные константы, а Q и C2 -целые константы.

4. Области имеют границы, заданные константными выражениями, значения которых известны в момент трансляции.

Компилятор программ на языке НОРМА

В систему программирования НОРМА [4] входит специализированный декларативный язык НОРМА [2], компилятор программ на языке НОРМА [6], конфигуратор, параллельный диалоговый отладчик в терминах исходной программы [7], интегрированные в едином интерфейсе пользователя. Компилятор программ на языке НОРМА позволяет получать исполняемую программу на заданном процедурном языке программирования для определённой модели параллелизма. На данный момент компилятор умеет создавать программы на языках Си или Фортран для следующих вычислительных архитектур:

- последовательные программы;

- для многоядерных систем с общей памятью с использованием технологии OpenMP;

- для распределённых систем с использованием технологии MPI;

- для графических процессоров фирмы NVIDIA с использованием технологии NVIDIA CUDA.

В настоящее время ведутся работы по созданию версии компилятора для гибридных архитектур.

Структура компилятора

В 2010 г. была разработана новая архитектура второго поколения компилятора программ, написанных на языке НОРМА, ориентированная на возможность генерации выходных параллельных программ на различных целевых языках для различных параллельных архитектур и платформ. Разработка компилятора ведется на языке Си++. Основная особенность новой архитектуры компилятора - её модульность, максимальная

TECHNICAL SCIENCE. 2017. No 3

независимость от целевой платформы и языка и возможность создавать новые модули кодогенераторов для новых вычислительных архитектур и целевых языков.

Общую схему работы компилятора можно описать следующим образом. Компилятор программ, написанных на языке НОРМА, представляет собой приложение с интерфейсом командной строки. При вызове компилятора ему через параметры командной строки передаются имена файлов, содержащие исходные тексты программы на языке НОРМА, и опции компиляции. Компилятор читает текст программ из указанных файлов, производит синтаксический и семантический анализ программ на языке НОРМА и выдаёт диагностику по каждому файлу о наличии или отсутствии ошибок в анализируемой программе.

В процессе синтаксического и семантического анализа программы на языке НОРМА компилятор строит Абстрактное Синтаксическое Дерево (АСД), представляющее анализируемую программу в виде структурированного дерева в памяти компилятора. Затем, если ошибок не найдено, компилятор выполняет процесс кодоге-нерации. В зависимости от заданных опций компилятор использует тот или иной модуль кодо-генерации как для языка программирования выходной программы (Си или Фортран), так и для модели параллельного программирования (последовательная, MPI, OpenMP, CUDA или гибридная).

Рассмотрим архитектуру компилятора НОРМА, его составные части и их взаимодействие. На рис. 1 приведена его структурная схема. Модули компилятора показаны прямоугольниками. Взаимодействия между ними и передача потока управления показаны стрелками. В овалах на схеме показаны обрабатываемые структуры данных. Потоки данных между модулями компилятора и данными также показаны стрелками.

Процесс кодогенерации

Рассмотрим немного более подробно процесс кодогенерации. Первым начинает работу модуль общего генератора исполняемой программы. Он порождает на основе исходной программы на языке НОРМА исполняемые операторы, определяет последовательность их выполнения, возможность параллельного исполнения и выполняет прочие базовые независимые от заданных опций кодогенерации действия. Для

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION.

TECHNICAL SCIENCE. 2017. No 3

этого строится так называемая параллельная ярусная схема выполняемой программы. Операторы, помещённые на один ярус этой схемы, могут выполняться в произвольном порядке и параллельно, так как они не зависят друг от

друга. Параллельная ярусная схема программы является, фактически, представлением идеального (естественного) параллелизма, определяемого соотношениями и зависимостями между расчетными переменными программы.

Рис. 1. Структурная схема компилятора / Fig. 1. Compiler's structure

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION.

По ярусной схеме модуль общего генератора строит внутреннее представление исполняемой программы в виде специального графа в памяти компилятора, который содержит конструкции общего типа, не зависящие ни от выбранной модели параллелизма, ни от выходного языка. Все эти конструкции затем будут уточняться и дополняться другими модулями кодогенератора компилятора НОРМА.

Затем, после того как общая структура исполняемой программы сгенерирована, вызывается модуль оптимизатора. Он оптимизирует исполняемую программу в целом и решает такие задачи, как переопределение порядка вычисления операторов для оптимизации использования памяти.

Затем, в зависимости от заданных опций, вызывается кодогенератор для одной из поддерживаемых моделей параллелизма. Он производит действия по модификации исполняемой программы с учётом выбранной модели параллелизма. На выходе этого этапа получается всё то же внутреннее представление исполняемой программы, но только конкретизированное для выбранной модели параллелизма.

Выбранный в компиляторе способ реализации кодогенераторов для различных моделей параллелизма достаточно прост. В компиляторе имеется набор классов, реализующих абстрактный кодогенератор. В этих классах реализован широкий набор методов по реализации различных программных примитивов, например, «начало цикла по области», «начало использования такой-то переменной» и тому подобные. В классах абстрактного кодогенератора эти методы реализованы так, чтобы получить код последовательной программы. Заметим, что мы не случайно называем этот кодогенератор «абстрактным», а не «последовательным», так как в нём определён гораздо более широкий набор примитивов, чем необходимо использовать для построения последовательной программы.

Для создания конкретного кодогенератора достаточно создать набор классов, полностью соответствующий базовому набору классов абстрактного кодогенератора и наследующий один в один этот набор. И далее в этих классах конкретного кодогенератора необходимо переопределить функции генерации тех примитивов, которые в данной модели параллелизма должны быть реализованы иначе, чем в последовательной модели. Например, в кодогенераторе для модели параллелизма с общей памятью перед

TECHNICAL SCIENCE. 2017. No 3

генерацией оператора необходимо проверить, есть ли в нём циклы, которые можно распараллелить. И если есть, надо вставить соответствующие OpenMP директивы. А сам оператор генерируется точно так же, как и для последовательной программы - и это менять не нужно.

Затем, в зависимости от заданных опций, вызывается кодогенератор одного из языков программирования (Си или Фортран), который переводит операторы внутреннего представления исполняемой программы в операторы выбранного языка программирования. Текст исполняемой программы в выбранной модели параллелизма на выбранном языке программирования записывается в выходной файл, и на этом процесс кодо-генерации заканчивается. Модуль кодогенератора для конкретного языка программирования реализован абстрактным классом, декларирующим широкий набор виртуальных функций, предназначенный для генерации на каком-то процедурном языке программирования таких примитивов, как «объявить переменную», «создать условный оператор» и так далее. Этот набор достаточен для того, чтобы кодогенератор для конкретной модели параллелизма создавал выходную программу, оперируя этими примитивами. Затем, при создании кодогенератора для конкретного языка программирования (например, Фортрана), должен быть создан класс, наследующий этот абстрактный класс и реализующий все примитивы для этого конкретного языка программирования.

Результаты применения компилятора

Компилятор программ на языке НОРМА использовался для решения многих практических и тестовых задач. В качестве примера применения компилятора приведём получившиеся результаты для расчетной задачи из области газодинамикии и для теста CG из пакета NPB (NAS Parallel Benchmarks) [8]. В обоих примерах применения компилятора удалось добиться получения полностью корректного результата и была проведена оценка эффективности получающихся исполняемых программ. Производительность программ для графических процессоров фирмы NVIDIA с использованием технологии NVIDIA CUDA сравнивалась с последовательной и OpenMP версиями той же самой программы. Для теста CG из пакета NPB также приведено сравнение с оригинальными версиями теста, написанными вручную. Все запуски производились на вычислительном

кластере K-100 [9]. Компиляция последовательных и OpenMP версий программ производилась компилятором Intel версии 15.0.0, компиляция CUDA программ - компилятором nvcc версии 6.5.

Прикладная задача из области газодинамики

В основном рабочем итерационном цикле данной программы производится расчёт различных величин для всех точек одномерной области. Для каждой точки вызывается «плоский» внешний раздел, который на основе предыдущих значений точки и её соседей высчитывает данные для новых значений. Все вычисления производятся с одинарной точностью. Времена выполнения версий программы приведены в табл. 1.

Таблица 1 / Table 1

Время выполнения программы решения задачи из области газодинамики / Execution time for the program solving the gas dynamics task

Последовательная программа, 1 ядро Intel Xeon X5670 OpenMP программа, 12 ядер Intel Xeon X5670 CUDA программа, 1 nVidia Fermi C2050

461 с 45,6 с 16,9 с

Построенная полностью автоматически программа для графических процессоров демонстрирует высокую скорость выполнения и эффективность применённых в компиляторе методов и решений.

Реализация теста CG из пакета NPB

Наиболее широко тесты для измерения производительности кластерных систем представлены в пакете NAS Parallel Benchmarks [8], обладающем помимо объективных достоинств еще одним необъективным - авторитетностью программ и их авторов. Это послужило причиной выбора данного пакета для исследования возможности реализации его тестов на языке НОРМА и проверки эффективности кода, генерируемого компилятором с языка НОРМА.

После анализа исходных текстов программ тестового пакета NPB для эксперимента по пор-тированию данного тестового пакета на язык НОРМА в первую очередь было выбрано ядро CG, как наиболее подходящее под концепцию языка НОРМА. Тестовое ядро CG (Conjugate Gradient) осуществляет приближение к наименьшему собственному значению большой раз-

реженной симметричной положительно определенной матрицы с использованием метода обратной итерации вместе с методом сопряженных градиентов в качестве подпрограммы для решения СЛАУ. Тест применяется для оценки скорости передачи данных при отсутствии какой-либо регулярности. Вычисления производятся в определенных классах (размерность основных массивов данных) задач: «Sample code», «Class А» (маленькие), «Class В» (большие), «Class С» (очень большие), «Class D» (огромные). Все вычисления производятся с двойной точностью.

После анализа исходных текстов ядра CG было принято решение переписать на языке НОРМА основную рабочую функцию теста, а также этапы инициализации теста и основной тестовый цикл. В то же время стало очевидно, что такие действия, как начальная инициализация разреженной матрицы, плохо подходят для реализации средствами языка НОРМА. Завершающий шаг - анализ правильности полученных результатов и вывод статистических данных о прохождении теста - также было решено оставить в оригинальном виде на Си для неоспоримости факта правильности анализа полученных результатов оригинальным кодом и сохранения формата вывода. Фактически получается, что тест начинает свою работу и заканчивает её кодом на Си, а та часть, в которой производятся все вычисления и при выполнении которой производится засечка времени и делается вывод о производительности системы - реализуется на языке НОРМА. Поэтому в оставшемся коде на Си не нужно делать никаких предположений об архитектуре целевой системы и об используемых инструментах параллельного программирования. Этот код так и остаётся обычным последовательным кодом на Си и на быстродействие теста никак не влияет.

Среди конструкций, которые необходимо было портировать на язык НОРМА, оказались и такие, что не могут быть выражены средствами языка НОРМА. В первую очередь речь идёт о «сердце» теста - умножении разреженной матрицы на вектор. Но язык НОРМА поддерживает вызовы так называемых «внешних» функций, которые могут быть написаны на целевом языке программирования. Задача по реализации умножения разреженной матрицы на вектор (это делается с помощью косвенной адресации и цикла с переменными границами) была возложена на такую вспомогательную внешнюю функцию, а в программе на языке НОРМА в каждой точке

области, соответствующей результирующему вектору, результат выполнения этой внешней функции в данной точке присваивается результирующей переменной.

Но подобная реализация умножения разреженной матрицы на вектор (фактически оператор оставлен в том же виде, что был в оригинальном тесте), несмотря на очевидное достоинство - простоту реализации (вся внешняя функция получилась из 8 строк) - и хорошие показатели распараллеливания в версии OpenMP, плохо подошла для выполнения на графических процессорах. Поэтому были разработаны и реализованы ещё 2 варианта этой внешней функции, специально для версии для графических процессоров, которые учитывают особенности этой архитектуры. В первом из них каждая точка области рассчитывается одним блоком графического процессора. А цикл с переменными границами, в котором производится суммирование вычисленных значений, выполнен в виде редукции по нитям, где каждая нить предварительно высчитывает своё значение, соответствующее значению на определённом витке цикла. Такая реализация внешней функции получилась приблизительно в 120 строк кода. Второй вариант -использовать функцию из библиотеки cuSPARSE [10]. Такая реализация внешней функции получилась приблизительно в 60 строк кода. Результаты выполнения различных версий теста приведены в табл. 2.

Таблица 2 / Table 2

Результаты запуска теста CG (Mop/s) / Results of CG test execution (Mop/s)

Class A Class B Class C

Показатель Си Си + Си Си + Си Си +

НОРМА НОРМА НОРМА

Последовательная

программа, 1 ядро 1200 1175 718 716 513 615

Intel Xeon X5670

OpenMP программа, 12 ядер 9737 8035 3595 3004 3240 2806

Intel Xeon X5670

CUDA программа,

простая реализация, 1 nVidia Fermi — 927 — 722 — 645

C2050

CUDA программа,

реализация с редукцией, 1 nVidia Fermi C2050 — 2134 — 2178 — 1876

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

CUDA программа,

использование

cuSPARSE, — 6521 — 4504 — 2704

1 nVidia Fermi

C2050

Во всех случаях проверка результата прошла успешно и приведённые цифры - количест-

во миллионов операций в секунду (Mop/s), основной показатель скорости выполнения теста.

Как можно заметить, результаты выполнения теста CG с использованием языка НОРМА практически идентичны (видимо, с точностью до погрешности измерений) соответствующим результатам оригинального теста CG, написанного вручную. Это даёт нам право утверждать, что тест CG прекрасно подошёл для записи его на языке НОРМА. И что задачи, имитирующиеся этим тестом, также должны хорошо подходить для программирования их (или по крайней мере их основных вычислительных ядер) на языке НОРМА. Ничуть не проиграв по скорости выполнения получившихся программ, компилятор программ с языка НОРМА полностью взял на себя задачу по автоматическому распараллеливанию выходной программы и успешно её выполнил.

В то же время видно, что для эффективного выполнения на графических процессорах таких задач необходимо прибегать к более тонкому ручному программированию или, когда это возможно, - использовать специальные библиотеки.

Заключение

В настоящее время ведется разработка версии компилятора с языка НОРМА для высокопроизводительных вычислительных систем с гибридной архитектурой. В генерируемой выходной программе могут быть одновременно использованы технологии MPI, OpenMP и NVIDIA CUDA. Компилятор будет автоматически решать такие задачи, как распределение вычислительной нагрузки между графическими процессорами и центральным процессором, а также между узлами гибридной вычислительной системы, организация обмена данными между узлами и внутри одного узла и ряд других.

Литература

1. OpenACC // URL: http://openacc.org (дата обращения: 26.01.2017).

2. Андрианов А.Н., Бугеря А.Б., Ефимкин К.Н., Задыхай-ло И.Б. НОРМА. Описание языка. Рабочий стандарт // Препринт ИПМ им. М.В. Келдыша РАН. М., 1995. № 120. 52 с.

3. Задыхайло И.Б. Организация циклического процесса счета по параметрической записи специального вида // Журн. вычислит. мат. и мат. физзика. М., 1963. Т. 3, № 2. С. 337-357.

ISSN 0321-2653 IZVESTIYA VUZOV. SEVERO-KAVKAZSKIIREGION. TECHNICAL SCIENCE. 2017. No 3

4. Андрианов А.Н., Бугеря А.Б., Гладкова Е.Н., Ефим-кин К.Н., Колударов П.И. Простые вещи // Суперкомпьютеры. М.: Изд-во СКР-Медиа, 2014. № 2 (18). С. 58 -61.

5. Система НОРМА // URL: http://www.keldysh.ru/ pages/norma (дата обращения: 26.01.2017).

6. Андрианов А.Н., Бугеря А.Б., Ефимкин К.Н., Колуда-ров П.И. Модульная архитектура компилятора языка Норма+ // Препринт ИПМ им. М.В. Келдыша РАН. М., 2011. № 64. 16 с.

7. Бугеря А.Б. Диалоговая отладка параллельных программ: распределенная схема взаимодействующих компонентов // Программирование. М., 2008. № 3. С. 42-49.

8. NAS Parallel Benchmarks // URL: http://www.nas.nasa.gov/ publications/npb.html (дата обращения: 26.01.2017).

9. Гибридный вычислительный кластер K-100 // URL: http://www.kiam.ru/MVS/resourses/k100.html (дата обращения: 26.01.2017).

10. CUDA Toolkit Documentation // URL: http:// docs.nvidia.com/cuda (дата обращения: 26.01.2017).

References

1. OpenACC. Available at: http://openacc.org (accessed 26.01.2017).

2. Andrianov A.N., Bugerya A.B., Efimkin K.N., Zadykhailo I.B. NORMA. Opisanie yazyka. Rabochii standart [NORMA Programming Language. Draft Standard]. Preprint IPMim. M. V. Keldysha RAN, 1995, no. 120, 52 p. [In Russ.]

3. Zadykhailo I.B. Organizatsiya tsiklicheskogo protsessa scheta po parametricheskoi zapisi spetsial'nogo vida [Organizing of Cycle Process Calculating by Special Parametrized Record]. Zhurn. vych. mat. i mat. fiz. = Computing Mathematics and Mathematical Physics, 1963, vol. 3, no. 2, pp. 337-357. [In Russ.]

4. Andrianov A.N., Bugerya A.B., Gladkova E.N., Efimkin K.N., Koludarov P.I. Prostye veshchi [Simple things]. Superkomp'yutery, 2014, no. 2(18), pp. 58-61. [In Russ.]

5. NORMA. Available at: http://www.keldysh.ru/pages/norma (accessed: 26.01.2017).

6. Andrianov A.N., Bugerya A.B., Efimkin K.N., Koludarov P.I. Modul'naya arkhitektura kompilyatora yazyka Norma+ [Modular architecture of NORMA+]. Preprint IPM im. M. V. Keldysha, 2011, no. 64, 16 p. [In Russ.]

7. Bugerya A.B. Dialogovaya otladka parallel'nykh programm: raspredelennaya skhema vzaimodeistvuyushchikh komponentov [Interactive debugging of parallel programs: distributed scheme of interacting components]. Programmirovanie = Programming and Computer Software, 2008, no. 3, pp. 42-49. [In Russ.]

8. NAS Parallel Benchmarks. Available at: http://www.nas.nasa.gov/publications/npb.html (accessed 26.01.2017).

9. Hybrid Supercomputing Cluster K-100. Available at: http://www.kiam.ru/MVS/resourses/k100.html (accessed 26.01.2017).

10. CUDA Toolkit Documentation. Available at: http://docs.nvidia.com/cuda (accessed 26.01.2017).

Поступила в редакцию /Received 03 мая 2017 г. /May 03, 2017

i Надоели баннеры? Вы всегда можете отключить рекламу.