diff --git a/Elizaveta_Vodolazskaya/Elizaveta_Vodolazskaya_report.tex b/Elizaveta_Vodolazskaya/Elizaveta_Vodolazskaya_report.tex new file mode 100644 index 0000000..70a856b --- /dev/null +++ b/Elizaveta_Vodolazskaya/Elizaveta_Vodolazskaya_report.tex @@ -0,0 +1,154 @@ +% Данный файл распространяется под лицензией CC BY 4.0. Текст лицензии размещён на https://creativecommons.org/licenses/by/4.0/ +% (c) Кафедра системного программирования, 2026 +\documentclass[a4paper]{article} + +\usepackage[a4paper, top=8mm, bottom=8mm, left=8mm, right=8mm]{geometry} + +\usepackage{polyglossia} +\setdefaultlanguage[babelshorthands=true]{russian} +\setotherlanguage{english} + +\usepackage{fontspec} +\setmainfont{FreeSerif} +\newfontfamily{\russianfonttt}[Scale=0.7]{DejaVuSansMono} + +\usepackage[tiny, compact]{titlesec} + +\usepackage{titling} +\setlength{\droptitle}{-1cm} +\pretitle{\begin{center}\begin{bfseries}\Large} +\posttitle{\par\end{bfseries}\end{center}} +\preauthor{\begin{center}\normalsize} +\postauthor{\par\end{center}\vspace{-1.8cm}} + +\usepackage{hyperref} +\usepackage{bookmark} +\usepackage{csquotes} +\usepackage{amsmath} +\usepackage{multirow} +\usepackage{graphicx} + +\title{Реализация алгоритма PageRank на основе SuiteSparse:GraphBLAS} + +\author{Водолазская Елизавета Андреевна} + +\date{} + +\begin{document} + +\maketitle + +\begin{flushright} + Группа: \emph{\enquote{25.Б71-мм}} + + Кафедра: \emph{кафедра Системного программирования} + + Научный руководитель: \emph{Григорьев Семён Вячеславович} + + Консультант: \emph{Кутуев Владимир Александрович} + + Старший инженер-исследователь YADRO + + Номер семестра практики: \emph{2} +\end{flushright} + +\section{Введение} +PageRank~--- итерационный алгоритм, предназначенный для оценки относительной важности вершин графа. В основе алгоритма лежит модель случайного блуждания: вероятность нахождения в вершине определяется структурой входящих в неё связей. Формально алгоритм вычисляет стационарное распределение марковской цепи, заданной нормализованной матрицей смежности графа. + +PageRank решает задачу количественной оценки центральности узлов в ориентированном графе. Изначально алгоритм был предло\-жен для ранжирования веб-страниц по их значимости на основе гиперссылочной структуры Интернета. В дальнейшем он нашёл применение в задачах анализа социальных сетей, оценки влияния научных публикаций (индексы цитирования), построения рекоменда\-тельных систем и других областях, где требуется ранжирование объектов по структуре связей между ними. +\section{Постановка задачи} + +\textbf{Целью работы является} реализация алгоритма PageRank на языке C с использованием библиотеки SuiteSparse:GraphBLAS\footnote{URL: \url{https://github.com/DrTimothyAldenDavis/GraphBLAS} (дата обращения: 20.07.2026).} и сравнение производительности собственной реализации с реализацией из библиотеки LAGraph\footnote{URL: \url{https://github.com/GraphBLAS/LAGraph} (дата обращения: 20.07.2026).}. +\textbf{Для достижения цели требуется решить следующие задачи:} +\begin{enumerate} +\item выполнить обзор алгоритма PageRank, стандарта GraphBLAS и существующих реализаций (в частности, библиотеки LAGraph); +\item спроектировать и реализовать итерационный алгоритм PageRank на языке C с использованием алгебраических примитивов для работы с разреженными матрицами; +\item провести верификацию корректности реализации и выполнить серию вычислительных экспериментов для сравнения производи\-тельности с LAGraph. +\end{enumerate} +\section{Обзор} +GraphBLAS~--- это спецификация, описывающая примитивы линейной алгебры над разреженными матрицами для решения графо\-вых задач. Стандарт определяет набор операций (умножение матрицы на вектор, поэлементные операции, редукции), которые позволя\-ют выражать графовые алгоритмы в терминах матричных вычислений. Основная реализация стандарта на языке C~--- библиотека\linebreak SuiteSparse:GraphBLAS, разработанная Тимоти Дэвисом. +На базе SuiteSparse:GraphBLAS построена библиотека LAGraph, предостав\-ляющая готовые реализации графовых алгоритмов, включая PageRank, компоненты связности, кратчайшие пути. +Таким образом, для учебной задачи выбрана связка SuiteSparse:GraphBLAS (как базовый инструмент) и LAGraph (как эталон для сравнения). Самостоя\-тельная реализация PageRank позволит изучить применение алгебраических примитивов GraphBLAS к графовым задачам. +\section{Описание предлагаемого решения} + +Решение представляет собой библиотеку \texttt{pagerank\_lib} (файлы \texttt{src/pagerank.c}, \texttt{include/pagerank.h}), реализующую итерационный алгоритм PageRank на примитивах GraphBLAS. Библиотека принимает на вход разреженную матрицу смежности графа и возвращает вектор рангов вершин. Используемые технологии: язык C (стандарт C99), SuiteSparse:GraphBLAS версии 7.4.0, CMake версии 3.28.3. + +Алгоритм вычисляет стационарное распределение случайного блуждания по графу. Итерационная формула имеет вид: +\begin{equation} +r^{(k+1)} = \alpha \cdot M^T \cdot r^{(k)} + \frac{\alpha \cdot d + (1 - \alpha)}{n} \cdot 1, +\end{equation} +где $M$~--- столбцово-нормализованная матрица смежности, $\alpha$~--- коэффициент затухания, $d$~--- суммарная масса висячих узлов, $n$~--- число вершин, $1$~--- вектор из единиц. + +Перед началом итераций выполняется нормализация матрицы смежности: каждый элемент делится на исходящую степень соответ\-ствующей вершины. Степени вычисляются с помощью редукции, после чего строится диагональная матрица обратных степеней, и нормализация сводится к одному умножению $M = D_{\text{inv}} \cdot A$. + +Особое внимание уделяется висячим узлам (вершинам без исходящих рёбер). Такие узлы имеют нулевую степень, поэтому их масса не перераспределяется через умножение матрицы на вектор и должна быть добавлена отдельно. +Итерационный процесс устроен следующим образом. +\begin{enumerate} +\item \textbf{Вычисление массы висячих узлов.} На каждой итерации из текущего вектора рангов извлекаются значения висячих узлов, после чего их суммарная масса вычисляется с помощью операции редукции. +\item \textbf{Матрично-векторное умножение.} Транспонированная нормализованная матрица смежности умножается на текущий вектор рангов. Транспонирование выполняется без создания копии матрицы. +\item \textbf{Применение затухания и перераспределение.} К результату умножения применяется коэффициент затухания $\alpha$, затем ко всем элементам вектора добавляется константа, учитывающая вероятность телепортации и перераспределённую массу висячих узлов. +\item \textbf{Проверка условий остановки.} Вычисляется L1-норма (сумма модулей элементов вектора, используемая для оценки разности между векторами) разности нового и старого векторов рангов. Итерации завершаются при достижении заданной точности $tol$ или превышении максимального числа итераций $max\_iters$. +\item \textbf{Обновление состояния.} Указатели на векторы текущего и предыдущего состояний меняются местами, что позволяет избежать копирования данных. +\end{enumerate} +\section{Тестирование} +Для проверки корректности реализации разработан набор модульных тестов на 10 синтетических графах малого размера, включаю\-щих базовые структуры (цепь, цикл, звезда, полный граф), граничные случаи (одна вершина, две вершины, пустой граф) и проблемные топологии (висячие узлы, несвязный граф, петли). +Верификация выполнялась по двум критериям: +\begin{enumerate} +\item Нормировка вектора рангов: +\begin{equation} +\left| \sum_{i=1}^{n} \text{PR}(v_i) - 1.0 \right| \leq 10^{-6}. +\end{equation} +\item Совпадение с эталонной реализацией LAGraph: +\begin{equation} +\left| \text{PR}_{\text{impl}}(v_i) - \text{PR}_{\text{LAGraph}}(v_i) \right| \leq 10^{-6}, \quad \forall i. +\end{equation} +\end{enumerate} +Все тесты проходят успешно, что подтверждает математическую корректность алгоритма перед сравнением производительности на больших графах. +\section{Эксперименты} +\subsection{Подготовка к экспериментам} + +Для оценки производительности разработанной реализации алгоритма PageRank было проведено сравнение с эталонной реализаци\-ей из библиотеки LAGraph. Количество итераций было зафиксировано на уровне, достаточном для получения надёжных и измеримых замеров времени выполнения. В качестве метрики производительности использовалось суммарное время выполнения всех итераций (в секундах). Для каждого графа выполнялось по 30~запусков алгоритма. + +Для экспериментов были отобраны пять графов из SuiteSparse Matrix Collection\footnote{URL: \url{https://suitesparse-collection-website.herokuapp.com} (дата обращения: 20.07.2026).}, представляющих различные классы структур и масштабы, чтобы всесторонне оценить поведение алгоритма: web-Google, web-Stanford, hollywood-2009, indochina-2004, mycielskian17. + +Эксперименты проводились на следующем аппаратном и программном окружении: процессор Intel Core i5-1340P, 16~ГБ оператив\-ной памяти, операционная система Ubuntu 24.04.4 LTS, компилятор GCC 13.3.0. Сборка выполнялась с оптимизацией \texttt{-O3}. Использо\-вались версии библиотек: SuiteSparse:GraphBLAS 7.4.0 и LAGraph 1.2.1. + + +\subsection{Анализ результатов} + +На рисунке~\ref{fig:perf_comparison} представлено сравнение среднего времени выполнения алгоритма. Разработанная реализация показывает большее время выполнения по сравнению с LAGraph на всех тестовых графах. Наибольшее отставание наблюдается на графах \texttt{hollywood-2009} и \texttt{indochina-2004}. + +\begin{figure}[h] + \centering + \includegraphics[width=0.75\textwidth]{images/performance_comparison.pdf} + \caption{Сравнение среднего времени выполнения всех итераций. Числа над столбцами показывают коэффициент замедления.} + \label{fig:perf_comparison} +\end{figure} + + +\begin{figure}[h] + \centering + \includegraphics[width=\textwidth]{images/stability.pdf} + \caption{Анализ стабильности измерений: 95\% доверительный интервал (слева) и относительное стандартное отклонение (RSD) (справа). Пунктирная линия отмечает порог в 5\%.} + \label{fig:stability} +\end{figure} +Помимо абсолютной скорости, критически важным показателем является стабильность времени выполнения. На рисунке~\ref{fig:stability} проана\-лизированы относительное стандартное отклонение (RSD) и 95\% доверительный интервал (CI) в процентах от среднего значения. + +Как видно из графиков, собственная реализация демонстрирует \textbf{более высокую стабильность} по сравнению с LAGraph. +\begin{enumerate} + \item \textbf{RSD (правый график):} У LAGraph относительное отклонение превышает 5\% для графов \texttt{hollywood-2009} (9.72\%), \texttt{web-Google} (10.17\%) и \texttt{indochina-2004} (11.58\%). У собственной реализации максимальный RSD составляет 5.74\% (\texttt{hollywood-2009}). + \item \textbf{95\% CI (левый график):} Доверительный интервал собственной реализации стабильно ниже, чем у LAGraph, и не превышает 3\%. +\end{enumerate} + +Детальные результаты измерений представлены в репозитории проекта.\footnote{URL: \url{https://github.com/Lizavod/graphblas-pagerank/tree/main/analysis} (дата обращения: 29.07.2026).} + +\section{Заключение} +В результате выполнения работы разработана библиотека \texttt{pagerank\_lib}, реализующая алгоритм PageRank с использованием примити\-вов SuiteSparse:GraphBLAS. Основное внимание уделено применению алгебраического подхода к графовым задачам: нормализация матрицы смежности, работа с висячими узлами и итерационный процесс вычисления рангов выражены через операции над разрежен\-ными матрицами и векторами. +Корректность предложенной реализации подтверждена набором тестов на синтетических графах, покрывающих как базовые структуры, так и граничные случаи. Сравнительное тестирование с библиотекой LAGraph показало, что разработанная реализация уступает эталонной по времени выполнения (в 1.5--5.9~раза), однако демонстрирует меньший разброс времени выполнения, что указывает на б\'{о}льшую стабильность измерений. +Полученные результаты позволяют использовать разработан\-ную библиотеку в качестве исследовательского прототипа для изучения применения GraphBLAS к графовым алгоритмам, а также как основу для дальнейшей оптимизации. + +Репозиторий проекта: \url{https://github.com/Lizavod/graphblas-pagerank}. + +Техническая документация: \url{https://github.com/Lizavod/graphblas-pagerank/blob/main/README.md}. + +\end{document} \ No newline at end of file diff --git a/Elizaveta_Vodolazskaya/images/performance_comparison.pdf b/Elizaveta_Vodolazskaya/images/performance_comparison.pdf new file mode 100644 index 0000000..380bfbe Binary files /dev/null and b/Elizaveta_Vodolazskaya/images/performance_comparison.pdf differ diff --git a/Elizaveta_Vodolazskaya/images/stability.pdf b/Elizaveta_Vodolazskaya/images/stability.pdf new file mode 100644 index 0000000..ec4b84e Binary files /dev/null and b/Elizaveta_Vodolazskaya/images/stability.pdf differ diff --git a/main.tex b/main.tex index ee98d5e..ef938c3 100644 --- a/main.tex +++ b/main.tex @@ -64,4 +64,7 @@ \includepdf[pages=-, addtotoc={1, section, 1, {Горбузова Мария Романовна, Реализация свёртки изображений}, gorbuzova_maria}] {Maria_Gorbuzova/Maria_Gorbuzova_report.pdf} +\includepdf[pages=-, + addtotoc={1, section, 1, {Водолазская Елизавета Андреевна, Реализация алгоритма PageRank на основе SuiteSparse:GraphBLAS}, vodolazskaya_elizaveta}] +{Vodolazskaya_Elizaveta/Vodolazskaya_Elizaveta_report.pdf} \end{document}