УДК 544.412.3; 519.237.3
М. Н. Шишов*, Г. Ю. Аверчук, Э. М. Кольцова, Е. С. Куркина
Российский химико-технологический университет им. Д.И. Менделеева, Москва, Россия 125480, Москва, ул. Героев Панфиловцев, д. 20 * e-mail: [email protected]
ОПТИМИЗАЦИЯ ФУНКЦИИ СОХРАНЕНИЯ РАЗНОТИПНЫХ ДАННЫХ В ЗАДАЧЕ РАСЧЕТА МОДЕЛИ ПРОЦЕССА РОСТА КРИСТАЛЛА АЛМАЗА
Аннотация
С использованием шаблонов объектно-ориентированного проектирования оптимизирован код каркаса программы для выполнения структурно-атомарного моделирования процесса роста кристалла. Увеличено быстродействие вывода и визуализации полученной информации с помощью реструктуризации архитектуры приложения и переноса выполнения функции сохранения данных в отдельный поток выполнения. Добавлена возможность возобновления расчетов после непредвиденного завершения программы.
Ключевые слова: рост кристалла, оптимизация, шаблоны проектирования, декоратор.
Рост кристалла алмаза из газовой фазы методом CVD является сложным многостадийным процессом, включающим в себя несколько десятков элементарных реакций, в котором выделяют порядка сотни промежуточных углеродных атомарных структур [1]. Математическое моделирование играет важную роль в составлении кинетической схемы процесса, в выявлении механизмов формирования кристалла и влияния различных факторов на качество растущего алмаза. Наиболее полной и адекватной моделью является трехмерная микроскопическая стохастическая решеточная модель, реализуемая методом Монте-Карло [2]. Так как в процессе моделирования могут быть задействованы миллионы атомов, вывод рассчитанных данных довольно затратный. Для оптимизации процесса расчёта логично минимизировать накладные расходы вызванные выполнением большого количества операций ввода-вывода.
Одним из важнейших блоков программы является часть, связанная с визуализацией результатов моделирования. Отображение процесса роста кристалла в динамике позволяет выявить закономерности роста, а также воочию увидеть возникающие дефекты в кристаллической решетке. Это помогает понять роль отдельных стадий кинетической схемы и значимость каждой элементарной структуры. Для отображения состояний кристалла выходные данные сохраняются в популярные форматы: .MOL, .SDF и .XYZ. Помимо этого сохраняются интегральные характеристики процесса роста, такие как общее количество атомов в кристалле и концентрации атомов различных валентных состояний.
Перед сохранением состояния кристалла в один из популярных форматов необходимо сначала подготовить рассчитанные данные. Каждая запись в сохраняемом файле соответствует атому моделируемого кристалла или связи между атомами. Поэтому при подготовке данных производится построение таблиц соответствия сохраняемых записей атомам и связям. Каждый из используемых
форматов сохранения состояния кристалла использует собственный алгоритм построения таблиц соответствия, а так же непосредственно форму записей и порядок их сохранения. Для унификации этих алгоритмов целесообразно использовать известный шаблон проектирования MVC (модель-представление-контроллер) [3]. В этом случае моделью являются таблицы соответствия, представлением - форма записей и порядок их сохранения, а контроллер осуществляет трансформацию исходных данных в таблицы соответствия записям и передачу таблиц в процедуры сохранения записей по формату. Таким образом, унифицирован доступ к методам сохранения данных, что упрощает добавление новых поддерживаемых форматов.
behavior: tor
detector: all detector: surf detector: surf
Рис. 1. Вид YAML-файла
Еще одной модернизацией взаимодействия программы с пользователем стало добавление возможности задания начальных параметров процесса расчёта, и тонкой настройки частоты сохранения результатов в указанные форматы, с помощью YAML-файла. Это особый интуитивно понятный человеку язык разметки данных, поставляющийся с библиотеками для всех популярных языков программирования. Библиотека позволяет читать и сохранять данные в YAML-
формате. Новый конфигурационный YAML-файл содержит информацию о следующих параметрах системы: время роста, граничные условия, размер подложки, а также временных отрезках, через
которые будет проводиться вывод интегральных данных и состояний кристалла. Для каждого формата указывается интервал между сохранениями (рис. 1).
Queueltem
= dataQ: Data * + copy0- void + save(Env *): void
A
Soul
-_originalData: Data* - saving Data: Data * = nuilptr
= dataQ: Data * {return _savingData;} + copyQ: void {
_savingData = originalData.copyQ; } "
+ save(Env *): void {}
ItemWrapper
- „target: Queueltem *
- saver; Saver *
= dataQ: Data * {return _target->dataQ;} + copyO: void {_target->copyQ;} + save(Env *env): void { __target->save(env); ave r-> 5 ave (d ata 0, env);
}
Рис. 2. Зависимости между используемыми типами данных, согласно шаблону «декоратор»
-Save-
-Save-
-Save-
ш Ol
О1
User
ItemWrapper ItemWrapper
i L
ï
-Save-
Sou I
-Data-
-Data-
Data-
Рис. 3. Пример элемента очереди
Данные из этого файла считываются, и в соответствии с указанными форматами выходных файлов составляется объект, с помощью которого в дальнейшем будет производиться проверка на необходимость сохранения текущего состояния кристалла. Фактически, такой объект содержит список счётчиков, осуществляющих проверку на необходимость сохранения состояния в одном из заданных форматов. Каждый из таких счётчиков способен породить соответствующий объект типа ItemWrapper (рис. 2). Во время расчёта периодически осуществляется проверка на необходимость сохранения, путём создания объекта типа Soul с дальнейшей передачей его и текущего физического времени каждому счётчику. Объект типа Soul содержит указатель на участок памяти с текущим состоянием системы, а так же метод позволяющий скопировать это состояние в независимый участок памяти. Если счётчик определяет, что настала пора осуществить сохранение в соответствующий формат,
он оборачивает переданный в него объект. Обёрнутый объект передаётся далее по цепочке оставшимся счётчикам. Таким образом, исходный объект типа Soul может быть обёрнут несколько раз и, следовательно, содержать несколько операций сохранения в различные форматы (рис. 3), в соответствии с шаблоном объектно-ориентированного проектирования «декоратор» [3]. Если исходный объект был обёрнут хотя бы раз, у результирующего объекта вызывается метод, копирующий текущее состояние системы в новый участок памяти. После чего, обёрнутый объект помещается в очередь на сохранение, и основной поток, моделирующий эволюцию системы, продолжает своё выполнение. Отдельный программный поток проверяет состояние очереди на сохранение и если очередь не пуста, берёт первый элемент и вызывает для него процедуру сохранения. При выполнении процедуры, осуществляется вывод на экран или запись скопированного состояния в
файлы в заданных форматах. По завершению процедуры сохранения для первого элемента очереди, поток проверяет остаток очереди. Если очередь пуста, поток переходит в состояние ожидания до тех пор, пока в очереди снова не появится новый элемент, готовый к сохранению. Таким образом, за счет выноса процессов сохранения в отдельный поток нагрузка распределяется на несколько ядер процессора компьютера. Такое распределение позволяет более полно и рационально использовать ресурсы ЭВМ, за счет чего уменьшается время, требуемое для расчета
[4].
Процесс расчета роста кристалла методом Монте-Карло является достаточно трудоемким и занимает большое количество времени. Для того чтобы застраховаться от возможных перебоев питания в результате которых могут быть утеряны ценные расчетные данные, требуется механизм,
позволяющий продолжить расчет в случае прерывания работы программы. Для этого был разработан формат данных .DUMP. Он является наиболее полным снимком текущего состояния кристаллической решетки, сохраняющим все ее свойства в определенные моменты времени. Этот формат в бинарном виде хранит размер кристалла по всем размерностям, характеристики атома и связи. Атом характеризуется следующими свойствами: координаты, тип атома, количество связей с углеродами и водородами и уникальный номер. Связь обозначается двумя уникальными номерами атомов. Файл формата .DUMP имеет исчерпывающее количество информации необходимой для продолжения расчёта с последней точки сохранения.
Работа выполнена при частичной поддержке гранта РФФИ № 14-07-00960.
Шишов Максим Николаевич, студент 4 курса факультета Информационных технологий и управления РХТУ им. Д. И. Менделеева, Россия, Москва.
Аверчук Глеб Юрьевич, ведущий программист кафедры Информационных компьютерных технологий РХТУ им. Д. И. Менделеева, Россия, Москва.
Кольцова Элеонора Моисеевна, д.т.н., профессор, заведующая кафедрой Информационных компьютерных технологий РХТУ им. Д. И. Менделеева, Россия, Москва.
Куркина Елена Сергеевна, д.ф-м.н., профессор кафедры Информационных компьютерных технологий РХТУ им. Д. И. Менделеева, Россия, Москва.
Литература
1. Предметно-ориентированный язык для анализа процесса роста кристалла на атомарном уровне / Аверчук Г. Ю. [и др.]. - Успехи в химии и химической технологии: сб. науч. тр. - Т. 28, № 1 (150). - М.: РХТУ им. Д. И. Менделеева, 2014. - С. 78-81.
2. Аверчук Г. Ю. Интегральная модель роста алмазной плёнки / Г. Ю. Аверчук, Е. С. Куркина, Ш. Ю. Мустафаев. - Успехи в химии и химической технологии: сб. науч. тр. - Т. 28, № 1 (150). - М.: РХТУ им. Д. И. Менделеева, 2014. - С. 86-89.
3. Приёмы объектно-ориентированного проектирования. Паттерны проектирования / Гамма Э. [и др.]. - СПб.: Питер, 2011. - 368 с.
4. Уильямс Э. Параллельное программирование на C++ в действии. Практика разработки многопоточных программ. - ДМК Пресс, 2014. - 672 с.
ShishovMaksim Nicolaevich*, Averchuk Gleb Yurievich, KoltsovaEleonoraMoiseevna, Kurkina Elena Sergeevna
D. Mendeleev University of Chemical Technology of Russia, Moscow, Russia. *e-mail: [email protected]
OPTIMIZATION OF PROGRAM CODE FOR CALCULATIONS OF THE MICROSCOPIC LATTICE MODEL OF DIAMOND CRYSTAL GROWTH
Abstract
Using generic programming technique the framework program code was optimized to carry out structural and atomic modeling of the crystal growth. It was increased speed of the output and visualization of the obtained information via restructuring application architecture and transfer output data stream to a separated block. There was also increased the efficiency of the Monte Carlo method by adding the complex structure of the container to increase the speed of access to data stored therein. It was added the possibility to resume and continue the calculation after the sudden shutdown of the program.
Key words: lattice model, the crystal growth, Monte-Carlo simulations, code optimization, design pattern, Builder, MVC, Saver.