跟 CUDA Core 类似,是单独的运算单元,只能用来计算矩阵乘累加
在 cuDNN v7.6.3(V100) 和之后,卷积维度会自动被填充(auto padding),来方便利用到 Tensor Core
三种 API:
- CUDA Warp Matrix Multiply Accumulation: wmma
- CUTLASS: 一个基于 WMMA 的模版库
- cuBLAS GEMM
- 只能给GEMM类操作,而且是 math limited 的情况做加速,反之 memory limited 算子加速不了
- 对于线性层:需要 input size, output size, batch size 是 8(fp16)或者16(int8)倍;对于卷积层:输入或输出的 channels 也是同样规则
- 想要 TC GEMM 效率高:上述维度是 64/128/256 的倍数。如果 tiles 总数比较小,保证是 SM 数量的倍数
- 如果 GEMM 的任意维度是 128 或更小,那 OP 就很可能是 bandwidth limited
- nvprof,然后检查函数名里有这种模式:
[i|s|h][some numbers]
:volta_h884gemm
turing_fp16_s1688cudnn_fp16
. 但可能不充分 - nsight system等里面会有两列指标:TC eligible, TC used
- 上述条件,是 input size or outputsize,还是乘积,或者是都需要是8的倍数?