[图像算法]-(yolov5.train)-GPU架构中的半精度fp16与单精度fp32计算

GPU架构中的半精度与单精度计算

  由于项目原因,我们需要对darknet中卷积层进行优化,然而对于像caffe或者darknet这类深度学习框架来说,都已经将卷积运算转换成了矩阵乘法,从而可以方便调用cublas 库函数和cudnn里tiling 过的矩阵乘。

  CUDA在推出7.5的时候提出了 可以计算16位浮点数据的新特性。定义了两种新的数据类型half和half2. 之前有师弟已经DEMO过半精度memory copy 与计算,发现copy的代价会减少一半,而计算的提升并不是很理想。误打误撞看到了《why cublasHgemm is slower more than cublasSgemm when I use?》这个帖子,终于发现其中的一点规律。

  问题的提出者问,为什么在GTX1070上运行 cublasHgemm(半精度计算) 比 cublasSgemm(单精度计算)计算的慢呢?nv官方的回答说,当前的Pascal架构的GPU只有的 P100 的FP16计算快于 FP32。并且给出了编程手册的吞吐量的表。


image.png

从表中我们可以看出,对半精度支持更好的是架构 计算能力 5.3和6.2 分别对应嵌入式的平台 Jetson TX1和Jetson TX2,而计算能力6.0的就是我们上边提到的P100了。 而计算能力7.0则是最新的volta架构了。

另一位开发者提供了他在P100下测试的程序样例,见Ref[1]

Ref

[1]https://github.com/hma02/cublasHgemm-P100
[2]https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#arithmetic-instructions
[3]https://devtalk.nvidia.com/default/topic/972337/gpu-accelerated-libraries/why-cublashgemm-is-slower-more-than-cublassgemm-when-i-use-/

你可能感兴趣的:([图像算法]-(yolov5.train)-GPU架构中的半精度fp16与单精度fp32计算)