<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Graph Processing: Main Concepts and Systems</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>In: V. Voevodin, A. Simonov (eds.): Proceedings of the GraphHPC-2017 Conference, Moscow State University</institution>
          ,
          <addr-line>Russia, 02-03-2017, published at</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Mikhail Chernoskutov Krasovskii Institute of Mathematics and Mechanics, Ural Federal University Yekaterinburg</institution>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The development of new processing and storage facilities leads to an increase in the size of the problems to be solved. One of such problems is graph processing, which characterized by their non-determinism and an irregular memory access pattern, that greatly complicates its development and debugging. In this paper, we describe the basic concepts that make it possible to simplify the development of graph algorithms and its porting to various computer architectures. In addition, a description of the most well-known graph processing systems that implement these concepts is given.</p>
      </abstract>
      <kwd-group>
        <kwd>high performance computing</kwd>
        <kwd>graph algorithms</kwd>
        <kwd>graph processing systems</kwd>
        <kwd>parallel processing</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        A graph is a mathematical abstraction for the
representation of objects and the connections between
them. The graph G = (V; E) consists of the set of
vertices V with the number of elements n and the set
of edges E with the number of elements m. Using the
graphs, various objects of the real world can be
represented. For instance, in the study of social networks it
is convenient to represent individual users as vertices,
and links between them as edges [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ]. Graphs are
actively used in the processing of natural languages
for the word sense induction problem [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. We can
also model the work of the brain, denoting
individual neurons (or brain areas) as vertices, and,
therefore, the structural or functional connections between
vertices are represented as edges [
        <xref ref-type="bibr" rid="ref4 ref5">4, 5</xref>
        ]. Another
typical use case of graphs is the modeling of road
networks, where intersections are vertices, and roads are
edges [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Graphs are also used in bioinformatics,
computer security, data analysis and other elds of science,
industry and business.
      </p>
      <p>The huge volume of accumulated data led to the
growth of graphs that need to be investigated. This led
to the emergence of the network science, dealing with
the study of the features of the interaction between
many objects. The number of algorithms necessary for
domain scientists is also growing rapidly. As a result,
various specialized tools for graph analysis appear on
the market.</p>
      <p>Development and debugging of graph algorithms is
a non-trivial task because of the non-determinism of
many such algorithms. The use of parallel
computations as a tool for accelerating computation further
complicates this task. Therefore, there are many
different methods and technologies that make it possible
to simplify the development of graph algorithms and
simplify the work of various domain scientists. Below
are the main concepts described in the paper:
Shift to parallel processing in order to speedup
processing of big graphs (allows to faster process
graphs with big size);
New data structures for storing graphs, allowing
faster and more convenient graph mutation and
navigation through the graph (allows to operate
with graphs in more e cient and convenient way);
Development of new models for describing graph
algorithms, which makes it possible to e ectively
use the parallelism embedded in the algorithms
and e ectively map it to modern computing
architectures (allows to construct
architectureindependent algorithms with more productivity
for the developer).</p>
      <p>In this paper, we describe the above technologies
used in various existing graph processing systems. The
work is structured as follows. The Section 2 provides
a description of the various types of parallelism that
are used to speed up the processing of graphs. The
Section 3 describes the data structures that are used
to store graphs, together with its strengths and
weaknesses. Section 4 is devoted to the description of
various models of processing graphs. We concludes with
nal remarks in Section 5.
Sequential execution of graph algorithms is still very
common. Sequential processing can be used for
prototyping of new algorithms and can be one of the steps to
building highly e cient parallel algorithms that allow
to process graphs with billions of vertices.</p>
      <p>
        Up to now, graph processing systems based on
serial execution of algorithms, such as NetworkX [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ],
Gephi [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] and igraph [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], are still very popular and
ubiquitous. The popularity of these systems is
determined by a large set of algorithms and a lot of tools
for visualizing the output of the graph algorithms.
These systems are actively used in the complex
networks analysis.
2.2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Synchronous Parallel Processing</title>
      <p>Sequential algorithms are not always suitable for
solving real-world problems. With the rapid growth of
the data size, the size of the processed graphs is also
growing. Obvious way to accelerate graph processing
(in addition to developing more e cient algorithms) is
the parallelization of existing algorithms on graphs.</p>
      <p>
        The most common parallel processing model for
graph computations is the bulk synchronous model
(BSP) [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. Another name for algorithms that work in
accordance with the BSP model is level-synchronized
algorithms. Within the BSP model, the N + 1
iteration will be executed only after the N iteration will be
completed. This model can be implemented by using
two nested for loops { one for all vertices, and the
other one for all adjacent edges of each vertex.
      </p>
      <p>Drawback of the concept of synchronous-parallel
processing connected with overheads arising in some
algorithms because of the processing of inactive (not
a ecting the algorithm output) vertices at each
iteration of the algorithm.</p>
      <p>
        Among the graph processing systems based on the
BSP model, the Boost Graph Library (BGL) [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ],
as well as its parallel implementation called Parallel
BGL [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], are the most widely used. These systems
implement the concept of adjacency lists (with ability
to modify the graph topology) and have quite a lot of
supported algorithms. Parallel BGL is capable of
processing graphs consisting of billions of vertices and
allows developer to parallelize calculations on hundreds
of computational processes by using MPI [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
2.3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Asynchronous Parallel Processing</title>
      <p>
        Asynchronous parallel processing of graphs has not
yet become as widespread and ubiquitous as the BSP
model, but in some cases it allows to execute some
algorithms (such as belief propagation [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]) more e
ciently due to it faster convergence.
      </p>
      <p>Asynchronous execution assumes an independent
operation of each parallel thread or process from all
other threads or processes. At the same time, when
working with shared memory, such undesirable e ects
as data race can arise. This forces developers to use
duplicate copies of graph elements, as well as use
different synchronization primitives.</p>
      <p>
        GraphChi [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] is one of the systems that provide the
user with parallel asynchronous processing of graphs.
Asynchronous processing is achieved by using the
concept of Parallel Sliding Windows, which involves
extracting and updating the state of a small number of
vertices and edges that are simultaneously extracted
from the PC's memory (SSD or hard drive). A
similar concept is implemented in the CuSha system [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]
and allows to achieve asynchronous processing of the
graphs using GPGPU accelerators.
3
3.1
      </p>
      <sec id="sec-3-1">
        <title>Various Graph Formats</title>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Adjacency and Incidence Matrices</title>
      <p>The matrix is a natural mathematical representation
of the graph. The graph G = (V; E) consisting of n
vertices in this case can be described by the matrix
n n of the form A = (aij ), where:
aij =
(1; eij 2 E
0; eij 2= E
(1)</p>
      <p>An example of an adjacency matrix of a directed
graph is shown in Figure 1.</p>
      <p>3
5
2
0
1
6
4</p>
      <p>00 1 0 0 0 0 01
A = BBBBBBB0000 0001 0000 0001 0000 0101 0010CCCCCCC
@0 0 0 0 0 0 1A
0 0 0 0 1 0 0</p>
      <p>If the graph is non-directed, then the corresponding
adjacency matrix is symmetric; aij = aji. If the graph
is weighted, then the elements of the adjacency matrix
take the following form:
the use of matrices \as-is" to handle large graphs is
unacceptable for many real-world applications.
aij =
(
wij ; eij 2 E
0;
eij 2= E
(2)
where wij is weight of the edge eij . Another way
to represent weighted graph is to add supplementary
weight matrix to adjacency matrix (with a restriction
on zero weight edges).</p>
      <p>Another way of describing the graph is the incidence
matrix. The incidence matrix contains data about all
edges in the rows, and the columns are used to
represent the vertices. Matrix has the form B = bij and size
m n, where m is the number of edges in the graph.
Due to the fact that in this case each row must
simultaneously contain data on both the beginning and the
end of corresponding edge, it is most convenient to
represent graph with two matrices: one serves to store the
data about the beginning of the edges, and the other {
about the ends (it works only for directed graphs, but
edges of undirected graphs can be represented as
couples of directed edges with opposite directions). The
incidence matrix of the graph depicted in Figure 1 is
shown in Figure 2.</p>
      <p>01 0 0Bfro0m =0 0 01
BBBBBBBBB00000 00000 11110 01000 00000 00000 00000CCCCCCCCC
@0 0 0 0 0 1 0A
0 0 0 0 0 0 1
00 1 0 Bt0o = 0 0 01
BBBBBBBBB00000 00001 00000 00100 00000 01010 10000CCCCCCCCC
@0 0 0 0 0 0 1A
0 0 0 0 1 0 0</p>
      <p>Data structures represented by adjacency and
incidence matrices allows developer to quickly nd the
necessary elements in the graph, as well as add new
elements to the graph. In the case of an adjacency
matrix, the addition or removal of new edges to the
graph can be performed by changing the values of the
necessary matrix elements from 0 to 1 and vice versa.
The incidence matrix makes it possible to deal not only
with general graphs, but also with multigraphs
(having parallel edges), and also with hypergraphs (having
edges incident to any number of vertices). This
improvement is achieved by describing each edge with
two separate lines in di erent matrices: one line in
rst matrix for the beginning of hyperedge and one
line in second matrix for the end of hyperedge.</p>
      <p>
        However, these graph storage formats have one
signi cant drawback { the amount of memory required to
store matrices is proportional to n n for adjacency
and to n m for incident matrix [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. For instance, an
integer adjacency matrix for a graph of 1 000 000
vertices will occupy more than 3.7 TB of memory. Thus,
3.2
      </p>
    </sec>
    <sec id="sec-5">
      <title>Compressed Lists</title>
      <p>Another one popular graph storage format is
adjacency lists. The adjacency lists allow the graph to
be stored in the form of few linear arrays.</p>
      <p>The adjacency lists allow storing only existing graph
elements (non-zero elements in the adjacency matrix),
which allows to achieve a linear dependence between
the amount of consumed memory and the number of
vertices and edges in the graph. The Compressed
Sparse Rows (CSR) format, which implements the
concept of contiguity lists, is one of the most popular and
useful, and consists of two arrays:
row pointers { contains the o sets in the rows
of the corresponding adjacency matrix;
column ids { contains data about the end of each
edge.</p>
      <p>
        From i to (i + 1) element of the row pointers array
there are the ranges of vertex numbers in the array
column ids, which contains outgoing edges incident
to i vertex. Below is a representation of the above
arrays for the graph from Figure 1:
row pointers = [
        <xref ref-type="bibr" rid="ref1 ref1 ref5 ref6 ref6 ref7 ref8">0, 1, 1, 5, 6, 6, 7, 8</xref>
        ]
column ids = [
        <xref ref-type="bibr" rid="ref1 ref1 ref3 ref4 ref5 ref5 ref6 ref6">1, 1, 3, 5, 6, 5, 6, 4</xref>
        ] For
instance, vertex 2 has 4 edges (row pointers[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] - row
pointers[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] = 5 - 1 = 4). Edges can be
reconstructed by looking at column ids array from position
column ids[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] to column ids[
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] (not included). It
stores numbers of vertices, that incident to opposite
ends of edges outgoing from each vertex in the graph.
In the example above, vertex 2 has outgoing edges to
vertices 1, 3, 5, 6.
      </p>
      <p>The traversal of the vertices and edges of the graph
in this case is performed with two nested loops: the
outer loop reads o sets from the row pointers array
to obtain information about the number of edges
outgoing from each vertex, the inner loop reads column
ids array for following processing neighbors of each
vertex in the graph.</p>
      <p>
        The main advantage of the CSR format is the
compactness of the graph representation, which makes it
convenient for processing large graphs. For instance,
the CSR format is actively used in the Knowledge
Discovery Toolbox (KDT) [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] and GraphCT [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] systems
to store and process large graphs obtained from
analysis of biological data and social networks. In the KDT
system, the CSR format is used for compact storage
the incidence matrices of the graphs. In the GraphCT
system, on the other hand, CSR is used to store
adjacency matrices.
      </p>
      <p>
        However, the CSR format is only suitable for
processing static graphs. Processing of dynamic graphs
with the CSR format is extremely ine cient, and
requires a complete rebuild of the entire data structure
with every graph mutation. In addition, the parallel
processing of graphs with skewed degree distribution is
burdened with additional overhead costs in the form of
computational workload imbalance amongst
computational processes or threads [
        <xref ref-type="bibr" rid="ref20 ref21">20, 21</xref>
        ].
3.3
      </p>
    </sec>
    <sec id="sec-6">
      <title>Custom Formats</title>
      <p>
        Typically, custom formats designed to simplify
development of some complex graph algorithms. For
instance, some maximum ow algorithms
(EdmondsCarp algorithm [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] and push-relabel algorithm [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]),
uses a special \residual conductance" network, which
is repeatedly rebuilt during the execution of the
algorithm. Another example is the Girvan-Newman
community detection algorithm [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. The main idea of the
algorithm is to isolate communities by removing
intercommunity edges from the graph.
      </p>
      <p>As seen, the above algorithms use not only the
traversal procedure through all vertices and edges
(which can be e ciently performed using the CSR
format), but also the procedures of searching for
individual graph elements, as well as modifying the graph
topology. The detailed list of most commonly used
operations is presented in Table 1. Table 2 shows memory
complexity for various operations.
developer to store graphs with a lot of vertices and
edges (light weight operations of vertex and eage
addition and deletion), but badly suited for graph
topology modi cation (see vertex and edge deletion
operations) and navigation through the graph (it is hard
to obtain list of ingoing edges to some random
vertex). Opposite, storing graph as matrix allows
developer to carry out fast graph topology modi cations
(with complexity O(1) and O(N )) as well as navigating
through the graph (checking random vertex and edge
state with complexity O(1)), but matrix data
structure su ers from non-linear memory complexity (need
O(N 2) space for graph with N vertices).</p>
      <p>
        At the moment, there is no standard format for
storing graphs, which would allow to e ciently modify the
graph, access its individual elements in linear time,
and store only signi cant elements of the graph, and
allow parallel processing at the same time. However,
a number attempts are being made to develop such a
format. For instance, the extended storage
functionality and parallel processing of dynamic graphs is
provided by the data structure called STINGER [
        <xref ref-type="bibr" rid="ref25 ref26">25, 26</xref>
        ].
This data structure is based on linked lists consisting
of blocks of graph elements. Each block is a data
storage for an individual subset of vertices or edges. Each
block contains special metadata about the elements
stored inside it (for example, the minimum and
maximum number of the vertex inside the block). By
separating the entire array of vertices or edges into subsets,
and using metadata, the STINGER data structure
allows to process dynamically changing graphs in
parallel. Another example of custom graph format is
Resident Distributed Graphs (RDG) from GraphX [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ],
that uses vertex-cut partitioning scheme to minimize
data transfers during graph computations by evenly
assigning edges to computational nodes. Also, RDG
allows to e ciently view, lter and transform the
graph by operating on three tables (implemented as
Spark Resilient Distributed Datasets [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ]) storing the
RDG: EdgeTable (adjacency structure and edge data),
VertexDataTable (vertex data) and VertexMap
(mapping from the id of a vertex to the ids of the virtual
partitions that contain adjacent edges).
4
4.1
      </p>
      <sec id="sec-6-1">
        <title>Graph Processing Models</title>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Vertex-Centric Paradigm</title>
      <p>According to this paradigm, graph algorithms are
executed in \think like a vertex" model. Thus, each
individual vertex is considered as a separate computational
element, dealing with the data available to it (for
instance, internal variables) and having the ability to
execute various computational algorithms (provided by
developer). A vertex can receive messages from
neighboring vertices along its incoming edges, and also send
messages to other vertices along the outgoing edges.</p>
      <p>The virtue of the vertex-centric model is the ability
to naturally parallelize the computations. In this case,
the processing of each vertex (or, possibly, the vertex
group) will be assigned to a separate computational
process or thread. The implementation of these
principles makes it possible to achieve high scalability of
computing.</p>
      <p>
        However, such a model proves to be convenient not
for all algorithms. For example, the page-rank
algorithm [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ] or the label-propagation algorithm [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ]
naturally ts in this model, in contrast to, for example,
complex algorithms for spectral graph analysis.
      </p>
      <p>
        The most famous (and the very rst at the same
moment) implementation of this paradigm is Pregel [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ],
developed by Google. The computations in this
system consist of several steps. In the rst step, the
graph is initialized and the initial values is assigned
to all vertices. After initialization, a series of
supersteps separated by synchronization steps are executed
(the Pregel computation model follows the BSP [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]
paradigm). At each step, every vertex executes its
program, speci ed by the developer, using the data
available to it, as well as data obtained from other
vertices (by incoming edges). After nishing the
calculations, the vertex can send data to its neighbors (by
outgoing edges). One important property of Pregel is
that only \active" nodes can compute and send data.
Vertex can become \active" when received messages
from other vertices (the vertex state machine is shown
in Figure 3).
      </p>
      <p>Vote to halt
Active</p>
      <p>Inactive</p>
      <p>Message received
Domain-Speci c Languages (DSL) is a special
programming language intended for applications in a
speci c domain area. DSL, as a rule, contains
domainspeci c expressions and constructs. The program
developed using the DSL is translated by the
compiler into the target language (for example, C/C++,
CUDA, etc.).</p>
      <p>Advantages of using DSL to develop algorithms on
graphs is increasing the productivity of development.
DSL allows to express algorithmic ideas using terms of
the domain area, which usually requires signi cantly
less programming code compared to similar programs
developed with low-level languages. Using DSL in
conjunction with compilers that support various
hardware architectures allows developer not to worry about
porting the program code to more e cient and
highperformance platforms. Finally, DSL allows to use
highly optimized (usually parallelized) procedures that
allow you to e ciently process large graphs (for
example, the procedure for simultaneously updating the
state of all vertices in a graph, etc.).</p>
      <p>The drawbacks of DSL include the inability to use
the programs written with it together with other code
(written in C++, for example). It is allowed to use
programs translated from DSL as separate ready-made
computational modules, but this option may not
always be convenient for the developers and domain
scientists.</p>
      <p>
        One of the most popular DSL for development of
high-performance parallel graph algorithms is
GreenMarl [
        <xref ref-type="bibr" rid="ref32 ref33">32,33</xref>
        ]. Green-Marl allows to calculate the scalar
invariant for each element in the graph, as well as
the property of each element in the graph (for
instance, the centrality metric [
        <xref ref-type="bibr" rid="ref34">34</xref>
        ]) or extract a speci c
subgraph from the existing graph. Using this DSL,
the developer has the ability to operate the
apparatus of graph theory, while receiving, after
compilation, a well-parallelized code. For example, a
parallel search of all vertices in the graph happens
according its breadth- rst order (special traversal operations
InBFS and InRBFS are used for this purpose). Also,
Green-Marl has special containers for storing sets of
vertices: Set, Order and Sequence, which di ers in
various types of access to the elements and are designed
for parallel and/or sequential access to its elements.
The use of such containers greatly simpli es the
development of some algorithms (for example, the Dijkstra
algorithm [
        <xref ref-type="bibr" rid="ref35">35</xref>
        ] or -stepping [
        <xref ref-type="bibr" rid="ref36">36</xref>
        ]). An example of an
implementation of the algorithm using Green-Marl is
shown in Figure 4.
4.3
      </p>
    </sec>
    <sec id="sec-8">
      <title>Parallel Processing Primitives</title>
      <p>Parallel processing primitives serves as a small
\building blocks" of more complex graph algorithms. Thus,
di erent algorithms may consist of combinations of the
same set of primitives.</p>
      <p>
        The development of complex algorithms on graphs
is a big problem, coupled with a number of di culties.
Debugging is one such challenge. For example, the
correctness of the execution of some community
detection algorithms [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ] (especially when working with
real data) is hard to control, because there is no clear
criteria for the correctness of the detection of
communities (except some theoretical metrics like
modularity, that may not always be suitable for real-world
applications). This complexity is further intensi ed
Pr oc ed ur e C o m p u t e _ B C ( G : Graph ,
BC : Node_Prop &lt; Float &gt;( G )) {
      </p>
      <p>G . BC =0; // i n i t i a l i z e BC
Foreach ( s : G . Nodes ) {
// define te mp ora ry p r o p e r t i e s
Node_Prop &lt; Float &gt;( G ) Sigma ;
Node_Prop &lt; Float &gt;( G ) Delta ;
// Init . Sigma for root
s . Sigma = 1;
// Traverse graph
// in BFS - order from s
InBFS ( v : G . Nodes From s )( v != s ) {
// sum over BFS - parents
v . Sigma = Sum ( w : v . UpNbrs ){ w . Sigma };
}
// Traverse graph
// in reverse BFS - order
InRBFS ( v != s ) {
// sum over BFS - children
v . Delta = Sum ( w : v . DownNbrs ) {
v . Sigma / w . Sigma * (1+ w . Delta )
};
v . BC += v . Delta @s ; // a c c u m u l a t e BC
} } }
when it comes to parallel processing of graphs with
a large number of vertices and edges. When using
special-purpose graph processing primitives, the
developer only needs to be sure of the correctness of each
primitive operation separately. It is necessary to
control only the high-level description of the algorithm
when using primitives.</p>
      <p>Another di culty is porting the code to various
parallel architectures. Writing e cient code for
computational accelerators (GPGPU or MIC) or moving
from a shared memory model to a distributed memory
usually requires a lot of e orts. Considering the fact
that every 3 to 5 years there are signi cant changes
in architectures and programming models, the work
of porting a large number of di erent algorithms can
continue \in nitely". The use of primitives
implemented for di erent architectures makes it possible to
abstract from this problem and implement only
primitives themselves for each architecture.</p>
      <p>The advantage of using processing primitives
against using DSL is the ability to use primitives along
with other code in the program. Using DSL, on the
contrary, forces the developer to work only in a special
development environment.</p>
      <p>Primitives are used in a variety of graph
processing systems. However, there is no single standard for
the use of primitives for parallel processing of graphs
at the moment. Therefore, in many systems the set
of these primitives varies, as well as the principles by
which they are built. Some implementations of such
primitives will be described below.</p>
      <p>
        The PowerGraph [
        <xref ref-type="bibr" rid="ref37">37</xref>
        ] system is based on the
Gather-Apply-Scatter (GAS) model and includes three
types of primitives:
      </p>
      <p>Gather { each vertex v collects data about its
adjacent vertices and edges;
Apply { the value of each vertex v is updated
(taking into account previously collected data in
the Gather phase);
Scatter { The new value of the vertex v distributes
to adjacent vertices.</p>
      <p>By combining the above primitives, the developer has
the opportunity to create various set of graph
algorithms.</p>
      <p>
        The GAS model is not the only possible way of
expressing \building blocks" of the complex graph
algorithms. Another well-known example is the
AdvanceFilter-Compute model introduced in the Gunrock {
system for developing algorithms on graphs using
GPGPU accelerators [
        <xref ref-type="bibr" rid="ref39">38</xref>
        ]. This model is based on
modi cation of the vertex frontiers during execution
of each iteration of the algorithm and includes the
following primitives:
      </p>
      <p>Advance { obtaining a new vertex frontier by
passing along adjacent edges from the current
vertex frontier;
Filter { obtaining a new vertex frontier by
selecting some subset of vertices from the current vertex
frontier;
Compute { obtaining a new vertex frontier by
executing a procedure de ned by the developer, that
applied to the current vertex frontier.</p>
      <p>
        Primitives are also used in other parallel graph
processing systems, such as MapGraph [
        <xref ref-type="bibr" rid="ref40">39</xref>
        ], HelP [
        <xref ref-type="bibr" rid="ref41">40</xref>
        ],
GraphPad [
        <xref ref-type="bibr" rid="ref42">41</xref>
        ], GraphBLAS [
        <xref ref-type="bibr" rid="ref43">42</xref>
        ], etc.
5
      </p>
      <sec id="sec-8-1">
        <title>Conclusion</title>
        <p>This paper gives an overview of the main concepts
(shift to parallel computing, using complex data
structures and new computational models) that are used in
modern graph processing systems. Using these
concepts allows:</p>
        <p>Simplify development of novel graph algorithms;
Use di erent computer architectures, without
changing the program code;
Speedup the execution of complex graph
algorithms.</p>
      </sec>
      <sec id="sec-8-2">
        <title>Acknowledgment</title>
        <p>The research was supported by the RFBR under the
project no. 16-37-00203 mol a and the Ministry of
Education and Science of the Russian Federation
Agreement no. 02.A03.21.0006.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>E.</given-names>
            <surname>Otte</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Rousseau</surname>
          </string-name>
          , \
          <article-title>Social network analysis: a powerful strategy, also for the information sciences,"</article-title>
          <source>Journal of Information Science</source>
          , vol.
          <volume>28</volume>
          , no.
          <issue>6</issue>
          , pp.
          <volume>441</volume>
          {
          <issue>453</issue>
          ,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Grandjean</surname>
          </string-name>
          , \
          <article-title>A social network analysis of twitter: Mapping the digital humanities community,"</article-title>
          <source>Cogent Arts &amp; Humanities</source>
          , vol.
          <volume>3</volume>
          , no.
          <issue>1</issue>
          , p.
          <fpage>1171458</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>D.</given-names>
            <surname>Ustalov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Panchenko</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Biemann</surname>
          </string-name>
          , \
          <article-title>Watset: Automatic Induction of Synsets from a Graph of Synonyms," in Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics</article-title>
          (Volume
          <volume>1</volume>
          :
          <string-name>
            <surname>Long</surname>
            <given-names>Papers)</given-names>
          </string-name>
          , (Vancouver, Canada), pp.
          <volume>1579</volume>
          {
          <issue>1590</issue>
          ,
          <string-name>
            <surname>Association</surname>
          </string-name>
          for Computational Linguistics,
          <year>2017</year>
          . http: //aclweb.org/anthology/P17-1145
          <source>(accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>E.</given-names>
            <surname>Bullmore</surname>
          </string-name>
          and
          <string-name>
            <given-names>O.</given-names>
            <surname>Sporns</surname>
          </string-name>
          , \
          <article-title>Complex brain networks: Graph theoretical analysis of structural and functional systems,"</article-title>
          vol.
          <volume>10</volume>
          , pp.
          <volume>186</volume>
          {
          <issue>98</issue>
          ,
          <fpage>03</fpage>
          <lpage>2009</lpage>
          . https://www.nature.com/nrn/ journal/v10/n3/pdf/nrn2575.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Horn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Ostwald</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Reisert</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Blankenburg</surname>
          </string-name>
          , \
          <article-title>The structural{functional connectome and the default mode network of the human brain,"</article-title>
          <source>NeuroImage</source>
          , vol.
          <volume>102</volume>
          , no.
          <issue>Part 1</issue>
          , pp.
          <volume>142</volume>
          {
          <issue>151</issue>
          ,
          <year>2014</year>
          . https://www.sciencedirect.com/ science/article/pii/S1053811913010057 (accessed:
          <fpage>20</fpage>
          .
          <fpage>10</fpage>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>M. G.</given-names>
            <surname>Bell</surname>
          </string-name>
          et al.,
          <article-title>Transportation network analysis</article-title>
          .
          <source>Wiley Online Library</source>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>A. A.</given-names>
            <surname>Hagberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Schult</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P. J.</given-names>
            <surname>Swart</surname>
          </string-name>
          , \
          <article-title>Exploring network structure, dynamics, and function using NetworkX,"</article-title>
          <source>in Proceedings of the 7th Python in Science Conference (SciPy2008)</source>
          , (Pasadena, CA USA), pp.
          <volume>11</volume>
          {
          <issue>15</issue>
          ,
          <string-name>
            <surname>Aug</surname>
          </string-name>
          .
          <year>2008</year>
          . http://aric.hagberg. org/papers/hagberg-2008
          <source>-exploring.pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M.</given-names>
            <surname>Bastian</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Heymann</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Jacomy</surname>
          </string-name>
          , \
          <article-title>Gephi: An open source software for exploring and manipulating networks," 2009</article-title>
          . http://www.aaai.org/
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>G.</given-names>
            <surname>Csardi</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Nepusz</surname>
          </string-name>
          , \
          <article-title>The igraph software package for complex network research," InterJournal, vol</article-title>
          .
          <source>Complex Systems</source>
          , p.
          <fpage>1695</fpage>
          ,
          <year>2006</year>
          . https://pdfs.semanticscholar.
          <source>org/1d27/ 44b83519657f5f2610698a8ddd177ced4f5c.pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>L. G.</given-names>
            <surname>Valiant</surname>
          </string-name>
          , \
          <article-title>A bridging model for parallel computation,"</article-title>
          <source>Commun. ACM</source>
          , vol.
          <volume>33</volume>
          , pp.
          <volume>103</volume>
          {
          <issue>111</issue>
          ,
          <string-name>
            <surname>Aug</surname>
          </string-name>
          .
          <year>1990</year>
          . http://web.mit.edu/6.976/www/ handout/valiant2.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <article-title>The Boost Graph Library: User Guide</article-title>
          and
          <string-name>
            <given-names>Reference</given-names>
            <surname>Manual</surname>
          </string-name>
          . Boston, MA, USA: AddisonWesley Longman Publishing Co., Inc.,
          <year>2002</year>
          . https://markqiu.files.wordpress.com/
          <year>2009</year>
          /12/boost-graph-library.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>D.</given-names>
            <surname>Gregor</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Lumsdaine</surname>
          </string-name>
          , \
          <article-title>The parallel bgl: A generic library for distributed graph computations," in In Parallel Object-Oriented Scienti c Computing (POOSC</article-title>
          ,
          <year>2005</year>
          . http:// citeseerx.ist.psu.edu/viewdoc/download? doi
          <source>=10.1.1.84.2137&amp;rep=rep1&amp;type=pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>A.</given-names>
            <surname>Geist</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Gropp</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Huss-Lederman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Lumsdaine</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Lusk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Saphir</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Skjellum</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Snir</surname>
          </string-name>
          , MPI-2
          <article-title>: Extending the message-passing interface</article-title>
          , pp.
          <volume>128</volume>
          {
          <fpage>135</fpage>
          . Berlin, Heidelberg: Springer Berlin Heidelberg,
          <year>1996</year>
          . http:// citeseerx.ist.psu.edu/viewdoc/download? doi
          <source>=10.1.1.48.2841&amp;rep=rep1&amp;type=pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>G.</given-names>
            <surname>Elidan</surname>
          </string-name>
          ,
          <string-name>
            <surname>I. McGraw</surname>
          </string-name>
          ,
          <string-name>
            <given-names>and D.</given-names>
            <surname>Koller</surname>
          </string-name>
          , \
          <article-title>Residual belief propagation: Informed scheduling for asynchronous message passing,"</article-title>
          <source>in Proceedings of the Twenty-Second Conference on Uncertainty in Arti cial Intelligence</source>
          , UAI'
          <fpage>06</fpage>
          ,
          <string-name>
            <surname>(Arlington</surname>
          </string-name>
          , Virginia, United States), pp.
          <volume>165</volume>
          {
          <issue>173</issue>
          , AUAI Press,
          <year>2006</year>
          . https://ai.stanford.edu/~koller/Papers/ Elidan+al:UAI06.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kyrola</surname>
          </string-name>
          , G. Blelloch, and
          <string-name>
            <given-names>C.</given-names>
            <surname>Guestrin</surname>
          </string-name>
          , \Graphchi:
          <article-title>Large-scale graph computation on just a pc,"</article-title>
          <source>in Proceedings of the 10th USENIX Conference on Operating Systems Design and Implementation</source>
          , OSDI'
          <fpage>12</fpage>
          , (Berkeley, CA, USA), pp.
          <volume>31</volume>
          {
          <issue>46</issue>
          ,
          <string-name>
            <given-names>USENIX</given-names>
            <surname>Association</surname>
          </string-name>
          ,
          <year>2012</year>
          . https:// www.cs.cmu.edu/~guyb/papers/KBG12.pdf (
          <issue>accessed</issue>
          :
          <fpage>20</fpage>
          .
          <fpage>10</fpage>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>F.</given-names>
            <surname>Khorasani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Vora</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Gupta</surname>
          </string-name>
          , and
          <string-name>
            <given-names>L. N.</given-names>
            <surname>Bhuyan</surname>
          </string-name>
          , \Cusha:
          <article-title>Vertex-centric graph processing on gpus," in Proceedings of the 23rd International Symposium on High-performance Parallel and Distributed Computing</article-title>
          , HPDC '
          <fpage>14</fpage>
          , (New York, NY, USA), pp.
          <volume>239</volume>
          {
          <issue>252</issue>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>J.</given-names>
            <surname>Kepner</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Gilbert</surname>
          </string-name>
          ,
          <article-title>Graph Algorithms in the Language of Linear Algebra</article-title>
          .
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>A.</given-names>
            <surname>Lugowski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Alber</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Buluc</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. R.</given-names>
            <surname>Gilbert</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Reinhardt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Teng</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Waranis</surname>
          </string-name>
          ,
          <article-title>A Flexible Open-Source Toolbox for Scalable Complex Graph Analysis</article-title>
          , pp.
          <volume>930</volume>
          {
          <fpage>941</fpage>
          . http://epubs.siam. org/doi/pdf/10.1137/1.9781611972825.80 (
          <issue>accessed</issue>
          :
          <fpage>20</fpage>
          .
          <fpage>10</fpage>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>D.</given-names>
            <surname>Ediger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Jiang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E. J.</given-names>
            <surname>Riedy</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Bader</surname>
          </string-name>
          , \Graphct:
          <article-title>Multithreaded algorithms for massive graph analysis,"</article-title>
          <source>IEEE Transactions on Parallel and Distributed Systems</source>
          , vol.
          <volume>24</volume>
          , pp.
          <volume>2220</volume>
          {
          <issue>2229</issue>
          ,
          <string-name>
            <surname>Nov</surname>
          </string-name>
          <year>2013</year>
          . https://www.cc.gatech. edu/~bader/papers/GraphCT-TPDS2013.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>D.</given-names>
            <surname>Merrill</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Garland</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Grimshaw</surname>
          </string-name>
          , \
          <article-title>Scalable gpu graph traversal,"</article-title>
          <source>in Proceedings of the 17th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming</source>
          ,
          <source>PPoPP '12</source>
          , (New York, NY, USA), pp.
          <volume>117</volume>
          {
          <issue>128</issue>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2012</year>
          . http://research.nvidia.com/sites/ default/files/pubs/2012-02_
          <fpage>ScalableGPU</fpage>
          -Graph/ppo213s-merrill.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>J.</given-names>
            <surname>Chhugani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Satish</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Kim</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Sewall</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Dubey</surname>
          </string-name>
          , \
          <article-title>Fast and e cient graph traversal algorithm for cpus: Maximizing single-node e - ciency,"</article-title>
          <source>in 2012 IEEE 26th International Parallel and Distributed Processing Symposium</source>
          , pp.
          <volume>378</volume>
          {
          <issue>389</issue>
          , May
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>J.</given-names>
            <surname>Edmonds and R. M. Karp</surname>
          </string-name>
          , \
          <article-title>Theoretical improvements in algorithmic e ciency for network ow problems,"</article-title>
          <source>J. ACM</source>
          , vol.
          <volume>19</volume>
          , pp.
          <volume>248</volume>
          {
          <issue>264</issue>
          ,
          <string-name>
            <surname>Apr</surname>
          </string-name>
          .
          <year>1972</year>
          . http://citeseerx. ist.psu.edu/viewdoc/download?doi
          <source>=10.1. 1.610.4784&amp;rep=rep1&amp;type=pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>A. V.</given-names>
            <surname>Goldberg</surname>
          </string-name>
          and
          <string-name>
            <given-names>R. E.</given-names>
            <surname>Tarjan</surname>
          </string-name>
          , \
          <article-title>A new approach to the maximum- ow problem,"</article-title>
          <source>J. ACM</source>
          , vol.
          <volume>35</volume>
          , pp.
          <volume>921</volume>
          {
          <issue>940</issue>
          ,
          <string-name>
            <surname>Oct</surname>
          </string-name>
          .
          <year>1988</year>
          . https://www. cs.princeton.edu/courses/archive/fall03/ cs528/handouts/a%20new%
          <fpage>20approach</fpage>
          .
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>M.</given-names>
            <surname>Girvan</surname>
          </string-name>
          and
          <string-name>
            <given-names>M. E. J.</given-names>
            <surname>Newman</surname>
          </string-name>
          , \
          <article-title>Community structure in social and biological networks,"</article-title>
          <source>Proceedings of the National Academy of Sciences</source>
          , vol.
          <volume>99</volume>
          , no.
          <issue>12</issue>
          , pp.
          <volume>7821</volume>
          {
          <issue>7826</issue>
          ,
          <year>2002</year>
          . http://www.pnas.org/content/99/12/ 7821.full.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>D.</given-names>
            <surname>Ediger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>McColl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Riedy</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Bader</surname>
          </string-name>
          , \
          <article-title>Stinger: High performance data structure for streaming graphs,"</article-title>
          <source>in 2012 IEEE Conference on High Performance Extreme Computing</source>
          , pp.
          <volume>1</volume>
          {
          <issue>5</issue>
          ,
          <string-name>
            <surname>Sept</surname>
          </string-name>
          <year>2012</year>
          . http://ieee-hpec.org/ 2012/index_htm_files/ediger.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Bader</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Berry</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Amos-Binks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Hastings</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Madduri</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S. C.</given-names>
            <surname>Poulos</surname>
          </string-name>
          , \Stinger:
          <article-title>Spatio-temporal interaction networks and graphs (sting) extensible representation," 2009</article-title>
          . https://pdfs.semanticscholar.
          <source>org/6992/ 7a3b9fc25e655ce662c03deb1e9d2832585c.pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>R. S.</given-names>
            <surname>Xin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. E.</given-names>
            <surname>Gonzalez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. J.</given-names>
            <surname>Franklin</surname>
          </string-name>
          ,
          <string-name>
            <surname>and I. Stoica</surname>
          </string-name>
          , \
          <article-title>Graphx: A resilient distributed graph system on spark,"</article-title>
          <source>in First International Workshop on Graph Data Management Experiences and Systems</source>
          , GRADES '
          <fpage>13</fpage>
          , (New York, NY, USA), pp.
          <volume>2</volume>
          :
          <issue>1</issue>
          {
          <issue>2</issue>
          :
          <fpage>6</fpage>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2013</year>
          . http://www.istc-cc.cmu.edu/publications/ papers/2013/grades-graphx_
          <article-title>with_fonts</article-title>
          .
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>M.</given-names>
            <surname>Zaharia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Chowdhury</surname>
          </string-name>
          ,
          <string-name>
            <surname>T. Das</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Dave</surname>
            , J. Ma,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>McCauley</surname>
            ,
            <given-names>M. J.</given-names>
          </string-name>
          <string-name>
            <surname>Franklin</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Shenker</surname>
            ,
            <given-names>and I. Stoica</given-names>
          </string-name>
          , \
          <article-title>Resilient distributed datasets: A fault-tolerant abstraction for in-memory cluster computing,"</article-title>
          <source>in Proceedings of the 9th USENIX Conference on Networked Systems Design and Implementation</source>
          , NSDI'
          <fpage>12</fpage>
          , (Berkeley, CA, USA), pp.
          <volume>2</volume>
          {
          <issue>2</issue>
          ,
          <string-name>
            <given-names>USENIX</given-names>
            <surname>Association</surname>
          </string-name>
          ,
          <year>2012</year>
          . https://www.usenix.org/system/files/ conference/nsdi12/nsdi12-
          <fpage>final138</fpage>
          .
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>S.</given-names>
            <surname>Brin</surname>
          </string-name>
          and
          <string-name>
            <given-names>L.</given-names>
            <surname>Page</surname>
          </string-name>
          , \
          <article-title>The anatomy of a large-scale hypertextual web search engine," in Seventh International WorldWide Web Conference</article-title>
          (WWW
          <year>1998</year>
          ),
          <year>1998</year>
          . http://ilpubs.stanford.edu:
          <volume>8090</volume>
          /361/1/1998-8.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>N.</given-names>
            <surname>Raghavan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Albert</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Kumara</surname>
          </string-name>
          , \
          <article-title>Near linear time algorithm to detect community structures in large-scale networks,"</article-title>
          vol.
          <volume>76</volume>
          , p.
          <volume>036106</volume>
          ,
          <issue>10</issue>
          <year>2007</year>
          . https://arxiv.org/pdf/0709.2938.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>G.</given-names>
            <surname>Malewicz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. H.</given-names>
            <surname>Austern</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. J.</given-names>
            <surname>Bik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Dehnert</surname>
          </string-name>
          , I. Horn,
          <string-name>
            <given-names>N.</given-names>
            <surname>Leiser</surname>
          </string-name>
          , and G. Czajkowski, \
          <article-title>Pregel: A system for largescale graph processing,"</article-title>
          <source>in Proceedings of the 2010 ACM SIGMOD International Conference on Management of Data, SIGMOD '10</source>
          , (New York, NY, USA), pp.
          <volume>135</volume>
          {
          <issue>146</issue>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2010</year>
          . https://kowshik.github.io/JPregel/ pregel_paper.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <given-names>S.</given-names>
            <surname>Hong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Cha</surname>
          </string-name>
          , E. Sedlar, and
          <string-name>
            <given-names>K.</given-names>
            <surname>Olukotun</surname>
          </string-name>
          , \
          <article-title>Green-marl: A dsl for easy and e cient graph analysis,"</article-title>
          <source>in Proceedings of the Seventeenth International Conference on Architectural Support for Programming Languages and Operating Systems</source>
          ,
          <string-name>
            <surname>ASPLOS XVII</surname>
          </string-name>
          , (New York, NY, USA), pp.
          <volume>349</volume>
          {
          <issue>362</issue>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2012</year>
          . http://citeseerx. ist.psu.edu/viewdoc/download?doi
          <source>=10.1. 1.220.1796&amp;rep=rep1&amp;type=pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <given-names>S.</given-names>
            <surname>Hong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Salihoglu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Widom</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Olukotun</surname>
          </string-name>
          , \
          <article-title>Simplifying scalable graph processing with a domain-speci c language,"</article-title>
          <source>in Proceedings of Annual IEEE/ACM International Symposium on Code Generation and Optimization</source>
          , CGO '
          <fpage>14</fpage>
          , (New York, NY, USA), pp.
          <volume>208</volume>
          :
          <issue>208</issue>
          {
          <fpage>208</fpage>
          :
          <fpage>218</fpage>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2014</year>
          . https://pdfs.semanticscholar.
          <source>org/2d8b/ e5e1b88ac9919984b9369f7045fbb0af0d08.pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <given-names>U.</given-names>
            <surname>Brandes</surname>
          </string-name>
          , \
          <article-title>A faster algorithm for betweenness centrality,"</article-title>
          <source>Journal of Mathematical Sociology</source>
          , vol.
          <volume>25</volume>
          , pp.
          <volume>163</volume>
          {
          <issue>177</issue>
          ,
          <year>2001</year>
          . http://citeseerx. ist.psu.edu/viewdoc/download?doi=10.1. 1.11.
          <year>2024</year>
          &amp;
          <article-title>rep=rep1&amp;type=pdf (accessed: 20</article-title>
          .
          <fpage>10</fpage>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>E. W.</given-names>
            <surname>Dijkstra</surname>
          </string-name>
          , \
          <article-title>A note on two problems in connexion with graphs," Numer</article-title>
          . Math., vol.
          <volume>1</volume>
          , pp.
          <volume>269</volume>
          {
          <issue>271</issue>
          ,
          <string-name>
            <surname>Dec</surname>
          </string-name>
          .
          <year>1959</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36] U. Meyer and P. Sanders, \
          <article-title>-stepping: A parallelizable shortest path algorithm,"</article-title>
          <source>J. Algorithms</source>
          , vol.
          <volume>49</volume>
          , pp.
          <volume>114</volume>
          {
          <issue>152</issue>
          ,
          <string-name>
            <surname>Oct</surname>
          </string-name>
          .
          <year>2003</year>
          . https: //ac.els-cdn.com/S0196677403000762/ 1-
          <fpage>s2</fpage>
          .
          <fpage>0</fpage>
          -
          <lpage>S0196677403000762</lpage>
          -main. pdf?_
          <source>tid=a3d2287c-b5a5-11e7-b112- 00000aacb362&amp;acdnat=1508511048_ d998da6a4ec35491c44e069c0b48b756 (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <given-names>J. E.</given-names>
            <surname>Gonzalez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Low</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Gu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Bickson</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Guestrin</surname>
          </string-name>
          , \Powergraph:
          <article-title>Distributed graph-parallel computation on natural graphs,"</article-title>
          <source>in Proceedings of the 10th USENIX Conference on Operating Systems Design and Implementation</source>
          , OSDI'
          <fpage>12</fpage>
          , (Berkeley, CA, USA), pp.
          <volume>17</volume>
          {
          <issue>30</issue>
          ,
          <string-name>
            <given-names>USENIX</given-names>
            <surname>Association</surname>
          </string-name>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          https://www.usenix.org/system/files/ conference/osdi12/osdi12-final-167.pdf (
          <issue>accessed</issue>
          :
          <fpage>20</fpage>
          .
          <fpage>10</fpage>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          [38]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Davidson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Pan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Wu</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          <article-title>Ri el, and</article-title>
          <string-name>
            <given-names>J. D.</given-names>
            <surname>Owens</surname>
          </string-name>
          , \
          <article-title>Gunrock: A high-performance graph processing library on the gpu," SIGPLAN Not.</article-title>
          , vol.
          <volume>51</volume>
          , pp.
          <volume>11</volume>
          :
          <issue>1</issue>
          {
          <fpage>11</fpage>
          :
          <fpage>12</fpage>
          ,
          <string-name>
            <surname>Feb</surname>
          </string-name>
          .
          <year>2016</year>
          . https://arxiv.org/pdf/1501.05387.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref40">
        <mixed-citation>
          [39]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Fu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Personick</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Thompson</surname>
          </string-name>
          , \
          <article-title>Mapgraph: A high level api for fast development of high performance graph analytics on gpus,"</article-title>
          <source>in Proceedings of Workshop on GRAph Data Management Experiences and Systems</source>
          , GRADES'
          <fpage>14</fpage>
          , (New York, NY, USA), pp.
          <volume>2</volume>
          :
          <issue>1</issue>
          {
          <issue>2</issue>
          :
          <fpage>6</fpage>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2014</year>
          . https://pdfs.semanticscholar.org/3ebf/ 3857a60c3e224284bbbe6c7127d0a12c546d. pdf?_
          <source>ga=2.86211930.371173678</source>
          .
          <fpage>1508511132</fpage>
          -
          <lpage>1908779532</lpage>
          .1478770815 (
          <issue>accessed</issue>
          :
          <fpage>20</fpage>
          .
          <fpage>10</fpage>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref41">
        <mixed-citation>
          [40]
          <string-name>
            <given-names>S.</given-names>
            <surname>Salihoglu</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Widom</surname>
          </string-name>
          , \
          <article-title>Help: High-level primitives for large-scale graph processing,"</article-title>
          <source>in Proceedings of Workshop on GRAph Data Management Experiences and Systems</source>
          , GRADES'
          <fpage>14</fpage>
          , (New York, NY, USA), pp.
          <volume>3</volume>
          :
          <issue>1</issue>
          {
          <issue>3</issue>
          :
          <fpage>6</fpage>
          ,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          ,
          <year>2014</year>
          . http://ilpubs.stanford.edu:
          <volume>8090</volume>
          /1085/2/ primitives_tr_sig_alternate.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref42">
        <mixed-citation>
          [41]
          <string-name>
            <surname>M. J. Anderson</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <string-name>
            <surname>Sundaram</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <string-name>
            <surname>Satish</surname>
          </string-name>
          ,
          <string-name>
            <surname>M. M. A. Patwary</surname>
            ,
            <given-names>T. L.</given-names>
          </string-name>
          <string-name>
            <surname>Willke</surname>
            , and
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Dubey</surname>
          </string-name>
          , \Graphpad:
          <article-title>Optimized graph primitives for parallel and distributed platforms,"</article-title>
          <source>in 2016 IEEE International Parallel and Distributed Processing Symposium (IPDPS)</source>
          , pp.
          <volume>313</volume>
          {
          <issue>322</issue>
          , May
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref43">
        <mixed-citation>
          [42]
          <string-name>
            <given-names>J.</given-names>
            <surname>Kepner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Aaltonen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Bader</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Buluc</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Franchetti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gilbert</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Hutchison</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kumar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Lumsdaine</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Meyerhenke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>McMillan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Yang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. D.</given-names>
            <surname>Owens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Zalewski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Mattson</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Moreira</surname>
          </string-name>
          , \
          <article-title>Mathematical foundations of the graphblas,"</article-title>
          <source>in 2016 IEEE High Performance Extreme Computing Conference (HPEC)</source>
          , pp.
          <volume>1</volume>
          {
          <issue>9</issue>
          ,
          <string-name>
            <surname>Sept</surname>
          </string-name>
          <year>2016</year>
          . https://arxiv.org/pdf/ 1606.05790.
          <source>pdf (accessed: 20.10</source>
          .
          <year>2017</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>