УДК 681.3.06 И.А. Трещёв
Использование метода перебора последовательностей, как раскраски вершин графа при обходе в ширину, на системах с SMP-архитектурой для решения переборных задач
Предлагаются методы распараллеливания алгоритмов для задач допускающих решение методом перебора с возвратом, ориентированные на использование в системах с SMP-архитектурой. Данные методы применяются для построения многопоточных приложений. Приводятся результаты экспериментального анализа предложенных методов для классических задач.
Ключевые слова: криптография, переборные задачи, рекурсия, многопоточность.
Введение. Криптостойкость популярного алгоритма Диффи-Хеллмана основана на вычислительной сложности обращения функции в некоторой конечной мультипликативной абелевой группе [1]. Перебор возможных решений в данной группе можно осуществлять с помощью метода ветвей и границ. Опишем данный метод и пути его распараллеливания для систем с SMP-архитектурой. Пусть заданы конечные множества А}, А^,---. Для произвольного целого п>0 под п-местным предикатом будем понимать функцию Р: А} х А2х...х Ап ^ {0,1} , принимающую значения 1 (истина) или 0 (ложь). Предикатом
будем называть произвольную функцию Q: У А1 х А2 х---х Ап ^ {0,1} .
п>1
Формулировка задачи. Даны конечные множества А1, А2,— и для каждого целого Ь задан ¿-местный предикат Р\ (х!,х2,...,хг). Предполагается, что для всех ¿>1 справедливы импликации Р\ (х1,х2,...,хг) = 1 ^ Рь_1(х1,х2,...,хг_1) = 1. Требуется построить последовательности (Х1,Х2,...,ХП), где XI е Ац при 1 < Ь < п, для которых верны соотношения:
Рп (х1, х2,., хп) =1; (1)
Q(Xl,X2,...,Xn) = 1. (2)
Сведение задачи к раскраске вершин дерева. Обозначим через Ri с А1 х А2х...х Аг подмножество последовательностей (х1,х2,...,хг), удовлетворяющих условию Р (х1,х2,.,хг) = 1. Рассмотрим дерево, вершинами которого являются конечные последовательности (х!,х2,...,хг)еRi. Корнем служит пустая последовательность. Сыновьями узла (Х1,Х2,...,х^_1) будут вершины (Х1,Х2,...,Х^_1,Х^)еRk . Это дерево является подграфом дерева, у которого на уровне й = 0 находится корень, и из каждой вершины уровня й - 1 выходят Аъ\ ребер, имеющих метки а е А^ . Таким образом, посещаются вершины дерева, представленного на рис. 1, что гарантированно приведет к решению.
Рис. 1. Поддерево дерева решений
Распараллеливание рекурсивных подпрограмм и параллельная реализация с помощью обхода в ширину. В современных операционных системах возможность потока порождать другие потоки позволяет строить многопоточные программы из рекурсивно
ИА. Трещёв. Использование метода перебора последовательностей..
25
вызываемых подпрограмм. Вместо рекурсивного вызова функций для построения таких программ подставляется создание потоков, соответствующих этим функциям. Более глубокий анализ показывает, что выигрыш в быстродействии при использовании такой схемы отсутствует. Это связано с тем, что при запуске потока мы ожидаем его завершения, не выполняя никаких действий. Отсюда вытекает, что параллельная реализация метода обхода в глубину не дает выигрыша во времени. Тем не менее, перебор последовательностей можно ускорить для систем с SMP-архитектурой. Например, использовать методы, предложенные в работах Н.Е. Тимошевской и В.А. Беляева [3], - методы назначаемых и выделяемых поддеревьев. Для кластерных архитектур при помощи данных методов действительно можно получить ускорение, близкое к теоретически достижимому. Можно также обходить дерево решений в ширину. Заметим, что на k-м ярусе дерева решений может быть запущено не более \ Ak \ потоков, где \ Ak \ есть мощность соответствующего множества, причем это возможно лишь при наличии достаточного числа вычислительных узлов. Использование предложенной выше схемы реализации перебора с возвратом как поиска в ширину не совсем оправдано, поскольку «накладные расходы» по времени на создание большого количества потоков могут превзойти выигрыш от использования нескольких процессоров в том случае, если их количество ограничено. Поэтому более рациональное решение заключается в том, чтобы подпрограмма перебора сама определяла, следует ли ей запуститься как потоку, если количество незанятых процессоров отлично от нуля, или как последовательной рекурсивной подпрограммой. Для доступа всех потоков к общей переменной, в которой будет храниться текущее количество занятых процессоров, следует использовать объекты синхронизации [2].
Результаты тестирования многопоточных приложений [4] для классических задач представлены в таблице (время указано в миллисекундах). Тестирование разработанных многопоточных приложений производилось на системе под управлением Microsoft Windows Server 2003, оснащенной двумя четырехъядерным микропроцессорами Intel Pentium 4 Xeon 5320, объем оперативной памяти 8 Gb.
Результаты тестирования многопоточных приложений
Количество Перебор гамильто- Задача Перебор раз- Перебор возрастаю- Генерация раз-
потоков новых циклов в Гаусса о ложений числа щих последователь- биений задан-
графе ферзях в сумму ностей ного множества
Перебор с возвратом, последовательная реализация
13469 23906 5453 18324 18390
Многопоточные приложения, реализующие поиск в ширину как раскраску вершин графа
1 16172 26953 6297 21125 21344
2 14953 25657 6266 16297 18969
3 13781 24062 6079 15484 18793
4 12640 22219 5625 15188 15188
5 11594 20829 5406 14813 13734
6 10328 18922 5296 13953 12625
7 9453 17047 5235 12578 12422
8 8265 15422 5234 13922 12266
9 7844 14266 5219 14485 12032
10 8297 13078 5187 14875 13500
11 8500 12375 4891 14937 13609
12 12041 12986 4797 15378 17437
13 12437 15187 4735 16225 19422
14 12923 15829 4703 16984 20204
15 13964 16922 4266 17937 22672
Для некоторых задач, как видно из таблицы, значение ускорения пропорционально числу используемых процессоров, но может и не превысить единицы. Пусть искомое решение представлено самым левым путем в дереве решений, тогда параллельный алгоритм, если не учитывать «накладных расходов», осуществит ровно столько же действий, что и последовательный. Противоположная ситуация возникает, если искомое решение представлено самым правым путем.
Литература
1. Василенко О.Н. Теоретико-числовые алгоритмы в криптографии. - М.: МЦНМО, 2003. - 328 с.
2. Хусаинов А.А. Архитектура вычислительных систем: Учеб. пособие / А.А. Ху-саинов, Н.Н. Михайлова // Комсомольск-на-Амуре: ГОУВПО «КнАГТУ», 2004. - 123 с.
3. Беляев В.А. Распараллеливание обхода дерева поиска для решения задачи о рюкзаке на кластерной системе / В.А. Беляев, Н.Е. Тимошевская // Высокопроизводительные параллельные вычисления на кластерных системах: Матер. междунар. науч.-практ. семинара / под ред. проф. Р.Г. Стронгина. - Нижний Новгород: Изд-во Нижегор. гос. унта, 2001. - С. 16-20.
4. Трещев И.А. Построение многопоточных приложений для распараллеливания алгоритмов перебора // Информатика и системы управления. - 2008. - №1 (15). - С. 151-159.
Трещев Иван Андреевич
ГОУВПО «Комсомольский-на-Амуре государственный технический университет», ст. преподаватель кафедры Математическое обеспечение и применение ЭВМ Эл. адрес: [email protected]
I.A. Treshchov
Using of parallel backtracking, as graph marking in wide tree traverse, on systems with SMP-architecture for solving search problems
Methods of constructing parallel algorithms for tasks,which could be solved with backtrack algorithm, oriented on the SMP-architecture, are proposed in this paper. These methods are used for building multithreaded applications. Experimental results concerning the methods for classic tasks on backtrack are given.
Key words: cryptography, reboric problems, recourse, multithreading.