You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@crail.apache.org by at...@apache.org on 2018/01/21 10:17:32 UTC
[07/79] [partial] incubator-crail-website git commit: Moving all
website source into a site directory
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/39417b15/site/css/group.css
----------------------------------------------------------------------
diff --git a/site/css/group.css b/site/css/group.css
new file mode 100644
index 0000000..b03d722
--- /dev/null
+++ b/site/css/group.css
@@ -0,0 +1,215 @@
+/* Space out content a bit */
+ html {
+ overflow:scroll;
+}
+
+body {
+ padding-top: 20px;
+ padding-bottom: 20px;
+}
+
+/* Everything but the jumbotron gets side spacing for mobile first views */
+.header,
+.footer {
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+/* Custom page header */
+.header {
+ border-bottom: 1px solid #e5e5e5;
+}
+
+/* Custom page footer */
+.footer {
+ padding-top: 19px;
+ color: #777;
+ border-top: 1px solid #e5e5e5;
+ text-align: center;
+ font-size: 0.8em;
+ clear: both;
+}
+.footer p {
+ margin: 0.1em 0;
+}
+.footer a:link, .footer a:visited {
+ color: #777;
+}
+
+/* Customize container */
+@media (min-width: 768px) {
+ .container {
+ max-width: 767px;
+ }
+}
+.container-narrow > hr {
+ margin: 30px 0;
+}
+
+/* Jumbotron */
+.jumbotron {
+ text-align: center;
+ border-bottom: 1px solid #e5e5e5;
+}
+.jumbotron p {
+ font-size: 15px;
+}
+.jumbotron {
+ padding-top: 18px;
+ padding-bottom: 10px;
+}
+
+/* Group logo */
+#logo {
+ height: 35px;
+ margin: 2px 0 8px 0;
+}
+
+/* Responsive: Portrait tablets and up */
+@media screen and (min-width: 768px) {
+ /* Remove the padding we set earlier */
+ .header,
+ .footer {
+ clear: both;
+ padding-left: 0;
+ padding-right: 0;
+ }
+ /* Space out the masthead */
+ .header {
+ margin-bottom: 30px;
+ }
+ /* Remove the bottom border on the jumbotron for visual effect */
+ .jumbotron {
+ border-bottom: 0;
+ }
+}
+
+/* Slightly better-looking header on mobile. */
+@media screen and (max-width: 767px) {
+ .nav-pills {
+ display: block;
+ margin: 0 auto 1em;
+ }
+ #logo {
+ display: block;
+ clear: both;
+ margin: 1em auto;
+ }
+}
+
+/* Photo */
+.inset-image {
+ width: 60%;
+ margin: 0 auto;
+}
+
+/* People list */
+
+dl.people dl {
+ width: 100%;
+ clear: both;
+ overflow: hidden;
+ margin: 0;
+}
+
+dl.people dt {
+ clear: both;
+ float: left;
+ content: " ";
+ width: 15%;
+ margin-bottom: 2em;
+ margin: 0;
+}
+
+dl.people dd {
+ width: 85%;
+ min-height: 6.5em;
+ margin-bottom: 1em;
+}
+
+
+
+/* Front page news. */
+ul.news .date {
+ color: #999;
+ font-weight: bold;
+ display: block;
+}
+ul.news > li {
+ margin-top: 1em;
+}
+ul.news .shortnews .date {
+ float: left;
+ margin-right: 1em;
+}
+ul.news .bloglink a {
+ font-size: 1.4em;
+}
+
+.illustration {
+ float: right;
+ margin: 0 0 1em 1em;
+}
+
+ul.double-col {
+ columns: 2;
+ -webkit-columns: 2;
+ -moz-columns: 2;
+ overflow:hidden;
+ width: 800px;
+}
+
+div.bio {
+ margin: 0 0 1em 1em;
+}
+
+ul.double-col li {
+ clear: both;
+ height: auto;
+ display: inline;
+ vertical-align: middle;
+ width: 100%;
+ margin: .5rem 0rem;
+ float: left;
+}
+
+.col-md-8 {
+}
+
+.col-md-4 {
+}
+
+table tr:nth-child(odd) {
+ background-color: #FFFFFF;
+}
+
+table tr:nth-child(even) {
+ background-color: #F5F5F5;
+}
+
+table tr:first-child th {
+ border-top: 1;
+}
+
+table tr:last-child td {
+ border-bottom: 1;
+}
+
+table tr td:first-child, table tr th:first-child {
+ border-left: 1;
+}
+
+table tr td:last-child, table tr th:last-child {
+ border-right: 1;
+}
+table, th {
+ background-color: #F5F5F5;
+ border-color: lightgrey;
+}
+
+th, td {
+ border: 0.75px solid grey;
+ padding: 7px;
+ line-height: 24px;
+ border-color: lightgrey;
+}
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/39417b15/site/css/print.css
----------------------------------------------------------------------
diff --git a/site/css/print.css b/site/css/print.css
new file mode 100644
index 0000000..e95929e
--- /dev/null
+++ b/site/css/print.css
@@ -0,0 +1,36 @@
+.container {
+ -moz-column-count: 2;
+ -webkit-column-count: 2;
+ column-count: 2;
+
+ font-size: 0.8em;
+}
+
+.header {
+ display: none;
+}
+
+h2 {
+ font-size: 1.3em;
+ margin: 0;
+}
+h3 {
+ font-size: 1.2em;
+ margin-top: 0;
+}
+
+.noprint {
+ display: none;
+}
+
+body {
+ padding: -2em 0 0 0;
+}
+
+/* Disable Bootstrap's link display. */
+@media print {
+ a:link:after,
+ a:visited:after {
+ content: "" !important;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/39417b15/site/documentation/index.md
----------------------------------------------------------------------
diff --git a/site/documentation/index.md b/site/documentation/index.md
new file mode 100644
index 0000000..524a316
--- /dev/null
+++ b/site/documentation/index.md
@@ -0,0 +1,254 @@
+---
+layout: default
+title: Documentation
+---
+
+The Crail I/O stack consists of a set of components. Typically only a subset of the components are required for a particular use case (e.g., Spark, Hadoop, Hive, etc.) or hardware setup (e.g., RDMA, TCP, Flash, etc.). Here is a list of the components together with their GitHub repository.
+
+* <a href="{{ site.base }}/community/">Crail Store</a>: The backbone for all I/O operations across distributed storage resource. Includes both the RDMA/DRAM and the NVMf/Flash storage tier.
+* [Crail-Blkdev](https://github.com/zrlio/crail-blkdev): A Crail storage tier for shared volume storage.
+* [Crail-Netty](https://github.com/zrlio/crail-netty): A Crail TCP/DRAM storage tier built on top of Netty.
+* [Crail-Spark-IO](https://github.com/zrlio/crail-spark-io): A module including Crail-based Shuffle and Broadcast plugins for Spark.
+* [Crail-Spark-TeraSort](https://github.com/zrlio/crail-terasort): Currently only the sorting benchmark is available.
+
+We currently do not provide binary releases. This page describes how to build the Crail I/O stack from source, and how to configure and deploy it.
+
+<h2 id="crail">Building Crail Store</h2>
+
+Building the source requires [Apache Maven](http://maven.apache.org/) and Java version 8 or higher.
+To build Crail execute the following steps:
+
+1. Obtain a copy of <a href="{{ site.base }}/community/">Crail Store</a>
+2. Make sure your local maven repo contains [DiSNI](https://github.com/zrlio/disni), if not build DiSNI from Github
+3. Make sure your local maven repo contains [DaRPC](https://github.com/zrlio/darpc), if not build DaRPC from Github
+4. Run: mvn -DskipTests install
+5. Copy tarball to the cluster and unpack it using tar xvfz crail-1.0-bin.tar.gz
+
+Note: later, when deploying Crail, make sure libdisni.so is part of your LD_LIBRARY_PATH. The easiest way to make it work is to copy libdisni.so into crail-1.0/lib
+
+### Configuration
+
+To configure Crail use crail-site.conf.template as a basis and modify it to match your environment.
+
+ cd crail-1.0/conf
+ mv crail-site.conf.template crail-site.conf
+
+There are a general file system properties and specific properties for the different storage tiers. A typical configuration for the general file system section may look as follows:
+
+ crail.namenode.address crail://namenode:9060
+ crail.storage.types org.apache.crail.storage.rdma.RdmaStorageTier
+ crail.cachepath /memory/cache
+ crail.cachelimit 12884901888
+ crail.blocksize 1048576
+ crail.buffersize 1048576
+
+In this configuration the namenode is configured to run using port 9060 on host 'namenode', which must be a valid host in the cluster. We further configure a single storage tier, in this case the RDMA-based DRAM tier. Cachepath points to a directory that is used by the file system to allocate memory for the client cache. Up to cachelimit size, all the memory that is used by Crail will be allocated via mmap from this location. Ideally, the directory specified in cachepath points to a hugetlbfs mountpoint. Aside from the general properties, each storage tier needs to be configured separately.
+
+#### RDMA/DRAM Storage Tier
+
+For the RDMA/DRAM tier we need to specify the interface that should be used by the storage nodes.
+
+ crail.storage.rdma.interface eth0
+
+The datapath property specifies a path from which the storage nodes will allocate blocks of memory via mmap. Again, that path best points to a hugetlbfs mountpoint.
+
+ crail.storage.rdma.datapath /memory/data
+
+You want to specify how much DRAM each datanode should donate into the file system pool using the `storagelimit` property. DRAM is allocated in chunks of `allocationsize`, which needs to be a multiple of `crail.blocksize`.
+
+ crail.storage.rdma.allocationsize 1073741824
+ crail.storage.rdma.storagelimit 75161927680
+
+Crail supports optimized local operations via memcpy (instead of RDMA) in case a given file operation is backed by a local storage node. The indexpath specifies where Crail will store the necessary metadata that make these optimizations possible. Important: the indexpath must NOT point to a hugetlbfs mountpoint because index files will be updated which not possible in hugetlbfs.
+
+ crail.storage.rdma.localmap true
+ crail.storage.rdma.indexpath /index
+
+#### NVMf/Flash Storage Tier
+
+Crail is a multi-tiered storage system. Additinoal tiers can be enabled by adding them to the configuration as follows.
+
+ crail.storage.types org.apache.crail.storage.rdma.RdmaStorageTier,org.apache.crail.storage.nvmf.NvmfStorageTier
+
+
+For the NVMf storage tier we need to configure the server IP that is used when listening for new connections. We also need to configure the PCI address of the flash device we want to use, as well as the huge page mount point to be used for allocating memory.
+
+ crail.storage.nvmf.bindip 10.40.0.XX
+ crail.storage.nvmf.pcieaddr 0000:11:00.0
+ crail.storage.nvmf.hugedir /dev/hugepages
+ crail.storage.nvmf.socketmem 512,512
+
+### Deployment
+
+For all deployments, make sure you define CRAIL_HOME on each machine to point to the top level Crail directory.
+
+#### Starting Crail manually
+
+The simplest way to run Crail is to start it manually on just a handful nodes. You will need to start the Crail namenode, plus at least one datanode. To start the namenode execute the following command on the host that is configured to be the namenode:
+
+ cd crail-1.0/
+ ./bin/crail namenode
+
+To start a datanode run the following command on a host in the cluster (ideally this is a different physical machine than the one running the namenode):
+
+ ./bin/crail datanode
+
+Now you should have a small deployment up with just one datanode. In this case the datanode is of type RDMA/DRAM, which is the default datnode. If you want to start a different storage tier you can do so by passing a specific datanode class as follows:
+
+ ./bin/crail datanode -t org.apache.crail.storage.nvmf.NvmfStorageTier
+
+This would start the shared storage datanode. Note that configuration in crail-site.conf needs to have the specific properties set of this type of datanode, in order for this to work.
+
+#### Larger deployments
+
+To run larger deployments start Crail using
+
+ ./bin/start-crail.sh
+
+Similarly, Crail can be stopped by using
+
+ ./bin/stop-crail.sh
+
+For this to work include the list of machines to start datanodes in conf/slaves. You can start multiple datanode of different types on the same host as follows:
+
+ host02-ib
+ host02-ib -t org.apache.crail.storage.nvmf.NvmfStorageTier
+ host03-ib
+
+In this example, we are configuring a Crail cluster with 2 physical hosts but 3 datanodes and two different storage tiers.
+
+### Crail Shell
+
+Crail provides an contains an HDFS adaptor, thus, you can interact with Crail using the HDFS shell:
+
+ ./bin/crail fs
+
+Crail, however, does not implement the full HDFS shell functionality. The basic commands to copy file to/from Crail, or to move and delete files, will work.
+
+ ./bin/crail fs -mkdir /test
+ ./bin/crail fs -ls /
+ ./bin/crail fs -copyFromLocal <path-to-local-file> /test
+ ./bin/crail fs -cat /test/<file-name>
+
+For the Crail shell to work properly, the HDFS configuration in crail-1.0/conf/core-site.xml needs to be configured accordingly:
+
+ <configuration>
+ <property>
+ <name>fs.crail.impl</name>
+ <value>org.apache.crail.hdfs.CrailHadoopFileSystem</value>
+ </property>
+ <property>
+ <name>fs.defaultFS</name>
+ <value>crail://namenode:9060</value>
+ </property>
+ <property>
+ <name>fs.AbstractFileSystem.crail.impl</name>
+ <value>org.apache.crail.hdfs.CrailHDFS</value>
+ </property>
+ </configuration>
+
+Note that the Crail HDFS interface currently cannot provide the full performance of Crail due to limitations of the HDFS API. In particular, the HDFS `FSDataOutputStream` API only support heap-based `byte[]` arrays which requires a data copy. Moreover, HDFS operations are synchronous preventing efficient pipelining of operations. Instead, applications that seek the best performance should use the Crail interface directly, as shown next.
+
+### Programming against Crail
+
+The best way to program against Crail is to use Maven. Make sure you have the Crail dependency specified in your application pom.xml file:
+
+ <dependency>
+ <groupId>org.apache.crail</groupId>
+ <artifactId>crail-client</artifactId>
+ <version>1.0</version>
+ </dependency>
+
+Then, create a Crail file system instance as follows:
+
+ CrailConfiguration conf = new CrailConfiguration();
+ CrailFS fs = CrailFS.newInstance(conf);
+
+Make sure the crail-1.0/conf directory is part of the classpath.
+
+The simplest way to create a file in Crail is as follows:
+
+ CrailFile file = fs.create(filename, CrailNodeType.DATAFILE, CrailStorageClass.DEFAULT, CrailLocationClass.DEFAULT).get().syncDir();
+
+Aside from the actual filename, the 'create()' call takes as input the storage and location classes which are preferences for the storage tier and physical location that this file should be created in. Crail tries to satisfy these preferences later when the file is written. In the example we do not request any particular storage or location affinity.
+
+The 'create()' call is non-blocking, calling 'get()' on the returning future object awaits the completion of the call. At that time, the file has been created, but its directory entry may not be visible. Therefore, the file may not yet show up in a file enumeration of the given parent directory. Calling 'syncDir()' waits to for the directory entry to be completed. Both the 'get()' and the 'syncDir()' operation can be deffered to a later time at which they may become non-blocking operations.
+
+Once the file is created, a file stream can be obtained for writing:
+
+ CrailBufferedOutputStream outstream = file.getBufferedOutputStream(1024);
+
+Here, we create a buffered stream so that we can pass heap byte arrays as well. We could also create a non-buffered stream using
+
+ CrailOutputStream outstream = file.getDirectOutputStream(1024);
+
+In both cases, we pass a write hint (1024 in the example) that indicates to Crail how much data we are intending to write. This allows Crail to optimize metadatanode lookups. Crail never prefetches data, but it may fetch the metadata of the very next operation concurrently with the current data operation if the write hint allows to do so.
+
+Once the stream has been obtained, there exist various ways to write a file. The code snippet below shows the use of the asynchronous interface:
+
+ ByteBuffer dataBuf = fs.allocateBuffer();
+ Future<DataResult> future = outputStream.write(dataBuf);
+ ...
+ future.get();
+
+Reading files works very similar to writing. There exist various examples in org.apache.crail.tools.CrailBenchmark.
+
+### Storage Tiers
+
+Crail ships with the RDMA/DRAM storage tier. Currently there are two additional storage tiers available in separate repos:
+
+* [Crail-Blkdev](https://github.com/zrlio/crail-blkdev) is a storage tier integrating shared volume block devices such as disaggregated flash.
+* [Crail-Netty](https://github.com/zrlio/crail-netty) is a DRAM storage tier for Crail that uses TCP, you can use it to run Crail on non-RDMA hardware. Follow the instructions in these repos to build, deploy and use these storage tiers in your Crail environmnet.
+
+### Benchmarks
+
+Crail provides a set of benchmark tools to measure the performance. Type
+
+ ./bin/crail iobench
+
+to get an overview of the available benchmarks. For instance, to benchmark the sequential write performance, type
+
+ ./bin/crail iobench -t write -s 1048576 -k 102400 -f /tmp.dat
+
+This will create a file of size 100G, written sequentially in a sequence of 1MB operations.
+
+To read a file sequentially, type
+
+ ./bin/crail iobench -t read -s 1048576 -k 102400 -f /tmp.dat
+
+This command issues 102400 read operations of 1MB each.
+
+The tool also contains benchmarks to read files randomly, or to measure the performance of opening files, etc.
+
+<h2 id="spark">Building Crail Spark Modules</h2>
+
+Building the source requires [Apache Maven](http://maven.apache.org/) and Java version 8 or higher.
+To build Crail execute the following steps:
+
+1. Obtain a copy of [Crail-Spark-IO](https://github.com/zrlio/crail-spark-io) from Github
+2. Make sure your local maven repo contains crail store jars, if not build Crail from the <a href="{{ site.base }}/community/">source</a>
+4. Run: mvn -DskipTests install
+5. Add crail-spark-1.0.jar as well as its Crail dependencies to the Spark extra class path, both for the driver and the executors
+
+```
+spark.driver.extraClassPath $CRAIL_HOME/jars/*:<path>/crail-spark.jar:.
+spark.executor.extraClassPath $CRAIL_HOME/jars/*:<path>/crail-spark.jar:.
+```
+
+### Configuration
+
+To configure the crail shuffle plugin included in spark-io add the following line to spark-defaults.conf
+```
+spark.shuffle.manager org.apache.spark.shuffle.crail.CrailShuffleManager
+```
+Since spark version 2.0.0, broadcast is no longer an exchangeable plugin, unfortunately. To use the crail broadcast plugin in Spark it has to be manually added to Spark's BroadcastManager.scala.
+
+### Running
+
+For the Crail shuffler to perform best, applications are encouraged to provide an implementation of the `CrailShuffleSerializer` interface, as well as an implementation of the `CrailShuffleSorter` interface. Defining its own custom serializer and sorter for the shuffle phase not only allows the application to serialize and sort faster, but allows applications to directly leverage the functionality provided by the Crail input/output streams such as zero-copy or asynchronous operations. Custom serializer and sorter can be specified in spark-defaults.xml. For instance, [crail-terasort](https://github.com/zrlio/crail-terasort) defines the shuffle serializer and sorter as follows:
+
+```
+spark.crail.shuffle.sorter com.ibm.crail.terasort.sorter.CrailShuffleNativeRadixSorter
+spark.crail.shuffle.serializer com.ibm.crail.terasort.serializer.F22Serializer
+```
+
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/39417b15/site/img/apache_incubator.png
----------------------------------------------------------------------
diff --git a/site/img/apache_incubator.png b/site/img/apache_incubator.png
new file mode 100644
index 0000000..987c79e
Binary files /dev/null and b/site/img/apache_incubator.png differ
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/39417b15/site/img/blog/crail-machine-learning/cocoa.svg
----------------------------------------------------------------------
diff --git a/site/img/blog/crail-machine-learning/cocoa.svg b/site/img/blog/crail-machine-learning/cocoa.svg
new file mode 100644
index 0000000..25f6565
--- /dev/null
+++ b/site/img/blog/crail-machine-learning/cocoa.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="136pt" height="155pt" viewBox="0 0 136 155" version="1.2">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 5.640625 -2.71875 C 5.640625 -4.28125 4.46875 -5.53125 3.046875 -5.53125 L 0.78125 -5.53125 L 0.78125 0 L 3.046875 0 C 4.484375 0 5.640625 -1.21875 5.640625 -2.71875 Z M 4.859375 -2.71875 C 4.859375 -1.25 3.875 -0.46875 2.828125 -0.46875 L 1.5625 -0.46875 L 1.5625 -5.0625 L 2.828125 -5.0625 C 3.921875 -5.0625 4.859375 -4.1875 4.859375 -2.71875 Z M 4.859375 -2.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 7.859375 -5.53125 L 7.25 -5.53125 L 6.46875 -3.015625 C 6.421875 -2.859375 5.859375 -1.0625 5.8125 -0.640625 L 5.796875 -0.640625 C 5.75 -1.046875 5.171875 -2.921875 5.15625 -2.96875 L 4.359375 -5.53125 L 3.703125 -5.53125 L 2.953125 -3.140625 C 2.875 -2.875 2.34375 -1.15625 2.28125 -0.640625 C 2.234375 -1.125 1.640625 -3.03125 1.625 -3.125 L 0.875 -5.53125 L 0.125 -5.53125 L 1.84375 0 L 2.53125 0 L 3.34375 -2.671875 L 3.734375 -4 C 3.859375 -4.421875 3.921875 -4.671875 3.953125 -4.890625 L 3.96875 -4.890625 C 4.015625 -4.515625 4.21875 -3.859375 4.359375 -3.390625 L 5.015625 -1.21875 L 5.40625 0 L 6.140625 0 Z M 7.859375 -5.53125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 2.921875 -1.9375 C 2.921875 -2.234375 2.921875 -2.9375 2.640625 -3.421875 C 2.328125 -3.96875 1.875 -4.046875 1.578125 -4.046875 C 1.3125 -4.046875 0.84375 -3.96875 0.546875 -3.453125 C 0.265625 -2.96875 0.25 -2.328125 0.25 -1.9375 C 0.25 -1.5 0.28125 -0.953125 0.53125 -0.5 C 0.796875 -0.015625 1.234375 0.125 1.578125 0.125 C 2.1875 0.125 2.515625 -0.21875 2.6875 -0.59375 C 2.90625 -1.015625 2.921875 -1.578125 2.921875 -1.9375 Z M 2.40625 -2.015625 C 2.40625 -1.625 2.40625 -1.171875 2.25 -0.796875 C 2.09375 -0.359375 1.78125 -0.265625 1.578125 -0.265625 C 1.328125 -0.265625 1.046875 -0.40625 0.890625 -0.84375 C 0.78125 -1.203125 0.765625 -1.578125 0.765625 -2.015625 C 0.765625 -2.578125 0.765625 -3.65625 1.578125 -3.65625 C 2.40625 -3.65625 2.40625 -2.578125 2.40625 -2.015625 Z M 2.40625 -2.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 2.71875 0 L 2.71875 -0.375 L 1.921875 -0.375 L 1.921875 -4.046875 L 1.796875 -4.046875 C 1.40625 -3.6875 0.90625 -3.671875 0.546875 -3.65625 L 0.546875 -3.28125 C 0.78125 -3.28125 1.078125 -3.296875 1.375 -3.421875 L 1.375 -0.375 L 0.59375 -0.375 L 0.59375 0 Z M 2.71875 0 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 9.172656 9.920656 L -9.175 9.920656 C -9.585156 9.920656 -9.921094 9.588625 -9.921094 9.174563 L -9.921094 -9.173094 C -9.921094 -9.587156 -9.585156 -9.923094 -9.175 -9.923094 L 9.172656 -9.923094 C 9.586719 -9.923094 9.922656 -9.587156 9.922656 -9.173094 L 9.922656 9.174563 C 9.922656 9.588625 9.586719 9.920656 9.172656 9.920656 Z M 9.172656 9.920656 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<g style="fill:rgb(19.999695%,19.999695%,19.999695%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="64.867" y="13.84"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M -47.51875 9.920656 L -65.866406 9.920656 C -66.280469 9.920656 -66.616406 9.588625 -66.616406 9.174563 L -66.616406 -9.173094 C -66.616406 -9.587156 -66.280469 -9.923094 -65.866406 -9.923094 L -47.51875 -9.923094 C -47.108594 -9.923094 -46.772656 -9.587156 -46.772656 -9.173094 L -46.772656 9.174563 C -46.772656 9.588625 -47.108594 9.920656 -47.51875 9.920656 Z M -47.51875 9.920656 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<g style="fill:rgb(19.999695%,19.999695%,19.999695%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="5.397" y="13.251"/>
+</g>
+<g style="fill:rgb(19.999695%,19.999695%,19.999695%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="13.395" y="14.429"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 65.867969 9.920656 L 47.520313 9.920656 C 47.10625 9.920656 46.770313 9.588625 46.770313 9.174563 L 46.770313 -9.173094 C 46.770313 -9.587156 47.10625 -9.923094 47.520313 -9.923094 L 65.867969 -9.923094 C 66.282031 -9.923094 66.614063 -9.587156 66.614063 -9.173094 L 66.614063 9.174563 C 66.614063 9.588625 66.282031 9.920656 65.867969 9.920656 Z M 65.867969 9.920656 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<g style="fill:rgb(19.999695%,19.999695%,19.999695%);fill-opacity:1;">
+ <use xlink:href="#glyph0-2" x="118.782" y="13.251"/>
+</g>
+<g style="fill:rgb(19.999695%,19.999695%,19.999695%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="126.78" y="14.429"/>
+</g>
+<path style="fill:none;stroke-width:0.59776;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.59776,1.99255;stroke-miterlimit:10;" d="M 0.00078125 -11.016844 L 0.00078125 -144.669187 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill:none;stroke-width:0.59776;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.59776,1.99255;stroke-miterlimit:10;" d="M -56.694531 -11.016844 L -56.694531 -144.669187 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill:none;stroke-width:0.59776;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-dasharray:0.59776,1.99255;stroke-miterlimit:10;" d="M 56.692188 -11.016844 L 56.692188 -144.669187 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.66875 -17.009031 L -0.671094 -17.009031 C -1.08125 -17.009031 -1.417187 -17.341062 -1.417187 -17.755125 L -1.417187 -21.930906 C -1.417187 -22.341062 -1.08125 -22.677 -0.671094 -22.677 L 0.66875 -22.677 C 1.082813 -22.677 1.41875 -22.341062 1.41875 -21.930906 L 1.41875 -17.755125 C 1.41875 -17.341062 1.082813 -17.009031 0.66875 -17.009031 Z M 0.66875 -17.009031 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M -56.022656 -34.016844 L -57.3625 -34.016844 C -57.776562 -34.016844 -58.1125 -34.348875 -58.1125 -34.762937 L -58.1125 -44.606687 C -58.1125 -45.02075 -57.776562 -45.352781 -57.3625 -45.352781 L -56.022656 -45.352781 C -55.6125 -45.352781 -55.276562 -45.02075 -55.276562 -44.606687 L -55.276562 -34.762937 C -55.276562 -34.348875 -55.6125 -34.016844 -56.022656 -34.016844 Z M -56.022656 -34.016844 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 57.364063 -34.016844 L 56.024219 -34.016844 C 55.610156 -34.016844 55.278125 -34.348875 55.278125 -34.762937 L 55.278125 -44.606687 C 55.278125 -45.02075 55.610156 -45.352781 56.024219 -45.352781 L 57.364063 -45.352781 C 57.778125 -45.352781 58.110156 -45.02075 58.110156 -44.606687 L 58.110156 -34.762937 C 58.110156 -34.348875 57.778125 -34.016844 57.364063 -34.016844 Z M 57.364063 -34.016844 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(12.998962%,28.999329%,52.999878%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.492969 -24.169187 L 53.633594 -32.141844 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(12.998962%,28.999329%,52.999878%);fill-opacity:1;" d="M 124.125 43.597656 L 120.328125 40.929688 L 121.558594 43.210938 L 119.714844 45.035156 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(12.998962%,28.999329%,52.999878%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.491406 -24.169187 L -53.635937 -32.141844 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(12.998962%,28.999329%,52.999878%);fill-opacity:1;" d="M 11.726562 43.597656 L 16.136719 45.035156 L 14.289062 43.210938 L 15.519531 40.929688 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(30.999756%,59.999084%,1.998901%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.059375 -54.817625 L 56.2 -46.844969 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(30.999756%,59.999084%,1.998901%);fill-opacity:1;" d="M 68.417969 66.273438 L 72.832031 67.710938 L 70.984375 65.890625 L 72.214844 63.609375 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(30.999756%,59.999084%,1.998901%);stroke-opacity:1;stroke-miterlimit:10;" d="M -3.057812 -54.817625 L -56.198437 -46.844969 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(30.999756%,59.999084%,1.998901%);fill-opacity:1;" d="M 67.433594 66.273438 L 63.636719 63.609375 L 64.867188 65.890625 L 63.019531 67.710938 "/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.66875 -56.692625 L -0.671094 -56.692625 C -1.08125 -56.692625 -1.417187 -57.028562 -1.417187 -57.442625 L -1.417187 -61.6145 C -1.417187 -62.028562 -1.08125 -62.3645 -0.671094 -62.3645 L 0.66875 -62.3645 C 1.082813 -62.3645 1.41875 -62.028562 1.41875 -61.6145 L 1.41875 -57.442625 C 1.41875 -57.028562 1.082813 -56.692625 0.66875 -56.692625 Z M 0.66875 -56.692625 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M -56.022656 -73.700437 L -57.3625 -73.700437 C -57.776562 -73.700437 -58.1125 -74.036375 -58.1125 -74.450437 L -58.1125 -84.294187 C -58.1125 -84.704344 -57.776562 -85.040281 -57.3625 -85.040281 L -56.022656 -85.040281 C -55.6125 -85.040281 -55.276562 -84.704344 -55.276562 -84.294187 L -55.276562 -74.450437 C -55.276562 -74.036375 -55.6125 -73.700437 -56.022656 -73.700437 Z M -56.022656 -73.700437 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 57.364063 -73.700437 L 56.024219 -73.700437 C 55.610156 -73.700437 55.278125 -74.036375 55.278125 -74.450437 L 55.278125 -84.294187 C 55.278125 -84.704344 55.610156 -85.040281 56.024219 -85.040281 L 57.364063 -85.040281 C 57.778125 -85.040281 58.110156 -84.704344 58.110156 -84.294187 L 58.110156 -74.450437 C 58.110156 -74.036375 57.778125 -73.700437 57.364063 -73.700437 Z M 57.364063 -73.700437 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(12.998962%,28.999329%,52.999878%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.492969 -63.852781 L 53.633594 -71.825437 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(12.998962%,28.999329%,52.999878%);fill-opacity:1;" d="M 124.125 83.285156 L 120.328125 80.617188 L 121.558594 82.898438 L 119.714844 84.71875 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(12.998962%,28.999329%,52.999878%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.491406 -63.852781 L -53.635937 -71.825437 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(12.998962%,28.999329%,52.999878%);fill-opacity:1;" d="M 11.726562 83.285156 L 16.136719 84.71875 L 14.289062 82.898438 L 15.519531 80.617188 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(30.999756%,59.999084%,1.998901%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.059375 -94.505125 L 56.2 -86.532469 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(30.999756%,59.999084%,1.998901%);fill-opacity:1;" d="M 68.417969 105.960938 L 72.832031 107.398438 L 70.984375 105.578125 L 72.214844 103.292969 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(30.999756%,59.999084%,1.998901%);stroke-opacity:1;stroke-miterlimit:10;" d="M -3.057812 -94.505125 L -56.198437 -86.532469 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(30.999756%,59.999084%,1.998901%);fill-opacity:1;" d="M 67.433594 105.960938 L 63.636719 103.292969 L 64.867188 105.578125 L 63.019531 107.398438 "/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.66875 -96.380125 L -0.671094 -96.380125 C -1.08125 -96.380125 -1.417187 -96.712156 -1.417187 -97.126219 L -1.417187 -101.302 C -1.417187 -101.712156 -1.08125 -102.048094 -0.671094 -102.048094 L 0.66875 -102.048094 C 1.082813 -102.048094 1.41875 -101.712156 1.41875 -101.302 L 1.41875 -97.126219 C 1.41875 -96.712156 1.082813 -96.380125 0.66875 -96.380125 Z M 0.66875 -96.380125 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M -56.022656 -113.387937 L -57.3625 -113.387937 C -57.776562 -113.387937 -58.1125 -113.719969 -58.1125 -114.134031 L -58.1125 -123.977781 C -58.1125 -124.391844 -57.776562 -124.727781 -57.3625 -124.727781 L -56.022656 -124.727781 C -55.6125 -124.727781 -55.276562 -124.391844 -55.276562 -123.977781 L -55.276562 -114.134031 C -55.276562 -113.719969 -55.6125 -113.387937 -56.022656 -113.387937 Z M -56.022656 -113.387937 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 57.364063 -113.387937 L 56.024219 -113.387937 C 55.610156 -113.387937 55.278125 -113.719969 55.278125 -114.134031 L 55.278125 -123.977781 C 55.278125 -124.391844 55.610156 -124.727781 56.024219 -124.727781 L 57.364063 -124.727781 C 57.778125 -124.727781 58.110156 -124.391844 58.110156 -123.977781 L 58.110156 -114.134031 C 58.110156 -113.719969 57.778125 -113.387937 57.364063 -113.387937 Z M 57.364063 -113.387937 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(12.998962%,28.999329%,52.999878%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.492969 -103.540281 L 53.633594 -111.512937 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(12.998962%,28.999329%,52.999878%);fill-opacity:1;" d="M 124.125 122.96875 L 120.328125 120.300781 L 121.558594 122.585938 L 119.714844 124.40625 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(12.998962%,28.999329%,52.999878%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.491406 -103.540281 L -53.635937 -111.512937 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(12.998962%,28.999329%,52.999878%);fill-opacity:1;" d="M 11.726562 122.96875 L 16.136719 124.40625 L 14.289062 122.585938 L 15.519531 120.300781 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(30.999756%,59.999084%,1.998901%);stroke-opacity:1;stroke-miterlimit:10;" d="M 3.059375 -134.188719 L 56.2 -126.216062 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(30.999756%,59.999084%,1.998901%);fill-opacity:1;" d="M 68.417969 145.644531 L 72.832031 147.082031 L 70.984375 145.261719 L 72.214844 142.980469 "/>
+<path style="fill:none;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(30.999756%,59.999084%,1.998901%);stroke-opacity:1;stroke-miterlimit:10;" d="M -3.057812 -134.188719 L -56.198437 -126.216062 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(30.999756%,59.999084%,1.998901%);fill-opacity:1;" d="M 67.433594 145.644531 L 63.636719 142.980469 L 64.867188 145.261719 L 63.019531 147.082031 "/>
+<path style="fill-rule:nonzero;fill:rgb(94.999695%,94.999695%,94.999695%);fill-opacity:1;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(19.999695%,19.999695%,19.999695%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.66875 -136.063719 L -0.671094 -136.063719 C -1.08125 -136.063719 -1.417187 -136.399656 -1.417187 -136.813719 L -1.417187 -140.985594 C -1.417187 -141.399656 -1.08125 -141.735594 -0.671094 -141.735594 L 0.66875 -141.735594 C 1.082813 -141.735594 1.41875 -141.399656 1.41875 -140.985594 L 1.41875 -136.813719 C 1.41875 -136.399656 1.082813 -136.063719 0.66875 -136.063719 Z M 0.66875 -136.063719 " transform="matrix(1,0,0,-1,67.925,11.073)"/>
+</g>
+</svg>
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/39417b15/site/img/blog/crail-machine-learning/final.svg
----------------------------------------------------------------------
diff --git a/site/img/blog/crail-machine-learning/final.svg b/site/img/blog/crail-machine-learning/final.svg
new file mode 100644
index 0000000..bd9a21d
--- /dev/null
+++ b/site/img/blog/crail-machine-learning/final.svg
@@ -0,0 +1,326 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<svg
+ width="640" height="300"
+ viewBox="0 0 640 300"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+>
+
+<title>Gnuplot</title>
+<desc>Produced by GNUPLOT 5.0 patchlevel 6 </desc>
+
+<g id="gnuplot_canvas">
+
+<rect x="0" y="0" width="640" height="300" fill="none"/>
+<defs>
+
+ <circle id='gpDot' r='0.5' stroke-width='0.5'/>
+ <path id='gpPt0' stroke-width='0.267' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
+ <path id='gpPt1' stroke-width='0.267' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
+ <path id='gpPt2' stroke-width='0.267' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
+ <rect id='gpPt3' stroke-width='0.267' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
+ <rect id='gpPt4' stroke-width='0.267' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
+ <circle id='gpPt5' stroke-width='0.267' stroke='currentColor' cx='0' cy='0' r='1'/>
+ <use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
+ <path id='gpPt7' stroke-width='0.267' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
+ <use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
+ <use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
+ <use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
+ <use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
+ <use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
+ <path id='gpPt13' stroke-width='0.267' stroke='currentColor' d='M0,1.330 L1.265,0.411 L0.782,-1.067 L-0.782,-1.076 L-1.265,0.411 z'/>
+ <use xlink:href='#gpPt13' id='gpPt14' fill='currentColor' stroke='none'/>
+ <filter id='textbox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
+ <feFlood flood-color='white' flood-opacity='1' result='bgnd'/>
+ <feComposite in='SourceGraphic' in2='bgnd' operator='atop'/>
+ </filter>
+ <filter id='greybox' filterUnits='objectBoundingBox' x='0' y='0' height='1' width='1'>
+ <feFlood flood-color='lightgrey' flood-opacity='1' result='grey'/>
+ <feComposite in='SourceGraphic' in2='grey' operator='atop'/>
+ </filter>
+</defs>
+<g fill="none" color="white" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M60.5,286.0 L618.9,286.0 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M60.5,286.0 L68.0,286.0 M618.9,286.0 L611.4,286.0 '/> <g transform="translate(53.5,289.3)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > 0</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M60.5,237.8 L618.9,237.8 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M60.5,237.8 L68.0,237.8 M618.9,237.8 L611.4,237.8 '/> <g transform="translate(53.5,241.1)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > 0.5</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M60.5,189.6 L618.9,189.6 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M60.5,189.6 L68.0,189.6 M618.9,189.6 L611.4,189.6 '/> <g transform="translate(53.5,192.9)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > 1</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M60.5,141.5 L67.5,141.5 M257.0,141.5 L618.9,141.5 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M60.5,141.5 L68.0,141.5 M618.9,141.5 L611.4,141.5 '/> <g transform="translate(53.5,144.8)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > 1.5</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M60.5,93.3 L67.5,93.3 M257.0,93.3 L618.9,93.3 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M60.5,93.3 L68.0,93.3 M618.9,93.3 L611.4,93.3 '/> <g transform="translate(53.5,96.6)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > 2</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="gray" stroke="currentColor" stroke-width="0.50" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='gray' stroke-dasharray='2,4' class="gridline" d='M60.5,45.1 L618.9,45.1 '/></g>
+<g fill="none" color="gray" stroke="gray" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M60.5,45.1 L68.0,45.1 M618.9,45.1 L611.4,45.1 '/> <g transform="translate(53.5,48.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > 2.5</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M60.5,45.1 L60.5,286.0 L618.9,286.0 L618.9,45.1 L60.5,45.1 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(14.2,165.6) rotate(270)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="middle">
+ <text><tspan font-family="Sans" >time [s]</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(339.7,25.9)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="middle">
+ <text><tspan font-family="Sans" >Machine Learning</tspan></text>
+ </g>
+</g>
+ <g id="gnuplot_plot_1" ><title> Compute (Vanilla)</title>
+<g fill="none" color="white" stroke="black" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(207.5,63.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > Compute (Vanilla)</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'rgb( 77, 175, 164)' fill-opacity = '0.900000' points = '214.5,63.8 250.0,63.8 250.0,56.3 214.5,56.3 '/>
+ </g>
+ <path stroke='rgb( 77, 175, 164)' d='M214.5,63.8 L250.0,63.8 L250.0,56.4 L214.5,56.4 L214.5,63.8 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'rgb( 77, 175, 164)' fill-opacity = '0.900000' points = '259.2,286.0 299.1,286.0 299.1,240.5 259.2,240.5 '/>
+ </g>
+ <path stroke='rgb( 77, 175, 164)' d='M259.2,286.0 L259.2,240.6 L299.0,240.6 L299.0,286.0 L259.2,286.0 Z '/></g>
+ </g>
+ <g id="gnuplot_plot_2" ><title> Compute (Crail)</title>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(207.5,78.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > Compute (Crail)</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <defs>
+ <pattern id='gpPat1' patternUnits='userSpaceOnUse' x='0' y='0' width='8' height='8'>
+ <path style='fill:none; stroke:rgb(77,175,164)' d='M0,0 L8,8 M0,8 L8,0'/>
+ </pattern>
+ </defs>
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'url(#gpPat1)' points = '214.5,78.8 250.0,78.8 250.0,71.3 214.5,71.3 '/>
+ </g>
+ <path stroke='rgb( 77, 175, 164)' d='M214.5,78.8 L250.0,78.8 L250.0,71.4 L214.5,71.4 L214.5,78.8 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <defs>
+ <pattern id='gpPat2' patternUnits='userSpaceOnUse' x='0' y='0' width='8' height='8'>
+ <path style='fill:none; stroke:rgb(77,175,164)' d='M0,0 L8,8 M0,8 L8,0'/>
+ </pattern>
+ </defs>
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'url(#gpPat2)' points = '304.9,286.0 344.8,286.0 344.8,241.5 304.9,241.5 '/>
+ </g>
+ <path stroke='rgb( 77, 175, 164)' d='M304.9,286.0 L304.9,241.6 L344.7,241.6 L344.7,286.0 L304.9,286.0 Z '/></g>
+ </g>
+ <g id="gnuplot_plot_3" ><title> Broadcast (Vanilla)</title>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(207.5,93.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > Broadcast (Vanilla)</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'rgb(255, 127, 0)' fill-opacity = '0.900000' points = '214.5,93.8 250.0,93.8 250.0,86.3 214.5,86.3 '/>
+ </g>
+ <path stroke='rgb(255, 127, 0)' d='M214.5,93.8 L250.0,93.8 L250.0,86.4 L214.5,86.4 L214.5,93.8 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'rgb(255, 127, 0)' fill-opacity = '0.900000' points = '350.6,286.0 390.5,286.0 390.5,248.6 350.6,248.6 '/>
+ </g>
+ <path stroke='rgb(255, 127, 0)' d='M350.6,286.0 L350.6,248.7 L390.4,248.7 L390.4,286.0 L350.6,286.0 Z '/></g>
+ </g>
+ <g id="gnuplot_plot_4" ><title> Broadcast (Crail)</title>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(207.5,108.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > Broadcast (Crail)</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <defs>
+ <pattern id='gpPat3' patternUnits='userSpaceOnUse' x='0' y='0' width='8' height='8'>
+ <path style='fill:none; stroke:rgb(255,127,0)' d='M0,0 L8,8 M0,8 L8,0'/>
+ </pattern>
+ </defs>
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'url(#gpPat3)' points = '214.5,108.8 250.0,108.8 250.0,101.3 214.5,101.3 '/>
+ </g>
+ <path stroke='rgb(255, 127, 0)' d='M214.5,108.8 L250.0,108.8 L250.0,101.4 L214.5,101.4 L214.5,108.8 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <defs>
+ <pattern id='gpPat4' patternUnits='userSpaceOnUse' x='0' y='0' width='8' height='8'>
+ <path style='fill:none; stroke:rgb(255,127,0)' d='M0,0 L8,8 M0,8 L8,0'/>
+ </pattern>
+ </defs>
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'url(#gpPat4)' points = '396.3,286.0 436.2,286.0 436.2,277.9 396.3,277.9 '/>
+ </g>
+ <path stroke='rgb(255, 127, 0)' d='M396.3,286.0 L396.3,278.0 L436.1,278.0 L436.1,286.0 L396.3,286.0 Z '/></g>
+ </g>
+ <g id="gnuplot_plot_5" ><title> Reduce (Vanilla)</title>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(207.5,123.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > Reduce (Vanilla)</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'rgb(228, 26, 28)' fill-opacity = '0.900000' points = '214.5,123.8 250.0,123.8 250.0,116.3 214.5,116.3 '/>
+ </g>
+ <path stroke='rgb(228, 26, 28)' d='M214.5,123.8 L250.0,123.8 L250.0,116.4 L214.5,116.4 L214.5,123.8 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'rgb(228, 26, 28)' fill-opacity = '0.900000' points = '442.0,286.0 481.9,286.0 481.9,171.7 442.0,171.7 '/>
+ </g>
+ <path stroke='rgb(228, 26, 28)' d='M442.0,286.0 L442.0,171.8 L481.8,171.8 L481.8,286.0 L442.0,286.0 Z '/></g>
+ </g>
+ <g id="gnuplot_plot_6" ><title> Reduce (Crail)</title>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(207.5,138.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > Reduce (Crail)</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <defs>
+ <pattern id='gpPat5' patternUnits='userSpaceOnUse' x='0' y='0' width='8' height='8'>
+ <path style='fill:none; stroke:rgb(228,26,28)' d='M0,0 L8,8 M0,8 L8,0'/>
+ </pattern>
+ </defs>
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'url(#gpPat5)' points = '214.5,138.8 250.0,138.8 250.0,131.3 214.5,131.3 '/>
+ </g>
+ <path stroke='rgb(228, 26, 28)' d='M214.5,138.8 L250.0,138.8 L250.0,131.4 L214.5,131.4 L214.5,138.8 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <defs>
+ <pattern id='gpPat6' patternUnits='userSpaceOnUse' x='0' y='0' width='8' height='8'>
+ <path style='fill:none; stroke:rgb(228,26,28)' d='M0,0 L8,8 M0,8 L8,0'/>
+ </pattern>
+ </defs>
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'url(#gpPat6)' points = '487.7,286.0 527.6,286.0 527.6,220.4 487.7,220.4 '/>
+ </g>
+ <path stroke='rgb(228, 26, 28)' d='M487.7,286.0 L487.7,220.5 L527.5,220.5 L527.5,286.0 L487.7,286.0 Z '/></g>
+ </g>
+ <g id="gnuplot_plot_7" ><title> Total (Vanilla)</title>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(207.5,153.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > Total (Vanilla)</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'rgb( 55, 126, 184)' fill-opacity = '0.900000' points = '214.5,153.8 250.0,153.8 250.0,146.3 214.5,146.3 '/>
+ </g>
+ <path stroke='rgb( 55, 126, 184)' d='M214.5,153.8 L250.0,153.8 L250.0,146.4 L214.5,146.4 L214.5,153.8 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'rgb( 55, 126, 184)' fill-opacity = '0.900000' points = '533.5,286.0 573.3,286.0 573.3,46.2 533.5,46.2 '/>
+ </g>
+ <path stroke='rgb( 55, 126, 184)' d='M533.5,286.0 L533.5,46.3 L573.2,46.3 L573.2,286.0 L533.5,286.0 Z '/></g>
+ </g>
+ <g id="gnuplot_plot_8" ><title> Total (Crail)</title>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <g transform="translate(207.5,168.4)" stroke="none" fill="black" font-family="Sans" font-size="10.00" text-anchor="end">
+ <text><tspan font-family="Sans" > Total (Crail)</tspan></text>
+ </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <defs>
+ <pattern id='gpPat7' patternUnits='userSpaceOnUse' x='0' y='0' width='8' height='8'>
+ <path style='fill:none; stroke:rgb(55,126,184)' d='M0,0 L8,8 M0,8 L8,0'/>
+ </pattern>
+ </defs>
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'url(#gpPat7)' points = '214.5,168.8 250.0,168.8 250.0,161.3 214.5,161.3 '/>
+ </g>
+ <path stroke='rgb( 55, 126, 184)' d='M214.5,168.8 L250.0,168.8 L250.0,161.4 L214.5,161.4 L214.5,168.8 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="4.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <defs>
+ <pattern id='gpPat8' patternUnits='userSpaceOnUse' x='0' y='0' width='8' height='8'>
+ <path style='fill:none; stroke:rgb(55,126,184)' d='M0,0 L8,8 M0,8 L8,0'/>
+ </pattern>
+ </defs>
+ <g stroke='none' shape-rendering='crispEdges'>
+ <polygon fill = 'url(#gpPat8)' points = '579.2,286.0 619.0,286.0 619.0,150.1 579.2,150.1 '/>
+ </g>
+ <path stroke='rgb( 55, 126, 184)' d='M579.2,286.0 L579.2,150.2 L618.9,150.2 L618.9,286.0 L579.2,286.0 Z '/></g>
+ </g>
+<g fill="none" color="white" stroke="rgb( 55, 126, 184)" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="2.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="black" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+ <path stroke='black' d='M60.5,45.1 L60.5,286.0 L618.9,286.0 L618.9,45.1 L60.5,45.1 Z '/></g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" stroke-linecap="butt" stroke-linejoin="miter">
+</g>
+</g>
+</svg>
+
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/39417b15/site/img/blog/crail-memory/anatomy.png
----------------------------------------------------------------------
diff --git a/site/img/blog/crail-memory/anatomy.png b/site/img/blog/crail-memory/anatomy.png
new file mode 100644
index 0000000..c37ab7e
Binary files /dev/null and b/site/img/blog/crail-memory/anatomy.png differ
http://git-wip-us.apache.org/repos/asf/incubator-crail-website/blob/39417b15/site/img/blog/crail-memory/cdf-broadcast-128-read.svg
----------------------------------------------------------------------
diff --git a/site/img/blog/crail-memory/cdf-broadcast-128-read.svg b/site/img/blog/crail-memory/cdf-broadcast-128-read.svg
new file mode 100644
index 0000000..ab7f7b3
--- /dev/null
+++ b/site/img/blog/crail-memory/cdf-broadcast-128-read.svg
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg
+ width="640" height="300"
+ viewBox="0 0 640 300"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+>
+
+<title>Gnuplot</title>
+<desc>Produced by GNUPLOT 4.6 patchlevel 4 </desc>
+
+<g id="gnuplot_canvas">
+
+<rect x="0" y="0" width="640" height="300" fill="none"/>
+<defs>
+
+ <circle id='gpDot' r='0.5' stroke-width='0.5'/>
+ <path id='gpPt0' stroke-width='0.222' stroke='currentColor' d='M-1,0 h2 M0,-1 v2'/>
+ <path id='gpPt1' stroke-width='0.222' stroke='currentColor' d='M-1,-1 L1,1 M1,-1 L-1,1'/>
+ <path id='gpPt2' stroke-width='0.222' stroke='currentColor' d='M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1'/>
+ <rect id='gpPt3' stroke-width='0.222' stroke='currentColor' x='-1' y='-1' width='2' height='2'/>
+ <rect id='gpPt4' stroke-width='0.222' stroke='currentColor' fill='currentColor' x='-1' y='-1' width='2' height='2'/>
+ <circle id='gpPt5' stroke-width='0.222' stroke='currentColor' cx='0' cy='0' r='1'/>
+ <use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>
+ <path id='gpPt7' stroke-width='0.222' stroke='currentColor' d='M0,-1.33 L-1.33,0.67 L1.33,0.67 z'/>
+ <use xlink:href='#gpPt7' id='gpPt8' fill='currentColor' stroke='none'/>
+ <use xlink:href='#gpPt7' id='gpPt9' stroke='currentColor' transform='rotate(180)'/>
+ <use xlink:href='#gpPt9' id='gpPt10' fill='currentColor' stroke='none'/>
+ <use xlink:href='#gpPt3' id='gpPt11' stroke='currentColor' transform='rotate(45)'/>
+ <use xlink:href='#gpPt11' id='gpPt12' fill='currentColor' stroke='none'/>
+</defs>
+<g style="fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+</g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,242.4 L611.0,242.4 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M71.9,242.4 L80.9,242.4 M611.0,242.4 L602.0,242.4 h0.01'/> <g transform="translate(63.6,246.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:end">
+ <text> 0</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,197.3 L611.0,197.3 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M71.9,197.3 L80.9,197.3 M611.0,197.3 L602.0,197.3 h0.01'/> <g transform="translate(63.6,201.8)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:end">
+ <text> 20</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,152.1 L611.0,152.1 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M71.9,152.1 L80.9,152.1 M611.0,152.1 L602.0,152.1 h0.01'/> <g transform="translate(63.6,156.6)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:end">
+ <text> 40</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,107.0 L611.0,107.0 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M71.9,107.0 L80.9,107.0 M611.0,107.0 L602.0,107.0 h0.01'/> <g transform="translate(63.6,111.5)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:end">
+ <text> 60</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,61.8 L611.0,61.8 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M71.9,61.8 L80.9,61.8 M611.0,61.8 L602.0,61.8 h0.01'/> <g transform="translate(63.6,66.3)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:end">
+ <text> 80</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,16.7 L611.0,16.7 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M71.9,16.7 L80.9,16.7 M611.0,16.7 L602.0,16.7 h0.01'/> <g transform="translate(63.6,21.2)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:end">
+ <text> 100</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M71.9,242.4 L71.9,16.7 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M71.9,242.4 L71.9,233.4 M71.9,16.7 L71.9,25.7 h0.01'/> <g transform="translate(71.9,264.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:middle">
+ <text>1us</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M179.7,242.4 L179.7,16.7 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M179.7,242.4 L179.7,233.4 M179.7,16.7 L179.7,25.7 h0.01'/> <g transform="translate(179.7,264.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:middle">
+ <text>10us</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M287.5,242.4 L287.5,16.7 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M287.5,242.4 L287.5,233.4 M287.5,16.7 L287.5,25.7 h0.01'/> <g transform="translate(287.5,264.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:middle">
+ <text>100us</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M395.4,242.4 L395.4,16.7 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M395.4,242.4 L395.4,233.4 M395.4,16.7 L395.4,25.7 h0.01'/> <g transform="translate(395.4,264.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:middle">
+ <text>1ms</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M503.2,242.4 L503.2,16.7 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M503.2,242.4 L503.2,233.4 M503.2,16.7 L503.2,25.7 h0.01'/> <g transform="translate(503.2,264.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:middle">
+ <text>10ms</text>
+ </g>
+</g>
+<g style="fill:none; color:gray; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='gray' stroke-dasharray=' 2,4' class="gridline" d='M611.0,242.4 L611.0,16.7 h0.01'/></g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M611.0,242.4 L611.0,233.4 M611.0,16.7 L611.0,25.7 h0.01'/> <g transform="translate(611.0,264.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:middle">
+ <text>100ms</text>
+ </g>
+ <path stroke='black' d='M71.9,16.7 L71.9,242.4 L611.0,242.4 L611.0,16.7 L71.9,16.7 Z h0.01'/> <g transform="translate(17.6,129.6) rotate(270)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:middle">
+ <text>CDF</text>
+ </g>
+ <g transform="translate(341.4,291.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:middle">
+ <text>read 128b broadcast latency</text>
+ </g>
+</g>
+ <g id="gnuplot_plot_1" ><title>gnuplot_plot_1</title>
+<g style="fill:none; color:white; stroke:black; stroke-width:4.00; stroke-linecap:butt; stroke-linejoin:miter">
+</g>
+<g style="fill:none; color:red; stroke:currentColor; stroke-width:4.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <g transform="translate(568.8,210.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:end">
+ <text>crail</text>
+ </g>
+ <path stroke='rgb( 0, 255, 0)' d='M577.1,206.4 L594.4,206.4 M198.7,240.1 L201.7,237.9 L201.7,235.6 L204.6,233.4 L204.6,231.1 L207.2,228.9
+ L207.2,226.6 L209.8,224.3 L212.2,222.1 L212.2,219.8 L212.2,217.6 L212.2,215.3 L212.2,213.1 L212.2,210.8
+ L212.2,208.5 L214.5,206.3 L214.5,204.0 L214.5,201.8 L214.5,199.5 L214.5,197.3 L214.5,195.0 L214.5,192.7
+ L214.5,190.5 L214.5,188.2 L214.5,186.0 L214.5,183.7 L214.5,181.5 L214.5,179.2 L214.5,176.9 L214.5,174.7
+ L214.5,172.4 L214.5,170.2 L214.5,167.9 L214.5,165.7 L214.5,163.4 L214.5,161.1 L214.5,158.9 L214.5,156.6
+ L214.5,154.4 L214.5,152.1 L216.6,149.9 L216.6,147.6 L216.6,145.3 L216.6,143.1 L216.6,140.8 L216.6,138.6
+ L216.6,136.3 L216.6,134.1 L216.6,131.8 L216.6,129.5 L216.6,127.3 L216.6,125.0 L216.6,122.8 L216.6,120.5
+ L216.6,118.3 L216.6,116.0 L216.6,113.8 L216.6,111.5 L216.6,109.2 L216.6,107.0 L216.6,104.7 L216.6,102.5
+ L218.7,100.2 L218.7,98.0 L218.7,95.7 L218.7,93.4 L218.7,91.2 L218.7,88.9 L218.7,86.7 L218.7,84.4
+ L218.7,82.2 L218.7,79.9 L218.7,77.6 L218.7,75.4 L220.7,73.1 L220.7,70.9 L220.7,68.6 L220.7,66.4
+ L220.7,64.1 L220.7,61.8 L220.7,59.6 L222.6,57.3 L222.6,55.1 L222.6,52.8 L222.6,50.6 L222.6,48.3
+ L224.5,46.0 L224.5,43.8 L224.5,41.5 L226.2,39.3 L226.2,37.0 L227.9,34.8 L227.9,32.5 L229.6,30.2
+ L231.2,28.0 L231.2,25.7 L232.7,23.5 L235.6,21.2 L238.4,19.0 L417.2,16.7 h0.01'/></g>
+ </g>
+ <g id="gnuplot_plot_2" ><title>gnuplot_plot_2</title>
+<g style="fill:none; color:green; stroke:currentColor; stroke-width:4.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <g transform="translate(568.8,228.9)" style="stroke:none; fill:black; font-family:Times-Roman; font-size:12.00pt; text-anchor:end">
+ <text>vanilla</text>
+ </g>
+ <path stroke='rgb(255, 0, 0)' d='M577.1,224.4 L594.4,224.4 M361.5,240.1 L362.2,237.9 L362.7,235.6 L363.2,233.4 L363.6,231.1 L363.9,228.9
+ L364.2,226.6 L364.6,224.3 L364.8,222.1 L365.1,219.8 L365.4,217.6 L365.6,215.3 L365.9,213.1 L366.2,210.8
+ L366.5,208.5 L366.8,206.3 L367.0,204.0 L367.3,201.8 L367.5,199.5 L367.8,197.3 L368.1,195.0 L368.4,192.7
+ L368.6,190.5 L369.0,188.2 L369.2,186.0 L369.4,183.7 L369.8,181.5 L370.0,179.2 L370.3,176.9 L370.7,174.7
+ L370.9,172.4 L371.2,170.2 L371.4,167.9 L371.8,165.7 L372.1,163.4 L372.3,161.1 L372.6,158.9 L372.9,156.6
+ L373.1,154.4 L373.4,152.1 L373.7,149.9 L374.0,147.6 L374.3,145.3 L374.6,143.1 L374.9,140.8 L375.2,138.6
+ L375.5,136.3 L375.8,134.1 L376.1,131.8 L376.5,129.5 L376.7,127.3 L377.0,125.0 L377.3,122.8 L377.6,120.5
+ L378.0,118.3 L378.3,116.0 L378.7,113.8 L379.0,111.5 L379.3,109.2 L379.7,107.0 L380.0,104.7 L380.3,102.5
+ L380.7,100.2 L381.1,98.0 L381.5,95.7 L381.8,93.4 L382.3,91.2 L382.7,88.9 L383.1,86.7 L383.6,84.4
+ L384.1,82.2 L384.6,79.9 L385.1,77.6 L385.6,75.4 L386.2,73.1 L386.8,70.9 L387.5,68.6 L388.1,66.4
+ L388.9,64.1 L389.9,61.8 L390.9,59.6 L392.3,57.3 L393.9,55.1 L396.2,52.8 L399.3,50.6 L404.1,48.3
+ L411.7,46.0 L423.9,43.8 L431.2,41.5 L434.9,39.3 L437.4,37.0 L439.4,34.8 L441.2,32.5 L443.0,30.2
+ L444.9,28.0 L446.9,25.7 L449.7,23.5 L452.5,21.2 L454.9,19.0 L559.1,16.7 h0.01'/></g>
+ </g>
+ <g id="gnuplot_plot_3" ><title>gnuplot_plot_3</title>
+<g style="fill:none; color:blue; stroke:currentColor; stroke-width:4.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='rgb(192, 192, 192)' d='M204.6,240.1 L204.6,237.9 L204.6,235.6 L204.6,233.4 L204.6,231.1 L204.6,228.9 L204.6,226.6 L204.6,224.3
+ L204.6,222.1 L204.6,219.8 L204.6,217.6 L204.6,215.3 L204.6,213.1 L204.6,210.8 L204.6,208.5 L204.6,206.3
+ L204.6,204.0 L204.6,201.8 L204.6,199.5 L204.6,197.3 L204.6,195.0 L204.6,192.7 L204.6,190.5 L204.6,188.2
+ L204.6,186.0 L204.6,183.7 L204.6,181.5 L204.6,179.2 L204.6,176.9 L204.6,174.7 L204.6,172.4 L204.6,170.2
+ L204.6,167.9 L204.6,165.7 L204.6,163.4 L204.6,161.1 L204.6,158.9 L204.6,156.6 L204.6,154.4 L204.6,152.1
+ L204.6,149.9 L204.6,147.6 L204.6,145.3 L204.6,143.1 L204.6,140.8 L204.6,138.6 L204.6,136.3 L204.6,134.1
+ L204.6,131.8 L204.6,129.5 L204.6,127.3 L204.6,125.0 L204.6,122.8 L204.6,120.5 L204.6,118.3 L204.6,116.0
+ L204.6,113.8 L204.6,111.5 L204.6,109.2 L204.6,107.0 L204.6,104.7 L204.6,102.5 L204.6,100.2 L204.6,98.0
+ L204.6,95.7 L204.6,93.4 L204.6,91.2 L204.6,88.9 L204.6,86.7 L204.6,84.4 L204.6,82.2 L204.6,79.9
+ L204.6,77.6 L204.6,75.4 L204.6,73.1 L204.6,70.9 L204.6,68.6 L204.6,66.4 L204.6,64.1 L204.6,61.8
+ L204.6,59.6 L204.6,57.3 L204.6,55.1 L204.6,52.8 L204.6,50.6 L204.6,48.3 L204.6,46.0 L204.6,43.8
+ L204.6,41.5 L204.6,39.3 L204.6,37.0 L204.6,34.8 L204.6,32.5 L204.6,30.2 L204.6,28.0 L204.6,25.7
+ L204.6,23.5 L204.6,21.2 L204.6,19.0 L204.6,16.7 h0.01'/></g>
+ </g>
+<g style="fill:none; color:white; stroke:rgb(192, 192, 192); stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+</g>
+<g style="fill:none; color:black; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter">
+ <path stroke='black' d='M71.9,16.7 L71.9,242.4 L611.0,242.4 L611.0,16.7 L71.9,16.7 Z h0.01'/></g>
+</g>
+</svg>
+