CN112882753A - 程序运行方法及装置 - Google Patents

程序运行方法及装置 Download PDF

Info

Publication number
CN112882753A
CN112882753A CN201911203313.6A CN201911203313A CN112882753A CN 112882753 A CN112882753 A CN 112882753A CN 201911203313 A CN201911203313 A CN 201911203313A CN 112882753 A CN112882753 A CN 112882753A
Authority
CN
China
Prior art keywords
instruction
target
block
storage unit
instruction block
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
CN201911203313.6A
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.)
Cambricon Technologies Corp Ltd
Original Assignee
Cambricon Technologies Corp 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 Cambricon Technologies Corp Ltd filed Critical Cambricon Technologies Corp Ltd
Priority to CN201911203313.6A priority Critical patent/CN112882753A/zh
Publication of CN112882753A publication Critical patent/CN112882753A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例提供了一种程序运行方法及装置,该方法可以通过调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令,从而在软件层面上实现了可以运行大于指令存储单元存储空间的程序。

Description

程序运行方法及装置
技术领域
本申请涉及处理器技术领域,尤其涉及一种程序运行方法及装置。
背景技术
随着科学技术的发展,终端设备支持的功能越来越强大,终端设备中的处理器处理的程序也越来越复杂。而现有的指令存储单元的存储空间有限,比如,一般的指令存储单元能够存储1024条指令,但对于一些复杂度比较大的功能,其需要运行的指令占用的存储空间通常会大于指令存储单元的存储空间,因此需要一种机制来确保大于指令存储单元大小的程序能够在指令存储单元上正常运行。通常硬件会提供一些机制来保证程序的正常运行,但当硬件不提供相关机制时,大于指令存储单元存储空间的程序则无法运行。
申请内容
本申请实施例提供了一种程序运行方法及装置,可实现在不具备指令交换机制的硬件上运行大于指令存储单元存储空间的程序。
第一方面,本申请实施例提供一种程序运行方法,所述方法包括:
从存储器中获取指令集,其中,所述指令集包括至少一个指令块,所述指令块包括至少一个指令;
将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块;
若即将执行的目标指令未在所述目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。
在一个可能的实施例中,所述目标指令块还包括传参指令,所述传参指令为所述目标指令块的最后一条指令;
所述传参指令用于将所述目标指令的目标地址传送至所述相关指令。
在一个可能的实施例中,所述目标指令块包括所述相关指令,所述相关指令置于所述目标指令块的最后。
在一个可能的实施例中,所述指令存储单元包括第一存储单元和第二存储单元,所述第一存储单元用于存储所述目标指令块;
若即将执行的目标指令未在所述目标指令块中时,所述调用相关指令获得所述目标指令所在的指令块,包括:
若即将执行的目标指令未在所述目标指令块中时,则从所述第二存储单元中调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述第一存储单元中。
在一个可能的实施例中,在所述将目标指令块加载至指令存储单元之前,当所述指令块中包含长跳转指令时,所述方法还包括:
若所述长跳转指令之后存在空指令,则将所述空指令替换为所述传参指令;
若所述长跳转指令之后不存在空指令,则在所述长跳转指令的前面或后面插入所述传参指令。
在一个可能的实施例中,所述方法还包括:
当所述指令集中插入传参指令或相关指令后,更新所述指令集以及所述指令集中指令的PC值;
根据更新后的所述指令集确定所述指令块的数量。
在一个可能的实施例中,所述调用相关指令获得所述目标指令所在的指令块,包括:
调用所述相关指令,确定所述目标指令的目标地址;
根据所述目标指令的目标地址确定所述目标指令所在的指令块。
进一步地,所述根据所述目标指令的目标地址确定所述目标指令所在的指令块,还包括:
根据所述目标指令的目标地址,确定所述目标指令所在的指令块的首地址以及所述目标指令块所在的指令块。
在一个可能的实施例中,所述将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令,包括:
通过所述相关指令确定所述目标指令在所述目标指令块中的当前位置;
将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中之后,从所述目标指令的当前位置开始执行所述目标指令块。
第二方面,本申请实施例提供一种程序运行装置,所述装置包括:
获取模块,用于从存储器中获取指令集,其中,所述指令集包括至少一个指令块,所述指令块包括至少一个指令;
加载模块,用于将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块;
调用模块,用于若即将执行的目标指令未在所述目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。
在一个可能的实施例中,所述目标指令块还包括传参指令,所述传参指令为所述目标指令块的最后一条指令;
所述传参指令用于将所述目标指令的目标地址传送至所述相关指令。
在一个可能的实施例中,所述目标指令块包括所述相关指令,所述相关指令置于所述目标指令块的最后。
在一个可能的实施例中,所述指令存储单元包括第一存储单元和第二存储单元,所述第一存储单元用于存储所述目标指令块;
若即将执行的目标指令未在所述目标指令块中时,所述调用相关指令获得所述目标指令所在的指令块,包括:
若即将执行的目标指令未在所述目标指令块中时,则从所述第二存储单元中调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述第一存储单元中。
在一个可能的实施例中,在所述将目标指令块加载至指令存储单元之前,当所述指令块中包含长跳转指令时,所述装置还包括:
替换模块,用于若所述长跳转指令之后存在空指令,则将所述空指令替换为所述传参指令;
插入模块,用于若所述长跳转指令之后不存在空指令,则所述长跳转指令的前面或后面插入所述传参指令。
在一个可能的实施例中,所述程序运行装置还包括:
更新模块,用于当所述指令集中插入传参指令或相关指令后,更新所述指令集以及所述指令集中指令的PC值;
确定模块,用于根据更新后的所述指令集确定所述指令块的数量。
在一个可能的实施例中,所述调用模块还用于执行:
调用所述相关指令,获得所述目标指令的目标地址;
根据所述目标指令的目标地址确定所述目标指令所在的指令块。
进一步地,所述调用模块还用于执行:
根据所述目标指令的目标地址,确定所述目标指令所在的指令块的首地址以及所述目标指令块所在的指令块。
在一个可能的实施例中,所述调用模块还用于执行:
通过所述相关指令确定所述目标指令在所述目标指令块中的当前位置;
将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中之后,从所述目标指令的当前位置开始执行所述目标指令块。
第三方面,本申请实施例提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器中存储有可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如本申请实施例第一方面所描述的部分或全部步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质包括存储用于数据交换的计算机程序,所述计算机程序被处理器执行时实现如本申请实施例第一方面所描述的部分或全部步骤。
第五方面,本申请实施例提供了一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如本申请实施例第一方面所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
实施本申请实施例,至少具有如下有益效果:
本申请实施例提供一种程序运行方法及装置,通过从存储器中获取指令集,将目标指令块加载至指令存储单元,若即将执行的目标指令未在所述目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。该方法可以通过调用相关指令将目标指令块加载至指令存储单元以执行目标指令,从而在软件层面上实现了可以运行大于指令存储单元存储空间的程序。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种计算机装置的结构示意图;
图2是本申请实施例提供的一种程序运行方法的流程示意图;
图3A是本申请实施例提供的一种指令存储单元的存储空间示意图;
图3B是本申请实施例提供的另一种指令存储单元的存储空间示意图;
图4是本申请实施例提供的另一种程序运行方法的流程示意图;
图5A是本申请实施例提供的一种跳转指令更新对比的示意图;
图5B是本申请实施例提供的另一种跳转指令更新对比的示意图;
图6是本申请实施例提供的另一种程序运行方法的流程示意图;
图7是本申请实施例提供的一种原始程序的示意图;
图8A是本申请实施例提供的一种程序划分后的示意图;
图8B是本申请实施例提供的一种程序更新后的示意图;
图8C是本申请实施例提供的一种程序处理后的示意图;
图9A是本申请实施例提供的一种程序运行装置的功能单元组成框图;
图9B是本申请实施例提供的另一种程序运行装置的功能单元组成框图;
图9C是本申请实施例提供的另一种程序运行装置的功能单元组成框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
目前,现有的指令存储单元的存储空间有限,当处理器需要运行一些复杂度比较大的功能程序时,运行该程序指令占用的存储空间可能大于指令存储单元的存储空间,因此需要一种机制来确保大于指令存储单元大小的程序能够在指令存储单元上正常运行。通常硬件会提供一些机制来保证程序的正常运行,但当硬件不提供相关机制时,大于指令存储单元存储空间的程序则无法运行。
为此,本申请提出了一种程序运行方法,当执行的目标指令未在指令存储单元中时,可以通过调用相关指令将目标指令的指令块加载至指令存储单元来执行目标指令,使得处理器可以运行大于指令存储单元存储空间的程序,从而解决在不具备指令交换机制的硬件上无法运行大于指令存储单元存储空间的程序的问题。
下面结合具体实施例,对本申请进行详细说明。
请参阅图1,图1是本申请实施例提供的一种计算机装置的结构示意图,如1图所示,该计算机装置包括存储器、输入设备、输出设备和处理器,其中,该计算机装置还可以包括通信总线,处理器、输入设备、输出设备和存储器之间可以通过总线相互连接。可选地,上述计算机装置还可以包括指令存储单元,该指令存储单元可以临近处理器设置。进一步可选地,指令存储单元可以与处理器集成为一体,即该指令存储单元可以是处理器的片上存储单元。这样,当处理器需要执行存储器中程序时,计算机装置首先将存储器中的程序加载至指令存储单元,之后,处理器可以访问上述的指令存储单元,以执行指令存储单元中的程序。
其中,上述处理器,用于执行所述存储器上所存放的程序时,实现以下步骤:
从存储器中获取指令集,其中,所述指令集包括至少一个指令块,所述指令块包括至少一个指令;将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块;若即将执行的目标指令未在所述目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。
进一步地,上述处理器可以是中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)、图形处理器(Graphics Processing Unit,GPU)或图象处理器(Image Processing Unit),本申请对此不做限定。根据处理器的不同,本申请实施例提出的程序运行方法可以应用于图像识别、深度学习、计算机视觉、智能机器人、自然语言处理等人工智能应用领域,执行人工智能领域中的复杂功能程序。
请参阅图2,图2是本申请实施例提供的一种程序运行方法的流程示意图,该方法应用于如图1所示的计算机装置。如图2所示,该方法包括如下步骤:
S201、从存储器中获取指令集,所述指令集包括至少一个指令块,所述指令块包括至少一个指令。
具体实施中,程序由至少包含一个指令的指令集以及数据组成,其存储于存储器中,可以按照程序的执行顺序将指令集划分成至少一个指令块,划分完成之后,得到指令块的执行顺序,也称为指令块执行轨迹。其中,指令集中的指令可以是二进制指令或以高级语言编写的指令等等,此处不做具体限定。
一般地,指令集中指令序列占用的存储空间远大于指令存储单元的存储空间,因此,在指令集中指令序列占用的存储空间大于指令存储单元地存储空间时,可以将指令集中的指令序列划分为多个指令块。具体地,可以按照小于或等于指令存储单元存储空间的指定存储空间将指令集中的指令序列划分成n个指令块,也可以按照随机存储空间将指令集中的指令序列划分成n个指令块。其中,划分的每个指令块所占用的存储空间可以相同,也可以不同,本申请实施例对此不做限定。
具体来讲,指令块的执行顺序依据程序的执行顺序进行执行,划分之后的指令块的执行顺序与程序的执行顺序相同,也就是指令块的执行轨迹与程序的执行顺序是一致的。所述程序的执行顺序是指程序中指令的执行顺序。
本申请将指令集划分的指令块的数量至少为一个,也就是说,可以将指令块划分为多个指令块,也可以整个一个程序作为一个指令块。例如,当整个程序所涉及的指令集所需的存储空间小于或等于指令存储单元的存储空间时,则可以将该整个程序作为一个指令块。每个指令块中包含一定数量的指令,每个指令块中包含的指令的数量可以为一条也可以是多条。一般情况下,指令块中包含至少一条指令,至少一个指令按照特定的顺序被处理器执行。
S202、将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块。
其中,目标指令块为至少一个指令块中的其中一个。所述指令存储单元存储目标指令块,所述目标指令块可以是编译后即将执行的指令块,当所述目标指令块不在指令存储单元时,将目标指令块加载至指令存储单元,以使处理器能够执行目标指令块中的指令。
其中,该指令存储单元贴近所述处理器设置,存储器相对于指令存储单元远离处理器设置。可选地,指令存储单元可以是集成于处理器上的片上存储单元,存储器可以是与该处理器连接的外部存储单元。可选地,指令存储单元(Instruction RAM,IRAM)可以是片内随机存储器、片内只读存储器或同步动态随机存储器(Synchronous Dynamic RandomAccess Memory,SDRAM),本申请实施例对此不做限制。
S203、若即将执行的目标指令未在目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。
其中,所述相关指令可以是用于将所述目标指令块加载至所述指令存储单元的指令,该相关指令可以包含至少一条指令。可选地,所述相关指令的输入可以是通过寄存器传递的目标指令的目标地址,该目标指令的目标地址可以通过增加或修改指令块中的指令来传送给所述寄存器。进而,相关指令能够读取寄存器中存储的目标指令的目标地址,并根据该目标指令的目标地址确定目标指令所属的指令块,以将该目标指令所属的指令块加载至指令存储单元中,从而可以执行目标指令。
可选的,所述目标指令块可以包括传参指令,所述传参指令为所述目标指令块的最后一条指令;所述传参指令用于将所述目标指令的目标地址传送至所述相关指令。
其中,所述传参指令可以用于获取目标指令的目标地址,所述传参指令的目的操作数可以为所述相关指令的输入,所述传参指令的源操作数可以为所述目标指令的目标地址。所述相关指令可以是用于将所述目标指令块加载至所述存储单元的指令,所述相关指令的输入可以是通过寄存器传递的目标指令的目标地址,该目标指令的目标地址可以通过增加或修改指令块中的指令来传送给所述寄存器。程序在运行前,需要进行编译,在编译时,可以在相邻的两个指令块之间插入一条传参指令。可以理解为,除了最后一个指令块,在每个指令块的最后一条指令后面增加一条传参指令。这样,在完成当前目标指令块的执行之后,可以通过该传参指令和相关指令切换至当前目标指令块的下一指令块执行。
进一步地,所述传参指令的目的操作数可以是寄存器,例如R1、R2、R3或R4。所述寄存器在程序运行过程中只能被该传参指令所使用。该传参指令可以包括但不限于MOV指令、PUSH指令、LEA指令等数据传输指令。
本申请实施例中,通过将目标指令块的最后一条指令块设置为传参指令,从而使得当前目标指令块执行结束后,能够通过传参指令调用相关指令,以自动实现下一指令块的加载及执行,实现指令块之间的自动切换执行,从而可以提高程序的执行效率。
可选地,所述调用相关指令获得所述目标指令所在的指令块,包括:
调用所述相关指令,获得所述目标指令的目标地址;
根据所述目标指令的目标地址确定所述目标指令所在的指令块。
具体地,可以通过获取所述相关指令的输入来获取所述目标指令的目标地址,根据所述目标指令的目标地址确定所述目标指令所在的指令块,并根据所述目标指令的目标地址计算确定所述目标指令所在的指令块的首地址。
其中,所述目标指令所在的指令块的首地址的计算方式可以为:所述目标指令的目标地址与所述目标指令所在的指令块占用的存储空间的商的向下取整的值和所述目标指令所在的指令块占用的存储空间之积,所述目标地址可以用数值表示。例如,在目标指令所在的指令块的首地址block_address=(R1/S1)*S1,R1表示目标指令的目标地址,S1表示目标指令所在的指令块占用的存储空间。
可选的,所述将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令,包括:
通过所述相关指令确定所述目标指令在所述目标指令块中的当前位置;
将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中之后,从所述目标指令的当前位置开始执行所述目标指令块。
具体地,根据所述目标指令所在的指令块占用的存储空间以及所述目标指令的目标地址,计算确定所述目标指令在所述目标指令块中的当前位置,并将所述目标指令的程序计数器(Program Counter,PC)设置为所述目标指令在所述目标指令块中的当前位置。在将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中之后,根据所述PC值,从所述目标指令的当前位置开始执行所述目标指令块。
其中,所述目标指令在所述目标指令块中的当前位置的计算方式可以表示为:所述目标指令的目标地址与所述目标指令所在的指令块占用的存储容量之间的余数,所述目标地址可以用数值表示。例如,目标指令在所述目标指令块中的当前位置target_address=R1%S1,R1表示目标指令的目标地址,S1表示目标指令所在的指令块占用的存储空间。
本申请实施例的程序运行方法,当即将执行的目标指令未在目标指令块时,如即将执行的指令为当前目标指令块地下一指令块,或即将执行的指令为跳转指令的目标指令时,通过调用相关指令,可以确定该目标指令的位置,以将该目标指令所属的指令块加载至指令存储单元中,从而可以执行目标指令。本申请实施例的方法,在软件层面实现了程序调度方法的优化。
在一个可能的实施例中,所述指令存储单元可以包括第一存储单元和第二存储单元。所述第一存储单元可以用于存储目标指令块,第二存储单元可以用于存储相关指令,所述相关指令可以是一段固化代码。
可选的,所述若即将执行的目标指令未在所述指令存储单元中时,调用相关指令获得所述目标指令所在的指令块包括:若即将执行的目标指令未在所述第一存储单元中时,则从所述第二存储单元中调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述第一存储单元中。
可以理解的是,当所述指令存储单元包括所述第一存储单元时,所述将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中可以包括:将所述目标指令所在的指令块作为目标指令块加载至所述第一存储单元。
具体地,将指令集划分为指令块时,根据第一存储单元的存储空间大小划分指令块,使得划分之后的每个指令块所占用的存储空间小于第一存储单元的存储空间,并要求所述第一存储单元可以存储一个完整的目标指令块。下面举例来说明,如图3A示,IRAM包括IRAM_P1和IRAM_P2,其中IRAM_P1占用的存储空间为S1,可以根据S1的大小将指令集划分成多个指令块,每个指令块占用的存储空间小于或等于S1。程序在执行时,第一个指令块首先被加载到IRAM_P1中运行,在执行过程中,如果即将执行的指令I不再IRAM_P1中,则调用IRAM_P2中的相关指令,将指令I所在的指令块加载至IRAM_P1中替换掉当前指令块,并从指令I开始执行,从而可以实现运行大于指令存储单元的存储空间的程序。
在一个可能的实施例中,所述指令存储单元可以存储所述目标指令块,所述目标指令块包括所述相关指令,所述相关指令置于所述目标指令块的最后。
具体地,将指令集划分为指令块时,根据所述指令存储单元的存储空间大小划分指令块,使得划分之后的每个指令块所占用的存储空间小于指令存储单元的存储空间,并要求所述指令存储单元可以存储一个完整的目标指令块。其中,所述目标指令块包括所述相关指令,所述相关指令置于所述目标指令块的最后,也就是说,指令集可以根据指令存储单元的存储空间与相关指令占用的存储空间之差小于来划分成指令块,如图3B所示,IRAM的存储空间为S,相关指令占用的存储空间为S2,可以根据S-S2的大小将指令集划分成多个指令块,每个指令块占用的存储空间小于或等于S-S2。程序在执行时,第一个指令块和相关指令首先被加载到IRAM中运行,在执行过程中,如果即将执行的指令I不再IRAM中,则调用IRAM中的相关指令,将指令I所在的指令块加载至IRAM中替换掉当前指令块,并从指令I开始执行,从而可以实现运行大于指令存储单元的存储空间的程序。
可选的,本申请实施例还包括对原始程序的指令集的修改过程,具体地,本申请实施例的编译器可以在编译时,在图5A或5B中更新前的指令集中插入传参指令和/或相关指令,以获得更新后的指令集,并将更新后的指令集划分为多个指令块。具体地,所述方法还包括:当所述指令集中插入所述传参指令或/和相关指令后,更新所述指令集以及所述指令集中指令的PC值;根据更新后的所述指令集确定所述指令块的数量。
其中,将指令集划分成指令块之后,除了最后一个指令块,在每个指令块的最后一条指令后面插入所述传参指令或/和相关指令。由于插入的传参指令或/和相关指令导致指令集中指令的PC值和目标地址发生了变化,因此,根据插入的传参指令或/和相关指令更新指令集中指令的PC值和目标地址。进一步地,更新后指令块占用的存储空间可以包括更新前指令块占用的存储空间以及传参指令或/和相关指令占用的存储空间。
请参阅图4,图4为本申请实施例提供的另一种程序运行方法的流程示意图,该方法应用于如图1所示的计算机装置。如图4所示,该方法包括如下步骤:
S401、从存储器中获取指令集,所述指令集包括至少一个指令块,所述指令块包括至少一个指令。
其中,该指令集可以是包含相关指令和/或传参指令的指令集。进一步地,计算机装置可以根据指令存储单元的存储空间将该指令集划分为至少一个指令块,指令块的具体划分方式可以参照上文中的描述。
上述步骤S401中的具体描述可以参考上述图2步骤S201所描述的具体实施方式,在此不再赘述。
可选的,计算机装置可以将原始程序的指令集划分为多个指令块,之后,为便于多个指令块之间的自动切换,编译器可以在指令块之间插入传参指令。在一个实施例中,编译器还可以在各个指令块的最后插入相关指令等。所述方法还包括:当所述指令集中插入所述传参指令或/和相关指令或/和空指令后,更新所述指令集以及所述指令集中指令的PC值;根据更新后的所述指令集确定所述指令块的数量。
其中,编译过程中,在相邻的两个指令块之间插入一条所述传参指令或在跳转指令的前面或后面插入所述传参指令或/和空指令之后。由于插入的传参指令或/和相关指令或/和空指令会导致指令集中指令的PC值和目标地址发生了变化,因此,需要更新指令集中指令的PC值和目标地址。
进一步地,更新后指令块占用的存储空间可以包括更新前指令块占用的存储空间以及传参指令或/和相关指令或/和空指令占用的存储空间。根据更新后指令块占用的存储空间重新划分指令块,确定所述指令块的数量。例如,原始程序的指令集占用的存储空间为T1,根据指令存储单元的存储空间S1将指令集划分为3个指令块,每个指令块占用的存储空间P1,其中P1<S1,经过编译后,由于插入了传参指令或/和相关指令或/和空指令,指令集占用的存储空间变化为T2,T2>T1,指令集重新根据指令存储单元的存储空间S1将指令集划分为3个指令块,每个指令块占用的存储空间为P2,其中P2>P1且P2<S1。
S402、将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块,所述目标指令块包括传参指令和相关指令。
其中,目标指令块为至少一个指令块中的其中一个。所述指令存储单元存储目标指令块,所述目标指令块可以是编译后即将执行的指令块,当所述目标指令块不在指令存储单元时,将目标指令块加载至指令存储单元,以使处理器能够执行目标指令块中的指令。
其中,该指令存储单元贴近所述处理器设置,存储器相对于指令存储单元远离处理器设置。可选地,指令存储单元可以是集成于处理器上的片上存储单元,存储器可以是与该处理器连接的外部存储单元。可选地,指令存储单元可以是IRAM、IROM或SDRAM,本申请实施例对此不做限制。
可选的,所述相关指令置于所述目标指令块的最后,所述传参指令置于所述目标指令块中的指令块与相关指令之间,所述传参指令用于将所述目标指令的目标地址传送至所述相关指令。也就是说,在同一目标指令块中,传参指令的PC值小于相关指令的PC值。在指令的执行过程中,传参指令先于相关指令执行。
其中,所述相关指令可以是用于将所述目标指令块加载至所述指令存储单元的指令,该相关指令可以包含至少一条指令。可选地,所述相关指令的输入可以是通过寄存器传递的目标指令的目标地址,该目标指令的目标地址可以通过增加或修改指令块中的指令来传送给所述寄存器。进而,相关指令能够读取寄存器中存储的目标指令的目标地址,并根据该目标指令的目标地址确定目标指令所属的指令块,以将该目标指令所属的指令块加载至指令存储单元中,从而可以执行目标指令。
其中,所述传参指令可以用于获取目标指令的目标地址,所述传参指令的目的操作数可以为所述相关指令的输入,所述传参指令的源操作数可以为所述目标指令的目标地址。所述相关指令可以是用于将所述目标指令块加载至所述存储单元的指令,所述相关指令的输入可以是通过寄存器传递的目标指令的目标地址,该目标指令的目标地址可以通过增加或修改指令块中的指令来传送给所述寄存器。程序在运行前,需要进行编译,在编译时,可以在指令块之间插入一条传参指令和相关指令。可以理解为,除了最后一个指令块,在每个指令块的最后一条指令后面增加一条传参指令和相关指令。这样,通过执行该传参指令,可以调用该相关指令将目标指令的目标指令块加载至指令存储单元中执行。
进一步地,所述传参指令的目的操作数可以包括寄存器,例如R1、R2、R3或R4。所述寄存器在程序运行过程中只能被该传参指令所使用。该传参指令可以包括但不限于MOV指令、PUSH指令、LEA指令等数据传输指令。
可选的,指令块中可以包括跳转指令,所述跳转指令包括长跳转指令和短跳转指令。可选地,可以通过静态分析跳转指令,确定该跳转指令是长跳转指令和短跳转指令。当所述跳转指令的目标地址与跳转指令未在同一指令块时,所述跳转指令为长跳转指令;当所述跳转指令的目标地址和跳转指令在同一指令块时,所述跳转指令为短跳转指令。进一步地,所述跳转指令可以包括但不限于:JUMP指令、CALL指令、RET指令等程序转移指令。
在将目标指令块加载至指令存储单元之前,编译器可以确定该目标指令块中是否包含跳转指令,并进一步确定跳转指令的类型,其中,跳转指令可以包括长跳转指令和短跳转指令。一般地,跳转指令之后设置有空指令,本申请实施例中,可以将空指令替换为传参指令,从而可以在不改变指令序列的长度的情况下,实现指令的跳转控制。
当所述指令块中包含长跳转指令时,若所述长跳转指令之后存在空指令,将所述空指令替换为所述传参指令。若所述长跳转指令之后不存在空指令,在所述长跳转指令的前面或后面插入所述传参指令。由于程序执行过程中,空指令会先于跳转指令执行,因此,在原始程序的指令集中的长跳转指令之后不存在空指令时,编译器可以在长跳转指令的前面或后面插入传参指令,可选地,该插入的传参指令与该长跳转指令相邻。
具体实施中,在跳转指令的后面一般会设置有两个空指令以减少跳转指令的耗费时间,所述空指令可以先于跳转指令被执行,该空指令可以包括NOP指令。
具体地,当所述指令块中包含长跳转指令,且所述长跳转指令之后存在空指令时,将所述空指令替换为传参指令,并将所述长跳转指令的目标地址更新为所述相关指令的首地址,所述传参指令的源操作数为所述长跳转指令的目标地址。例如,当长跳转指令之后存在一条空指令时,则将该空指令替换为所述传参指令。当长跳转指令之后存在两条空指令时,则可以将该长跳转指令之后的第一条空指令或第二条空指令替换为所述传参指令。所述指令块中包含短跳转指令,且所述短跳转指令之后存在空指令时,则将所述短跳转指令的目标地址更新为所述短跳转指令的目标地址与所述短跳转指令所在指令块的首地址之差。如图5A所示,对于指令块X0中存储地址DDR_ADDR为300的长跳转指令JUMP EQ 1400,由于其后面存在两个NOP指令,因此将第一个NOP指令修改为MOV R1 1400,并将长跳转指令的目标地址更新为X1指令块的首地址1000,同样的,指令块X1中存储地址为1500的长跳转指令JUMP EQ 2600,其后面的第一个NOP指令修改为MOV R1 2600,长跳转指令的目标地址更新为2000;对于指令块X1中存储地址为1200的短跳转指令,由于后面存在两个NOP指令,因此将短跳转指令的目标地址更新为该短跳转指令的目标地址1800与X1指令块的首地址1000的差,即短跳转指令的目标地址更新为800。
当所述指令块中包含长跳转指令,且所述长跳转指令之后不存在空指令时,则在所述长跳转指令的前面或后面插入所述传参指令,并将所述长跳转指令的目标地址更新为所述相关指令的首地址,所述传参指令的源操作数为所述长跳转指令的目标地址。当所述指令块中包含短跳转指令,且所述短跳转指令之后不存在空指令时,则在所述短跳转指令的前面或后面插入所述空指令,将所述短跳转指令的目标地址更新为所述短跳转指令的目标地址与所述短跳转指令所在指令块的首地址之差。
如图5B所示,对于指令块X0中存储地址DDR_ADDR为300的长跳转指令JUMP EQ1400,由于其后面不存在空指令,因此在长跳转指令后面插入传参指令MOV R1 1400,并将长跳转指令的目标地址更新为X1指令块的首地址1000,同样的,指令块X1中存储地址为1500的长跳转指令JUMP EQ 2600,在其后面插入一条传参指令MOV R1 2600,长跳转指令的目标地址更新为2000;对于指令块X1中存储地址为1200的短跳转指令,由于后面不存在空指令,因此在短跳转指令的后面插入一条空指令NOP,并将短跳转指令的目标地址更新为该短跳转指令的目标地址1800与X1指令块的首地址1000的差,即短跳转指令的目标地址更新为800。
S403、若即将执行的目标指令未在所述目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。
可选地,所述调用相关指令获得所述目标指令所在的指令块,包括:
调用所述相关指令,获得所述目标指令的目标地址;
根据所述目标指令的目标地址确定所述目标指令所在的指令块。
具体地,可以通过获取所述相关指令的输入来获取所述目标指令的目标地址,根据所述目标指令的目标地址获取所述目标指令所在的指令块占用的存储空间,并根据所述目标指令的目标地址计算确定所述目标指令所在的指令块的首地址。
其中,所述目标指令所在的指令块的首地址的计算方式可以为:所述目标指令的目标地址与所述目标指令所在的指令块占用的存储空间的商的向下取整的值和所述目标指令所在的指令块占用的存储空间之积,所述目标地址可以用数值表示。例如,在目标指令所在的指令块的首地址block_address=(R1/S1)*S1,R1表示目标指令的目标地址,S1表示目标指令所在的指令块占用的存储空间。
可选的,所述将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令,包括:
通过所述相关指令确定所述目标指令在所述目标指令块中的当前位置;
将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中之后,从所述目标指令的当前位置开始执行所述目标指令块。
具体地,根据所述目标指令所在的指令块占用的存储空间以及所述目标指令的目标地址,计算确定所述目标指令在所述目标指令块中的当前位置,并将所述目标指令的PC设置为所述目标指令在所述目标指令块中的当前位置。在将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中之后,根据所述PC值,从所述目标指令的当前位置开始执行所述目标指令块。
其中,所述目标指令在所述目标指令块中的当前位置的计算方式可以表示为:所述目标指令的目标地址与所述目标指令所在的指令块占用的存储容量之间的余数,所述目标地址可以用数值表示。例如,目标指令在所述目标指令块中的当前位置target_address=R1%S1,R1表示目标指令的目标地址,S1表示目标指令所在的指令块占用的存储空间。
本申请实施例的程序运行方法,当即将执行的目标指令未在目标指令块时,如即将执行的指令为当前目标指令块地下一指令块,或即将执行的指令为跳转指令的目标指令时,通过调用相关指令,可以确定该目标指令的位置,以将该目标指令所属的指令块加载至指令存储单元中,从而可以执行目标指令。本申请实施例的方法,在软件层面实现了程序调度方法的优化。
与上述一致地,请参阅图6,图6本申请实施例提供的另一种程序运行方法的流程示意图,该方法应用于如图1所示的计算机装置。如图6所示,该方法包括如下步骤:
S601、从存储器中获取指令集,所述指令集包括至少一个指令块,所述指令块包括至少一个指令。
可选的,所述方法还包括:当所述指令集中插入传参指令或/和空指令后,更新所述指令集以及所述指令集中指令的PC值;根据更新后的所述指令集确定所述指令块的数量。
其中,编译过程中,在相邻的两个指令块之间插入一条所述传参指令和相关指令或在跳转指令的前面或后面插入所述传参指令或/和空指令之后。由于插入的传参指令或/和相关指令或/和空指令会导致指令集中指令的PC值和目标地址发生了变化,因此,需要更新指令集中指令的PC值和目标地址。
其中,上述步骤S601中的具体描述可以参考上述图2步骤S201所描述的具体实施方式,在此不再赘述。
S602、将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块,所述指令存储单元包括第一存储单元和第二存储单元。
其中,所述第一存储单元可以用于存储目标指令块,第二存储单元可以用于存储相关指令,所述相关指令可以是一段固化代码。
可选的,若即将执行的目标指令未在所述指令存储单元中时,调用相关指令获得所述目标指令所在的指令块包括:若即将执行的目标指令未在所述第一存储单元中时,则从所述第二存储单元中调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述第一存储单元中。
具体地,将指令集划分为指令块时,要求划分之后的每个指令块所占用的存储空间小于第一存储单元的存储空间,并要求所述第一存储单元可以存储一个完整的目标指令块。
可选的,指令块中可以包括跳转指令,所述跳转指令包括长跳转指令和短跳转指令。可选地,可以通过静态分析跳转指令,确定该跳转指令是长跳转指令和短跳转指令。当所述跳转指令的目标地址与跳转指令未在同一指令块时,所述跳转指令为长跳转指令;当所述跳转指令的目标地址和跳转指令在同一指令块时,所述跳转指令为短跳转指令。进一步地,所述跳转指令可以包括但不限于:JUMP指令、CALL指令、RET指令等程序转移指令。
在将目标指令块加载至指令存储单元之前,当所述指令块中包含长跳转指令时,若所述长跳转指令之后存在空指令,将所述空指令替换为所述传参指令,若所述长跳转指令之后不存在空指令,在所述长跳转指令的前面或后面插入所述传参指令。
具体实施中,在跳转指令的后面一般会设置有两个空指令以减少跳转指令的耗费时间,所述空指令可以先于跳转指令被执行,该空指令可以包括NOP指令。
具体地,当所述指令块中包含长跳转指令,且所述长跳转指令之后存在空指令时,将所述空指令替换为传参指令,并将所述长跳转指令的目标地址更新为所述相关指令的首地址,所述传参指令的源操作数为所述长跳转指令的目标地址。例如,当长跳转指令之后存在一条空指令时,则将该空指令替换为所述传参指令。当长跳转指令之后存在两条空指令时,则可以将该长跳转指令之后的第一条空指令或第二条空指令替换为所述传参指令。当所述指令块中包含短跳转指令,且所述短跳转指令之后存在空指令时,则将所述短跳转指令的目标地址更新为所述短跳转指令的目标地址与所述短跳转指令所在指令块的首地址之差。如图5A所示,对于指令块X0中存储地址DDR_ADDR为300的长跳转指令JUMP EQ 1400,由于其后面存在两个NOP指令,因此将第一个NOP指令修改为MOV R1 1400,并将长跳转指令的目标地址更新为X1指令块的首地址1000,同样的,指令块X1中存储地址为1500的长跳转指令JUMP EQ 2600,其后面的第一个NOP指令修改为MOV R1 2600,长跳转指令的目标地址更新为2000;对于指令块X1中存储地址为1200的短跳转指令,由于后面存在两个NOP指令,因此将短跳转指令的目标地址更新为该短跳转指令的目标地址1800与X1指令块的首地址1000的差,即短跳转指令的目标地址更新为800。
当所述指令块中包含长跳转指令,且所述长跳转指令之后不存在空指令时,则在所述长跳转指令的前面或后面插入所述传参指令,并将所述长跳转指令的目标地址更新为所述相关指令的首地址,所述传参指令的源操作数为所述长跳转指令的目标地址。当所述指令块中包含短跳转指令,且所述短跳转指令之后不存在空指令时,则在所述短跳转指令的前面或后面插入所述空指令,并将所述短跳转指令的目标地址更新为所述短跳转指令的目标地址与所述短跳转指令所在指令块的首地址之差。如图5B所示,对于指令块X0中存储地址DDR_ADDR为300的长跳转指令JUMP EQ 1400,由于其后面不存在空指令,因此在长跳转指令后面插入传参指令MOV R1 1400,并将长跳转指令的目标地址更新为X1指令块的首地址1000,同样的,指令块X1中存储地址为1500的长跳转指令JUMP EQ 2600,在其后面插入一条传参指令MOV R1 2600,长跳转指令的目标地址更新为2000;对于指令块X1中存储地址为1200的短跳转指令,由于后面不存在空指令,因此在短跳转指令的后面插入一条空指令NOP,并将短跳转指令的目标地址更新为该短跳转指令的目标地址1800与X1指令块的首地址1000的差,即短跳转指令的目标地址更新为800。
S603、若即将执行的目标指令未在所述目标指令块中时,从第二存储单元中调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述第一指令存储单元中以执行所述目标指令。
可选的,所述从第二存储单元中调用相关指令获得所述目标指令所在的指令块,包括:
从第二存储单元中调用所述相关指令,获得所述目标指令的目标地址;
根据所述目标指令的目标地址确定所述目标指令所在的指令块。
具体地,可以通过获取所述相关指令的输入来获取所述目标指令的目标地址,根据所述目标指令的目标地址获取所述目标指令所在的指令块占用的存储空间,并根据所述目标指令的目标地址计算确定所述目标指令所在的指令块的首地址。
其中,所述目标指令所在的指令块的首地址的计算方式可以为:所述目标指令的目标地址与所述目标指令所在的指令块占用的存储空间的商的向下取整的值和所述目标指令所在的指令块占用的存储空间之积,所述目标地址可以用数值表示。例如,在目标指令所在的指令块的首地址block_address=(R1/S1)*S1,R1表示目标指令的目标地址,S1表示目标指令所在的指令块占用的存储空间。
可选的,所述将所述目标指令所在的指令块作为目标指令块加载至所述第一指令存储单元中以执行所述目标指令,包括:
通过所述相关指令确定所述目标指令在所述目标指令块中的当前位置;
将所述目标指令所在的指令块作为目标指令块加载至所述第一指令存储单元中之后,从所述目标指令的当前位置开始执行所述目标指令块。
具体地,根据所述目标指令所在的指令块占用的存储空间以及所述目标指令的目标地址,计算确定所述目标指令在所述目标指令块中的当前位置,并将所述目标指令的PC设置为所述目标指令在所述目标指令块中的当前位置。在将所述目标指令所在的指令块作为目标指令块加载至所述第一指令存储单元中之后,根据所述PC值,从所述目标指令的当前位置开始执行所述目标指令块。
其中,所述目标指令在所述目标指令块中的当前位置的计算方式可以表示为:所述目标指令的目标地址与所述目标指令所在的指令块占用的存储容量之间的余数,所述目标地址可以用数值表示。例如,目标指令在所述目标指令块中的当前位置target_address=R1%S1,R1表示目标指令的目标地址,S1表示目标指令所在的指令块占用的存储空间。
下面,以IRAM为指令存储单元为例,详细描述本申请实施例的方法。
如图7所示,图7为本申请实施例提供的一种原始程序P的示意图。IRAM的存储空间可以为1024,如图7所示,该程序P存储于双倍速率同步动态随机存储器(Double Data RateSynchronous Dynamic Random Access Memory,DDR SDRAM),由于该程序P的指令集占用的存储空间为2800,其大于IRAM的存储空间,因此在IRAM上无法直接运行该程序P,需要经过本申请实施例所述方法的处理才能运行。
如图3A所示,IRAM包括IRAM_P1和IRAM_P2两部分,其中IRAM_P1用于存储指令块,IRAM_P2用于存储相关指令。IRAM_P1的存储空间S1为1001,IRAM_P2的首地址A2为1002。当IRAM_P1中的指令块在执行时,如果即将执行的指令不在IRAM_P1中,则调用相关指令将即将执行指令所在的指令块替换到IRAM_P1中,并跳转到相应的目标地址继续执行。
具体地,将程序的指令集划分为指令块,划分之后的每个指令块所占用的存储空间,小于IRAM_P1的存储空间。如图8A所示,所述程序按照S1-1的大小将指令集划分成3个指令块,即X0,X1,X2。
进一步地,除了最后指令块X2之外,在指令块X0和X1中最后一条指令后面增加一条传参指令MOV R1S1*(i+1),同时更新指令集中指令的PC值和DDR SDRAM的地址(DDR_ADDR),并更新指令集中所有跳转指令的目标地址,更新后的程序P1如图8B所示。
如图8C所示,将程序P1按照S1重新划分成3个指令块,B0,B1,B2。分析并处理3个指令块中的跳转指令。由于跳转指令后面包括两个空指令,因此,将长跳转指令的目标地址修改为IRAM_P2的首地址,并将第一个空指令替换为MOV指令;将短跳转指令的目标地址修改为所述短跳转指令的目标地址与所述短跳转指令所在指令块的首地址之差。如图8C所示,将指令块B0中长跳转指令J1的目标地址修改为指令块B1的首地址1001,并将地址为301的空指令替换为MOV R1 1401;将指令块B1中的长跳转指令J4的目标地址修改为指令块B2的首地址2002,将地址为1502的空指令替换为MOV R1 2602;将指令块B1中的短跳转指令J3的目标地址修改为800。
图8C中的程序经过上述分块处理后可以在IRAM中执行,即可以将B0指令块加载至IRAM_P1中开始执行。图中给出了每个指令块加载到IRAM_P1上的PC值(IRAM_PC)。需要说明的是,图8C中的指令JUMP EQ 1001中的目标地址1001指的是IRAM_PC值,指令MOV R1 1401中的目标地址1401指的是DDR_ADDR。
下面详细描述程序P1的执行过程。
程序P1开始运行时,指令块B0被加载到IRAM_P1中。其中,IRAM_PC=300开始出的指令如下:
JUMP EQ 1001
MOV R1 1401
NOP
当JUMP EQ的条件满足时,指令JUMP EQ 1001后面的指令MOV R1 1401和指令NOP先执行,之后JUMP指令调用相关指令执行,将目标地址1401所在的指令块B1加载到IRAM_P1中,并跳转到IRAM_PC=400处开始执行。当IRAM_P1中的指令块B1执行完IRAM_PC=2001处的指令MOV R1 2002后,顺序执行到相关指令中,将目标地址2002所在指令块B2加载到IRAM_P1中,并从IRAM_PC=0处开始执行。之后,按照该执行过程执行完程序P1。
可以看出,本申请实施例的程序运行方法,当即将执行的目标指令未在目标指令块时,如即将执行的指令为当前目标指令块地下一指令块,或即将执行的指令为跳转指令的目标指令时,通过调用相关指令,可以确定该目标指令的位置,以将该目标指令所属的指令块加载至指令存储单元中,从而可以执行目标指令。本申请实施例的方法,在软件层面实现了程序调度方法的优化。
上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对电子设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
请参阅图9A,图9A是本申请实施例提供的一种程序运行装置900的功能单元组成框图,如图9A所示,该程序运行装置900包括获取模块910、加载模块920和调用模块930,其中,
获取模块910,用于从存储器中获取指令集,其中,所述指令集包括至少一个指令块,所述指令块包括至少一个指令;
加载模块920,用于将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块;
调用模块930,用于若即将执行的目标指令未在所述目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。
可以看出,本申请实施例的程序运行装置,当即将执行的目标指令未在目标指令块时,如即将执行的指令为当前目标指令块地下一指令块,或即将执行的指令为跳转指令的目标指令时,通过调用相关指令,可以确定该目标指令的位置,以将该目标指令所属的指令块加载至指令存储单元中,从而可以执行目标指令。本申请实施例的方法,在软件层面实现了程序调度方法的优化。
在一个可能的示例中,在指令存储单元包括第一存储单元和第二存储单元方面,若即将执行的目标指令未在所述指令存储单元中时,该调用模块930还用于执行:
若即将执行的目标指令未在所述第一存储单元中时,则从所述第二存储单元中调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述第一存储单元中。
可选的,所述目标指令块还包括传参指令,所述传参指令为所述目标指令块的最后一条指令;所述传参指令用于将所述目标指令的目标地址传送至所述相关指令。
在一个可能的实施例中,所述目标指令块包括所述相关指令,所述相关指令置于所述目标指令块的最后。
在一个可能的实施例中,所述指令存储单元包括第一存储单元和第二存储单元,所述第一存储单元用于存储所述目标指令块;
若即将执行的目标指令未在所述目标指令块中时,所述调用相关指令获得所述目标指令所在的指令块,包括:
若即将执行的目标指令未在所述目标指令块中时,则从所述第二存储单元中调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述第一存储单元中。
在一个可能的实施例中,如图9B所示,是本申请实施例提供的另一种程序运行装置900的功能单元组成框图,在所述将目标指令块加载至指令存储单元之前,当所述指令块中包含长跳转指令时,上述程序运行装置900还包括:
替换模块950,用于若所述长跳转指令之后存在空指令,则在编译时将所述空指令替换为所述传参指令;
插入模块940,还用于若所述长跳转指令之后不存在空指令,则在编译时在所述长跳转指令的前面或后面插入所述传参指令。
在一个可能的实施例中,如图9C所示,是本申请实施例提供的另一种程序运行装置900的功能单元组成框图,所述程序运行装置900还包括:
更新模块960,用于当所述指令集中插入传参指令或相关指令后,更新所述指令集以及所述指令集中指令的PC值;
确定模块970,用于根据更新后的所述指令集确定所述指令块占用的存储空间。
在一个可能的实施例中,所述调用模块930还用于执行:
调用所述相关指令,获得所述目标指令的目标地址;
根据所述目标指令的目标地址确定所述目标指令所在的指令块。
进一步地,所述调用模块930还用于执行:
根据所述目标指令的目标地址,确定所述目标指令所在的指令块的首地址以及所述目标指令块所在的指令块占用的存储空间。
在一个可能的实施例中,所述调用模块930还用于执行:
通过所述相关指令确定所述目标指令在所述目标指令块中的当前位置;
将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中之后,从所述目标指令的当前位置开始执行所述目标指令块。
可以理解的是,本申请实施例的程序运行装置的各程序模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。
本申请实施例还提供一种计算机程序产品,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、终端设备或者网络设备等)执行本申请各个实施例上述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、ROM、RAM、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (12)

1.一种程序运行方法,其特征在于,所述方法包括:
从存储器中获取指令集,其中,所述指令集包括至少一个指令块,所述指令块包括至少一个指令;
将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块;
若即将执行的目标指令未在所述目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。
2.根据权利要求1所述的方法,其特征在于,所述目标指令块包括传参指令,所述传参指令为所述目标指令块的最后一条指令;
所述传参指令用于将所述目标指令的目标地址传送至所述相关指令。
3.根据权利要求2所述的方法,其特征在于,所述目标指令块还包括所述相关指令,所述相关指令置于所述目标指令块的最后。
4.根据权利要求2所述的方法,其特征在于,所述指令存储单元包括第一存储单元和第二存储单元,所述第一存储单元用于存储所述目标指令块;
若即将执行的目标指令未在所述目标指令块中时,所述调用相关指令获得所述目标指令所在的指令块,包括:
若即将执行的目标指令未在所述目标指令块中时,则从所述第二存储单元中调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述第一存储单元中。
5.根据权利要求3或4所述的方法,其特征在于,在所述将目标指令块加载至指令存储单元之前,当所述指令块中包含长跳转指令时,所述方法还包括:
若所述长跳转指令之后存在空指令,则将所述空指令替换为所述传参指令;
若所述长跳转指令之后不存在空指令,则在所述长跳转指令的前面或后面插入所述传参指令。
6.根据权利要求2或3或5所述的方法,其特征在于,所述方法还包括:
当所述指令集中插入传参指令或相关指令后,更新所述指令集以及所述指令集中指令的PC值;
根据更新后的所述指令集确定所述指令块的数量。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述调用相关指令获得所述目标指令所在的指令块,包括:
调用所述相关指令,确定所述目标指令的目标地址;
根据所述目标指令的目标地址确定所述目标指令所在的指令块。
8.根据权利要求7所述的方法,其特征在于,所述根据所述目标指令的目标地址确定所述目标指令所在的指令块,还包括:
根据所述目标指令的目标地址,确定所述目标指令所在的指令块的首地址以及所述目标指令块所在的指令块。
9.根据权利要求8所述的方法,其特征在于,所述将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令,包括:
通过所述相关指令确定所述目标指令在所述目标指令块中的当前位置;
将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中之后,从所述目标指令的当前位置开始执行所述目标指令块。
10.一种程序运行装置,其特征在于,所述装置包括:
获取模块,用于从存储器中获取指令集,其中,所述指令集包括至少一个指令块,所述指令块包括至少一个指令;
加载模块,用于将目标指令块加载至指令存储单元,以执行所述指令存储单元中的目标指令块;
调用模块,用于若即将执行的目标指令未在所述目标指令块中时,调用相关指令获得所述目标指令所在的指令块,将所述目标指令所在的指令块作为目标指令块加载至所述指令存储单元中以执行所述目标指令。
11.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器中存储有可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1至9中任一项所述方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储用于数据交换的计算机程序,所述计算机程序被处理器执行时实现如权利要求1至9任一项所述的方法。
CN201911203313.6A 2019-11-29 2019-11-29 程序运行方法及装置 Pending CN112882753A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911203313.6A CN112882753A (zh) 2019-11-29 2019-11-29 程序运行方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911203313.6A CN112882753A (zh) 2019-11-29 2019-11-29 程序运行方法及装置

Publications (1)

Publication Number Publication Date
CN112882753A true CN112882753A (zh) 2021-06-01

Family

ID=76038807

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911203313.6A Pending CN112882753A (zh) 2019-11-29 2019-11-29 程序运行方法及装置

Country Status (1)

Country Link
CN (1) CN112882753A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114047952A (zh) * 2022-01-11 2022-02-15 长芯盛(武汉)科技有限公司 用于单片机的处理器、方法、单片机和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106547587A (zh) * 2015-09-16 2017-03-29 Arm 有限公司 用于生成目标程序的配置文件的装置和方法
CN107810478A (zh) * 2015-06-26 2018-03-16 微软技术许可有限责任公司 具有连续块的并行执行的基于块的架构

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107810478A (zh) * 2015-06-26 2018-03-16 微软技术许可有限责任公司 具有连续块的并行执行的基于块的架构
CN106547587A (zh) * 2015-09-16 2017-03-29 Arm 有限公司 用于生成目标程序的配置文件的装置和方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114047952A (zh) * 2022-01-11 2022-02-15 长芯盛(武汉)科技有限公司 用于单片机的处理器、方法、单片机和存储介质
CN114047952B (zh) * 2022-01-11 2022-05-20 长芯盛(武汉)科技有限公司 用于单片机的处理器、方法、单片机和存储介质

Similar Documents

Publication Publication Date Title
US7877585B1 (en) Structured programming control flow in a SIMD architecture
US9639365B2 (en) Indirect function call instructions in a synchronous parallel thread processor
US7127593B2 (en) Conditional execution with multiple destination stores
US6446258B1 (en) Interactive instruction scheduling and block ordering
US20060149953A1 (en) Conditional execution per lane
US20230084523A1 (en) Data Processing Method and Device, and Storage Medium
KR20180066146A (ko) 벡터 데이터 전송 명령어
US7017032B2 (en) Setting execution conditions
CN111158756B (zh) 用于处理信息的方法和装置
US20110078418A1 (en) Support for Non-Local Returns in Parallel Thread SIMD Engine
KR20180067582A (ko) 벡터 로드 명령어
CN112130926B (zh) 应用程序运行的方法、装置、终端设备及存储介质
EP2273381B1 (en) Simd parallel computer system, simd parallel computing method, and control program
CN114443142A (zh) 循环指令处理方法、装置、芯片、电子设备及存储介质
CN103399775A (zh) 一种热补丁方法及设备
KR100765567B1 (ko) 산술 논리 유닛 및 스택을 가지는 데이터 프로세서, 멀티미디어 장치 및 컴퓨터 판독가능 기록 매체
CN112882753A (zh) 程序运行方法及装置
US9606802B2 (en) Processor system with predicate register, computer system, method for managing predicates and computer program product
US20130166887A1 (en) Data processing apparatus and data processing method
WO2024169618A1 (zh) 一种代码编译方法及电子设备
CN104281443B (zh) 利用tcm实现代码、数据替换的方法
CN103235745A (zh) 一种地址冲突检测方法及装置
CN113535231A (zh) 减少指令跳转的方法及装置
CN114115092B (zh) 一种异构双核plc协同执行方法与装置
CN118069224B (zh) 地址生成方法、装置、计算机设备和存储介质

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