Применение библиотеки boost. Compute для моделирования электростатического поля методом случайного блуждания

определяется в каждом конкретном случае отдельно. Здесь представлен простой способ, завершающий эволюцию, когда в целом популяция перестает изменяться с допуском по определенной погрешности.

Заключение

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

На основе рассмотренного архитектурного подхода планируется разработка библиотеки, включающей в себя множество различных стратегий и подходов, используемых при построении генетических алгоритмов. А также предполагается внедрение различных видов генотипов для представления большего спектра объектов оптимизации. В данной библиотеке подразумевается простое внедрение пользовательских реализаций (правил, генотипов) в базовый алгоритм, и их комбинирование с библиотечными стратегиями. На данный момент реализована небольшая часть запланированных стратегий и представлений генов.

Литература

1. Haupt, Randy L. Practical genetic algorithms / Randy L. Haupt, Sue Ellen Haupt. - 2nd ed. -Hoboken: Wiley Interscience, 2004. - 253 p.

2. Гладков Л. А. Генетические алгоритмы / Л. А. Гладков, В. В. Курейчик, В. М. Курейчик; ред. В. М. Курейчика. - 2-е изд., испр. и доп. - М.: ФИЗМАТЛИТ, 2006. - 320 с.

3. Aforge.NET Framework [Электронный ресурс]. - Режим доступа: http : //www .aforgenet.com/ (14.12.2016).

4. The Genetic Algorithm Framework for .Net [Электронный ресурс]. - Режим доступа: https://johnnewcombe.net/ (14.12.2016).

5. Mitchell M. An Introduction to Genetic Algorithms / M. Mitchell. - Cambridge: MIT Press, 1999 -158 p.

6. Смит, Джейсон Мак-Колм, Элементарные шаблоны проектирования / Джейсон Мак-Колм Смит - пер. с англ. - М: Вильямс, 2013. - 304 с.

7. Troelsen, Andrew, C# 6.0 and the .NET 4.6 Framework / Andrew Troelsen, Philip Japikse - 7th ed. - New York: Apress, 2015. - 1704 p.

УДК 004.02

ПРИМЕНЕНИЕ БИБЛИОТЕКИ BOOST.COMPUTE ДЛЯ МОДЕЛИРОВАНИЯ ЭЛЕКТРОСТАТИЧЕСКОГО ПОЛЯ МЕТОДОМ СЛУЧАЙНОГО БЛУЖДАНИЯ

Лопин Илья Александрович, магистрант каф. ИТТЭК, Факультет ЛиСИ, Университет ИТМО,

Россия, Санкт-Петербург, mr.emulate@gmail.com Никехин Алексей Алексеевич, к.т.н., ассистент каф. ИТТЭК, Университет ИТМО, Россия, Санкт-Петербург, nikekhin@corp.ifmo.ru

Введение

Статья описывает опыт применения библиотеки boost.compute для языка программирования C++, официально включенной в состав широко распространенной и многоплатформенной библиотеки boost, начиная с версии boost 1.61 от 13 мая 2016 года, для моделирования поведения большого числа объектов, реализованных как экземпляры одного класса.

Библиотека boost.compute реализует для программ на C++, основанный на использовании технологии OpenCL, интерфейс к вычислительным ресурсам многоядерных CPU (центральных процессоров), GPGPU (графических карт общего назначения), графическим ускорителям, например Xeon Phi, программируемым матрицам (FPGA) и другим параллельным устройствам [7].

Использование OpenCL обеспечивает возможность создания исполняемых программ, не требующих для своего создания расширений компилятора, нестандартных реализаций С++, использования закрытых и связанных с конкретным производителем оборудования решений. Это с одной стороны обеспечивает переносимость разработанных имитационных моделей на уровне исходных кодов на различные аппаратные платформы и с другой стороны создание портируемых многоплатформенных программных продуктов, использующих в своем составе эффективные алгоритмы моделирования.

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

Опыт применения библиотеки boost.compute продемонстрировал ее вычислительную эффективность, удобство интерфейса и легкость встраивания в программу на C++, отсутствие явных дефектов, а также возможность использования всего объектно-ориентированного инструментария языка программирования C++ для создания имитационных моделей.

Описание модели

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

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

В качестве расчетной модели в данной статье используется модель, состоящая из одного или множества электродов произвольной формы с заданными потенциалами, на поверхности каждого электрода. Пространство, в котором расположены электроды, может быть как замкнутым, расположенным внутри замкнутой области (заземленном экране или корпусе), так и открытым. Задача состоит в расчете потенциала в любой точке области пространства вне электродов. На первом этапе для расчета рассматривалось 2-мерное

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

Рис. 1 - Пример конфигурации с двумя электродами и замкнутой областью для расчета электростатического потенциала в заданной точке

Расчет потенциала производится методом случайного блуждания. Суть метода состоит в том, что для каждой точки пространства, заданной координатами х и у, случайным образом выбирается направление шага и производится смещение блуждающей частицы на одну единицу длины. Чтобы воспроизвести данный процесс воспользуемся алгоритмом блуждания по решетке.

Алгоритм следующий: пусть введена равномерная сетка (Ш^), где i и j - целые числа, а положительное число h - шаг сетки. Определяем начальную точку и множество

«поглощающих» узлов (попадание в такой узел означает обрыв соответствующей траектории). Для к = 0,1,2... осуществляем переход из точки ^к^кЬ) в одну из соседних точек (^к - 1)^кЬ), (^к + 1)^кЬ), ^к^ (]к - 1)^), ^кЬ, (jk+ 1)^) согласно вероятностям р1,р2,р3,р4 соответственно. Процесс прекращается после попадания точки в одно из «поглощающих» состояний [6].

В общем случае «поглощающими» состояниями являются границы электродов. В простой модели, которая и была реализована, «поглощающими» состояниями является экранированная граница пространства (заземленный экран) и граница единственного электрода. Все вероятности перехода рп равны между собой. Потенциал точки по данному методу определяется по формуле

V = (V! * N1 +...+ Vk *

где V - искомый потенциал, Уь..Ук - потенциалы электродов 1...к; N1...^ -количество «поглощений» блуждающей точки электродами 1...к; N - общее количество испытаний (различных реализаций траекторий блуждающих точек).

Сложность алгоритма возрастает с ростом размерности пространства 0(пё), где ё -размерность пространства, п - число шагов пространственной решетки вдоль каждой из осей.

Для каждой точки пространства совершается такое количество испытаний (проход от начальных координат до «поглощающего» состояния), которое удовлетворяет необходимой точности. Увеличение количества испытаний увеличивает точность расчета потенциала. Скорость сходимости найденного значения потенциала точки к истинному значению пропорциональна корню из числа испытаний [1].

Для увеличения скорости работы метода возможны различные формы пространственной решетка, в которой перемещается блуждающая точка, определяющие количество возможных направлений блуждания. Кроме того возможно изменение шага

перемещения точки, а также алгоритмы перемещений в непрерывном пространстве. Эти подходы в рамках реализации модели не рассматривались и могут быть предметом дальнейших отдельных исследований.

Решение

Для решения задачи необходимо загрузить и установить библиотеку boost в соответствии с инструкциями по установке к ней. Библиотека распространяется на интернет ресурсе http://www.boost.org/.

Кроме библиотеки необходима установка драйверов и SDK (Software Development Kit) для разработки с использованием OpenCL. В зависимости от типа видеокарты, на которой будет исполняться модель, нужно будет загрузить и установить один из следующих пакетов:

• Intel GPU: установить Intel SDK for OpenCL Applications [2]

Добавить в пути поиска компилятора папку с заголовочными файлами SDK, например (здесь и далее точные пути зависят от платформы и от каталога, указанного при установке SDK):

C:\\Program Files (x86)\\Intel\\OpenCL SDK\\3.0\\include Добавить в пути поиска компоновщика папку библиотек, например:

C:\\Program Files (x86)\\Intel\\OpenCL SDK\\3.0\\lib\\x86

• NVidia GPU: установить NVidia CUDA SDK [3] Добавить в пути поиска компилятора:

C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v6.0\\include Добавить в пути поиска компоновщика:

C:\\Program Files\\NVIDIA Computing Toolkit\\CUDA\\v6.0\\lib\\Win32

• AMD GPU: Загрузить и установить AMD App SDK [4] Добавить в пути поиска компилятора:

C:\\Program Files\\AMD APP SDK\\2.9\\include Добавить в пути поиска компоновщика:

C:\\Program Files\\AMD APP SDK\\2.9\\lib\\x86 Для проверки работоспособности простой программы, использующей возможности boost compute, собрать следующий исходный текст. Полный текст модели расчета электростатического поля доступен по запросу [5].

#include <iostream>

#include <boost/compute/core.hpp>

#include <boost/compute/algorithm/transform.hpp> #include <boost/compute/container/vector.hpp> #include <boost/compute/functional/math.hpp> #include <boost/compute/function.hpp> namespace compute = boost::compute; using namespace std;

int main() {

vector<compute::platform> platforms = compute::system::platforms();

for (size t i = 0; i < platforms.size(); i++) {

const compute::platform &platform = platforms[i]; cout << "Platform '" << platform.name() << "'" << endl;

vector<compute::device> devices = platform.devices(); for (size t j = 0; j < devices.size(); j++) {

const compute::device &device = devices[j];

string type;

if

type = "GPU Device"; else if

type = "CPU Device"; else if (device.type() & compute::device::accelerator) type = "Accelerator Device";

else

type = "Unknown Device";

}

}

cout << "Press ENTER to exit... "; cin.get (); return 0;

}

Реализация данного алгоритма средствами процедурных языков программирования подразумевает собой использование вложенных циклов с большим количеством итераций, генерацию случайного числа и математические расчеты. И первая проблема, с которой здесь сталкивается программист - это большой объем параллельных вычислений. Данная проблема может быть успешно решена применением параллельных вычислений на графических процессорах, каждый из которых обрабатывает собственный объект. Порядок вычислений изображен на диаграмме последовательности на рис.2.

копирование 1

ответ

У

I

<

Рис. 2 - Диаграмма последовательности

Вторая, менее очевидная проблема, состоит в использовании некоррелированных генераторов псевдослучайных чисел (ГПСЧ) в каждой ячейке параллельных вычислений. Как показала практика, использование общего для всех точек ГСЧП, приводит к повторяющимся результатам для каждой точки. Для решения данной проблемы необходим расчет набора случайных чисел для каждой точки в отдельности. Решением совокупности обеих проблем может стать обработка С++ класса точки, который будет содержать в себе ГПСЧ, выбор направления шага и математические вычисления конечного потенциала точки, с помощью графических процессоров.

В реализации используется минимальное количество классов, необходимых для создания работоспособной модели. Механизм наследования не применяется. Для лучшей читаемости кода, разделяемого ООП частью программы на С++ и кодом OpenCL используются макроопределения

BOOST_COMPUTE_ADAPT_STRUCT // C++ class to be wrapped for OpenCL

BOOST_COMPUTE_FUNCTION // Custom OpenCL functions in C++

Диаграмма классов изображена на рис.3.

Рис. 3 - Диаграмма классов

Для ввода исходных данных и визуализации результата используется библиотека OpenCV. Взаимодействие всех составляющих реализации модели не требует отдельной настройки и кастомизации и производится стандартными способами.

Выводы

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

Эти преимущества дают возможность передачи исходных текстов модели другим исследователям и их использование на вычислительных машинах с архитектурой и средствами, отличными от имеющихся у авторов алгоритма модели.

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

Литература

1. Mazen Abdel-Salam, High-Voltage Engineering: Theory and Practice, Second Edition, Revised and Expanded, Marcel Dekker, Inc, 2000 - 730 c.

2. Intel SDK for OpenCL Applications [Электронный ресурс]: http://software.intel.com/en-us/vcsource/tools/opencl-sdk

3. CUDA SDK [Электронный ресурс]: https://developer.nvidia.com/cuda-downloads

4. AMD App SDK [Электронный ресурс]: http://developer.amd.com/tools-and-sdks/opencl-zone/opencl-tools-sdks/amd-accelerated-parallel-processing-app-sdk/

5. Исходные тексты модели на языке программирования C++ [Электронный ресурс]: https://bitbucket.org/NikeKhin/parallel_cpp , по запросу.

6. Михайлов Г.А., Войтишек А.В. Численное статистическое моделирование. Методы Монте-Карло — М.: Издательский центр «Академия», 2006. — 368 с.

7. Boost compute documentation [Электронный ресурс]: http://www.boost.org/doc/libs/1 62 0 /libs/compute/doc/html/index.html

УДК 004.04

ИСПОЛЬЗОВАНИЕ АРХИТЕКТУРНОГО ПОДХОДА ПРИ РАЗРАБОТКЕ ПРИЛОЖЕНИЙ К БАЗАМ ДАННЫХ

Галиаскаров Эдуард Геннадьевич, к.х.н., доцент, Ивановский государственный химико-технологический университет, Россия, Иваново, portugaled@yandex.ru

Учебный курс «Управление данными» является одним из центральных в подготовке студентов по направлению 09.03.02 «Информационные системы и технологии». В рамках данной дисциплины основное внимание уделяется вопросам проектирования баз данных и работы с данными средствами языка запросов и современных РСУБД [1]. Другим важным моментом является разработка приложения к базам данных, которая, как показывает опыт, и вызывает самую большую сложность. Практическая часть курса по управлению данными предполагает у студента определенные знания и навык в разработке приложений и владении языками программирования высокого уровня. Однако в реальности опыт программирования оказывается небольшим, а уровень владения методами программной инженерии в целом низкий. Вместе с тем программа курса «Управление данными» не предусматривает подробное рассмотрение вопросов разработки приложений к базам данных. Если задачу разработки отдавать на откуп студентам, то это приводит к тому, что качество решения этой задача остается низким. Даже если уровень программисткой подготовки студентов в целом неплохой, мало кому удается разработать приложение в полном объеме. При этом не приходится даже говорить о какой-то более или менее целостной структуре приложения, целостном подходе к его проектированию и реализации. Причинами этого, как уже упоминалось выше, являются слабое владение методами программной инженерии, незначительный опыт проектирования подобных задач, ограниченность времени на реализацию приложения, трудность в понимании того, как следует решать эту задачу. В результате возникла потребность разработать такой подход, который бы соответствовал следующим критериям:

• обладал относительной простотой и понятностью при изучении и использовании;

• опирался на принципы объектно-ориентированного программирования;

• демонстрировал, пусть и в упрощенной форме, особенность «промышленной» разработки кода.

Этим критериям в полной мере отвечает архитектурный подход, который предполагает разработку общих принципов и решений, удовлетворяющих предъявляемым требованиям и обеспечивающих легкую адаптацию к потенциальным требованиям в определенных пределах. Таким образом, цель данной статьи заключается в том, чтобы показать опыт использования архитектурного подхода при разработке приложений к базам данных.

За основу общей конструкции приложения была взята многослойная структура приложения [2]. Многослойная структура предполагает разделение приложения на отдельные функционально обособленные слои с выраженным назначением, связанные между собой четко выделенными интерфейсами. Такая конструкция позволяет разделить приложение на части, обладающие определенной независимостью в ходе их разработки и использования. В конечном счете, каждая такая часть может разрабатываться с применением различных языков программирования и в значительной степень позволяет локализовать