ISSN 1992-6502 (P ri nt)_
2014. Т. 18, № 4 (65).С. 198-205
Ъыьмт QjrAQnQj
ISSN 2225-2789 (Online) http://journal.ugatu.ac.ru
УДК 004.65
Использование графических ускорителей
для решения задач класса «Data Intensive»
а. с. Колганов
[email protected] ФГБУН «Институт прикладной математики им. М. В. Келдыша РАН» (ИМП) Поступила в редакцию 29 сентября 2014 г.
Аннотация. Разработка параллельных алгоритмов для решения задач класса Dataintensive актуальна, так как количество обменов с оперативной памятью по сравнению с вычислительной нагрузкой в данных задачах достаточно велико, и вычислительная мощность процессоров растет быстрее, чем скорость работы оперативной памяти. Были предложены два параллельных алгоритма для решения задач поиска в ширину и поиска кратчайших путей в неориентированном графе. Также в данной статье на примере двух задач обработки графов рассматриваются различные оптимизации для эффективной работы с памятью графического ускорителя.
Ключевые слова: GPU; CUDA; Graph500; графы; Форд-Беллман; Kepler; BFS; SSSP.
ВВЕДЕНИЕ
В последнее время все большую роль играют графические ускорители (GPU) в неграфических вычислениях. Потребность их использования обусловлена их относительно высокой производительностью и более низкой стоимостью.
Как известно, на GPU хорошо решаются задачи на структурных сетках, где параллелизм так или иначе легко выделяется. Но есть задачи, которые требуют больших мощностей и используют неструктурные сетки. В качестве примера таких задач можно назвать Single Shortest Source Pathproblem (SSSP) - задача поиска кратчайших путей от заданной вершины до всех остальных во взвешенном графе и Breadth First Search (BFS) - поиска в ширину в неориентированном графе. Последняя задача используется в качестве основного теста для рейтинга Graph500 [1], который был создан для оценки производительности вычислительных систем при обработке большого количества данных.
Для решения данных задач с помощью центрального процессора (CPU) существует, по крайней мере, два известных алгоритма: алгоритм Дейкстры [2] и алгоритм Форда-Беллмана
Рекомендована XVI Международной суперкомпьютерной конференцией «Научный сервис в сети Интернет: многообразие суперкомпьютерных миров» (Абрау, 22-27 сентября 2014 г.).
[3]. Также существуют параллельные реализации алгоритмов поиска в ширину и поиска кратчайшего пути в графе на GPU [4-7, 14-15].
АРХИТЕКТУРА ГРАФИЧЕСКОГО ПРОЦЕССОРА
За последнее время архитектура графических ускорителей сильно изменилась. Несомненно, это связано с их целевой направленностью, а именно - использованием в неграфических вычислениях. Для таких целей был разработан модельный ряд GPU Tesla. Рассмотрим строение GPU на примере самой последней архитектуры Kepler на начало 2014 года [8-10].
Новый чип Kepler GK110 был разработан в первую очередь для пополнения модельного ряда Tesla. Его цель - стать самым быстрым параллельным микропроцессором в мире. Чип GK110 не только превышает по производительности чип предыдущего поколения Fermi, но и потребляет значительно меньше энергии.
GK110 в максимальной конфигурации состоит из 15 потоковых мультипроцессоров, называемых SMX, и шести 64-битных контроллеров памяти. Основные особенности GK110 следующие:
• совершенно новая архитектура потокового мультипроцессора SMX;
• новая подсистема памяти, улучшены пропускные способности кэшей всех уровней, до-
полнительные возможности кэширования, а также значительно улучшена работа с глобальной памятью;
• аппаратная поддержка вычислительной способности (compute capability) 3.5 и ниже;
• поддержка динамического параллелизма -функция, которая позволяет потокам GPU динамически генерировать новые потоки, чтобы динамически адаптироваться к данным. Новая технология существенно упрощает параллельное программирование за счет применения GPU-ускорения к широкому спектру распространенных алгоритмов, таких как адаптивное уточнение сеток, быстрые мультипольные и многосеточные методы;
• Hyper-Q — функция, которая позволяет нескольким процессам CPU одновременно использовать ядра CUDA на одном GPU Kepler. Нагрузка на GPU значительно вырастает, уменьшается простой CPU и улучшается про-граммируемость;
• GPU Direct - данная технология позволяет графическим процессорам обмениваться данными внутри единой сети, не вовлекая в этот процесс центральный процессор компьютера.
Каждый потоковый мультипроцессор SMX содержит 192 cuda-ядра для операций одинарной точности, 64 cuda-ядра для операций двойной точности, 32 специальных функциональных блока и 32 блока для загрузки и сохранения данных, четыре планировщика. Для всех SMX на GPU предусмотрен один общий кэш второго уровня, размер которого составляет 1.5 МБ. Также у каждого SMX есть свой собственный кэш первого уровня размером 64 КБ.
Для того чтобы использовать большие мощности GPU, необходимо отобразить вычислительно независимые участки кода на группы независимых виртуальных нитей. Каждая группа будет исполнять одну и ту же команду над разными входными данными. Для управления данной группой виртуальных нитей необходимо объединить их в блоки фиксированного размера. Данные блоки в архитектуре CUDA называются cuda-блоками.
Такой блок имеет три измерения. Все блоки объединяются в решетку блоков, которая также может иметь три измерения. В конечном счете, каждый cuda-блок будет обработан каким-либо потоковым мультипроцессором, и каждой виртуальной нити будет сопоставлена физическая. Минимальной единицей параллелизма на GPU является warp - группа из 32 независимых нитей, которые исполняются физически параллельно и синхронно.
ОПИСАНИЕ СТРУКТУРЫ ДАННЫХ
Кратко рассмотрим структуру хранения неориентированного взвешенного графа. Граф задается в сжатом CSR (Compressed Sparse Row) формате. Данный формат широко распространен для хранения разреженных матриц и графов.
Для хранения графа с N вершинами и M ребрами необходимо три массива: xadj, adjncy, weights. Массив xadj размера N + 1, остальные два - 2M, так как в неориентированном графе для любой пары вершин необходимо хранить прямую и обратную дуги.
Принцип хранения графа следующий. Весь список соседей вершины I находится в массиве adjncy с индекса xadj[I] до xadj[I+1] - 1. По аналогичным индексам хранятся веса каждого ребра из вершины I. Для иллюстрации на рис.1 сверху показан граф из 5 вершин, записанный с помощью матрицы смежности, а снизу - в CSR формате.
Рис. 1. Структура хранения графов
РЕАЛИЗАЦИЯ АЛГОРИТМА SSSP НА GPU
Подготовка входных данных
Для того чтобы увеличить вычислительную нагрузку на один потоковый мультипроцессор, необходимо преобразовать входные данные. Все преобразования можно разделить на два этапа:
• Расширение формата CSR;
• Сортировка расширенного формата CSR. На первом этапе необходимо расширить
формат CSR следующим образом: введем еще один массив startV, в котором будем хранить начала дуг. Тогда в массиве adjncy будут хра-
ниться их концы. Таким образом, вместо хранения соседей, будем хранить дуги. Пример данного преобразования на графе, описанном выше, на рис.2.
На втором этапе необходимо отсортировать полученные ребра так, чтобы каждая пара (и,У) встречалась ровно один раз. Таким образом, при обработке ребра (и,У) можно сразу обработать ребро (У,Ц), не считывая повторно данные об этом ребре из глобальной памяти GPU.
Основное вычислительное ядро
За основу для реализации на GPU взят алгоритм Форда-Беллмана [3]. Данный алгоритм хорошо подходит для реализации на GPU в силу того, что ребра можно просматривать независимо друг от друга и данные ребер и их весов расположены подряд, что улучшает пропускную способность глобальной памяти GPU. Рассмотрим основное вычислительное ядро (листинг 1).
Листинг 1 Вычислительное ядро для алгоритма 888Р
В данном ядре каждая нить обрабатывает два ребра (прямое и обратное), пытаясь улучшить расстояние по одному из них. Ясно, что оба условия if-блока не могут выполниться одновременно, так как они являются взаимоисключающими. В отличие от алгоритма Форда— Беллмана, где каждое ребро просматривается последовательно, в реализованном на GPU алгоритме может возникнуть ситуация «гонки»
потоков - когда два или более потока заходят обновить одну и ту же ячейку dist[T]. Покажем, что в данном случае алгоритм останется корректным.
Предположим, что есть две нити K1 и K2, которые хотят обновить ячейку dist[i]. Это означает, что выполнилось условие (*) или (**). Возможны два случая. Первый - одна из двух нитей записала наименьшее значение. Тогда на следующей итерации для этих двух нитей условие будет ложно, а значение в ячейке dist[T] окажется минимальным. Второй - одна из двух нитей записала не минимальное значение. Тогда на следующей итерации для одной из нитей условие будет истинно, а для другой - ложно. Тем самым результат будет одинаковый в обоих случаях, но достигнут за разное количество итераций.
Согласно оптимизированному варианту алгоритма Форда—Беллмана, если на какой-либо итерации не было изменений в массиве dist, то ответ задачи найден, и выполнять следующую итерацию уже не нужно. На GPU для этих целей была введена переменная modif, в которую нити записывают номер текущей итерации.
Одна итерация - один запуск ядра. Реализация базового алгоритма на GPU состоит в следующем: в цикле запускается вычислительное ядро, далее считывается переменная modif и, если она не изменилась с предыдущей итерации, то в массиве dist ответ задачи — кратчайший путь из заданной вершины до всех остальных.
ОПТИМИЗАЦИЯ РЕАЛИЗОВАННОГО АЛГОРИТМА SSSP
Рассмотрим некоторые оптимизации, которые позволяют существенно улучшить производительность алгоритма SSSP, используя архитектуру Kepler.
Использование текстурного кэша
В данной задаче требуется постоянно обновлять и считывать массив расстояний dist. Данный массив занимает достаточно мало места в глобальной памяти GPU по сравнению с информацией о дугах и их весах. Например, для графа с количеством вершин 220 (примерно 1 млн) массив dist будет занимать 8МБ. Несмотря на это, доступ к этому массиву осуществляется случайным образом, что плохо для GPU, так как порождаются дополнительные загрузки из глобальной памяти на каждый вычислительный warp. Для того чтобы минимизировать ко-
личество загрузок на один warp, можно использовать текстурный кэш.
Так как текстурный кэш доступен только на чтение, то для того чтобы им воспользоваться необходимо ввести две разные ссылки на один и тот же массив расстояний dist. Рассмотрим соответствующий код (листинг 2).
Листинг 2
Оптимизация алгоритма SSSP - использование текстурного кэша
const double * _restrict dist,
int k = blockldx.x * blockDim.x +
else if(dist[en] > distfst] + w)
В результате внутри ядра все операции чтения ведутся с одним массивом, а все операции записи - с другим. Но обе ссылки dist и distl указывают на один и тот же участок памяти GPU.
Локализация данных для лучшего использования кэша
Для лучшей работы описанной выше оптимизации необходимо, чтобы как можно дольше загруженные данные находились в L2 кэше. Доступ к массиву dist осуществляется по заранее известным индексам, хранящимся в массивах endV и startV. Для локализации обращений поделим массив dist на сегменты определенной длины, например, P элементов. Так как всего в графе N вершин, то получим (N / P + 1) разных сегментов. Далее будем сортировать ребра в данные сегменты следующим образом. В первую группу отнесем ребра, концы которых попадают в нулевой сегмент, а начала - в нулевой, затем в первый, во второй и т. д. Во вторую группу отнесем ребра, концы которых попадают в первый сегмент, а начала - в нулевой, затем в первый, во второй и т. д.
После данной перестановки ребер значения элементов массива dist, соответствующие, например, первой группе будут находиться в кэше максимально долго (длина кэш линии при этом будет равна P элементам), так как нити в первой группе будут запрашивать данные из нулевого сегмента для концевых вершин и нулевого, первого, второго и т.д. для начальных вершин.
Реализация алгоритма BFS на GPU
Также как и в задаче SSSP будем использовать те же самые преобразования для того, чтобы увеличить нагрузку на один SMX и снизить количество одинаковых данных, находящихся в глобальной памяти GPU. Для алгоритма BFS не нужны веса в графе. Стоит отметить, что необходимо хранить не кратчайшие расстояния, а номер уровня, в котором находится данная вершина. На графах большой связности количество уровней не превосходит размера самого минимального типа данных языка Си - unsigned char, что позволит сократить размер массива уровней в 8 раз по сравнению с массивом расстояний в алгоритме SSSP.
Алгоритм на GPU
За основу реализации был взят все тот же алгоритм Форда-Беллмана и ядро в рассмотренной задаче SSSP. Основное вычислительное ядро для BFS будет выглядеть следующим образом (листинг 3).
Листинг 3
Вычислительное ядро для алгоритма BFS
Таблица
Характеристики тестируемых графов
Количество вершин 2"-N Количество вершин Количество дуг Размер массива dist для SSSP. МБ Размер массивов ребер и весов для SSPS. МБ Размер массива levels для BFS. МБ Размер массива ребер для BFS, МБ
14 16 384 524 288 0,13 3 <0,125 2
15 32 768 1 048 576 025 6 <0,125 4
16 65 538 2 097152 0.5 12 <0,125 8
17 131072 4194304 1 32 0,13 16
18 262144 8 388608 7 64 0,25 32
19 524288 16 777216 4 128 0=5 64
20 1 048 576 33 554432 8 256 1 128
21 2 097 152 67 108 864 16 512 2 256
22 4 194 304 134217 728 32 1024 4 512
23 8 388 608 268435 456 64 2048 8 1024
24 16 777 216 536870 912 128 4096 16 2048
Идея алгоритма в следующем. Пусть массив levels изначально заполнен максимальным для выбранного типа значением (255 для unsigned char). Будем передавать в ядро номер текущей итерации — iter.
Далее необходимо просмотреть все ребра и проверить, является ли начальная или конечная вершина текущим родителем, то есть принадлежит ли она уровню iter. Если да, то необходимо пометить противоположную вершину просматриваемой дуги значением на единицу больше, чтобы «включить» эту вершину в список родителей на следующей итерации. Также как и в SSSP, вводится переменная modif, показывающая необходимость продолжения разметки графа.
Приведенный код (Листинг 3) уже содержит примененные оптимизации в задаче SSSP — использование текстурной памяти для массива levels и использование другой ссылки levels_NR, указывающей на тот же самый участок памяти, необходимой для записи; перестановка для лучшей локализации данных в кэше.
Использование динамического параллелизма для оптимизации алгоритма BFS
Для сильно связных графов в алгоритме BFS на начальных и конечных итерациях количество вершин, которые принадлежат определенному уровню, не велико. Поэтому можно вместо просмотра всех ребер просматривать массив вершин, и, если какая-либо вершина принадлежит
текущему уровню, то выполнять разметку ее потомков.
Для того чтобы реализовать описанный выше алгоритм, нужно использовать динамический параллелизм CUDA. Алгоритм состоит в следующем. Каждой нити будет сопоставлена одна вершина из массива всех вершин. Если данная вершина принадлежит текущему уровню разметки, то данная нить запускает вычислительное ядро (листинг 3), которое выполняет разметку только для данной вершины. Тем самым можно существенно сократить количество считываемых данных из глобальной памяти GPU и количество просматриваемых вершин и ребер.
АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ
Для тестирования использовались синтетические неориентированные RMAT-графы [11], которые хорошо моделируют реальные графы из социальных сетей и интернета. Рассматриваемые графы имеют среднюю связность 32, количество вершин является степень двойки. В таблице приведены графы, на которых проводилось тестирование.
Из-за использования самого маленького типа данных для хранения значений уровня в алгоритме BFS для графа с количеством вершин 220 необходимо 1МБ для хранения массива levels, в то время как для такого же графа в задаче SSSP необходимо 8МБ.
Рис. 3. Средняя производительность разных подходов реализации алгоритма SSSP
Тестирование проводилось на сервере с установленным в нем GPU NVIDIA GTX Titan [13], у которого 14 SMX и 2688 CUDA-ядер и CPU Intelcore i7 3го поколения с частотой 3,4ГГц и 8МБ кэша. Вместо времени показателем производительности будем считать количество дуг, обработанных за секунду (TEPS). В данном случае необходимо поделить полученное время на количество дуг в графе. В качестве конечного результата бралось среднее значение по 32 точкам. Для компиляции использовались компиляторы Intel 13-й версии и NVCC CUDA 5.5 с флагами -O3 -arch=sm_35. Результаты тестирования алгоритма SSSP приведены на рис.3.
На графике (см. рис. 3) изображены кривые средней производительности для следующих алгоритмов:
• reordering&&restricton — алгоритм GPU со всеми оптимизациями (1);
• restrict— алгоритм GPU без оптимизации перестановок для улучшенного кэширования (2);
• reordering— алгоритм GPU без оптимизации текстурного кэша (3);
• without— базовый алгоритм GPU без оптимизаций (4);
• CPU — базовый алгоритм на центральном процессоре.
Видно, что каждая из оптимизаций по отдельности влияет на производительность на разных графах. Использование текстурного кэша (2) позволяет существенно улучшить скорость обработки маленьких графов. Это связано прежде всего с размером L2 кэша GPU. Использование перестановки данных (3) дает прирост
на больших графах, так как улучшается кэширование. Применение двух подходов одновременно позволяет ускорить базовый алгоритм в 2 раза на маленьких графах и в 2-3 раза на больших. Максимальная производительность достигается на графе с 219 вершин и равна 1,1 GTEPS.
Результаты тестирования алгоритма BFS приведены на рис. 4.
На графике (см. рис.4) изображены кривые средней производительности для следующих алгоритмов:
• dynamicparallelism - алгоритм GPU со всеми оптимизациями и использованием динамического параллелизма архитектуры Кеплер (1)
• reordering &&restricton — алгоритм GPU со всеми оптимизациями (2);
• restrict— алгоритм GPU без оптимизации перестановок для улучшенного кэширования
(3);
• reordering— алгоритм GPU без оптимизации текстурного кэша (4);
• without— базовый алгоритм GPU без оптимизаций (5);
• CPU — базовый алгоритм на центральном процессоре.
Так как в данном алгоритме не нужно хранить веса ребер, то из-за того, что массив вершин для графов размерности до 220 целиком помещается в кэш, оптимизации в виде перестановки данных и использования текстурного кэша не дают существенного улучшения. Если массив вершин не помещается в кэш GPU, то использование перестановки элементов и тек-
Рис. 4. Средняя производительность разных подходов реализации алгоритма BFS
стурного кэша дает 3-4-кратный прирост производительности.
Наибольший эффект достигается тогда, когда начальные и конечные итерации разметки графа выполняются с использованием динамического параллелизма (количество обрабатываемых данных не велико), аоставшиеся итерации - с описанными выше оптимизациями (количество обрабатываемых данных настолько много, что применение динамического параллелизма не будет оправдано).
В итоге удалось достичь средней производительности в 7,8 GTEPS. Почти пиковая средняя производительность достигается на графах с количеством вершин 2 —2 , что для данной архитектуры - хороший результат. Максимальная производительность получена на графе с количеством вершин 220 и равна 9 GTEPS.
ЗАКЛЮЧЕНИЕ
В результате проделанной работы были разработаны и реализованы алгоритмы для решения на GPU следующих задач: Single Shortest Source Pathproblem (SSSP) - задачи поиска кратчайших путей от заданной вершины до всех остальных во взвешенном графе и Breadth First Search (BFS) - задачи поиска в ширину в неориентированном графе. В реализации данных алгоритмов были использованы архитектурные особенности Kepler, недоступные в GPU поко-
ления Fermi. Поэтому не удалось провести сравнение двух архитектур — Kepler и Fermi.
Реализованные алгоритмы показали хорошую эффективность на одном GPU. В дальнейшем планируется исследование и реализация данных алгоритмов на многих GPU, так как для обработки графов с количеством вершин 225 и более требуется больше памяти.
СПИСОК ЛИТЕРАТУРЫ
1. Graph 500 Benchmark 1 ("Search") [Электронный ресурс]. URL: http://www.graph500.org/specifications (дата обращения 31.05.2014) [ Graph 500 Benchmark 1 ("Search") [Online]. Available: http://www.graph500.org/specifications]
2. Алгоритм Дейкстры [Электронный ресурс]. URL:http://www.cs.cornell.edu/~wdtseng/icpc/notes/graph_p art2.pdf (дата обращения 31.05.2014). [ Dijkstra's algorithm [Online]. Available: http://www.cs.cornell.edu/~wdtseng/icpc/ notes/graph_part2.pdf]
3. Алгоритм Форда-Беллмана[ Электронный ресурс]. URL:http://www.cs.cornell.edu/~wdtseng/icpc/notes/graph_p art2.pdf (дата обращения 31.05.2014). [ Ford-Bellman's algorithm [Online]. Available: http://www.cs.cornell.edu/ ~wdtseng/icpc/notes/graph_part2.pdf ]
4. Harish P. and Narayanan P. Accelerating large graph algorithms on the GPU using CUDA // Proc. 14th Int. Conf. on High Performance Computing. Berlin, 2007.P. 197-208. [ P. Harish and P. Narayanan, "Accelerating large graph algorithms on the GPU using CUDA," in Proc. 14th Int. Conf. on High Performance Computing, Berlin, 2007, pp. 197-208. ]
5. Черноскутов М. А. Сравнение скорости работы GPU и CPU при решении задач класса «data intensive» // Научный сервис в сети Интернет: поиск новых решений: Труды
Междунар. Суперкомпьютерной конференции (г. Новороссийск, 17-22 сент. 2012). С. 731-735. [ M. A. Chernoskutov, "Comparing the speed of use the GPU and CPU for solving a "data intensive" problem," in IC Scientific service on the Internet: the search for new solutions, Novorossiysk, September 17-22, pp. 731-735. ]
6. Hiragushi T., Takahashi D. Efficient hybrid breadth-first search on GPUs // ICA3PP 2013. P. 40-50. [ T. Hiragushi, D. Takahashi, "Efficient hybrid breadth-first search on GPUs," in ICA3PP 2013, pp. 40-50. ]
7. Martin P., Torres R., Gavilanes A. CUDA solutions for the SSSP Problem. // ICCS 2009.P. 904-913. [ P. Martin, R. Torres, A. Gavilanes, "CUDA solutions for the SSSP Problem," in ICCS 2009, pp. 904-913. ]
8. Архитектура Nvidia Kepler [Электронный ресурс]. URL: www.nvidia.com/content/PDF/kepler/NVIDIAKepler-GK110-Architecture-Whitepaper.pdf/ (дата обращения 31.05.2014). [ Nvidia Kepler architecture [Online]. Available: http://www.nvidia.com/content/PDF/kepler/NVIDIAKepler-GK110-Architecture-Whitepaper.pdf/ ]
9. NVIDIA CUDA [Электронный ресурс]. URL: www.render.ru/books/show_book.php?book_id=840 (дата-обращения 31.05.2014). [ NVIDIA CUDA [Online]. Available: www.render.ru/books/show_book.php?book_id=840. ]
10. Боресков А. В. , Харламов А. А. Основы работы с технологией CUDA. М.: ДМК Пресс, 2010. 234 с. [ A. V. Boreskov, A. A. Kharlamov, Basics of CUDA Technology, (in Russia). Moscow, 2010. ]
11. Chakrabarti D., Zhan Y., Faloutsos C. R-MAT: A recursive model for graph mining // Proc. 4th Int. Conf. on Data Mining. 2004. P. 442-446. [ D. Chakrabarti, Y. Zhan, and C. Faloutsos, "R-MAT: A recursive model for graph mining," In Proc. 4th Int. Conf. on Data Mining, 2004, pp. 442-446. ]
12. Murphy R., Wheeler K., Barrett B., Ang J. Introducing the Graph 500 // Cray User's Group (CUG). May 5, 2010. [ R. Murphy, K. Wheeler, B. Barrett, J. Ang, "Introducing the Graph 500," Cray User's Group (CUG), May 5, 2010.]
13. NVIDIA GTXTitan [Электронный ресурс]. URL: http://www.nvidia.ru/object/geforce-gtx-titan-ru (дата обращения 31.05.2014) [ NVIDIA GTXTitan [Online]. Available: http://www.nvidia.ru/object/geforce-gtx-titan-ru ]
14. Hong S., et al. Accelerating CUDA graph algorithms at maximum warp // Proc. 16th ACM Symp. on Principles and practice of parallel programming (New York, NY, USA, 2011), P. 267-276. [ S. Hong, et al. "Accelerating CUDA graph algorithms at maximum warp," in Proc. 16th ACM Symp. on Principles and practice of parallel programming, New York, NY, USA, 2011, pp. 267-276. ]
15. Merrill D., Garland M., Grimshaw A. Scalable GPU graph traversal // Proc. 17th ACM SIGPLAN Symp. on Principles and Practice of Parallel Programming (PPoPP'12). P. 117128. [ D. Merrill, M. Garland, A. Grimshaw, "Scalable GPU graph traversal," inProc. 17th ACM SIGPLAN Symp. on Principles and Practice of Parallel Programming (PPoPP'12), pp. 117128. ]
ОБ АВТОРЕ
КОЛГАНОВ Александр Сергеевич, мл. науч. сотр. Дипл. информатик-математик (МГУ, 2014). Иссл. в обл. автоматического отображения программ на кластеры различной архитектуры в модели DVMH.
METADATA
Title: GPU usage for solving Data Intensive applications.
Authors: A. S. Kolganov
Affiliation:
Keldysh Institute of Applied Mathematics (Russian Academy of Sciences), Russia. Email: [email protected] Language: Russian.
Source: Vestnik UGATU (scientific journal of Ufa State Aviation Technical University), vol. 18, no. 4 (65), pp. 198-205, 2014. ISSN 2225-2789 (Online), ISSN 1992-6502 (Print). Abstract: Development of parallel algorithms for solving the problems of the class Data Intensive is important, because the number of exchanges with the RAM compared to the computational load of these tasks is sufficiently large, and the computational power of processors is increasing faster than the speed of the RAM. Proposed two parallel algorithms for solving problems of breadth-first search and the search of the shortest paths in undirected graphs. Also this article describes the various optimizations to work effectively with the memory of the graphics accelerator. Key words: GPU; CUDA; Graph500; graphs; Ford-Bellman;
Kepler; BFS; SSSP. About the author:
KOLGANOV, Alexander Sergeevich, post-graduate student, Master of mathematics and technology (MSU, 2014).