一种提高OpenCL硬件执行效率的方法

文档序号:9687746阅读:774来源:国知局
一种提高OpenCL硬件执行效率的方法
【技术领域】
[000?]本发明涉及一种提高OpenCL硬件执行效率的方法,特指是基于FPGA平台上,实现OpenCL软件代码与高效率的FPGA硬件平台协同工作的方法。
【背景技术】
[0002]0penCL(0pen Computing Language)是第一个在异构系统之间建立统一编程环境的开放式且无版权税的编程框架。OpenCL允许用户使用基于C的编程语言进行跨平台的程序开发,包括CPUs,GPUs,DSPs以及FPGAs等。它既是一种编程模型,也提供了一种设计方法学。OpenCL基于ANSIC标准(C99),为所面向的异构平台提供了基于任务分割和数据分割的并行计算机制。主机程序与各个异构平台之间通过应用编程接口(API ,Applicat1nProgram Interface)进行通信,保证任务调度能够高效而均衡的完成。
[0003]以Altera SDK for OpenCL(AOCL)工具为例,它是一套由Altera公司开发的、面向FPGA硬件平台的OpenCL程序开发环境。AOCL工具提供了 OpenCL编译器,利用高级综合技术将OpenCL代码转换为ver i log硬件描述语言,免去了繁重的FPGA硬件设计过程,实现了由高层描述语言OpenCL到FPGA平台的直接映射。
[0004]用户在AOCL环境中开发程序时,首先将OpenCL程序分为主机执行部分和硬件平台执行部分(即kernel),其中主机执行部分由标准的C编程器来处理,并生成x86平台上的可执行程序;硬件平台执行部分由OpenCL编译器来处理,使用高级综合技术生成verilog代码,然而调用Altera的综合工具Quartus II来完成后续的综合、布局、布线等步骤,生成可下载的FPGA配置文件,作为参考,附图2中给出了上述过程的流程示意图。
[0005]OpenCL代码到FPGA平台的直接映射,缩短了面向FPGA实现方案的开发周期,降低了FPGA平台的开发难度,极大的便利了软件工程师对FPGA的使用,即不需要对FPGA有深入的了解,也可以实现面向FPGA的设计和编程。但是在获得便利性的同时也牺牲了 FPGA的性能。由于对FPGA编程的verilog代码是由高级综合工具自动生成的,在生成的过程中使用了模板、统一化的接口和保证时序收敛的缓存逻辑等,所以必然会浪费一定的FPGA资源。而且随着功能复杂度的提高,高级综合工具的优化效果也会明显下降,FPGA资源占用过多,又会进一步降低其工作频率,所以使用OpenCL实现的方案,其性能可能会大幅低于直接使用veri log语言实现的方案。
[0006]提高OpenCL在FPGA硬件平台上执行效率的方法有很多种,包括任务调度层面,算法结构层面,编译参数层面以及硬件逻辑层面等,所述如下:
在任务调度方面,开发者可以根据FPGA所提供的资源类型选择合适的加速任务,例如逻辑与或运算、移位、比较等任务都是FPGA所擅长的;根据FPGA所包含的DSP数目来处理适量的定浮点乘加运算。
[0007]在算法结构方面,开发者可以充分利用FPGA的特殊资源,比如内部存储单元、DSP、硬浮点单元、移位寄存器等,简单高效的处理特定运算。
[0008]在编译参数方面,开发者可以根据算法的特点和FPGA的处理能力采用适当粒度的并行任务,例如参数#pragma unro11可以将循环调用的任务展开以并行处理,num_(3011^)1^61—_1111;^8和1111111_8;[111(1_'\¥011<_;^61118分别指定了单一kerne I 模块中计算单元的数目和并行工作项的数目,不同的参数选择下,FPGA的并行性能也有所差异。
[0009]在硬件逻辑层面,开发者可以选择适应于加速任务的器件及外部设备,例如,实现矩阵乘法运算可以选择逻辑资源少和DSP数目多的FPGA类型,类似的外部存储设备可以选择DDR或QDR等。
[0010]以上列出的提高OpenCL在FPGA硬件平台上执行效率的方法,都是相对粗粒度的优化方式,因为用户无法越过高级综合工具直接干预底层硬件的实现方式,所以这些方法都受限于高级综合技术的缺点,即自动生成的verilog代码包含一部分的冗余逻辑,使用较多的缓存资源,在工作频率和资源占用率方面都劣于手工完成的veri log代码,能够采用的优化手段相对局限。而且,目前还没有OpenCL编译器能够支持在kernel模块中直接调用RTL形式的模块,无法针对kernel模块进行特定目标的逻辑层面的优化,没有充分发挥FPGA的硬件效率优势。

【发明内容】

[0011]本发明提供了一种提高OpenCL在硬件平台上执行效率的方法,以实现OpenCL软件代码高效率高质量的映射在FPGA硬件平台上。
[0012]由于OpenCL编译器在运行的过程中,会使用高级综合技术将OpenCL代码转换为veri log代码,不同的工具所生成的ver i log代码具有千差万别的层次结构和编码风格,但是在接口方面都具有一定的规律性和相似性。kernel模块访问外部存储设备须通过标准的总线接口;主机执行代码向kernel模块传递参数变量时,多采用存储器读写的方式;主机执行代码与kernel模块之间还需要负责流程控制的信号。对于多kernel的模块,每一个kerne I都具有上述的若干个端口。
[0013]基于上述规律,可以以单个的kernel模块作为优化单元,在维持接口的信号、时序以及功能不变的条件下,通过对该kernel的内部代码进行有针对性的修改和优化,实现与自动生成的其他代码和其他kernel模块进行无缝对接,并提升该kernel的性能。
[0014]具体方案如下:
一种提高OpenCL硬件执行效率的方法,包括以下步骤:
S1:使用编译器对以OpenCL语言实现的kernel模块进行编译,调用高级综合工具生成相应的veri log代码;
S2:分析生成的、以ver i 1g语言描述的kerne I模块的接口,记录所述接口的信号、时序和功能,并保证在后续步骤中上述信号、时序和功能保持不变;
S3:根据性能、占用资源的指标要求,对kernel模块的veri log代码进行针对性的优化,将优化后的verilog代码备份存档,以免被后续的OpenCL编译过程覆盖;
S4:修改OpenCL开发环境中负责流程控制的脚本,在整个编译过程的高级综合步骤之后,插入文件替换命令,用优化后的verilog代码替换编译器自动生成的verilog代码;
S5:重新使用编译器对OpenCL语言实现的kernel模块进行编译,步骤4中修改的流程控制脚本会自动完成指定文件的替换,即将步骤3中优化过的veri log代码代替本步骤中自动生成的verilog代码,随后OpenCL开发环境自动调用FPGA综合工具,完成后续的综合、布局、布线等步骤,生成最终所需的FPGA配置文件
详述的,所述对kernel模块的veri log代码进行针对性的优化方式包括通过解析OpenCL编译环境的运行步骤和分析自动生成的veri log代码的结构与接口,识别veri log代码中可被优化和改进的部分,进行有针对性的修改、手工优化、部分替换或是全部替换。
[0015]进一步详述的,所述修改OpenCL开发环境中负责流程控制的脚本的方式包括在脚本中插入监控命令和文件替换命令,当检测到编译过程中的高级综合步骤完成后,采用优化过的Veri log代码替换编译器自动生成的Veri log代码。
[0016]本发明的有益效果是:
与现有技术相比,本发明通过解析OpenCL编译环境的运行步骤,分析其自动生成的veri log代码结构,记录了kernel模块的接口信号及相关时序,针对高级综合工具自动生成的verilog代码中可被优化和改进的部分,进行手工的修改和优化、部分替换甚至全部替换。本发明保留了完整的OpenCL环境与流程,同时又极大的提高了kernel模块的工作效率,包括提高工作时钟,实现更多的功能,充分利用FPGA的硬件资源,如可以使FPGA中的DSP模块的利用率达到80%以上,而自动生成的verilog代码是不可能达到这么高的利用率的,所以本发明能够极大的提高FPGA的资源利用率和执行效率。
【附图说明】
[0017]图1为本发明的方法流程图;
图2为AOCL环境中开发程序流程图。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1