Научная статья на тему 'Реализация параллельного алгоритма геометрического хеширования на основе пакета NumPy и пула процессов'

Реализация параллельного алгоритма геометрического хеширования на основе пакета NumPy и пула процессов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
460
68
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ХЕШИРОВАНИЕ / ПУЛ ПРОЦЕССОВ / ПАКЕТ NUMPY / ВЫЧИСЛИТЕЛЬНАЯ ГЕОМЕТРИЯ / ПАРАЛЛЕЛЬНЫЙ АЛГОРИТМ / HASHING / PROCESS POOL / PACKAGE NUMPY / COMPUTATIONAL GEOMETRY / PARALLEL ALGORITHM

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Клячин Владимир Александрович

В статье рассматривается задача многомерного геометрического хеширования. Предлагается способ построения соответствующей хеш-матрицы параллельным алгоритмом. В работе построен алгоритм параллельного геометрического хеширования с использованием шаблона «пул процессов». Реализация алгоритма выполнена с применением языка программирования Python и пакета NumPy для манипулирования многомерными данными. В качестве основы для пула процессов предложено использовать класс ProcessPoolExecutor модуля concurrent.futures, который входит в дистрибутив интерпретатора Python начиная с версии 3.2. Все решения представлены в статье соответствующими UML-диаграммами классов. Найденное обобщенное программное решение может быть использовано для реализации параллельных алгоритмов и других задач, которые могут быть описаны в терминах схемы пула процессов.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Клячин Владимир Александрович

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

PARALLEL ALGORITHM OF GEOMETRICAL HASHING BASED ON NUMPY PACKAGE AND PROCESSES POOL

The article considers the problem of multi-dimensional geometric hashing. The paper describes a mathematical model of geometric hashing and considers an example of its use in localization problems for the point. A method of constructing the corresponding hash matrix by parallel algorithm is considered. In this paper an algorithm of parallel geometric hashing using a development pattern «pool processes» is proposed. The implementation of the algorithm is executed using the Python programming language and NumPy package for manipulating multidimensional data. To implement the process pool it is proposed to use a class Process Pool Executor imported from module concurrent.futures, which is included in the distribution of the interpreter Python since version 3.2. All the solutions are presented in the paper by corresponding UML class diagrams. Designed GeomNash package includes classes Data, Result, GeomHash, Job. The results of the developed program presents the corresponding graphs. Also, the article presents the theoretical justification for the application process pool for the implementation of parallel algorithms. It is obtained condition p t 2 > p 1 t 1 of the appropriateness of process pool. Here t 1 the time of transmission unit of data between processes, and t 2 the time of processing unit data by one processor.

Текст научной работы на тему «Реализация параллельного алгоритма геометрического хеширования на основе пакета NumPy и пула процессов»

www.volsu.ru

КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ

DOI: http://dx.doi.org/10.15688/jvolsu1.2015.4.2

УДК 514.142.2+514.174.6 ББК 32.973.26-018.2

РЕАЛИЗАЦИЯ ПАРАЛЛЕЛЬНОГО АЛГОРИТМА ГЕОМЕТРИЧЕСКОГО ХЕШИРОВАНИЯ НА ОСНОВЕ ПАКЕТА

NUMPY И ПУЛА ПРОЦЕССОВ1

Владимир Александрович Клячин

Доктор физико-математических наук,

заведующий кафедрой компьютерных наук и экспериментальной математики, Волгоградский государственный университет [email protected], [email protected]

просп. Университетский, 100, 400062 г. Волгоград, Российская Федерация

Аннотация. В статье рассматривается задача многомерного геометрического хеширования. Предлагается способ построения соответствующей хеш-матрицы параллельным алгоритмом. В работе построен алгоритм параллельного геометрического хеширования с использованием шаблона «пул процессов». Реализация алгоритма выполнена с применением языка программирования Python и пакета NumPy для манипулирования многомерными данными. В качестве основы для пула процессов предложено использовать класс ProcessPoolExecutor модуля concurrent.futures, который входит в дистрибутив интерпретатора Python начиная с версии 3.2. Все решения представлены в статье соответствующими UML-диаграммами классов. Найденное обобщенное программное решение может быть использовано для реализации параллельных алгоритмов и других задач, которые могут быть описаны в терминах схемы пула процессов.

Ключевые слова: хеширование, пул процессов, пакет NumPy, вычисли-S тельная геометрия, параллельный алгоритм.

Введение

PQ

х

g Геометрическое хеширование — это метод, позволяющий ускорить доступ к неупо-¿5 рядоченному массиву данных, основанный на их геометрическом представлении. Ис-@ пользование этого метода широко распространено в задачах вычислительной геометрии

[5; 12], алгоритмах компьютерной графики [13], геоинформационных системах [12]. Метод геометрического хеширования хорошо описан, в частности, в статьях [14; 15; 17], в которых указанный метод применяется в задачах распознавания объектов на изображениях. Мы приведем его описание на примере задачи локализации точки относительно триангуляции.

Пусть гр1,...,'рн е [а,Ь] х [с,д\ С М2 — конечный набор точек на плоскости и Т = {Т\, ...,Тм} — его триангуляция — такой набор треугольников, что:

1) каждая точка рг заданного набора является вершиной одного из треугольников

Тк е Т;

2) каждая вершина любого треугольника е Т является одной из точек = = !,...,N;

3) внутренность пересечения любых двух треугольников пуста.

Задача локализации точки относительно триангуляции ставится как задача определения тех треугольников триангуляции, которым может принадлежать заданная точка р е М2 [9]. Простейший алгоритм решения этой задачи сводится к перебору всех тругольников и определения принадлежности точки р каждому такому треугольнику. Сложность алгоритма — 0(М). Основная идея оптимизации прямого перебора сводится к отбрасыванию заведомо невозможных случаев: не рассматривать те треугольники, которым заданная точка заведомо не принадлежит. Покажем, как алгоритм оптимизируется с помощью специальной предобработки данных — геометрического хеширования.

Рис. 1. Иллюстрация хеширования по двумерной сетке Построим разбиения:

а = х0 < Х\ < ... < хт = Ь;

с = уо < ух < ... < ут = ¿.

Далее каждой паре (г,]), 1 < г < т, 1 < ] < т сопоставим список номеров ,..., Л,™-тех треугольников, которые пересекают прямоугольник = х ]

ТНЬ, П Ягз = 0.

Для каждой пары (i,j) количество п^ таких треугольников может быть различным. Теперь вернемся к задаче локализации точки. Новый алгоритм сводится теперь к следующим шагам:

1. Бинарным поиском определяем номера i,j такие, что р G Qij.

2. За nij шагов находим треугольники из списка {Thk },к = 1,...,riij, которые

г3

содержат точку р.

Сложность такого алгоритма порядка величины

С (log2 т + Пу).

Оценим среднее значение п^ длин списков номеров треугольников. Пусть

d = min {xi - Xi-i,yj - У3-1}.

1<г,]<т

Обозначим через 5к диаметр треугольника Тк. Тогда из простых геометрических соображений легко получить, что число Шк тех ячеек , которые пересекает треугольник Тк не превосходит

тк <

Иcходя из этого, получаем для среднего значения

1

1 ^ М

%з = <

V к

i2

£

т

яа+i)

где

6 = max 6к. к

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

АМ.

С (1с^2 т + ),

т2

где

А

(И + i)

Минимизируя это выражение относительно т, окончательно получим сложность алгоритма, в среднем равную 0(^2М), при условии ограниченности величины А. Из приведенных рассуждений видно, что если применять равномерную сетку для хеширования, то оценка получается еще лучше: порядка 0(1). По сравнению с оценкой О(М) это очень хорошо. Таким образом, геометрическое хеширование значительно ускоряет решение задачи локализации точки. Правда, при этом дополнительно затрачивается память порядка О( М). Мы ставим задачу построения и реализации параллельного алгоритма геометрического хеширования.

2

2

1. Математическая модель геометрического хеширования

Пусть X = {х\,...,хм},М > 1 — произвольное конечное множество и К обозначает единичный интервал К = [0,1].

Пусть дано некоторое отображение

5 : Х^ , п> 1.

Так что каждой точке х е X ставится в соответствие некоторое подмножество п-мерного единичного куба в(х) С Кп. Непосредственно в задаче локализации точки относительно триангуляции в качестве X рассматривается множество всех треугольников триангуляции Т, расположенных, например, в единичном квадрате [0,1] х [0,1]. Для случая п = 1 отображением в может служить отображение, которое каждому треугольнику ставит в соответствие отрезок проекции этого треугольника на ось Ох. При п = 2 мы можем взять в качестве 5 отображение, сопоставляющее треугольнику прямоугольник, являющийся прямым произведением двух отрезков проекций треугольника — один на ось Ох, другой — на ось Оу.

Помимо отображения 8, предположим задана матрица разбиений В = \\tij|| размерности п х (т + 1),та > 1. При этом предполагаем выполнение условий

0 = ¿¿о < их < и2 < ... < ит = 1, Уг = 1,..., п.

Элементы этой матрицы задают сетку, по которой будет вестись хеширование. В простейшем случае можно использовать равномерную сетку, для которой tik — Uk-1 = const.

Через I обозначим мультииндекс (i\,i2, ...,in), 1 > ik > m,k = 1,...,n. Каждому мультииндексу сопоставим ячейку QI построенной выше сетки хеширования

Ql = [U ii-1,t\i!] х [t2i2-1,t2i2] X ... X [tni„-1,tni„].

Хеширование заключается в построении многомерной матрицы Н размерности т х ... х т (здесь п множителей), элементами которой являются наборы натуральных чисел hI = (h],..., h™1), 1 > h} < M такие, что

s(xhu) П Qi = 0.

Другими словами, эти натуральные числа задают номера элементов множества X, чьи образы s(x) пересекают ячейку Qi.

2. Алгоритм геометрического хеширования

Изложим для начала последовательный алгоритм хеширования. На входе алгоритм получает список объектов х\,...,хм элементов множества X. На выходе алгоритм должен сформировать многомерную матрицу Н, содержащую списки требуемых номеров объектов Хг,1 = 1,...,М. Основной цикл перебирает весь список х\,...,хм и на каждом шаге осуществляет следующую последовательность действий:

• Вычисляет значение отображения в(хг).

• Находит ячейки Qj, которые пересекают множество s(xi). Результатом работы алгоритма на этом этапе является набор мультииндексов (/},...,1^.) таких, что

QIii П з(хг) — 0.

• В хеш-матрицу Н добавляется номер г в списки Н[/] для каждого мультииндекса

Т — Р Р 1 = 11,...,1п..

В применении к задаче локализации точки в качестве X выбирается множество треугольников, а s(Tk) можно выбирать либо сам треугольник Тк Е Т, либо ограничивающий его прямоугольник.

3. Параллельный алгоритм и его реализация

Распараллеливание будем осуществлять по входному множеству X, то есть каждому параллельно работающему исполнителю будет назначаться свое подмножество Xj С X,j — l,...,q,X — UjXj,Xi П Xj — 0,г — j. Основной исполнитель будет формировать матрицу Н, получая от вспомогательных исполнителей соответствующие списки наборов мультииндексов. Обозначим через число исполнителей. В общем случае — .

Для реализации параллельных вычислений матрицы Н мы воспользуемся шаблоном «пул потоков/процессов» (Thread/Process Pool) проектирования параллельных программ [1; 10; 16]. Схематично шаблон представлен на рисунке 2 на примере пула потоков. На этой диаграмме класс Task содержит порцию данных (объект класса Data) в виде отдельного задания. Все задания собраны в классе TaskQueue в виде очереди, защищенной от совместного доступа мютексом — объектом класса Mutex. Класс ThreadPool содержит список потоков threads объектов класса Thread и ссылку на очередь заданий task_queue. Метод ProcessTasks этого класса запускает на выполнение все потоки пула threads, передавая им ссылку tasks_queue. Потоки, выполняя метод run(), выбирают из очереди заданий еще не выполненное задание и обрабатывают соответствующие ему данные. Пул потоков работает до тех пор, пока остаются невыполненные задания, то есть пока очередь tasks_queue не станет пустой (см. рис. 3).

queue TaskQueue

addTaskO

mutex

Mutex

lock() uuloekf)

Рис. 2. UML-диаграмма пула потоков ISSN 2222-8896. Вестн. Волгогр. гос. ун-та. Сер. 1, Мат. Физ. 2015. № 4 (29) 17

Рис. 3. Распределение заданий по потокам

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

• Python широко используется для решения вычислительных задач [5-7].

• Для языка Python имеется пакет NumPy, который реализует итераторы многомерных массивов с помощью соответствующих мультииндексов [8].

• В этом же пакете реализованы Си-подобные массивы вместе с различными операциями линейной алгебры [2].

• В версии Python 3.2 имеется модуль concurrent.futures, в котором есть два класса ThreadPoolExecutor и ProcessPoolExecutor — необходимые нам пулы потоков и процессов [11].

С другой стороны, реализация схемы на рисунке 2 при использовании языка программирования Python сопряжено с определенными трудностями. Дело в том, что интерпретатор Python (точнее его Си-реализация — CPython [11]) является однопоточ-ным и для защиты собственных данных использует глобальную блокировку GIL (Global Interpreter Lock). GIL представляет собой объект синхронизации, который захватывается потоками (потоки в Python — это обычные POSIX потоки) в соответствии с собственной политикой интерпретатора. Такая однопоточность интерпретатора приводит к тому, что потоки параллельно не могут выполняться на разных процессорах или ядрах процессора. А, значит, использование пула потоков становится бесполезным. Один из способов обойти это ограничение в контексте схемы (рис. 2) — это вместо пула потоков использовать пул процессов. Это, конечно, более накладно, но позволит выполнять разные процессы на нескольких процессорах.

На рисунке 4 приведена объектно-ориентированная модель решения задачи на основе класса ProcessPoolExecutor. Все решение помещено в пакет GeomHashing. В классе Job метод work_do() является шаблонным. Его реализация абстрагируется от реализации методов get_job() и alone_job(). Эти методы переопределяются в подклассах в зависимости от конкретной задачи распараллеливания. В нашем случае мы реализуем

подкласс GeomHash. Метод get_job() должен вернуть информацию об очередном задании для процесса, а метод alone_job() обрабатывает порцию данных этого задания в контексте соответствующего процесса из пула.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

1оЬ 1

Рис. 4. UML-диаграмма классов пакета GeomHashing

Использование пула процессов сопряжено еще с одной трудностью, которую мы оценим количественно. Трудность эта связана с необходимостью осуществлять передачу данных между процессами. Для потоков данной проблемы не возникает из-за использования общего адресного пространства. Пусть имеется тр,т > 1,р > 1 единиц данных, требующих определенной обработки пулом из р процессов, которые будут выполняться на р процессорах. Обозначим через время передачи единицы данных между процессами, а через ¿2 — время обработки единицы данных одним процессором. Для последовательной обработки данных потребуется время

Тпосл = трг 2.

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

^парал = т&1 + т^. Таким образом, выигрыш во времени Тпарал < Тпосл будет иметь место, если

Р

t2 >

Р — 1

Другими словами, параллельная реализация на основе пула процессов имеет смысл, если время обработки единицы данных в р/(р — 1) раз больше времени пересылки единицы данных при межпроцессном взаимодействии. При этом ускорение получается равным

?посл = рт Тпарал Р + т'

где т = ¿2Дь Эту формулу можно интерпретировать как своеобразный аналог закона Амдала [3], учитывающий не соотношение между последовательной и параллельной частями программы, а учитывающий время на пересылку данных.

В соответствии со сделанными замечаниями внесем изменения в нашу схему. Для этого заменим отношение композиции «один ко многим» на отношение инстанцирования между классами Job и Data (пунктирная линия на рисунке 5). Это означает, что вместо передачи процессам самих данных будет передаваться необходимая информация о них. Добавленный в класс Job «фабричный» метод make_data() по переданной информации создает данные для обработки.

Рис. 5. Окончательная UML-диаграмма классов пакета GeomHashing

На рисунке 6 представлены результаты тестирования последовательной и параллельной программы, решающих задачу геометрического хеширования на равномерной сетке 10 х 10. По горизонтальной оси отложены значения мощности входного множества X, а по вертикальной оси — указано время в секундах. Тестирование проводилось на машине с процессором Intel Pentium c 4-мя ядрами по 2,16 ГГц.

40

°0 100000 200000 300000 400000 500000 600000 700000 800000

Рис. 6. Время хеширования: А — последовательный алгоритм; В — параллельный алгоритм

ПРИМЕЧАНИЕ

1 Работа выполнена при финансовой поддержке РФФИ (проект № 15-41-02517 р_по-волжье_а).

СПИСОК ЛИТЕРАТУРЫ

1. Академия Microsoft: Параллельные вычисления и многопоточное программирование. Лекция 7: Пул потоков и библиотека параллельных задач. — Электрон. текстовые дан. — Режим доступа: http://www.intuit.ru/studies/courses/10554/1092/lecture/21509. — Загл. с экрана.

2. Бабищевич, П. Н. Численные методы: Вычислительный практикум / П. Н. Бабище-вич. — М. : ЛЕНАНД, 2015. — 320 c.

3. Гергель, В. П. Теория и практика параллельных вычислений / В. П. Гергель. — М. : Интернет-Университет Информационных технологий ; БИНОМ. Лаборатория знаний, 2007. — 423 c.

4. Гриценко, Ю. Б. Решение проблемы обновления пространственных данных в среде Oracle Spatial / Ю. Б. Гриценко, В. Ю. Вишняков, С. С. Ощепков // Докл. ТУСУРа. Управление, вычислительная техника и информатика. — 2008. — № 2 (18). — C. 76-79.

5. Клячин, В. А. Оптимизация построения расчетной сетки для решения задачи локального криовоздействия с использованием многомерного геометрического хеширования на основе пакета NumPy / В. А. Клячин // Изв. Сарат. ун-та. Новая серия. Серия Математика. Механика. Информатика. — 2014. — Т. 14, № 3. — C. 355-362.

6. Математический Python. — Электрон. текстовые дан. — Режим доступа: http://jenyay.net/Programming/PyMath. — Загл. с экрана.

7. Никольский, Д. Н. Разработка программного обеспечения для численного решения задач эволюции границы раздела различных жидкостей в пористых средах сложной геологической структуры с использованием пакета NumPy / Д. Н. Никольский // Ученые записки Орловского государственного университета. Серия: Естественные, технические и медицинские науки. — 2012. — № 6-1. — C. 42-47.

8. Олифант, Т. Многомерные итераторы NumPy / Т. Олифант // Идеальный код. — СПб. : Питер, 2011. — C. 341-358.

9. Препарата, Ф. Вычислительная геометрия / Ф. Препарата, М. Шеймос. — М. : Наука, 1989. — 478 c.

10. Пул управляемых потоков. MSDN — Microsoft. — Электрон. текстовые дан. — Режим доступа: https://msdn.microsoft.com/ru-ru/library/0ka9477y(v=vs.110).aspx. — Загл. с экрана.

11. Саммерфилд, М. Python на практике / М. Саммерфилд. — М. : ДМК Пресс, 2014. — 338 c.

12. Скворцов, А. В. Алгоритмы построения и анализа триангуляции / А. В. Скворцов, Н. С. Мирза. — Томск : Изд-во Том. ун-та, 2006. — 168 c.

13. Шикин, Е. В. Компьютерная графика. Полигональные модели / Е. В. Шикин, А. В. Боресков. — М. : ДИАЛОГ-МИФИ, 2001. — 464 c.

14. An Improved Method of Geometric Hashing Pattern Recognition / M. Ling, L. Yumin, J. Huiqin, W. Zhongyong, Z. Haofei // I. J. Modern Education and Computer Science. — 2011. — Vol. 3. — P. 1-7.

15. Mian, A. S. Three-dimensional model-based object recognition and segmentation in cluttered scenes / A. S. Mian, M. Bennamoun, R. Owens // IEEE Transactions on Pattern Analysis and Machine Intelligence. — 2006. — Vol. 28. — P. 1584-1601.

16. Thread pool pattern. — Electronic text data. — Mode of access: https://en.wikipedia.org/wiki/Thread_pool_pattern. — Title from screen.

17. Wolfson, H. J. Geometric Hashing: An Overview / H. J. Wolfson, I. Rigoutsos // IEEE Computational Science and Engineering. — 1997. — Vol. 4, № 4. — P. 10-21.

REFERENCES

1. Akademiya Microsoft: Parallelnye vychisleniya i mnogopotochnoe programmirovanie. Lektsiya 7: Pul potokov i biblioteka parallelnykh zadach [Microsoft Academy: Parallel computing and multi-thread programming. Lecture 7: Thread Pool and Parallel Tasks Library]. Available at: http://www.intuit.ru/studies/courses/10554/1092/lecture/21509.

2. Babishchevich P.N. Chislennye metody: Vychislitelnyy praktikum [Computational methods in practice]. Moscow, LENAND Publ., 2015. 320 p.

3. Gergel V.P. Teoriya i praktika parallelnykh vychisleniy [Theory and practice of parallel calculations]. Moscow, Internet-Universitet Informatsionnykh tekhnologiy ; BINOM. Laboratoriya znaniy Publ., 2007. 423 p.

4. Gritsenko Yu.B., Vishnyakov V.Yu., Oshchepkov S.S. Reshenie problemy obnovleniya prostranstvennykh dannykh v srede Oracle Spatial [Addressing update spatial data in Oracle Spatial]. Dokl. TUSURa. Upravlenie, vychislitelnaya tekhnika i informatika, 2008, no. 2 (18), pp. 76-79.

5. Klyachin V.A. Optimizatsiya postroeniya raschetnoy setki dlya resheniya zadachi lokalnogo kriovozdeystviya s ispolzovaniem mnogomernogo geometricheskogo kheshirovaniya na osnove paketa NumPy [Optimization of Calculus Mesh for Cryobiology Problem Based on Multidimensional Hashing Using NumPy]. Izv. Sarat. un-ta. Novaya seriya. Seriya Matematika. Mekhanika. Informatika, 2014, vol. 14, no. 3, pp. 355-362.

6. Matematicheskiy Python [Mathematical Python]. Available at: http://jenyay.net/Programming/PyMath.

7. Nikolskiy D.N. Razrabotka programmnogo obespecheniya dlya chislennogo resheniya zadach evolyutsii granitsy razdela razlichnykh zhidkostey v poristykh sredakh slozhnoy geologicheskoy struktury s ispolzovaniem paketa NumPy [Development of software for the numerical solution of the evolution of the interface between different fluids in porous media complex geological structure using the package NumPy]. Uchenye zapiski Orlovskogo gosudarstvennogo universiteta. Seriya: Estestvennye, tekhnicheskie i meditsinskie nauki [Scientific notes of Oryol State University. Series: natural, technical and medical sciences], 2012, no. 6-1, pp. 42-47.

8. Olifant T. Mnogomernye iteratory NumPy [Multidimensional iterators NumPy]. Idealnyy kod [Beautiful Code]. Petersburg, Piter Publ., 2011, pp. 341-358.

9. Preparata F., Sheymos M. Vychislitelnaya geometriya [Computational geometry]. Moscow, Nauka Publ., 1989. 478 p.

10. Pul upravlyaemykh potokov. MSDN — Microsoft [Pool of managed threads. MSDN — Microsoft]. Available at: https://msdn.microsoft.com/ru-ru/library/0ka9477y(v=vs.110).aspx.

11. Sammerfild M. Python na praktike [Python in practice]. Moscow, DMK Press Publ., 2014. 338 p.

12. Skvortsov A.V., Mirza N.S. Algoritmy postroeniya i analiza triangulyatsii [Analisys and algorithms of triangulations]. Tomsk, Izd-vo Tom. un-ta Publ., 2006. 168 p.

13. Shikin E.V., Boreskov A.V. Kompyuternaya grafika. Poligonalnye modeli [Computrer graphics. Polygon models]. Moscow, DIALOG-MIFI Publ., 2001. 464 p.

14. Ling M., Yumin L., Huiqin J., Zhongyong W., Haofei Z. An Improved Method of Geometric Hashing Pattern Recognition. I. J. Modern Education and Computer Science, 2011, vol. 3, pp. 1-7.

15. Mian A.S., Bennamoun M., Owens R. Three-Dimensional Model-Based Object Recognition and Segmentation in Cluttered Scenes. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2006, vol. 28, pp. 1584-1601.

16. Thread pool pattern. Available at: https://en.wikipedia.org/wiki/Thread_pool_pattern.

17. Wolfson H.J., Rigoutsos I. Geometric Hashing: An Overview. IEEE Computational Science and Engineering, 1997, vol. 4, no. 4, pp. 10-21.

PARALLEL ALGORITHM OF GEOMETRICAL HASHING BASED ON NUMPY

PACKAGE AND PROCESSES POOL

Vladimir Aleksandrovich Klyachin

Doctor of Physical and Mathematical Sciences,

Head of Department of Computer Science and Experimental Mathematics, Volgograd State University [email protected], [email protected]

Prosp. Universitetsky, 100, 400062 Volgograd, Russian Federation

Abstract. The article considers the problem of multi-dimensional geometric hashing. The paper describes a mathematical model of geometric hashing and considers an example of its use in localization problems for the point. A method of constructing the corresponding hash matrix by parallel algorithm is considered. In this paper an algorithm of parallel geometric hashing using a development pattern «pool processes» is proposed. The implementation of the algorithm is executed using the Python programming language and NumPy package for manipulating multidimensional data. To implement the process pool it is proposed to use a class Process Pool Executor imported from module concurrent.futures, which is included in the distribution of the interpreter Python since version 3.2. All the solutions are presented in the paper by corresponding UML class diagrams. Designed GeomNash package includes classes Data, Result, GeomHash, Job.

The results of the developed program presents the corresponding graphs. Also, the article presents the theoretical justification for the application process pool for the implementation of parallel algorithms. It is obtained condition

p — 1

of the appropriateness of process pool. Here t\ — the time of transmission unit of data between processes, and t2 — the time of processing unit data by one processor.

Key words: hashing, process pool, package NumPy, computational geometry, parallel algorithm.

i Надоели баннеры? Вы всегда можете отключить рекламу.