CN116382700A - 面向vliw和simd架构的编译器自动调试方法及系统 - Google Patents

面向vliw和simd架构的编译器自动调试方法及系统 Download PDF

Info

Publication number
CN116382700A
CN116382700A CN202310400020.7A CN202310400020A CN116382700A CN 116382700 A CN116382700 A CN 116382700A CN 202310400020 A CN202310400020 A CN 202310400020A CN 116382700 A CN116382700 A CN 116382700A
Authority
CN
China
Prior art keywords
program
operand
checked
instructions
compiler
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310400020.7A
Other languages
English (en)
Inventor
时洋
邓灿
陈照云
文梅
赵宵磊
王家男
王耀华
扈啸
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202310400020.7A priority Critical patent/CN116382700A/zh
Publication of CN116382700A publication Critical patent/CN116382700A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种面向VLIW和SIMD架构的编译器自动调试方法及系统,本发明方法包括针对待校验程序进行语义正确性校验以判断待校验程序相对源程序是否存在语义错误,若语义正确性校验发现存在语义错误,则判定调试不通过,否则针对待校验程序进行物理寄存器校验以判断待校验程序是否存在物理寄存器分配错误,若存在物理寄存器分配错误则判定调试不通过,否则判定调试通过;判定调试不通过时则生成反馈校验报告。本发明能够自动检查编译过程中程序的语义正确性,同时为开发人员提供精确的校验报告(包括错误发生位置和类型等),提高编译器开发的效率,减轻开发人员的负担。

Description

面向VLIW和SIMD架构的编译器自动调试方法及系统
技术领域
本发明涉及编译器调试技术领域,具体涉及一种面向VLIW和SIMD架构的编译器自动调试方法及系统。
背景技术
DSP(数字信号处理器)包含VLIW(超长指令字)和SIMD(单指令流多数据流)架构,其特点是多指令并行,能够通过矢量单元为数字信号处理提供高吞吐量和高并行度,进一步提高处理器性能。
VLIW和SIMD架构DSP的性能极大程度上决定于指令级并行的挖掘,但是该架构没有支持指令调度的硬件,需要通过编译器来实现指令并行执行,因此相对于其它架构(例如超标量)来说,VLIW和SIMD架构编译器的开发难度更大,实现也更复杂。编译器的功能是将源语言(通常是高级语言)翻译成目标语言(通常是汇编语言),其编译过程包括:代码解析,指令选择,指令调度,寄存器分配等。编译器在编译过程中会对程序进行优化,以达到提升程序性能的目的,其主要优化手段包括指令调度和寄存器分配。源语言首先被解析并翻译成一种IR(中间表示)作为输入,然后编译器对程序进行细粒度的指令级优化。IR由机器指令组成,与汇编指令的不同之处在于:汇编指令的操作数为物理寄存器,而IR机器指令的操作数为虚拟寄存器。在指令调度阶段,编译器对指令进行重排序,完成源程序的重构,生成完整的由机器指令组成的完整调度方案;在寄存器分配阶段,物理寄存器会被分配给机器指令从而代替原来的虚拟寄存器,生成汇编程序作为输出。在此过程中,会有三个不同版本的程序,即IR表示的源程序、IR表示的中间结果以及最后生成的汇编程序。其中IR表示的中间结果是对源程序完成指令调度得到的过渡程序,中间结果仍然是由IR机器指令组成,与源程序的不同在于其指令已经被重新排布。编译器开发的基本目标是保证目标程序(即汇编程序)能够正确执行,即保证程序的语义正确性。然而在实际应用中,编译器往往需要处理各种复杂的输入程序,并且在编译过程中由于指令重排导致代码重构以及需要处理不同类型的操作数,导致编译器开发人员需要考虑的因素众多。人工开发存在局限性,编译器在开发过程中也将不可避免地存在各种漏洞。这些编译器的漏洞最终将导致目标程序(即汇编程序)产生语义错误。引起语义错误的因素根据发生的阶段可以归类为以下三类:1)指令解析错误。在解析阶段需要读取指令的基本信息(例如执行周期、对应功能单元等),该过程中如果读取了错误的信息将会导致后续优化阶段出现决策错误,进而导致最后生成的汇编代码出现错误执行结果;2)调度策略错误。在指令调度阶段,如果调度策略出现错误(例如实际指令并行数量超过功能单元限制),则会导致错误的指令排序和打包;3)物理寄存器分配错误。在寄存器分配阶段,编译器将物理寄存器分配给指令,从而代替原来的虚拟寄存器,不同功能的指令需要分配相对应类型的物理寄存器,由于物理寄存器种类的多样性以及其数量限制引起的代码溢出等问题,容易导致物理寄存器在分配过程中出现访问冲突。以上这些错误隐藏在编译过程中,对开发人员来说,要想发现这些错误通常需要人工介入,通过逐条指令排查的方式排查,这无疑是一项艰巨且繁琐的工作,大大限制了编译器开发的效率。
发明内容
本发明要解决的技术问题:针对现有编译器调试方法存在的上述问题,提供一种面向VLIW和SIMD架构的编译器自动调试方法及系统,本发明能够自动检查编译过程中程序的语义正确性,同时为开发人员提供精确的校验报告(包括错误发生位置和类型等),提高编译器开发的效率,减轻开发人员的负担。
为了解决上述技术问题,本发明采用的技术方案为:
一种面向VLIW和SIMD架构的编译器自动调试方法,包括:
S101,针对待校验程序进行语义正确性校验以判断待校验程序相对源程序是否存在语义错误,若语义正确性校验发现存在语义错误,则跳转步骤S103,否则跳转步骤S102;
S102,针对待校验程序进行物理寄存器校验以判断待校验程序是否存在物理寄存器分配错误,若存在物理寄存器分配错误则跳转步骤S103,否则判定调试通过,结束并退出;
S103,判定调试不通过,生成反馈校验报告,结束并退出。
可选地,步骤S101中进行语义正确性校验包括:
S201,分别记录待校验程序及其源程序的数据流,所述待校验程序为中间结果或汇编程序,所述数据流中包括指令和操作数的序列构成;
S202,从数据流中遍历获取一个操作数作为当前操作数,若遍历成功则跳转步骤S203,若遍历完毕则判定待校验程序相对源程序不存在语义错误,结束并退出;
S203,针对当前操作数,分别将待校验程序及其源程序的数据流进行对比,如果待校验程序及其源程序的数据流中记录的指令一致,则判定当前操作数对比通过,跳转步骤S202;否则,判定当前操作数对比不通过,跳转步骤S204;
S204,检索确定当前操作数对比不通过的错误位置,确定当前操作数对比不通过对应的错误类型,并记录校验信息以用于生成反馈校验报告。
可选地,步骤S201包括:
301,分别为待校验程序及其源程序中的指令和操作数进行编号;
302,分别为待校验程序及其源程序进行指令解析,为所有的指令按照读取顺序由0开始编号;
303,为所有指令的操作数进行操作数编号,同时若操作数在指令中被定义则将定义操作数的指令的编号赋予给该操作数的操作数编号,若操作数在指令中被使用则由当前指令为起点反向遍历指令生效序列搜索最近一次定义该操作数的指令,并将定义该操作数的指令的编号赋值给该操作数的编号。
可选地,步骤301分别为待校验程序及其源程序中的指令和操作数进行编号时,指令和操作数编号的初始值均为-1。
可选地,步骤S204中确定当前操作数对比不通过对应的错误类型时,包括根据当前操作数对比不通过对应的指令对中指令的先后顺序,确定当前操作数对比不通过对应的错误类型为写后写错误、读后写错误或写后读错误。
可选地,步骤S102中进行物理寄存器校验包括:
S401,分别为待校验程序中的物理寄存器、源程序中的虚拟寄存器建立一对一的操作数映射关系;
S402,针对待校验程序及其源程序分别按照时间序列遍历其中的指令,分别针对待校验程序及其源程序中所定义的操作数记录生命周期;
S403,遍历获取待校验程序中的一个操作数作为当前操作数,若遍历成功则跳转步骤S404,若遍历完毕则判定待校验程序相对源程序不存在语义错误,结束并退出;
S404,判断当前操作数在待校验程序中的生命周期、在源程序中的生命周期是否存在周期重叠,若不存在周期重叠,则跳转步骤S403;否则,跳转步骤S405;
S405,检索确定当前操作数存在周期重叠的错误位置,确定当前操作数存在周期重叠的错误类型,并记录校验信息以用于生成反馈校验报告。
可选地,步骤S402中记录生命周期时,针对每一个操作数的操作包括:对于给定的某个操作数op,记录op第一次被定义的时间槽t1,将t1作为op生命周期的起点;以t1为起点,顺序遍历时间序列,找到op下一次被定义的时间槽t2,将t2作为op生命周期的终点,最后得到操作数op的生命周期[t1,t2];若后续时间序列中,存在对该操作数的定义,则更新该操作数的生命周期,将该操作数的生命周期的终点作为起点,当前定义该操作数的时间槽作为该操作数生命周期的终点。
可选地,步骤S405中确定当前操作数存在周期重叠的错误类型时,包括根据当前操作数对比不通过对应的指令对中指令的先后顺序,确定当前操作数对比不通过对应的错误类型为写后写错误、读后写错误或写后读错误。
此外,本发明还提供一种面向VLIW和SIMD架构的编译器自动调试系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行权所述面向VLIW和SIMD架构的编译器自动调试方法。
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行权所述面向VLIW和SIMD架构的编译器自动调试方法。
和现有技术相比,本发明主要具有下述优点:本发明通过对编译过程进行跟踪,检查每个编译阶段的语义,在无需人工介入的情况下,能够准确定位错误位置以及类型以为VLIW和SIMD架构编译器提供指令级调试,尤其本发明包括程序语义正确校验以及物理寄存器校验,能够自动检查编译过程中程序的语义正确性,同时为开发人员提供精确的校验报告(包括错误发生位置和类型等),提高编译器开发的效率,减轻开发人员的负担。
附图说明
图1为本发明实施例方法的基本流程示意图。
图2为本发明提出的语义正确性校验的流程示意图。
图3为本发明实施例中记录数据流的流程示意图。
图4为本发明提出的物理寄存器校验的流程示意图。
具体实施方式
下文将结合实施例和附图,对本发明进行进一步的详细说明。
如图1所示,本实施例面向VLIW和SIMD架构的编译器自动调试方法包括:
S101,针对待校验程序(中间结果或汇编程序)进行语义正确性校验以判断待校验程序相对源程序是否存在语义错误,若语义正确性校验发现存在语义错误,则跳转步骤S103,否则跳转步骤S102;
S102,针对待校验程序进行物理寄存器校验以判断待校验程序是否存在物理寄存器分配错误,若存在物理寄存器分配错误则跳转步骤S103,否则判定调试通过,结束并退出;
S103,判定调试不通过,生成反馈校验报告,结束并退出。
参见图1可知,本实施例面向VLIW和SIMD架构的编译器自动调试方法的功能主要由语义正确性校验和物理寄存器校验两个功能。
语义正确性校验目的是判断中间结果和汇编程序对比源程序是否存在语义错误;如图2所示,本实施例步骤S101中进行语义正确性校验包括:
S201,分别记录待校验程序及其源程序的数据流,所述待校验程序为中间结果或汇编程序,所述数据流中包括指令和操作数的序列构成;由于无法获取用户编程的原始用意,因此默认源程序不存在语义错误,并将其作为对照组;
S202,从数据流中遍历获取一个操作数作为当前操作数,若遍历成功则跳转步骤S203,若遍历完毕则判定待校验程序相对源程序不存在语义错误,结束并退出;
S203,针对当前操作数,分别将待校验程序及其源程序的数据流进行对比,如果待校验程序及其源程序的数据流中记录的指令一致,则判定当前操作数对比通过,跳转步骤S202;否则,判定当前操作数对比不通过,跳转步骤S204;
S204,检索确定当前操作数对比不通过的错误位置,确定当前操作数对比不通过对应的错误类型,并记录校验信息以用于生成反馈校验报告。
本实施例中,步骤S201包括:
301,分别为待校验程序及其源程序中的指令和操作数进行编号;
302,分别为待校验程序及其源程序进行指令解析,为所有的指令按照读取顺序由0开始编号;
303,为所有指令的操作数进行操作数编号,同时若操作数在指令中被定义则将定义操作数的指令的编号赋予给该操作数的操作数编号,若操作数在指令中被使用则由当前指令为起点反向遍历指令生效序列搜索最近一次定义该操作数的指令,并将定义该操作数的指令的编号赋值给该操作数的编号。本实施例中,步骤301分别为待校验程序及其源程序中的指令和操作数进行编号时,指令和操作数编号的初始值均为-1。
至此,所有指令和操作数都已完成编号,每条指令及其操作数的编号组成一个记录节点。由于本实施例方法是基于数据流实现的,程序的执行可以等效为对各个操作数的更新过程,因此还需要对各个操作数的更新(即定义)进行记录保存。
以图3为例,指令按照读取顺序由0至2编号,指令VFADDS32对操作数VR2进行定义,因此编号0赋值给VFADDS32中VR2的对应编号,其他定义操作数的编号赋值过程同理。指令VFMULS32分别使用了VFADDS32定义的VR2和VMOV定义的VR4,因此对两个操作数在VFADDS32中的编号分别赋值0和1,至此便完成了指令和操作数的编号。数据流的本质是数据更新的过程,在程序中表现为对操作数定义的过程。以VR2为例,将定义VR2的指令对应的记录按照生效顺序保存,即完成了对VR2的数据流记录。
本实施例中,步骤S204中确定当前操作数对比不通过对应的错误类型时,包括根据当前操作数对比不通过对应的指令对中指令的先后顺序,确定当前操作数对比不通过对应的错误类型为写后写错误、读后写错误和写后读错误。位源程序和待校验程序中数据流不一致的两条记录,两条记录对应对当前操作数进行定义的两条指令。语义错误在带校验程序(中间结果和汇编程序)中体现为指令的依赖关系(写后写,读后写和写后读)发生错误,而在数据流记录中则表现为记录顺序出错,因此只需要根据两条记录对应的指令之间存在的依赖关系就可以判断错误类型。例如存在写后写依赖的两条指令,它们有一个共同定义的操作数a,而两条指令对应的编号在操作数a的记录里有先后顺序。如果对操作数a定义的两条指令存在写后写冲突,则在待校验程序的操作数a记录中,两条指令对应编号的先后顺序会发生改变,由此可判断错误类型为操作数a的写后写冲突。其它两种错误类型可根据同理判断;
如图4所示,本实施例步骤S102中进行物理寄存器校验包括:
S401,分别为待校验程序中的物理寄存器、源程序中的虚拟寄存器建立一对一的操作数映射关系;
S402,针对待校验程序及其源程序分别按照时间序列遍历其中的指令,分别针对待校验程序及其源程序中所定义的操作数记录生命周期;
S403,遍历获取待校验程序中的一个操作数作为当前操作数,若遍历成功则跳转步骤S404,若遍历完毕则判定待校验程序相对源程序不存在语义错误,结束并退出;
S404,判断当前操作数在待校验程序中的生命周期、在源程序中的生命周期是否存在周期重叠,若不存在周期重叠,则跳转步骤S403;否则,跳转步骤S405;
S405,检索确定当前操作数存在周期重叠的错误位置,确定当前操作数存在周期重叠的错误类型,并记录校验信息以用于生成反馈校验报告。
本实施例中,步骤S402中记录生命周期时,针对每一个操作数的操作包括:对于给定的某个操作数op,记录op第一次被定义的时间槽t1,将t1作为op生命周期的起点;以t1为起点,顺序遍历时间序列,找到op下一次被定义的时间槽t2,将t2作为op生命周期的终点,最后得到操作数op的生命周期[t1,t2];若后续时间序列中,存在对该操作数的定义,则更新该操作数的生命周期,将该操作数的生命周期的终点作为起点,当前定义该操作数的时间槽作为该操作数生命周期的终点。
物理寄存器分配错误最终表现为指令的依赖关系错误,其错误类型可参照语义正确性校验模块中错误类型判断的方法。本实施例中,步骤S405中确定当前操作数存在周期重叠的错误类型时,包括根据当前操作数对比不通过对应的指令对中指令的先后顺序,确定当前操作数对比不通过对应的错误类型为写后写错误、读后写错误或写后读错误。
在编译器开发过程中,首要目标是保证编译器生成能够正确执行的目标程序。然而在实际工作过程中,编译环境复杂多样,加上开发人员本身的局限性,导致编译器不可避免的存在各种漏洞。最传统且直接的解决方法是手动介入进行调试,开发人员在调试过程中需要逐条指令排查,同时需要获取准确的错误信息来发掘编译器漏洞,这无疑是一项复杂且耗时的工作。尤其是遇到大规模(指令数量大于500)输入程序时,手动排查不仅会消耗更大的时间和精力,还容易发生遗漏。因此,本实施例从节约人力资源和提高开发效率的目的出发,设计了面向VLIW和SIMD架构的基于数据流的编译器自动调试方法及系统,通过对程序的指令进行编号和记录,能够自动追踪源程序在编译过程中的数据更新状态。最后通过对比数据流更新记录,判断源程序在编译过程中是否发生语义错误,同时通过数据记录搜索,向开发者反馈准确的错误位置以及错误类型等信息,从而加快编译器的开发进度。
寄存器分配是将机器指令中的虚拟寄存器替换成物理寄存器的过程。物理寄存器是一种宝贵的硬件资源,根据功能分成不同类型,而且每种类型的物理寄存器数量有限,因此在分配过程中需要用到寄存器复用以及溢出等技术来缓解寄存器压力。其中寄存器溢出将给程序引入新的存取指令,从而改变程序的原有结构,在实际应用中,寄存器溢出时常发生。显然,物理寄存器分配是编译器开发过程中一项复杂且具挑战性的工作,而编译器在工作过程中也容易在此阶段暴露出自身漏洞。因此,本实施例提出基于生命周期的寄存器校验方法,通过检查物理寄存器在生命周期内的读写状态,能够有效检查物理寄存器分配的正确性问题,同时向开发人员反馈相应的校验报告。
综上所述,本实施例方法的目的在于将开发人员从VLIW和SIMD架构编译器的调试工作中解放出来,能够为开发人员提供准确的错误信息位置以及错误类型,开发人员只需根据调试方法及系统反馈的错误信息便可有针对性地对编译器展开调试工作。本实施例方法在无需人工介入的情况下,能够自动检查源程序在编译过程中是否保持语义一致,同时检查物理寄存器分配的正确性,最后向开发人员反馈校验报告,包括错误位置以及错误类型,从而节省编译器的开发时间和人工成本。
此外,本实施例还提供一种面向VLIW和SIMD架构的编译器自动调试系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述面向VLIW和SIMD架构的编译器自动调试方法。此外,本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述面向VLIW和SIMD架构的编译器自动调试方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种面向VLIW和SIMD架构的编译器自动调试方法,其特征在于,包括:
S101,针对待校验程序进行语义正确性校验以判断待校验程序相对源程序是否存在语义错误,若语义正确性校验发现存在语义错误,则跳转步骤S103,否则跳转步骤S102;
S102,针对待校验程序进行物理寄存器校验以判断待校验程序是否存在物理寄存器分配错误,若存在物理寄存器分配错误则跳转步骤S103,否则判定调试通过,结束并退出;
S103,判定调试不通过,生成反馈校验报告,结束并退出。
2.根据权利要求1所述的面向VLIW和SIMD架构的编译器自动调试方法,其特征在于,步骤S101中进行语义正确性校验包括:
S201,分别记录待校验程序及其源程序的数据流,所述待校验程序为中间结果或汇编程序,所述数据流中包括指令和操作数的序列构成;
S202,从数据流中遍历获取一个操作数作为当前操作数,若遍历成功则跳转步骤S203,若遍历完毕则判定待校验程序相对源程序不存在语义错误,结束并退出;
S203,针对当前操作数,分别将待校验程序及其源程序的数据流进行对比,如果待校验程序及其源程序的数据流中记录的指令一致,则判定当前操作数对比通过,跳转步骤S202;否则,判定当前操作数对比不通过,跳转步骤S204;
S204,检索确定当前操作数对比不通过的错误位置,确定当前操作数对比不通过对应的错误类型,并记录校验信息以用于生成反馈校验报告。
3.根据权利要求2所述的面向VLIW和SIMD架构的编译器自动调试方法,其特征在于,步骤S201包括:
301,分别为待校验程序及其源程序中的指令和操作数进行编号;
302,分别为待校验程序及其源程序进行指令解析,为所有的指令按照读取顺序由0开始编号;
303,为所有指令的操作数进行操作数编号,同时若操作数在指令中被定义则将定义操作数的指令的编号赋予给该操作数的操作数编号,若操作数在指令中被使用则由当前指令为起点反向遍历指令生效序列搜索最近一次定义该操作数的指令,并将定义该操作数的指令的编号赋值给该操作数的编号。
4.根据权利要求3所述的面向VLIW和SIMD架构的编译器自动调试方法,其特征在于,步骤301分别为待校验程序及其源程序中的指令和操作数进行编号时,指令和操作数编号的初始值均为-1。
5.根据权利要求2所述的面向VLIW和SIMD架构的编译器自动调试方法,其特征在于,步骤S204中确定当前操作数对比不通过对应的错误类型时,包括根据当前操作数对比不通过对应的指令对中指令的先后顺序,确定当前操作数对比不通过对应的错误类型为写后写错误、读后写错误或写后读错误。
6.根据权利要求1所述的面向VLIW和SIMD架构的编译器自动调试方法,其特征在于,步骤S102中进行物理寄存器校验包括:
S401,分别为待校验程序中的物理寄存器、源程序中的虚拟寄存器建立一对一的操作数映射关系;
S402,针对待校验程序及其源程序分别按照时间序列遍历其中的指令,分别针对待校验程序及其源程序中所定义的操作数记录生命周期;
S403,遍历获取待校验程序中的一个操作数作为当前操作数,若遍历成功则跳转步骤S404,若遍历完毕则判定待校验程序相对源程序不存在语义错误,结束并退出;
S404,判断当前操作数在待校验程序中的生命周期、在源程序中的生命周期是否存在周期重叠,若不存在周期重叠,则跳转步骤S403;否则,跳转步骤S405;
S405,检索确定当前操作数存在周期重叠的错误位置,确定当前操作数存在周期重叠的错误类型,并记录校验信息以用于生成反馈校验报告。
7.根据权利要求6所述的面向VLIW和SIMD架构的编译器自动调试方法,其特征在于,步骤S402中记录生命周期时,针对每一个操作数的操作包括:对于给定的某个操作数op,记录op第一次被定义的时间槽t1,将t1作为op生命周期的起点;以t1为起点,顺序遍历时间序列,找到op下一次被定义的时间槽t2,将t2作为op生命周期的终点,最后得到操作数op的生命周期[t1,t2];若后续时间序列中,存在对该操作数的定义,则更新该操作数的生命周期,将该操作数的生命周期的终点作为起点,当前定义该操作数的时间槽作为该操作数生命周期的终点。
8.根据权利要求7所述的面向VLIW和SIMD架构的编译器自动调试方法,其特征在于,步骤S405中确定当前操作数存在周期重叠的错误类型时,包括根据当前操作数对比不通过对应的指令对中指令的先后顺序,确定当前操作数对比不通过对应的错误类型为写后写错误、读后写错误或写后读错误。
9.一种面向VLIW和SIMD架构的编译器自动调试系统,包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~8中任意一项所述面向VLIW和SIMD架构的编译器自动调试方法。
10.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序用于被微处理器编程或配置以执行权利要求1~8中任意一项所述面向VLIW和SIMD架构的编译器自动调试方法。
CN202310400020.7A 2023-04-13 2023-04-13 面向vliw和simd架构的编译器自动调试方法及系统 Pending CN116382700A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310400020.7A CN116382700A (zh) 2023-04-13 2023-04-13 面向vliw和simd架构的编译器自动调试方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310400020.7A CN116382700A (zh) 2023-04-13 2023-04-13 面向vliw和simd架构的编译器自动调试方法及系统

Publications (1)

Publication Number Publication Date
CN116382700A true CN116382700A (zh) 2023-07-04

Family

ID=86978614

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310400020.7A Pending CN116382700A (zh) 2023-04-13 2023-04-13 面向vliw和simd架构的编译器自动调试方法及系统

Country Status (1)

Country Link
CN (1) CN116382700A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117311727A (zh) * 2023-11-27 2023-12-29 摩尔线程智能科技(北京)有限责任公司 解析方法、装置、电子设备及存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117311727A (zh) * 2023-11-27 2023-12-29 摩尔线程智能科技(北京)有限责任公司 解析方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
KR101702651B1 (ko) 하드웨어 포인터를 이용한 simd 코어 내 분기 해법
US8645935B2 (en) Automatic parallelization using binary rewriting
US5713010A (en) Source line tracking in optimized code
CN101957773B (zh) 用于多轮次动态概要分析的方法及其系统
US20080104096A1 (en) Software development system
Ketterlin et al. Profiling data-dependence to assist parallelization: Framework, scope, and optimization
US9495136B2 (en) Using aliasing information for dynamic binary optimization
US20040230957A1 (en) Methods for comparing versions of a program
US20050144602A1 (en) Methods and apparatus to compile programs to use speculative parallel threads
CN1981266A (zh) 为优化的程序生成展开信息
US20120054722A1 (en) Trace generating unit, system, and program of the same
JP6342129B2 (ja) 混合モードプログラムのソースコードエラー位置検出装置及び方法
WO2010014981A2 (en) Method and apparatus for detection and optimization of presumably parallel program regions
JPH02217926A (ja) コード生成方法
EP2951682B1 (en) Hardware and software solutions to divergent branches in a parallel pipeline
Rauchwerger Run-time parallelization: Its time has come
CN116382700A (zh) 面向vliw和simd架构的编译器自动调试方法及系统
Wu et al. A new framework for debugging globally optimized code
CN113721899B (zh) 面向gpdsp的轻量级高效汇编代码编程方法及系统
Ayache et al. Certifying and reasoning on cost annotations in C programs
Jimborean et al. Online dynamic dependence analysis for speculative polyhedral parallelization
US6496976B1 (en) Method and system for dynamic recompilation of statements of a first language embedded in a program having statements of a second language
US20090064152A1 (en) Systems, methods and computer products for cross-thread scheduling
Mortensen Isolating Errors for an Assembly Optimizer
Omar et al. IR-Level Dynamic Data Dependence Using Abstract Interpretation Towards Speculative Parallelization

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination