Введение 4
1. Постановка задачи 6
2. Обзор 7
2.1. Обзор аналогичных инструментов 7
2.2. Платформа OpenCL и модель исполнения 9
2.3. Язык программирования F# 11
2.4. Библиотека Brahma.FSharp 12
3. Реализация 14
3.1. Поддержка обобщенных атомарных операций 14
3.2. Поддержка трансфера пользовательских типов данных . 17
3.3. Улучшение модели управления памятью 19
3.4. Общая архитектура решения 20
4. Эксперимент 24
4.1. Условия эксперимента 24
4.2. Оценка затрат на трансфер данных 24
4.3. Оценка затрат на использование атомарных операций . . 28
Заключение 30
Список литературы 31
Данные, представимые в виде графов, встречаются повсеместно: при анализе компьютерных и социальных сетей, в биоинформатике и статическом анализе кода [5]. Графы, возникающие в этих областях, могут содержать миллионы узлов и ребер, поэтому существует необходимость в высокопроизводительных инструментах анализа больших графов. В связи с этим многообещающей становится идея использования графических ускорителей общего назначения — GPGPU. Существующие решения уже сейчас доказывают, что использование GPGPU может повысить производительность алгоритмов анализа графов [1] [6], однако ценой служит более сложная модель программирования [10]. Иным является подход к организации вычислений над графами, основанный на стандарте GraphBLAS [5], который определяет базовые примитивы для построения графовых алгоритмов в терминах линейной алгебры. Свойством такого подхода является способность оперировать богатым набором графов различных типов с помощью небольшого набора матричных операций над полукольцами. Например, умножение матрицы на вектор, как показано на рисунке 1, является шагом в алгоритме поиска в ширину. Решения, основанные на стандарте GraphBLAS, производительны, масштабируемы и имеют более дружественное API [3]. Тем не менее на данный момент нет полноценных инструментов, реализующих стандарт GraphBLAS на графических процессорах общего назначения. Текущие реализации GraphBLAS на GPGPU (например, GraphBLAST [10]) показывают, что использование GPGPU действительно может улучшить производительность инструментов такого рода, однако разработчики сталкиваются не только с проблемами, связанными с реализацией обобщенных операций на графических процессорах с помощью стандартных инструментов языка Cd—+, но и с переносимостью решений, основанных на программно-аппаратной платформе CUDA.
Одним из возможных подходов к реализации GraphBLAS на GPU является использование языка высокого уровня, а также библиотек,
динамически транслирующих конструкции и объекты данного языка в низкоуровневый код, способный исполнятся на графическом процессоре видеокарты. Данный подход был опробован на прототипе GraphBLAS- sharp, разработанном на кафедре системного программирования СПб-ГУ, который показал жизнеспособность этой идеи. В качестве библиотеки для взаимодействия с OpenCL прототип использует библиотеку Brahma.FSharp, которая также разрабатывается на кафедре системного программирования СПбГУ. Библиотека позволяет использовать подмножество языка F# для написания OpenCL ядер и предоставляет интерфейс для работы с ними. В ходе работы над прототипом GraphBLAS-sharp был выявлен ряд недостатков библиотеки Brahma.FSharp, перечисленных ниже.
1. Отсутствие атомарных операций для произвольных типов данных, что не позволяет реализовывать некоторые алгоритмы, которые могут оказаться лучше аналогов.
2. Отсутствие поддержки трансфера пользовательских типов данных из управляемой памяти в видеопамять.
3. Отсутствие возможности вручную управлять выделением памяти на OpenCL устройстве.
4. Отсутствие возможности исполнения нескольких OpenCL ядер параллельно.
В рамках данной работы были получены перечисленные ниже результаты.
• Реализована поддержка обобщенных атомарных операций.
• Реализована поддержка трансфера обобщенных типов данных, таких как структуры, кортежи и размеченные объединения.
• Улучшена модель управления памятью.
• Реализована возможность параллельного исполнения OpenCL ядер.
• Проведено экспериментальное сравнение предложенной реализации с аналогами.
[1] CuSha: Vertex-Centric Graph Processing on GPUs / Farzad Kho- rasani, Keval Vora, Rajiv Gupta, Laxmi N. Bhuyan // Proceedings of the 23rd International Symposium on High-Performance Parallel and Distributed Computing. - HPDC ’14.- New York, NY, USA : Association for Computing Machinery, 2014.— P. 239-252.— URL: https://doi.org/10.1145/2600212.2600227.
[2] Design of OpenCL Framework for Embedded Multi-core Processors / Jung-Hyun Hong, Young-Ho Ahn, Byung-Jin Kim, Ki Chung //Con¬sumer Electronics, IEEE Transactions on.— 2014. — 05.— Vol. 60.— P. 233-241.
[3] Graphs, Matrices, and the GraphBLAS: Seven Good Reasons / Jeremy Kepner, David Bader, Aydin Buluq et al. //Procedia Com¬puter Science. — 2015. — Vol. 51. — P. 2453-2462. — International Con¬ference On Computational Science, ICCS 2015. URL: https://www.sciencedirect.com/science/article/pii/S1877050915011618.
[4] Khronos OpenCL Working Group. — The OpenCL Specification, Version 1.1, 2011.— URL: https://www.khronos.org/registry/cl/specs/opencl-1.1.pdf.
[5] Mathematical foundations of the GraphBLAS / J. Kepner, P. Aaltonen, D. Bader et al. // 2016 IEEE High Performance Extreme Com¬puting Conference (HPEC). — 2016. — P. 1-9.
[6] Multi-GPU Graph Analytics / Yuechao Pan, Yangzihao Wang, Yuduo Wu et al. — 2017. — 05. — P. 479-490.
[7] Optimizing CUDA Code By Kernel Fusion—Application on BLAS / Jiri Filipovic, Matus Madzin, Jan Fousek, Ludek Matyska // CoRR. — 2013. — Vol. abs/1305.1183. —1305.1183.
[8] Quantifying the Energy Efficiency of FFT on Heterogeneous Plat¬forms / Yash Ukidave, Amir Kavyan Ziabari, Perhaad Mistry et al. — 2013. —04.
[9] Wadler Philip. Deforestation: transforming programs to eliminate trees //Theoretical Computer Science.— 1990.— Vol. 73, no. 2.— P. 231-248.— URL: https://www.sciencedirect.com/science/article/pii/030439759090147A.
[10] Yang Carl, Buluq Aydin, Owens John D. GraphBLAST: A High- Performance Linear Algebra-based Graph Framework on the GPU // CoRR. — 2019. — Vol. abs/1908.01407. —1908.01407.