根据几年的CUDA开发经验,简单的介绍下CUDA程序的大概开发步骤,按照先修改CPU串行程序后移植到GPU平台的原理,把需要在GPU上做的工作尽量先在CPU平台上修改,降低了程序的开发难度,同时有利用bug的调试。通过实现一种快速、有效地CUDA并行程序开发的方法,提高CUDA并行程序开发效率,降低CUDA并行程序开发周期和难度。
(1) CPU串行程序分析
对于CPU串行程序,首先需要测试串行程序中的热点函数,以及分析热点函数的并行性:
a) 热点测试
根据时间的测试结果确定热点函数,作为后面移植的重点代码模块。
b) 并行性分析
找出热点代码后,需要分析热点部分的算法、数据特点,根据算法和数据的特点分析其是否可以并行,是否适合细粒度并行。
c) 确定CUDA内核使用的数组
根据对串行程序的分析,确定哪些模块需要移植到GPU平台上运行,对于需要运行上GPU平台上的代码内的数据进行分析,确定哪些数组需要在CUDA内核中使用,分析CUDA计算时,这些数组传递的方向是CPUtoGPU还是GPUtoCPU,以及每次传递时的数据大小等信息,然后设计这些数组的定义方式和大小。
(2) 仿CUDA格式的CPU串行程序
CUDA程序相对CPU程序比较复杂,当出现bug时,调试的难度也要比CPU程序大很多,为了降低CUDA程序开发难度和周期,可以把一些GPU上的移植工作提前在CPU平台上实现,具体涉及下面几个方面:
a) 修改成可并行算法
对于CPU串行程序,有些代码理论上可以并行