77373

Язык программирования RiDE.L

Научная статья

Информатика, кибернетика и программирование

Традиционно используемые в HPC языки с архитектурой классических компиляторов: C, C++, FORTRAN, Pascal – не позволяют справляться с этой сложностью настолько хорошо, насколько позволяют более поздние языки: Haskell, JavaScript, Oz, Ruby. Но программы, написанные на таких языках недостаточно эффективны во время исполнения

Русский

2015-02-02

18 KB

3 чел.

Язык программирования RiDE.L

М.О. Бахтерев, В.В. Косенко

ИММ УрО РАН, УрГУ, Екатеринбург

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

 Традиционно используемые в HPC языки с архитектурой классических компиляторов: C, C++, FORTRAN, Pascal –  не позволяют справляться с этой сложностью настолько хорошо, насколько позволяют более поздние языки: Haskell, JavaScript, Oz, Ruby. Но программы, написанные на таких языках недостаточно эффективны во время исполнения. Лучший в этом Haskell GHC даже с использованием направленных на оптимизацию, нарушающих стройные синтаксис и семантику этого языка конструкций не позволяет получать программы, сравнимые с полученными при помощи C++ по скорости исполнения и по эффективности использования памяти. Известно, что Haskell GHC проигрывает по этим параметрам C++ в более чем 2 раза на программах, вычисляющих одинаковые функции.

Попытки расширять классические компиляторы инструментами из новых языков программирования предпринимаются: C++0x, C#, Java. Но они приводят к чрезмерному усложнению и без того нетривиальных синтаксиса и семантики расширяемых языков, что существенно затрудняет работу как пользователям этих инструментов, так и их создателям.

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

1. Базовые синтаксис и семантика должны быть максимально простыми и однородными.

2. Язык  должен позволять составлять программы в императивной парадигме.

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

При разработке как ядра ОС, так и ПО для HPC это позволяет удобно (опыт показывает: удобнее чем шаблоны (template) в C++) описывать алгебраические типы данных. Также в ПО для HPC при помощи замыканий можно обеспечивать специализацию кода во время исполнения, что полезно для достижения максимальной производительности. При этом обеспечивать её с сохранением контроля со стороны программиста над процессом специализации, как это позволяет `C, а не прозрачными методами, возможно, не соответствующим особенностям решаемой задачи, которые используются в виртуальных машинах .Net и Java.

4. В языке должны присутствовать механизмы для описания машинно-зависимых типов данных. При работе и над ОС, и над ПО для HPC это обеспечивает возможность оптимизировать программы для работы на процессорах определённой архитектуры.

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

Удовлетворяющий всем этим требованиям язык удалось разработать. И более того, RiDE.L, оказался несложным в своей архитектуре. Он прост синтаксически и является, в общем, тривиальным языком выражений. Семантика же этих выражений определяется при помощи простого алгоритма, замещающего участки дерева выражений реализациями соответствующих перегруженных операторов. Это нельзя сделать без определения некоторых базовых примитивов, но оказалось, что достаточно реализовать в семантической базе небольшое число простых конструкций (меньше десятка), предназначенных для абстрактной работы с типами, для работы с выражениями и для перегрузки операторов.

Несмотря на свою базовую простоту, RiDE.L позволяет работать например, с такими нетривиальными конструкциями:

int i; int j; future(int) array(M * N) retvals; int allisok;

for (((i; j) ={in} range(0; N - 1) * range(0; N - 1)) &&
(ok = 1; ok)) (
retvals.(i * j) = matrixmul 'A.%1 B.%2 : R.%1.%2 = R'(i; j) |
 grep 'success'
);

for ((allisok = 1; i = 0); i < M * N && allisok; i += 1)
allisok &&= wait(retvals.i) && retvals.i.value == 0);

if (allisok) () or (print 'ERROR')

Данный код описывает запуск и ожидание результатов примитивного параллельного умножения матрицы A на матрицу B в рамках модели распределённых вычислений, принятой в разрабатываемой ОС. В этом коде конструкции: int, future, array, range, for, if-or, ={in} – не являются элементами базовой семантики RiDE.L, а могут быть реализованы на уровне библиотек.

В настоящее время реализовано несколько основных компонентов транслятора RiDE.L, и вскоре будет создан его рабочий прототип, на котором можно будет проверить гипотезы о гибкости, выразительной мощи и удобстве предлагаемых подходов к построению компиляторов.


 

А также другие работы, которые могут Вас заинтересовать

28443. Структура типов данных. Стандартные процедуры и функции, применимые к целым, вещественным числам. Логический, символьный, перечисляемый типы, тип-диапазон 80.5 KB
  константы переменные значения функций или выражения характеризуются своими типами. Порядковые типы К порядковым типам относятся целые логический символьный перечисляемый и тип диапазон. ORDX для логического типа даёт положительное целое число в диапазоне от 0 до 1. ORDX для символьного типа даёт целое число в диапазоне от 0 до 255 для перечисляемое типа ORDX даёт число в диапазоне от 0 до 65535.
28444. Массивы. Описание одномерного массива. Ввод – вывод одномерного массива. Обработка одномерных числовых массивов. Описание двумерного массива. Ввод – вывод двумерного массива. Обработка двумерных числовых массивов 30 KB
  Описание одномерного массива. Ввод вывод одномерного массива. Описание двумерного массива. Ввод вывод двумерного массива.
28445. Особенности договорных отношений и оформление договорной документации между юридическими лицами и участниками туристской деятельности 29.5 KB
  Договоры с авиа компаниями могут быть трех видов: договор на квоту мест на регулярных авиа рейсах; агентское соглашение; чартер аренда самолета. Договор на квоту мест на регулярных авиа рейсах. Квота мест может быть жесткой или мягкой. При жесткой квоте мест вся ответственность за не реализацию мест падает на туристскую фирму независимо от причины не реализации.
28446. Технология составления и основное содержание туристской документации 43.5 KB
  В набор технологической документации для каждого тура обязательно включаются: технологическая карта туристского путешествия по маршруту; график загрузки туристского предприятия группами туристов на определенное время; информационный листок к путевке туристского путешествия; бланки путевок типовой формы ТУР1 Туристская путевка утвержденной Минфином России; лист бронирования см. Технологическая карта туристского путешествия это документ наглядно и лаконично дающий все необходимые для работы сведения и данные по туру...
28447. Порядок движения документов в организациях социально 32 KB
  Порядок движения документов в организациях социальнокультурного сервиса и туризма. Документооборот д о это движение документов в организации с момента создания или получения до отправки или передачи их на хранение. Основой структуры любого документооборота является документ комплекс документов связанный процессов управления разных уровней и автоматической обработкой. Единый маршрут для одного вида документов или совокупности документов образует документопоток.
28448. Особенности договорных отношений и оформление договор 33.5 KB
  Турфирмы же туроператоры и турагенты это организации занимающиеся деятельностью по формированию продвижению и реализации или только по продвижению и реализации туристского продукта. В соответствии со статьей 9 Закона о туризме туроператор при формировании и продвижении туристского продукта приобретает право на услуги входящие в тур на основании договоров с лицами предоставляющими отдельные услуги или с туроператором по приему туристов обеспечивающим предоставление всех видов услуг входящих в тур. Порядок реализации туристского...
28450. Связь цен с различными экономическими показателями: спрос, затраты, деятельность конкурирующих предприятий, качество 120.5 KB
  К факторам влияющим на цену относятся: существующий или создаваемый спрос размер понесенных затрат деятельность конкурирующих предприятий ситуация на финансовом рынке установленный стандарт услуг. Это ограничивает прибыль от повышения цены поскольку может оказаться что в результате повышения цен определенное число клиентов откажется от услуг в результате чего продажи упадут Сильное повышение цены может ограничить или ликвидировать спрос. Нельзя рассматривать проблему спроса на гостиничные услуги вне зависимости от ее цены. Повышение...
28451. Гостиничная услуга, ее специфика и составные элементы. Особенности работы гостиничного предприятия 74.5 KB
  Зависимость гостиничных услуг от целей путешествия объясняется тем что решения гостя посетить определенное место основывается как правило не на факторе наличия в этом месте конкретной гостиницы. Колебания спроса непосредственным образом связаны с социальноэкономической и политической обстановкой месторасположения гостиницы. работа персонала гостиницы особенно тех кто непосредственно контактирует с клиентами требует умения и желания находить общий язык с самыми разными людьми поскольку среди постояльцев гостиницы бывают богатые и...