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
+7 -15
View File
@@ -1,20 +1,12 @@
var searchData=
[
['launch',['Launch',['../structcutlass_1_1gemm_1_1Launch.html',1,'cutlass::gemm']]],
['launch_3c_20gemm_2c_20false_20_3e',['Launch< Gemm, false >',['../structcutlass_1_1gemm_1_1Launch_3_01Gemm_00_01false_01_4.html',1,'cutlass::gemm']]],
['less',['less',['../structcutlass_1_1platform_1_1less.html',1,'cutlass::platform']]],
['linearscaling',['LinearScaling',['../structcutlass_1_1gemm_1_1LinearScaling.html',1,'cutlass::gemm']]],
['linearscalingdeviceptr',['LinearScalingDevicePtr',['../structcutlass_1_1gemm_1_1LinearScalingDevicePtr.html',1,'cutlass::gemm']]],
['load',['Load',['../structcutlass_1_1Load.html',1,'cutlass']]],
['load_3c_20double_2c_202_2c_20memory_5f_2c_20fragmentelementtype_3a_3akscalar_2c_20double_2c_20kstride_2c_2016_20_3e',['Load< double, 2, Memory_, FragmentElementType::kScalar, double, kStride, 16 >',['../structcutlass_1_1Load_3_01double_00_012_00_01Memory___00_01FragmentElementType_1_1kScalar_00_01double_00_01kStride_00_0116_01_4.html',1,'cutlass']]],
['load_3c_20scalar_5f_2c_20kaccesssize_2c_20memory_5f_2c_20fragmentelementtype_3a_3akscalar_2c_20scalar_5f_2c_201_2c_202_20_3e',['Load< Scalar_, kAccessSize, Memory_, FragmentElementType::kScalar, Scalar_, 1, 2 >',['../structcutlass_1_1Load_3_01Scalar___00_01kAccessSize_00_01Memory___00_01FragmentElementType_1_1kSf1f63874ddc1302ed9e60e0478e1a8ad.html',1,'cutlass']]],
['load_3c_20scalar_5f_2c_20kaccesssize_2c_20memory_5f_2c_20fragmentelementtype_3a_3akscalar_2c_20scalar_5f_2c_20kstride_2c_2016_20_3e',['Load< Scalar_, kAccessSize, Memory_, FragmentElementType::kScalar, Scalar_, kStride, 16 >',['../structcutlass_1_1Load_3_01Scalar___00_01kAccessSize_00_01Memory___00_01FragmentElementType_1_1kS3de71ba9ef724a37fb1cf315da8bf9b5.html',1,'cutlass']]],
['load_3c_20scalar_5f_2c_20kaccesssize_2c_20memory_5f_2c_20fragmentelementtype_3a_3akscalar_2c_20scalar_5f_2c_20kstride_2c_204_20_3e',['Load< Scalar_, kAccessSize, Memory_, FragmentElementType::kScalar, Scalar_, kStride, 4 >',['../structcutlass_1_1Load_3_01Scalar___00_01kAccessSize_00_01Memory___00_01FragmentElementType_1_1kS1b28106546bd22002cd52e60197548ce.html',1,'cutlass']]],
['load_3c_20scalar_5f_2c_20kaccesssize_2c_20memory_5f_2c_20fragmentelementtype_3a_3akscalar_2c_20scalar_5f_2c_20kstride_2c_208_20_3e',['Load< Scalar_, kAccessSize, Memory_, FragmentElementType::kScalar, Scalar_, kStride, 8 >',['../structcutlass_1_1Load_3_01Scalar___00_01kAccessSize_00_01Memory___00_01FragmentElementType_1_1kS91ff65dd36f118bca4542df6128d6d99.html',1,'cutlass']]],
['load_3c_20scalar_5f_2c_20kaccesssize_2c_20memory_5f_2c_20fragmentelementtype_3a_3akwmmamatrix_2c_20fragmentelement_5f_2c_20kstride_2c_20size_20_3e',['Load< Scalar_, kAccessSize, Memory_, FragmentElementType::kWmmaMatrix, FragmentElement_, kStride, size >',['../structcutlass_1_1Load_3_01Scalar___00_01kAccessSize_00_01Memory___00_01FragmentElementType_1_1kWe58d0048e24352beeec002fd483c53b2.html',1,'cutlass']]],
['load_3c_20vector_3c_20bin1_5ft_2c_2032_20_3e_2c_20kaccesssize_2c_20memory_5f_2c_20fragmentelementtype_3a_3akwmmamatrix_2c_20fragmentelement_5f_2c_20kstride_2c_20size_20_3e',['Load< Vector< bin1_t, 32 >, kAccessSize, Memory_, FragmentElementType::kWmmaMatrix, FragmentElement_, kStride, size >',['../structcutlass_1_1Load_3_01Vector_3_01bin1__t_00_0132_01_4_00_01kAccessSize_00_01Memory___00_01Fra240d9c28383cd3945277ec3a927c538.html',1,'cutlass']]],
['load_3c_20vector_3c_20int4_5ft_2c_208_20_3e_2c_20kaccesssize_2c_20memory_5f_2c_20fragmentelementtype_3a_3akwmmamatrix_2c_20fragmentelement_5f_2c_20kstride_2c_20size_20_3e',['Load< Vector< int4_t, 8 >, kAccessSize, Memory_, FragmentElementType::kWmmaMatrix, FragmentElement_, kStride, size >',['../structcutlass_1_1Load_3_01Vector_3_01int4__t_00_018_01_4_00_01kAccessSize_00_01Memory___00_01Fra934529165fa8fecdd392b5302d25ef26.html',1,'cutlass']]],
['load_3c_20vector_3c_20uint4_5ft_2c_208_20_3e_2c_20kaccesssize_2c_20memory_5f_2c_20fragmentelementtype_3a_3akwmmamatrix_2c_20fragmentelement_5f_2c_20kstride_2c_20size_20_3e',['Load< Vector< uint4_t, 8 >, kAccessSize, Memory_, FragmentElementType::kWmmaMatrix, FragmentElement_, kStride, size >',['../structcutlass_1_1Load_3_01Vector_3_01uint4__t_00_018_01_4_00_01kAccessSize_00_01Memory___00_01Fr23088b868c6eeec9377c46892553686f.html',1,'cutlass']]],
['layouttranspose',['LayoutTranspose',['../structcutlass_1_1layout_1_1LayoutTranspose.html',1,'cutlass::layout']]],
['layouttranspose_3c_20layout_3a_3acolumnmajor_20_3e',['LayoutTranspose< layout::ColumnMajor >',['../structcutlass_1_1layout_1_1LayoutTranspose_3_01layout_1_1ColumnMajor_01_4.html',1,'cutlass::layout']]],
['layouttranspose_3c_20layout_3a_3arowmajor_20_3e',['LayoutTranspose< layout::RowMajor >',['../structcutlass_1_1layout_1_1LayoutTranspose_3_01layout_1_1RowMajor_01_4.html',1,'cutlass::layout']]],
['linearcombination',['LinearCombination',['../classcutlass_1_1epilogue_1_1thread_1_1LinearCombination.html',1,'cutlass::epilogue::thread']]],
['linearcombinationclamp',['LinearCombinationClamp',['../classcutlass_1_1epilogue_1_1thread_1_1LinearCombinationClamp.html',1,'cutlass::epilogue::thread']]],
['linearcombinationrelu',['LinearCombinationRelu',['../classcutlass_1_1epilogue_1_1thread_1_1LinearCombinationRelu.html',1,'cutlass::epilogue::thread']]],
['linearcombinationrelu_3c_20elementoutput_5f_2c_20count_2c_20int_2c_20float_2c_20round_20_3e',['LinearCombinationRelu< ElementOutput_, Count, int, float, Round >',['../classcutlass_1_1epilogue_1_1thread_1_1LinearCombinationRelu_3_01ElementOutput___00_01Count_00_01int_00_01float_00_01Round_01_4.html',1,'cutlass::epilogue::thread']]],
['log2_5fdown',['log2_down',['../structcutlass_1_1log2__down.html',1,'cutlass']]],
['log2_5fdown_3c_20n_2c_201_2c_20count_20_3e',['log2_down< N, 1, Count >',['../structcutlass_1_1log2__down_3_01N_00_011_00_01Count_01_4.html',1,'cutlass']]],
['log2_5fup',['log2_up',['../structcutlass_1_1log2__up.html',1,'cutlass']]],