从异构软件开发者的角度看异构计算

异构计算平台

越来越多的主流媒体,出版物都在花时间向大家传递一个信息——异构计算已经并可能在相当长的一段未来时期中主宰计算平台[1,2]。那到底什么是异构计算呢p>

 

作为软件开发者,我认为异构计算就是在异构平台上执行计算,因此我们应该先对异构的计算平台有一定理解,然后在了解如何在异构平台上执行计算。那到底什么是异构平台呢我们知道现在有很多可以用于计算的单元,诸如CPU,GPU,MIC,DSP,FPGA等等,如果在同一个计算机系统中加入不同的计算单元,那么组成的这个计算机系统就可以认为是一个异构的计算平台。大多数人认为现在比较成熟的异构平台是CPU+GPU的计算平台,原因在于两点:越来越多的用户开始使用这种平台;这种异构的计算平台的性能在top *百中屡有佳绩。当然这两点原因看上去联系也很密切。

 

关于CPU+GPU的这种计算平台,目前也有多种存在形式,根据是否共享内存可以分为两种:CPU与GPU共享内存,比如AMD的APU,目前AMD将CPU和GPU共享同一块内存,但是CPU的线程不能和GPU的线程共享同一块数据,在HPCChina2012上,AMD表示不久的将来他们会完成CPU线程与GPU线程共享数据,作为开发者我们也期望那一天再点到来;另一种就是CPU和GPU完全保有独立的存储单元,他们之间使用PCIE通信,这是Nvidia正在做的,Nvidia还在继续努力的提高GPU计算单元的访存和计算速度,以及计算单元的个数。另外,除了GPU这种已经流行的协处理器之外,Intel的协处理器MIC也许会在真正发布之后,获得异构计算的一席之地。

 

异构软件开发

有了异构平台,作为软件开发者,我们应该如何开发异构的应用呢来我们将讨论这个问题。

 

OpenCL标准中包含如下几个重要部分:如何定义在协处理器上执行的多线程函数;如何定义在协处理器上数据;使用什么接口在CPU和协处理器之间传输数据;如何获得异构平台的资源描述。有了这些说明和定义,我们便可以书写程序了。

我们继续讨论OpenCL。一般我们的协处理器上的多线程函数被称为核函数,核函数的编译时在程序第一次运行时进行的。另外由于OpenCL支持所有平台,这一点使得OpenCL丢掉一定的性能,在程序开发的时候,应该考虑到这一点。另外,OpenCL的需要程序员花费很多精力在资源管理上,它的编程方式类似于驱动接口。

 

还有一种基于指导语句的编程方式可以让我们更容易的使用异构平台,目前比较成熟的是OpenHMPP[5]标准,还有已经公布了1.0标准的OpenACC[6]标准。这种编程方式是将并行化过程交给编译器来完成,通过简化程序员的工作,获得更高的工作效率。当然加了指导语句的程序在性能方面会依赖于不同的编译器生产商。比如PGI的编译器虽然支持OpenACC,但是他们的编译器只支持Nvidia的GPU,并且不提供输出核函数的中间代码,而CAPS的编译器则对所有平台支持,并且会产生核函数中间代码,给用户带来更多的优化空间。

 

随着异构计算的不断发展,越来越多的企业和个人将会获得异构计算带来的经济效益。作为异构计算的一名技术工程师,期待您也能尽快了解异构计算,并从中获益!

参考文献:

[1] http://www.programmer.com.cn/7771/

[2] 《OpenCL异构计算》

[3] http://en.wikipedia.org/wiki/CUDA

[4] http://en.wikipedia.org/wiki/OpenCL

[5] http://en.wikipedia.org/wiki/OpenHMPP

[6] http://en.wikipedia.org/wiki/OpenACC

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年10月8日
下一篇 2015年10月8日

相关推荐