Skip to content

Commit c22f6c4

Browse files
committed
Форматирование, опечатки.
1 parent d1148ff commit c22f6c4

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

tex/Introduction.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
\chapter*{Введение\markboth{Введение}{}}
22

3-
Теория формальных языков находит применение не только для ставших уже классическими задач синтаксического анализа кода (языков программирования, искусственных языков) и естественных языков, но и в других областях, таких как статический анализ кода, графовые базы данных, биоинформатика, машинное обучение.
3+
Теория формальных языков находит применение не только в ставших уже классическими задачах синтаксического анализа кода (языков программирования, искусственных языков) и естественных языков, но и в других областях, таких как статический анализ кода, графовые базы данных, биоинформатика, машинное обучение.
44

55
Например, в машинном обучении использование формальных грамматик позволяет передать искусственной генеративной нейронной сети, предназначенной для построения цепочек с определёнными свойствами, знания о синтаксической структуре этих цепочек, что позволяет существенно упростить процесс обучения и повысить качество результата~\cite{10.5555/3305381.3305582}.
66
Вместе с этим, развиваются подходы, позволяющие нейронным сетям наоборот извлекать синтаксическую структуру (строить дерево вывода) для входных цепочек~\cite{kasai-etal-2017-tag,kasai-etal-2018-end}.
@@ -31,7 +31,7 @@ \chapter*{Введение\markboth{Введение}{}}
3131
Граф-структурированные данные встречаются не только в графовых базах данных, но и при статическом анализе кода: по программе можно построить различные графы отображающие её свойства.
3232
Скажем, граф вызовов, граф потока данных и так далее.
3333
Оказывается, что поиск путей в специального вида графах с использованием ограничений в терминах формальных языков позволяет исследовать некоторые нетривиальные свойства программы.
34-
Например проводить межпроцедурный анализ указателей или анализ алиасов~\cite{Zheng,10.1145/2001420.2001440,10.1145/2714064.2660213}, строить срезы программ~\cite{10.1145/193173.195287}, проводить анализ типов~\cite{10.1145/373243.360208}.
34+
Например проводить межпроцедурный анализ указателей или анализ псевдонимов (алиасов)~\cite{Zheng,10.1145/2001420.2001440,10.1145/2714064.2660213}, строить срезы программ~\cite{10.1145/193173.195287}, проводить анализ типов~\cite{10.1145/373243.360208}.
3535

3636
В данной работе представлен ряд алгоритмов для поиска путей с ограничениями в терминах формальных языков.
3737
Основной акцент будет сделан на контекстно-свободных языках, однако будут затронуты и другие классы: регулярные, многокомпонентные контекстно-свободные (Multiple Context-Free Languages, MCFL~\cite{SEKI1991191}) и конъюнктивные языки.

tex/Matrix-based_CFPQ.tex

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
\chapter[Контекстно-свободная достижимость через произведение матриц]{Контекстно-свободная достижимость через произведение матриц}\label{chpt:MatrixBasedAlgos}
22
\chaptermark{КС достижимость через произведение матриц}
33

4-
В данном разделе мы рассмотрим алгоритм решения задачи контекстно-свободной достижимости, основанный на произведении матриц. Будет показано, что при использовании конъюнктивных грамматик, представленный алгоритм находит переапроксимацию истинного решения задачи.
4+
В данном разделе мы рассмотрим алгоритм решения задачи контекстно-свободной достижимости, основанный на произведении матриц.
5+
Будет показано, что при использовании конъюнктивных грамматик, представленный алгоритм находит переапроксимацию истинного решения задачи.
56

67
\section[Алгоритм контекстно-свободной достижимости через произведение матриц]{Алгоритм контекстно-свободной достижимости через произведение матриц\sectionmark{Алгоритм КС достижимости через произведение матриц}}
78
\sectionmark{Алгоритм КС достижимости через произведение матриц}
89
\label{Matrix-CFPQ}
910

10-
В главе~\ref{graph:CYK}~был изложен алгоритм для решения задачи КС достижимости на основе CYK. Заметим, что обход матрицы напоминает умножение матриц в ячейках которых множества нетерминалов:
11+
В главе~\ref{graph:CYK}~был изложен алгоритм для решения задачи КС достижимости на основе CYK.
12+
Заметим, что обход матрицы напоминает умножение матриц в ячейках которых множества нетерминалов:
1113
\begin{align*}
1214
M_3 = &M_1 \times M_2 \\
1315
M_3[i,j] = &\sum_{k=1}^{n} M[i,k] * M[k,j]
@@ -266,7 +268,8 @@ \section{Особенности реализации}
266268
\]
267269
\end{example}
268270

269-
Алгоритм же может быть переформулирован так, как показано в листинге~\ref{lst:cfpq_mtx_bool}. Такой взгляд на алгоритм позволяет использовать для его реализации существующие высокопроизводительные библиотеки для работы с булевыми матрицами (например M4RI\footnote{M4RI --- одна из высокопроизводительных библиотек для работы с логическими матрицами на CPU. Реализует Метод Четырёх Русских. Исходный код библиотеки: \url{https://bitbucket.org/malb/m4ri/src/master/}. Дата посещения: 30.03.2020.}~\cite{DBLP:journals/corr/abs-0811-1714}) или библиотеки для линейной алгебры (например CUSP~\cite{Cusp}).
271+
Алгоритм же может быть переформулирован так, как показано в листинге~\ref{lst:cfpq_mtx_bool}.
272+
Такой взгляд на алгоритм позволяет использовать для его реализации существующие высокопроизводительные библиотеки для работы с булевыми матрицами (например M4RI\footnote{M4RI --- одна из высокопроизводительных библиотек для работы с логическими матрицами на CPU. Реализует Метод Четырёх Русских. Исходный код библиотеки: \url{https://bitbucket.org/malb/m4ri/src/master/}. Дата посещения: 30.03.2020.}~\cite{DBLP:journals/corr/abs-0811-1714}) или библиотеки для линейной алгебры (например CUSP~\cite{Cusp}).
270273

271274
\begin{algorithm}
272275
\floatname{algorithm}{Listing}
@@ -333,11 +336,18 @@ \section{Особенности реализации}
333336
Например, 32 бита под ячейки в матрице и 64 бита под правила (или 8 и 16, если позволяет количество нетерминалов в грамматике, или 16 и 32).
334337
Тогда умножение выражается через битовые операции и сравнение, что довольно эффективно с точки зрения вычислений.
335338

336-
Для небольших запросов такой подход к реализации может оказаться быстрее: в данном случае скорость зависит от деталей. Минус подхода в том, что нет возможности использовать готовые библиотеки линейной алгебры без предварительной модификации. Только если они не являются параметризуемыми и не позволяют задать собственный тип и собственную операцию умножения и сложения (иными словами, собственное полукольцо). Такую возможность предусматривает, например, стандарт GraphBLAS\footnote{GraphBLAS --- открытый стандарт, описывающий набор примитивов и операций, необходимый для реализации графовых алгоритмов в терминах линейной алгебры. Web-страница проекта: \url{https://github.com/gunrock/graphblast}. Дата доступа: 30.03.2020.} и, соответственно, его реализации, такие как SuiteSparse\footnote{SuiteSparse --- это специализированное программное обеспечения для работы с разреженными матрицами, которое включает в себя реализацию GraphBLAS API. Web-страница проекта: \url{http://faculty.cse.tamu.edu/davis/suitesparse.html}. Дата доступа: 30.03.2020.}~\cite{Davis2018Algorithm9S}.
339+
Для небольших запросов такой подход к реализации может оказаться быстрее: в данном случае скорость зависит от деталей.
340+
Минус подхода в том, что нет возможности использовать готовые библиотеки линейной алгебры без предварительной модификации.
341+
Только если они не являются параметризуемыми и не позволяют задать собственный тип и собственную операцию умножения и сложения (иными словами, собственное полукольцо).
342+
Такую возможность предусматривает, например, стандарт GraphBLAS\footnote{GraphBLAS --- открытый стандарт, описывающий набор примитивов и операций, необходимый для реализации графовых алгоритмов в терминах линейной алгебры. Web-страница проекта: \url{https://github.com/gunrock/graphblast}. Дата доступа: 30.03.2020.} и, соответственно, его реализации, такие как SuiteSparse\footnote{SuiteSparse --- это специализированное программное обеспечения для работы с разреженными матрицами, которое включает в себя реализацию GraphBLAS API. Web-страница проекта: \url{http://faculty.cse.tamu.edu/davis/suitesparse.html}. Дата доступа: 30.03.2020.}~\cite{Davis2018Algorithm9S}.
337343

338344
Также стоит заметить, что при работе с реальными графами матрицы, как правило, оказываются разреженными, а значит необходимо использовать соответствующие представления матриц (CRS, покоординатное, Quad Tree~\cite{quadtree}) и библиотеки, работающие с таким представлениями.
339345

340-
Однако даже при использовании разреженных матриц, могут возникнуть проблемы с размером реальных данных и объёмом памяти. Например, для вычислений на GPGPU лучше всего, когда все нужные для вычисления матрицы помещаются на одну карту. Тогда можно свести обмен данными между хостом и графическим сопроцессором к минимуму. Если не помещаются все, то нужно, чтобы помещалась хотя бы тройка непосредственно обрабатываемых матриц (два операнда и результат). В самом тяжёлом случае в памяти не удаётся разместить даже операнды целиком и тогда приходится прибегать к поблочному умножению матриц.
346+
Однако даже при использовании разреженных матриц, могут возникнуть проблемы с размером реальных данных и объёмом памяти.
347+
Например, для вычислений на GPGPU лучше всего, когда все нужные для вычисления матрицы помещаются на одну карту.
348+
Тогда можно свести обмен данными между хостом и графическим сопроцессором к минимуму.
349+
Если не помещаются все, то нужно, чтобы помещалась хотя бы тройка непосредственно обрабатываемых матриц (два операнда и результат).
350+
В самом тяжёлом случае в памяти не удаётся разместить даже операнды целиком и тогда приходится прибегать к поблочному умножению матриц.
341351

342352
Отдельной инженерной проблемой является масштабирование алгоритмов на несколько вычислительных узлов, как на несколько CPU, так и на несколько GPGPU.
343353

0 commit comments

Comments
 (0)