Расширение функционала dataflow-системы императивной парадигмой вычислений

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

В дальнейшем планируется разработка дополнительных методов класса «Оптимизация рисков» с целью дальнейшего развития инструментов поддержки принятия решений по управлению пожарными рисками на территории производственных объектов.

Литература

1. С.В Гудин, Р.Ш. Хабибулин. Объектно-ориентированный подход при определении пожарных рисков на территории производственных объектов // Материалы двадцать третьей международной научно-технической конференции "Системы безопасности - 2014". М.: Академия ГПС МЧС России, 2014. - С. 20-22.

2. Хабибулин Р.Ш. Разработка объектно-ориентированных информационных систем в области предупреждения и ликвидации чрезвычайных ситуаций // Инновации в образовательном процессе: сб. трудов науч.-практ. конф. - Вып. 13. - Чебоксары: ЧПИ, 2015. - С. 64-66.

3. Силич В.А., Силич М.П. Проектирование сложной системы на основе объектно-ориентированного подхода / Известия Томского политехнического университета, 2003. Т. 306, № 2.С. 99-103.

4. Гудин, С.В. Структура интеллектуальной системы поддержки принятия решений на базе исследовательской платформы FireRisks [Текст] / С.В Гудин, РШ. Хабибулин // Материалы школы-семинара молодых ученых " Фундаментальные проблемы системной безопасности". -Елец, 2014. -С. 206-208.

5. С.В Гудин, Р.Ш. Хабибулин. Структура классов в объектно-ориентированном подходе к управлению пожарными рисками на территории производственных объектов // Материалы двадцать четвертой международной научно-технической конференции "Системы безопасности - 2015". М.: Академия ГПС МЧС России, 2015. - С. 184-186.

УДК 004.432.2, 004.042

РАСШИРЕНИЕ ФУНКЦИОНАЛА DATAFLOW-СИСТЕМЫ ИМПЕРАТИВНОЙ

ПАРАДИГМОЙ ВЫЧИСЛЕНИЙ

Салибекян Сергей Михайлович, к.т.н., доцент Национального исследовательского университета «Высшая школа экономики», Московский институт электроники и математики, Россия, Москва,

salibek@yandex.ru

Белоусов Алексей Юрьевич, студент, Московский государственный университет технологий и управления имени Г.К. Разумовского, Россия, Москва, 3ret@rambler.ru

Уже долгое время идет работы в области объектно-атрибутной (ОА) архитектуры вычислительной системы (ВС). Архитектура относится к классу dataflow - управление вычислениями с помощью потока данных, - что обеспечивает самораспараллеливание вычислений. Еще одним свойством ОА-ВС является возможность создания и обработки семантической сети, способной моделировать сложные системы, а также обеспечивать объектный принцип программирования ВС, т.к. в семантическую сеть можно добавлять фрагменты программы [1]. Для ОА-ВС был разработан специализированный язык программирования (ОА-язык), с помощью которого можно как управлять функциональными устройствами (ФУ), производящими вычисления, так и описывать фрагменты семантической сети. Однако слабой стороной ОА-ВС оставалась организация последовательных вычислений: последовательные алгоритмы на ОА-языке записывались весьма громоздко. Причина тому - достаточно прецизионное описание вычислительного процесса, т.к. описывается пересылка каждого операнда и существует необходимость начальной инициализации ФУ-в, что занимает достаточно большой объем программного кода. На рис. 1 представлена программа генерации последовательности чисел Фибоначчи на языке Си и ОА-

66

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

ОА-язык

NewFU=(Mnemo= "ALU* FUType=FUlntAlu} ft Счетчик итераций

MewF U  (Mnemo= "AL U_F i b" FUType=FUI ntAlu} ft Предыдущее число NewFU=(Mnemo="ALU_Fib2r FUType=FUInlAlu}\\ Предыдущее число

ALU_Flb Set=l V\ Установить первое число последовательности ALU_FIУстановить второе число последовательности AL U Set=10 \\ Установить число итераций

ALU BlgQaPrajStiH \\vbianM*iib ссылку на ннппипрогрэмму.

tt S3 Пускаемую При установи? флага «больше* ALU_Fih2 POpMk=ALU_Fiti Add\\ вычислить следующее число ALU_Ftb.PopMk=Console Outtt Вывести текущий член посл-тп A LU_Fi b .Pop=temp tt Выдать текущий член последовательности ALU_Fib2 PiipMK=ALU_Fiti &et\\ Запомнить предыдущий член лоел ти ALU_Fib2 Set^temptO^W Запомнить текущий член пяспедоеэтепьности ALU ЙиЬ=1 Уменьшить СЧёТЧн* иТйрЭЦИЙ № единицу

)

ALU Sub=01Д Запуск вычислительного процесса (установить флаги) Рис. 1 - Программа генерации последовательности чисел Фибоначчи на языке Си и ОА-языке

Решением проблемы стало расширение ОА-ВС возможностью работать в императивном (последовательном - control-flow) стиле, т.е. было решено сделать ОА-ВС мультипарадигменной. Однако задача совмещения dataflow и control-flow (управлением вычислениями с помощью потока команд) парадигм не представляется тривиальной ввиду их кардинального различия в принципах организации вычислительного процесса. Однако в истории вычислительной техники встречались подобные мультипарадигменные архитектуры ВС и языки программирования: мультитредовые ВС [2], язык программирования DCF [3] и т.д. Поэтому было принято решение о расширении ОА-ВС и ОА-языка императивной парадигмой.

Для достижения поставленной цели было необходимо решить несколько взаимосвязанных задач: совершенствование архитектуры ОА-ВС; добавление в ОА-язык синтаксических конструкций, описывающих императивный вычислительный процесс; доработка компилятора ОА-языка [4]. Теоретические наработки в данной области реализовывались путем расширения функционала ОА-среды программирования и моделирования, позволяющей создавать виртуальную копию ОА-ВС, производить имитационное моделирование вычислительного процесса на ней. В состав ОА-среды входит компилятор ОА-языка, а также различные инструментальные средства для облегчения труда программиста. Среда является «экспериментальной площадкой» для отработки различных технических решений в области ОА-архитектуры. Работа по расширению функционала ОА-среды была разделена на этапы: 1) разработка архитектурного решения проблемы, 2) программная реализация архитектурного решения, 3) разработка синтаксических конструкций ОА-языка для описания последовательных вычислений, 4) расширение функционала ОА-языка, т.е. доработка ОА-компилятора.

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

Язык Си

in! ajbj;

«-1;

b-2:

(

pnnlf(H%d -.a), swapfa.b};

(thread), в который входит виртуальный программный счетчик. Т.к. любое ФУ управляется с помощью милликоманд, то и программа для такого ФУ представляет собой последовательность милликоманд, объединенную в информационную капсулу (ИК). Милликоманда - это совокупность операнда и атрибута, идентифицирующего операнд, которая поступает на ФУ. ФУ должно обеспечивать выполенние минимального набора программных конструкций, необходимых для организации последовательных вычислений. Данные конструкции были взяты из структурного программирования, разработанного Эдсгером Дейкстрой [5]: последовательность команд, условное ветвление, цикл с предусловием и постусловием, множественный выбор. Однако любое устройство, реализующее вычислительную нить, кроме устройства управления включает в себя и арифметико-логическое устройство (АЛУ). Например, условные переходы осуществляются исходя из значений флагов, устанавливаемых по результатам вычислений. Поэтому наделим разрабатываемый тип ФУ функционалом по вычислению арифметико-логических выражений и назовем его ФУ АЛУ.

Для реализации такого функционала ФУ должен содержать следующие внутренние регистры: Accumulator - хранит текущие результаты вычислений; ThenProg и ElseProg -указатели на программы, запускаемые при выполнении или невыполнения логического условия, Switch - указатель на список альтернатив оператора множественного выбора, CycleMode - режим цикла (0 - без цикла, 1 - цикл с предусловием, 2 - цикл с постусловием); ProgramCounter (PC) - программный счетчик (адрес выполняемой милликоманды). ФУ управляется с помощью милликоманд; перечислим некоторые из них:

1. установить тип цикла - CycleModeSet;

2. установить ссылку на список альтернатив множественного ветвления - SwitchSet;

3. установить ссылку на ThenProg - ThenProgSet;

4. установить ссылку на ElseProg - ElseProgSet;

5. установить милликоманду для выдачи результата вычисления - MkOutSet;

6. установить Program counter (PC) (безусловный переход) - PCSet;

7. совершить условный переход - If (если в нагрузке милликоманды находится true, то в PC записывается адрес из ThenProg, иначе - из ElseProg); с милликомандой также может передаваться указатель на ИК, содержащую последовательность милликоманд для вычисления логического выражения, по результату которого производится переход;

8. начать выполнение программы - Run.

Функциональная схема ФУ АЛУ представлена на рис. 2.

Рис. 2 - ФУ Арифметико-логическое устройство

Например, для того, чтобы организовать цикл с предусловием необходимо выполнить следующую ОА-программу:

ALU.Run= // Запустить программу на выполнение

{

ALU.ElseProgSet=nil ALU.ThenProgSet=[тело цикла] ALU.CycleModeSet=1

ALU.If =[логическое выражение] // установить условие // и начать выполнение цикла

}

Здесь ALU - имя ФУ, после точки приводится мнемоника милликоманды, после «=» помещается операнд (константа или ссылка), передаваемый ФУ. Однако программисту не потребуется писать подобные ОА-программмы, т.к. все всю работу по генерации последовательности милликоманд для ФУ АЛУ из последовательности императивных (последовательных) команд, включенных в ОА-программу, берет на себя компилятор ОА-языка.

За основу синтаксиса языковых конструкций последовательного программирования был взят язык Си по причине, во-первых, его удобства и компактности; во-вторых, распространенности. Было решено реализовать в ОА-языке операторы if, switch; break; continue; циклы for, while, do - while. Ранее в компиляторе были реализованы арифметические выражения, записанные в Си-подобном синтаксисе. Программный блок (группа последовательных команд) в ОА-языке, как и в Си, выделяется с помощью фигурных скобок. Внутри фигурных скобок располагаются обозначения как Си-подобных инструкций, так и милликоманд. По сути, последовательный участок кода представляет собой ИК, содержащую последовательность милликоманд, - ОА-компилятор преобразует классические команды в несколько милликоманд, управляющих ФУ АЛУ. Например, мультипарадигменная ОА-программа может выглядеть так:

for

if(i<5) {

Console.LnOut="---"

};

else {

ALU.Add=2;

ALU.PopMk=Console.LnOut }

Для удобства программирования в императивную часть синтаксиса ОА-языка были внесены следующие дополнения. Во-первых, был существенно расширен функционал команды switch: в качестве выбора добавились интервалы непрерывных величин, а также ИК. Во втором случае альтернативная ветвь выполняется, если в ИК, описывающем условие запуска соответствующей вычислительной ветви, находятся ИП, полностью совпадающие с ИП из ИК, играющей роль условия. ОА программа с применением оператора switch, например, может выглядеть так:

switch

{

case 0.5..1.5, 2.1..2.5:

Cons.LnOut="Between 0.5 and 1.5, Between 2.1 and 2.5";

break;

case > 2.5:

Cons.LnOut="Bigger 2.5"

}

switch

{

case {Atr=10 Var="Test"}:

Cons.LnOut="Test";

Break;

case {Var="Test2" Var="Test3"}:

Cons.LnOut="Test2, Test3"

}

где x - константа или переменная, IC - ссылка на ИК.

Семантическая сеть, синтезированная ОА-компилятором из программы (1), приведена на рис. 3. Как видно из рис. 3, программа в императивном стиле в ОА-системе не представляет собой линейную структуру. Дело в том, что программный блок оформляется в виде отдельной ИК, переходы же между блоками задаются с помощью ссылок - в результате получается семантическая сеть (ОА-граф) [6], вершинами которой являются ИК с последовательностями милликоманд для ФУ АЛУ. ИК с последовательными программами могут быть встроены в любую часть семантической сети и быть запущены, когда происходят какие-либо события. Запуск же такой последовательноти милликоманд осуществляется путем записи указателя на ИК в прогрммный счетчик (PC) ФУ АЛУ и запуска ФУ АЛУ.

_ п

ALU.CydeModeSet = 1 Й ALU.ThenProgSet ^ ALU.Inc =nil В ALU.BodyProgSet

ALU.CydeModeSet = О В ALU.ThenProgSet

Console. LnOut = — В ALU.ElseProgSet h ALU. Add = 2 :>— ALU.PopMk = 2130  ALU.Ifttun

L-ALU.Less = 5 В ALU.Ifkun

1 ALU.Less = 10

Рис. 3 - ОА-граф (семантическая сеть) последовательной программы

Таким образом, расширение функционала компилятора ОА-языка заключается в наделении его способностью транслировать императивные команды в последовательность милликоманд для ФУ АЛУ и встраивать его в семантическую сеть (ОА-граф). В составе ОА-ВС может присутствовать несколько параллельно работающих ФУ АЛУ, благодаря чему можно реализовать мультитредовую ВС [2]. Причем ФУ АЛУ работает по принципам ОА-архитектуры и поэтому органично вписывается в ОА-ВС. Еще одним преимуществом такого архитектурного решения является то, что ФУ АЛУ может синхронизироваться по принципам ёа1айо,^парадигмы вычислительного процесса, что значительно упрощает программирование параллельных ВС.

В итоге, императивная парадигма достаточно органично вписалась в ОА-ВС: она не нарушила основные принципы ОА-архитектуры, облегчила программирование последовательных фрагментов алгоритмов, не снизила параллелизим вычислений, минимальным образом изменила синтаксис ОА-языка, не нарушила объектный принцип работы ОА-ВС.

Литература

1. Салибекян С.М., Панфилов П.Б. ОА-архитектура - новый подход к созданию объектных систем // Объектные системы - 2011: материалы III Международной научно-практической конференции (Ростов-на-Дону 10-12 мая 2011 г.) / Под общ. ред. П.П. Олейника. - Ростов-на-Дону, 2011. - С. 73-79 URL: http://objectsystems.ru/files/Object Systems 2011 Proceedings.pdf

2. Jurij Silk, Borut Robic and Theo Ungerer «Asynchrony in parallel computing: From dataflow to multithreading» Institut Jozef Stefan, Technical Report CDS-97-4, September 1997.

3. Головков С.Л., Ефимкин К.Н. Реализация языка программирования для модели вычислений, основанной на принципе потока данных. Москва: ИПМ им. М.В.Келдыша РАН. 2002

4. Салибекян С.М., Панфилов П.Б. Анализ языка с помощью вычислительной системы объектно-атрибутной архитектуры. // Объектные системы - 2012: материал VI Международной научно-практической конференции (Ростов-на-Дону, 10-12 мая 2012 г.) / Под общ. ред. П.П. Олейника. - Ростов-на-Дону: ШИ ЮРГТУ (НПИ), 2012. - C. 31-37 URL: http://objectsystems.ru/files/2012/0bject_Systems_2012_Proceedings.pdf

5. Дал У., Дейкстра Э., Хоор К. Структурное программирование. М.: Мир, 1975. — 245 с.

6. Салибекян С.М., Белоусов А.Ю. Сетевая база данных, построенная по объектно-атрибутному принципу. // Объектные системы - 2014 (зимняя сессия): материал IX Международной научно-практической конференции (Ростов-на-Дону, 10-12 мая 2014 г.) / Под общ. ред. П.П. Олейника. - Ростов-на-Дону: ШИ (ф) ЮРГТУ (НПИ) им. М.И. Платова, 2014. с. 70-76 URL: http://objectsystems.ru/files/2014WS/0bject Systems 2014 Winter session Proceedings.pdf

УДК 681.3

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРЕДСТАВЛЕНИЕ МНОГОУРОВНЕВЫХ

СЕМАНТИЧЕСКИХ МОДЕЛЕЙ4

Грегер Сергей Эдуардович, Уральский федеральный университет имени первого Президента России

Б.Н.Ельцина, Нижнетагильский технологический институт (филиал), Факультет экономики и менеджмента, кафедра информационных технологий, доцент. Россия. Нижний Тагил,

segreger@gmail.com

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

В [1] предложили методологию разработки программного обеспечения, в дальнейшем отображенную в метамодели IS024744, в которой введены понятия power type и clabject. Целью предложенной методологии является: предоставление возможности построения множества классификационных уровней, объединенных в мультиуровневую модель. Основная проблема, решенная в представленной методологии, состояла в построении унифицированного и адаптируемого метода классификации элементов предметной области. Под унифицированием понимается возможность отображения всех моделей всех уровней

4 Лауреат номинации "Лучший доклад по UML-моделированию". Автор доклада награждается правом бесплатной публикации одного доклада по данной тематике на следующей конференции

71