买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:北京计算机技术及应用研究所
摘要:本发明涉及一种OpenCL自动转译方法,属于代码转译领域。本发明将C或C++源码文件编译成LLVMIR文件,用LLVMpolly检测出IR文件的静态控制块SCOP,将IR文件中的SCOP映射到源码文件中SCOP的上下界行号位置,插入指令后送入到PPCG进行OpenCL转换。本发明将C或C++源码文件中能进行多面体建模的代码区域SCOP位置自动识别出来,解决了人工在源码文件中进行SCOP识别需要专家知识、且效率低的问题;能自动扫描工程中的所有C或C++源码文件,将符合多面体建模的文件批量转化为OpenCL主机端和设备端源码文件,较大的提高了转译效率。
主权项:1.一种OpenCL自动转译方法,其特征在于,该方法包括如下步骤:S1、用自动化脚本遍历工程内的每一个C或C++源码文件,用LLVM的clang编译器将其编译为LLVMIR文件,编译指令须传入-g参数、工程源码所引用的所有非标准库头文件目录;用LLVM的opt工具传入-polly-canonicalize参数将IR文件规范化;S2、遍历所有IR文件,用LLVMpolly的detect函数检测每一个IR文件,按函数遍历,检测出所有静态控制块SCOP,并保存C或C++源码文件名到对应的IR文件名的映射、IR文件名到其包含的所有SCOP的映射;S3、遍历所有C或C++源码文件名,根据步骤S2中映射,找到对应的IR文件的SCOP,遍历SCOP,将IR文件中的SCOP映射到此IR文件对应的C或C++源码文件SCOP的上界行号和下界行号;S4、遍历C或C++源码文件中的SCOP,并在待转译的SCOP上下行号处插入指令;插入指令按pet插入指令的有效规则,上行号处是指SCOP上界行号的上一行空白处,下行号是指SCOP下界行号的下一行空白处;将插入指令的源码文件,送入到PPCG进程中进行转换,生成OpenCL主机端和设备端源码文件;PPCG进程引用的第三方库pet的foreach_scop_in_C_source函数中的clang编译实例须添加工程源码所引用的所有非标准库头文件目录;其中,所述步骤S3中,将IR文件中SCOP映射到C或C++源码文件SCOP的上界行号和下界行号的具体流程为:S31、提取IR文件中SCOP基本块范围:将SCOP所在区域中的所有基本块保存;S32、遍历IR文件中SCOP所在函数的循环,根据循环包含的基本块是否是此SCOP包含基本块的子集,来判断此SCOP是否包含该循环,将SCOP包括的所有循环保存;S33、用LLVM的位置信息类DebugLoc获取IR文件中SCOP包括的所有循环在C或C++源码文件中对应循环的开始行号;S34、计算源码文件中SCOP上界行号:将IR文件中SCOP中包含的循环按步骤S33获取的开始行号从小到大排序,最开始的循环的开始行号,即IR文件对应的C或C++源码文件SCOP中的上界行号;S35、计算源码文件中SCOP下界行号:根据步骤S34的排序,最后面的循环的开始行号,即源码文件中SCOP最后一个循环的开始行号;用clang的ast_matchers匹配算法匹配到该SCOP所在的源码文件的所有循环节点,循环节点包括for循环、while循环,用LLVM的FullSourceLoc类获取所有循环节点的开始行号,根据SCOP最后一个循环的开始行号,匹配到该开始行号对应的循环节点,用LLVM的PresumedLoc类获取该循环节点的结束行号,即源码文件中SCOP的下界行号;clangast的编译参数类CommonOptionsParser须传入工程源码所引用的所有非标准库头文件目录、C和C++标准库头文件目录;所述S4中,待转译的SCOP是指根据OpenCL转换的方式选择不同的SCOP,支持批量转换和单个转换方式,批量转换是将每个源码文件中的SCOP看作待转译的SCOP并插入指令,将插入指令的源码文件送入到PPCG中进行转换;单个转换是指遍历每个源码文件中的SCOP,将SCOP的源码提供给用户,用户选择是否转译此SCOP,选择完毕后,将所有选择到的SCOP看作待转译的SCOP并插入指令,将插入指令的源码文件送入到PPCG中进行转换。
全文数据:
权利要求:
百度查询: 北京计算机技术及应用研究所 一种OpenCL自动转译方法
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。