Nvidia Tesla T4 张量核心基准测试

Nvidia Tesla T4 tensor core benchmark

我正在使用给定的代码 here 找出 Nvidia Tesla T4 上混合精度运算的 TFlops。它的理论值是65 Tflops。但是,代码生成的值为 10 Tflops。任何可以证明这种情况发生的解释?

这可能更像是一个扩展评论,打赌听我说完...

正如评论中指出的那样,CUDA 样本并不意味着性能测量工具。 您提供的第二个基准实际上并没有使用张量内核,而只是在 FP32 或 FP64 内核上执行的普通指令。

for(int i=0; i<compute_iterations; i++){
            tmps[j] = mad(tmps[j], tmps[j], seed);
    }

在图灵 T4 上,单精度运算的峰值为 7.97 TFLOPS,非常接近 8.1 TFLOPS 的理论极限。 对于半精度运算,我得到 16.09 TFLOPS,正如预期的那样,大约是单精度性能的两倍。

现在,进入 Tensor 核。由于前面提到的基准测试没有使用它们,让我们寻找一些可以使用的东西。 CUTLASS (https://github.com/NVIDIA/cutlass) 是 NVIDIA 的高性能矩阵-矩阵乘法库。 他们为所有提供的内核提供了一个分析应用程序。如果你在 T4 上 运行 这个,你应该得到这样的输出:

Problem ID: 1

   Provider: ^[[1;37mCUTLASS^[[0m
   OperationKind: ^[[1;37mgemm^[[0m
   Operation: cutlass_tensorop_h1688gemm_256x128_32x2_nt_align8

      Status: ^[[1;37mSuccess^[[0m
Verification: ^[[1;37mON^[[0m
 Disposition: ^[[1;32mPassed^[[0m

 reference_device: Passed
      cuBLAS: Passed

   Arguments: --gemm_kind=universal --m=1024 --n=1024 --k=1024 --A=f16:column --B=f16:row --C=f16:column --alpha=1  \
              --beta=0 --split_k_slices=1 --batch_count=1 --op_class=tensorop --accum=f16 --cta_m=256 --cta_n=128  \
              --cta_k=32 --stages=2 --warps_m=4 --warps_n=2 --warps_k=1 --inst_m=16 --inst_n=8 --inst_k=8 --min_cc=75  \
              --max_cc=1024

       Bytes: 6291456  bytes
       FLOPs: 2149580800  flops

     Runtime: 0.0640419  ms
      Memory: 91.4928 GiB/s

        Math: 33565.2 GFLOP/s

如您所见,我们现在实际使用的是 Tensor 内核和半精度运算,性能为 33.5 TFLOPS。现在,这可能不是 65 TFLOS,但对于可以在现实世界中使用的应用程序来说,这已经很不错了。