Организация Grid-систем различного назначения является важным и практически значимым направлением научных исследований в области высокопроизводительных вычислений [1]. Сложность таких систем обусловлена их динамичностью и стохастичностью, наличием большого числа объектов различной природы и связей между ними, распределенностью этих объектов и избыточностью информационно-вычислительных ресурсов. В Grid-систему могут интегрироваться сложные предметно-ориентированные програм-мные комплексы. Для эффективного использования Grid-системы требуются развитые средства описания, хранения и обработки знаний о ее инфраструктуре, а также о процессах планирования и вычислений.
В данной статье рассматривается язык описания объектной модели экспериментальной Grid-системы, созданной на базе вычислительных ресурсов Суперкомпьютерного центра при Институте динамики систем и теории управления (ИДСТУ) СО РАН.
Представление знаний. В качестве модели Grid-системы используется объектно-ориентированная модель данных, обладающая рядом важных свойств, необходимых для представления знаний о Grid-системе. В частности, данная модель
- позволяет работать со сложноструктурированными данными, отражать их природу и связи между ними;
- моделирует многомерную структуру данных, с которой приложение в дальнейшем может работать напрямую (доступ, поиск или изменение данных), что увеличивает производительность системы по отношению к реляционной модели;
- обладает гибкими средствами модификации и развития;
- поддерживает комплексирование по данным (представление объектов Grid-системы в универсальном формате, позволяющем работать с ними различным предметно-ориентированным программным комплексам).
База знаний (БЗ) Grid-системы, реализованная на основе такой модели, обеспечивает целостность и безопасность информации в процессе извлечения объектов для совместного с другими пользователями доступа к ним и облегчает работу с объектно-ориентированными приложениями.
В состав базовых элементов модели Grid-системы входят множества классов C, объектов O, полей P и типов T. Приведем ее основные характеристики:
- главное понятие в модели – объект;
- полная идентификация объекта (без привязки к конкретной БЗ) состоит из объекта и имени его типа;
- объект состоит из набора полей, задаваемых классом объекта;
- в качестве поля могут выступать значение какого-либо типа (например, строка или число), ссылка на объект определенного класса или символ неопределенности;
- каждому классу cÎC соответствуют множество его объектов ocÎO и список его полей pcÎP;
- ссылки на объекты являются значениями специального типа, они служат для доступа к объектам, на которые ссылаются;
- ссылки создаются одновременно с объектами, на которые они ссылаются впоследствии;
- различаются два вида ссылок на объект: простые ссылки, указывающие на один объект, и так называемые множественные ссылки, указывающие сразу на несколько объектов;
- внешнее значение ссылки представляется как имя (или имена) указываемого объекта (или объектов);
- с помощью аппарата ссылок реализуются следующие виды отношений между объектами: «один-к-одному», «многие-к-одному», «один-ко-многим» и «многие-ко-многим»;
- специальное поле в объекте отводится для хранения имени объекта;
- множественные виды отношений (все из перечисленных выше, кроме «один-к-одному») строятся на основе списков;
- списки являются объектами специального класса и служат для объединения совокупности объектов и получения возможности ссылки ко всем этим объектам как к единому целому;
- списки имеют специальное поле, в котором хранится длина списка;
- вновь вводимые классы могут наследовать свойства имеющихся классов;
- возможные изменения модели данных определяются фиксированным набором базовых операторов;
- базовые операторы можно объединять в составной оператор, причем один составной оператор может быть частью другого;
- типы и некоторые классы изначально встроены в модель данных;
- смысловая нагрузка класса объектов находит свое отражение через указание возможности участия объектов данного класса в качестве параметров определенных операторов (базовых или составных) с пояснением роли их участия (входные, выходные);
- знания предметного специалиста об условиях применения объекта того или иного класса в процессе вычислений представляются в виде набора продукций, которые являются и объектами определенного класса модели.
Введем вспомогательные элементы модели: символ неопределенности θ, который используется при создании объекта, выступая в роли значения полей до их инициализации; функцию g:O®C, ставящую в соответствие объекту некоторый класс; функцию q: P®CÈTÈ{θ}: " pÎP
Состояние модели Grid-системы задается в виде структуры s=.
Язык описания модели. Рассматриваемый язык представления знаний о Grid-системе включает синтаксические конструкции вида: <Имя базового оператора> (<Параметр 1> [, <Параметр 2>, …, <Параметр n>]).
Данный язык позволяет представить любые действия с моделью Grid-системы как последовательность базовых операторов. В результате выполнения базового оператора происходит переход из исходного состояния модели s= в результирующее s¢=.
На выполнение базовых операторов могут быть наложены ограничения двух видов: встроенные в транслятор языка описания модели Grid-системы и дополнительные, определяемые разработчиком модели. К первому виду относятся блокировки дублирования и уничтожения классов или объектов, проверка соответствия типов и другие подобные ограничения целостности модели. Ограничения второго вида определяют специфику объектов модели и взаимосвязей между ними. Они формируются разработчиком с помощью специальной подсистемы транслятора.
Свойства модели (полнота, корректность и целостность) выявляются в процессе трансляции ее описания.
В качестве примера рассмотрим описание фрагмента вычислительной модели распределенного пакета прикладных программ по линейной алгебре. Основными объектами этой модели являются множество параметров Z, множество операций F, множество программных модулей M, реализующих операции из F, и множество вычислительных узлов Grid-системы N.
В таблице 1 приведены примеры создания классов этих объектов.
Таблица 1
Базовый оператор
|
Описание
|
Ограни- чения
|
newClass(Prm);
|
Создание класса Prm (класс параметров)
|
PrmÏC
|
newField(Prm, name, String);
|
Создание поля name (полное имя параметра) в классе Prm. String – предопределенный тип
|
nameÏPPrm; StringÎT; PrmÎC
|
newField(Prm, value, Link(Object));
|
Создание поля value (значение параметра). Значением поля value является ссылка на объект класса Object
|
valueÏPPrm; Object, PrmÎC
|
newClass(Mdl);
|
Создание класса Mdl (класс модулей)
|
MdlÏC
|
newField(Mdl, name, String);
|
Создание поля name (полное имя параметра) в классе Mdl
|
nameÏPMdl;
StringÎT; MdlÎC
|
newClass(Opr);
|
Создание класса Opr (класс операций)
|
OprÏC
|
newField(Opr, name, String);
|
Создание поля name (полное имя операции) в классе Opr
|
nameÏPOpr; StringÎT; OprÎC
|
newField(Opr, module, Link(Mdl));
|
Создание поля module (ссылка на програм-мный модуль, реализующий данную операцию) в классе Opr
|
moduleÏPOpr; Mdl, OprÎC
|
newField(Opr, input, Link(Array(Prm, null)));
|
Создание поля input (входные параметры операции) как ссылки на список объектов класса Prm
|
inputÏPOpr; Opr, PrmÎC
|
newField(Opr, output, Link(Array(Prm, null)));
|
Создание поля output (выходные параметры операции)
|
outputÏPOpr;
Opr, PrmÎC
|
newClass(Node);
|
Создание класса Node (класс вычислительных узлов)
|
NodeÏC
|
newField(Node, id, String);
|
Создание поля id (уникальный идентификатор вычислительного узла) в классе Node
|
idÏPNode;
StringÎT; NodeÎC
|
newField(Node, modules, Link(Array(Mdl)));
|
Создание поля modules (модули, установленные на узле) как ссылки на список объектов класса Mdl
|
modulesÏPNode;
Mdl, NodeÎC
|
На основе созданных классов формируются объекты модели. В таблице 2 приводится описание операции масштабирования матриц при вычислении ее собственных значений и векторов.
Таблица 2
Базовый оператор
|
Описание
|
Ограничения
|
newObject(n, Prm);
|
Создание объекта n (порядок матрицы) класса Prm
|
PrmÎC; nÏO
|
newObject(b, Prm);
|
Создание объекта b (основание системы счисления в машине с плавающей запятой) класса Prm
|
PrmÎC; bÏO
|
newObject(a, Prm);
|
Создание объекта a (исходная матрица) класса Prm
|
PrmÎC; aÏO
|
newObject(low, Prm);
|
Создание объекта low (параметр операции balance) класса Prm
|
PrmÎC; lowÏO
|
newObject(hi, Prm);
|
Создание объекта hi (параметр операции balance) класса Prm
|
PrmÎC; hiÏO
|
newObject(d, Prm);
|
Создание объекта d (вектор, содержащий информацию о перестановках и масштабных коэффициентах) класса Prm
|
PrmÎC; cÏO
|
newObject(arr1, Array(Prm, 3));
|
Создание списка из трех объектов класса Prm (входные параметры операции масштабирования)
|
PrmÎC; arr1ÏO
|
newObject(arr2, Array(Prm, 4));
|
Создание списка из четырех объектов класса Prm (выходные параметры операции масштабирования)
|
PrmÎC; arr2ÏO
|
initObject(arr1[0], n);
|
Инициализация элемента списка arr1
|
arr1, nÎO; arr1.length>0
|
initObject(arr1[1], b);
|
Инициализация элемента списка arr1
|
arr1, bÎO; arr1.length>1
|
initObject(arr1[2], a);
|
Инициализация элемента списка arr1
|
arr1, aÎO; arr1.length>2
|
initObject(arr2[0], a);
|
Инициализация элемента списка arr2
|
arr2, aÎO; arr2.length>0
|
initObject(arr2[1], low);
|
Инициализация элемента списка arr2
|
arr2, lowÎO; arr2.length>1
|
initObject(arr2[2], hi);
|
Инициализация элемента списка arr2
|
arr2, hiÎO; arr2.length>2
|
initObject(arr2[3], d);
|
Инициализация элемента списка arr2
|
arr2, dÎO; arr2.length>3
|
newObject(m, Mdl);
|
Создание объекта m (модуль, реализующий операцию масштабирования) класса Mdl
|
MdlÎC; mÏO
|
newObject(bln, Opr);
|
Создание объекта bln (операция масштабирования) класса Opr
|
OprÎC; blnÏO
|
initField(bln, name, «Balance»);
|
Инициализация поля name. Balance – значение типа String
|
blnÎO; StringÎT; nameÎPc; где c=g(bln), q(name)=String
|
initField(bln, module, m);
|
Инициализация поля module
|
bln,mÎO; moduleÎPc, где c=g(bln), q(module)=g(m)
|
initField(bln, input, Link(arr1));
|
Инициализация поля input
|
bln, arr1ÎO; q(input)=g(arr1); inputÎPc, где c=g(bln)
|
initField(bln, output, Link(arr2));
|
Инициализация поля output
|
bln, arr2ÎO; q(output)= =g(arr2); outputÎPc, где c=g(bln)
|
Масштабирование матрицы применяется для понижения ее нормы с целью упрощения процесса нахождения собственных значений матрицы. Схема операции масштабирования имеет следующий вид: balance: {n, b, a}→{a, low, hi, d}. Обозначения взяты из работы [2]. Как видно из примера, связи между объектами возникают при инициализации полей. В данном случае список параметров связан с операцией масштабирования через поля input и output. Описание узлов Grid-системы приведено в таблице 3.
Таблица 3
Базовый оператор
|
Описание
|
Ограничения
|
newObject(r1, Node);
|
Создание объекта r1 (узел РВС) класса Node
|
NodeÎC; r1ÏO
|
…
|
…
|
…
|
newObject(rN, Node);
|
Создание объекта rN (узел РВС) класса Node
|
NodeÎC; rNÏO
|
newObject(arr3, Array(Mdl,1));
|
Создание списка из одного объекта класса Mdl (список модулей, установленных на узлах)
|
NodeÎC; arrÏO
|
initObject(arr[0], m);
|
Инициализация элемента списка arr (в список установленных модулей заносится модуль m)
|
arr, mÎO; arr.length>0
|
initField(r1, modules, Link(arr));
|
Инициализация поля modules (установка модулей arr на узел r1)
|
arr, r1ÎO;
q(modules)= =g(arr);
modulesÎPc, где c=g(r1)
|
…
|
…
|
…
|
initField(rN, modules, Link(arr));
|
Инициализация поля modules (установка модулей arr на узел rN)
|
arr, rNÎO; q(modules)= =g(arr);
modulesÎPc, где c=g(rN)
|
Планирование загрузки ресурсов становится необходимым при возникновении избыточности ресурсов Grid-системы в случае, когда существует программный модуль, размещенный в двух или более вычислительных узлах (табл. 3).
База знаний. В качестве основы БЗ экспериментальной Grid-системы ИДСТУ СО РАН используется объектно-ориентированная БД (ООБД) NeoDatis [3], дополненная управляющей надстройкой – мультиагентной системой планирования и распределения ресурсов [4].
В целом характеристики БД NeoDatis соответствуют основным положениям стандарта ODMG (Object Database Management Group) [5] и тем самым обеспечивают возможность ее интеграции с различными предметно-ориентированными комплексами, функционирующими в Grid-системе.
Схематично процесс создания БЗ показан на рисунке. Описание предметной области, объектов и ресурсов Grid-системы на входном языке транслируется в текст описания на языке Java. Стандартный Java-компилятор, используя библиотеки Java-классов (JDK), классов взаимодействия с ООБД (драйвер) и классов модели Grid-системы, компилирует текст на языке Java в исполняемый байт-код. При исполнении байт-кода Java-интерпретатором (Java Virtual Machine) создается БД, которая вместе с подсистемой логического вывода, интерпретирующей правила вывода данных, образует БЗ Grid-системы.
Рассмотренные в данной работе язык и средства его трансляции дают возможность конструировать предметно-ориентированные модели вычислений, включать в них требуемые ограничения и контролировать полноту, корректность и целостность атрибутов и взаимосвязей объектов разрабатываемых моделей. Такие модели обеспечивают детализированное описание инфраструктуры разнородных распределенных вычислительных сред, предоставляя возможность эффективно использовать ресурсы этих сред при решении сложных научных и прикладных задач.
Литература
1. Baker M., Buyya R., Laforenza D. Grids and Grid Technologies for Wide-Area Distributed Computing // Software: Practice and Experience. 2002. Vol. 32. No. 15, pp. 1437–1466.
2. Уилкинсон, Райнш. Справочник алгоритмов на языке АЛГОЛ. Линейная алгебра. М.: Машиностроение, 1976. 389 с.
3. NeoDatis. URL: http://neodatis.wikidot.com (дата обращения: 17.10.2011).
4. Джордан Д. Обработка объектных баз данных в С++. Программирование по стандарту ODMG. М.: Издат. дом «Вильямс», 2001. 384 с.
5. Децентрализованное управление потоками заданий в интегрированной кластерной системе / И.В. Бычков [и др.] // Вестн. НГУ. Сер. Информационные технологии. 2011. Т. 9. Вып. 2. С. 42–54.