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

探讨了CUDA 7.5引入的半精度计算特性及其在不同GPU架构下的表现。通过对比半精度(FP16)与单精度(FP32)在cublas库中的实现,发现其性能差异受GPU架构影响显著。
PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

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

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

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

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

这里写图片描述

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

另一位开发者提供了他在P100下测试的程序样例,见ref 【1】

ref

https://github.com/hma02/cublasHgemm-P100

https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#arithmetic-instructions

https://devtalk.nvidia.com/default/topic/972337/gpu-accelerated-libraries/why-cublashgemm-is-slower-more-than-cublassgemm-when-i-use-/

您可能感兴趣的与本文相关的镜像

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值