В своей работе нашему коллективу приходится производить довольно много расчетов режимов работы систем сбора, в этом нам помогает программа PipeSIM. Количество таких расчетов со временем только росло и дошло до того что длительность некоторых превысила час рабочего времени, а это уже никуда не годится. Было принято решение, сократить время, затрачиваемое на вычисления и тем самым облегчить работу себе и коллегам.
Поиск решения
Пользователям симулятора PipeSIM известно, что свои вычисления он проводит одним потоком, используя один процессор/ядро ПК. Исхитрившись, разделив модели сети сбора на участки (отдельные модели промыслов, шлейфов), используя Open Link и запуская несколько экземпляров расчетчика в разных потоках можно нагрузить процессор ПК по максимуму. Расчет станет шустрей, но прирост производительности будет не линейный, дело в том, что во время расчета много (у меня доходило до 30%) времени тратится на завершение операций ввода вывода, это связано с тем, что расчетное ядро PipeSIM генерирует кучу файлов (.pst, .plt, .tnt, .rst, .sum, .out, .pns, .pnsx). Лечится, переносом расчетов на RAM диск (диск в памяти), для дополнительного ускорения на RAM диск можно перенести сам симулятор.
Но бывает, так что на всех не хватает не только мощных станций, но и даже лицензий на симулятор. Выход в переносе расчетов на вычислительный сервер, а в случае если ваше предприятие эксплуатирует больше одной лицензии, то и на вычислительный кластер.
Как это сделать
Сервер автоматизации Open Link предоставляет возможность изменять ограниченное количество параметров объектов модели, без доступа к функциям по «человеческому» созданию или удалению объектов сетевой модели. Из этого вытекает, что создание кластера на технологии Open Link потребует дополнительного хранения файлов моделей, организации их постоянного обновления, в случае же изменений схемы сбора или добавления новой скважины необходимо будет редактировать файл модели вручную, а значить постоянно, производить двойную работу. Кроме этого параллельный расчет одного шлейфа из-за особенностей организации расчетов в симуляторе PipeSIM потребует копирования его модели в разные каталоги расчетного сервера, что не добавит производительности, а значит это не наш метод, и мы пойдем другим путем.
Кто плотно работает с PipeSIM, знает, что Open Link и графический интерфейс PipeSIM - это надстройка над математическим расчетным ядром PipeSIM (pnetstub.exe, psimstub.exe) и у пользователя есть возможность обращаться к расчетному ядру напрямую, минуя дополнительные программные интерфейсы. Для каждого расчета мы будем должны генерировать engine files симулятора .pst и .tnt, это обычные текстовые файлы, описание их ключевых слов есть в мануале, работать с ними не сложнее чем с Open Link. Для генерации таких файлов необходимо иметь БД, где хранятся параметры, конструкция скважин и конструкция ГСС. Обычно у добывающей компании уже есть различные БД, содержащие необходимую информацию которые для использования их в качестве источников данных для вычислений требуют незначительного расширения. Сами результаты вычислений из выходных файлов (.plt, .sum, .out, .pns, .pnsx) можно считывать с помощью Open Link, для этого придется сохранять результаты расчета на диск, что, по-моему, не очень правильно, лучше самому в оперативной памяти обработать результаты расчета, не связываясь с Open Link.
Программно наш кластер будет состоять из следующих элементов
- сервис получения задачи и генерации моделей для расчетного ядра PipeSIM
- сервис распределения нагрузки
- сервис расчета моделей
Сервисы расчета моделей стоит расположить на высокопроизводительных серверах, ведь от этого будет завесить скорость расчета, а сервис генерации моделей поближе к источникам данных. При желании сервис получения задачи и распределения нагрузки можно объединить в один.
Как это работает
- Расчет начинается с того, что приложение клиент формирует запрос на сервис. В запросе указаны расчетные объекты и их параметры (пластовое давление, зажатие скважин, давление/расход на стоке и т.д.), параметры окружающей среды.
- После получения задачи сервис считывает из БД остальную необходимую информацию (состав газа, длины диаметры трубопроводов, инклинометрия скважин, характеристики изоляции, перепад высот, продуктивные характеристики и т.д) и формирует расчетные файлы (.tnt, .pst, .pvt) симулятора PipeSIM, эти файлы отсылаются на сервис распределения нагрузки.
- Далее сервис распределения нагрузки ставит задачу в очередь и передает файлы задачи по свободным расчетным сервисам.
- Расчетный сервис запускает полученные файлы на расчет в симуляторе PipeSIM, по окончанию расчета передает результаты расчета (файлы .pns, .pnsx, .plc, .plt.) на сервис распределения нагрузки.
- Сервис распределения нагрузки передает архивы файлов результатов расчета сервису получения задачи и генерации моделей
- И наконец, сервис считывает из файлов результаты расчета и формирует ответ, который по запросу передается клиенту, сервис переходит в режим ожидания задачи.
Результат
Кроме многократного увеличения скорости расчета результатом создания кластера будет еще ряд полезных эффектов:
- Пользователи не занимаются установкой и обновлением PipeSIM, клиента лицензии, RAM диска.
- Все модели хранятся в одном месте, и их обновление происходит одновременно с внесением данных (замеры ГДИС, изменение конструкции, фонда, телеметрия и т.д.) в эксплуатируемые БД.
- Снижение требований к клиентской рабочей станции, вычисления будут одинаково быстро проходить как, как на слабой, так и на высокопроизводительной станции.
- В выше описанной реализации кластера, возможно, проводить расчетов больше чем доступно лицензий на PS. Ни что не помешает при наличии даже одной лицензии ставить на расчет задачи хоть от 10 клиентов, в этом случае для разумного времени расчета главное, чтобы вычислительный узел был производительным. Учитывая то, что одна лицензия на PS стоит намного дороже, хорошего сервера, этот эффект очень приятен.
З.Ы. В нашей реализации кластера получено 10 - 26 кратное ускорение расчета.
Привет, WadiAra!
Очень впечетляет. На чём реализовывался сервис? Как организована пересылка входных файлов Пайпсима узлам расчётного кластера? Использовался ли MPI или вы реализовывали самостоятельно обмен данными и синхронизацию между узлами кластера? Сколько расчётных узлов содержит Ваш кластер и на сколько машин он распространяется в текущей реализации, где удалось добиться 10-26 -кратного ускорения сетевого расчёта?
Привет, karakurt2!
WCF Сериализация класса> архивация набора байт> отправка по tcp или http (в зависимости от настройки конфига) в текущей реализации 3 расчетных узла, на самом мощном расчетном ноде стоит сервер распределения нагрузки и получения задачи. На промыслах разное количество шлейфов и соответственно разное ускорение по сравнению с локальным расчетом единой модели этого промыслаНет, все сами сделали, через WCF.