美文网首页
(16)CPU、GPU、CUDA和cuDNN

(16)CPU、GPU、CUDA和cuDNN

作者: 顽皮的石头7788121 | 来源:发表于2018-11-12 16:47 被阅读0次

    (1)CPU和GPU

            CPU (Central Processing Unit) 即中央处理器

            GPU (Graphics Processing Unit) 即图形处理器

    CPU和GPU显示图

            其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。

             CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;

            GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单,适合图像处理。

    (2)CUDA

            CUDA(Compute Unified Device Architecture),是英伟达公司推出的一种基于新的并行编程模型和指令集架构的通用计算架构,它能利用英伟达GPU的并行计算引擎,比CPU更高效的解决许多复杂计算任务,同时具有可扩展的特性。

    (3)cuDNN

            NVIDIA cuDNN是一个GPU加速深层神经网络原语库,是NVIDIA专门针对深度神经网络中的基础操作而设计基于GPU的加速库。它提供了在DNN应用程序中频繁出现的例程的高度优化的实现,包括卷积前馈和反馈,pooling前馈和反馈,softmax前馈和反馈,神经元前馈和反馈:整流线性(ReLU),-sigmoid双曲线正切(TANH);张量转换函数;LRN,LCN和批量归一化前进和后退

            cuDNN的卷积程序旨在提高性能,以最快的GEMM(矩阵乘法)为基础实现此类例程,同时使用更少的内存。

            在深度学习应用中,训练时我们往往对训练速度有要求,希望越快越好,也就意味着能够在更短的时间训练完我们的模型,更小的调整参数的成本;而对于随着网络模型的深度加大,模型本身训练时所占用的显存空间很大,这时候就要求我们的选取的卷积算法能够尽可能的少占用临时显存空间。这是一个时间与空间的权衡。

            CuDNN提供了多种卷积算法的实现,同时也提供了两类API,分别为get/find,用户自行调用得到满足特定条件下的最优卷积算法实现.其中GET类型方法是根据经验得到对应的卷积算法,比如输入的layout, filter的大小,卷积输入的数据类型等等,这个查找过程是常数级别,这个方法的好处是调用简单,CuDNN根据一些经验设定简易判断,同时给定是否有空间限制的选项,比如有workspace_limit, fastest,no_workspace_limit等.但是,通过这个API获得的卷积算法并不一定是最快的。另外就是find类型的接口,原理是遍历一遍所有的卷积算法,返回一个perf结果,包括每个算法实际运行所需的时间以及临时空间大小,如果该卷积算法不支持当前的输入数据,那么状态就不为CUDNN_STATUS_SUCCESS。通过这种方式得到是最具有说服力,实测也是最快的,如果对空间存在限制,那么可以根据返回的perf结果进一步限制.

            可通过

            cudnn.enabled = True

            # Enables benchmark mode in cudnn, to enable the inbuilt cudnn auto-tuner

            # to find the best algorithm to use for your hardware.

            cudnn.benchmark = True

            使其生效

            

    相关文章

      网友评论

          本文标题:(16)CPU、GPU、CUDA和cuDNN

          本文链接:https://www.haomeiwen.com/subject/zhecfqtx.html