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


 

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

81290. Толкование права 37.39 KB
  Цель толкования единообразное понимание и применение законов единство законности. Способом толкования называется совокупность однородных приемов и правил толкования основывающихся на однородных средствах и аргументах. Способами толкования принято считать: языковой грамматический; исторический историковполитический; систематический; логический; телеологический целевой; специальноюридический; функциональный. Основными правилами языкового толкования являются: золотое правило толкования словам и выражениям необходимо...
81291. Проблемы коллизии в праве и способы их восстановления и разрешения 37.14 KB
  Коллизии следует отличать от сходных понятий: Разногласие расхождение интересов и мнений между политическими деятелями органами государственной власти и их руководителями в оценках коллизионных проблем. Коллизии составляют серьёзную проблему права. Коллизии вызванные объективными причинами связаны с динамикой развития общественных отношений что влечет необходимость изменения дополнения конкретизации норм регулирующих данные отношения.
81292. Правоотношение: понятие, виды 35.47 KB
  Правоотношение характеризуется следующими главными признаками: наличием как минимум двух сторон управомоченной и обязанной; связью между ними через субъективные права и юридические обязанности; отрегулированностью содержания субъективных прав юридических обязанностей условий возникновения правоотношения правовыми нормами; обеспеченностью возможностью государственного принуждения. К факторам порождающим правоотношения относятся: общие материальные; специальные юридические. Под общими материальными факторами...
81294. Правомерное поведение 36.61 KB
  Формы проявления правовой активности весьма многообразны. Это и добросовестная служебная деятельность, и участие в формировании и работе партий, общественных объединений, и предметное обсуждение законопроектов, и сотрудничество с различными государственными структурами и т.д.
81295. Правонарушение: понятие, признаки, виды 36.97 KB
  Основными признаками преступления являются: противоправность которая заключается в нарушении предписания правовых норм; совершении деяний прямо запрещенных правом деяния не предусмотренные правовыми нормами либо не нарушающие требований правовых норм не могут считаться правонарушением; общественная опасность в зависимости от которой правонарушения классифицируются на преступления и проступки общественно неопасные деяния не являются правонарушениями; внешняя выраженность правонарушение должно быть выражено вовне мысли...
81296. Состав правонарушений 35.38 KB
  К числу обязательных элементов любого состава правонарушений относятся: объект правонарушения объективная сторон правонарушения субъект правонарушения субъективная сторона правонарушения. Объектом правонарушения являются общественные отношения регулируемые и охраняемые правом. В этой связи наряду с общим можно выделить и непосредственный объект правонарушения.
81297. Юридическая ответственность: понятие, виды. Основания юридической ответственности 36.49 KB
  Основания юридической ответственности Юридическая ответственность представляет собой возникшее из правонарушений правовое отношение между государством в лице его специальных органов и правонарушителем на которого возлагается обязанность претерпевать соответствующие лишения и неблагоприятные последствия за совершенное правонарушение за нарушение требований которые содержатся в нормах права. Юридическая ответственность характеризуется следующими основными признаками...
81298. Система прав человека. Международная защита прав человека 41.46 KB
  Эти права и свободы также именуемые гражданскими составляют основу базу правового статуса человека. Право на жизнь. Данное право закреплено всеми международноправовыми актами о правах человека и почти всеми конституциями мира как неотъемлемое право человека охраняемое законом. Право на свободу и личную неприкосновенность.