<!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>Optimizing RDF stores by coupling General-purpose Graphics Processing Units and Central Processing Units</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Bassem Makni</string-name>
          <email>maknib@rpi.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Tetherless World Constellation, Rensselaer Polytechnic Institute 110</institution>
          <addr-line>8th Street, Troy, NY 12180</addr-line>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>From our experience in using RDF stores as a backend for social media streams, we pinpoint three shortcomings of current RDF stores in terms of aggregation speed, constraints checking and largescale reasoning. Parallel algorithms are being proposed to scale reasoning on RDF graphs. However the current e orts focus on the closure computation using High Performance Computing (HPC) and require prematerialization of the entailed triples before loading the generated graph into RDF stores, thus not suitable for continuously changing graphs. We propose a hybrid approach using General-purpose Graphics Processing Units (GPGPU) and Central Processing Units (CPU) in order to optimize three aspects of RDF stores: aggregation, constraints checking, and dynamic materialization.</p>
      </abstract>
      <kwd-group>
        <kwd>Bassem Makni</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Social media graphs and streams t naturally with the graph structure, and
the Semantic Web o ers the required platform to enrich, analyze and reason
about social media graphs. However from our practical experience in storing,
querying and reasoning about social media streams, we encountered the following
problems:
1.1</p>
    </sec>
    <sec id="sec-2">
      <title>Loading continuous stream of data</title>
      <p>Performing constraints checking at load time, with rdfs:domain and rdfs:range
for example, slows down adding new triples, and may result in a long queue of
triples generated from the social media streaming API, waiting to be inserted
into the graph. Turning o the constraints checking, at the other hand provides
faster loading but may result in integrity violations in the graph.</p>
    </sec>
    <sec id="sec-3">
      <title>SPARQL query performance</title>
      <p>Running time of aggregation queries raises signi cantly with the size of the
graph, however these aggregate functions are the most used to analyze the
social media graph by queries like: "Return the number of persons tweeting about
certain hashtag".</p>
      <p>
        Moreover, SPARQL queries with large results, such as the ones extracting
mentions network or returning millions of tweets with certain hashtags, for instance
to calculate their sentiments, generate timeouts. Breaking down these large
queries with o set and limit is not of big help as o set requires ordered triples
and ordering big number of triples timeouts as well. This observation is partially
supported by the Berlin SPARQL benchmark [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], and discussed by the Semantic
Web community [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
1.3
      </p>
    </sec>
    <sec id="sec-4">
      <title>Large-scale reasoning</title>
      <p>
        One of the major advantages of Semantic Web, is the ability to reason about the
data. With the Linked Data movement gaining momentum, the amount of
published RDF data is increasing signi cantly. And reasoning about large-scale RDF
data, became a bottleneck. Recent research e orts tried to scale reasoning
capability by parallelizing the closure computation. Thus the entailed RDF triples
are materialized by forward-chaining reasoning. We call these approaches "o ine
parallelization", as the RDF graph needs to be generated o ine on a cluster or
super-computer before being loaded into an RDF store. However these o ine
approaches su er from three drawbacks:
1. Forward-chaining generates a big number of entailed triples: BigOWLIM [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ],
for example, generated 8.43 billion implicit statements when loading 12.03
billion triples from the LUBM(90 000) [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] benchmark. However, not all the
generated triples are usable at query time, which imply slowing down the
RDF store by loading unusable implicit triples. That is one of the reasons
why backward and hybrid chaining are more used in RDF stores. In
Backward chaining, the entailments are computed at query time, and in hybrid
chaining, a small number of rules is used in forward chaining and the rest
are inferred at query time.
2. O ine parallelization is not practical for continuously changing graphs, as
the closure needs to be recomputed on the supercomputer and loaded again
in the RDF store whenever the graph changes. That may not be the case if
the change is only by adding new triples, but deleting triples require
necessarily the closure re-computation when the deleted triple a ect the implicit
generated triples.
3. They require HPC access and skills, as the user needs to compute the closure
on a cluster or super-computer before being able to load and interact with
the data via SPARQL.
      </p>
      <p>We are particularly interested in reasoning about dynamic, i.e. continuously
changing graphs, such as the social media graphs. So the need for an "online
parallelization" approach that is integrated into the RDF store and does not
require previous processing of the graph.
2</p>
      <sec id="sec-4-1">
        <title>Relevancy</title>
        <p>Reasoning about large-scale and continuously changing RDF graphs, requires at
the same time an online and parallel approach.</p>
        <p>To the best of our knowledge, GPGPU are not exploited yet to optimize RDF
stores reasoning and aggregation capabilities. Our goal is to design an RDF
store that uses a hybrid GPGPU-CPU architecture, in order to support
largescale reasoning and optimize aggregation queries. The design should also provide
parallelization capabilities in a transparent way, so the user will interact with
the GPGPU-CPU RDF store in the same way he interacts with any CPU-only
RDF store, without the need for HPC skills.
3</p>
      </sec>
      <sec id="sec-4-2">
        <title>Related Work</title>
        <p>The literature contains three classes of relevant works to our proposal: the rst
class is about closure computation parallelization, the second exploits GPGPU
capabilities for graphs processing and the latter is about databases optimization
using GPGPU.
3.1</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Parallelization of closure computation</title>
      <p>
        Three particular works will be of inspiration when designing the GPGPU-CPU
RDF store, which are: Scalable distributed reasoning using MapReduce [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ],
Parallel materialization of the nite RDFS closure for hundreds of millions of
triples [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] and The design and implementation of minimal RDFS backward
reasoning in 4store [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. The rst two t into the "o ine parallelization" category,
and the later uses parallel implementation of backward-chaining to support
reasoning for the cluster based, 4store SPARQL engine. In the rst paper the
authors start from a nave application of MapReduce on RDF graphs to adding a
bunch of heuristics to optimize the parallelization of the closure computation.
And in the second article, the authors describe an Message Passing Interface
(MPI) implementation of their embarrassingly parallel algorithm to materialize
the implicit triples.
3.2
      </p>
    </sec>
    <sec id="sec-6">
      <title>Graphs processing on GPGPU</title>
      <p>
        Unlike the early GPU units which were intended for graphical processing only,
the General-purpose computing on graphics processing units can be used in more
exible ways via frameworks like Open Computing Language (OpenCL) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] and
Compute Uni ed Device Architecture (CUDA) [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. The main di erence between
GPUs and CPUs is that GPUs launch a big number of light and slow threads
that run the same code in parallel, while CPUs run one fast process in serial.
The parallel reduction, is a good illustration of the use of parallel threads on
GPGPU to achieve high performance results. Figure 1 from the CUDA reduction
white paper [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] illustrates the use of GPGPU to calculate the sum of an array.
      </p>
      <p>
        The literature contains many parallel algorithms that use GPGPU for fast
sorting [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], DNA sequence alignment [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], etc. We focus on graphs processing
algorithms, as they raise similar research problems to RDF processing, especially
the data partition. In the early works on graph processing on the GPU, [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]
achieved the performance of 1 second, 1.5 seconds and 2 minutes, respectively
for a breadth- rst search (BFS) single-source shortest path (SSSP), and all-pairs
shortest path (APSP) algorithms on a 10 millions vertices graph. However these
algorithms are limited to graphs with less than 12 millions vertices, as they load
the whole graph into the GPGPU shared memory and they don't tackle the data
partition issue. Recent research works break this scalability barrier by enabling
graph data distribution. [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] use a multi-GPU architecture and balance the load
of data between the di erent GPU devices.
3.3
      </p>
    </sec>
    <sec id="sec-7">
      <title>Relational databases optimization on GPGPU</title>
      <p>
        This research eld tries to solve the similar problems that we are tackling for
relational databases. In [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], the authors describe their GPU based, in-memory
relational database GDB. [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] instead uses the traditional relational databases,
and accelerates the SQL operations on a GPU with CUDA.
      </p>
      <sec id="sec-7-1">
        <title>Research Questions</title>
        <p>Unlike MPI and cluster based parallelization algorithms, which use the large
memory available on every node, the GPGPU based algorithms are restrained
by the relatively small memory of the GPU, and copying the data from the CPU
to the GPU memory for parallel processing is an expensive operation. These
constraints raise the following research questions when designing a
GPGPUCPU based RDF store:
Data partition One of the major constraints of GPU programming, is the
small amount of dedicated graphical memory. Thus the need to swap data
between the CPU memory or hard drives and the GPU memory. This need
raises the research question of partitioning the RDF graph data, and the
choice of the data slice that should be copied to GPU for parallel processing.
Dynamic computation As copying the data to GPU memory is time
consuming, the overall speedup will depend on the parallel computation on the
GPU and the data swap. If the speedup is not big, it is more e cient to
compute on the CPU without the need to move the data. So the need to
precompute this speedup in order to dynamically choose between CPU or
GPU processing.</p>
        <p>GPU caching In order to limit the number of memory fetches by the GPU,
we need to adapt a caching mechanism to the small amount of memory, in
order to maintain frequently used triples and rules in the shared memory.
Reasoning We need to select from the panoply of reasoning algorithms such
as tableaux based, forward chaining, backward chaining etc. the one that is
most adaptable to the GPU architecture, and can take bene t of the GPU
parallelization.
5</p>
      </sec>
      <sec id="sec-7-2">
        <title>Hypotheses</title>
        <p>We design our GPGPU-CPU hybrid RDF store with the following hypothesis:
1. The graph structure is continuously changing, by adding new triples via
social media streams. Triples can be deleted occasionally when the
follower/friend relation is deleted for instance.
2. The user would interact with the RDF store in the same way he interacts
with CPU based RDF stores, and the GPGPU parallelization should run in
a transparent way.
6</p>
      </sec>
      <sec id="sec-7-3">
        <title>Approach</title>
        <p>We break down our approach into three steps related to the contributions we
are promoting:</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>Optimizing SPARQL aggregation and ordering queries</title>
      <p>
        In the rst step, we are planning to integrate the CUDA reductions into the
SPARQL runtime process. For example a query containing the min aggregator
in Jena [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] is handled by the AggMaxBase class which go through the graph
nodes and calculates sequentially the comparisons to the actual max. A GPGPU
version will instead gather the whole sequence of bindings without any
comparison and run a GPU reduction to get the max value in one shot.
In this step, we will get more familiar with the GPGPU programming and
technical limitations, the rst results of this step will allow us to tweak further steps
plan.
6.2
      </p>
    </sec>
    <sec id="sec-9">
      <title>Parallel constraints checking</title>
      <p>One of the problems that we mentioned earlier in this paper, is the slow down of
load speed, resulting from the constraints checking. We speculate that a GPGPU
parallel version of constraints checking will optimize this phase and maintain the
speed of inserting new coming triples from the social media streams. In this step
we will get more familiar with lightweight reasoning on GPGPU.
6.3</p>
    </sec>
    <sec id="sec-10">
      <title>Dynamic materialization on GPGPU</title>
      <p>This step will be the core of the thesis work, as it raises the majority of the
research questions discussed in this paper. We will use the lessons learnt from
the previous steps in order to achieve parallel dynamic materialization of triples
at the query time.
7</p>
      <sec id="sec-10-1">
        <title>Re ections</title>
        <p>GPGPU are being exploited by many research communities in order to provide
cheap and fast parallelization of their algorithms. Successful results are achieved
in bioinformatics, graphs processing, relational databases and other elds. We
believe that exploiting GPGPU to optimize SPARQL queries and large RDF
data processing is a fruitful research direction.</p>
        <p>Though the problem of dynamic materialization on GPU, raises many research
questions, we broke down our approach into intermediate warm-up steps before
tackling this problematic.
8</p>
      </sec>
      <sec id="sec-10-2">
        <title>Evaluation plan</title>
        <p>
          We are planning to implement a GPGPU version of one, possibly two of the
following RDF stores: Jena, Sesame [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] and Open Virtuoso [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]. In the
evaluation phase, we plan to use SPARQL benchmarks such as the Berlin SPARQL
benchmark [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] in order to compare the CPU only and the GPGPU-CPU hybrid
version of each implemented RDF store.
As these benchmarks are not designed for streaming data, we will also use
SRBench, the Streaming RDF/SPARQL Benchmark [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] which is speci c for
streaming RDF data. In [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ], the authors propose a comprehensive set of queries
in order to compare the main streaming engines available in the state of the art,
namely SPARQLStream [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ], C-SPARQL [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] and CQELS [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ].
        </p>
        <p>
          Another possible benchmark to evaluate our approach, comes from the graphs
processing community which is Graph500 [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-11">
      <title>Acknowledgements</title>
      <p>I would like to express my deep gratitude to my advisor Prof. James Hendler
and to Prof. Deborah McGuinness for their guidance in this research proposal.
This work was supported in part by the DARPA SMISC program.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Bizer</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schultz</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>The berlin sparql benchmark</article-title>
          .
          <source>International Journal on Semantic Web and Information Systems (IJSWIS) 5</source>
          (
          <issue>2</issue>
          ) (
          <year>2009</year>
          )
          <volume>1</volume>
          {
          <fpage>24</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2. semanticweb.com:
          <article-title>Set of real-world sparql benchmark queries</article-title>
          . http://answers.semanticweb.com/questions/1847/
          <article-title>set-of-real-world-sparql-benchmark-</article-title>
          <string-name>
            <surname>queries</surname>
          </string-name>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Kiryakov</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bishop</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ognyano</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Peikov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tashev</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Velkov</surname>
            ,
            <given-names>R.:</given-names>
          </string-name>
          <article-title>The features of bigowlim that enabled the bbcs world cup website</article-title>
          .
          <source>In: Workshop on Semantic Data Management SemData VLDB</source>
          . (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Guo</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pan</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          , He in, J.:
          <article-title>Lubm: A benchmark for owl knowledge base systems</article-title>
          .
          <source>Web Semantics: Science, Services and Agents on the World Wide Web</source>
          <volume>3</volume>
          (
          <issue>2</issue>
          -3) (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Urbani</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kotoulas</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Oren</surname>
          </string-name>
          , E.,
          <string-name>
            <surname>Van Harmelen</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Scalable distributed reasoning using mapreduce</article-title>
          .
          <source>In: The Semantic Web-ISWC 2009</source>
          . Springer (
          <year>2009</year>
          )
          <volume>634</volume>
          {
          <fpage>649</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Weaver</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hendler</surname>
            ,
            <given-names>J.A.</given-names>
          </string-name>
          :
          <article-title>Parallel materialization of the nite rdfs closure for hundreds of millions of triples</article-title>
          .
          <source>In: The Semantic Web-ISWC 2009</source>
          . Springer (
          <year>2009</year>
          )
          <volume>682</volume>
          {
          <fpage>697</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Salvadores</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Correndo</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Harris</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gibbins</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shadbolt</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          :
          <article-title>The design and implementation of minimal rdfs backward reasoning in 4store</article-title>
          .
          <source>In: The Semanic Web: Research and Applications</source>
          . Springer (
          <year>2011</year>
          )
          <volume>139</volume>
          {
          <fpage>153</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Munshi</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          , et al.:
          <article-title>The opencl speci cation</article-title>
          .
          <source>Khronos OpenCL Working Group</source>
          <volume>1</volume>
          (
          <year>2009</year>
          ) l1{
          <fpage>15</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Nvidia</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Programming guide (</article-title>
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Harris</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Optimizing parallel reduction in cuda</article-title>
          .
          <source>NVIDIA Developer Technology</source>
          <volume>6</volume>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Merrill</surname>
            ,
            <given-names>D.G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grimshaw</surname>
            ,
            <given-names>A.S.:</given-names>
          </string-name>
          <article-title>Revisiting sorting for gpgpu stream architectures</article-title>
          .
          <source>In: Proceedings of the 19th international conference on Parallel architectures and compilation techniques</source>
          ,
          <source>ACM</source>
          (
          <year>2010</year>
          )
          <volume>545</volume>
          {
          <fpage>546</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Trapnell</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schatz</surname>
            ,
            <given-names>M.C.</given-names>
          </string-name>
          :
          <article-title>Optimizing data intensive gpgpu computations for dna sequence alignment</article-title>
          .
          <source>Parallel Computing</source>
          <volume>35</volume>
          (
          <issue>8</issue>
          ) (
          <year>2009</year>
          )
          <volume>429</volume>
          {
          <fpage>440</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Harish</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Narayanan</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Accelerating large graph algorithms on the gpu using cuda</article-title>
          .
          <source>In: High Performance Computing{HiPC 2007</source>
          . Springer (
          <year>2007</year>
          )
          <volume>197</volume>
          {
          <fpage>208</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Merrill</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Garland</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grimshaw</surname>
            ,
            <given-names>A.</given-names>
          </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>ACM</source>
          (
          <year>2012</year>
          )
          <volume>117</volume>
          {
          <fpage>128</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>He</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lu</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yang</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fang</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Govindaraju</surname>
            ,
            <given-names>N.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Luo</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sander</surname>
            ,
            <given-names>P.V.</given-names>
          </string-name>
          :
          <article-title>Relational query coprocessing on graphics processors</article-title>
          .
          <source>ACM Transactions on Database Systems (TODS) 34(4)</source>
          (
          <year>2009</year>
          )
          <fpage>21</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Bakkum</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Skadron</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Accelerating sql database operations on a gpu with cuda</article-title>
          .
          <source>In: Proceedings of the 3rd Workshop on General-Purpose Computation on Graphics Processing Units</source>
          , ACM (
          <year>2010</year>
          )
          <volume>94</volume>
          {
          <fpage>103</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>McBride</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Jena: Implementing the rdf model and syntax speci cation</article-title>
          . (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Broekstra</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kampman</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Van Harmelen</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Sesame: A generic architecture for storing and querying rdf and rdf schema</article-title>
          .
          <source>In: The Semantic WebISWC 2002</source>
          . Springer (
          <year>2002</year>
          )
          <volume>54</volume>
          {
          <fpage>68</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Erling</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mikhailov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Rdf support in the virtuoso dbms</article-title>
          .
          <source>In: Conference on Social Semantic Web</source>
          . Volume
          <volume>113</volume>
          . (
          <year>2007</year>
          )
          <volume>59</volume>
          {
          <fpage>68</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Duc</surname>
            ,
            <given-names>P.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Corcho</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Calbimonte</surname>
            ,
            <given-names>J.P.</given-names>
          </string-name>
          :
          <article-title>Srbench: a streaming rdf/sparql benchmark</article-title>
          .
          <source>In: The Semantic Web{ISWC 2012</source>
          . Springer (
          <year>2012</year>
          )
          <volume>641</volume>
          {
          <fpage>657</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Calbimonte</surname>
            ,
            <given-names>J.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Corcho</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gray</surname>
            ,
            <given-names>A.J.:</given-names>
          </string-name>
          <article-title>Enabling ontology-based access to streaming data sources</article-title>
          .
          <source>In: The Semantic Web{ISWC 2010</source>
          . Springer (
          <year>2010</year>
          )
          <volume>96</volume>
          {
          <fpage>111</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Barbieri</surname>
            ,
            <given-names>D.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Braga</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ceri</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Valle</surname>
            ,
            <given-names>E.D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grossniklaus</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Querying rdf streams with c-sparql</article-title>
          .
          <source>ACM SIGMOD Record</source>
          <volume>39</volume>
          (
          <issue>1</issue>
          ) (
          <year>2010</year>
          )
          <volume>20</volume>
          {
          <fpage>26</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Le-Phuoc</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dao-Tran</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Parreira</surname>
            ,
            <given-names>J.X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hauswirth</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>A native and adaptive approach for uni ed processing of linked streams and linked data</article-title>
          .
          <source>In: The Semantic Web{ISWC 2011</source>
          . Springer (
          <year>2011</year>
          )
          <volume>370</volume>
          {
          <fpage>388</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Murphy</surname>
            ,
            <given-names>R.C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wheeler</surname>
            ,
            <given-names>K.B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Barrett</surname>
            ,
            <given-names>B.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ang</surname>
            ,
            <given-names>J.A.</given-names>
          </string-name>
          :
          <article-title>Introducing the graph 500</article-title>
          . Cray Users Group (CUG) (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>