System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种OpenCL自动转译方法技术_技高网

一种OpenCL自动转译方法技术

技术编号:39993591 阅读:8 留言:0更新日期:2024-01-09 02:32
本发明专利技术涉及一种OpenCL自动转译方法,属于代码转译领域。本发明专利技术将C或C++源码文件编译成LLVM IR文件,用LLVMpolly检测出IR文件的静态控制块SCOP,将IR文件中的SCOP映射到源码文件中SCOP的上下界行号位置,插入指令后送入到PPCG进行OpenCL转换。本发明专利技术将C或C++源码文件中能进行多面体建模的代码区域SCOP位置自动识别出来,解决了人工在源码文件中进行SCOP识别需要专家知识、且效率低的问题;能自动扫描工程中的所有C或C++源码文件,将符合多面体建模的文件批量转化为OpenCL主机端和设备端源码文件,较大的提高了转译效率。

【技术实现步骤摘要】

本专利技术属于代码转译领域,具体涉及一种opencl自动转译方法。


技术介绍

1、自动编译工具通过检测串行程序中所蕴含的潜在并行性,实现从串行程序到等价并行程序的自动转换。多面体模型(polytope model)编译技术借助强大的循环变换和优化能力,在面向异构系统的代码生成技术方面取得了很多突破。

2、目前有两种进行多面体编译的路线,一种是在中间语言上做抽象分析,进行多面体建模,生成的并行化代码是可执行文件,如llvm的polly项目,llvm是构架编译器的框架系统,以c++编写而成,polly是面向llvm中间语言ir的多面体编译框架,可以生成面向cpu的openmp代码可执行文件、面向gpu的cuda代码可执行文件。另一种是在源码上做多面体抽象分析,生成的并行化代码也是源码。例如多面体编译工具ppcg(polyhedralparallelcode generation),可支持用户手动给c或c++源码中的静态控制块scop(static controlparts)插入编译指令,代表这部分代码可以被多面体建模,然后用第三方库多面体提取工具pet(polyheral extractiontool)将插入指令的scop进行多面体建模,进一步生成面向gpu平台的cuda或opencl源代码。

3、对于将c或c++源码转译为opencl源码,有如下问题:(1)在scop检测上,对于源码,目前的工具均主要支持人工插入指令提取。在源码中进行多面体提取的工具有pet、clan,自动在源码中提取scop超出了这些工具的分析能力;基于中间语言表示的框架,如llvm的polly可以更好的自动检测到scop,但polly的scop检测、及一系列分析均是在中间语言ir上进行的,生成的cuda代码也是二进制的可执行文件,不方便进一步代码优化和扩展。因此目前缺乏在c或c++源码中自动提取出scop的技术。(2)在面向异构系统的多面体编译技术上,缺乏从大量工程源码文件中,自动扫描可多面体建模的区域,进行opencl源码转换的技术。


技术实现思路

1、(一)要解决的技术问题

2、本专利技术要解决的技术问题是如何提供一种opencl自动转译方法,以解决现有将c或c++源码转换为opencl源码的技术自动化程度不高,不支持批量转换的问题。

3、(二)技术方案

4、为了解决上述技术问题,本专利技术提出一种opencl自动转译方法,该方法包括如下步骤:

5、s1、用自动化脚本遍历工程内的每一个c或c++源码文件,用llvm的clang编译器将其编译为llvm ir文件,编译指令须传入-g参数、工程源码所引用的所有非标准库头文件目录;用llvm的opt工具传入-polly-canonicalize参数将ir文件规范化;

6、s2、遍历所有ir文件,用llvmpolly的detect函数检测每一个ir文件,按函数遍历,检测出所有静态控制块scop,并保存c或c++源码文件名到对应的ir文件名的映射、ir文件名到其包含的所有scop的映射;

7、s3、遍历所有c或c++源码文件名,根据步骤s2中映射,找到对应的ir文件的scop,遍历scop,将ir文件中的scop映射到此ir文件对应的c或c++源码文件scop的上界行号和下界行号;

8、s4、遍历c或c++源码文件中的scop,并在待转译的scop上下行号处插入指令;插入指令按pet插入指令的有效规则,上行号处是指scop上界行号的上一行空白处,下行号是指scop下界行号的下一行空白处;将插入指令的源码文件,送入到ppcg进程中进行转换,生成opencl主机端和设备端源码文件;ppcg进程引用的第三方库pet的foreach_scop_in_c_source函数中的clang编译实例须添加工程源码所引用的所有非标准库头文件目录。

9、本专利技术还提供一种opencl自动转译工具,该工具包括:服务层、应用层和显示层;

10、服务层包括预处理脚本服务、scop检测进程服务、ast行号计算服务和ppcgopencl转换进程服务;

11、预处理脚本服务:用python脚本遍历工程中所有c或c++源文件,用llvm的clang编译器将源文件转换为llvm ir中间文件;将ir中间文件为ll文件;

12、scop检测进程服务:scop检测进程服务对传入的规范化后的ll文件,调用polly的detect函数进行scop检测,并将scop相关信息传出,包括:scop的源文件名到ll文件名的映射、ll文件中包括的所有scop、scop中包括的所有循环在源码文件中的上行行号;

13、ast行号计算服务:用于根据循环的开始行号计算循环的结束行号服务,通过对源码的语法和语义分析,将源码转化为抽象语法树ast,用clang的ast_matchers匹配算法匹配到该scop所在的源码文件的所有循环节点,循环节点包括for循环、while循环,用llvm的fullsourceloc类获取所有循环节点的开始行号,根据scop最后一个循环的开始行号,匹配到该开始行号对应的循环节点,用llvm的presumedloc类获取该循环节点的结束行号,即scop在源码文件中的下界行号;clang ast的编译参数类commonoptionsparser须传入工程源码所引用的所有非标准库头文件目录、c和c++标准库头文件目录;

14、ppcg opencl转换进程服务:传入插入scop指令的源码文件,传出opencl主机端和设备端文件,需要在ppcg引用的第三方库pet的源码中clang编译实例加入工程引用的所有头文件目录;

15、应用层:包括预处理应用、scop检测应用和opencl转换应用;

16、预处理应用:封装预处理python脚本服务,为显示层提供c++预处理接口;

17、scop检测应用:通过scop检测进程服务获取c或c++源码文件的所有scop及scop包括的循环开始行号信息,通过ast行号计算服务获取循环的结束行号信息,通过ir中scop映射到c或c++源码文件中scop位置的流程计算出所有scop在源码文件中的上界行号和下界行号;scop检测应用为显示层提供检测接口;

18、opencl转换应用:提供给显示层批量转换和单个转换接口,批量转换是在每一个源码文件中scop的上下行号处插入指令,在scop上界行号的上一行空白处插入#pragmascop,在scop下界行号的下一行空白处插入#pragma endscop;具体实现为:扫描源码文件,将源码文件逐行写入名称相同的新文件,匹配到scop的上界行号时,先新起一行写入#pragma scop,再将scop源码逐行写入写文件,然后新起一行写入#pragma endscop,按此方法逐行遍历到源码文件结尾,新的源码文件即为插入指令后的c或c++源码文件;单个转换是遍历源本文档来自技高网...

【技术保护点】

1.一种OpenCL自动转译方法,其特征在于,该方法包括如下步骤:

2.如权利要求1所述的OpenCL自动转译方法,其特征在于,上界行号和上行号处中间有注释行,下界行号和下行号处中间也有注释行。

3.如权利要求1所述的OpenCL自动转译方法,其特征在于,所述步骤S3中,计算IR文件中SCOP映射到C或C++源码文件SCOP的上界行号和下界行号的具体流程为:

4.如权利要求1所述的OpenCL自动转译方法,其特征在于,所述S4中,待转译的SCOP是指根据OpenCL转换的方式选择不同的SCOP,支持批量转换和单个转换方式,批量转换是将每个源码文件中的SCOP看作待转译的SCOP并插入指令,将插入指令的源码文件送入到PPCG中进行转换;单个转换是指遍历每个源码文件中的SCOP,将SCOP的源码提供给用户,用户选择是否转译此SCOP,选择完毕后,将所有选择到的SCOP看作待转译的SCOP并插入指令,将插入指令的源码文件送入到PPCG中进行转换。

5.如权利要求1所述的OpenCL自动转译方法,其特征在于,所述步骤S4中,判断参与转换的C或C++源码文件对应的OpenCL设备端源码文件是否为空,把不为空的进行统计,提供给用户转换成功的源码文件个数、及转换成功的OpenCL主机端和设备端文件路径。

6.如权利要求1-5任一项所述的OpenCL自动转译方法,其特征在于,所述OpenCL自动转译方法支持同类环境下使用时免安装LLVM和PPCG,具体方法如下:

7.如权利要求6所述的OpenCL自动转译方法,其特征在于,在未安装LLVM和PPCG的同类环境上使用OpenCL自动转译方法时,将原环境下编译的第三方库clang-cpp、isl、pet动态库放入到/usr/local/lib目录下,PPCG进程可执行文件、clang的ast_matchers匹配算法进程或动态库直接引用上述/usr/local/lib目录下的第三方库;opt工具可执行文件、clang工具可执行文件、LLVM SCOP检测可执行文件直接运行。

8.一种OpenCL自动转译工具,其特征在于,该工具包括:服务层、应用层和显示层;

9.如权利要求8所述的OpenCL自动转译工具,其特征在于,界面开发库选用Qt5.9;LLVM版本为17.0;PPCG使用的源码为ppcg-0.09.1;硬件开发和测试平台采用通用X86计算机,操作系统为ubuntu20.04;开发语言使用C++17,测试采用多面体模型编译测试集polybench-c-3.2。

10.如权利要求8所述的OpenCL自动转译工具,其特征在于,OpenCL转换应用还判断参与转换的C或C++源码文件对应的设备端源码文件是否为空,把不为空的进行统计,提供给显示层转换成功的源码文件个数、及转换成功的OpenCL主机端和设备端文件路径。

...

【技术特征摘要】

1.一种opencl自动转译方法,其特征在于,该方法包括如下步骤:

2.如权利要求1所述的opencl自动转译方法,其特征在于,上界行号和上行号处中间有注释行,下界行号和下行号处中间也有注释行。

3.如权利要求1所述的opencl自动转译方法,其特征在于,所述步骤s3中,计算ir文件中scop映射到c或c++源码文件scop的上界行号和下界行号的具体流程为:

4.如权利要求1所述的opencl自动转译方法,其特征在于,所述s4中,待转译的scop是指根据opencl转换的方式选择不同的scop,支持批量转换和单个转换方式,批量转换是将每个源码文件中的scop看作待转译的scop并插入指令,将插入指令的源码文件送入到ppcg中进行转换;单个转换是指遍历每个源码文件中的scop,将scop的源码提供给用户,用户选择是否转译此scop,选择完毕后,将所有选择到的scop看作待转译的scop并插入指令,将插入指令的源码文件送入到ppcg中进行转换。

5.如权利要求1所述的opencl自动转译方法,其特征在于,所述步骤s4中,判断参与转换的c或c++源码文件对应的opencl设备端源码文件是否为空,把不为空的进行统计,提供给用户转换成功的源码文件个数、及转换成功的opencl主机端和设备端文件路径。

6.如权利要求1-5任一项所述的opencl自动转译方法,其特征在于,所述op...

【专利技术属性】
技术研发人员:周康乐赵漫菲瞿秋薏籍雁翔
申请(专利权)人:北京计算机技术及应用研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1