基于LLVM的异构编译优化方法研究

来源 :重庆交通大学 | 被引量 : 0次 | 上传用户:zqy61032526
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
2009年Khronos Group ISO提出了OpenCL(Open Computing Language)标准,它是一个为异构平台编写并行程序的框架。相对于CUDA等GPGPU(General-purpose computing on graphics processing units)“方言”,它有着标准化、跨平台等特点,适合用于在异构计算系统中开发可移植的并行应用程序。标准化高性能应用开发平台的需求推动了OpenCL的发展。OpenCL解决了复杂的存储器层次结构、数据并行执行问题,特别是解决了异构并行计算系统先前编程模型中存在的严重局限性。相对CPU每个核拥有大量的缓存及复杂的控制逻辑,善于单线程可执行程序的复杂执行。GPU更侧重于执行并行应用程序时的吞吐量,由大量较小的核组成,每个核的主频较低,但存在较大量的寄存器文件、内存带宽和拥有较小的缓存。同时期的顶级CPU与GPU相比,整体浮点运算的执行速度是CPU的10倍左右,显存的带宽也是内存的10倍左右;单一核CPU与GPU相比,运算速度和平均拥有的带宽刚好相反,为十分之一。本文针对OpenCL编译时期的特有模式,提出了一种新的针对异构计算平台的编译期优化方法,该方法根据设备端和主机端的各自特点将设备端的一些冗余操作提到主机端或者新的设备端kernel中去执行,以达到降低存储器读写的目的。这种方法充分利用了异构计算平台的特点,较传统优化方法相对灵活,在一定程度上降低了异构平台程序开发对硬件的依赖,可以产生良好的代码并提高程序运行的效率。本文整体实现主要包含两个模块,分别是运行时检测模块与编译期代码优化模块。作者主要工作如下:扩展了循环不变代码外提算法,通过数据依赖分析,使得算法可以较细致的分析那些load,store指令是可以外提到循环前置块的。另外设计了一个针对OpenCL的归纳变量分析器,分析每条指令依赖get_global_id和get_local_id函数的维度。并且证明了在kernel中进行依赖分析时不需要考虑OpenCL模型中维度相关的循环依赖分析的。这样在进行load,store指令外提和计算依赖环时,对于OpenCL模型中维度相关的依赖只需要计算非循环相关依赖就可以了,降低了编程的复杂度和优化时的使用范围。在LLVM(Low Level Virtual Machine)平台下实现,大多数情况下能有效提高OpenCL的运行速度,测试用例中在应用原有编译器优化的基础上有了一定提高。
其他文献
【正】 斯宾塞在《仙后》第三卷中提到一面"维纳斯的镜子"(i.8.),接着又说它是一个"玻璃球"(ii.21.)。这个玻璃球是魔术师墨林赠给南威尔士国王莱恩斯的礼物。它具有魔
目的:对神经阻滞复合喉罩全麻在高龄下肢骨折手术患者中的应用效果观察。方法:选取该院2013年10月至2015年10月实施治疗的70例高龄下肢骨折患者,依照患者麻醉方式分成两组,各
社会历史的剧变和外来文化的冲击,为二十世纪三十年代的中国文学创作提供了广阔的空间。在“左联”和三十年代众多的农村题材创作中,叶紫以揭露农村阶级压迫的尖锐性著称。他