System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于代码转译领域,具体涉及一种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超出了这些工具
技术实现思路
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
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...
【专利技术属性】
技术研发人员:周康乐,赵漫菲,瞿秋薏,籍雁翔,
申请(专利权)人:北京计算机技术及应用研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。