77373

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

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

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

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

Русский

2015-02-02

18 KB

1 чел.

Язык программирования 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, и вскоре будет создан его рабочий прототип, на котором можно будет проверить гипотезы о гибкости, выразительной мощи и удобстве предлагаемых подходов к построению компиляторов.


 

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

22002. Франция в XI-XV вв. 269.5 KB
  Серв получал свободу только через отпуск для чего требовалась еще и санкция вышестоящего сеньора или короля. должность графа равно как и прочие бенефиции полученные от короля становилась наследственным достоянием их обладателей. на дворянский отряд осуществлявший в Бовези реквизицию продуктов у крестьян стали осаждать рыцарские замки сжигать или захватывать поместья было разрушено не менее 100 замков или домов уничтожать списки повинностей и требовать истребления всех дворян кроме короля. Города разными путями добивались...
22003. Франция в XVI-XVIII вв. 183 KB
  Во Франции в XVIXVII вв. Парижский бассейн самая развитая область Франции урожайность 15 цт с 1 га сам5; на юге чуть ниже; трехполье; для сравнения урожайность в Англии составляла 13 цт с 1 га. в некоторых местностях Северной Франции появилась новая форма аграрных отношений краткосрочная аренда более или менее крупных земельных комплексов. климат характеризуется потеплением и преобладанием урожайных лет над неурожайными а война велась вне пределов Франции и сопровождалась умеренным ростом налогов.
22004. Україна у складі Російської та Австро-Угорської імперій (кінець ХVІІІ – початок ХХ ст.) 56 KB
  Український суспільно-політичний рух опирався не тільки на внутрішні джерела, а й на зовнішні чинники. Йдеться, зокрема, про відчутний вплив на цей рух Французької революції, зокрема її концепції вільної нації.
22005. Чехия в XI-XV вв. 127.5 KB
  Леса хвойные Чехии смешанные Словакия. В Чехии со второй четверти XII в. конец династии Пшемысловичей борьба за престол и утверждение в Чехии Люксембургов 1310 г. Во главе деревни стоял наследственный староста в Чехии рижстарж в Польше солтыс войт.
22006. Швейцария в XVI в. 52.5 KB
  Торговля содействовала развитию кредита так как Цвингли и Кальвин отвергли запрет . Ульрих Цвингли 14841531 сын сельского старосты окончил латинскую школу в Берне в Базельском и Венском университетах связан с Эразмом магистр свободных искусств увлекался гуманистическими штудиями. У Цвингли не было ничего из мистического созерцания Лютера. Цвингли свои взгляды изложил в 67 тезисах 1523 г.
22007. Япония в III-VIII –XII вв. 64 KB
  Заселение овов Японии началось давно. в Японии образовался племенной союз занимавший ов Кюсю или по мнению других южную часть ова Хонсю провинции Ямато Коти Эцу. По синтоизму японская нация ведет свое происхождение от богиги Солнца Аматэрасу потомком которой был легендарный император Японии Дзиммутэнно 660 г. Особенность исторического развития Японии состоит в том что первобытнообщинный строй трансформировался в феодальный минуя рабовладельческий.
22008. Япония в XIV-XVI вв. 78 KB
  Таким образом появление новой сёгунской династии не означало централизации страны. Вся остальная часть страны находилась в руках местных феодалов. Посевы хлопчатника до этого сеяли эту культуру только в южной части страны появились и в восточной части страны. Встал вопрос об объединении страны.
22009. Международные отношения в средние века. Итальянские войны 116.5 KB
  Примером является империя Карла V. Таким образом накануне похода Карла VIII Италия разделилась на 2 лагеря Милан Венеция Рим с одной стороны и Неаполь Флоренция с другой. Флорентийцы восстали и изгнали Медичи Флоренция встретила Карла VIII не как завоевателя а как союзника хотя и пришлось выполнить ряд тяжелых условий выплатить 120. Задача флорентийского правительства Пьетро Каппони видело главную задачу в том чтобы скорее выпроводить Карла VIII из Флоренции и из Тосканы.
22010. Нидерландская буржуазная революция 133 KB
  Расширялось стойловое содержание скота Голландия а ломовые лошади из Голландии Фрисландии Зеландии шли даже на экспорт. они исполнялись с непреклонной жестокостью и среди уголовных приговоров суда Голландии 2030х гг. Флот одной Голландии в 60 г. Среди городов Голландии на первое место постепенно выдвигается Амстердам по объемам морского флота мореходства рыболовства он перегнал все остальные города.