深度学习GPU

本文介绍了GPU的基本概念,对比了CPU与GPU的区别,强调了GPU在并行计算和浮点运算上的优势。CUDA作为Nvidia的并行计算平台,提供了透明的编程模型,使得代码能在不同核心的GPU上运行。CuDNN是用于深度神经网络的GPU加速库,简化了开发过程。此外,文章还探讨了CUDA编程、GPU计算和深度学习中GPU的使用,以及如何通过调整batch size和选择合适的数值类型来优化显存使用。
摘要由CSDN通过智能技术生成

GPU简介

要说GPU,首先要来说说CPU。CPU的全称是Central Processing Unit,GPU的全称是Graphics Processing Unit。在命名上,这两种器件相同点是它们都是Processing Unit——处理单元;不同点是CPU是“核心的”,而GPU是用于“图像”处理的。顾名思义,这些名称的确非常符合大众印象中它们的用途——一个是电脑的“大脑核心”,一个是图像方面的“处理器件”。

常见的CPU有2、4、6、8颗处理核心,也就是我们常说的双核、4核、6核、8核处理器,其他组件有L3缓存和内存控制器等。CPU在物理空间上,“核心”并不是占绝大部分,其是个集各种运算能力的大成者,如同公司的领导,他可能在各个技术领域都做到比较精通,但一个公司仅仅只有这样的什么都可以做的领导是不行的,因为领导的价值并不只是体现在一线执行能力上,还包括调度能力。CPU是一个拥有多种功能的优秀领导者。它的强项在于“调度”而非纯粹的计算。而GPU则可以被看成一个接受CPU调度的“拥有大量计算能力”的员工。最近发布的Nvidia显卡的cuda数量已经达到上千个了,如TITAN Vcuda数量达到了5120个,CPU与GPU已经不在一个量级上了。

除了计算能力,还有一个比较重要的考量因素就是访存的速率。当我们进行大量计算时,往往只是使用寄存器以及一二三级缓存是不够的。目前Intel的CPU在设计上有着三级缓存,它们的访问速度关系是:L1>L2>L3,而它们的容积关系则相反:L1<L2<L3。以图中Intel Core i7 5960X为例,其L3缓存的大小只有20M。很明显CPU自带的缓存大小太小,不足以承载所有的系统。于是需要使用内存来补充。该款CPU的最大支持64G内存,其内存最大带宽是68GB/s,而GPU对应的显存带宽能达到700GB/s以上。

GPU具有如下特点:

  • 提供了多核并行计算的基础结构,且核心数非常多,可以支撑大量并行计算
  • 拥有更高的访存速度
  • 更高的浮点运算能力

CUDA

CUDA(Compute Unified Device Architecture),统一计算设备架构技术。是Nvidia推出的一种基于新的并行编程模型和指令集架构的通用计算架构,它能利用英伟达GPU的并行计算引擎,比CPU更高效的解决许多复杂计算任务。

使用CUDA的好处就是透明。根据摩尔定律GPU的晶体管数量不断增多,硬件结构必然是不断的在发展变化,没有必要每次都为不同的硬件结构重新编码,而CUDA就是提供了一种可扩展的编程模型,使得已经写好的CUDA代码可以在任意数量核心的GPU上运行。如下图所示,只有运行时,系统才知道物理处理器的数量。 

CuDNN

CuDNN(CUDA Deep Neural Network library),CUDA深度神经网络库,是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如加州大学伯克利分校的流行CAFFE软件。简单的,插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是调整性能,同时还可以在GPU上实现高性能现代并行计算。如果你要用GPU训练模型,cuDNN不是必须的,但是一般会采用这个加速库。

GPU计算——cuda编程

开发人员可以通过调用CUDA的API,来进行并行编程,达到高性能计算的目的。NVIDIA公司为了吸引更多的开发人员,对CUDA进行了编程语言扩展,如CUDA C/C++,CUDA Fortran语言。注意CUDA C/C++可以看作一个新的编程语言,因为NVIDIA配置了相应的编译器nvcc,CUDA Fortran一样。

CPU是整个计算机的核心,它的主要工作是负责调度各种资源,包括其自身的计算资源以及GPU的计算资源。比如一个浮点数相乘逻辑,理论上我们可以让其在CPU上执行,也可以在GPU上执行。那这段逻辑到底是在哪个器件上执行的呢?cuda将决定权交给了程序员,程序员可以在函数前增加修饰词来指定。

关键字 执行位置
__host__ CPU
__global__ GPU
__device__ GPU

一般来说,只需2个修饰词就够了,但cuda却提供了3个——2个执行位置为GPU。这儿要引入一个“调用位置”的概念。父函数调用子函数时,父函数可能运行于CPU或者GPU,相应的子函数也可能运行于CPU或者GPU,但是这绝不是一个2*2的组合关系。因为GPU作为CPU的计算组件,不可以调度CPU去做事,所以不存在父函数运行于GPU,而子函数运行于CPU的情况。

关键字 调用位置
__host__ CPU
__global__ CPU
__device__
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值