Вычислительная подсистема
Вычислительная подсистема - логическое объединение различных подсистем предметных областей в единую структурную единицу.
Подсистема предметной области - программно-аппаратно решение, которое реализует моделирование физического поля на собственных вычислительных мощностях, с использованием собственной программной реализации, заданной для конкретной предметной области, но с использованием правил и инструментов, которые предоставляются подсистемой управления.
В этом контексте подсистемой предметной области D будем называть реализацию подсистемы для предметной области D, где D - имя предметной области, например: подсистема предметной области "Архитектурная акустика".
С другой стороны, экземпляром N предметной области D будем называть реализацию подсистемы с именем N, под которым этот экземпляр зарегистрирован в подсистеме управления - поставщиком подсистемы предметной области. Экземпляр подсистемы предметной области реализуется в виде внутрипроцессного или TCP сервера с интерфейсом IDomainSystem, принимающего запросы от подсистемы управления на запуск/остановку/завершение моделирования с заданными входными параметрами, а также на получение результатов моделирования и информации о статусе. Адрес сервера (путь к разделяемой библиотеке или адрес плюс порт) задаются в подсистеме управления при регистрации подсистемы предметной области.
Реализация IDomainSystem включает в себя реализацию узла с интерфейсом INode, выполняющего определенный в предметной области компонент параллельного выполнения, который выделен для распределения средствами глобального балансировщика нагрузки. Структурно узел INode также реализуется как компонент, работающий в адресном пространстве подсистемы предметной области, либо как выделенный TCP сервер. При запуске моделирования с помощью метода IDomainSystem::StartSimulation экземпляр подсистемы предметной области может зарегистрировать узлы в выделенном для этого экземпляра глобальном балансировщике нагрузки.
Между предметно-независимой подсистемой и экземплярами предметных областей проходит граница между реализациями, за которые ответственны возможно разные разработчики - поставщик предметно-независимых сервисов и поставщик подсистемы предметной области. Реализация экземпляра подсистемы предметной области, выполняемая последним, использует один из трех интерфейсов предметно-независимой подсистемы.
- Поставщик подсистемы предметной области предоставляет разделяемую библиотеку DLL/SO, имеющую C-интерфейс GetDomainSystem, который используется для получения доступа к подсистеме предметной области через программный интерфейс IDomainSystem. В этом случае предметно-независимая подсистема, в зависимости от своей внутрипроцессной и распределенной конфигурации, включает библиотеку в свое адресное пространство или в адресное пространство реализованного независимо от предметной области прокси сервера, обеспечивающего коммуникацию с удаленной подсистемой управления. Для распределенной конфигурации реализация экземпляра предметной области также должна поддерживать (см. IDomainSystem::RepresentAs) интерфейс ITCPDomainSystem.
- Только для распределенной конфигурации Поставщик подсистемы предметной области реализует собственный исполняемый модуль экземпляра подсистемы предметной области и осуществляет взаимодействие с предметно-независимой подсистемой с использованием компонент получаемой об предметно-независимой подсистемы библиотеки domain_shared - например, прокси.
- Только для распределенной конфигурации Поставщик подсистемы предметной области реализует собственный исполняемый модуль экземпляра подсистемы предметной области с собственной реализацией обработки запросов от подсистемы управления.

В распределенной конфигурации узел, доступ к которому осуществляется со стороны предметно-независимого балансировщика нагрузки, имеет аналогичный интерфейс, с C-функцией GetNode, создающей экземпляр реализации программного интерфейса INode. Этот экземпляр преобразуем с помощью INode::RepresentAs к типу ITCPNode.
Ниже перечислены компоненты интерфейсов, используемых подсистемой управления и подсистемами предметных областей для коммуникации.
Полиморфные программные интерфейсы
Функции C
TCP запросы
Интерфейс узла, реализованного как внутрипроцессный сервер
Точка входа
Точкой входа в библиотеку является статическая функция с C связыванием GetDomainSystem, инициализирующая узел и возвращающая его программную реализацию в виде интерфейса IDomainSystem.
Набор интерфейсных компонентов и интерфейсов
Интерфейсы, реализуемые подсистемой управления | |
---|---|
ILoadBalancer | Программный интерфейс, предоставляемый подсистемой управления для подсистемы предметной области. Предоставляет методы для регистрации задачи, которая должна быть выполнена как элемент параллельных вычислений, а также для регистрации свободного узла INode. |
IControlSystem | Базовый интерфейс подсистемы управления. |
IControlSystemDomainSide | Интерфейс, предоставляемый подсистеме предметной области, для установки соединения с подсистемой управления, а также для получения доступа к ее балансировщикам нагрузки. |
IGeometryModel | Интерфейс геометрической модели среды моделируемого физического поля. |
IObject | Базовый интерфейс для всех элементов геометрической модели. |
IPlainObject | Секущая плоскость вывода результатов моделирования. |
ISourceObject | Интерфейс объекта-источника моделируемого поля. |
IPolyObject | Интерфейс объекта-полигонального элемента геометрической модели. |
IObjectCollection | Программный интерфейс коллекции объектов, составляющих геометрическую модель. |
IPlainCollection | Программный интерфейс коллекции секущих плоскостей вывода результатов моделирования. |
ISourceCollection | Программный интерфейс коллекции источников моделируемого физического поля. |
IPolyCollection | Программный интерфейс коллекции полигональных элементов геометрической модели. |
const_object_iterator, object_iterator | Компонент, реализующий двунаправленный итератор, для перечисления всех элементов, составляющих геометрическую модель, т.е. принадлежащих соответствующей коллекции IObjectCollection. |
const_plain_iterator, plain_iterator | Компонент, реализующий двунаправленный итератор, для перечисления плоскостей вывода результатов моделирования, т.е. объектов, реализующих интерфейс IPlainObject и принадлежащих коллекции IPlainCollection соответствующей геометрической модели. |
const_source_iterator, source_iterator | Компонент, реализующий двунаправленный итератор, для перечисления источников моделируемого поля, т.е. объектов, реализующих интерфейс ISourceObject и принадлежащих коллекции ISourceCollection соответствующей геометрической модели. |
const_poly_iterator, poly_iterator | Компонент, реализующий двунаправленный итератор, для перечисления полигональных элементов геометрической модели, т.е. объектов, реализующих интерфейс IPolyObject и принадлежащих коллекции IPolyCollection модели. |
POINT3DEXT | Трехкомпонентный вектор-столбец для описания координат точки в пространстве или радиус-вектора. |
SIZE3DEXT | Трехкомпонентный вектор-столбец для описания трехмерного размера в виде разницы двух координат по соответствующим осям x, y и z. |
FACE3DEXT | Класс полигональной поверхности, композиция которых составляет элемент IPolyObject. |
Интерфейсы, реализуемые подсистемой предметной области. | |
IDomainSystem | Основной программный интерфейс экземпляра подсистемы предметной области. |
INode | Программный интерфейс, реализуемый узлом подсистемы предметной области и предоставляющий подсистеме управления методы для управления вычислительной нагрузкой, которая подается на узел. Физически может быть ассоциирован с вычислительным кластером (для реализации с локальным балансировщиком) либо с потоком на логическом ядре центрального процессора. |
