论文部分内容阅读
深度学习已经成为解决机器学习问题的重要手段。在图像分类,语音识别,文本翻译等领域,深度学习都取得了很好的效果。由于训练精确的模型需要具有大量参数的深度神经网络和海量的数据,我们迫切地需要针对现有体系结构的深度学习计算加速。本文针对深度学习中的典型计算,如卷积和矩阵乘等,深入分析性能影响因素,设计了一系列加速方法,并实现了在CPU,MIC,和GPU端,一套统一的深度学习计算接口——Blitz。对比主流的深度学习算法库,我们的实现具有较大的性能优势。 本文的主要贡献有: 基于CPU,GPU和MIC等体系结构对深度学习计算进行加速。本文分析了数据结构,并行模式和算法实现等因素对深度学习计算性能的影响。在CPU和MIC端,本文针对SSE,AVX,AVX2和AVX512指令集编写了不同的优化程序。基于不同的深度学习网络配置和不同平台,我们的程序可以自动选择分块的大小,从而最大程度上利用多级cache。相比传统依赖BLAS的深度学习加速方式,本文所采用的方式具有节省内存和高性能的优点。在GPU端,由于NVCC编译器不能将C代码转化为高效的GPU汇编代码,我们采取了汇编指令来优化卷积和矩阵乘程序。我们所采取的优化手段高效地利用了shared memory和globalmemory访存指令,避免寄存器bank冲突,利用了FFMA指令双发射的模式。 我们提出了一个基于汇编指令的GPU性能分析框架。该框架通过输入汇编程序,测量各个必要指令的延迟和吞吐量,建立DAG图来模拟指令执行。此外,我们通过计算occupancy和确定并行度,从而预测程序的执行时间和性能瓶颈。最后我们对卷积和矩阵乘程序的建模,可以将误差控制在2%之内。 对比Caffe,MKL,和cuDNN等主流深度学习计算库,Blitz取得了较高的性能提升。通过与Caffe等主流框架实现的对比,Blitz在CPU上有1倍的性能提升,在MIC上有3倍性能提升,在GPU上有4倍的性能提升。并且,对比MKL实现,Blitz在CPU上有8%左右的性能提升;对比cuDNN实现,Blitz在GPU上有40%的性能提升。我们的实现最终在CPU上达到了81%的峰值性能,在GPU上达到了84%的峰值性能。