一步步做程序优化【3】OpenHMPP指令(更加灵活的使用异构计算)
1、简介下HMPP
HMPP指的是(Hybrid Multicore Parallel Programming),他是由CAPS(http://www.caps-entreprise.com(英文);www.caps-entreprise.com.cn(中文)) 发起的一种异构计算的标准,他的出现可以大大减少我们的程序优化时间。大家可以参考我之前的几篇讲解HMPP的文章去获得HMPP的试用版。
HMPP是一种基于编译指导语句(类似与OpenMP)的标准,它与OpenMP的区别是:OMP是基于CPU的并行标准,HMPP是基于异构平台的标准(例如CPU+GPU,CPU+MIC),它支持C和Fortran两种语言。
另外HMPP编译器可以根据你的#pragma指令产生CUDA代码,也可以直接编译CUDA代码!
总之,HMPP编译器非常强大!
2、使用HMPP以及OpenACC的一个推荐原则。
使用HMPP是为了尽可能不改变原有代码的基础上只需要添加少量的#pragma 语句就可一获得几十甚至几千倍的加速比。当然前提是你原有的代码要可以正确的按照算法设计的目的执行才行。
3、继续优化矩阵相乘的那段代码
1)重新贴一边需要优化的代码:(特别注意这段代码来值CAPS,这是原始代码,我没有做实质性的修改)
---- Initialization of the Matrices -------- Running calculations ----Run on GPU0 1 2 3 4 Run on CPU0 1 2 3 4 ---- Results ----Sizes of matrices: M:256 N:256 K:256Best HWA time : 1.436000 msMean HWA time : 21.837000 msBest CPU time : 86.995000 msMean CPU time : 87.583000 msGlobal HWA time : 109.192000 msGlobal CPU time : 437.922000 msSpeed-up : 60.581478 (computed on the best time)
当然HMPP并没有到这里这么简单,它提供了很多指令,指令学习并不难,也就是说我们不用直接学习CUDA或者OpenCL就可以很方便的使用GPU的计算资源了。种种好处 只有在你试用之后才能知道的奥。
后面的博客我还会讲解更多的指令,还有一些有意思的细节。欢迎大家关注奥!