Научная статья на тему 'Разнородный блочный алгоритм поиска кратчайших путей между всеми парами вершин графа'

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

CC BY
496
40
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АЛГОРИТМ ФЛОЙДА-УОРШЕЛЛА / КРАТЧАЙШИЙ ПУТЬ / РАЗНОРОДНЫЙ БЛОЧНЫЙ АЛГОРИТМ / МНОГОЯДЕРНАЯ СИСТЕМА / РАЗДЕЛЯЕМАЯ КЭШ ПАМЯТЬ

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

Рассматривается проблема поиска кратчайших путей между всеми парами вершин взвешенного ориентированного графа. Известны алгоритмы Дейкстры и Флойда-Уоршелла, однородные блочные и параллельные алгоритмы и другие алгоритмы решения этой проблемы. Предлагается новый разнородный блочный алгоритм, рассматривающий различные типы блоков и учитывающий разделяемую иерархическую организации памяти и многоядерность процессоров при вычислении блока каждого типа. На теоретическом и экспериментальном уровнях проводится сравнение предлагаемых разнородных алгоритмов вычисления блоков с общепринятым однородным универсальным алгоритмом пересчета блока. Основной акцент делается на использовании вариантов неоднородности, взаимодействия блоков во время вычислений и вариаций в размере блока, размере матрицы блоков и общего количества блоков с целью выявления возможности сокращения объема вычислений, производимых при расчете блока, сокращения активности работы с кэш памятью процессора и выявления влияния времени расчета каждого типа блока на общее время выполнения разнородного блочного алгоритма. Предложен рекуррентный ресинхронизированный алгоритм расчета диагонального блока (D0), улучшающий использование кэш памяти процессора и сокращающий количество итераций и размер данных, необходимых для расчёта диагонального блока до 3 раз, что дает ускорение в расчете диагонального блока до 60%. Для более эффективной работы с кэш памятью предложены варианты перестановки основных циклов k-i-j алгоритмов расчета блоков креста (C1, C2) и обновляемых блоков (U3), использование которых в комбинации с алгоритмом расчета диагонального блока сокращает общее время работы разнородного блочного алгоритма на 13% в среднем по сравнению с однородным блочным алгоритмом.

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

The problem of finding the shortest paths between all pairs of vertices in a weighted directed graph is considered. The algorithms of Dijkstra and Floyd-Warshall, homogeneous block and parallel algorithms and other algorithms of solving thisproblem are known. A new heterogeneous block algorithm is proposed which considers various types of blocks and takes into account the shared hierarchical memory organization and multi-core processors for calculating each type of block. The proposed heterogeneous block computing algorithms are compared with the generally accepted homogeneous universal block calculation algorithm at theoretical and experimental levels. The main emphasis is on using the nature of the heterogeneity, the interaction of blocks during computation and the variation in block size, the size of the block matrix and the total number of blocks in order to identify the possibility of reducing the amount of computation performed during the calculation of the block, reducing the activity of the processor’s cache memory and determining the influence of the calculation time of each block type on the total execution time of the heterogeneous block algorithm. A recurrent resynchronized algorithm for calculating the diagonal block (D0) is proposed, which improves the use of the processor’s cache and reduces the number of iterations up to 3 times that are necessary to calculate the diagonal block, which implies the acceleration in calculating the diagonal block up to 60%. For more efficient work with the cache memory, variants of permutation of the basic loops k-i-j in the algorithms of calculating the blocks of the cross (C1 and C2) and the updated blocks (U3) are proposed. These permutations in combination with the proposed algorithm for calculating the diagonal block reduce the total runtime of the heterogeneous block algorithm to 13% on average against the homogeneous block algorithm.

Текст научной работы на тему «Разнородный блочный алгоритм поиска кратчайших путей между всеми парами вершин графа»

УДК 004.272.2 (075.8)

А. А. ПРИХОЖИЙ, О. Н. КАРАСИК

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

ВЕРШИН ГРАФА

Белорусский национальный технический университет

Рассматривается проблема поиска кратчайших путей между всеми парами вершин взвешенного ориентированного графа. Известны алгоритмы Дейкстры и Флойда-Уоршелла, однородные блочные и параллельные алгоритмы и другие алгоритмы решения этой проблемы. Предлагается новый разнородный блочный алгоритм, рассматривающий различные типы блоков и учитывающий разделяемую иерархическую организации памяти и многоядерность процессоров при вычислении блока каждого типа. На теоретическом и экспериментальном уровнях проводится сравнение предлагаемых разнородных алгоритмов вычисления блоков с общепринятым однородным универсальным алгоритмом пересчета блока. Основной акцент делается на использовании вариантов неоднородности, взаимодействия блоков во время вычислений и вариаций в размере блока, размере матрицы блоков и общего количества блоков с целью выявления возможности сокращения объема вычислений, производимых при расчете блока, сокращения активности работы с кэш памятью процессора и выявления влияния времени расчета каждого типа блока на общее время выполнения разнородного блочного алгоритма. Предложен рекуррентный ресинхронизированный алгоритм расчета диагонального блока (00), улучшающий использование кэш памяти процессора и сокращающий количество итераций и размер данных, необходимых для расчёта диагонального блока до 3 раз, что дает ускорение в расчете диагонального блока до 60%. Для более эффективной работы с кэш памятью предложены варианты перестановки основных циклов алгоритмов расчета блоков креста (С1, С2) и обновляемых блоков (и3), использование которых в комбинации с алгоритмом расчета диагонального блока сокращает общее время работы разнородного блочного алгоритма на 13% в среднем по сравнению с однородным блочным алгоритмом.

Ключевые слова: алгоритм Флойда-Уоршелла, кратчайший путь, разнородный блочный алгоритм, многоядерная система, разделяемая кэш память.

Введение

Задача поиска кратчайших путей на взвешенном графе [1-10] формулируется в различных постановках: для ориентированного или неориентированного, разреженного или плотного графа, со взвешенными ребрами и/или взвешенными вершинами, положительными или возможно отрицательными весами, между парой вершин или всеми парами вершин, при обязательном проходе всех вершин (задача коммивояжера) или необязательном проходе и т. д. Вычислительная сложность различных постановок задач различная: поиск кратчайшего пути между парой вершин решается за квадратичное время алгоритмом Дейкстры, поиск кратчайших путей между всеми парами вершин решается за кубическое время алгоритмом Флойда-Уоршелла, поиск кратчайшего пути при обязательном проходе всех вер-

шин полного графа является NP-трудной задачей.

Задача поиска кратчайших путей на графе находит практическое применение при решении многих задач в микроэлектронике, компьютерных сетях и программировании, компьютерных играх, транспортной отрасли и многих других. Размер графов может достигать таких больших размеров, что даже для решения задачи поиска алгоритмами полиномиальной степени сложности может потребоваться нереально большое процессорное время на современной вычислительной технике. Так алгоритм Флойда-Уоршелла, который совершенствуется и развивается в настоящей статье, затрачивает время на поиск, пропорциональное величине 1.25х1011для графа на 5000 вершинах, и практически мало приемлем уже для такого размера графа.

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

Алгоритм Флойда-Уоршелла

Пусть ориентированный взвешенный граф G = (V, E) с множеством V из N вершин и множеством ребер E представлен матрицей W положительных весов ребер. Петли и параллельные ребра отсутствуют, при этом wii = 0 при i = 0...N-1 и Wjj= да при (i, j)£E. Длины кратчайших путей между парами вершин опишем матрицей D. Алгоритм Флойда-Уоршелла [1, 2] пересчитывает матрицу D на шагах 0...k...N-1, при этом образуется последовательность матриц D(0)...D(k)...D(N-1), в которой D(0) = W, D(k) - матрица кратчайших расстояний после нахождения кратчайших путей, проходящих через вершину k, и D(N-1) - результирующая матрица кратчайших расстояний. Переход от шага k-1 к шагу k иллюстрируется на рис. 1, при этом кратчайший путь DiJ(k) от вершины i до вершины j пересчитывается через матрицу D(k-1) и k-ые строку и столбец матрицы D(k):

Dj (k) = min {Dj (k -1), Dlk (k) + Dkj (k)} (1)

С увеличением k строка и столбец смещаются по матрице D(k) сверху вниз слева направо. Псевдокод алгоритма Флойда-Уоршелла (рис. 2) состоит из трех циклов по i, j и k. На всех шагах он работает с матрицей одинаковой размерности NxN. Алгоритм имеет высокую однородность, а его вычислительная сложность равна O(N3). Заметим, что перестановка цикла по k с циклами по i и j приводит к неверным результатам.

Однородный блочный алгоритм поиска кратчайших путей на графе

Построение блочного алгоритма поиска кратчайших путей на графе помогает решить две важнейшие проблемы: 1) локализовать работу с многоуровневой памятью и тем самым ускорить выполнение операций записи и чтения из памяти; 2) организовать параллельную многопоточную работу блоков на многоядерной системе. В работах [3, 4] алгоритм Флой-да-Уоршелла расширен до блочного алгоритма поиска кратчайших путей на графе, а в работах [5, 6] показаны возможности распараллеливания этого блочного алгоритма. Матрица D размерностью NxN разбивается на блоки размерностью BxB, при этом образуется матрица блоков размерностью MxM, где M=N/B. Псевдокод блочного алгоритма показан на рис. 3. Функционирование блочного алгоритма BlockedFW представляется циклом по блокам m = 0..M-1, на каждой итерации которого выполняется упорядоченный однократный пе-

Рис. 1. Иллюстрация работы алгоритма Флойда-Уоршелла Algorithm Floyd Warshall

ü

// type DO

// type С1 // type C2

// type С1 // type C2

Algorithm Blocketl_FW { for m=O...M-l {

CalBlock (Bmm,Bm-m,Bm_m); fori=0...m-l {

CalBlock (Bi,m,Bi,m,Bm,m); CalBlock (Bm I,Bm.m,Bm,f);

};

for i=m+l ...M-l {

CalBlock (Bi m,Bi,m,Bm,m);

CalBlock (BmJ,B„,,rl,BmJ); };

fori=0...m-l { for j=0.. .m—1

CalBlock (BL|,BLm,BmJ); // type U3 for j=m+l .. .M—1

CalBlock (Bj j,B, m,Bm,); // type U3

};

for i=m+l ...M-l { for j=0.. .m—1

CalBlock (BiJ,Bi,m,Bmj); // type U3 for j=m+l ...M-l

CalBlock (Bii,Bim,Bmj); // type U3

!;

Рис. 2. Псевдокод алгоритма Флойда-Уоршелла

Рис. 3. Псевдокод блочного алгоритма

Рис. 4. Алгоритм вычисления блока

ресчет всех блоков одним и тем же универсальным однородным алгоритмом CalBlock, представленным на рис. 4, где аргумент B1 -вычисляемый блок, а аргументы B2 и B3 - блоки, через которые осуществляется вычисление. На M итерациях цикла каждый блок пере-считывается M раз. Алгоритм блока имеет вычислительную сложность O(B3), которая достаточно быстро растет с увеличением размера блока. Заметим, алгоритм CalBlock из-за универсальности трудно поддается преобразованию и модификации.

Процесс работы блочного алгоритма иллюстрируется рис. 5. Тело главного цикла алгоритма можно разбить на три последовательно реализуемых шага. Первый шаг рассчитывает диагональный (D0 - Diagonal) блок Bmm. Второй шаг рассчитывает через Bmm блоки, лежащие на кресте (C1 и C2 - Cross), образованном строкой m и столбцом m матрицы блоков с пересечением на блоке Bmm. Третий шаг обновляет (U3 - Update) остальные блоки посредством блоков креста. При увеличении m крест перемещается из левого верхнего в правый нижний угол матрицы блоков. На одной итерации цикла по m вычисляется один диагональный блок D, вычисляется 2xM-1 блоков креста C и вычисляется Mx(M-2) обновляемых блоков U. Всего выполняется M3 пересчетов блоков.

Анализ последовательно-параллельного выполнения блоков показывает, что блок типа D0 работает последовательно с остальными блоками, все блоки типа C1 и C2 могут работать взаимно параллельно, все блоки типа U3 могут работать также взаимно параллельно, но последовательно с блоками C1 и C2.

Разнородный блочный алгоритм

Внимательный анализ всех вызовов алгоритма CalBlock вычисления блока показывает,

Рис. 5. Иллюстрация процесса вычисления блоков блочным алгоритмом

что в них различаются четыре профиля аргументов В1, В2 и В3. Профили аргументов тесно взаимосвязаны со спецификой работы самого алгоритма. Тип 0 профиля, когда В1 = В2 = В3, встречается только для диагонального блока D0 (рис. 3). Тип 1 профиля, когда В1 = В2 Ф В3, встречается для блоков С1 столбца креста. Тип 2 профиля, когда В1 = В3 Ф В2, встречается для блоков С2 строки креста. Тип 3 профиля, когда В1 Ф В2 Ф В3, встречается для остальных блоков и3. Идентичность или неидентичность аргументов алгоритма вычисления блока и особенности его поведения в каждом случае можно с пользой использовать для поиска методов сокращения вычислительных ресурсов, потребляемых во время выполнения алгоритма. В частности, целью является сокращение активности работы с кэшем, а также сокращение времени вычисления блока. Новые более эффективные алгоритмы вычисления блоков построим путем формальных преобразований исходного алгоритма с учетом особенностей вычисления блока каждого типа.

Новый алгоритм вычисления диагонального блока

В однородном блочном алгоритме все блоки вычисляются на основе классического алгоритма Флойда-Уоршелла (рис. 4) независимо от типа блока. Главный принцип заключается в последовательном рассмотрении вершин к от

0 до В-1, ассоциируемых с блоками В2 и В3, с целью сокращения расстояния от вершины

1 до вершины у, находящегося в блоке В1. При вычислении диагонального блока типа D0 блоки В2 и В3идентичны блоку В1. Изменим главный принцип алгоритма Флойда-Уоршелла. Последовательность вершин к от 0 до В-1 будем ассоциировать с процессом пошагового добавления очередной вершины к графу G'. В результате образуется последовательность

Рис. 6. Рекуррентная процедура вычисления диагонального блока

графов G'(0), G'(1)...G'(k)...G'(B-1). Матрицу расстояний между парами вершин в графе G'(k) обозначим B1(k). Представим алгоритм рекуррентной процедурой, вычисляющей матрицу B1(k) по матрице B1(k-1) и весам wik и wkj- ребер, соединяющих добавляемую вершину k с вершинами i, je{1, ..., k-1} (рис. 6). Сначала процедура вычисляет длины B1ik(k) в столбце k по формуле

B\k (k) = min (Bl t] (k -1) + wJk ) . (2) j=1...k-1 \ J >

Длины Bkj(k) в строке k вычисляются по аналогичной формуле. Затем процедура рассчитывает длины B1ij(k) по длинам B 1ij (k-1) при i, j= 0, ..., k-1, используя формулу

B\j (k) = min {B1 j (k -1), B\k (k) + B1kj (k)} .(3)

Рекуррентная процедура циклически выполняется для всех вершин графа G'. На каждой ее итерации поочередно выполняются две операции: добавление A (Adding) новой строки и столбца для вершины k; обновление U (Updating) матрицы B1(k-1) до матрицы B1(k). Выполнение цикла по k порождает последовательность выполнения пар операций A и U:

AoUo - A1U1 - A2U2 - ... - An_1Un_1. (4)

Псевдокод рекуррентной процедуры CalBlockDO показан на рис. 7. Значения кратчайших путей от вершин 1, ..., k-1 до вершины k накапливаются в векторе br, а от вершины k до вершин 1, ..., k-1 - в векторе bc. В отличие от классического алгоритма (рис. 3), в котором число итераций наиболее вложенного из трех циклов по i, J и k равно в модифицированном алгоритме количество итераций самого вложенного цикла и объем обрабатываемых данных сокращаются до трех раз из-за сокращения числа значений индексов i иJ. Это является важным источником уменьшения вычислительной сложности нового алгоритма пересчета диагонального блока.

Ресинхронизация рекуррентной процедуры. Анализ информационных зависимостей между операциями AkUk в (4) показывает, что их нельзя совместить во вложенных циклах по i и j. В то же время пара операций UkAk+1 совместима в этих циклах, что предоставляет возможность ресинхронизации последовательности пар операций (4) до последовательности операций

U0A1 - U1A2 - ... - U#-2A#-1 - UW-1. (5) В последовательности (5) операция A0 удалена за счет присваивания нулевого значения матрице 51(0), которая описывает граф на одной вершине. Ресинхронизация позволяет повысить уровень параллелизма и сократить критические пути в теле вложенных циклов алгоритма. В паре ЦЛ^ операция Ц есть отложенное обновление матрицы B1(k), которое выполняется одновременно с добавлением вершины k+ 1.

Псевдокод ресинхронизированной рекуррентной процедуры CalBlockDOR показан на рис. 8. Ее вызов заменяет первый вызов алгоритма CalBlock в алгоритме BlockedFW, показанном на рис. 3. Чтобы выполнить операцию Uk, вычисленные для вершины k строка и столбец матрицы B1(k) сохраняются в векторах d и d соответственно. На первой итерации цикла по k значения элементов этих векторов равны да. Значения весов входных для вершины k ребер доступны через вектор wr, заранее сгенерированный на предыдущей итерации цикла по k. Операция row(B1, k) возвращает строку k матрицы B1.

Скалярная переменная й^т используется для формирования значения элемента вектора

Рис. 7. Псевдокод рекуррентной процедуры

А^огИкт Са1 В1оск_1)0К( В1) {

с1го = °о; м/о^В'о,;

1Ъг к=1 ...В-1 { с!с = гош(В',к-1); ш^гошСВ'Д);

Гог ¡—О.. .к-1 { Ьс; — со; } й>Н=0...к-1 {

ьгш,п =

Гог|~0... к-1 { //ОрегаЫопз икАк+1 г = сГ, + с1С|; Н'(В1 и > г) В1Й = г;

5, = В1,, + ХУ1^

ЩЬГтш > Бо) ЬГт;п — 30;

> 8,) Щ = 8,;

Ьг, = ъ'

!

{

I

й>г НО...к-1

} ш к = В к>к+1;

// Updating

Сэг ¡-О...В-2 { Гог]-0... В-2 {

х = + (1°,; ¡ПВ1,, > х) В1,, - х;

}}}

Рис. 8. Новый ресинхронизированный алгоритм вычисления диагонального блока

Ьг. Значение элемента Ьс формируется в самом векторе Ьс. Значение переменной Ь^п рассчитывается по элементу В1 матрицы и весу ребра м]к, находящемуся в векторе мг. Значение переменной Ьс рассчитывается по элементу В1 матрицы и весу ребра му, находящемуся в векторе мс. Значения Ьгтт и Ьс рассчитывается на одной и той же итерации, следовательно, значение В1 должно быть предварительно обновлено на этой же итерации. Сформированные векторы Ьг и Ьс записываются в матрицу В1. Конечная одиночная операция выполняется двумя дополнительными вложенными циклами после завершения цикла по к.

Преобразование алгоритмов вычисления блоков креста и обновляемых блоков

После того, как с алгоритма Са1В1оск снята реализация блока типа D0, этот алгоритм продолжает реализовывать блоки типа С1, С2

и и3. При этом Са1В1оск приобретает новые свойства, важнейшим из которых является появившаяся возможность произвольной перестановки циклов по переменным /, ] и к. Всего возможно шесть вариантов перестановки, из которых перестановка к-1-] использована в Са1В1оск. Важнейшие оставшиеся варианты перестановки рассмотрим с точки зрения повышения производительности алгоритма.

Выбор варианта /-к-] и устранение идентичных блоков во входных аргументах дает три алгоритма вычисления блоков типа С1, С2 и и3 (рис. 9). В каждый из них, с целью ускорения вычислений, введены по три дополнительные векторные переменные и одной скалярной переменной. Достоинством алгоритмов является последовательная обработка соседних элементов векторов и отсутствие перескакивания на отдаленные участки памяти, что облегчает работу кэш.

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

А^огМт Са№1оск_С1(В\в3) { Ля ¡=0...В-1 { ЬГ = го\у(ВМ); (Л 1 = гсг^В1,!); й>гк=0... В-1 { Ы =Ыгк; ЬЗг - го\у(В3,к); й)г^0...В-1 { в = Ы + ЬЗг,;

г, > в) ¿1 = э;

}

}})

Л^огМт Са1В1оск_С2(В ,В ) { Аэг ¡=0...В-1 { Ь2Г = row(B2,i); ёГ = гош(В1,0; й)гк=0... В-1 { Ь2 = Ь2гк; Ы г = го\у(В',к); й>г ]=0...В-1 { в = Ь2 + Ы г,; Щс11 ^ > в) (11 ^ = в;

}

}}}

А^огШт Са1В1оск_Ш(В',В2,В3) { 6)1-1=0...В-1 { Ь2Г - го\у(В2Д); с31 r = row(B1,i); 6>гк=0... В-1 { Ь2 = Ь2гк; ЬЗ1 - гош(В3,к); 6)^=0...В-1 { в = Ь2 + ЬЗ ¡А[ё1г, > в) ¿1г, = в;

}

}}}

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

б

Рис. 9. Преобразованные по варианту /-к-] алгоритмы остальных блоков: а - тип С1, б - тип С2, в - тип и3

а

в

Algorithm Са1В1оек_С1(В',В3) { for i=0...B-l { blr = row(B',i); dl1 = row(B1,i); forj=0...B-l {

dmin =

fork=0... B-l { s = blrk + B3kj; if(dmin > s) drain - s;

}}

^ 1 j

Algorithm CalBlock_C2(B ,B ) { fori=0...B-l { b2' = row(B2,i); dl r = row(B',i); forj=0...B-l {

dmin =

fork=0... B-l {

s = Ъ2\ + B'kj; if(dmin > s) dmin = s;

}}

d 1 'j - dn

б

Algorithm СаШкигкиЗСВ'^З3) { for i=0...B-l { b2r = row(B2,i); dl1 =row(B',i); for j=0...B-l {

dmin = °0;

for k=0... B-l {

s = b2rk + B3kj; if(dmin > S) dmin = s;

}

if(dl rj > dmin) dl rj = dmi„;

}}

Рис. 10. Алгоритмы блоков, преобразованные по варианту 1-)-к: а - тип С1, б - тип С2, в - тип ТО

Рис. 11. Ускорение в% нового алгоритма диагонального блока по сравнению с алгоритмом Флойда-Уоршелла в зависимости от размера блока на двух архитектурах процессора: сри1 (сплошная), сри2 (пунктирная)

Рис. 12. Ускорение в % алгоритма разнородного блока по сравнению с алгоритмом однородного блока в зависимости от размера В блока при М = 4 и М= 4*В: блоки всех типов на сри1 (сплошная), блоки всех типов на сри2 (пунктирная), диагональный блок на сри1 (штрих-пунктирная), диагональный блок на сри2 (точечная)

а

в

Результаты вычислительных экспериментов

Целью экспериментов явилось выявление зависимости времени работы всего разнородного блочного алгоритма и алгоритмов вычисления блоков четырех типов от размера графа, размера блока, числа блоков, а также сравнение нового разнородного блочного алгоритма с известным однородным блочным алгоритмом. Использованы полные графы со случайными весами на ребрах, для которых задача о кратчайших путях наиболее трудоемка. Эксперименты проведены на многоядерных процессорах Intel® Core™ i3 CPU 550 @ 3.20 GHz 3.19 GHz (в дальнейшем cpu 1) и Intel(R) Core(TM) i5-6200UCPU @ 2.20 GHz (в дальнейшем cpu2).

Наилучшие результаты дал новый ресин-хронизированный алгоритм CalBlock_D0R вычисления диагонального блока. Рис. 11 показывает его ускорение по сравнению с алгоритмом CalBlock Флойда-Уоршелла. При увеличении размера графа до 4000 вершин ускорение стабильно составляет чуть больше 30% на

сри1 и до 60% на сри2. Благодаря такому значительному ускорению разнородный блочный алгоритм выгоднее использовать при небольшом числе блоков, так как число диагональных блоков равно М при общем числе вычисляемых блоков М3. Так при М= 2 число диагональных блоков составляет 25%, при М = 4-6.25%, при М = 8 - только 1.56%.

Рис. 12 сравнивает неоднородный блочный алгоритм с однородным блочным алгоритмом при одновременном росте размера блока со 100 до 800 и росте размера графа с 400 до 3200 вершин, при этом размер матрицы блоков постоянен и составляет 4x4. Новый алгоритм вычисления диагонального блока показал значительное ускорение: на сри1 оно в среднем выросло на 25.5%, на сри2 - 47.29%. С учетом блоков всех четырех типов разнородный блочный алгоритм дал значительно меньшее ускорение, которое составило от 0.84% до 2.63% на сри1 и составило от 0.74% до 8.05% на сри2. Это свидетельствует о том, что алгоритмы СаШЬс^С1, СаШЬс^С2 и CalBlock_U3, изображенные на рис. 9, дают ускорение на

ние нового разнородного блочного алгоритма по сравнению с однородным блочным алгоритмом в среднем на 10.88% на cpul и на 13.67% на cpu2 (рис. 13).

Заключение

Алгоритм Флойда-Уоршелла и построенный на его основе блочный алгоритм поиска кратчайших путей между всеми парами вершин взвешенного графа отличаются однородностью структуры и универсальностью построения базовых компонентов. В статье предложен неоднородный блочный алгоритм, различающий четыре типа блоков матрицы кратчайших путей и четыре отдельных более эффективных алгоритма для вычисления блоков каждого типа. Алгоритм вычисления диагонального блока дал наибольший прирост производительности (до 60%), а производительность всего разнородного блочного алгоритма при выполнении на одном процессоре с кэш памятью повысилась на 13.67% в среднем.

References

1. Floyd, R. W. Algorithm 97: Shortest path / R. W. Floyd // Communications of the ACM, 1962, 5(6), p. 345.

2. Hofner, P. Dijkstra, Floyd and Warshall Meet Kleene/ P. Hofner and B. Moller // Formal Aspect of Computing, Vol.24, No.4, 2012, № 2, pp. 459-476.

3. Venkataraman, G. A Blocked All-Pairs Shortest Paths Algorithm / G. Venkataraman, S. Sahni, S. Mukhopadhyaya // Journal of Experimental Algorithmics (JEA), Vol 8, 2003, pp. 857-874

4. Park, J. S. Optimizing graph algorithms for improved cache performance / J. S. Park, M. Penner, and V. K. Prasanna // IEEE Trans. on Parallel and Distributed Systems, 2004, 15(9), pp. 769-782.

5. Albalawi, E. Task Level Parallelization of All Pair Shortest Path Algorithm in OpenMP 3.0 / E. Albalawi, P. Thu-lasiraman, R. Thulasiram // 2nd International Conference on Advances in Computer Science and Engineering (CSE 2013), 2013, Los Angeles, CA, July 1-2, 2013, pp. 109-112.

6. Tang, P. Rapid Development of Parallel Blocked All-Pairs Shortest Paths Code for Multi-Core Computers / P. Tang // IEEE SOUTHEASTCON 2014, pp. 1-7.

7. Solomonik, E. Minimizing Communication in All Pairs Shortest Paths / E. Solomonik, A. Buluc, and J. Demmel // IEEE 27th International Symposium on Parallel & Distributed Processing, 2013, pp. 548-559.

8. Singh, A. Performance Analysis of Floyd Warshall Algorithm vs Rectangular Algorithm / A. Singh, P. K. Mishra // International Journal of Computer Applications, Vol.107, No.16, 2014, pp. 23-27.

9. Madduri, K. An Experimental Study of a Parallel Shortest Path Algorithm for Solving Large-Scale Graph Instances / K Madduri,. D. Bader, J. W. Berry, J. R. Crobak // Proceedings of the Ninth Workshop on Algorithm Engineering and Experiments (ALENEX), 2007, pp. 23-35.

10. Prihozhy, A. Synthesis and Optimization of Pipelines for HW Implementations of Dataflow Programs / A. Prihozhy, E. Bezati, H. Rahman, M. Mattavelli // IEEE Trans. on CAD of Integrated Circuits and Systems, Vol. 34, No. 10, 2015, pp. 1613-1626.

Поступила После доработки Принята к печати

01.07.2017 06.07.2017 10.09.2017

Prihozhy A., Karasik O. HETEROGENOUS BLOCKED ALL- PAIRS SHORTEST PATHS ALGORITHM

Belarusian National Technical University

The problem offinding the shortest paths between all pairs of vertices in a weighted directed graph is considered. The algorithms of Dijkstra and Floyd-Warshall, homogeneous block and parallel algorithms and other algorithms of solving this

50,00 45,00

40,00 35,00

30,00 25,00

20,00 15,00

10,00 5,00

0,00

А

1 ' » / 1

| »

/ 1 \ -___- — •

Рис. 13. Ускорение в % разнородного блочного алгоритма по сравнению с однородным блочным алгоритмом в зависимости от размера блока В = 100-2000 при М = 2 и N = 2*В на сри1 (сплошная) и сри2 (пунктирная)

блоках типа С1, С2 и и3 значительно меньшее, чем CalBlock_D0R по сравнению с CalBlock. При этом отмеченные выше свойства алгоритмов CalBlock_C1, CalBlock_C2 и CalBlock_U3 составляют потенциал для дальнейшего повышения производительности разнородного блочного алгоритма. Действительно, уменьшение матрицы блоков с 4x4 до 2x2 дает ускоре-

problem are known. A new heterogeneous block algorithm is proposed which considers various types of blocks and takes into account the shared hierarchical memory organization and multi-core processors for calculating each type of block. The proposed heterogeneous block computing algorithms are compared with the generally accepted homogeneous universal block calculation algorithm at theoretical and experimental levels. The main emphasis is on using the nature of the heterogeneity, the interaction of blocks during computation and the variation in block size, the size of the block matrix and the total number of blocks in order to identify the possibility of reducing the amount of computation performed during the calculation of the block, reducing the activity of the processor's cache memory and determining the influence of the calculation time of each block type on the total execution time of the heterogeneous block algorithm. A recurrent resynchronized algorithm for calculating the diagonal block (D0) is proposed, which improves the use of the processor's cache and reduces the number of iterations up to 3 times that are necessary to calculate the diagonal block, which implies the acceleration in calculating the diagonal block up to 60%. For more efficient work with the cache memory, variants of permutation of the basic loops k-i-j in the algorithms of calculating the blocks of the cross (C1 and C2) and the updated blocks (U3) are proposed. These permutations in combination with the proposed algorithm for calculating the diagonal block reduce the total runtime of the heterogeneous block algorithm to 13% on average against the homogeneous block algorithm.

Key words: Floyd-Warshall algorithm, all pairs shortest paths, heterogeneous block algorithm, multi-core system, shared cache memory.

Прихожий Анатолий Алексеевич - профессор кафедры программного обеспечения вычислительной техники и автоматизированных систем БНТУ, доктор технических наук (1999), профессор (2001). Научные интересы в области языков программирования и описания цифровой аппратауры, распа-раллелтвающих компиляторов, инструментальных средств проектирования программных и аппаратных систем на логическом, поведенческом и системном уровнях. Имеет более 300 научных публикаций в Восточной и Западной Европе, США и Канаде.

Anatoly Prihozhy is a full professor at the Computer and system software department of Belarusian national technical university, doctor of science (1999) and professor (2001). His research interests include programming and hardware description languages, parallelizing compilers, and computer aided design tools for software and hardware at logic, high and system levels. He has over 300 publications in Eastern and Western Europe, USA and Canada.

Карасик Олег Николаевич - аспирант кафедры «Программное обеспечение вычислительной техники и автоматизированных систем» БНТУ, ведущий инженер программист компании «EPAM Systems», научные интересы в области параллельных многопоточных приложений и распараллеливания для многоядерных и многопроцессорных систем.

Karasik Aleh is a postgraduate of the Computer and system software department of Belarusian national technical university, and a leading software engineer at EPAM Systems. His research interests include parallel multithreaded applications and the parallelization for multicore and multiprocessor systems.

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