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
+28 -32
View File
@@ -1,35 +1,31 @@
var searchData=
[
['tensorref',['TensorRef',['../classcutlass_1_1TensorRef.html',1,'cutlass']]],
['tensorref_3c_20atype_20const_2c_202_20_3e',['TensorRef< AType const, 2 >',['../classcutlass_1_1TensorRef.html',1,'cutlass']]],
['tensorref_3c_20btype_20const_2c_202_20_3e',['TensorRef< BType const, 2 >',['../classcutlass_1_1TensorRef.html',1,'cutlass']]],
['tensorref_3c_20ctype_20const_2c_202_20_3e',['TensorRef< CType const, 2 >',['../classcutlass_1_1TensorRef.html',1,'cutlass']]],
['tensorref_3c_20dtype_2c_202_20_3e',['TensorRef< DType, 2 >',['../classcutlass_1_1TensorRef.html',1,'cutlass']]],
['tensorref_3c_20storage_5f_2c_20rank_5f_2c_20mapfunc_5f_2c_201_2c_20index_5f_2c_20longindex_5f_20_3e',['TensorRef< Storage_, Rank_, MapFunc_, 1, Index_, LongIndex_ >',['../classcutlass_1_1TensorRef_3_01Storage___00_01Rank___00_01MapFunc___00_011_00_01Index___00_01LongIndex___01_4.html',1,'cutlass']]],
['tensorrefarray',['TensorRefArray',['../structcutlass_1_1TensorRefArray.html',1,'cutlass']]],
['tensorrefbatchstrided',['TensorRefBatchStrided',['../structcutlass_1_1TensorRefBatchStrided.html',1,'cutlass']]],
['tensorview',['TensorView',['../classcutlass_1_1TensorView.html',1,'cutlass']]],
['threadmultiplyadd',['ThreadMultiplyAdd',['../structcutlass_1_1gemm_1_1ThreadMultiplyAdd.html',1,'cutlass::gemm']]],
['threadmultiplyadd_3c_20threadgemmshape_5f_2c_20threadsperwarp_5f_2c_20half_2c_20half_2c_20float_20_3e',['ThreadMultiplyAdd< ThreadGemmShape_, ThreadsPerWarp_, half, half, float >',['../structcutlass_1_1gemm_1_1ThreadMultiplyAdd_3_01ThreadGemmShape___00_01ThreadsPerWarp___00_01half_00_01half_00_01float_01_4.html',1,'cutlass::gemm']]],
['threadmultiplyadd_3c_20threadgemmshape_5f_2c_20threadsperwarp_5f_2c_20half_2c_20half_2c_20half_20_3e',['ThreadMultiplyAdd< ThreadGemmShape_, ThreadsPerWarp_, half, half, half >',['../structcutlass_1_1gemm_1_1ThreadMultiplyAdd_3_01ThreadGemmShape___00_01ThreadsPerWarp___00_01half_00_01half_00_01half_01_4.html',1,'cutlass::gemm']]],
['threadmultiplyadd_3c_20threadgemmshape_5f_2c_20threadsperwarp_5f_2c_20int8_5ft_2c_20int8_5ft_2c_20int_20_3e',['ThreadMultiplyAdd< ThreadGemmShape_, ThreadsPerWarp_, int8_t, int8_t, int >',['../structcutlass_1_1gemm_1_1ThreadMultiplyAdd_3_01ThreadGemmShape___00_01ThreadsPerWarp___00_01int8__t_00_01int8__t_00_01int_01_4.html',1,'cutlass::gemm']]],
['threadoffset',['ThreadOffset',['../structcutlass_1_1gemm_1_1GemmSharedLoadTileBTraits_1_1ThreadOffset.html',1,'cutlass::gemm::GemmSharedLoadTileBTraits< Scalar_, OutputTile_, Warps_, ThreadsPerWarp_, InstructionShape_, kStages_, kScalarsPerLds_, kSkew_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1GemmGlobalTileCdTraits_1_1ThreadOffset.html',1,'cutlass::gemm::GemmGlobalTileCdTraits< Scalar_, Tile_, Threads_, kStrideH_, kAccessSize_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1HgemmCrosswiseGlobalTileTraits_1_1ThreadOffset.html',1,'cutlass::gemm::HgemmCrosswiseGlobalTileTraits< kOperand_, kLayout_, Scalar_, Tile_, Threads_, kAccessSize_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1GemmSharedStoreWithSkewTileAbTraits_1_1ThreadOffset.html',1,'cutlass::gemm::GemmSharedStoreWithSkewTileAbTraits< Scalar_, Tile_, Threads_, kScalarsPerSts_, kSkew_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1WmmaGemmGlobalIteratorCdTraits_1_1ThreadOffset.html',1,'cutlass::gemm::WmmaGemmGlobalIteratorCdTraits< Scalar_, Tile_, Threads_, kAccessSize_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1GemmGlobalTileTraits_1_1ThreadOffset.html',1,'cutlass::gemm::GemmGlobalTileTraits< kOperand_, kLayout_, Scalar_, Tile_, Threads_, kAccessSize_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1GemmSharedLoadTileDTraits_1_1ThreadOffset.html',1,'cutlass::gemm::GemmSharedLoadTileDTraits< Scalar_, OutputTile_, Warps_, ThreadsPerWarp_, kTileH_, kScalarsPerLds_, kSkew_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1GemmSharedStoreTileDTraits_1_1ThreadOffset.html',1,'cutlass::gemm::GemmSharedStoreTileDTraits< Scalar_, OutputTile_, Warps_, ThreadsPerWarp_, kScalarsPerSts_, kSkew_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1GemmSharedLoadTileATraits_1_1ThreadOffset.html',1,'cutlass::gemm::GemmSharedLoadTileATraits< Scalar_, OutputTile_, Warps_, ThreadsPerWarp_, InstructionShape_, kStages_, kScalarsPerLds_, kSkew_ >::ThreadOffset'],['../structcutlass_1_1gemm_1_1GemmSharedStoreTileAbTraits_1_1ThreadOffset.html',1,'cutlass::gemm::GemmSharedStoreTileAbTraits< Scalar_, Tile_, Threads_, kScalarsPerSts_ >::ThreadOffset'],['../structcutlass_1_1TileTraitsWarpRake_1_1ThreadOffset.html',1,'cutlass::TileTraitsWarpRake< Tile_, Threads >::ThreadOffset'],['../structcutlass_1_1gemm_1_1IgemmGlobalTileTraits_1_1ThreadOffset.html',1,'cutlass::gemm::IgemmGlobalTileTraits< kOperand_, kLayout_, Scalar_, Tile_, Threads_, kAccessSize_ >::ThreadOffset']]],
['tileallocation',['TileAllocation',['../structcutlass_1_1TileAllocation.html',1,'cutlass']]],
['tilecoord',['TileCoord',['../structcutlass_1_1TileCoord.html',1,'cutlass']]],
['tiledthreadoffset',['TiledThreadOffset',['../structcutlass_1_1TiledThreadOffset.html',1,'cutlass']]],
['tileiteratorbase',['TileIteratorBase',['../structcutlass_1_1TileIteratorBase.html',1,'cutlass']]],
['tileiteratorbase_3c_20tiletraits_5f_2c_20tiletraits_5f_3a_3ascalar_2c_20advance_5f_2c_20memoryspace_2c_20index_5f_2c_20tiletraits_5f_3a_3ascalar_2c_20fragmentelementtype_3a_3akscalar_2c_20shape_3c_200_2c_200_2c_200_2c_200_20_3e_20_3e',['TileIteratorBase< TileTraits_, TileTraits_::Scalar, Advance_, MemorySpace, Index_, TileTraits_::Scalar, FragmentElementType::kScalar, Shape< 0, 0, 0, 0 > >',['../structcutlass_1_1TileIteratorBase.html',1,'cutlass']]],
['tileiteratorbase_3c_20tiletraits_5f_2c_20tiletraits_5f_3a_3ascalar_2c_20iteratoradvance_3a_3akh_2c_20memoryspace_3a_3akglobal_2c_20index_5f_20_3e',['TileIteratorBase< TileTraits_, TileTraits_::Scalar, IteratorAdvance::kH, MemorySpace::kGlobal, Index_ >',['../structcutlass_1_1TileIteratorBase.html',1,'cutlass']]],
['tileloaditerator',['TileLoadIterator',['../structcutlass_1_1TileLoadIterator.html',1,'cutlass']]],
['tileloaditerator_3c_20tiletraits_5f_2c_20tiletraits_5f_3a_3ascalar_2c_20tiletraits_5f_3a_3amultiplicandtraits_3a_3akkstrided_20_3f_20iteratoradvance_3a_3akh_20_3aiteratoradvance_3a_3akw_2c_20memoryspace_3a_3akglobal_2c_20index_5f_20_3e',['TileLoadIterator< TileTraits_, TileTraits_::Scalar, TileTraits_::MultiplicandTraits::kKstrided ? IteratorAdvance::kH :IteratorAdvance::kW, MemorySpace::kGlobal, Index_ >',['../structcutlass_1_1TileLoadIterator.html',1,'cutlass']]],
['tileloadstream',['TileLoadStream',['../structcutlass_1_1TileLoadStream.html',1,'cutlass']]],
['tilestoreiterator',['TileStoreIterator',['../structcutlass_1_1TileStoreIterator.html',1,'cutlass']]],
['tilestorestream',['TileStoreStream',['../structcutlass_1_1TileStoreStream.html',1,'cutlass']]],
['tiletraits',['TileTraits',['../structcutlass_1_1TileTraits.html',1,'cutlass']]],
['tiletraitscontiguousmajor',['TileTraitsContiguousMajor',['../structcutlass_1_1TileTraitsContiguousMajor.html',1,'cutlass']]],
['tiletraitsstandard',['TileTraitsStandard',['../structcutlass_1_1TileTraitsStandard.html',1,'cutlass']]],
['tiletraitsstridemajor',['TileTraitsStrideMajor',['../structcutlass_1_1TileTraitsStrideMajor.html',1,'cutlass']]],
['tiletraitswarprake',['TileTraitsWarpRake',['../structcutlass_1_1TileTraitsWarpRake.html',1,'cutlass']]],
['trivialiterator',['TrivialIterator',['../structcutlass_1_1PredicateVector_1_1TrivialIterator.html',1,'cutlass::PredicateVector']]],
['trivialpredicatetileadapter',['TrivialPredicateTileAdapter',['../structcutlass_1_1TrivialPredicateTileAdapter.html',1,'cutlass']]]
['scalario',['ScalarIO',['../structcutlass_1_1ScalarIO.html',1,'cutlass']]],
['semaphore',['Semaphore',['../classcutlass_1_1Semaphore.html',1,'cutlass']]],
['sharedloaditerator',['SharedLoadIterator',['../classcutlass_1_1epilogue_1_1threadblock_1_1SharedLoadIterator.html',1,'cutlass::epilogue::threadblock']]],
['sharedstorage',['SharedStorage',['../structcutlass_1_1epilogue_1_1EpilogueWorkspace_1_1SharedStorage.html',1,'cutlass::epilogue::EpilogueWorkspace']]],
['sharedstorage',['SharedStorage',['../structcutlass_1_1reduction_1_1kernel_1_1ReduceSplitK_1_1SharedStorage.html',1,'cutlass::reduction::kernel::ReduceSplitK']]],
['sharedstorage',['SharedStorage',['../unioncutlass_1_1gemm_1_1kernel_1_1GemmSplitKParallel_1_1SharedStorage.html',1,'cutlass::gemm::kernel::GemmSplitKParallel']]],
['sharedstorage',['SharedStorage',['../structcutlass_1_1epilogue_1_1threadblock_1_1DirectEpilogueTensorOp_1_1SharedStorage.html',1,'cutlass::epilogue::threadblock::DirectEpilogueTensorOp']]],
['sharedstorage',['SharedStorage',['../unioncutlass_1_1gemm_1_1kernel_1_1GemmBatched_1_1SharedStorage.html',1,'cutlass::gemm::kernel::GemmBatched']]],
['sharedstorage',['SharedStorage',['../unioncutlass_1_1gemm_1_1kernel_1_1Gemm_1_1SharedStorage.html',1,'cutlass::gemm::kernel::Gemm']]],
['sharedstorage',['SharedStorage',['../structcutlass_1_1epilogue_1_1threadblock_1_1InterleavedEpilogue_1_1SharedStorage.html',1,'cutlass::epilogue::threadblock::InterleavedEpilogue']]],
['sharedstorage',['SharedStorage',['../classcutlass_1_1gemm_1_1threadblock_1_1MmaBase_1_1SharedStorage.html',1,'cutlass::gemm::threadblock::MmaBase']]],
['sharedstorage',['SharedStorage',['../structcutlass_1_1epilogue_1_1threadblock_1_1EpilogueBase_1_1SharedStorage.html',1,'cutlass::epilogue::threadblock::EpilogueBase']]],
['simtpolicy',['SimtPolicy',['../structcutlass_1_1epilogue_1_1warp_1_1SimtPolicy.html',1,'cutlass::epilogue::warp']]],
['simtpolicy_3c_20warpshape_5f_2c_20operator_5f_2c_20layout_3a_3arowmajor_2c_20mmasimtpolicy_5f_20_3e',['SimtPolicy< WarpShape_, Operator_, layout::RowMajor, MmaSimtPolicy_ >',['../structcutlass_1_1epilogue_1_1warp_1_1SimtPolicy_3_01WarpShape___00_01Operator___00_01layout_1_1Rcef1c60e23e997017ae176c92931151d.html',1,'cutlass::epilogue::warp']]],
['sizeof_5fbits',['sizeof_bits',['../structcutlass_1_1sizeof__bits.html',1,'cutlass']]],
['sizeof_5fbits_3c_20array_3c_20t_2c_20n_2c_20registersized_20_3e_20_3e',['sizeof_bits< Array< T, N, RegisterSized > >',['../structcutlass_1_1sizeof__bits_3_01Array_3_01T_00_01N_00_01RegisterSized_01_4_01_4.html',1,'cutlass']]],
['sizeof_5fbits_3c_20bin1_5ft_20_3e',['sizeof_bits< bin1_t >',['../structcutlass_1_1sizeof__bits_3_01bin1__t_01_4.html',1,'cutlass']]],
['sizeof_5fbits_3c_20int4b_5ft_20_3e',['sizeof_bits< int4b_t >',['../structcutlass_1_1sizeof__bits_3_01int4b__t_01_4.html',1,'cutlass']]],
['sizeof_5fbits_3c_20uint1b_5ft_20_3e',['sizeof_bits< uint1b_t >',['../structcutlass_1_1sizeof__bits_3_01uint1b__t_01_4.html',1,'cutlass']]],
['sizeof_5fbits_3c_20uint4b_5ft_20_3e',['sizeof_bits< uint4b_t >',['../structcutlass_1_1sizeof__bits_3_01uint4b__t_01_4.html',1,'cutlass']]],
['sm50',['Sm50',['../structcutlass_1_1arch_1_1Sm50.html',1,'cutlass::arch']]],
['sm60',['Sm60',['../structcutlass_1_1arch_1_1Sm60.html',1,'cutlass::arch']]],
['sm61',['Sm61',['../structcutlass_1_1arch_1_1Sm61.html',1,'cutlass::arch']]],
['sm70',['Sm70',['../structcutlass_1_1arch_1_1Sm70.html',1,'cutlass::arch']]],
['sm72',['Sm72',['../structcutlass_1_1arch_1_1Sm72.html',1,'cutlass::arch']]],
['sm75',['Sm75',['../structcutlass_1_1arch_1_1Sm75.html',1,'cutlass::arch']]],
['sqrt_5fest',['sqrt_est',['../structcutlass_1_1sqrt__est.html',1,'cutlass']]],
['subbytereference',['SubbyteReference',['../classcutlass_1_1SubbyteReference.html',1,'cutlass']]]
];