CUTLASS 2.3 initial commit (#134)
CUTLASS 2.3 adds GEMMs targeting Sparse Tensor Cores on the NVIDIA Ampere Architecture, fast SGEMM, and small matrix classes, bug fixes, and performance enhancements.
This commit is contained in:
@@ -37,6 +37,13 @@ Hyperlinks to relevant unit tests demonstrate how specific template instances ma
|
||||
| **TensorOp** | 80 | 11.0+ | `f64 * f64 + f64 => f64` | {N,T} x {N,T} => {N,T} | [example](/test/unit/gemm/device/gemm_f64n_f64t_f64t_tensor_op_f64_sm80.cu) |
|
||||
| **TensorOp** | 80 | 11.0+ | `cf32 * cf32 + cf32 => cf32` | {N,T} x {N,T} => {N,T} | [example](/test/unit/gemm/device/gemm_cf32n_cf32t_cf32t_tensor_op_tf32_f32_sm80.cu) |
|
||||
| **TensorOp** | 80 | 11.0+ | `cf64 * cf64 + cf64 => cf64` | {N,T} x {N,T} => {N,T} | [example](/test/unit/gemm/device/gemm_cf64n_cf64t_cf64t_tensor_op_f64_sm80.cu), [Gaussian 3m](/test/unit/gemm/device/gemm_cf64n_cf64t_cf64t_tensor_op_f64_gaussian_sm80.cu) |
|
||||
| **SpTensorOp** | 80 | 11.1+ | `f16 * f16 + f32 => {f16, f32}` | {N,T} x {N,T} => {N,T} | [example](/test/unit/gemm/device/gemm_f16n_f16n_f32t_tensor_op_f32_sparse_sm80.cu) |
|
||||
| **SpTensorOp** | 80 | 11.1+ | `bf16 * bf16 + f32 => {bf16, f32}` | {N,T} x {N,T} => {N,T} | [example](/test/unit/gemm/device/gemm_f16n_f16n_f32t_tensor_op_f32_sparse_sm80.cu) |
|
||||
| **SpTensorOp** | 80 | 11.1+ | `tf32 * tf32 + f32 => f32` | {N,T} x {N,T} => {N,T} | [example](/test/unit/gemm/device/gemm_f32n_f32n_f32t_tensor_op_f32_sparse_sm80.cu) |
|
||||
| **SpTensorOp** | 80 | 11.1+ | `s8 * s8 + s32 => {s8, s32}` | {N,T} x {N,T} => {N,T} | [example](/test/unit/gemm/device/gemm_s8t_s8n_s32t_tensor_op_s32_sparse_sm80.cu) |
|
||||
| **SpTensorOp** | 80 | 11.1+ | `s4 * s4 + s32 => {s4, s32}` | {N,T} x {N,T} => {N,T} | [example](/test/unit/gemm/device/gemm_s4t_s4n_s32t_tensor_op_s32_sparse_sm80.cu) |
|
||||
|
||||
|
||||
|
||||
## Warp-level Matrix Multiply with Tensor Cores
|
||||
|
||||
@@ -53,6 +60,11 @@ The following table summarizes supported warp level shapes for each TensorOp ins
|
||||
| **TensorOp** | 16-by-8-by-64 | 32x32x64, 32x64x64, 64x32x64, 64x64x64 |
|
||||
| **TensorOp** | 8-by-8-by-128 | 32x32x128, 32x64x128, 64x32x128, 64x64x128 |
|
||||
| **TensorOp** | 16-by-8-by-256 | 32x32x256, 32x64x256, 64x32x256, 64x64x256 |
|
||||
| **SpTensorOp** | 16-by-8-by-16 | 64x64x16, 64x32x16, 32x64x16, 32x32x16 |
|
||||
| **SpTensorOp** | 16-by-8-by-32 | 64x64x32, 64x32x32, 32x64x32, 32x32x32 |
|
||||
| **SpTensorOp** | 16-by-8-by-64 | 64x64x64, 64x32x64, 32x64x64, 32x32x64 |
|
||||
| **SpTensorOp** | 16-by-8-by-128 | 64x64x128, 64x32x128, 32x64x128, 32x32x128 |
|
||||
|
||||
|
||||
TensorOp instructions depend on a permuted shared memory layout that can be efficiently
|
||||
loaded from. The following tables summarize the destination shared memory layout that
|
||||
@@ -154,6 +166,40 @@ from global memory with layout specified in the column "GMEM Layout."
|
||||
| **C** | `int32_t` | `RowMajor` | `RowMajor` |
|
||||
|
||||
|
||||
**SpTensorOp 16-by-8-by-16.**
|
||||
|
||||
|**Operand**|**Element** | **GMEM Layout** | **SMEM Layout** |
|
||||
|-----------|--------------|-----------------|------------------------------------|
|
||||
| **A** | `tfloat32_t` | `RowMajor` | `RowMajorTensorOpCrosswise<32, 32>` |
|
||||
| **B** | `tfloat32_t` | `ColumnMajor` | `ColumnMajorTensorOpCrosswise<32, 32>`|
|
||||
| **C** | `float` | `RowMajor` | `RowMajor` |
|
||||
|
||||
**SpTensorOp 16-by-8-by-32.**
|
||||
|
||||
|**Operand**|**Element** | **GMEM Layout** | **SMEM Layout** |
|
||||
|-----------|--------------|-----------------|---------------------------------------|
|
||||
| **A** | `half_t` | `RowMajor` | `RowMajorTensorOpCrosswise<16, 64>` |
|
||||
| **B** | `half_t` | `ColumnMajor` | `ColumnMajorTensorOpCrosswise<16, 64>`|
|
||||
| **C** | `float` | `RowMajor` | `RowMajor` |
|
||||
|
||||
**SpTensorOp 16-by-8-by-64.**
|
||||
|
||||
|**Operand**|**Element** | **GMEM Layout** | **SMEM Layout** |
|
||||
|-----------|--------------|-----------------|---------------------------------------|
|
||||
| **A** | `int8_t` | `RowMajor` | `RowMajorTensorOpCrosswise<8, 128>` |
|
||||
| **B** | `int8_t` | `ColumnMajor` | `ColumnMajorTensorOpCrosswise<8, 128>`|
|
||||
| **C** | `int32_t` | `RowMajor` | `RowMajor` |
|
||||
|
||||
**SpTensorOp 16-by-8-by-128.**
|
||||
|
||||
|**Operand**|**Element** | **GMEM Layout** | **SMEM Layout** |
|
||||
|-----------|--------------|-----------------|------------------------------------|
|
||||
| **A** | `int4b_t` | `RowMajor` | `RowMajorTensorOpCrosswise<4, 256>` |
|
||||
| **B** | `int4b_t` | `ColumnMajor` | `ColumnMajorTensorOpCrosswise<4, 256>`|
|
||||
| **C** | `int32_t` | `RowMajor` | `RowMajor` |
|
||||
|
||||
|
||||
|
||||
## Warp-level Matrix Multiply with CUDA WMMA API
|
||||
|
||||
The following table summarizes supported warp level shapes for each WmmaTensorOp instruction.
|
||||
|
||||
Reference in New Issue
Block a user