<!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>An E cient Implementation of the Transitive Closure Problem on Intel KNL Architecture</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Lomonosov Moscow State University</institution>
          ,
          <addr-line>Moscow</addr-line>
          ,
          <country>Russia afanasiev</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>The Mathematical Description of the Problem</institution>
        </aff>
      </contrib-group>
      <fpage>10</fpage>
      <lpage>19</lpage>
      <abstract>
        <p>An important trend in modern supercomputing is a frequent usage of co-processors, such as GPUs and Intel Xeon PHIs. The recent generation of Intel Knights Landing processors provide high performance computational power with a large amount of high-bandwidth memory, what makes them a perfect platform for graph-processing. The presented study describes implementation approaches to large-scale graph processing on Intel KNL processors; as a sample problem, the transitive closure computation is discussed. Based on the joint analysis of algorithm properties and architecture features, the performance tuning has been performed, including graph storage format optimizations, e cient usage of memory hierarchy and vectorization. As a result, an optimized algorithm implementation for the transitive closure problem solution has been developed. The proposed implementation has been studied using di erent approaches, aimed at demonstrating advantages and disadvantages of Intel KNL architecture in solving graph-processing problems.</p>
      </abstract>
      <kwd-group>
        <kwd>transitive closure</kwd>
        <kwd>Intel Knights Landing</kwd>
        <kwd>graph processing</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Ilya Afanasyev</title>
      <p>
        An interest to large-scale graph processing is recently growing rapidly, since
graph data structure perfectly emulate real-world objects and connections
between them. Some examples of such objects are social and infrastructural (energy
and transport) networks, micro-biology, databases and social models, etc. The
mentioned problems have an important common property { the corresponding
graphs have very large size (up to millions vertices and billions edges); as a
result, a parallel approach is required to process those data-structures in a
reasonable amount of time. Transitive closure computation is one of the fundamental
graph-processing problems, which can be used to evaluate vertex connectivity.
The transitive closure computation problem can be applied in several already
mentioned application elds, for example, in database systems modeling [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
A directed graph G = (V; E) with vertices V and edges E is given. The path
P (u; v) between vertices u and v is de ned as a sequence of edges e1 = (u; w1); e2 =
(w1; w2); : : : ; ek = (wk 1; wk), starting in vertex u and ending in vertex v, where
edges are following each other. Vertex v is reachable from vertex u, if at least a
single path P (u; v) between vertices u and v exists (every vertex is considered
reachable from itself).
      </p>
      <p>Computing the transitive closure of graph G means obtaining graph G+ =
(V; E+), where an edge (v; w) from G belongs to E+ if and only if vertex w is
reachable form vertex v in graph G. As a result, the transitive closure problem
solution requires jV j2 storage space, so it can't be calculated using modern
computers computational node's memory even for medium-sized graphs (starting
with around 220 vertices). For this reason the generalization of the transitive
closure problem is used in current paper: only the speci ed pairs of vertices
(u1; v1); (u2; v2); : : : ; (un; vn) are checked to belong to the transitive closure. The
amount of the pairs required to check n becomes an additional exible algorithm
parameter: varying it may greatly a ect the overall algorithm performance.
3</p>
      <sec id="sec-1-1">
        <title>State of the Art: Algorithms and Implementations</title>
        <p>
          Current section uses the following notations to evaluate the complexity of
reviewed algorithms: jV j corresponds to the count of vertices in input graph G, jEj
- to the count of edges. The transitive closure computation problem in directed
graph G can be solved using three di erent traditional approaches, described
below.
1. The transitive closure computation can be reduced to the shortest paths
computation in a corresponding graph with identical weights. Consequently,
it can be solved with Floyd-Warshall algorithm, introduced in [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] and [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ].
This algorithm has O(jV j3) computational complexity, and historically is
the the rst developed algorithm for the transitive closure problem solution
[
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. An important property of Floyd-Warshall algorithm is O(jV j2) memory
requirement for computations, what immediately reduces its applicability
only to small-scale graphs.
2. The transitive closure can be obtained using several multiple breadth- rst
searches (BFS), executed from each vertex of the graph. BFS algorithm has
been rst described in [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]; the proposed algorithm allows checking
reachability between the selected source vertex and other vertices of the graph
with only O(jEj + jV j) operations required (using a queue-based
implementation approach). As a result, the full transitive closure computation requires
O(jV j (jV j + jEj)) operations.
3. Among the reviewed approaches, the most optimal computational
complexity has Purdom's algorithm, introduced in [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. Purdom's algorithm is based
on the following idea: the transitive closure computation for graph G can be
reduced to the transitive closure computation for graph G , obtained from
graph G by collapsing G's strongly connected components into G vertices.
The described approach provides O(jEj + ujV j) computational complexity,
where u is the count of edges in graph G . The provided estimate is based on
the assumption, that asymptotically optimal Tartan's algorithm (O(jEj)) is
used for strongly connected components computation; if another algorithm,
such as DCSC1 is used, computational complexity can be di erent.
        </p>
        <p>There are already many e cient implementations of mentioned algorithms
for di erent parallel architectures, including multicore central processors,
coprocessors and graphic accelerators (GPUs). The brief review of these
implementations is following.</p>
        <p>
          Breadth- rst searche can be considered as one of the most well-studied
graphprocessing algorithms. Not only BFS algorithm allows solving the transitive
closure problem with repeated calls from each vertex of the input graph, but it is
also a very important building-block of Purdom's algorithm. The rst approach
to parallel BFS implementation on co-processors (GPU) was discussed in [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ],
where quadratic complicity parallelization strategy (in the worst case) was used.
The proposed method was completely revised in [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], where it was shown to
be not very e cient for non-RMAT graphs; to solve this problem, this paper
proposes O(jV j + jEj) complexity parallel GPU-algorithm, which achieves much
better performance for various types of graphs. Parallel BFS implementations on
multi-core central processes are usually based on the parallel queues approach,
and can be found, for example, in [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. Moreover, for Intel Xeon PHI processors
a few implementation attempts were made, such as [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] or [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ].
        </p>
        <p>
          Some e cient approaches to parallel implementation of Floyd-Warshall
algorithm for GPUs are discussed in [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. These papers also highlight the main
GPU aw for this algorithm - the lack of device memory, required to store all
necessary computational data.
        </p>
        <p>
          Purdom's algorithm implementations on parallel architectures are less
wellstudied; an approach to implementation for central processors is described in
[
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]. Also, Purdom's algorithm is based on strongly connected components search
operation, which can be solved by several parallel algorithms, which are currently
well-investigated both for CPUs and GPUs in [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
4
        </p>
      </sec>
      <sec id="sec-1-2">
        <title>Purdom's Algorithm Parallel Properties Research</title>
        <p>
          Based on computational complexity estimates, the most suitable approach to
solve the transitive closure problem is Purdom's algorithm. However, during the
selection of the most suitable algorithm for particular parallel architecture, it
parallel algorithm's properties have to be studied. For this purpose, information
graphs, introduced in [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ], can be used.
        </p>
        <p>Figure 1 (left) demonstrates information graph of Purdom's algorithm. The
presented graph is rather complicated and therefore includes two subgraphs,
each one corresponding to an important algorithm building-block: breadth- rst
1 Divide and Conquer Strong Components (DCSC, also known as Forward-Bakward
or Forward-Backward-Trim algorithms), a family of algorithms based on recursive
partitioning of graph into disjoint sets, which on the lowest level of the recursion
contain a single strongly connected component in the each set.
search (BFS) and strongly connected components (SCC) computation.
Informational graph of parallel queue-based breadth- rst search is demonstrated on
gure 1 (right), while gure 2 showes information graph of
Forward-BackwardTrim algorithm, used as the main algorithm for parallel SCC computation in
current paper.</p>
        <p>The reviewed information graphs vividly demonstrate that Purdom's
algorithm has a signi cant parallelism potential (O(jEj) or O(jV j) operations) on
each level. Since O(jEj) and O(jV j) values are extremely huge for large-scale
graphs, this algorithm can be reliably chosen for Intel KNL architecture.</p>
      </sec>
      <sec id="sec-1-3">
        <title>The Main Features of KNL Architecture</title>
        <p>Intel Knights Landing (KNL) is one of the newest architectures of Intel Xeon Phi
coprocessors. These processors are equipped with up to 72 cores, each one with a
relatively low clock signal rate of 1.3-1.5 GHs and an ability to e ciently execute
up to 4 threads (hyperthreading technology). As a result, Intel KNL processor is
able to achieve up to 6 TFLOPs performance on single precision computations
and 2.6 TFLOPs on double precision. Target processor's memory architecture is
even more important than peak performance for graph-processing, since graph
problems are usually memory-bound. Intel KNL has two memory levels:
highbandwidth MCDRAM memory with 16 GB capacity and 400 GB/s bandwidth,
and DDR4 memory with 384 GB capacity (in the best available con guration)
and 90 GB/s bandwidth. Processor's cores are grouped by pairs into tiles; each
tile shares common 1 MB L2 cache, while each core has its own 64 KB L1 cache.</p>
        <p>AVX-512 vector instructions support is an another important new feature
of Intel KNL generation processors. These instructions allow simultaneous
processing of 16 single precision variables, and, what is more important, introduce
gather and scatter operations support, which is crucial during indirect memory
accesses vectorization.
6</p>
      </sec>
      <sec id="sec-1-4">
        <title>Implementation Approach</title>
        <p>Current section describes Purdom's algorithm implementation approach for Intel
KNL architecture. The developed algorithm can be divided into 4 separate stages
(steps):</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>1. strongly connected detection in input graph G,</title>
      <p>2. creation of intermediate representation graph G ,
3. computing an answer for all vertex pairs, related to the same strongly
connected component,
4. computing an answer for the rest pairs, using parallel BFS in the
intermediate representation graph G .</p>
      <p>If required, intermediate representation graph can be saved to hard drive after
stage 1, so later the transitive closure can be found more e ciently (no repeated
SCC computation). In current section, some implementation approaches for each
algorithm stage will be described together with optimizations for each step.</p>
      <p>
        Parallel Forward-backward-Trim algorithm is implemented according to the
approach described in [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] with a few di erences. First, in order to avoid
building reverse (transposed) graph, what is necessary for e cient backward
search implementation, graph is converted to edges list storage format. To
further increase the performance, the input edges list can be pre-sorted: the basic
idea of this sort is reordering graph edges the way, that edges stored in adjacent
memory cells start pointing to adjacent cells in reachability array. The described
approach allows to greatly improve data locality and L2 cache usage. Moreover,
this optimization also signi cantly improves trim step e ciency, since it has
similar memory access pattern. The described sorting is not required for
intermediate representation graph G , since usually these graphs have signi cantly
smaller count of vertices compared to original input graphs. As a result,
corresponding reachability arrays of intermediate representation graphs usually t
into L2 cache. Table 1 demonstrates comparison between sizes of original input
graphs and graphs of corresponding intermediate representations.
The second stage includes the intermediate representation graph generation.
This stage has the following structure: rst, the count of strongly connected
components is calculated; after that, non-dublicate edges (connecting di erent
SCCs) are added to the intermediate representation graph, which has the
number of vertices equal to SCC count. In the simplest case, both these operations
are executed sequentially, since they require processing map-like data structures.
But it is also possible to perform these operations in parallel, providing a
separate data structure to each process, followed by a sequential merge of these
data structures on the root processor (the latter approach is used in current
paper). Another alternative is tree-like structure of inter-processes merges, but
our tests demonstrated worse performance of this approach compared to
sequential merges. It is also important to select an optimal graph storage format for
intermediate representation graph. This format is not necessary has to be the
same as the input graph format, since SCC and BFS operations require di erent
supported operations during the computation process. The edges list format
allows only the quadratic BFS parallelization (since it doesn't support traversal of
adjacent vertices from the selected one), while adjacency list format allows queue
parallelization approach. These two approaches may result in the very di erent
performance values of BFS for intermediate representation graphs, what will be
demonstrated in the next section.
      </p>
      <p>The third stage contains veri cation of input pairs of vertices for the property,
if these vertices belong to the same strongly connected component. This stage
has a relatively small computational complexity O(n) and, moreover, can be
e ciently parallelised (veri cation for each pair is independent). The last step
includes obtaining an answer for the rest pairs of vertices, which appear to
belong to di erent components. This step is based on BFS searches, performed
from each source-vertex in intermediate representation graph. It is important to
notice, that edges list format is also used for intermediate representation graph
storage, since those graphs usually have low diameter compared to original input
graphs.</p>
      <p>To investigate the implementation bottlenecks, it is necessary to measure
execution times for each stage, while comparing the values between each other.
For di erent graph types and di erent numbers of input pairs, these values may
di er a lot; in the next table, RMAT, SSCA-2 and random uniform graphs with
223 vertices and average vertex-degree 32 are used, among with 10k pairs of
vertices to be checked. Table 2 demonstrates the percentage of time, spent on
each execution stage for the most optimized algorithm version.</p>
      <p>For the whole algorithm it is very important to use high-performance
MCDRAM memory, what can be achieved by two di erent approaches: for small and
medium scaled graphs, the program can be executed only in MCDRAM memory
space. For the graphs which size exceeds 16 GB, only the important arrays (like
distances arrays on stage 1 or intermediate representation graph data) can be
stored in MCDRAM memory. In the next section a performance comparison for
MCDRAM and usual DDR4 memory modes is demonstrated.
7</p>
      <sec id="sec-2-1">
        <title>Performance Analysis</title>
        <p>Current section includes the performance analysis for Purdom's algorithm. The
rst important e ciency metric is the algorithm's performance dependance from
the size of the input graph G. The performance is de ned with TEPS (traversed
edges per seconds) metric, which demonstrates the graph-processing e ciency
with the increase of graph size. Usually, the performance decreases because of the
less and less e cient usage of the cache hierarchy with the growing graph size.
An edge is called \traversed" during algorithm execution when it's
corresponding data is loaded from memory. The described dependency is demonstrated on
gure 3 for several versions of the developed algorithm: the basic non-optimized
version(where all graphs are stored in edges list format), version with the
intermediate representation graph optimization (when it is stored in the adjacency
list format), version with input graph edges reordering, and version with
MCDRAM memory and vectorization usage.</p>
        <p>Since Intel KNL provides hyperthreading technology support, it is necessary
to check on practice if the usage of 4x threads provides a signi cant performance
increase. In current paper, launching 272 threads on 68 cores provides the best
achieved performance. An another important metric is an acceleration of the
most optimized developed parallel algorithm, compared to the sequential
versions (for KNL and usual multi-core CPUs). On this gure multi-core Intel(R)
Xeon(R) CPU E5-2697 v3 CPUs have been used for testing. The comparison
demonstrated on gure 4 allows evaluating how e ciently the parallel algorithm
utilizes parallel resources of the target architecture.</p>
        <p>In the conclusion, it is important to research the sources of possible
bottlenecks in the developed algorithm, since it allows to prove that the algorithm is
implemented e ciently, and, moreover, to highlight Intel KNL architecture
advantages and disadvantages for graph-processing. Since transitive closure
computation belongs to memory-bound problem category, it is necessary to study
the achieved memory throughput during the program execution. During SCC
and BFS stages, the memory throughput achieved is approximately 200 GB/s,
which is half of the maximum MCDRAM bandwidth. Generating the
intermediate representation step has much lower memory throughput used, since on
this step the program operates with complex map and vector data structures
scattered in the memory, and, as a result, has poor data locality.
8</p>
      </sec>
      <sec id="sec-2-2">
        <title>Conclusion</title>
        <p>In current paper, a parallel implementation of the transitive closure computation
problem for Intel KNL processors has been proposed and discussed in details. To
solve the problem, Purdom's algorithm has been selected, since it has an
optimal computational complexity and non-demanding memory requirements among
the reviewed algorithms. Moreover, presented information graphs demonstrate
that the selected algorithm have signi cant parallelism resources, which can be
e ciently utilised on a highly-parallel architecture, such Intel KNL.</p>
        <p>Based on the algorithm selection, its basic version for Intel KNL architecture
has been implemented. After that, a lot of optimizations, including graph edges
sorting, reducing the amount of data loaded from processor memory, usage of
MCDRAM memory and vectorization has been applied to tune the performance
of the proposed implementation. As a result, a high-performance and scalable
parallel implementation of Purdom's algorithm has been developed. This
implementation demonstrates almost a 50x acceleration compared to sequential
implementation on Intel KNL, and a 5x acceleration compared to sequential
implementation on Intel(R) Xeon(R) CPU E5-2697 v3.</p>
        <p>Moreover, it was shown that Intel KNL is capable of processing very large
graphs with a size up to 134 million vertices and 42 billion edges, what signi
cantly exceeds other coprocessors results.</p>
        <p>Acknowledgments. The results were obtained in the Lomonosov Moscow State
University with the nancial support of the Russian Science Foundation
(agreement № 17-71-20114).</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>S.</given-names>
            <surname>Dar</surname>
          </string-name>
          .
          <article-title>Augmenting databases with generalized transitive closure</article-title>
          .
          <source>PhD thesis</source>
          , Department of Computer Science, University of Wisconsin, Madison,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Yannakakis</surname>
          </string-name>
          .
          <article-title>Graph-theoretic methods in database theory</article-title>
          .
          <source>In Proc. of the 9th ACM SIGACT-SIGMOND-SIGART Symposium on Principles of Database Systems</source>
          , pages
          <fpage>230</fpage>
          -
          <lpage>242</lpage>
          . ACM,
          <year>1990</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Floyd</surname>
            , Robert W. Algorithm 97:
            <given-names>Shortest</given-names>
          </string-name>
          <string-name>
            <surname>Path</surname>
          </string-name>
          .
          <source>Communications of the ACM</source>
          <volume>5</volume>
          , no.
          <issue>6</issue>
          (
          <issue>June 1</issue>
          ,
          <year>1962</year>
          ):
          <fpage>345</fpage>
          . doi:
          <volume>10</volume>
          .1145/367766.368168.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Warshall</surname>
            ,
            <given-names>Stephen.</given-names>
          </string-name>
          <article-title>A Theorem on Boolean Matrices</article-title>
          .
          <source>Journal of the ACM</source>
          <volume>9</volume>
          , no.
          <issue>1</issue>
          (
          <issue>January 1</issue>
          ,
          <year>1962</year>
          ):
          <fpage>11</fpage>
          -
          <lpage>12</lpage>
          . doi:
          <volume>10</volume>
          .1145/321105.321107.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Roy</surname>
            ,
            <given-names>Bernard. Transitivit Et</given-names>
          </string-name>
          <string-name>
            <surname>Connexit. Comptes Rendus De l'Acadmie Des</surname>
          </string-name>
          Sciences
          <volume>249</volume>
          (
          <year>1959</year>
          ):
          <fpage>216</fpage>
          -
          <lpage>218p</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>C Y.</given-names>
          </string-name>
          <article-title>An Algorithm for Path Connections and Its Applications</article-title>
          .
          <source>IEEE Transactions on Electronic Computers</source>
          <volume>10</volume>
          , no.
          <issue>3</issue>
          (
          <year>September 1961</year>
          ):
          <fpage>346</fpage>
          -
          <lpage>65</lpage>
          . doi:
          <volume>10</volume>
          .1109/TEC.
          <year>1961</year>
          .
          <volume>5219222</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Purdom</surname>
          </string-name>
          , Paul, Jr.
          <source>A Transitive Closure Algorithm. Bit</source>
          <volume>10</volume>
          , no.
          <source>1 (March</source>
          <year>1970</year>
          ):
          <fpage>76</fpage>
          -
          <lpage>94</lpage>
          . doi:
          <volume>10</volume>
          .1007/BF01940892.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Pawan</given-names>
            <surname>Harish</surname>
          </string-name>
          and
          <string-name>
            <given-names>P. J.</given-names>
            <surname>Narayanan</surname>
          </string-name>
          .
          <article-title>Accelerating large graph algorithms on the GPU using CUDA. Center for Visual Information Technology</article-title>
          ,
          <source>International Institute of Information Technology Hyderabad</source>
          , INDIA.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Hector</given-names>
            <surname>Ortega-Arranz</surname>
          </string-name>
          , Yuri Torres, Diego R. Llanos, and
          <article-title>Arturo GonzalezEscribano. A New GPU-based Approach to the Shortest Path Problem</article-title>
          . Dept. Informatica, Universidad de Valladolid, Spain.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Fleischer</surname>
          </string-name>
          ,
          <string-name>
            <surname>Lisa</surname>
            <given-names>K</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bruce Hendrickson</surname>
            , and
            <given-names>Ali</given-names>
          </string-name>
          <string-name>
            <surname>Pinar</surname>
          </string-name>
          .
          <article-title>On Identifying Strongly Connected Components in Parallel</article-title>
          .
          <source>In Lecture Notes in Computer Science</source>
          , Volume
          <volume>1800</volume>
          , Springer,
          <year>2000</year>
          , pp.
          <fpage>505</fpage>
          -
          <lpage>511</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>J.</given-names>
            <surname>Barnat</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Bauch</surname>
          </string-name>
          .
          <article-title>Computing Strongly Connected Components in Parallel on CUDA</article-title>
          . Faculty of Informatics, Masaryk University, Botanicka 68a, 60200 Brno, Czech Republic.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Chakrabarti</surname>
            , Deepayan,
            <given-names>Yiping</given-names>
          </string-name>
          <string-name>
            <surname>Zhan</surname>
            , and
            <given-names>Christos</given-names>
          </string-name>
          <string-name>
            <surname>Faloutsos. R-MAT</surname>
          </string-name>
          :
          <article-title>A recursive model for graph mining</article-title>
          .
          <source>Proceedings of the 2004 SIAM International Conference on Data Mining. Society for Industrial and Applied Mathematics</source>
          ,
          <year>2004</year>
          .?
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Bader</surname>
            ,
            <given-names>David A.</given-names>
          </string-name>
          , et al.
          <article-title>Hpcs scalable synthetic compact applications 2 graph analysis</article-title>
          .
          <source>SSCA 2</source>
          (
          <year>2006</year>
          ):
          <fpage>v2</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Voevodin</surname>
            ,
            <given-names>V.V. Parallel</given-names>
          </string-name>
          <string-name>
            <surname>Computing</surname>
          </string-name>
          .
          <year>608p</year>
          . BHV,
          <string-name>
            <surname>St. Petersburg</surname>
          </string-name>
          (
          <year>2002</year>
          ).
          <article-title>(in Russian)</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Katz</surname>
            ,
            <given-names>G. J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kider</surname>
            <given-names>Jr</given-names>
          </string-name>
          ,
          <string-name>
            <surname>J. T.</surname>
          </string-name>
          (
          <year>2008</year>
          , June).
          <article-title>All-pairs shortest-paths for large graphs on the GPU</article-title>
          .
          <source>In Proceedings of the 23rd ACM SIGGRAPH/EUROGRAPHICS symposium on Graphics hardware</source>
          (pp.
          <fpage>47</fpage>
          -
          <lpage>55</lpage>
          ). Eurographics Association.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Buluc</surname>
            , Aydin, John R. Gilbert, and
            <given-names>Ceren</given-names>
          </string-name>
          <string-name>
            <surname>Budak</surname>
          </string-name>
          .
          <article-title>Solving path problems on the GPU</article-title>
          .
          <source>Parallel Computing 36.5</source>
          (
          <year>2010</year>
          ):
          <fpage>241</fpage>
          -
          <lpage>253</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Hong</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Oguntebi</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Olukotun</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          <article-title>E cient parallel graph exploration on multi-core CPU and GPU</article-title>
          .
          <source>In Parallel Architectures and Compilation Techniques (PACT)</source>
          , 2011 International Conference on (pp.
          <fpage>78</fpage>
          -
          <lpage>88</lpage>
          ). IEEE.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Bloemen</surname>
          </string-name>
          , Vincent.
          <article-title>On-The-Fly parallel decomposition of strongly connected components</article-title>
          .
          <source>MS thesis</source>
          . University of Twente,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>A.</given-names>
            <surname>Frolov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Golovina</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Semenov</surname>
          </string-name>
          .
          <article-title>Performance Evaluation of Breadth-First Search on Intel Xeon Phi</article-title>
          .
          <source>OAO \NICEVT"</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>M.</given-names>
            <surname>Paredes</surname>
          </string-name>
          , G. Riley,
          <string-name>
            <given-names>M.</given-names>
            <surname>Lujan</surname>
          </string-name>
          .
          <source>Breadth First Search Vectorization on the Intel Xeon Phi</source>
          .
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>