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

文档序号:9687746阅读:来源:国知局
【具体实施方式】
[0018]下面结合附图进一步详细描述本发明的技术方案。
[0019]OpenCL编译器在运行的过程中,会使用高级综合技术将OpenCL代码转换为veri log代码。不同的工具所生成的ver i log代码具有千差万别的层次结构和编码风格,但是在接口方面都具有一定的规律性和相似性。以AOCL环境为例,用OpenCL实现的kernel模块,可能带有不同的参数变量。当生成为verilog代码之后,接口却具有高度的一致性。除了必需的时钟信号和复位信号之外,kernel模块与外部存储设备如DDR,QDR等实现通信,必须通过标准的Avalon总线接口 ;其次,主机执行代码向kernel模块传递参数变量时,多采用存储器读写的方式,对kernel模块来说是控制类型的总线接口 ;再次,主机执行代码与kernel模块之间还需要负责流程控制的信号,比如开始,结束,中断等。对于多kernel的模块,每一个kernel都具有上述的若干个端口。基于上述规律,可以以单个的kernel模块作为优化单元,在维持接口的信号、时序以及功能不变的条件下,通过对该kerne I的内部代码进行有针对性的修改和优化,实现与自动生成的其他代码和其他kerne I模块无缝对接,并提升该kernel的性能。
[0020]基于上述描述,本发明所述的一种提高OpenCL硬件执行效率的方法,如图1所示,包括以下步骤:
S1:使用编译器对以OpenCL语言实现的kernel模块进行编译,调用高级综合工具生成相应的veri log代码;
S2:分析生成的、以ver i I og语言描述的kerne I模块的接口,记录所述接口的信号、时序和功能,并保证在后续步骤中上述信号、时序和功能保持不变;
S3:根据性能、占用资源的指标要求,对kernel模块的veri log代码进行针对性的优化,将优化后的verilog代码备份存档,以免被后续的OpenCL编译过程覆盖;
S4:修改OpenCL开发环境中负责流程控制的脚本,在整个编译过程的高级综合步骤之后,插入文件替换命令,用优化后的verilog代码替换编译器自动生成的verilog代码;
S5:重新使用编译器对OpenCL语言实现的kernel模块进行编译,步骤4中修改的流程控制脚本会自动完成指定文件的替换,即将步骤3中优化过的veri log代码代替本步骤中自动生成的verilog代码,随后OpenCL开发环境自动调用FPGA综合工具,完成后续的综合、布局、布线等步骤,生成最终所需的FPGA配置文件。
[0021]上述方法中步骤一所述的编译器由Altera SDK for OpenCL或者其他公司的OpenCL开发环境提供,优化的主要内容包括生成的Verilog代码在硬件平台即FPGA上的工作频率,占用的逻辑资源数量等方面,例如:自动生成的Verilog代码性能不够,可以通过在关键路径增加流水线级数,从而提高FPGA的工作频率,使kernel模块的性能得到改善;又或者由于自动生成的Verilog代码资源占用太多,可以删除冗余逻辑,降低缓存容量,使得FPGA逻辑资源利用率维持在合理水平。
[0022]详述的,所述对kerneI模块的veri log代码进行针对性的优化方式包括通过解析OpenCL编译环境的运行步骤和分析自动生成的veri log代码的结构与接口,识别veri log代码中可被优化和改进的部分,进行有针对性的修改、手工优化、部分替换或是全部替换。
[0023]对于解析OpenCL编译环境的运行步骤和分析自动生成的verilog代码的结构与接口的方法,主要包括以下步骤:
Kl:通过原始的OpenCL编译环境在运行过程中打印出的日志信息分析其大体的执行步骤;
K2:通过调试工具,例如Altera的SignalTap工具进一步抓取底层的硬件握手信号,观察上层控制命令在底层的具体操作步骤。
[0024]由上述步骤了解整个OpenCL开发环境的运行过程,由此方便在脚本中插入监控命令和文件替换命令。
[0025]进一步详述的,所述修改OpenCL开发环境中负责流程控制的脚本的方式包括在脚本中插入监控命令和文件替换命令,当检测到编译过程中的高级综合步骤完成后,采用优化过的Veri log代码替换编译器自动生成的Veri log代码。
[0026]对于上述方法中的步骤S2,由于基于Altera提供的OpenCL环境,由CL文件生成的Veri log,其结构基本类似,这也是本设计中可以手工修改Veri log代码的基础,所以不用每次都分析。
[0027]上述方法,在保证kerneI模块接口不变的前提下,我们可以对OpenCL编译器自动生成的代码进行有针对性的修改,手工优化,部分替换甚至全部替换,以实现kernel模块性能的提升。本发明既保留了完整的OpenCL环境与流程,又提高了硬件设计的质量,使OpenCL在FPGA平台上的执行效率得到大幅度提高。
[0028]以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【主权项】
1.一种提高OpenCL硬件执行效率的方法,其特征在于:包括以下步骤: S1:使用编译器对以OpenCL语言实现的kernel模块进行编译,调用高级综合工具生成相应的verilog代码; S2:分析生成的、以ver i log语言描述的kerne I模块的接口,记录所述接口的信号、时序和功能,并保证在后续步骤中上述信号、时序和功能保持不变; S3:根据性能、占用资源的指标要求,对kernel模块的verilog代码进行针对性的优化,将优化后的verilog代码备份存档,以免被后续的OpenCL编译过程覆盖; S4:修改OpenCL开发环境中负责流程控制的脚本,在整个编译过程的高级综合步骤之后,插入文件替换命令,用优化后的verilog代码替换编译器自动生成的verilog代码; S5:重新使用编译器对OpenCL语言实现的kernel模块进行编译,步骤4中修改的流程控制脚本会自动完成指定文件的替换,即将步骤3中优化过的verilog代码代替本步骤中自动生成的verilog代码,随后OpenCL开发环境自动调用FPGA综合工具,完成后续的综合、布局、布线步骤,生成最终所需的FPGA配置文件。2.根据权利要求1所述的提高OpenCL硬件执行效率的方法,其特征在于:所述对kernel模块的verilog代码进行针对性的优化方式包括通过解析OpenCL编译环境的运行步骤和分析自动生成的verilog代码的结构与接口,识别verilog代码中可被优化和改进的部分,进行有针对性的修改、手工优化、部分替换或是全部替换。3.根据权利要求1所述的提高OpenCL硬件执行效率的方法,其特征在于:所述修改OpenCL开发环境中负责流程控制的脚本的方式包括在脚本中插入监控命令和文件替换命令,当检测到编译过程中的高级综合步骤完成后,采用优化过的Verilog代码替换编译器自动生成的Veri log代码。
【专利摘要】本发明公开了一种提高OpenCL硬件执行效率的方法,包括以下步骤:编译以OpenCL语言实现的kernel模块,调用高级综合工具生成verilog代码;分析自动生成的verilog代码的结构,记录接口的信号、时序和功能;对verilog代码进行手工修改和优化,并备份存档;修改流程控制的脚本,插入文件替换命令,用优化后的verilog代码替换编译器自动生成的verilog代码;重新运行OpenCL编译器,生成最终的FPGA配置文件,本发明保留了完整的OpenCL环境与流程,通过解析OpenCL编译环境的运行步骤和分析verilog代码的结构与接口,使手工修改和优化自动生成的verilog代码成为可能,从而提升kernel模块性能,包括提高工作时钟,实现更多的功能,充分利用FPGA的硬件资源,使OpenCL在FPGA平台上的执行效率得到大幅度提高。
【IPC分类】G06F17/50
【公开号】CN105447285
【申请号】CN201610039665
【发明人】程爱莲, 王文华
【申请人】杭州菲数科技有限公司
【公开日】2016年3月30日
【申请日】2016年1月20日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1