<!--

-->
<!--

-->
<!DOCTYPE html>
<html lang="en">
  <!--

-->

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  <title>SystemML 0.14.0-incubating Release Notes</title>
  
  <meta name="description" content="Project Release Notes"> 
  <meta name="author" content="Apache SystemDS">

  <!-- Enable responsive viewport -->
  <meta name="HandheldFriendly" content="True">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- You can use Open Graph tags to customize link previews.
  Learn more: https://developers.facebook.com/docs/sharing/webmasters -->
  <meta property="og:url" content="https://systemds.apache.org/" />
  <meta property="og:type" content="website" />
  <meta property="og:title" content="SystemML 0.14.0-incubating Release Notes" />
  <meta property="og:description" content="Apache SystemDS is an open source ML system for the end-to-end data science lifecycle" />
  <meta property="og:image" content="" />

  <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
  <!--[if lt IE 9]>
  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->

  <!-- Le styles -->
  <link rel="stylesheet" href="/assets/css/main.css">

  <!-- favicons -->
  <link rel="shortcut icon" href="/assets/img/favicon.png">
</head> <!-- META -->
  <body class="vcard">
    <!--

-->
<header class="site-header site-header--not-home">
  <h1 class="logo"><a class="url" href="/"><i class="logo-mark"></i><span class="fn org">Apache SystemDS<sup
          id="trademark">&trade;</sup></span></a></h1>
  <nav class="main-nav">
    <ul>
      
      <li role="presentation">
        
        
        <a href="/download" target="_self">Download</a>
        
      </li>
      
      <li role="presentation">
        
        
        <a href="/get-started" target="_self">Get Started</a>
        
      </li>
      
      <li role="presentation">
        
        <a class="nav-link--hover">Docs <i class="icon icon-chevron-down"></i></a>
        <ul>
          
          
          <li><a href="https://apache.github.io/systemds/" target="_blank">latest</a></li>
          
          
          <li><a href="https://systemds.apache.org/docs/3.2.0/" target="_blank">3.2.0 (stable)</a></li>
          
          
          <li><a href="https://systemds.apache.org/release-notes/systemds-release-notes-3.2.0" target="_blank">Release Notes 3.2.0</a></li>
          
        </ul>
        
      </li>
      
      <li role="presentation">
        
        <a class="nav-link--hover">Community <i class="icon icon-chevron-down"></i></a>
        <ul>
          
          
          <li><a href="/community" target="_self">Get Involved</a></li>
          
          
          <li><a href="https://issues.apache.org/jira/browse/SYSTEMDS" target="_blank">Issue Tracker</a></li>
          
          
          <li><a href="https://github.com/apache/systemds" target="_blank">Source Code</a></li>
          
          
          <li><a href="https://github.com/apache/systemds-website" target="_blank">Website Source Code</a></li>
          
        </ul>
        
      </li>
      
      <li role="presentation">
        
        <a class="nav-link--hover">Apache <i class="icon icon-chevron-down"></i></a>
        <ul>
          
          
          <li><a href="https://www.apache.org/foundation/how-it-works" target="_blank">Apache Software Foundation</a></li>
          
          
          <li><a href="https://www.apache.org/licenses/" target="_blank">Apache License</a></li>
          
          
          <li><a href="https://www.apache.org/foundation/sponsorship" target="_blank">Sponsorship</a></li>
          
          
          <li><a href="https://www.apache.org/foundation/thanks" target="_blank">Thanks</a></li>
          
          
          <li><a href="/privacy-policy" target="_self">Privacy Policy</a></li>
          
          
          <li><a href="/security" target="_self">Security</a></li>
          
        </ul>
        
      </li>
      
    </ul>
  </nav>
</header> <!-- GLOBAL HEADER -->
    <!--

-->
<!--

-->
<div>
  <!--

-->

<section class="full-stripe full-stripe--subpage-header clear-header">
  <div class="ml-container ml-container--horizontally-center">
    <div class="col col-12 content-group content-group--center-content content-group--center-align">
      <h1>Apache SystemDS<sup id="trademark">&trade;</sup> 0.14.0-incubating Release Notes</h1>
    </div>
  </div>
</section>

<section class="full-stripe full-stripe--alternate">
  <div class="ml-container">
    <div class="col col-12 content-group content-group--medium-bottom-margin">

      <p>The <strong>Apache SystemML 0.14.0-incubating release</strong> was approved on May 8, 2017. It is the sixth release of Apache SystemML since it
became an incubator project on November 2nd, 2015. Updates have been made to the project in several areas, as detailed below.</p>

      <h3 id="new-features-and-capabilities">New Features and Capabilities</h3>
      <ul>
        <li>Runtime feature extensions (new libsvm-binary data converters, parfor spark buffer pool handling, parfor block partitioning of fixed size batches of rows or columns, native dataset support in parfor spark datapartition-execute)</li>
        <li>Compiler feature extensions (improved parfor execution type selection, improved literal replacement for nrow/ncol, simplified instruction generation across back-ends, consolidated static/dynamic rewrite utilities)</li>
      </ul>

      <h3 id="experimental-features">Experimental Features</h3>
      <ul>
        <li>New Code Generation capabilities for automatic operator fusion (basic code generator, compiler integration, runtime integration, in-memory source code compilation, extended explain tool, support for right indexing and replace in cellwise and row aggregate templates, support for row, column, or no aggregation in rowwise template).  Note code generation provides significant performance gains with fewer read/write intermediates, reduced scans of inputs and intermediates, and enhanced sparsity exploitation.  To enable this feature, set <code class="language-plaintext highlighter-rouge">codegen.enabled</code> property to <code class="language-plaintext highlighter-rouge">true</code> in SystemML-config.xml file.</li>
        <li>New instructions and operators for GPU support (relu_maxpooling, conv2d_bias_add, bias_multiply)</li>
      </ul>

      <h3 id="removals">Removals</h3>
      <ul>
        <li>Removed support for Java 6 and Java 7</li>
        <li>Removed parfor perftesttool and cost estimator</li>
      </ul>

      <h3 id="various-fixes">Various Fixes</h3>
      <ul>
        <li>Bug fixes for diverse issues.  See <a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12319522&amp;version=12340322">JIRA release notes</a> for complete list.</li>
      </ul>

    </div></div></section>

</div>

 
    <!--

-->
<footer class="site-footer">
  <div class="ml-container ml-container--horizontally-center">
    <div class="footer-col-wrapper">
      <div style="margin-top: 20px; margin-bottom: 20px;">
        <a href="https://www.apache.org"><img src="/assets/img/apache-foundation-logo.png" alt="Apache Incubator" /></a>
      </div>
      <!--Footer copyright year update credit: http://updateyourfooter.com/-->
      <div>
        Copyright &copy; 2015
        <script>new Date().getFullYear() > 2015 && document.write("-" + new Date().getFullYear());</script>
        <a href="https://www.apache.org">The Apache Software Foundation</a>.
        Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
        <br>
        Apache and the Apache Feather logo are trademarks of The Apache Software Foundation.
      </div>
    </div>
  </div>
</footer> <!-- GLOBAL FOOTER-->
    <script src="assets/js/bundle.min.js"></script>
  </body>
</html>

