与GPU技术的第一次亲密接触

本文是记录我在接触GPU的过程中,所查阅的资料,所得到的一些观点,在这里分享,也是希望与大家交流,如有错误,请一定要指正。

GPU是什么?

       GPU是图形处理器的英文缩写(Graphics Processing Unit,显卡的处理器称为图形处理器(GPU),它是显卡的“心脏”,与CPU类似,只不过GPU是专为执行复杂的数学和几何计算而设计的,这些计算是图形渲染所必需的。

   因为CPU 由专为顺序串行处理而优化的几个核心组成,而GPU 则由数以千计的更小、更高效的核心组成,这些核心专为同时处理多任务而设计,这使得GPU作为硬件加速,成为可能。

与GPU技术的第一次亲密接触_第1张图片

   GPU加速一般有渲染加速和运算加速两种,前者是显卡的本质工作,将渲染器速度提升完成画面输出,后者是通用计算领域的用法,利用GPU强大的浮点数运算能力帮助CPU进行计算。


我的程序可以用GPU加速吗?

     这里的思想主要引用http://www.gpuworld.cn/article/show/448.html的文章,更完整的请参考这篇文章,我在此,仅仅是罗列一下文中的主要观点。

1. 并行计算不等于串行代码+并行设备

      所以我们还是要按部就班,先花个1~2天对并行计算的基础理论开始理解,以及对并行设备(GPU架构)有基本认知,然后再开始进入 CUDA OpenACCOpenCL编程,这样才不会误入歧途。如果想对并行计算有个大概的认知,可以参考

http://wenku.baidu.com/view/53e216a4b0717fd5360cdc24.html的第一章,对数据并行和任务并行有很生动的阐释。

2. 并行化的最基本工作,就是算法并行化

这部分您可多参考一些别人的论文,相信对您会有明显的帮助。

3. 性能提升程度:算法并行化程度  >> 并行代码优化程度

其次,也有大部分的人将串行习惯中的条件分支(if..then..else case )大量用到并行编程之中,结果性能反而变得更差。这是因为不理解并行计算的核心:一致性与规整性。

并行计算的关键,是让绝大部分的计算核进行相同的工作,任何条件分子都会破坏工作的一致性,条件分支越复杂则一致性越差。同样的,如果数据结构的规整度不一致,性能也会不好。

4. 并行计算只处理适合的部分而非从头到尾”  

有许多初学者一开始钻入 CUDA语法与结构,将 GPU的计算核当做 CPU的控制核使用,然后将整个 CPU C/C++/Fortran代码从头到尾全部改写成 CUDA函数,结果性能奇差无比。

真正合理的并行计算,是将整个应用中计算量最大的部分(可能代码只占10%、但计算量超过60%)转换成并行代码,交给并行处理器去计算就可以。

5. 计算性能并非只以计算核数量为衡量标准 

CPU计算性能类似,GPU计算核也有主频,整体性能以计算核数量*主频为依据。此外,影响性能另一个关键因素,在于数据传输所消耗的时间,因此 PCIE总线、CPUQPI带宽、计算卡的显存带宽等等,也是至关重要的实际影响因素。

6.  绝对要善用 NSight之类的专门除错工具 

并行计算会同时启动成千上百个线程,其中牵扯非常多的资源冲突、数据同步等可能出错的状况,绝非传统串行代码用 VC设断点、用 printf显示等方式能够除错的,所以学习GPU编程请同时学习 NSight之类除错工具的使用

7 .游戏卡的SLICrossFire功能,于多卡计算的数据交换无关 

许多人在这方面存在绝对的误解,以为游戏卡提供的 SLINVIDIA)或CrossFireAMD)是多卡计算的数据传输界面,其实这两种技术与 Multi-GPU并行计算没有任何关系,专业计算卡(NVIDIA Tesla AMD Firepro)都不提供这类技术

PS:官方网页,并阐述了如何加速,看看自己使用的应用程序是否支持 GPU 加速:http://www.nvidia.cn/object/what-is-gpu-computing-cn.html

怎么用GPU加速?

现在还没有正式开发过,网上了解的,可以用CUDA和OpenCL开发.

CUDA是一套软件开发工具,支持Nvidia公司生产的GPU图形卡。如果你的程序需要提高运行的速度,并且是可并行的,CUDA就是一个非常实用和适用的开发工具。将你的程序在CUDA环境改编(并行化)之后,运行的硬件平台有Nvidia公司生产的GPU图形卡,则可大幅度提高你的程序运行的效率和速度。

OpenCL是由苹果(Apple)公司发起,业界众多著名厂商共同制作的面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境。便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。

二者的区别和前景可以参考

http://www.zhihu.com/question/19780484

需要买GPU卡吗?

怎么样,是不是有点手痒痒,想试试看啦!看了下官网的一些讨论,都在说什么系列的显卡呀,由于我是个硬件小白,想到还要配置硬件的显卡,当时心都凉了。我这么low的PC,肯定缺这个少哪个,后来看到VIDIA官网说,他们的所有卡都实现了对cuda的支持。还是云里雾里吧,更幸运的是,后来找到一个网页更简单明了,直接下载一个GPU-Z软件,安装好,可以看到像下面这样的页面:打开后可以在下面看到。

 与GPU技术的第一次亲密接触_第2张图片

我的PC支持OpenCL,而不支持CUDA.这样,我可以用OpenCL开发啦!


重要的参考资料:

官网:

http://www.gpuworld.cn/article/index/89/

论坛:

http://bbs.gpuworld.cn/forum.php

 参考博客:

http://blog.csdn.net/leonwei/article/details/8880012

http://www.xuebuyuan.com/1751822.html

http://wenku.baidu.com/view/53e216a4b0717fd5360cdc24.html

 

你可能感兴趣的:(CUDA,OpenCL,GPU)