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
+77 -198
View File
@@ -1,13 +1,9 @@
/* The standard CSS for doxygen 1.8.14 */
/* The standard CSS for doxygen 1.8.11 */
body, table, div, p, dl {
font: 400 14px/22px Roboto,sans-serif;
}
p.reference, p.definition {
font: 400 14px/22px Roboto,sans-serif;
}
/* @group Heading Levels */
h1.groupheader {
@@ -22,8 +18,8 @@ h1.groupheader {
}
h2.groupheader {
border-bottom: 1px solid #B2CB87;
color: #617B35;
border-bottom: 1px solid #A3BA98;
color: #526947;
font-size: 150%;
font-weight: normal;
margin-top: 1.75em;
@@ -97,8 +93,8 @@ h3.version {
}
div.qindex, div.navtab{
background-color: #F2F6EB;
border: 1px solid #C4D7A3;
background-color: #F0F3EE;
border: 1px solid #B9CAB0;
text-align: center;
}
@@ -114,13 +110,13 @@ div.navtab {
/* @group Link Styling */
a {
color: #6F8C3D;
color: #5E7851;
font-weight: normal;
text-decoration: none;
}
.contents a:visited {
color: #80A246;
color: #6D8B5D;
}
a:hover {
@@ -133,9 +129,9 @@ a.qindex {
a.qindexHL {
font-weight: bold;
background-color: #BFD49C;
background-color: #B3C6AA;
color: #ffffff;
border: 1px double #B1CA86;
border: 1px double #A2B997;
}
.contents a.qindexHL:visited {
@@ -177,10 +173,10 @@ pre.fragment {
}
div.fragment {
padding: 0px;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
background-color: #FCFDFB;
border: 1px solid #D9E5C4;
background-color: #FCFDFC;
border: 1px solid #D2DDCD;
}
div.line {
@@ -236,15 +232,6 @@ span.lineno a:hover {
background-color: #C8C8C8;
}
.lineno {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
div.ah, span.ah {
background-color: black;
font-weight: bold;
@@ -296,9 +283,9 @@ div.contents {
}
td.indexkey {
background-color: #F2F6EB;
background-color: #F0F3EE;
font-weight: bold;
border: 1px solid #D9E5C4;
border: 1px solid #D2DDCD;
margin: 2px 0px 2px 0;
padding: 2px 10px;
white-space: nowrap;
@@ -306,14 +293,14 @@ td.indexkey {
}
td.indexvalue {
background-color: #F2F6EB;
border: 1px solid #D9E5C4;
background-color: #F0F3EE;
border: 1px solid #D2DDCD;
padding: 2px 10px;
margin: 2px 0px;
}
tr.memlist {
background-color: #F4F7EE;
background-color: #F2F5F0;
}
p.formulaDsp {
@@ -396,8 +383,8 @@ span.vhdllogic {
}
blockquote {
background-color: #F9FBF7;
border-left: 2px solid #BFD49C;
background-color: #F9FAF8;
border-left: 2px solid #B3C6AA;
margin: 0 24px 0 4px;
padding: 0 12px 0 16px;
}
@@ -430,18 +417,18 @@ td.tiny {
.dirtab {
padding: 4px;
border-collapse: collapse;
border: 1px solid #C4D7A3;
border: 1px solid #B9CAB0;
}
th.dirtab {
background: #F2F6EB;
background: #F0F3EE;
font-weight: bold;
}
hr {
height: 0px;
border: none;
border-top: 1px solid #87AA4A;
border-top: 1px solid #729262;
}
hr.footer {
@@ -476,7 +463,7 @@ table.memberdecls {
.mdescLeft, .mdescRight,
.memItemLeft, .memItemRight,
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
background-color: #FBFCF9;
background-color: #FAFBFA;
border: none;
margin: 4px;
padding: 1px 0 0 8px;
@@ -503,7 +490,7 @@ table.memberdecls {
}
.memTemplParams {
color: #80A246;
color: #6D8B5D;
white-space: nowrap;
font-size: 80%;
}
@@ -514,39 +501,16 @@ table.memberdecls {
/* Styles for detailed member documentation */
.memtitle {
padding: 8px;
border-top: 1px solid #C7D9A8;
border-left: 1px solid #C7D9A8;
border-right: 1px solid #C7D9A8;
border-top-right-radius: 4px;
border-top-left-radius: 4px;
margin-bottom: -1px;
background-image: url('nav_f.png');
background-repeat: repeat-x;
background-color: #ECF2E2;
line-height: 1.25;
font-weight: 300;
float:left;
}
.permalink
{
font-size: 65%;
display: inline-block;
vertical-align: middle;
}
.memtemplate {
font-size: 80%;
color: #80A246;
color: #6D8B5D;
font-weight: normal;
margin-left: 9px;
}
.memnav {
background-color: #F2F6EB;
border: 1px solid #C4D7A3;
background-color: #F0F3EE;
border: 1px solid #B9CAB0;
text-align: center;
margin: 2px;
margin-right: 15px;
@@ -575,7 +539,7 @@ table.memberdecls {
}
.memname {
font-weight: 400;
font-weight: bold;
margin-left: 6px;
}
@@ -584,37 +548,37 @@ table.memberdecls {
}
.memproto, dl.reflist dt {
border-top: 1px solid #C7D9A8;
border-left: 1px solid #C7D9A8;
border-right: 1px solid #C7D9A8;
border-top: 1px solid #BCCDB4;
border-left: 1px solid #BCCDB4;
border-right: 1px solid #BCCDB4;
padding: 6px 0px 6px 0px;
color: #435525;
color: #394931;
font-weight: bold;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
background-color: #EAF1DF;
background-image:url('nav_f.png');
background-repeat:repeat-x;
background-color: #E9EEE6;
/* opera specific markup */
box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
border-top-right-radius: 4px;
border-top-left-radius: 4px;
/* firefox specific markup */
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-moz-border-radius-topright: 4px;
-moz-border-radius-topleft: 4px;
/* webkit specific markup */
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-webkit-border-top-right-radius: 4px;
-webkit-border-top-left-radius: 4px;
}
.overload {
font-family: "courier new",courier,monospace;
font-size: 65%;
}
.memdoc, dl.reflist dd {
border-bottom: 1px solid #C7D9A8;
border-left: 1px solid #C7D9A8;
border-right: 1px solid #C7D9A8;
border-bottom: 1px solid #BCCDB4;
border-left: 1px solid #BCCDB4;
border-right: 1px solid #BCCDB4;
padding: 6px 10px 2px 10px;
background-color: #FCFDFB;
background-color: #FCFDFC;
border-top-width: 0;
background-image:url('nav_g.png');
background-repeat:repeat-x;
@@ -701,11 +665,11 @@ span.mlabels {
}
span.mlabel {
background-color: #A4C172;
border-top:1px solid #90B453;
border-left:1px solid #90B453;
border-right:1px solid #D9E5C4;
border-bottom:1px solid #D9E5C4;
background-color: #93AD86;
border-top:1px solid #7B9C6B;
border-left:1px solid #7B9C6B;
border-right:1px solid #D2DDCD;
border-bottom:1px solid #D2DDCD;
text-shadow: none;
color: white;
margin-right: 4px;
@@ -724,8 +688,8 @@ span.mlabel {
div.directory {
margin: 10px 0px;
border-top: 1px solid #BFD49C;
border-bottom: 1px solid #BFD49C;
border-top: 1px solid #B3C6AA;
border-bottom: 1px solid #B3C6AA;
width: 100%;
}
@@ -763,7 +727,7 @@ div.directory {
.directory tr.even {
padding-left: 6px;
background-color: #F9FBF7;
background-color: #F9FAF8;
}
.directory img {
@@ -781,11 +745,11 @@ div.directory {
cursor: pointer;
padding-left: 2px;
padding-right: 2px;
color: #6F8C3D;
color: #5E7851;
}
.arrow {
color: #BFD49C;
color: #B3C6AA;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
@@ -805,7 +769,7 @@ div.directory {
height: 14px;
width: 16px;
display: inline-block;
background-color: #A4C172;
background-color: #93AD86;
color: white;
text-align: center;
border-radius: 4px;
@@ -870,7 +834,7 @@ div.dynheader {
address {
font-style: normal;
color: #4D612A;
color: #415438;
}
table.doxtable caption {
@@ -884,12 +848,12 @@ table.doxtable {
}
table.doxtable td, table.doxtable th {
border: 1px solid #52682D;
border: 1px solid #45593C;
padding: 3px 7px 2px;
}
table.doxtable th {
background-color: #657F37;
background-color: #556D49;
color: #FFFFFF;
font-size: 110%;
padding-bottom: 4px;
@@ -899,7 +863,7 @@ table.doxtable th {
table.fieldtable {
/*width: 100%;*/
margin-bottom: 10px;
border: 1px solid #C7D9A8;
border: 1px solid #BCCDB4;
border-spacing: 0px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
@@ -915,8 +879,8 @@ table.fieldtable {
.fieldtable td.fieldtype, .fieldtable td.fieldname {
white-space: nowrap;
border-right: 1px solid #C7D9A8;
border-bottom: 1px solid #C7D9A8;
border-right: 1px solid #BCCDB4;
border-bottom: 1px solid #BCCDB4;
vertical-align: top;
}
@@ -925,7 +889,7 @@ table.fieldtable {
}
.fieldtable td.fielddoc {
border-bottom: 1px solid #C7D9A8;
border-bottom: 1px solid #BCCDB4;
/*width: 100%;*/
}
@@ -944,20 +908,19 @@ table.fieldtable {
.fieldtable th {
background-image:url('nav_f.png');
background-repeat:repeat-x;
background-color: #ECF2E2;
background-color: #E9EEE6;
font-size: 90%;
color: #435525;
color: #394931;
padding-bottom: 4px;
padding-top: 5px;
text-align:left;
font-weight: 400;
-moz-border-radius-topleft: 4px;
-moz-border-radius-topright: 4px;
-webkit-border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom: 1px solid #C7D9A8;
border-bottom: 1px solid #BCCDB4;
}
@@ -979,8 +942,8 @@ table.fieldtable {
background-position: 0 -5px;
height:30px;
line-height:30px;
color:#B3CC8A;
border:solid 1px #D8E4C2;
color:#A5BB9A;
border:solid 1px #D0DCCB;
overflow:hidden;
margin:0px;
padding:0px;
@@ -995,7 +958,7 @@ table.fieldtable {
background-image:url('bc_s.png');
background-repeat:no-repeat;
background-position:right;
color:#627C36;
color:#536B48;
}
.navpath li.navelem a
@@ -1004,7 +967,7 @@ table.fieldtable {
display:block;
text-decoration: none;
outline: none;
color: #4A5D28;
color: #3E5035;
font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
text-decoration: none;
@@ -1012,7 +975,7 @@ table.fieldtable {
.navpath li.navelem a:hover
{
color:#9EBD68;
color:#8BA87D;
}
.navpath li.footer
@@ -1024,7 +987,7 @@ table.fieldtable {
background-image:none;
background-repeat:no-repeat;
background-position:right;
color:#627C36;
color:#536B48;
font-size: 8pt;
}
@@ -1071,9 +1034,9 @@ div.header
{
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: #FBFCF9;
background-color: #FAFBFA;
margin: 0px;
border-bottom: 1px solid #D9E5C4;
border-bottom: 1px solid #D2DDCD;
}
div.headertitle
@@ -1197,7 +1160,7 @@ dl.section dd {
padding: 0px;
margin: 0px;
width: 100%;
border-bottom: 1px solid #90B453;
border-bottom: 1px solid #7B9C6B;
}
.image
@@ -1215,11 +1178,6 @@ dl.section dd {
text-align: center;
}
.plantumlgraph
{
text-align: center;
}
.diagraph
{
text-align: center;
@@ -1232,7 +1190,7 @@ dl.section dd {
div.zoom
{
border: 1px solid #B7CE90;
border: 1px solid #AABFA0;
}
dl.citelist {
@@ -1240,7 +1198,7 @@ dl.citelist {
}
dl.citelist dt {
color:#5D7533;
color:#4E6443;
float:left;
font-weight:bold;
margin-right:10px;
@@ -1254,8 +1212,8 @@ dl.citelist dd {
div.toc {
padding: 14px 25px;
background-color: #F8FAF4;
border: 1px solid #E6EED8;
background-color: #F7F9F6;
border: 1px solid #E1E8DE;
border-radius: 7px 7px 7px 7px;
float: right;
height: auto;
@@ -1273,7 +1231,7 @@ div.toc li {
div.toc h3 {
font: bold 12px/1.2 Arial,FreeSans,sans-serif;
color: #80A246;
color: #6D8B5D;
border-bottom: 0 none;
margin: 0;
}
@@ -1515,82 +1473,3 @@ tr.heading h2 {
}
}
/* @group Markdown */
/*
table.markdownTable {
border-collapse:collapse;
margin-top: 4px;
margin-bottom: 4px;
}
table.markdownTable td, table.markdownTable th {
border: 1px solid #52682D;
padding: 3px 7px 2px;
}
table.markdownTableHead tr {
}
table.markdownTableBodyLeft td, table.markdownTable th {
border: 1px solid #52682D;
padding: 3px 7px 2px;
}
th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
background-color: #657F37;
color: #FFFFFF;
font-size: 110%;
padding-bottom: 4px;
padding-top: 5px;
}
th.markdownTableHeadLeft {
text-align: left
}
th.markdownTableHeadRight {
text-align: right
}
th.markdownTableHeadCenter {
text-align: center
}
*/
table.markdownTable {
border-collapse:collapse;
margin-top: 4px;
margin-bottom: 4px;
}
table.markdownTable td, table.markdownTable th {
border: 1px solid #52682D;
padding: 3px 7px 2px;
}
table.markdownTable tr {
}
th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
background-color: #374F7F;
color: #FFFFFF;
font-size: 110%;
padding-bottom: 4px;
padding-top: 5px;
}
th.markdownTableHeadLeft, td.markdownTableBodyLeft {
text-align: left
}
th.markdownTableHeadRight, td.markdownTableBodyRight {
text-align: right
}
th.markdownTableHeadCenter, td.markdownTableBodyCenter {
text-align: center
}
/* @end */