一种逆向解析GPU指令的方法及系统技术方案

技术编号:15638931 阅读:122 留言:0更新日期:2017-06-15 20:19
本发明专利技术提出一种逆向解析GPU指令的方法及系统,涉及GPU微体系结构、编译器代码生成技术和程序优化技术领域,该方法包括将所述GPU指令进行编译,生成编译文件,将所述编译文件进行反汇编,生成反汇编文件,通过汇编解析器将所述反汇编文件表示成instMap变量,其中所述instMap变量的变量类型包括操作码、修饰码、指令、操作数与对应的操作数类型;将所述instMap变量输入到解码求解器,所述解码求解器判断所述instMap变量的变量类型,并通过已经确定的所述操作码或修饰码查找相对应的编码。本发明专利技术在破解指令编码的基础上,结合PTX文档,可构造GPU汇编器;为GPU编译器提供了一些编译辅助功能,提高GPU程序的效率;可设计和标准化一系列的微基准测试程序来探测GPU微架构特性和参数。

【技术实现步骤摘要】
一种逆向解析GPU指令的方法及系统
本专利技术涉及GPU微体系结构、编译器代码生成技术和程序优化
,特别涉及一种逆向解析GPU指令的方法及系统。
技术介绍
多年来,GPU厂商只向用户提供由驱动封装的上层API,而尽量少地暴露其内部原理和细节,如驱动的软件架构、GPU的微架构、指令集等。这导致学术界在GPU架构研究领域,大幅落后于工业界,长期处于停滞状态,在GPU只用于图形加速的年代,这种保守策略在实际应用中并不成为一个突出的问题,甚至具有一定的合理性:最初的绘图API与硬件实现强相关,API只是硬件功能的简单封装,API本身已经暴露了足够多的硬件细节,早期版本的openGL接口更是被称作三维绘图的汇编语言;另外,绘图API的直接调用者非常少,游戏都是基于渲染引擎开发,显卡厂商只要协助优化好主流的渲染引擎,就可以保证绝大多数游戏的流畅运行;从而,显卡厂商可以更自由地改进和创新微架构,无需在底层进行后向兼容,只需在软件封装的绘图API层次上后向兼容即可。处于垄断地位的GPU厂商Nvidia维持了技术封闭的惯性,不提供汇编器,不支持最底层的汇编编程,也不公开那些只在汇编层次上才能控制的硬件架构特性,作为补充,它提供了底层接口PTX,虽然是和汇编很接近的中间表示,但PTX对硬件的控制能力要低于汇编,比如,PTX不能控制寄存器分配,也不能精确控制指令的调度行为,上层的类C接口对硬件的控制能力更弱,开发人员为了提升性能,只能寄希望于编译器优化,然而,“DanielJBernstein,Hsieh-ChungChen,Chen-MouCheng,TanjaLange,RubenNiederhagen,PeterSchwabe,andBo-YinYang.Usableassemblylanguageforgpus:asuccessstory.IACRCryptologyePrintArchive,2012:137,2012.”指出Nvidia提供的编译器NVCC生成的代码效率并不高,比如寄存器分配存在大量bank冲突,实际上,Nvidia发布的许多并行算法库,都是基于内部的汇编器,再进行手工汇编优化,才达到较为理想的效率,问题是,不同于三维绘图领域只有少量的渲染引擎开发商,GPGPU的用户群广泛而多样,而Nvidia只对少量算法库进行了手工汇编优化,只对少量大客户提供了官方支持,其余大量用户却无法从昂贵的GPGPU硬件上榨取出最大的性能,这是对计算资源的巨大浪费,更糟糕的是,许多应用极为广泛的核心算法,Nvidia也并没有优化到位,比如单精度浮点矩阵乘(singe-precisionmatrixmultiplication),Nvidia针对主流Kepler架构的手工汇编优化版,效率只达到理论峰值的74%,是第三方优化的单精度浮点乘和NVIDIA厂商的cuBLAS中的SGEMM性能对比,第三方汇编优化的比cuBLAS性能更高,这些研究表明汇编优化对于挖掘GPU的性能很有价值。一些研究者在GPU性能调优和工具上有一些零散的进展,比如微基准测试程序“Zhang,Yao,andJohnD.Owens."AquantitativeperformanceanalysismodelforGPUarchitectures."In2011IEEE17thInternationalSymposiumonHighPerformanceComputerArchitecture,pp.382-393.IEEE,2011.”“XinxinMei,KaiyongZhao,ChengjianLiu,andXiaowenChu.Benchmarkingthememoryhierarchyofmoderngpus.InNetworkandParallelComputing,pages144–156.Springer,2014.”“HenryWong,Misel-MyrtoPapadopoulou,MaryamSadooghi-Alvandi,andAndreasMoshovos.Demystifyinggpumicroarchitecturethroughmicrobenchmarking.InPerformanceAnalysisofSystems&Software(ISPASS),2010IEEEInternationalSymposiumon,pages235–246.IEEE,2010.”、汇编器和GPU汇编级别的优化,然而,他们的工作都只集中在某个单一层面上,没有提出一个能在新一代架构上延续的通用技术,比如指令破解方法和相应的自动化工具,另外GPU还没有汇编级别的公开基准测试程序,大部分正在使用的基准测试程序都是基于CUDA,从而导致测试的结果并不可靠。
技术实现思路
针对现有技术的不足,本专利技术提出一种逆向解析GPU指令的方法及系统。本专利技术提出一种逆向解析GPU指令的方法,包括:步骤1,将所述GPU指令进行编译,生成编译文件,将所述编译文件进行反汇编,生成反汇编文件,通过汇编解析器将所述反汇编文件表示成instMap变量,其中所述instMap变量的变量类型包括操作码、修饰码、指令、操作数与对应的操作数类型;步骤2,将所述instMap变量输入到解码求解器,所述解码求解器判断所述instMap变量的变量类型,并通过已经确定的所述操作码或修饰码查找相对应的编码。若所述解码求解器分别对所述instMap变量的64位编码的每一位进行探测,再通过反汇编将所述64位编码进行反汇编,如果生成的新反汇编的指令与所述64位编码原有指令的指令名称不一样,则说明所述64位编码当前位表示操作码,根据所述当前位,对操作码在编码空间中进行枚举。将所述instMap变量中指令的名称与操作数类型作为关键字查询visited字典,对于所述instMap变量里的每一条指令,探测除了操作数之外的其他位,返回已修改的某一位操作数,将<指令,操作数类型>在visited字典里标注为1,表示已经访问过了。通过将所述instMap变量中指令逐位进行异或,通过修饰码是否改变完成探测修饰码,找到每条指令的修饰码的编码空间后,在修饰码的编码空间进行枚举,找出所有的修饰码的名称,然后根据某一修饰码的名称,找出所有带所述某一修饰码的指令的所有交集,最后将编码与所有带所述某一修饰码的指令的操作码的编码做异或,获取修饰码的编码。根据操作数的名称,获取与其相对应的编码。本专利技术还提出一种逆向解析GPU指令的系统,其特征在于,包括:生成变量模块,用于将所述GPU指令进行编译,生成编译文件,将所述编译文件进行反汇编,生成反汇编文件,通过汇编解析器将所述反汇编文件表示成instMap变量,其中所述instMap变量的变量类型包括操作码、修饰码、操作数与对应的操作数类型;查找编码模块,用于将所述instMap变量输入到解码求解器,所述解码求解器判断所述instMap变量的变量类型,并通过已经确定的所述操作码或修饰码查找其余编码。若所述解码求解器分别对所述instMap变量的64位编码的每一位进行探测,再通过反汇编将所述64位编码进行反汇编,如果生成的新反汇编的指令与所述64位编本文档来自技高网
...
一种逆向解析GPU指令的方法及系统

【技术保护点】
一种逆向解析GPU指令的方法,其特征在于,包括:步骤1,将所述GPU指令进行编译,生成编译文件,将所述编译文件进行反汇编,生成反汇编文件,通过汇编解析器将所述反汇编文件表示成instMap变量,其中所述instMap变量的变量类型包括操作码、修饰码、指令、操作数与对应的操作数类型;步骤2,将所述instMap变量输入到解码求解器,所述解码求解器判断所述instMap变量的变量类型,并通过已经确定的所述操作码或修饰码查找相对应的编码。

【技术特征摘要】
1.一种逆向解析GPU指令的方法,其特征在于,包括:步骤1,将所述GPU指令进行编译,生成编译文件,将所述编译文件进行反汇编,生成反汇编文件,通过汇编解析器将所述反汇编文件表示成instMap变量,其中所述instMap变量的变量类型包括操作码、修饰码、指令、操作数与对应的操作数类型;步骤2,将所述instMap变量输入到解码求解器,所述解码求解器判断所述instMap变量的变量类型,并通过已经确定的所述操作码或修饰码查找相对应的编码。2.如权利要求1所述的逆向解析GPU指令的方法,其特征在于,若所述解码求解器分别对所述instMap变量的64位编码的每一位进行探测,再通过反汇编将所述64位编码进行反汇编,如果生成的新反汇编的指令与所述64位编码原有指令的指令名称不一样,则说明所述64位编码当前位表示操作码,根据所述当前位,对操作码在编码空间中进行枚举。3.如权利要求1所述的逆向解析GPU指令的方法,其特征在于,将所述instMap变量中指令的名称与操作数类型作为关键字查询visited字典,对于所述instMap变量里的每一条指令,探测除了操作数之外的其他位,返回已修改的某一位操作数,将<指令,操作数类型>在visited字典里标注为1,表示已经访问过了。4.如权利要求1所述的逆向解析GPU指令的方法,其特征在于,通过将所述instMap变量中指令逐位进行异或,通过修饰码是否改变完成探测修饰码,找到每条指令的修饰码的编码空间后,在修饰码的编码空间进行枚举,找出所有的修饰码的名称,然后根据某一修饰码的名称,找出所有带所述某一修饰码的指令的所有交集,最后将编码与所有带所述某一修饰码的指令的操作码的编码做异或,获取修饰码的编码。5.如权利要求1所述的逆向解析GPU指令的方法,其特征在于,根据操作数的名称,获取与其相对应的编码。6.一种逆向...

【专利技术属性】
技术研发人员:谭光明张秀霞
申请(专利权)人:中国科学院计算技术研究所中国科学院国有资产经营有限责任公司
类型:发明
国别省市:北京,11

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

1