神经网络前向传播在GPU上的实现*
2011-11-27刘进锋
刘进锋,郭 雷
(西北工业大学 自动化学院,陕西 西安710129)
GPU(图形处理器)是处理计算机图形的专用设备。近十年来,由于高清晰度复杂图形实时处理的需求,GPU发展成为高并行度、多线程、多核的处理器。目前主流GPU的运算能力已超过主流通用CPU,从发展趋势上看将来差距会越来越大。GPU卓越的性能对开发GPGPU(使用GPU进行通用计算)非常具有吸引力。最初GPGPU需要将非图形应用映射为图形应用的方式,这个处理过程与图形硬件紧密相关,程序实现非常困难。近年来,GPU的主要供应商NVIDIA提出了新的GPGPU模型,称为 CUDA(统一计算设备架构)[1]。
CUDA是一种在NVIDIA公司的GPU上进行计算的新型的硬件和软件架构,可以将GPU视为一个并行数据计算的设备,对所进行的计算给予分配和管理。在CUDA的架构中,这些计算不再像过去的GPGPU架构那样必须将计算映射到图形API中,开发者不需要去学习艰涩的显示芯片的指令或是特殊的结构,因此开发门槛大大降低。CUDA的GPU编程语言基于标准的C语言,开发CUDA的应用程序较为方便。
在CUDA架构下,一个程序分为两个部分:host端和device端。host端是指在CPU上执行的部分,而device端则是在GPU上执行的部分。device端的程序又称为Kernel。通常host端程序会将数据准备好后,复制到显卡的内存中,再由GPU执行device端程序,完成后再由host端程序将结果从显卡的内存中取回。
在CUDA架构下,GPU执行时的最小单位是线程(thread)。几个线程可以组成一个线程块(block),每个线程都有自己的一份寄存器(register)和本地内存(local memory)空间。同一个线程块中的每个线程则可以共享一份共享内存(shared memory)。……
