我使用什么编程方式来做GPU计算,或者使用什么编程方式书写在GPU上运行的多线程函数?
下面我针对这个问题给出一些大家可以参考的相关信息。
目前比较成熟的可以实现GPU计算的编程方式有:CUDA,OpenCL,OpenACC,OpenHMPP。我们一一叙述。
CUDA
CUDA是NVIDIA公司推出的一种GPU计算的编程方式,他们将C语言拓展后得到一种新的语言叫CUDA C,我们可以使用CUDA C来写GPU计算的程序。
硬件方面:CUDA只支持NVIDIA自家的GPU。
软件方面:CUDA对于操作系统限制不大,支持Linux、Windows、Mac三种主流操作系统。
参考信息:
1、官方可以免费下载和使用:https://developer.nvidia.com/cuda-toolkit-archive 这是NVIDIA的CUDA所有版本。
2、介绍CUDA的书籍资料:《大规模并行处理器实战》 《GPU高性能编程CUDA实战》《GPU高性能运算之CUDA》
3、介绍CUDA编程的NVIDIA官方资料:《CUDA C Programming Guide》 《CUDA C Best Practices Guide》等,这些资料就在你的CUDA Tookit的安装目录下的doc目录下,还有一些库的介绍。其中一些资料还被网友翻译出了中文版http://hpcbbs.it168.com/thread-2293-1-1.html。
OpenCL
OpenCL是由著名的非盈利技术联盟Khronos Group进行管理的一种异构计算标准(http://www.khronos.org/opencl/)
硬件要求:AMD、NVDIA、Intel等任何支持OpenCL编程的硬件厂商。
软件要求:根据不同的硬件厂商,支持的平台可能有所差异。理论上没有平台限制。
参考信息:
1、各个硬件厂商提供的OpenCL SDK免费下载。
2、相关书籍:《OpenCL异构计算》,OpenCL的编程规范等。
OpenACC
OpenACC是由NVIDIA牵头,联合三家编译器厂商推出的一种标准,意在简化用户的编程,用户可以在学会OpenACC的指导语句之后,再很短的时间内实现自己的GPU程序。目前大家比较熟知的是CAPS和PGI两个编译器厂商的OpenACC编译器。
硬件要求:PGI的编译器只支持NVIDIA的GPU,而CAPS的编译则支持NVIDIA,AMD以及Intel等所有支持OpenCL、CUDA的硬件产品,并且支持产生CUDA或者OpenCL的可读代码,可以手动修改和优化。
软件要求:不同厂商,支持平台可能有所差异。目前CAPS支持Linux,而且马上会发布OpenACC编译器的Windows版本。
参考资料:
1、各个编译器厂商提供的资料。其中CAPS提供中文的免费网络培训课程(http://www.caps-entreprise.com.cn/many-core/webinar-openhmpp-1.html),并且可以通过一个服务器平台试用OpenACC编译器(http://gvsc.leadtek.com.cn/leadtekhpc/),
2、可以在这里下载到 http://www.openacc.org/Downloads
OpenHMPP
OpenHMPP标准比OpenACC标准提出的要早,它提供了比OpenACC更多的功能。官方网站(http://www.openhmpp.org)
目前支持这个标准比较好的编译器厂商是CAPS (中文网站:www.caps-entreprise.com.cn 英文网站:www.caps-entreprise.com)
硬件要求:所有支持CUDA和OpenCL的硬件平台。
软件要求:需要安装硬件厂商的SDK。
参考资料:
1、各个编译器厂商的编程指南。
2、免费的网络课程:http://www.caps-entreprise.com.cn/many-core/webinar-openhmpp-1.html
额外的资源:
1、有关OpenHMPP、OpenACC指导语句编程方式,编译器等问题,大家可以写信给 [email protected]
2、“开启新一片蓝海——异构计算完全解析” :http://www.csdn.net/article/2012-07-23/2807633
其实,最后大家发现这已经不限于GPU编程了!!因为除了CUDA之外,后面的三个标准都是来定义异构计算标准的,而GPU计算只是异构计算的一种而已!!
在了解了以上内容之后,大家可以理性选择学习那种方式了。未尽之处还请广大读者不吝指正。