CN116841592B - 指令管理方法、装置、计算机、存储介质及程序产品 - Google Patents

指令管理方法、装置、计算机、存储介质及程序产品 Download PDF

Info

Publication number
CN116841592B
CN116841592B CN202311112660.4A CN202311112660A CN116841592B CN 116841592 B CN116841592 B CN 116841592B CN 202311112660 A CN202311112660 A CN 202311112660A CN 116841592 B CN116841592 B CN 116841592B
Authority
CN
China
Prior art keywords
instruction
node
directed graph
graph data
scheduling
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.)
Active
Application number
CN202311112660.4A
Other languages
English (en)
Other versions
CN116841592A (zh
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311112660.4A priority Critical patent/CN116841592B/zh
Publication of CN116841592A publication Critical patent/CN116841592A/zh
Application granted granted Critical
Publication of CN116841592B publication Critical patent/CN116841592B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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)
  • Computer Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请实施例公开了一种指令管理方法、装置、计算机、存储介质及程序产品,该方法包括:获取程序代码,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;获取指令有向图数据中的边的初始权重,基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。采用本申请,可以提高代码调整的效率,提高代码指令调度的性能。

Description

指令管理方法、装置、计算机、存储介质及程序产品
技术领域
本申请涉及计算机技术领域,尤其涉及一种指令管理方法、装置、计算机、存储介质及程序产品。
背景技术
随着人工智能(Artificial Intelligence,AI)的迅猛发展,为许多领域带来了革命性的技术变革,例如自然语言处理、计算机视觉、电子商务、智慧城市、药物研发等领域。一般情况下,AI一般从AI软件框架层面及AI芯片层面等进行生成优化。其中,在AI芯片层面,主要有两类芯片架构方案,一类是在传统的芯片架构上增加AI加速功能,另一类是采用AI专用芯片。为了构建完整的应用生态,设计开发AI配套的工具链,尤其是其中的AI编译器,是一项关键性的工作。AI编译器通常采用经典的前、后端结构,将机器学习框架生成的模型与底层芯片相连接。具体的,在AI编译器后端的代码生成过程中,对代码指令的调整是一个重要的优化阶段,通常是对各个代码指令进行依次搜索调整,相当于是在各个代码指令可能的范围进行检测,直至对代码指令调整完成,而这一方式下,每个代码指令所需检测的范围很大,也就导致需要对每个代码指令检测很多次,从而使得代码调整效率低下。
发明内容
本申请实施例提供了一种指令管理方法、装置、计算机、存储介质及程序产品,可以提高代码调整的效率,提高代码指令调度的性能。
本申请实施例一方面提供了一种指令管理方法,该方法包括:
获取程序代码,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;
获取指令有向图数据中的边的初始权重,基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;
采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。
本申请实施例一方面提供了一种指令管理装置,该装置包括:
代码获取模块,用于获取程序代码;
图构建模块,用于以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;
权重获取模块,用于获取指令有向图数据中的边的初始权重;
权重更新模块,用于基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;
代码调整模块,用于采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。
其中,该权重更新模块,包括:
函数构建单元,用于采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行约束,得到指令有向图数据中的节点所对应的节点距离函数;
函数解析单元,用于对节点距离函数进行解析,得到指令有向图数据中的节点所对应的节点预测调度时间;
权重更新单元,用于基于指令有向图数据中的节点所对应的节点预测调度时间,确定指令有向图数据中的边的更新权重。
其中,节点距离函数包括第一节点距离函数及第二节点距离函数;
该函数构建单元,包括:
参数获取子单元,用于获取指令有向图数据中的边的边长度参数;
关键检测子单元,用于检测指令有向图数据中的边中的第一关键路径;
路径确定子单元,用于将指令有向图数据的边中除第一关键路径之外的边确定为常规路径;
第一构建子单元,用于采用指令有向图数据中的边的初始权重及边长度参数,对常规路径所对应的节点进行约束,构建常规路径所对应的第一节点距离函数;
第二构建子单元,用于采用指令有向图数据中的边的初始权重,对第一关键路径所对应的节点进行约束,构建第一关键路径所对应的第二节点距离函数。
其中,该参数获取子单元,具体用于:
从指令有向图数据中的边的初始权重中,获取最大初始权重,对最大初始权重进行权重扩大处理,得到指令有向图数据中的边的边长度参数;
该函数解析单元,包括:
函数解析子单元,用于采用第i+1个更新边长度参数,对节点距离函数进行解析;i为正整数;第一个更新边长度参数为边长度参数;
参数调整子单元,用于若对节点距离函数解析成功,则获取对节点距离函数解析得到的指令有向图数据中的节点的第i+1个节点更新调度时间,对第i+1个更新边长度参数进行参数调整,得到第i+2个更新边长度参数;
时间确定子单元,用于若对节点距离函数解析失败,则将采用第i个更新边长度参数得到的指令有向图数据中的节点的第i个节点更新调度时间,确定为指令有向图数据中的节点所对应的节点预测调度时间。
其中,该关键检测子单元,包括:
路径遍历子单元,用于对指令有向图数据中的节点进行遍历,得到指令有向图数据所包括的M个图路径;M为正整数;
长度统计子单元,用于获取M个图路径分别包括的边的初始权重,将M个图路径分别包括的边的初始权重进行求和,得到M个图路径分别对应的路径长度;
关键确定子单元,用于将M个图路径中最大的路径长度所对应的图路径,确定为指令有向图数据中的边所对应的第一关键路径。
其中,节点距离函数包括物理约束函数及相邻约束函数;
该函数构建单元,包括:
物理约束子单元,用于采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行物理约束,得到物理约束函数;
相邻约束子单元,用于采用边长相似阈值对指令有向图数据中的相邻边所对应的节点进行约束,得到相邻约束函数;边长相似阈值,用于表示指令有向图数据中的相邻边的长度所能达到的最大值。
其中,节点预测调度时间为节点调度时间范围;
该权重更新单元,包括:
子图检测子单元,用于对指令有向图数据中的节点进行检测,得到指令有向图数据中的指令子图;指令子图是指包括的子图路径的起始点与终止点相同的图;
权重构建子单元,用于在指令有向图数据中的节点所对应的节点调度时间范围内,确定指令子图所包括的子图边的候选权重组;候选权重组包括子图边的候选权重;
权重确定子单元,用于将候选权重组中的候选权重差值最小的候选权重组,确定为目标候选权重组,将目标候选权重组所包括的候选权重确定为子图边的更新权重;
该权重确定子单元,还用于固定子图边的更新权重,在指令有向图数据中的节点所对应的节点调度时间范围内,确定指令有向图数据中的待解析边的更新权重;待解析边是指指令有向图数据中的边除子图边之外的边。
其中,该代码调整模块,包括:
参数获取单元,用于获取指令有向图数据中的节点的调度参数;
指令排序单元,用于基于节点的调度参数对代码指令进行排序处理,得到更新指令;指令有向图数据中的节点的调度参数包括指令启动间隔;
指令调度单元,用于采用指令启动间隔及指令有向图数据中的边的更新权重,对更新指令进行调度处理;
代码调整单元,用于若调度成功,则基于对更新指令进行调度处理的调度信息,对程序代码进行调整,得到更新代码。
其中,节点的调度参数包括指令启动间隔范围,指令启动间隔范围由最小启动间隔及最大启动间隔组成;
该参数获取单元,包括:
第一处理子单元,用于基于代码指令的数量获取程序代码所对应的单元处理量;
第二处理子单元,用于获取指令有向图数据中的第一关键路径,获取第一关键路径所对应的路径处理量;指令有向图数据是指边的权重为初始权重的图;
间隔确定子单元,用于将单元处理量与路径处理量中的最大值,确定为最小启动间隔,获取间隔调度参数,在最小启动间隔上添加间隔调度参数,得到最大启动间隔。
其中,该指令调度单元,包括:
结果确定子单元,用于采用指令启动间隔范围中的第j个指令启动间隔,及指令有向图数据中的边的更新权重,对更新指令进行调度处理,得到调度结果;j为正整数;
失败调度子单元,用于若调度结果为调度失败结果,则获取指令启动间隔范围中的第j+1个指令启动间隔;
成功调度子单元,用于若调度结果为调度成功结果,则确定调度成功。
其中,代码指令的数量为N;N为正整数;该指令排序单元,包括:
关键排序子单元,用于获取更新有向图数据中的第二关键路径,将第二关键路径所包括的关键节点对应的关键代码指令组成初始排序指令;更新有向图数据是指由指令有向图数据中的边的更新权重、指令有向图数据中的节点和边所组成的图;代码指令包括关键代码指令;
关联排序子单元,用于将关键节点的前继节点与后继节点分别对应的代码指令,添加至初始排序指令中,得到中间排序指令;
指令确定子单元,用于若中间排序指令包括N个代码指令,则将中间排序指令确定为更新指令;
指令更新子单元,用于若中间排序指令未包括N个代码指令,则将中间排序指令所包括的代码指令的节点的前继节点与后继节点分别对应的代码指令,添加至中间排序指令中。
其中,该指令调度单元,包括:
窗口确定子单元,用于获取已解析节点的节点调度时间,采用指令有向图数据中的边的更新权重、节点调度时间及指令启动间隔,确定节点解析序列中的第k个节点的调度时间窗口;k为自然数;节点解析序列用于表示对指令有向图数据中的节点的解析顺序;
窗口遍历子单元,用于基于指令启动间隔对第k个节点的调度时间窗口进行遍历,若第k个节点的调度时间窗口中存在满足指令启动间隔的目标调度时间,则确定调度成功,将目标调度时间确定为第k个节点的节点调度时间;
失败确定子单元,用于若第k个节点的调度时间窗口均不满足指令启动间隔,则确定调度失败。
本申请实施例一方面提供了一种计算机设备,包括处理器、存储器、输入输出接口;
处理器分别与存储器和输入输出接口相连,其中,输入输出接口用于接收数据及输出数据,存储器用于存储计算机程序,处理器用于调用该计算机程序,以使包含该处理器的计算机设备执行本申请实施例一方面中的指令管理方法。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序适于由处理器加载并执行,以使得具有该处理器的计算机设备执行本申请实施例一方面中的指令管理方法。
本申请实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例一方面中的各种可选方式中提供的方法。换句话说,该计算机指令被处理器执行时实现本申请实施例一方面中的各种可选方式中提供的方法。
实施本申请实施例,将具有如下有益效果:
在本申请实施例中,获取程序代码,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;获取指令有向图数据中的边的初始权重,基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。通过以上过程,可以对程序代码进行有向图构建,使得可以通过指令有向图数据直观简洁地表达出程序代码中所存在的代码指令及代码指令之间的指令依赖关系,进而可以对指令有向图数据直接进行边的权重的更新,使得对指令有向图数据的调整不会更改其结构,也就是不会影响指令依赖关系,且该过程是对有向图的处理,不涉及实际的程序代码,使得处理效率较高。通过对指令有向图数据进行权重更新,进行初步的指令调度优化,减少了各个节点调度所需处理的数据量,进而提高指令调度的性能及效率,提高代码调整的效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种指令管理的网络交互架构图;
图2是本申请实施例提供的一种指令管理场景示意图;
图3是本申请实施例提供的一种指令管理应用场景示意图;
图4是本申请实施例提供的一种指令管理的方法流程图;
图5是本申请实施例提供的一种指令有向图数据示意图;
图6是本申请实施例提供的一种差分约束场景示意图;
图7是本申请实施例提供的一种权要更新示意图;
图8是本申请实施例提供的一种代码调整的方法流程图;
图9是本申请实施例提供的一种指令调度的具体实现流程图;
图10是本申请实施例提供的一种指令管理装置示意图;
图11是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
其中,若在本申请中需要收集对象(如用户等)数据,则在收集前、收集中,显示提示界面或者弹窗,该提示界面或者弹窗用于提示用户当前正在搜集某些数据,仅仅在获取到用户对该提示界面或者弹窗发出确认操作后,开始执行数据获取的相关的步骤,否则结束。而且,对于获取到的用户数据,会在合理合法的场景或用途等上进行使用。可选的,在一些需要使用用户数据但未得到用户授权的场景中,还可以向用户请求授权,在授权通过时,再使用用户数据。其中,本申请中对于用户数据的使用符合法律法规的相关规定,也就是,对用户数据的使用合理合法。
其中,对本申请中所涉及的部分名词进行如下解释:
1、AI:人工智能(Artificial Intelligence)在维基百科中的定义是指能够通过普通电脑程序来呈现人类智能的技术。另外一种定义是:AI是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
2、机器学习模型:机器学习(Machine Learning)模型一种算法的表达,它通过梳理海量数据来查找模式或进行预测,是人工智能的数学引擎。
3、算子:算子(Operator)是机器学习模型的基本计算单元。
4、软流水:软流水(Software Pipelining)在编译器领域中的一类循环指令调度算法。模调度:在编译器领域中的一种经典的软流水算法。
5、有向无环图(Directed Acyclic Graph,DAG):如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图,本申请用来表示代码指令间的指令依赖关系,如指令有向图数据,及对指令有向图数据进行权重更新所得到的更新有向图数据等。
6、指令启动间隔(Initiation Interval,II):是指在两次循环对应的程序代码开始执行的时间差。
在本申请实施例中,请参见图1,图1是本申请实施例提供的一种指令管理的网络交互架构图,如图1所示,计算机设备101可以获取程序代码,该程序代码是指需要进行调度的代码,对程序代码中所包括的代码指令进行调度处理,得到更新代码,从而提高程序代码的性能及运行效率。其中,计算机设备101可以从本地内存中获取程序代码,也可以从任意一个业务设备中获取程序代码,如业务设备102a、业务设备102b或业务设备102c等。其中,该程序代码可以是芯片编译代码,也就是集成于芯片的代码,或者集成于与芯片配套的芯片编译器(如AI编译器)中的代码;该程序代码也可以是普通的代码,也就是可以运行于传统编译器中的代码,在此不做限制。
具体的,请参见图2,图2是本申请实施例提供的一种指令管理场景示意图。如图2所示,计算机设备可以获取程序代码201,以程序代码201所包括的代码指令构建节点,以程序代码201所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据202。其中,该指令依赖关系用于表示程序代码201所包括的代码指令之间的调用关系等,如代码指令2在执行时需要采用代码指令1所得到的数据,此时,就可以认为代码指令2依赖于代码指令1,也就是代码指令2余代码指令1之间存在指令依赖关系,可以记作“代码指令1—>代码指令2”等,通过这一方式,可以将整个程序代码简化为一个直观简洁的有向图,即指令有向图数据202,使得该指令有向图数据202可以既保留程序代码201的代码架构,又无需对程序代码201的具体内容进行处理,从而提高代码指令调度的效率及性能。进一步,基于指令有向图数据202对指令有向图数据202中的边的初始权重进行更新,得到指令有向图数据202中的边的更新权重,也就是说,保持指令有向图数据202的结构不变,只对指令有向图数据202中边的权重进行更新,而这一过程和程序代码201本身的具体内容没有关系,权重所占的数量级很小,使得对指令有向图数据202的权重更新过程效率较高。其中,可以将边的权重由初始权重变为更新权重后的指令有向图数据记作更新有向图数据203,也就是说,指令有向图数据202与更新有向图数据203之间,除边的权重不同外,其他的数据都相同。通过权重调整,可以初步减少后续各个节点所需调度的时间的数量,提高后续代码调整的效率及性能。进一步,可以采用更新有向图数据203,对程序代码201进行调整,生成更新代码204。具体的,采用更新有向图数据203,对程序代码201进行调度,得到程序代码201所包括的代码指令的节点调度时间;采用程序代码201所包括的代码指令的节点调度时间,对程序代码进行调整,生成更新代码204,由于已经通过对指令有向图数据202进行了权重更新,减小了对程序代码201进行调度时所需遍历的数据空间(也就是确定各个节点的节点调度时间时所限制的范围),从而提高了代码调整的效率及性能。
可以理解的是,本申请实施例中的计算机设备包括但不限于终端设备或服务器,业务设备包括但不限于终端设备或服务器。换句话说,计算机设备可以是服务器或终端设备,也可以是服务器和终端设备组成的系统。其中,以上所提及的终端设备可以是一种电子设备,包括但不限于手机、平板电脑、台式电脑、笔记本电脑、掌上电脑、车载设备、增强现实/虚拟现实(Augmented Reality/Virtual Reality,AR/VR)设备、头盔显示器、智能电视、可穿戴设备、智能音箱、数码相机、摄像头及其他具备网络接入能力的移动互联网设备(mobile internet device,MID),或者火车、轮船、飞行等场景下的终端设备等。如图1中所示,终端设备可以是一种笔记本电脑(如业务设备102b所示)、手机(如业务设备102c所示)或车载设备(如业务设备102a所示)等,图1仅例举出部分的设备,可选的,该业务设备102a是指位于交通工具103中的设备,业务设备102a可以用于运行程序代码1021等。其中,以上所提及的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、车路协同、内容分发网络(Content DeliveryNetwork,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。可选的,若该程序代码1021为芯片编译代码,则该计算机设备可以是集成有芯片编译器(如AI编译器)的设备,业务设备可以是芯片或集成有芯片编译器的设备等,也就是说,计算机设备具备对芯片关联的程序代码的编译功能。
可选的,本申请实施例中所涉及的数据可以存储在计算机设备中,或者可以基于云存储技术或区块链网络等对该数据进行存储,在此不做限制。例如,计算机设备可以将程序代码存储至云空间或区块链网络中,在需要对程序代码进行重新编译(此处指代码调整)时,可以从云空间或区块链网络中获取该程序代码,对该程序代码进行调整。或者又例如,业务设备可以将程序代码存储至云空间或区块链网络中,计算机设备可以直接从云空间或区块链网络中获取该程序代码,对程序代码进行调整等。
举例来说,参见图3,图3是本申请实施例提供的一种指令管理应用场景示意图。如图3所示,假设针对机器学习模型301进行指令管理,具体的,AI编译器302读取机器学习模型301,在前端3021对机器学习模型301进行模型解析,得到高级中间编译数据(Intermediate Representation,IR);再进行目标无关优化,例如算数化简或算子融合等,也就是进行与硬件无关的优化,以对高级IR进行优化,输出优化后的高级IR。其中,高级IR通常是计算图等。进一步,在后端3022进行目标相关优化,例如专用指令映射、内存分配及访存延迟隐藏等,输出低级IR(即低级中间编译数据),最后进行代码生成,得到可以运行在AI芯片上的目标程序,本申请就是对代码生成过程的优化,暂不对其他过程进行详细描述,此时,该目标程序在本申请中为更新代码303。其中,IR是指中间编译数据,是指编译器运行过程中在中间阶段的表示数据。该高级IR与低级IR的获取过程是采用已有的AI编译器的处理过程,本申请主要是对后端3022中的代码生成过程进行优化,因此,在本申请中暂不对高级IR及低级IR进行具体描述。
进一步地,请参见图4,图4是本申请实施例提供的一种指令管理的方法流程图。如图4所示,该指令管理过程包括如下步骤:
步骤S401,获取程序代码,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据。
在本申请实施例中,计算机设备可以获取程序代码,该程序代码是指需要进行代码调整的代码,该程序代码可以是芯片编译代码,也可以是普通的代码,该程序代码可以是采用任意一种编码方式的代码,在此不做限制。举例来说,计算机设备可以响应针对程序代码的代码调整请求,获取该代码调整请求所携带的程序代码等,也就是说,本申请不对程序代码的获取方式进行限定。其中,该程序代码包括代码指令,该代码指令的数量为N,N为正整数。其中,以程序代码为芯片编译代码为例,假定获取到的程序代码如下所示:
@vr1 = VLD @r8,0//代码指令1
@vr3 = VABS @vr1 //代码指令2
@vr4 = VMULS @vr3,@r7 //代码指令3
@vr15 = VMUL @vr3,@vr3 //代码指令4
@vr16 = VADDS @vr4,@r5 //代码指令5
@vr17 = VMULS @vr15,@r6 //代码指令6
@vr18 = VRECIP @vr16 //代码指令7
@vr19 = VEXP @vr17 //代码指令8
@vr27 = VMUL @vr26,@vr18 //代码指令9
@vr28 = VMUL @vr27,@vr19 //代码指令10
@vr29 = VSUB @vr0,@vr28 //代码指令11
@vr30 = VMULS @vr29,@r6 //代码指令12
@vp2 = VLE @vr1,@vr2 //代码指令13
@vr31 = VSEL_f32 @vr30,@vr29,@vp2 //代码指令14
如上述程序代码所示,大写字符串用于表示所在的代码指令所采用的指令名称,如VLD、VABS或VMULS等;“@”用于表示寄存器,即,采用“@”字符加小写字符串和数字用于指示一个寄存器,如@vr1及@r5等,纯数字用于表示常数,当然,在不同的编码方式下,寄存器可能会使用不同的字符进行表示,并不一定是“@”,如,还可以是“$”等。“=”用于将该符号右侧得到的数据输出到左侧所指示的寄存器中,用于将指令名称与输出寄存器链接起来,如代码指令1用于表示将“VLD @r8,0”所得到的数据输出到寄存器“@vr1”中。其中,指令名称所采用的指令参数通过“,”进行分隔,该指令参数可以包括寄存器及常数等的中的任意一种或多种。其中,在该程序代码中,数据通过寄存器在代码指令之间、代码指令和内存之间进行传递。
进一步,可以以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据。例如,参见图5,图5是本申请实施例提供的一种指令有向图数据示意图,如图5所示,该指令有向图数据是指由上述示例的程序代码构建得到的有向图,具体的,以程序代码所包括的代码指令构建节点,每个节点可以对应于一个代码指令,也就是说,该指令有向图数据包括N个节点,如上述示例,可以基于代码指令1至代码指令14,依次构建节点1至节点14,也就是说,节点1对应代码指令1,节点2对应代码指令2,…,节点14对应代码指令14。进一步,以程序代码所包括的代码指令之间的指令依赖关系构建边,例如,代码指令2使用到指令参数“@vr1”,该指令参数是由代码指令1生成的,则构建“节点1—>节点2”的边;代码指令3使用到指令参数“@vr3”,该指令参数是由代码指令2生成的,则构建“节点2—>节点3”的边;…;代码指令14使用到指令参数“@vr30”、指令参数“@vr29”及指令参数“@vp2”,其中,指令参数“@vr30”由代码指令12生成的,指令参数“@vr29”由代码指令11生成的,指令参数“@vp2”由代码指令13生成的,则构建“节点11—>节点14”的边、“节点12—>节点14”的边及“节点13—>节点14”的边。也就是说,指令依赖关系用于表示程序代码所包括的代码指令之间的调用关系等,也就是说用于表示代码指令之间的数据传输关系。
进一步,可以为指令有向图数据中的边添加初始权重,如图5所示的边所关联的数字,如图5中所示,边“节点1—>节点2”的初始权重为1,边“节点2—>节点3”的初始权重为2等。可选的,可以将指令有向图数据中的节点记作初始节点,将指令有向图数据中的边记作初始边。其中,初始权重用于表示数据传输的延迟拍数。可选的,计算机设备可以从低级IR中获取代码指令之间的延迟拍数,将该代码指令之间的延迟拍数确定为该代码指令在指令有向图数据中所对应的边的初始权重。其中,该低级IR的相关描述可以参见图3中的相关描述,该低级IR可以认为是芯片编译器在后端,对程序代码所在的模型(如图3中所示的机器学习模型301等)进行目标相关优化后得到的数据。或者,可以获取程序代码所关联的硬件,采用该程序代码所关联的硬件对程序代码进行实现,得到代码指令之间的延迟拍数,将该代码指令之间的延迟拍数确定为该代码指令在指令有向图数据中所对应的边的初始权重,其中,硬件实现完成后会给出代码指令之间的延迟拍数。或者,也可以采用其他延迟拍数获取方法,获取代码指令之间的延迟拍数。其中,延迟拍数是指当前代码指令发射需与前一个代码指令发射后延迟的拍数,如图5中所示,节点1与节点2之间的初始权重为1,则表示在节点1所对应的代码指令1发射后,至少需要经过1拍才能发射节点2所对应的代码指令2。
步骤S402,获取指令有向图数据中的边的初始权重,基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据的边的更新权重。
在本申请实施例中,计算机设备可以获取指令有向图数据中的边的初始权重,采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行约束,得到指令有向图数据中的节点的节点预测调度时间。其中,指令有向图数据中的边的初始权重用于表示该边关联的两个节点之间,最小的延迟拍数,通过采用指令有向图数据中的边的初始权重,将指令有向图数据中的任意边关联的两个节点的待确定调度时间之间,约束为差值大于或等于该两个节点之间的边的初始权重,从而将满足约束的各个节点的待确定调度时间,确定为对应的节点的节点预测调度时间。如节点1与节点2之间的边的初始权重为3,且节点1在指令有向图中指向节点2,则最终得到的节点1的节点预测调度时间,与节点2的节点预测调度时间的差值大于或等于3,记作S[2]-S[1]≥3,S[1]用于表示节点1的节点预测调度时间,S[2]用于表示节点2的节点预测调度时间。采用指令有向图数据中的节点的节点预测调度时间,确定指令有向图数据中的边的更新权重。可以将边的权重由初始权重变为更新权重后的指令有向图数据,记作更新有向图数据。具体的,可以采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行约束,得到指令有向图数据中的节点所对应的节点距离函数;对节点距离函数进行解析,得到指令有向图数据中的节点所对应的节点预测调度时间;基于指令有向图数据中的节点所对应的节点预测调度时间,确定指令有向图数据中的边的更新权重。其中,该节点预测调度时间用于构建更新权重,并不会作为节点所对应的代码指令的最终调度时间。
其中,一种函数构建方式,该节点距离函数包括第一节点距离函数及第二节点距离函数。在采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行约束,得到指令有向图数据中的节点所对应的节点距离函数时,可以获取指令有向图数据中的边的边长度参数,检测指令有向图数据中的边中的第一关键路径,将指令有向图数据的边中除第一关键路径之外的边确定为常规路径。其中,该边长度参数用于对指令有向图数据中的边的权重进行约束。采用指令有向图数据中的边的初始权重及边长度参数,对常规路径所对应的节点进行约束,构建常规路径所对应的第一节点距离函数。具体的,可以采用指令有向图数据中的边的初始权重,对指令有向图数据中连接的两个节点之间的距离进行约束,构建常规路径所对应的第一权重约束函数;采用边长度参数,对指令有向图数据中连接的两个节点之间的距离进行约束,构建常规路径所对应的第一参数约束函数,也就是说第一节点距离函数包括第一权重约束函数及第一参数约束函数。可选的,该第一权重约束函数可以参见公式①所示:
如公式①所示,指令有向图数据中的边由节点a指向节点b,S[u]用于表示指令有向图数据中的起始点到节点u的距离,u为小于或等于N的正整数,如S[a]用于表示指令有向图数据中的起始点到节点a的距离,S[b]用于表示指令有向图数据中的起始点到节点b的距离。其中,latencya,b用于表示节点a指向节点b的边的初始权重。由于边的初始权重用于表示该边关联的两个节点之间的延迟拍数,也就是说,两个节点之间的距离需要大于这两个节点所组成的边的初始权重,通过采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点与节点之间的距离进行约束,可以有效缩减节点的可选遍历范围,提高指令管理的效率。
其中,该第一参数约束函数可以参见公式②所示:
如公式②所示,EdgeMaxLength用于表示边长度参数,用于表示指令有向图数据中的边可以取的最大权重。
进一步,可以采用指令有向图数据中的边的初始权重,对第一关键路径所对应的节点进行约束,构建第一关键路径所对应的第二节点距离函数。该第二节点距离函数的一种可能的实现可以参见公式③所示:
如公式③所示,第一关键路径所对应的边由节点s指向节点t。S[s]用于表示指令有向图数据中的起始点到节点s的距离,S[t]用于表示指令有向图数据中的起始点到节点t的距离。length用于表示第一关键路径中的边的初始权重。
其中,在获取指令有向图数据中的边的边长度参数时,可以从指令有向图数据中的边的初始权重中,获取最大初始权重,如图5所示的最大初始权重为13。对最大初始权重进行权重扩大处理,得到指令有向图数据中的边的边长度参数,如将最大初始权重的整数倍,确定为指令有向图数据中的边的边长度参数等。或者,可以获取指令有向图数据中所包括的M个图路径,对M个图路径分别包括的边的初始权重进行求和,得到M个图路径分别对应的路径长度;将M个图路径分别对应的路径长度中的最大路径长度,确定为指令有向图数据中的边的边长度参数等。
其中,在检测指令有向图数据中的边中的第一关键路径时,可以对指令有向图数据中的节点进行遍历,得到指令有向图数据所包括的M个图路径;M为正整数。如图5所示,该M个图路径包括图路径“节点1—>节点2—>节点4—>节点6—>节点8—>节点10—>节点11—>节点14”、图路径“节点1—>节点2—>节点4—>节点6—>节点8—>节点10—>节点11—>节点12—>节点14”、…、图路径“节点1—>节点13—>节点14”等。获取M个图路径分别包括的边的初始权重,将M个图路径分别包括的边的初始权重进行求和,得到M个图路径分别对应的路径长度,如图路径“节点1—>节点13—>节点14”的路径长度为,边“节点1—>节点13”的初始权重“1”与边“节点13—>节点14”的初始权重“2”的和,即图路径“节点1—>节点13—>节点14”的路径长度为3。将M个图路径中最大的路径长度所对应的图路径,确定为指令有向图数据中的边所对应的第一关键路径。
进一步,对节点距离函数进行解析,得到指令有向图数据中的节点所对应的节点预测调度时间。采用第i+1个更新边长度参数,对节点距离函数进行解析;i为正整数;第一个更新边长度参数为边长度参数,也就是说,将第i+1个更新边长度参数代入节点距离函数中,检测节点距离函数的结果(即检测节点距离函数是否有解)。若检测到节点距离函数有解,则表示对节点距离函数解析成功;若检测到节点距离函数无解,则表示对节点距离函数解析失败。其中,若对节点距离函数解析成功,则获取对节点距离函数解析得到的指令有向图数据中的节点的第i+1个节点更新调度时间,也就是节点距离函数的解,对第i+1个更新边长度参数进行参数调整,得到第i+2个更新边长度参数。具体的,对第i+1个更新边长度参数进行递减,得到第i+2个更新边长度参数,即,第i+2个更新边长度参数=第i+1个更新边长度参数-参数递减步长(如1等)。若对节点距离函数解析失败,则将采用第i个更新边长度参数得到的指令有向图数据中的节点的第i个节点更新调度时间,确定为指令有向图数据中的节点所对应的节点预测调度时间,将第i个更新边长度参数确定为目标边长度参数。也就是说,获取使节点距离函数有解的边长度参数的最小值或者极小值(即目标边长度参数)。
或者,可以通过二分法对边长度参数进行调整。也就是,若对节点距离函数解析成功,则获取对节点距离函数解析得到的指令有向图数据中的节点的第i+1个节点更新调度时间,对第i+1个更新边长度参数进行参数调整,得到第i+2个更新边长度参数。具体的,在采用第一个更新边长度参数至第i个更新边长度参数,均对节点距离函数解析成功时,对第i+1个更新边长度参数进行二分处理,得到第i+2个更新边长度参数;在第一个更新边长度参数至第i个更新边长度参数中存在对节点距离函数解析失败的更新边长度参数,将历史失败参数与第i+1个更新边长度的均值,确定为第i+2个更新边长度参数,其中,历史失败参数是指第一个更新边长度参数至第i个更新边长度参数中,对节点距离函数解析失败,且与第i+1个更新边长度参数最近的更新边长度参数。若对节点距离函数解析失败,则获取历史成功参数,将历史成功参数与第i+1个更新边长度的均值,确定为第i+2个更新边长度参数。其中,该历史成功参数是指第一个更新边长度参数至第i个更新边长度参数中,成功对节点距离函数解析,且与第i+1个更新边长度参数最近的更新边长度参数。当然,若第i+1个更新边长度参数与第i个更新边长度参数相邻,则从第一个更新边长度参数至第i+1个更新边长度参数中,获取成功对节点距离函数进行解析的候选边长度参数,将候选边长度参数中的最小值确定为目标边长度参数,将目标边长度参数所对应的节点更新调度时间,确定为指令有向图数据中的节点所对应的节点预测调度时间。
例如,第一个更新边长度参数为16,对节点距离函数解析成功,对第一个更新边长度参数进行二分处理,得到第二个更新边长度参数“8”;假定采用第二个更新边长度参数对节点距离函数解析成功,对第二个更新边长度参数进而二分处理,得到第三个更新边长度参数“4”;假定采用第三个更新边长度参数“4”对节点距离函数解析失败,将第三个更新边长度参数与第二个更新边长度参数的均值,确定为第四个更新边长度参数“6”;假定采用第四个更新边长度参数解析成功,将第四个更新边长度参数与第三个更新边长度参数的均值,确定为第五个更新长度参数“5”;假定采用第五个更新长度参数“5”对节点距离函数解析失败,且第五个更新长度参数与第四个更新边长度参数相邻,则将第四个更新边长度参数确定为目标边长度参数。
可选的,一种函数构建方式,该节点距离函数包括物理约束函数及相邻约束函数。在采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行约束,得到指令有向图数据中的节点所对应的节点距离函数时,可以采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行物理约束,得到物理约束函数,该物理约束函数可以参见公式①。采用边长相似阈值对指令有向图数据中的相邻边所对应的节点进行约束,得到相邻约束函数;边长相似阈值,用于表示指令有向图数据中的相邻边的长度所能达到的最大值。其中,该相邻约束函数可以参见公式④所示:
如公式④所示,边“节点a—>节点b”与边“节点b—>节点c”相邻,α用于表示边长相似阈值。可选的,该节点距离函数还可以包括关键常量函数,其中,可以获取指令有向图数据中的第一关键路径,将指令有向图数据中的第一关键路径所包括的边的初始权重,构建关键常量函数。其中,该关键常量函数可以参见公式⑤所示:
如公式⑤所示,可以不改变指令有向图数据中的关键路径长度。
可选的,一种函数构建方式,可以采用所述指令有向图数据中的边的初始权重,对所述指令有向图数据中的节点进行差分约束,得到所述指令有向图数据中的节点所对应的节点距离函数。其中,差分约束是一种特殊的n元一次不等式组,包含n个变量,x1、x2、…、xn,以及m个约束条件,每个约束条件是由两个变量做差构成,如xi-xj≤ck,其中,1≤i,j≤n,i≠j,ck为常数,差分约束中的每个约束条件都可以变形成xi≤xj+ck,可以将其认为是,每个变量可以看作指令有向图数据中的一个节点,对于每个约束条件,对应于指令有向图数据中的一条边,即ck为指令有向图数据中的一个初始权重,其中,该差分约束的解释中所采用的各个字符,与本申请中其他地方不相关,也就是说,此处的差分约束所采用的字符(如i、j、k等)与其他内容中所采用的字符不相关。例如,参见图6,图6是本申请实施例提供的一种差分约束场景示意图,如图6所示,对示例有向图601进行差分约束,得到示例距离函数602。此时,节点距离函数可以参见公式①所示。
进一步地,可以基于指令有向图数据中的节点所对应的节点预测调度时间,确定指令有向图数据中的边的更新权重。具体的,可以将指令有向图数据中的边所关联的两个节点的节点预测调度时间的差值,确定为指令有向图数据中的边的更新权重。如,边“节点a—>节点b”的更新权重为S[b]-S[a]。
或者,节点预测调度时间为节点调度时间范围,也就是说,得到的节点的节点预测调度时间的数量不唯一。对指令有向图数据中的节点进行检测,得到指令有向图数据中的指令子图;指令子图是指包括的子图路径的起始点与终止点相同的图。如图5中所示,其中一个指令子图可以是由“节点11、节点12及节点14”组成的子图等。在指令有向图数据中的节点所对应的节点调度时间范围内,确定指令子图所包括的子图边的候选权重组;候选权重组包括子图边的候选权重。将候选权重组中的候选权重差值最小的候选权重组,确定为目标候选权重组,将目标候选权重组所包括的候选权重确定为子图边的更新权重。固定子图边的更新权重,在指令有向图数据中的节点所对应的节点调度时间范围内,确定指令有向图数据中的待解析边的更新权重;待解析边是指指令有向图数据中的边除子图边之外的边。也就是说,可以使得类似边的长度尽可能地相近,使得可以缩减后续对节点的遍历范围。
进一步可选的,可以参见图7,图7是本申请实施例提供的一种权要更新示意图。如图7所示,图7所展示的是更新有向图数据,该更新有向图数据中的边所关联的数值为该边的更新权重,例如,边“节点1—>节点13”的更新权重为15。
步骤S403,采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。
在本申请实施例中,计算机设备可以获取指令有向图数据中的节点的调度参数,基于节点的调度参数对代码指令进行排序处理,得到更新指令;指令有向图数据中的节点的调度参数包括指令启动间隔。采用指令启动间隔及指令有向图数据中的边的更新权重,对更新指令进行调度处理。若调度成功,则基于对更新指令进行调度处理的调度信息,对程序代码进行调整,得到更新代码。其中,更新指令包括N个代码指令,也就是说,更新指令与程序代码只是代码指令的排序方式不同。其中,程序代码包括N个代码指令,该程序代码可以认为是需要进行调整的代码片段;更新指令可以认为是对程序代码中的N个代码指令进行重新排序后,得到的代码片段。简单来说,可以先对程序代码所包括的N个代码指令进行排序处理,得到更新指令;再进一步,基于指令启动间隔及指令有向图数据中的边的更新权重,确定N个代码指令分别对应的指令执行时间,基于N个代码指令分别对应的指令执行时间,对N个代码指令进行重新排序处理,得到更新代码。
其中,节点的调度参数包括指令启动间隔范围,指令启动间隔范围由最小启动间隔及最大启动间隔组成。其中,该节点的调度参数还包括该节点在指令有向图数据中的节点深度和节点高度等。也就是说,可以在指令有向图数据基础上,获取该指令有向图数据所包括的各个节点的调度参数。
其中,在获取指令有向图数据中的节点的调度参数时,可以基于代码指令的数量获取程序代码所对应的单元处理量(ResMII),也就是说,可以获取程序代码所关联的功能单元数量,获取程序代码所包括的代码指令的指令数量(即N),将指令数量与功能单元数量的商,确定为单元处理量。或者,可以采用确定有穷自动机(Deterministic FiniteAutomaton,DFA)算法,获取程序代码所对应的单元处理量等,在此不做限制。进一步,获取指令有向图数据中的第一关键路径,获取第一关键路径所对应的路径处理量(RecMII);指令有向图数据是指由指令有向图数据中的边的初始权重、指令有向图数据中的节点和边所组成的图,也就是边的权重为初始权重的图。例如,可以获取第一关键路径所包括的边的初始权重,将第一关键路径所包括的边的初始权重的最大值确定为路径处理量。或者,可以遍历指令有向图数据中的边,将指令有向图数据中的边的初始权重的最大值确定为路径处理量等。将单元处理量与路径处理量中的最大值,确定为最小启动间隔,获取间隔调度参数,在最小启动间隔上添加间隔调度参数,得到最大启动间隔。其中,该间隔调度参数为一个常数,可以是一个预设值,或者是经验值,在此不做限制。通过在指令有向图数据基础上确定用于对代码指令进行调整的节点的调度参数,使得节点的调度参数符合程序代码的基本信息,也就是保障后续对代码指令的调整,不会和程序代码的基本信息产生冲突,保障代码指令调整的准确性。
其中,一种可能的调度参数可以参见表1:
表1
如表1所示,调度参数可以包括但不限于尽可能早(AS Soon As Possible,ASAP)参数、尽可能晚(As Late As possible,ALAP)参数、节点流动性(mobility,M)、节点深度(Depth,D)及节点高度(Height,H)等。
进一步,代码指令的数量为N;N为正整数,可以基于节点的调度参数对代码指令进行排序处理,得到更新指令。具体的,一种排序方式,可以获取更新有向图数据中的第二关键路径,将第二关键路径所包括的关键节点对应的关键代码指令组成初始排序指令;更新有向图数据是指由指令有向图数据中的边的更新权重、指令有向图数据中的节点和边所组成的图;代码指令包括关键代码指令。将关键节点的前继节点与后继节点分别对应的代码指令,添加至初始排序指令中,得到中间排序指令。若中间排序指令包括N个代码指令,则将中间排序指令确定为更新指令。若中间排序指令未包括N个代码指令,则将中间排序指令所包括的代码指令的节点的前继节点与后继节点分别对应的代码指令,添加至中间排序指令中。或者,再一种排序方式,可以基于节点的调度参数对更新有向图数据进行广度优先遍历,得到节点遍历序列,基于节点遍历序列对N个代码指令进行排序处理,得到更新指令。
进一步,采用指令启动间隔及指令有向图数据中的边的更新权重,对更新指令进行调度处理。具体的,其中,节点的调度参数包括指令启动间隔,可以采用该指令启动间隔及指令有向图数据中的边的更新权重,对更新指令进行调度处理。或者,节点的调度参数包括指令启动间隔范围,可以采用指令启动间隔范围中的第j个指令启动间隔,及指令有向图数据中的边的更新权重,对更新指令进行调度处理,得到调度结果;j为正整数。若调度结果为调度失败结果,则获取指令启动间隔范围中的第j+1个指令启动间隔;若调度结果为调度成功结果,则确定调度成功。其中,对更新指令进行调度处理,是指对更新指令中的指令对象的生命周期等进行检测,该指令对象是指代码指令中的数据,如寄存器或普通数据(如变量、常量或对象类等)。例如,更新指令中存在代码指令1、代码指令2、代码指令3及代码指令4等,代码指令2需要用到代码指令1中的数据“分数统计表”,假定边“代码指令1—>代码指令2”的更新权重为10,代码指令3的发射时间为27,指令启动间隔为12,边“代码指令2—>代码指令3”的更新权重为2,代码指令4的发射时间为6,边“代码指令1—>代码指令4”的更新权重为5,此时,假定对代码指令2进行调度,可以得到,代码指令2的调度时间窗口为[25,14],而代码指令2使用代码指令1中的指令对象“分数统计表”,由代码指令4可以得到代码指令1可能的调度时间窗口为[1,-10],可见,即使代码指令2的发射时间选取14,代码指令1中的指令对象“分数统计表”的生命周期都至少为13,大于指令启动间隔12,则对代码指令2调度失败。
或者,可以获取已解析节点的节点调度时间,采用指令有向图数据中的边的更新权重、节点调度时间及指令启动间隔,确定节点解析序列中的第k个节点的调度时间窗口;k为自然数,此时,k取0到N-1,或者,k可以为正整数,此时,k可以取1至N;节点解析序列用于表示对指令有向图数据中的节点的解析顺序,该节点解析序列为预设的序列,或者是对指令有向图数据进行节点遍历得到的顺序,如上述各个排序方式中得到节点解析序列的过程,如一种可能的节点解析序列为“14、12、11、10、9、7、8、5、6、3、4、2、13、1”。其中,以k为正整数为例,可以获取第一个节点至第k-1个节点分别对应的节点调度时间,获取第一个节点至第k-1个节点中与第k个节点之间存在边的关联节点,基于第k个节点与关联节点组成的边的更新权重与指令启动间隔,确定第k个节点的调度时间窗口。具体的,若第k个节点与关联节点组成由关联节点指向第k个节点的边,则该调度时间窗口可以认为是[关联节点的节点调度时间+关联节点与第k个节点组成的边的更新权重(记作更新权重k),关联节点的节点调度时间+关联节点与第k个节点组成的边的更新权重+指令启动间隔],也就是说,由于第k个节点需要在关联节点发射后,经过更新权重k对应的延迟拍数才能进行发射,也就是调度时间窗口的最小值,而第k个节点在关联节点中所使用的数据的生命周期,一般不会超过指令启动间隔。同理,若第k个节点与关联节点组成由第k个节点指向关联节点的边,则该调度时间窗口可以认为是[关联节点的节点调度时间-更新权重k,关联节点的节点调度时间-更新权重k-指令启动间隔+1]。基于指令启动间隔对第k个节点的调度时间窗口进行遍历。若第k个节点的调度时间窗口中存在满足指令启动间隔的目标调度时间,则确定调度成功,将目标调度时间确定为第k个节点的节点调度时间;若第k个节点的调度时间窗口均不满足指令启动间隔,则确定调度失败。
例如,在对更新指令进行调度处理时,假定指令启动间隔II为15,节点2的节点调度时间为1,节点14的节点调度时间为30,由节点13指向节点14的边的更新权重为2,则可以得到了节点13的调度时间窗口为[28,14],此时,由节点1指向节点2的边的更新权重为1,可以得到节点1的调度时间窗口为[0,-14]。此时,如果节点13选择28,则节点13所使用的寄存器@vr1的生命周期至少为28,大于指令启动间隔,会出现寄存器冲突,即调度失败。例如,以图7为例,假定指令启动间隔为15,节点2的节点调度时间为1,节点14的节点调度时间为30,在对节点13进行调度处理时,可以得到节点13的调度时间窗口为[15,1],节点14使用到节点13中的指令对象,基于节点14的节点调度时间及指令启动间隔,确定节点13的节点调度时间在15至30内,即,节点13中的指令对象的生命周期需要小于或等于指令启动间隔,即节点14的节点调度时间-节点13的节点调度时间≤指令启动间隔,因此,可以确定节点13的节点调度时间为15。
进一步,若调度成功,则基于对更新指令进行调度处理的调度信息,对程序代码进行调整,也就是对程序代码所包括的N个代码指令进行排序,得到更新代码,该更新代码包括排序后的N个代码指令。其中,该调度信息包括N个代码指令的指令执行时间,每个代码指令的指令执行时间为该代码指令对应的节点的节点调度时间。可选的,一种可能的调整方式,可以基于N个代码指令的指令执行时间对N个代码指令进行排序,得到更新代码。或者,也可以采用已有的其他对程序代码进行调整的方式。
其中,该更新指令用于指示对指令有向图数据中的节点的解析顺序,因此,也可以不确定更新指令。换句话说,可以获取指令有向图数据中的节点的调度参数,基于节点的调度参数对更新有向图数据中的节点进行排序处理,得到节点解析序列。进一步,可以采用指令启动间隔及指令有向图数据中的边的更新权重,对程序代码所包括的代码指令进行调度处理。具体的,可以采用指令启动间隔及指令有向图数据中的边的更新权重,依次对节点解析序列中的节点所对应的代码指令进行调度处理,得到程序代码所包括的代码指令的指令执行时间,基于代码指令的指令执行时间,对程序代码所包括的代码指令进行排序处理,得到更新代码。
其中,在基于节点的调度参数对更新有向图数据中的节点进行排序处理,得到节点解析序列时,可以获取更新有向图数据中的第二关键路径,将第二关键路径所包括的关键节点组成初始节点序列;将关键节点的前继节点与后继节点,添加至初始节点序列中,得到中间节点序列。若中间节点序列包括N个节点,则将中间节点序列转换为节点解析序列,具体的,可以将中间节点序列的倒序确定为节点解析序列;若中间节点序列未包括N个节点,则将中间节点序列所包括的节点的前继节点与后继节点,添加至中间节点序列中,直至添加后的中间节点序列包括N个节点。或者,可以基于节点的调度参数对更新有向图数据进行广度优先遍历,得到节点遍历序列,将节点遍历序列转换为节点解析序列,具体,可以将节点遍历序列的倒序确定为节点解析序列。通过节点解析序列的确定,可以提高对程序代码的调度效率。
其中,在采用指令启动间隔及指令有向图数据中的边的更新权重,对程序代码所包括的代码指令进行调度处理时,可以参见上述对更新指令的调度处理过程,在此不再进行赘述。
进一步地,请参见图8,图8是本申请实施例提供的一种代码调整的方法流程图。如图8所示,该代码调整过程可以包括如下步骤:
步骤S801,构建指令有向图数据。
在本申请实施例中,可以参见图4中的步骤S401所示的相关描述,也就是说,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据,为指令有向图数据中的边添加初始权重。
步骤S802,调整指令有向图数据,得到更新有向图数据。
在本申请实施例中,可以参见图4的步骤S402中的相关描述,也就是,可以获取指令有向图数据中的边的初始权重,采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行约束,得到指令有向图数据中的节点的节点预测调度时间;采用指令有向图数据中的节点的节点预测调度时间,确定指令有向图数据中的边的更新权重。
步骤S803,获取调度参数。
在本申请实施例中,可以参见图4的步骤S403中的相关描述,也就是,通过指令有向图数据,获取每个代码指令所对应的节点的调度参数,在此不再进行赘述。
步骤S804,对代码指令进行排序,得到更新指令。
在本申请实施例中,可以参见图4的步骤S403中的相关描述。或者,一种可能的排序方式,还可以直接基于更新有向图数据中的边的更新权重,对代码指令进行排序,得到更新指令,例如,可以从节点队列中获取分别指向q个未排序代码指令的第三节点,将q个未排序代码指令中,所对应的第三节点均位于节点队列中的未排序代码指令确定为候选添加代码指令,其中,未排序代码指令是指更新有向图数据中不在节点队列中的节点,第三节点是指指向对应的未排序代码指令的节点,即,更新有向图数据中存在“第三节点—>未排序代码指令”的边的节点,q为正整数。进一步,可以获取候选添加代码指令到位于节点队列的首位节点的最长路径,首位节点是指位于节点队列的队首的节点,是更新有向图数据中不存在父节点的节点,最长路径是指对应的候选添加代码指令到首位节点所存在的路径中,路径所包括的边的更新权重之和最大的路径。将最长路径的路径长度最小的候选添加代码添加至节点队列中,其中,一个路径的路径长度是指该路径在更新有向图数据中所包括的边的更新权重之和。同理,直至将更新有向图数据中所包括的节点均添加至节点队列中,将此时的节点队列记作目标节点队列。基于目标节点队列中的节点顺序,对代码指令进行排序,得到更新指令。
如图7所示,可以得到“节点1—>节点2”的更新权重小于“节点1—>节点13”的更新权重,可以得到节点队列“节点1—>节点2”;在以节点2为基础时,存在多个支线,“节点2—>节点4”的更新权重大于“节点2—>节点3”的更新权重,进一步得到节点队列“节点1—>节点2—>节点3”;“节点2—>节点3”的更新权重与“节点3—>节点5”的更新权重之和,仍小于“节点2—>节点4”的更新权重,则得到节点队列“节点1—>节点2—>节点3—>节点5”;进一步,由节点2到节点7所包括的边的更新权重之和为7,与“节点2—>节点4”的更新权重相同,则,可以将节点7和节点4随机添加至节点队列,如“节点1—>节点2—>节点3—>节点5—>节点4—>节点7”,或“节点1—>节点2—>节点3—>节点5—>节点7—>节点4”;…,同理,将各个节点添加至节点队列中,直至对更新有向图数据遍历完成,即对更新有向图数据所包括的节点遍历完成,得到目标节点队列,基于目标节点队列中的节点顺序,对代码指令进行排序,得到更新指令。
步骤S805,遍历指令启动间隔范围。
在本申请实施例中,从指令启动间隔范围中获取第j个指令启动间隔。
步骤S806,对更新指令进行调度。
在本申请实施例中,采用第j个指令启动间隔对更新指令进行调度。也就是,在第j个指令启动间隔条件下,采用更新有向图数据中的边的更新权重,解析更新有向图数据中的各个节点的节点调度时间。
步骤S807,调度成功。
在本申请实施例中,若调度成功,则执行步骤S808;若调度失败,则执行步骤S809。具体的,若解析到更新有向图数据中的各个节点的节点调度时间,且各个节点所关联的指令对象的生命周期小于或等于第j个指令启动间隔,则确定调度成功。若更新有向图数据中存在节点未解析到节点调度时间,或者,存在节点所关联的指令对象的生命周期大于第j个指令启动间隔,则确定调度失败。其中,该指令对象是指在程序代码所包括的代码指令中用来传递数据的对象,如寄存器、变量或对象类等。具体可以参见图4的步骤S403中的相关描述,在此不做更多介绍。
步骤S808,调整程序代码。
在本申请实施例中,采用第j个指令启动间隔调整程序代码,得到更新代码,结束指令调度。具体可以参见图4的步骤403中的相关描述,在此不再进行赘述。
步骤S809,超出指令启动间隔范围。
在本申请实施例中,若超出指令启动间隔范围,则结束指令调度;若未超出指令启动间隔范围,则执行j=j+1,执行步骤S805,也就是对下一个指令启动间隔进行处理。
进一步可以参见图9,图9是本申请实施例提供的一种指令调度的具体实现流程图。如图9所示,该过程可以包括如下步骤:
步骤S901,获取第k个节点。
在本申请实施例中,计算机设备可以获取节点解析序列中的第k个节点,k为小于或等于N的正整数。
步骤S902,获取第k个节点的调度时间窗口。
在本申请实施例中,获取第一个节点至第k-1个节点分别对应的节点调度时间,获取第一个节点至第k-1个节点中与第k个节点之间存在边的关联节点(可以称为关联节点k),获取第k个节点与第k个节点的关联节点组成的边的关联权重k。获取指令启动间隔,基于指令启动间隔与关联权重k,确定第k个节点的调度时间窗口,具体可以参见图4的步骤S403中的相关描述。
步骤S903,从第k个节点的调度时间窗口中获取第p个调度时间。
在本申请实施例中,可以从第k个节点的调度时间窗口中获取第p个调度时间,p为正整数,p为初始值时,该第p个调度时间为第k个节点的调度时间窗口中的第一个调度时间。
步骤S904,采用第p个调度时间对更新指令进行调度处理。
在本申请实施例中,采用第p个调度时间对更新指令进行调度处理,具体可以参见图4的步骤S403中的相关描述。例如,可以从更新有向图数据中的N个节点中获取与第k个节点之间存在边的第一节点,获取第k个节点与第一节点之间的更新权重,记作第一更新权重。获取第k个节点所使用的指令对象对应的第二节点。
步骤S905,第k个节点调度成功。
在本申请实施例中,若第k个节点所使用的指令对象在第二节点中所对应的生命周期小于或等于指令启动间隔,则确定对第k个节点调度成功,将第p个调度时间确定为第k个节点的节点调度时间,将p值与第k个节点进行关联存储,也就是说,将p值确定为第k个节点的历史调度时,用于表示第k个节点的节点调度时间在第k个节点的调度时间窗口中的位置,进一步执行步骤S910。若第k个节点所使用的指令对象在第二节点中所对应的生命周期大于指令启动间隔,则执行步骤S906。
步骤S906,调度时间窗口遍历完成。
在本申请实施例中,若第p个调度时间为调度时间窗口中的最后一个调度时间,则执行步骤S907;若第p个调度时间不是调度时间窗口中的最后一个调度时间,则执行p=p+1,执行步骤S903,对下一个调度时间进行处理。
步骤S907,第k个节点为首个代码指令。
在本申请实施例中,若第k个节点为首个代码指令,则执行步骤S909,确定对第k个节点调度失败。若第k个节点不为首个代码指令,则执行步骤S908。
步骤S908,获取第k-1个节点的环境信息。
在本申请实施例中,获取第k-1个节点的环境信息,该第k-1个节点的环境信息包括但不限于第k-1个节点的节点调度时间,在第k-1个节点的调度时间窗口中的位置等。例如,该第k-1个节点的环境信息还可以包括第k-1个节点所对应的指令对象的取值及处理器状态等。具体的,可以将第k-1个节点的节点调度时间,在第k-1个节点的调度时间窗口中的位置进行增加得到p,减少k值(即k=k-1),返回执行步骤S905。也就是说,在上一个节点所确定的节点调度时间下,无法继续对其他节点进行调度,对上一个节点所对应的节点调度时间进行更新,重新进行节点调度。
步骤S909,调度失败。
在本申请实施例中,确定调度失败,结束指令调度。
步骤S910,程序代码遍历完成。
在本申请实施例中,检测对N个代码指令遍历完成,也就是说,检测第k个节点为节点解析序列中的最后一个节点。若第k个节点为节点解析序列中的最后一个节点,则执行步骤S912;若第k个节点不为节点解析序列中的最后一个节点,则执行步骤S911。
步骤S911,k++。
在本申请实施例中,k++,也就是对节点解析序列中的下一个节点进行调度处理。
步骤S912,调度成功。
在本申请实施例中,确定对程序代码调度成功,结束指令调度。
可选的,获取到的是指令启动间隔范围,则在图8所示的步骤S806中,采用第j个指令启动时间,执行图9所示的步骤S901至步骤S912。在图9执行结束时,执行步骤S807。其中,若获取到由步骤S909返回的调度失败结果,则确定调度失败,执行步骤809;若获取到由步骤S912返回的调度成功结果,则确定调度成功,执行步骤S808。
在本申请实施例中,获取程序代码,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;获取指令有向图数据中的边的初始权重,基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。通过以上过程,可以对程序代码进行有向图构建,使得可以通过指令有向图数据直观简洁地表达出程序代码中所存在的代码指令及代码指令之间的指令依赖关系,进而可以对指令有向图数据直接进行边的权重的更新,使得对指令有向图数据的调整不会更改其结构,也就是不会影响指令依赖关系,且该过程是对有向图的处理,不涉及实际的程序代码,使得处理效率较高。通过对指令有向图数据进行权重更新,进行初步的指令调度优化,减少了各个节点调度所需处理的数据量,进而提高指令调度的性能及效率,提高代码调整的效率。
其中,通过采用本申请的方案,可以提高指令调度效果,通过试验,可以得到如表2及表3所示的结果。
表2
如表2所示,该神经网络算子为Erf为例,可以看出,同样的循环次数,可以减少指令调度所用拍数,也就是减少指令调度次数。
表3
如表3可以看出,在同一个指令启动间隔条件下,所需的指令检测次数下降了75%到88.9%,可见,本申请可以提高指令调度性能。
进一步地,请参见图10,图10是本申请实施例提供的一种指令管理装置示意图。该指令管理装置可以是运行于计算机设备中的一个计算机程序(包括程序代码等),例如该指令管理装置可以为一个应用软件;该装置可以用于执行本申请实施例提供的方法中的相应步骤。如图10所示,该指令管理装置1000可以用于图4所对应实施例中的计算机设备,具体的,该装置可以包括:代码获取模块11、图构建模块12、权重获取模块13、权重更新模块14及代码调整模块15。
代码获取模块11,用于获取程序代码;
图构建模块12,用于以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;
权重获取模块13,用于获取指令有向图数据中的边的初始权重;
权重更新模块14,用于基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;
代码调整模块15,用于采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。
其中,该权重更新模块14,包括:
函数构建单元141,用于采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行约束,得到指令有向图数据中的节点所对应的节点距离函数;
函数解析单元142,用于对节点距离函数进行解析,得到指令有向图数据中的节点所对应的节点预测调度时间;
权重更新单元143,用于基于指令有向图数据中的节点所对应的节点预测调度时间,确定指令有向图数据中的边的更新权重。
其中,节点距离函数包括第一节点距离函数及第二节点距离函数;
该函数构建单元141,包括:
参数获取子单元1411,用于获取指令有向图数据中的边的边长度参数;
关键检测子单元1412,用于检测指令有向图数据中的边中的第一关键路径;
路径确定子单元1413,用于将指令有向图数据的边中除第一关键路径之外的边确定为常规路径;
第一构建子单元1414,用于采用指令有向图数据中的边的初始权重及边长度参数,对常规路径所对应的节点进行约束,构建常规路径所对应的第一节点距离函数;
第二构建子单元1415,用于采用指令有向图数据中的边的初始权重,对第一关键路径所对应的节点进行约束,构建第一关键路径所对应的第二节点距离函数。
其中,该参数获取子单元1411,具体用于:
从指令有向图数据中的边的初始权重中,获取最大初始权重,对最大初始权重进行权重扩大处理,得到指令有向图数据中的边的边长度参数;
该函数解析单元142,包括:
函数解析子单元1421,用于采用第i+1个更新边长度参数,对节点距离函数进行解析;i为正整数;第一个更新边长度参数为边长度参数;
参数调整子单元1422,用于若对节点距离函数解析成功,则获取对节点距离函数解析得到的指令有向图数据中的节点的第i+1个节点更新调度时间,对第i+1个更新边长度参数进行参数调整,得到第i+2个更新边长度参数;
时间确定子单元1423,用于若对节点距离函数解析失败,则将采用第i个更新边长度参数得到的指令有向图数据中的节点的第i个节点更新调度时间,确定为指令有向图数据中的节点所对应的节点预测调度时间。
其中,该关键检测子单元1412,包括:
路径遍历子单元141a,用于对指令有向图数据中的节点进行遍历,得到指令有向图数据所包括的M个图路径;M为正整数;
长度统计子单元141b,用于获取M个图路径分别包括的边的初始权重,将M个图路径分别包括的边的初始权重进行求和,得到M个图路径分别对应的路径长度;
关键确定子单元141c,用于将M个图路径中最大的路径长度所对应的图路径,确定为指令有向图数据中的边所对应的第一关键路径。
其中,节点距离函数包括物理约束函数及相邻约束函数;
该函数构建单元141,包括:
物理约束子单元1416,用于采用指令有向图数据中的边的初始权重,对指令有向图数据中的节点进行物理约束,得到物理约束函数;
相邻约束子单元1417,用于采用边长相似阈值对指令有向图数据中的相邻边所对应的节点进行约束,得到相邻约束函数;边长相似阈值,用于表示指令有向图数据中的相邻边的长度所能达到的最大值。
其中,节点预测调度时间为节点调度时间范围;
该权重更新单元143,包括:
子图检测子单元1431,用于对指令有向图数据中的节点进行检测,得到指令有向图数据中的指令子图;指令子图是指包括的子图路径的起始点与终止点相同的图;
权重构建子单元1432,用于在指令有向图数据中的节点所对应的节点调度时间范围内,确定指令子图所包括的子图边的候选权重组;候选权重组包括子图边的候选权重;
权重确定子单元1433,用于将候选权重组中的候选权重差值最小的候选权重组,确定为目标候选权重组,将目标候选权重组所包括的候选权重确定为子图边的更新权重;
该权重确定子单元1433,还用于固定子图边的更新权重,在指令有向图数据中的节点所对应的节点调度时间范围内,确定指令有向图数据中的待解析边的更新权重;待解析边是指指令有向图数据中的边除子图边之外的边。
其中,该代码调整模块15,包括:
参数获取单元151,用于获取指令有向图数据中的节点的调度参数;
指令排序单元152,用于基于节点的调度参数对代码指令进行排序处理,得到更新指令;指令有向图数据中的节点的调度参数包括指令启动间隔;
指令调度单元153,用于采用指令启动间隔及指令有向图数据中的边的更新权重,对更新指令进行调度处理;
代码调整单元154,用于若调度成功,则基于对更新指令进行调度处理的调度信息,对程序代码进行调整,得到更新代码。
其中,节点的调度参数包括指令启动间隔范围,指令启动间隔范围由最小启动间隔及最大启动间隔组成;
该参数获取单元151,包括:
第一处理子单元1511,用于基于代码指令的数量获取程序代码所对应的单元处理量;
第二处理子单元1512,用于获取指令有向图数据中的第一关键路径,获取第一关键路径所对应的路径处理量;指令有向图数据是指边的权重为初始权重的图;
间隔确定子单元1513,用于将单元处理量与路径处理量中的最大值,确定为最小启动间隔,获取间隔调度参数,在最小启动间隔上添加间隔调度参数,得到最大启动间隔。
其中,该指令调度单元153,包括:
结果确定子单元1531,用于采用指令启动间隔范围中的第j个指令启动间隔,及指令有向图数据中的边的更新权重,对更新指令进行调度处理,得到调度结果;j为正整数;
失败调度子单元1532,用于若调度结果为调度失败结果,则获取指令启动间隔范围中的第j+1个指令启动间隔;
成功调度子单元1533,用于若调度结果为调度成功结果,则确定调度成功。
其中,代码指令的数量为N;N为正整数;该指令排序单元152,包括:
关键排序子单元1521,用于获取更新有向图数据中的第二关键路径,将第二关键路径所包括的关键节点对应的关键代码指令组成初始排序指令;更新有向图数据是指由指令有向图数据中的边的更新权重、指令有向图数据中的节点和边所组成的图;代码指令包括关键代码指令;
关联排序子单元1522,用于将关键节点的前继节点与后继节点分别对应的代码指令,添加至初始排序指令中,得到中间排序指令;
指令确定子单元1523,用于若中间排序指令包括N个代码指令,则将中间排序指令确定为更新指令;
指令更新子单元1524,用于若中间排序指令未包括N个代码指令,则将中间排序指令所包括的代码指令的节点的前继节点与后继节点分别对应的代码指令,添加至中间排序指令中。
其中,该指令调度单元153,包括:
窗口确定子单元1534,用于获取已解析节点的节点调度时间,采用指令有向图数据中的边的更新权重、节点调度时间及指令启动间隔,确定节点解析序列中的第k个节点的调度时间窗口;k为自然数;节点解析序列用于表示对指令有向图数据中的节点的解析顺序;
窗口遍历子单元1535,用于基于指令启动间隔对第k个节点的调度时间窗口进行遍历,若第k个节点的调度时间窗口中存在满足指令启动间隔的目标调度时间,则确定调度成功,将目标调度时间确定为第k个节点的节点调度时间;
失败确定子单元1536,用于若第k个节点的调度时间窗口均不满足指令启动间隔,则确定调度失败。
本申请实施例提供了一种指令管理装置,该装置可以获取程序代码,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;获取指令有向图数据中的边的初始权重,基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。通过以上过程,可以对程序代码进行有向图构建,使得可以通过指令有向图数据直观简洁地表达出程序代码中所存在的代码指令及代码指令之间的指令依赖关系,进而可以对指令有向图数据直接进行边的权重的更新,使得对指令有向图数据的调整不会更改其结构,也就是不会影响指令依赖关系,且该过程是对有向图的处理,不涉及实际的程序代码,使得处理效率较高。通过对指令有向图数据进行权重更新,进行初步的指令调度优化,减少了各个节点调度所需处理的数据量,进而提高指令调度的性能及效率,提高代码调整的效率。
参见图11,图11是本申请实施例提供的一种计算机设备的结构示意图。如图11所示,本申请实施例中的计算机设备可以包括:一个或多个处理器1101、存储器1102和输入输出接口1103。该处理器1101、存储器1102和输入输出接口1103通过总线1104连接。存储器1102用于存储计算机程序,该计算机程序包括程序指令,输入输出接口1103用于接收数据及输出数据,如用于宿主机与计算机设备之间进行数据交互,或者用于在宿主机中的各个虚拟机之间进行数据交互;处理器1101用于执行存储器1102存储的程序指令。
其中,该处理器1101可以执行如下操作:
获取程序代码,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;
获取指令有向图数据中的边的初始权重,基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;
采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。
在一些可行的实施方式中,该处理器1101可以是中央处理单元(centralprocessing unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器1102可以包括只读存储器和随机存取存储器,并向处理器1101和输入输出接口1103提供指令和数据。存储器1102的一部分还可以包括非易失性随机存取存储器。例如,存储器1102还可以存储设备类型的信息。
具体实现中,该计算机设备可通过其内置的各个功能模块执行如该图4中各个步骤所提供的实现方式,具体可参见该图4中各个步骤所提供的实现方式,在此不再赘述。
本申请实施例通过提供一种计算机设备,包括:处理器、输入输出接口、存储器,通过处理器获取存储器中的计算机程序,执行该图4中所示方法的各个步骤,进行指令管理操作。本申请实施例实现了获取程序代码,以程序代码所包括的代码指令构建节点,以程序代码所包括的代码指令之间的指令依赖关系构建边,生成指令有向图数据;获取指令有向图数据中的边的初始权重,基于指令有向图数据对指令有向图数据中的边的初始权重进行更新,得到指令有向图数据中的边的更新权重;采用指令有向图数据中的边的更新权重,对程序代码进行调整,生成更新代码。通过以上过程,可以对程序代码进行有向图构建,使得可以通过指令有向图数据直观简洁地表达出程序代码中所存在的代码指令及代码指令之间的指令依赖关系,进而可以对指令有向图数据直接进行边的权重的更新,使得对指令有向图数据的调整不会更改其结构,也就是不会影响指令依赖关系,且该过程是对有向图的处理,不涉及实际的程序代码,使得处理效率较高。通过对指令有向图数据进行权重更新,进行初步的指令调度优化,减少了各个节点调度所需处理的数据量,进而提高指令调度的性能及效率,提高代码调整的效率。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序适于由该处理器加载并执行图4中各个步骤所提供的指令管理方法,具体可参见该图4中各个步骤所提供的实现方式,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,计算机程序可被部署为在一个计算机设备上执行,或者在位于一个地点的多个计算机设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算机设备上执行。
该计算机可读存储介质可以是前述任一实施例提供的指令管理装置或者该计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行图4中的各种可选方式中所提供的方法,实现了对程序代码进行有向图构建,使得可以通过指令有向图数据直观简洁地表达出程序代码中所存在的代码指令及代码指令之间的指令依赖关系,进而可以对指令有向图数据直接进行边的权重的更新,使得对指令有向图数据的调整不会更改其结构,也就是不会影响指令依赖关系,且该过程是对有向图的处理,不涉及实际的程序代码,使得处理效率较高。通过对指令有向图数据进行权重更新,进行初步的指令调度优化,减少了各个节点调度所需处理的数据量,进而提高指令调度的性能及效率,提高代码调整的效率。
本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在该说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例提供的方法及相关装置是参照本申请实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可提供到通用计算机、专用计算机、嵌入式处理机或其他可编程指令管理设备的处理器以产生一个机器,使得通过计算机或其他可编程指令管理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程指令管理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程指令管理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或结构示意一个方框或多个方框中指定的功能的步骤。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

Claims (14)

1.一种指令管理方法,其特征在于,所述方法包括:
获取程序代码,以所述程序代码所包括的代码指令构建节点,以所述程序代码所包括的代码指令与生成该代码指令中的指令参数的另一个代码指令构建边,生成指令有向图数据;所述程序代码为芯片编译代码;
将所述指令有向图数据中的边所关联的代码指令之间的延迟拍数,确定为该边的初始权重;
采用所述指令有向图数据中的边的初始权重,对所述指令有向图数据中的节点进行约束,得到所述指令有向图数据中的节点所对应的节点距离函数;
采用第i+1个更新边长度参数,对所述节点距离函数进行解析;i为正整数;第一个更新边长度参数为边长度参数;
若对所述节点距离函数解析成功,则获取对所述节点距离函数解析得到的所述指令有向图数据中的节点的第i+1个节点更新调度时间,对所述第i+1个更新边长度参数进行参数调整,得到第i+2个更新边长度参数;
若对所述节点距离函数解析失败,则将采用第i个更新边长度参数得到的所述指令有向图数据中的节点的第i个节点更新调度时间,确定为所述指令有向图数据中的节点所对应的节点预测调度时间;
基于所述指令有向图数据中的节点所对应的节点预测调度时间,确定所述指令有向图数据中的边的更新权重;
采用所述指令有向图数据中的边的更新权重,对所述程序代码进行调整,生成更新代码。
2.如权利要求1所述的方法,其特征在于,所述节点距离函数包括第一节点距离函数及第二节点距离函数;
所述采用所述指令有向图数据中的边的初始权重,对所述指令有向图数据中的节点进行约束,得到所述指令有向图数据中的节点所对应的节点距离函数,包括:
获取所述指令有向图数据中的边的边长度参数,检测所述指令有向图数据中的边中的第一关键路径,将所述指令有向图数据的边中除所述第一关键路径之外的边确定为常规路径;
采用所述指令有向图数据中的边的初始权重及所述边长度参数,对所述常规路径所对应的节点进行约束,构建所述常规路径所对应的第一节点距离函数;
采用所述指令有向图数据中的边的初始权重,对所述第一关键路径所对应的节点进行约束,构建所述第一关键路径所对应的第二节点距离函数。
3.如权利要求2所述的方法,其特征在于,所述获取所述指令有向图数据中的边的边长度参数,包括:
从所述指令有向图数据中的边的初始权重中,获取最大初始权重,对所述最大初始权重进行权重扩大处理,得到所述指令有向图数据中的边的边长度参数。
4.如权利要求2所述的方法,其特征在于,所述检测所述指令有向图数据中的边中的第一关键路径,包括:
对所述指令有向图数据中的节点进行遍历,得到所述指令有向图数据所包括的M个图路径;M为正整数;
获取所述M个图路径分别包括的边的初始权重,将所述M个图路径分别包括的边的初始权重进行求和,得到所述M个图路径分别对应的路径长度;
将所述M个图路径中最大的路径长度所对应的图路径,确定为所述指令有向图数据中的边所对应的第一关键路径。
5.如权利要求1所述的方法,其特征在于,所述节点距离函数包括物理约束函数及相邻约束函数;
所述采用所述指令有向图数据中的边的初始权重,对所述指令有向图数据中的节点进行约束,得到所述指令有向图数据中的节点所对应的节点距离函数,包括:
采用所述指令有向图数据中的边的初始权重,对所述指令有向图数据中的节点进行物理约束,得到所述物理约束函数;
采用边长相似阈值对所述指令有向图数据中的相邻边所对应的节点进行约束,得到所述相邻约束函数;所述边长相似阈值,用于表示所述指令有向图数据中的相邻边的长度所能达到的最大值。
6.如权利要求1所述的方法,其特征在于,所述节点预测调度时间为节点调度时间范围;
所述基于所述指令有向图数据中的节点所对应的节点预测调度时间,确定所述指令有向图数据中的边的更新权重,包括:
对所述指令有向图数据中的节点进行检测,得到所述指令有向图数据中的指令子图;所述指令子图是指包括的子图路径的起始点与终止点相同的图;
在所述指令有向图数据中的节点所对应的节点调度时间范围内,确定所述指令子图所包括的子图边的候选权重组;所述候选权重组包括所述子图边的候选权重;
将所述候选权重组中的候选权重差值最小的候选权重组,确定为目标候选权重组,将所述目标候选权重组所包括的候选权重确定为所述子图边的更新权重;
固定所述子图边的更新权重,在所述指令有向图数据中的节点所对应的节点调度时间范围内,确定所述指令有向图数据中的待解析边的更新权重;所述待解析边是指所述指令有向图数据中的边除所述子图边之外的边。
7.如权利要求1所述的方法,其特征在于,所述采用所述指令有向图数据中的边的更新权重,对所述程序代码进行调整,生成更新代码,包括:
获取所述指令有向图数据中的节点的调度参数,基于所述节点的调度参数对所述代码指令进行排序处理,得到更新指令;所述指令有向图数据中的节点的调度参数包括指令启动间隔;
采用所述指令启动间隔及所述指令有向图数据中的边的更新权重,对所述更新指令进行调度处理;
若调度成功,则基于对所述更新指令进行调度处理的调度信息,对所述程序代码进行调整,得到更新代码。
8.如权利要求7所述的方法,其特征在于,所述节点的调度参数包括指令启动间隔范围,所述指令启动间隔范围由最小启动间隔及最大启动间隔组成;
所述获取所述指令有向图数据中的节点的调度参数,包括:
基于所述代码指令的数量获取所述程序代码所对应的单元处理量;
获取指令有向图数据中的第一关键路径,获取所述第一关键路径所对应的路径处理量;所述指令有向图数据是指边的权重为初始权重的图;
将所述单元处理量与所述路径处理量中的最大值,确定为所述最小启动间隔,获取间隔调度参数,在所述最小启动间隔上添加所述间隔调度参数,得到所述最大启动间隔。
9.如权利要求8所述的方法,其特征在于,所述采用所述指令启动间隔及所述指令有向图数据中的边的更新权重,对所述更新指令进行调度处理,包括:
采用所述指令启动间隔范围中的第j个指令启动间隔,及所述指令有向图数据中的边的更新权重,对所述更新指令进行调度处理,得到调度结果;j为正整数;
若所述调度结果为调度失败结果,则获取所述指令启动间隔范围中的第j+1个指令启动间隔;
若所述调度结果为调度成功结果,则确定调度成功。
10.如权利要求7所述的方法,其特征在于,所述代码指令的数量为N;N为正整数;所述基于所述节点的调度参数对所述代码指令进行排序处理,得到更新指令,包括:
获取所述获取更新有向图数据中的第二关键路径,将所述第二关键路径所包括的关键节点对应的关键代码指令组成初始排序指令;所述更新有向图数据是指由所述指令有向图数据中的边的更新权重、所述指令有向图数据中的节点和边所组成的图;所述代码指令包括所述关键代码指令;
将所述关键节点的前继节点与后继节点分别对应的代码指令,添加至所述初始排序指令中,得到中间排序指令;
若所述中间排序指令包括N个代码指令,则将所述中间排序指令确定为更新指令;
若所述中间排序指令未包括所述N个代码指令,则将所述中间排序指令所包括的代码指令的节点的前继节点与后继节点分别对应的代码指令,添加至所述中间排序指令中。
11.如权利要求7所述的方法,其特征在于,所述采用所述指令启动间隔及所述指令有向图数据中的边的更新权重,对所述更新指令进行调度处理,包括:
获取已解析节点的节点调度时间,采用所述指令有向图数据中的边的更新权重、所述节点调度时间及所述指令启动间隔,确定节点解析序列中的第k个节点的调度时间窗口;k为自然数;所述节点解析序列用于表示对所述指令有向图数据中的节点的解析顺序;
基于所述指令启动间隔对所述第k个节点的调度时间窗口进行遍历,若所述第k个节点的调度时间窗口中存在满足所述指令启动间隔的目标调度时间,则确定调度成功,将所述目标调度时间确定为所述第k个节点的节点调度时间;
若所述第k个节点的调度时间窗口均不满足所述指令启动间隔,则确定调度失败。
12.一种指令管理装置,其特征在于,所述装置包括:
代码获取模块,用于获取程序代码;
图构建模块,用于以所述程序代码所包括的代码指令构建节点,以所述程序代码所包括的代码指令与生成该代码指令中的指令参数的另一个代码指令构建边,生成指令有向图数据;所述程序代码为芯片编译代码;
权重获取模块,用于将所述指令有向图数据中的边所关联的代码指令之间的延迟拍数,确定为该边的初始权重;
权重更新模块,用于基于所述指令有向图数据对所述指令有向图数据中的边的初始权重进行更新,得到所述指令有向图数据中的边的更新权重;
代码调整模块,用于采用所述指令有向图数据中的边的更新权重,对所述程序代码进行调整,生成更新代码;
所述权重更新模块,包括:
函数构建单元,用于采用所述指令有向图数据中的边的初始权重,对所述指令有向图数据中的节点进行约束,得到所述指令有向图数据中的节点所对应的节点距离函数;
函数解析单元,用于对所述节点距离函数进行解析,得到所述指令有向图数据中的节点所对应的节点预测调度时间;
权重更新单元,用于基于所述指令有向图数据中的节点所对应的节点预测调度时间,确定所述指令有向图数据中的边的更新权重;
所述函数解析单元,包括:
函数解析子单元,用于采用第i+1个更新边长度参数,对所述节点距离函数进行解析;i为正整数;第一个更新边长度参数为边长度参数;
参数调整子单元,用于若对所述节点距离函数解析成功,则获取对所述节点距离函数解析得到的所述指令有向图数据中的节点的第i+1个节点更新调度时间,对所述第i+1个更新边长度参数进行参数调整,得到第i+2个更新边长度参数;
时间确定子单元,用于若对所述节点距离函数解析失败,则将采用第i个更新边长度参数得到的所述指令有向图数据中的节点的第i个节点更新调度时间,确定为所述指令有向图数据中的节点所对应的节点预测调度时间。
13.一种计算机设备,其特征在于,包括处理器、存储器、输入输出接口;
所述处理器分别与所述存储器和所述输入输出接口相连,其中,所述输入输出接口用于接收数据及输出数据,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使得所述计算机设备执行权利要求1-11任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于由处理器加载并执行,以使得具有所述处理器的计算机设备执行权利要求1-11任一项所述的方法。
CN202311112660.4A 2023-08-31 2023-08-31 指令管理方法、装置、计算机、存储介质及程序产品 Active CN116841592B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311112660.4A CN116841592B (zh) 2023-08-31 2023-08-31 指令管理方法、装置、计算机、存储介质及程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311112660.4A CN116841592B (zh) 2023-08-31 2023-08-31 指令管理方法、装置、计算机、存储介质及程序产品

Publications (2)

Publication Number Publication Date
CN116841592A CN116841592A (zh) 2023-10-03
CN116841592B true CN116841592B (zh) 2023-11-24

Family

ID=88172847

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311112660.4A Active CN116841592B (zh) 2023-08-31 2023-08-31 指令管理方法、装置、计算机、存储介质及程序产品

Country Status (1)

Country Link
CN (1) CN116841592B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117591242B (zh) * 2023-11-30 2024-04-05 深流微智能科技(深圳)有限公司 基于底层虚拟机的编译优化方法、系统、存储介质及终端

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102830954A (zh) * 2012-08-24 2012-12-19 北京中科信芯科技有限责任公司 指令调度方法及装置
CN105843660A (zh) * 2016-03-21 2016-08-10 同济大学 一种编译器的代码优化调度方法
CN115951902A (zh) * 2022-12-30 2023-04-11 中电信数智科技有限公司 一种容器调度方法、装置、设备和存储介质
CN116560730A (zh) * 2022-01-29 2023-08-08 华为技术有限公司 一种指令调度方法及相关设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11513841B2 (en) * 2019-07-19 2022-11-29 EMC IP Holding Company LLC Method and system for scheduling tasks in a computing system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102830954A (zh) * 2012-08-24 2012-12-19 北京中科信芯科技有限责任公司 指令调度方法及装置
CN105843660A (zh) * 2016-03-21 2016-08-10 同济大学 一种编译器的代码优化调度方法
CN116560730A (zh) * 2022-01-29 2023-08-08 华为技术有限公司 一种指令调度方法及相关设备
CN115951902A (zh) * 2022-12-30 2023-04-11 中电信数智科技有限公司 一种容器调度方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN116841592A (zh) 2023-10-03

Similar Documents

Publication Publication Date Title
Yang et al. Deep neural decision trees
CN108388425B (zh) 一种基于lstm自动补全代码的方法
CN102598001B (zh) 用于执行对逻辑设计的分析的方法和系统
Blelloch Programming parallel algorithms
CN116841592B (zh) 指令管理方法、装置、计算机、存储介质及程序产品
CN110659070B (zh) 高并行度计算系统及其指令调度方法
Culler Managing parallelism and resources in scientific dataflow programs
Si et al. Learning a meta-solver for syntax-guided program synthesis
Levorato et al. Evaluating balancing on social networks through the efficient solution of correlation clustering problems
Latella et al. On-the-fly PCTL fast mean-field approximated model-checking for self-organising coordination
CN117170685B (zh) 一种数据处理方法、装置、设备及介质
CN114692860A (zh) 一种计算图的节点融合方法及设备
Yang et al. Discovering design concepts for CAD sketches
Katoen et al. Probabilistic model checking for uncertain scenario-aware data flow
JP2010262471A (ja) 並列化スケジューリング装置
Betin et al. Eliciting and the use of information concerning regular structures in the formalism of functional neural networks in decision-support systems
Bradley Towards reliable modelling with stochastic process algebras
Ramanujan et al. Control languages associated with spiking neural P systems
Spieck et al. Run-time scenario-based MPSoC mapping reconfiguration using machine learning models
Gengler An introduction to parallel dynamic programming
Batiuk et al. Intelligent System for Socialization of Individual's with Shared Interests based on NLP, Machine Learning and SEO Technologies.
Chamberlain et al. Application-guided tool development for architecturally diverse computation
Domrös et al. Model Order in Sugiyama Layouts.
Padmanabhan et al. Convexity in non-convex optimizations of streaming applications
Ersfolk Scheduling dynamic dataflow graphs with model checking

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
GR01 Patent grant
GR01 Patent grant