在GPU上实现Jacobi迭代法的分析与设计
2012-02-15吴玫华
吴玫华
(福建省凯特科技有限公司 福建 福州 350002)
随着 GPU(Graphic Processing Unit,图形处理器)技术的快速发展,GPU的浮点运算能力迅速提升,并大幅度超过了通用CPU(Central Processing Unit)。早期GPU主要用于图形处理,硬件设计上主要考虑数据的并行,一般拥用大量的计算单元,而缺少CPU中用于分支预测、乱序执行等机制的逻辑控制单元,因此可利用GPU上的大量计算单元提升计算性能。Nvidia公司在2008年推出的GeForce GTX 280显卡的浮点计算峰值达到950Gflop/s,相对于当前主流多核CPU的性能提升了许多[1]。GPU的强大计算性能使得大批研究者投入到将大量计算需要和复杂的问题映射成GPU可处理的问题,即利用GPU来做的通用计算GPGPU(General Purpose Computation on GPU)[2]。
Jacobi迭代法[3]是科学计算领域中常用的计算方法,其核心计算是矩阵乘向量。Jacobi迭代法广泛用于求解线性方程组,是许多数值计算问题的核心,用于构成更高级的计算方法。研究这个经典算法在GPU上的实现对在GPU平台上开发相关科学计算程序具有重要的借鉴意义。
笔者在一个含有 Intel Core(TM)Duo E7200 CPU和Nvidia GeForce 9500GT GPU的计算机上实现Jacobi迭代法,并对算法性能进行测试。实验结果表明把算法映射到GPU上执行能够获得较好的加速比,最高得到10.2的加速比。
1 GPU通用计算
最早的GPGPU直接使用了图形学 API(Application Program Interface)编程。这种开发方式要求编程人员将数据打包成纹理,将计算任务映射为对纹理的渲染过程,用汇编或者高级着色语言(如 GLSL、Cg、HLSL)编写 Shader程序,然后通过图形学 API(如 Direct3D、OpenGL)执行。这种方式要求编程人员不仅要熟悉自己需要实现的计算和并行算法,还要对图形学硬件和编程接口有深入的了解。……
