CUTLASS 2.0 (#62)

CUTLASS 2.0

Substantially refactored for

- Better performance, particularly for native Turing Tensor Cores
- Robust and durable templates spanning the design space
- Encapsulated functionality embodying modern C++11 programming techniques
- Optimized containers and data types for efficient, generic, portable device code

Updates to:
- Quick start guide
- Documentation
- Utilities
- CUTLASS Profiler

Native Turing Tensor Cores
- Efficient GEMM kernels targeting Turing Tensor Cores
- Mixed-precision floating point, 8-bit integer, 4-bit integer, and binarized operands

Coverage of existing CUTLASS functionality:
- GEMM kernels targeting CUDA and Tensor Cores in NVIDIA GPUs
- Volta Tensor Cores through native mma.sync and through WMMA API
- Optimizations such as parallel reductions, threadblock rasterization, and intra-threadblock reductions
- Batched GEMM operations
- Complex-valued GEMMs

Note: this commit and all that follow require a host compiler supporting C++11 or greater.
This commit is contained in:
Andrew Kerr
2019-11-19 16:55:34 -08:00
committed by GitHub
parent b5cab177a9
commit fb335f6a5f
5434 changed files with 599799 additions and 250176 deletions
@@ -3,21 +3,23 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.14"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Cutlass: cutlass::reduction::BatchedReductionTraits&lt; ScalarA_, ScalarC_, ScalarD_, ScalarAlphaBeta_, ScalarAccum_, ReductionSize_, OutputTile_, SubTile_, ThreadShape_, Index_, BlockSwizzle_, maxInReg_, maxOutReg_, Functor_ &gt; Struct Template Reference</title>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>CUTLASS: cutlass::reduction::BatchedReductionTraits&lt; ScalarA_, ScalarC_, ScalarD_, ScalarAlphaBeta_, ScalarAccum_, ReductionSize_, OutputTile_, SubTile_, ThreadShape_, Index_, BlockSwizzle_, maxInReg_, maxOutReg_, Functor_ &gt; Struct Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" async src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -26,8 +28,9 @@
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="cutlass-logo-small.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Cutlass
<div id="projectname">CUTLASS
</div>
<div id="projectbrief">CUDA Templates for Linear Algebra Subroutines and Solvers</div>
</td>
@@ -36,22 +39,43 @@
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -140,9 +164,7 @@ Static Public Attributes</h2></td></tr>
<tr class="separator:ac28e31791c5888bbe7b04abe6376a422"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Member Typedef Documentation</h2>
<a id="ae0c016bcbe687063774d8abd554939b6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0c016bcbe687063774d8abd554939b6">&#9670;&nbsp;</a></span>BlockSwizzle</h2>
<a class="anchor" id="ae0c016bcbe687063774d8abd554939b6"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -156,9 +178,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="af62fd99fae22a4e4d93cfa0560f1dcc5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af62fd99fae22a4e4d93cfa0560f1dcc5">&#9670;&nbsp;</a></span>Functor</h2>
<a class="anchor" id="af62fd99fae22a4e4d93cfa0560f1dcc5"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -172,9 +192,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="ab0c9e548f3ee62746e727127e387a8f4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab0c9e548f3ee62746e727127e387a8f4">&#9670;&nbsp;</a></span>Index</h2>
<a class="anchor" id="ab0c9e548f3ee62746e727127e387a8f4"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -188,9 +206,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="a085c72d54426f5eb60f5bffa9c383229"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a085c72d54426f5eb60f5bffa9c383229">&#9670;&nbsp;</a></span>KernelClass</h2>
<a class="anchor" id="a085c72d54426f5eb60f5bffa9c383229"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -204,9 +220,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="a3b0e98519b7e551ef6adac69e7406d8f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3b0e98519b7e551ef6adac69e7406d8f">&#9670;&nbsp;</a></span>OutputTile</h2>
<a class="anchor" id="a3b0e98519b7e551ef6adac69e7406d8f"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -220,9 +234,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="a1c6cd0a76b2b2fc9cd021b016f30f459"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c6cd0a76b2b2fc9cd021b016f30f459">&#9670;&nbsp;</a></span>ScalarA</h2>
<a class="anchor" id="a1c6cd0a76b2b2fc9cd021b016f30f459"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -236,9 +248,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="ae7e468b1d372b4b807e2e1089af885ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7e468b1d372b4b807e2e1089af885ec">&#9670;&nbsp;</a></span>ScalarAccum</h2>
<a class="anchor" id="ae7e468b1d372b4b807e2e1089af885ec"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -252,9 +262,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="ab89c35cfce0017a47341a1e3b2894e0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab89c35cfce0017a47341a1e3b2894e0f">&#9670;&nbsp;</a></span>ScalarAlphaBeta</h2>
<a class="anchor" id="ab89c35cfce0017a47341a1e3b2894e0f"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -268,9 +276,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="adb39cf54a839bdb2e38fbc8a0bf304a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adb39cf54a839bdb2e38fbc8a0bf304a8">&#9670;&nbsp;</a></span>ScalarC</h2>
<a class="anchor" id="adb39cf54a839bdb2e38fbc8a0bf304a8"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -284,9 +290,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="abb54e3addfee4097b37deb5cb30fb582"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb54e3addfee4097b37deb5cb30fb582">&#9670;&nbsp;</a></span>ScalarD</h2>
<a class="anchor" id="abb54e3addfee4097b37deb5cb30fb582"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -300,9 +304,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="ad9d4dcb20a69869ebda639747a16e647"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad9d4dcb20a69869ebda639747a16e647">&#9670;&nbsp;</a></span>SubTile</h2>
<a class="anchor" id="ad9d4dcb20a69869ebda639747a16e647"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -316,9 +318,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="acfeed4cb4e5eec9d8e1ae2b787cc88e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acfeed4cb4e5eec9d8e1ae2b787cc88e2">&#9670;&nbsp;</a></span>This_</h2>
<a class="anchor" id="acfeed4cb4e5eec9d8e1ae2b787cc88e2"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -332,9 +332,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="a29e8adec50bc7e5c0a91f975dff4a7f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a29e8adec50bc7e5c0a91f975dff4a7f3">&#9670;&nbsp;</a></span>ThreadShape</h2>
<a class="anchor" id="a29e8adec50bc7e5c0a91f975dff4a7f3"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -349,9 +347,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="ab35edeae5cd8767bd376fad5f6680e25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab35edeae5cd8767bd376fad5f6680e25">&#9670;&nbsp;</a></span>kThreads</h2>
<a class="anchor" id="ab35edeae5cd8767bd376fad5f6680e25"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -374,9 +370,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="af11a3284195a24e580d2f379f179f05a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af11a3284195a24e580d2f379f179f05a">&#9670;&nbsp;</a></span>maxInReg</h2>
<a class="anchor" id="af11a3284195a24e580d2f379f179f05a"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -398,9 +392,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="ac28e31791c5888bbe7b04abe6376a422"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac28e31791c5888bbe7b04abe6376a422">&#9670;&nbsp;</a></span>maxOutReg</h2>
<a class="anchor" id="ac28e31791c5888bbe7b04abe6376a422"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -422,9 +414,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="a00c71c9a18aaad84f4a48023dbbb454e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a00c71c9a18aaad84f4a48023dbbb454e">&#9670;&nbsp;</a></span>ReductionSize</h2>
<a class="anchor" id="a00c71c9a18aaad84f4a48023dbbb454e"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -446,9 +436,7 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div>
</div>
<a id="ab4f5f457dbfa6bd250a4c34e1d573a85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab4f5f457dbfa6bd250a4c34e1d573a85">&#9670;&nbsp;</a></span>ThreadShapeMultiple2</h2>
<a class="anchor" id="ab4f5f457dbfa6bd250a4c34e1d573a85"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
@@ -476,9 +464,9 @@ template&lt;typename ScalarA_ , typename ScalarC_ , typename ScalarD_ , typename
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Oct 26 2018 14:53:40 for Cutlass by &#160;<a href="http://www.doxygen.org/index.html">
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</a> 1.8.11
</small></address>
</body>
</html>