Информатика, вычислительная техника и управление
О.В. Пьянков,
кандидат технических наук, доцент
РАЗРАБОТКА И ИССЛЕДОВАНИЕ АЛГОРИТМОВ ПАРАЛЛЕЛЬНОГО ПОИСКА ЦИКЛОВ В ГРАФЕ
DEVELOPMENT AND RESEARCH OF ALGORITHMS PARALLEL SEARCH CYCLES IN THE GRAPH
Рассматривается возможность распараллеливания известного алгоритма поиска циклов в графе. Предлагаются и исследуются новые алгоритмы, позволяющие более эффективно использовать многопроцессорные вычислительные системы для поиска циклов. Приводятся результаты вычислительного компьютерного эксперимента.
The possibility ofparalleling the famous search algorithm cycles in the graph is considered. New algorithms, allowing more efficient use of multiprocessor computer systems to search for cycles are proposed and studied. The results of computational computer experiment are given.
Введение.
Известно, что при исследовании систем различного назначения часто приходится рассматривать внутренние взаимодействия её элементов, которые характеризуются либо как конфликтные отношения, либо как отношения сотрудничества, либо как нейтральные [1]. При этом последние часто не рассматриваются, т.к. считаются несуществующими. Сама исследуемая система представляется в виде ориентированного графа G = (V, E), вершины vt е V которого соответствуют элементам системы, а дуги et е E — воздействию одного элемента на другой. Для анализа конфликтности системы в целом и её отдельных элементов используются оценки сбалансированности [2]. При этом в зависимости от прикладного характера решаемой задачи, считают, что наличие (отсутствие) конфликтных воздействий отрицательно (положительно) влияет на функционирование системы в целом, а система при этом является несбалансированной (сбалансированной).
Расчёт оценок сбалансированности основывается на поиске всех циклов ориентированного графа, алгоритм которого основывается на исследовании графа в глубину. Для исследования больших систем поиск циклов без использования вычислительных средств мо-
54
Вестник Воронежского института МВД России №1 / 2015
жет представлять собой сложную задачу, требующую значительных временных затрат: требуется O[(\V\ + \E\)(c+1)] операций, где с — число порожденных циклов. Существующий алгоритм поиска циклов [3] был реализован в виде программного средства [4], позволяющего по составленной матрице смежности ориентированного графа найти все циклы.
В целях оценки временных затрат на поиск циклов был проведен вычислительный эксперимент с использованием разработанной программы. Эксперимент проводился на компьютере со следующими характеристиками: 8-ядерный процессор Intel® Core™ i7-2670QM CPU 2.20GHz, 6.00 ГБ ОЗУ, Windows 7 Ultimate SP1.
Количество циклов в полном графе определяется выражением [3]
n
Ln = ^ i=2
'П
V1У
( -1),
(1)
где n — число вершин полного графа.
Рассматривались полные ориентированные графы с n = 2 ... 14 с выводом циклов на экран монитора и сохранением в файл; без вывода и без сохранения.
В табл. 1 представлены результаты времени расчёта для n>7, поскольку существенных временных затрат на поиск циклов для полных графов с меньшим количеством вершин выявлено не было.
Таблица 1
Результаты вычислительного эксперимента
n 8 9 10 11 12 13 14
L 16064 125664 1112073 10976173 119481284 1421542628 18348340113
Время расчёта, час:мин:сек
с выводом 11 с 0:01:13 0:16:24 1:43:14 16:49:32 - -
без вывода < 1 c 0:00:01 0:00:15 0:02:33 0:34:50 8:57:04
Анализ полученных результатов позволяет сделать вывод о необходимости разработки более эффективных алгоритмов поиска циклов, поскольку уже при n>13 современные персональные ЭВМ не справляются с решением задачи за приемлемое время.
Постановка задачи.
Алгоритм поиска в глубину предусматривает представление вершин графа целыми числами от 1 до |V| и соглашение, что каждый цикл имеет корень в его наименьшей вершине. Поиск начинается в вершине s (по умолчанию s=1) и строится ориентированный путь (s, V1, v2, ..., vk), такой, что Vi > s, 1< i < k. Цикл объявляется построенным, только когда следующая вершина Vk+1 равна s. После порождения цикла (s, V1, v2, ., Vk, s) исследуем следующее ребро, выходящее из vk. Если все ребра, выходящие из вершины vk, уже исследованы, осуществляется возврат к предыдущей вершине Vk-1 и выбираются исходящие из неё пути и т. д. Этот процесс продолжается до тех пор, пока не произойдет попытка вернуться за начальную вершину s; тогда все циклы, содержащие вершину s, построены. Процедура повторяется для s = 1, 2, ., |V|.
55
Информатика, вычислительная техника и управление
Решение.
Поскольку выбор начальной вершины s осуществляется последовательно, то процедура поиска в глубину, описанная выше, также вызывается последовательно, что, конечно же, увеличивает время расчёта. В связи с этим предлагается осуществлять вызов процедуры для вершин s = 1, 2, ..., |V| параллельно. Существенным условием распараллеливания процедуры поиска в глубину является наличие независимых вычислений, т.е. вычислений с непересекающимися множествами записи. Для рассматриваемого случая поиска ориентированных циклов запись осуществляется только на этапе формирования ориентированного пути (s, vi, V2, ., Vk). Следовательно, разделив этапы формирования пути на несколько непересекающихся множеств записи, можно получить различные варианты распараллеливания процедуры поиска.
Например, рассмотрим вариант, когда вызов процедуры поиска осуществляется в двух потоках программного кода. Тогда для первого потока можно указать sпl = 1, а для второго — sm = 2, при этом вершину sni сделать недоступной либо путём изменения матрицы смежности графа G, т. е. удаления первого столбца и первой строки, либо путём введения соответствующей метки. Таким образом будут созданы два параллельных потока, одновременно решающих одну задачу в рамках одного процесса (см. табл 2, схема 1). После того как второй поток закончит поиск циклов, а сделает он это, как можно предположить, раньше, чем первый, поскольку количество рассматриваемых вершин для него меньше, он начинает рассматривать следующую вершину sп2 = 3, при этом также делая её недоступной. После того, как освободится первый поток, он выбирает для рассмотрения первую наименьшую из доступных вершин (например, для рассматриваемого случая sпl = 4). Действуя таким образом, два потока могут осуществить поиск циклов значительно быстрее, чем один. Развивая данный подход, можно увеличивать число параллельных потоков вычислений, например, до имеющегося числа процессоров.
Следует отметить, что высока вероятность ситуации, в которой второй поток успеет рассмотреть все вершины с s > 1, поскольку самым продолжительным потоком в данном случае будет первый. Например, рассмотрим количество циклов, появляющееся в полном ориентированном графе с n = 8 при добавлении одной новой вершины (см. табл. 1):
Lg - Ls = 125 664 - 16 064 = 109 600.
Оставшееся количество циклов (Ls = 16064) на порядок меньше, чем число циклов для первого потока, в связи с этим можно утверждать о возможном недоиспользовании возможностей второго потока. Тогда предложенную схему 1 можно упростить и предложить схему 2 (см. табл. 2), в которой на первый поток возлагается задача поиска всех циклов, содержащих первую вершину, а на второй поток — поиск всех циклов, не содержащих первую вершину.
Изменение кода программы [4] в соответствии с предложенными схемами 1 и 2 позволило создавать 2 параллельных потока внутри одного процесса программы [5, 6]. (Напомним, что программа представляет собой статистический набор команд, процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы, поток — некая сущность внутри процесса, получающая процессорное время для выполнения задачи [7]). Был проведен вычислительный эксперимент, результаты которого показали, что поиск по схемам 1 и 2 занимает одинаковое время (см. табл. 3).
Как показал эксперимент, работа программы по схемам 1 и 2 была одинаковой, более того, выявилась особенность, заключающаяся в том, что, как и предполагалось выше, первый поток работал гораздо дольше, чем второй, определяя все циклы с первой вершиной. Второй поток заканчивал свою работу и в дальнейшем простаивал.
56
Вестник Воронежского института МВД России №1 / 2015
Анализ монитора ресурсов в ОС Windows 7 показал, что на программу (а, следовательно, и на оба потока) выделено 14% процессорного времени.
Таблица 2
Блок-схемы алгоритмов распараллеливания поиска циклов
Таблица 3
Результаты вычислительного эксперимента (схема 1, схема 2)
n 8 9 10 11 12 13 14
Время расчёта, час:мин:сек
с выводом 0:00:13 0:01:52 0:21:32 11:29:29
без вывода < 1 c 0:00:02 0:00:24 0:04:41 0:58:23 12:58:13
На рис. 1 показано распределение времени расчёта при распараллеливании алгоритма поиска циклов (пунктирная линия) и без распараллеливания (сплошная линия). Как видно из рисунка, распараллеливание не дало выигрыша во времени, стоит предположить, что связано это с увеличением затрат на переключение между потоками для первой схемы и простаиванием второго потока для второй схемы, а также общим уменьшением процессорного времени на работу создаваемых фоновых потоков.
57
Информатика, вычислительная техника и управление
(по оси абсцисс — количество вершин)
Отсюда следует, что поскольку основные затраты будут связаны с поиском циклов на первом потоке, то необходимо предусмотреть возможность распараллеливания алгоритма на одном из этапов алгоритма поиска в глубину (см. табл. 4, схема 3). Для этого можно фиксировать не одну вершину s для отдельного потока, а две, три и более, делая этот процесс адаптивным, например, под количество свободных процессоров. Таким образом, может уменьшиться время простоя потока.
Таблица 4
Блок-схемы алгоритмов распараллеливания поиска циклов
Другим возможным способом уменьшения времени расчёта будет являться запуск не нескольких потоков (например, двух, как в рассматриваемых случаях), а нескольких программ, но с изменёнными алгоритмами поиска циклов (см. табл. 4, схема 4). В этом
58
Вестник Воронежского института МВД России №1 / 2015
случае распараллеливание будет происходить не на уровне потоков, а на уровне программ с последующим объединением результатов расчёта.
В табл. 5 приведены результаты вычислительного эксперимента для рассматриваемых схем.
Таблица 5
Результаты вычислительного эксперимента (схемы 3, 4)
n 8 9 10 11 12 13 14
Время расчёта, час:мин:сек
Схема 3
с выводом 0:00:52 0:09:13 1:02:34 2:43:23 9:52:10 23:14:47
без вывода 0:00:09 0:01:46 0:28:29 6:48:03
Схема 4
с выводом 0:00:07 0:00:51 0:15:13 2:29:08 4:00:10 13:34:09
без вывода 0:00:01 0:00:14 0:02:50 0:46:43 9:08:58
Выигрыш по времени между схемами расчёта 1 и 4 показан на рис. 2.
Рис. 2. Выигрыш по времени при переходе от схемы 1 к схеме 4 при поиске циклов
без вывода
Анализ монитора ресурсов для схемы 4 показал, что на каждую программу выделено было 12% процессорного времени. Этим объясняется выигрыш по времени при использовании схемы 4 для поиска циклов.
Ниже представлен график времени поиска циклов для рассматриваемых схем. Как видно из рис. 3, наименьшее время поиска циклов обеспечивается схемой 3. Это говорит о верности предложенного подхода к разработке алгоритмов распараллеливания поиска циклов в графе.
59
Информатика, вычислительная техника и управление
Следует добавить, что в последующем имеется возможность ещё большего использования вычислительных ресурсов для поиска циклов, поскольку создание только 2 потоков не задействует все вычислительные ресурсы используемых ЭВМ. Таким образом, необходимо фиксировать 2 и более вершин графа для поиска циклов в каждом параллельном потоке.
Заключение.
Предложенные блок-схемы алгоритмов распараллеливания поиска циклов в графе были реализованы в виде программного кода, что позволило экспериментально произвести оценку их эффективности. Вычислительный эксперимент показал, что наиболее перспективно использование подхода, реализованного в схеме 3. Стоит отметить, что для поиска и вывода 18 348 340 113 циклов для схемы 3 потребовалось всего 23 часа 14 минут 47 секунд!!! Этот результат не является минимально возможным, поскольку создание схемы с N > 2 потоками позволит ещё лучше использовать имеющиеся вычислительные ресурсы.
ЛИТЕРАТУРА
1. Сысоев В.В. Конфликт. Сотрудничество. Независимость. Системное взаимодействие в структурно-параметрическом представлении. — М.: Московская академия экономики и права, 1999. — 151 с.
2. Пьянков О.В. Численный анализ внутрисистемного конфликта // Вестник Воронежского государственного технического университета. — 2010. — Т. 6. — № 4.
— С. 74—76.
3. Рейнгольд Э., Нивергельт Ю. Комбинаторные алгоритмы. Теория и практика.
— М.: Мир, 1978. — 332 с.
4. Пьянков О.В. Комплексная оценка сложных систем на основе теории конфликта. — Свидетельство о государственной регистрации программ для ЭВМ № 2014616925 от 08.07.2014 г. / Федеральная служба по интеллектуальной собственности.
5. Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования: пер. с англ. — М.: Вильямс, 2003. — 512 с.
6. Фленов М.Е. Библия Delphi. — 3-е изд., перераб., и доп. — СПб.: БХВ-Петер-бург, 2011. — 688 с.
60
Вестник Воронежского института МВД России №1 / 2015
7. Русинович М., Соломон Д. Внутреннее устройство Microsoft Windows. — 6-е изд. — СПб.: Питер, 2013. — 800 с.
REFERENCES
1. Syisoev V.V. Konflikt. Sotrudnichestvo. Nezavisimost. Sistemnoe vzaimodeystvie v strukturno-parametricheskom predstavlenii. — M.: Moskovskaya akademiya ekonomiki i prava, 1999. — 151 s.
2. Pyankov O.V. Chislennyiy analiz vnutrisistemnogo konflikta // Vestnik Voronezh-skogo gosudarstvennogo tehnicheskogo universiteta. — 2010. — T. 6. — # 4. — S. 74—76.
3. Reyngold E., Nivergelt Yu. Kombinatornyie algoritmyi. Teoriya i praktika. — M.: Mir, 1978. — 332 s.
4. Pyankov O.V. Kompleksnaya otsenka slozhnyih sistem na osnove teorii konflikta.
— Svidetelstvo o gosudarstvennoy registratsii programm dlya EVM # 2014616925 ot 08.07.2014 g. / Federalnaya sluzhba po intellektualnoy sobstvennosti.
5. Endryus G.R. Osnovyi mnogopotochnogo, parallelnogo i raspredelennogo pro-grammirovaniya: per. s angl. — M.: Izdatelskiy dom «Vilyams», 2003. — 512 s.
6. Flenov M.E. Bibliya Delphi. — 3-e izd., pererab., i dop. — SPb.: BHV-Peterburg, 2011. — 688 s.
7. Rusinovich M., Solomon D. Vnutrennee ustroystvo Microsoft Windows. — 6-e izd.
— SPb.: Piter, 2013. — 800 s.
СВЕДЕНИЯ ОБ АВТОРЕ
Пьянков Олег Викторович. Заместитель начальника кафедры инфокоммуникационных систем и технологий. Кандидат технических наук, доцент.
Воронежский институт МВД России.
E-mail: [email protected]
Россия, 394065, г. Воронеж, проспект Патриотов, 53. Тел. (473) 200-52-33.
Pyankov Oleg Victorovich. The deputy chief of chair of Infocommunication Systems and Technologies. Candidate of technical sciences, assistant professor.
Voronezh Institute of the Ministry of the Interior of Russia.
E-mail: [email protected]
Work address: Russia, 394065, Voronezh, Prospect Patriotov, 53. Tel. (473) 200-52-33.
Ключевые слова: алгоритмы распараллеливания поиска циклов; граф; вычислительный эксперимент.
Key words: search algorithms parallelization cycles; graph; numerical experiment.
УДК 519.6
61