CN113498507A - 数据结构处理 - Google Patents

数据结构处理 Download PDF

Info

Publication number
CN113498507A
CN113498507A CN202080018004.6A CN202080018004A CN113498507A CN 113498507 A CN113498507 A CN 113498507A CN 202080018004 A CN202080018004 A CN 202080018004A CN 113498507 A CN113498507 A CN 113498507A
Authority
CN
China
Prior art keywords
data structure
identifier
instruction
processing
metadata
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
CN202080018004.6A
Other languages
English (en)
Inventor
N·J·斯蒂芬斯
D·H·曼塞尔
R·R·格林森斯威特
M·L·艾文斯
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.)
ARM Ltd
Original Assignee
ARM 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 ARM Ltd filed Critical ARM Ltd
Publication of CN113498507A publication Critical patent/CN113498507A/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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30047Prefetch instructions; cache control instructions
    • 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
    • G06F9/30101Special purpose registers
    • 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
    • G06F9/30105Register structure
    • 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
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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/461Saving or restoring of program or task context

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

一种设备包括:指令译码器和处理电路系统。响应于规定至少一个输入数据结构识别符和输出数据结构识别符的数据结构处理指令,指令译码器控制处理电路系统对至少一个输入数据结构执行处理操作以产生输出数据结构。每个输入/输出数据结构包括对应于多个内存地址的数据排列。设备包括一个或多个数据结构元数据缓存器的两个或多个集合,每个集合与对应数据结构识别符相关联并且经指定为储存指示地址的元数据,用于识别由对应数据结构识别符识别的数据结构的内存地址。

Description

数据结构处理
本技术涉及数据处理领域。
一些数据处理应用可需要向数据结构应用处理操作,此类数据结构包括在多个内存地址处储存的内存中的数据排列。处理此种数据结构可以用于各种应用,例如,诸如机器学习、讯号处理或压缩算法。
至少一些示例提供了一种设备,包括:指令译码器,用于译码指令;以及处理电路系统,用于响应于由指令译码器译码的指令而执行数据处理;其中:响应于规定至少一个输入数据结构识别符及输出数据结构识别符的数据结构处理指令,指令译码器经配置为控制处理电路系统对由至少一个输入数据结构识别符识别的至少一个输入数据结构执行处理操作,以产生由输出数据结构识别符识别的输出数据结构;至少一个输入数据结构及输出数据结构各自包括对应于多个内存地址的数据排列;以及设备包括一个或多个数据结构元数据寄存器的多个集合,一个或多个数据结构元数据寄存器的每个集合与对应的数据结构识别符相关联并且经指定为保存指示地址的元数据,用于识别由对应数据结构识别符识别的数据结构的多个内存地址。
至少一些示例提供一种数据处理方法,包括:响应于规定至少一个输入数据结构识别符及输出数据结构识别符的译码数据结构处理指令,控制处理电路系统对由至少一个输入数据结构识别符识别的至少一个输入数据结构执行处理操作,以产生由输出数据结构识别符识别的输出数据结构,至少一个输入数据结构及输出数据结构各自包括对应于多个内存地址的数据排列;以及将指示地址的元数据保存在一个或多个数据结构元数据寄存器的多个集合中,一个或多个数据结构元数据寄存器的每个集合与对应的数据结构识别符相关联并且经指定为保存指示地址的元数据,用于识别由对应数据结构识别符识别的数据结构的多个内存地址。
至少一些示例提供一种储存计算机程序的非暂时性储存媒体,该计算机程序用于控制主数据处理设备来仿真由目标数据处理设备执行目标程序;计算机程序包括:指令译码程序逻辑,用于译码目标程序的指令,其中响应于规定至少一个输入数据结构识别符及输出数据结构识别符的数据结构处理指令,指令译码程序逻辑经配置为控制主数据处理设备对由至少一个输入数据结构识别符识别的至少一个输入数据结构执行处理操作,以产生由输出数据结构识别符识别的输出数据结构,至少一个输入数据结构及输出数据结构各自包括对应于多个内存地址的数据排列;以及寄存器仿真程序逻辑,用于控制对储存结构的存取来仿真目标数据处理设备的寄存器,寄存器包括一个或多个数据结构元数据寄存器的多个集合,其中一个或多个数据结构元数据寄存器的每个集合与对应的数据结构识别符相关联并且经指定为保存指示地址的元数据,用于识别由对应数据结构识别符识别的数据结构的多个内存地址。
本技术的进一步方面、特征及优点将从结合附图阅读的示例的以下描述显而易见。
图1示意性示出包括处理电路系统的数据处理设备的示例,该处理电路系统具有对数据结构处理指令的指令译码器支持;
图2示出了其中数据结构系矩阵的示例;
图3示出了用于储存数个输入及输出数据结构的数据结构储存区域的示例;
图4示出了使用指示地址的元数据来识别在内存中储存某一数据结构的地址的示例;
图5更详细地示出了处理电路系统的寄存器及数据结构储存器的示例;
图6示出了其中输入及输出数据结构具有分离的识别符空间的示例;
图7示出了其中用于给定数据结构的数据结构元数据寄存器系通用寄存器的固定子集的示例。
图8示出了其中提供专用数据结构元数据寄存器与通用寄存器分离的替代途径。
图9是示出响应于上下文保存触发事件而控制状态保存的方法的流程图;
图10示出了其中数据结构处理指令导致当给定输入数据结构尚不可用时处理电路系统加载给定输入数据结构的另一示例;
图11是示出控制上下文状态复原的方法的流程图;并且
图12示出了可使用的仿真器示例。
数据处理设备可具有用于译码程序指令的指令译码器及用于响应于由指令译码器译码的指令而执行数据处理的处理电路系统。例如,指令译码器可将译码的程序指令映像到微操作或其他控制讯号中,此类控制讯号被发送到处理电路系统以控制由处理电路系统执行哪些操作。一些软件工作负荷可需要处理某些数据结构,此类数据结构包括在内存中对应于多个内存地址的位置处储存的数据排列。例如,一些讯号处理或机器学习算法可包括应用到矩阵的操作,此类矩阵系二维数据排列。此外,一些压缩算法可对给定大小的区块进行操作,并且因此数据结构可例如对应于彼等区块中的一者。
当程序设计员写入高阶代码以实施此种处理应用时,他们可能通常使用程序语言写入代码,该程序语言具有定义在此种数据结构的粒度处应用的某些基本操作的功能,诸如矩阵乘法运算或用于实施应用到给定区块的压缩算法的迭代的指令。然而,实际上,当将此种高阶代码编译为由处理电路系统支持的本机指令集时,此种高阶功能可能经常分解为数个独立加载/储存指令及算术指令,此类指令应用到数据结构内的独立数据值,每个数据值对应于单个内存地址。例如,矩阵乘法运算可编译为数个独立负荷以加载矩阵的独立组件,并且编译为乘法指令以各自乘以一对组件,接着编译为一些储存指令以将结果储存回内存中的相关地址。可能需要编译程序计算出如何从内存中的相关地址编组负荷及储存或将负荷及储存编组到内存中的相关地址,并且使用纯量指令来执行乘法。
一种用于加速数据结构(包括跨越多个地址的数据排列)处理的途径可以系提供硬件加速器,该硬件加速器具有经设计为加快此种数据结构处理的专用硬件。通常,此种硬件加速器可在芯片上系统中实施为可以经由关于内存系统执行的加载/储存操作存取的装置。从CPU(中央处理单元)的观点来看,CPU可简单地将数据写入内存,该内存控制硬件加速器执行数据结构处理并且随后一旦硬件加速器已完成其操作,CPU则可从内存读回结果,并且随后继续对其进行处理。然而,此种硬件加速器途径(其中由CPU的指令译码器支持的指令不支持专用数据结构处理指令)可以具有针对一些工作负荷的如果干问题。首先,尽管使用硬件加速器可适用于其中数据结构处理表示待执行的大多数操作的工作负荷,针对穿插此种数据结构的处理与其他类型的处理操作的混合工作负荷,使用硬件加速器可能是低效的,因为将存在数据必须在CPU与硬件加速器之间来回传递的频繁情况,例如,如果CPU处的指令必须等待从硬件加速器读回数据结构处理的结果,则此举可大幅度降低应用的总体性能。另一问题系在多个CPU之间或在相同CPU上执行的多个软件任务之间共享单个硬件加速器的系统中,给定任务可能难以获得充分的硬件加速器上的处理时间,这可能再次降低性能。因此,尽管硬件加速器途径可对于存在相对少的并行使用硬件加速器所期望的任务的情形而言系可接受的,由于竞争使用的数量增加,则此途径可能无法维持。
由此,在CPU架构本身内为专用数据结构处理指令提供指令译码器支持可以是有用的,与数据结构内的独立组件相反,该指令译码器支持支持在整体数据结构的粒度处执行处理操作。当然,指令译码器也可以支持其他指令,此类指令还允许对独立组件的操作。然而,通过定义一些指令,此类指令控制处理电路系统对由指令规定的至少一个输入数据结构识别符识别的至少一个输入数据结构执行处理操作以产生由指令规定的输出数据结构识别符识别的输出数据结构,其中输入及输出数据结构的每一者系跨越多个内存地址的数据排列,此举可以大幅度帮助加速软件应用的执行,此类软件应用依赖于对此种数据结构的大量处理,但不具有与如上文论述的硬件加速器相关联的执行及可扩展性问题。
然而,当将针对数据结构处理指令的指令译码器支持带入CPU或其他处理组件时,这可能产生关于上下文切换时延的问题。对于CPU或具有用于译码程序指令的指令译码器的其他处理组件而言,以下情况是常见的:当在第一软件工作负荷与第二软件工作负荷之间执行上下文切换时,与上下文切换的前正执行的第一工作负荷相关联的任何架构状态可需要保存到内存,使得第二软件工作负荷可以覆写处理组件的寄存器或其他储存组件中的状态。通过将第一工作负荷中的状态保存到内存,这意味着当第一软件工作负荷稍后需要继续时,其状态可以随后载回并且接着处理输入工作负荷可以从中断的点处继续。
然而,当提供针对数据结构处理指令的支持时,则这可意味着一些具体实施可提供用于储存处理器本端数据结构的储存组件,并且当发生上下文切换时,可期望此状态应当被保存到内存。然而,由于数据结构可具有显著大小(例如,64字节、256字节、或甚至1千字节或更大),并且可存在由处理电路系统的储存电路系统保存的数个此种数据结构,因此将所有彼状态保存到内存可具有显著的对上下文切换时延或中断处置时延的影响。
在下文论述的技术中,具有处理电路系统及支持数据结构处理指令的指令译码器的设备具备数据结构元数据寄存器的两个或多个集合,每个集合具有一个或多个寄存器。数据结构元数据寄存器每个集合与对应的数据结构识别符(可为输入数据结构识别符或输出数据结构识别符)相关联。一个或多个数据结构元数据寄存器的每个集合经指定为保存指示地址的元数据,用于识别对应于由对应的数据结构识别符识别的数据结构的内存地址。因此,数据结构元数据寄存器提供关于可以在内存中发现对应数据结构的位置的信息。数据结构元数据寄存器经指定为在架构电平处保存此指示地址的元数据,因此将理解在处理数据结构的同时,对应的指示地址的元数据将能够在对应的一个或多个数据结构元数据寄存器集合内发现。例如,可存在哪些寄存器用作特定数据结构识别符的数据结构元数据寄存器的固定指派。
由于通常当处理器从内存加载值时,程序设计员或编译程序可自由选择处理器的数个通用寄存器的任一者作为定义从其加载数据的地址的寄存器,此途径系罕见的。此外,在常见加载/储存架构中,一旦数据已经从给定内存地址加载,彼地址信息通常不保留并且用于计算加载目标地址的寄存器可频繁地用其他信息覆写。因此,大部分处理器架构将不指定某些寄存器作为经指派以在持续的基础上保存用于对应数据结构的指示地址的元数据的寄存器。
然而,发明者认为通过提供指定的数据结构元数据寄存器,该数据结构元数据寄存器可以被软件理解为保存识别数据结构的相关内存地址在内存地址空间中的位置的元数据,此举可以大幅度改进上下文切换时延,因为其意味着操作系统或负责控制状态保存的其他软件、或者在一些微架构具体实施中提供的用于进行状态保存之上下文保存硬件可以选择来仅保存用于自从从内存加载起尚未改变的某些数据结构而非需要储存总体数据结构本身的元数据寄存器。相比的下,如果关于从其加载数据结构的对应地址的信息已经丢失,则上下文保存例程将需要保存整个数据结构以确保当恢复对当前上下文的处理时数据可以复原,因为将需要此类上下文保存例程来复原尚未更新的甚至干净的数据结构,因为不知道哪些地址将对应数据结构储存在内存中。由此,在架构电平处提供经指定来保存对应数据结构的指示地址的元数据的指定寄存器提供了可以利用来改进上下文切换时延的架构功能。
处理电路系统可根据指令集架构操作,该指令集架构使软件能够针对至少数据结构识别符的子集来识别对应于数据结构识别符的彼子集中的一者的数据结构是干净还是脏的。尽管不必要,但通常可选择微架构具体实施来提供用于保存数据结构的本端储存器,该本端储存器与直接从内存存取数据结构相比可以被更快地存取。例如,本端数据结构储存器可以系在处理器内提供的寄存器或可以系高速暂存内存或高速缓存。如果提供任何此种本端数据结构储存器,则如果处理电路系统更新储存器中保存的给定数据结构,则彼数据结构可系脏的,因为该数据结构可与在内存系统中的相关联内存地址处储存的对应数据结构不同。通过提供允许对处理电路系统执行软件程序来决定至少数据结构识别符的子集对应于干净还是脏数据结构的架构支持特征,此举可以帮助加快在上下文切换时的状态保存,因为这意味着负责状态保存的软件或电路系统可以识别任何干净的数据结构不需要被保存到内存作为彼状态保存的部分,作为替代此类干净数据结构能够被稍后从相关联内存地址载回处理电路系统中,此类相关联内存地址由用于干净数据结构的数据结构元数据寄存器集合中保存的指示地址的元数据指示。相比的下,由于脏数据结构可与相关联内存地址处的底层数据不同,所以彼等脏数据结构可保存为在上下文切换时执行的状态保存的一部分。注意到对于脏数据结构而言,在状态保存期间,这些脏数据结构可能不储存到由指示地址的元数据识别的实际内存地址。替代地,在上下文切换时执行的状态保存可在与操作系统或负责控制状态保存的其他软件相关联的不同内存地址集合处将任何处理器状态保存到数据结构。
因此,通常,处理电路系统根据指令集架构操作是有用的,该指令集架构具有使软件能够识别数据结构识别符的至少一子集是干净的特征。所有数据结构识别符皆可识别为干净或脏是不必要的,并且在彼情形下,不知道数据结构是干净还是脏的任何数据结构识别符可以经历上下文切换时的状态保存。
可能存在指令集架构可以允许软件识别某些数据结构识别符是干净还是脏的数种方式。在一个示例中,输出数据结构识别符(用于识别响应于数据结构处理指令而产生的输出数据结构)可在与至少一个输入数据结构识别符(其识别待用作数据结构处理指令的操作数的至少一个输入数据结构)完全分离的识别符空间中定义。因此,一个或多个数据结构元数据寄存器的至少一个集合可与数据结构识别符相关联,该数据结构识别符仅可以用于表示输入数据结构并且不可以用于表示输出数据结构。通过在分离的识别符空间中定义用于输入及输出数据结构的识别符,这意味着与输入数据结构识别符相关联的数据结构可以总是保证是干净的,因为这些识别符从未用于将响应于数据结构处理指令而更新的输出数据结构。利用此途径,输入数据结构识别符有效地识别到数据结构处理指令的只读输入,此类只读输入一旦从内存加载,就仅用作在内存系统中储存的对应数据结构的复本,而相对于内存而言不可以更新。因此,利用此途径,操作系统或控制状态保存的其他软件可以隐含地决定对应于输入数据结构识别符空间中的输入数据结构识别符的数据结构的任一者将是干净的,并且因此在状态保存期间此类数据结构不需要被保存到内存。替代地,仅从一个或多个数据结构元数据寄存器的相关集合保存对应元数据而非保存数据结构本身可以是足够的。此举可以大幅度减少在上下文切换时保存到内存的数据量,从而改进上下文切换时延。
或者,另一种用于识别数据结构是干净还是脏的架构途径可系提供至少一个架构寄存器以保存至少一个脏指示符,其中每个脏指示符指示对应于给定数据结构识别符的数据结构是干净还是脏的。在一些示例中,可提供用于每一个数据结构识别符的脏指示符。或者,可以仅提供用于数据结构识别符的子集的脏指示符。此途径意味着在分离的识别符空间中分别定义用于输入及输出数据结构的数据结构识别符并非必要的。这允许数据识别符的常见集区用于输入或输出数据结构,如果从一个数据结构处理指令获得的输出数据结构需要用作到稍后操作的输入操作数,则此举可具有优点。或者,甚至在不将输入及输出数据结构识别符分为分离的识别符空间的架构中,提供与输出数据结构识别符相关联的一些脏指示符可以随后允许操作系统作出以下决定:与给定输出数据结构识别符相关联的输出数据结构自从被加载的后是否实际上已更新,这可以提供另外的机会来避免需要将干净的数据结构保存到内存。用于保存脏指示符的架构寄存器可以与上文描述的数据结构元数据寄存器分离,或者替代地寄存器的常见集合可以保存指示地址的元数据及至少一个脏指示符。例如,用于给定数据结构识别符的脏指示符可以在与用于给定数据结构识别符的指示地址的元数据相同数据结构元数据寄存器集合中保存。
如上文提及,数据结构元数据寄存器的架构提供帮助改进上下文保存的效率,因为如果已知数据结构是干净的,则该架构提供可允许某些数据结构识别符仅具有作为状态保存过程的部分保存的对应元数据,并且不是底层数据结构。在许多情形中,状态保存过程可通过在处理器上执行的软件来控制,因此可能不存在用于实际上执行状态保存操作的任何硬件。例如,当上下文在应用之间切换时,状态保存可通过操作系统执行,或者当上下文在虚拟机或操作系统之间切换时,状态保存可通过超管理器执行。尽管如此,上文论述的架构特征支持由软件执行的此种上下文保存以加快上下文保存操作。
或者,尽管不必由指令集架构要求,可选择一些微架构具体实施来响应于上下文保存触发事件而提供上下文保存电路系统,以将处理器状态的预定子集保存到内存。处理器状态的预定子集可包括对应于至少一个数据结构识别符(对应于干净数据结构)的一个或多个数据结构元数据寄存器的集合,但可不包括对应于该至少一个数据结构识别符的数据结构本身。通过在硬件中提供将一些处理器状态保存到内存之上下文保存电路系统,此举与单纯软件控制的示例相比可以进一步加快上下文切换,并且允许硬件控制之上下文保存与其他指令的执行并行地继续,而非延迟进程直到已完成上下文保存。例如,可提供在硬件中提供的一些上下文保存电路系统以将与输入数据结构识别符或干净输出数据结构识别符相关联的指示地址的元数据自动保存到内存中的位置。
数据结构元数据寄存器可以不同方式实施。在一个示例中,可提供与处理器架构的任何通用寄存器分离的元数据寄存器的专用集合。通用寄存器可用于一般操作数及算术指令的结果,包括整数算术或逻辑指令。通用寄存器也可用作操作数,用于计算加载或储存指令的地址。通过提供数据结构元数据寄存器的专用集合,这意味着即使软件需要使用通用寄存器来用于其他目的,用于数据结构的指示地址的元数据也可以保留在架构中。或者,另一途径系不提供专用数据结构元数据寄存器,数据结构元数据寄存器系也可响应于由处理电路系统上的指令译码器支持的非数据结构处理指令存取的通用寄存器的固定子集。例如,对于给定数据结构识别符而言,可能隐含着用于对应数据结构的指示地址的元数据在通用寄存器的某一硬布线子集中保存。此途径可以减少需要在硬件中提供的寄存器的总数。然而,利用此途径,软件可能需要确保从建立用于给定数据结构的指示地址的元数据的时间直到不再需要对应数据结构,其他指令不写入用作对应数据结构识别符的一个或多个数据结构元数据寄存器的集合的通用寄存器的固定子集,以确保在需要位置信息控制上下文保存及复原的情形中可以保留地址信息。
在一些示例中,响应于数据结构处理指令,处理电路系统可产生加载请求,用于当给定输入数据结构不可用于处理电路系统时从内存加载给定输入数据结构。微处理器根据加载/储存架构操作是常见的,其中用于从内存加载数据及将数据储存回内存的加载/储存指令与对先前从内存加载的操作数执行算术、逻辑或其他处理操作的数据处理指令分离。因此,我们可能期望与数据结构处理指令分离的指令应当针对将数据结构从内存加载逻辑储存器来定义,并且随后数据结构处理指令不需要执行加载本身。此加载/储存途径可能系实施架构的一种方式,该架构包括支持如上文论述的数据结构处理指令。
然而,在另一示例中,数据结构处理指令本身也可能导致处理电路系统产生加载请求,用于当给定输入数据结构不可用于处理电路系统时从内存加载给定输入数据结构。在一些情形中,数据结构处理指令也可以触发加载请求的产生,用于在待执行的数据结构处理操作取决于输出数据结构的先前值以及输入数据结构的值的情形中从内存加载输出数据结构的先前值。例如,处理操作可以是累加运算,其中将由处理输入数据结构获得的值加到输出数据结构的先前值以决定输出数据结构的新值。因此,在一些情形中,数据结构处理指令可以针对处理操作中涉及的一个或多个输入及输出数据结构触发加载请求。
我们可能认为此途径是反直觉的,因为与较早指令已从内存加载数据结构的情形相比,即将响应于数据结构处理指令时加载数据结构可能延迟待对数据结构执行的处理操作的开始。然而,发明者认为通过在架构中定义数据结构处理指令,使得当给定输入数据结构不可用时需要从内存加载给定输入数据结构,此举在软件工作负荷之间执行上下文切换时提供了一些优点。上下文切换的以上论述大部分集中在状态保存方面,但上下文切换的另一部分系复原状态来用于待在上下文切换的后执行的输入上下文。尽管提供如上文论述的数据结构元数据寄存器可以帮助避免需要保存一些数据结构作为状态保存操作的部分,当彼等数据结构系干净时,尽管如此,在从上下文切换返回到给定软件工作负荷的处理时,可能需要再次加载彼工作负荷所需要的任何数据结构,并且此状态复原可能花费一些时间,因为数据结构可具有相对大的大小。
在给定数据结构处理指令所需的数据结构由数据结构处理指令的前分离的加载指令加载并且数据结构处理指令本身不具有需要时加载数据结构的能力的架构中,则由于有可能触发上下文切换的中断可在加载指令与后续数据结构处理指令之间发生,操作系统或执行状态复原的硬件电路必须假设:不能保证在上下文切换离开该工作负荷的前在本端储存器中为给定软件工作负荷保存的给定数据结构在系统切换回彼工作负荷的后仍存在。由此,在数据结构处理指令本身不具有加载数据结构的能力的架构中,这可意味着对于在上下文切换的后执行的复原后的软件工作负荷而言,操作系统复原数据结构状态系必要的。
尽管此举系完全可行的进行状态复原的方式,如果监控软件(例如,操作系统或超管理器)必须负责复原数据结构,则此举具有数个缺点。首先,负责状态复原的监控软件可能不具有关于在输入工作负荷中继续处理的后实际上将使用哪些数据结构的任何可见性,并且因此操作系统或监控软件可能浪费时间来复原数据结构,此类数据结构随后实际上不由输入工作负荷的任何后续指令使用。相比的下,通过在输入(或输出)数据结构尚不可用时请求在输入(或输出)数据结构中加载数据结构处理指令,这意味着操作系统不需要担忧复原任何数据结构,因为如果执行需要特定数据结构的任何后续数据结构处理指令,则彼结构将加载并且处理可以继续,但从未由软件再次使用的任何数据结构不复原,并且因此此举避免在状态复原期间非必要地招致附加时延。
数据结构处理指令加载不可用数据结构的途径的另一优点系此举可提供改进安全性。通常,当监控软件执行状态复原时,则该监控软件可能正在从内存的一些区域复原状态,这不是监控软件的内存分配的部分,而是与其状态正被复原的线程相关联的内存分配的部分。因此,存在恶意应用可以将监控地址的集合加载指示地址的元数据中的风险,监控地址的集合可能随后通过状态复原存取,从而将监控软件的内存分配暴露于侧信道攻击。相比的下,通过提供加载(或再次加载)给定输入数据结构(如果其尚不可用)的数据结构处理指令,则此举意味着不需要将指示数据结构地址的元数据用于监控软件,这可以阻止恶意方攻击监控软件的潜在机会。
在一些具体实施中,微架构可能总是推迟加载给定输入(或输出)数据结构,直到已接收到相关数据结构处理指令,并且因此可能不提供在译码/处理给定数据结构处理指令的前加载由彼数据结构处理指令请求的数据结构的任何能力。此外,在一些具体实施中,数据结构处理指令的架构功能可经由直接作用在内存中的数据结构上的电路系统实施,此类数据在需要时按需加载处理电路系统中并且随后写回内存,并且因此可能完全不存在对任何附加本端储存器的需求。
然而,由于对内存的存取可系相对较慢的,可选择其他具体实施来提供用作与内存分离的数据结构储存电路系统的一些本端储存器,该本端储存器与内存本身相比可以被更快地存取并且可以提供一些暂时储存器,用于近期使用的数据结构或即将发生的数据结构处理指令所请求的数据结构。因此,此种具体实施可提供具有检查电路系统的处理电路系统,该检查电路系统用于检查给定数据结构处理指令所需的给定输入数据结构(或输出数据结构)在数据结构储存电路系统中是否已经可用。例如,可提供至少一个可用性寄存器来保存指示与相应数据结构识别符相关联的数据结构是可用还是不可用的数据结构可用性信息,并且处理电路系统可基于彼数据结构可用性信息来决定给定输入数据结构的可用性。可用性寄存器可以系地址元数据寄存器本身的部分或可以系寄存器的单独集合。利用此途径,如果执行预加载操作以在执行给定数据结构处理指令的前加载数据结构,则可设定可用性信息以指示对应数据结构已经可用,并且此举可指示检查电路系统不必响应于数据结构处理指令而从内存再次加载对应数据结构。因此,在一些示例中,当在数据结构储存电路系统中尚未保存时或当遇到数据结构处理指令的前尚未请求从内存加载彼数据结构时,处理电路系统可决定给定输入数据结构或输出数据结构不可用。提前预加载数据结构可以响应于由指令译码器译码的明确加载或预加载指令而进行,或通过预加载电路系统进行,该预加载电路系统可作出以下预测:哪些数据结构为未来指令所需(例如,基于追踪关于执行相同代码的过去实例的历史行为)。
在提供与内存分离的数据结构储存电路系统的系统中,指令译码器可响应于数据结构处理指令而控制处理电路系统从数据结构储存电路系统读取至少一个输入数据结构,并且将输出数据结构写入或更新到数据结构储存电路系统。数据结构储存电路系统可以不同方式实施。在一些情形中,数据结构储存电路系统可系架构可寻址寄存器,此类寄存器可以明确地由软件指令引用于读出对应数据结构。或者,数据结构储存电路系统可包括非架构可寻址寄存器,对于用指令集架构编译而言此类寄存器可能不必要,但可视情况提供此类寄存器来由处理系统的特定微架构具体实施的设计者选择。或者,数据结构储存电路系统可以包括高速暂存内存或高速缓存。
在一些情形中,当在数据结构储存电路系统中保存给定数据结构时,处理电路系统能够以与将数据写入数据结构储存电路系统的序列不同的序列从给定数据结构读取数据。此举可以提供处理不同数据结构格式(数据结构可以该些格式储存在内存中)的灵活性。例如,在数据结构系矩阵或其他二维数据排列的情况下,资料可以逐行或逐列模式储存在内存中,并且提供具有读取/写入端口的数据结构储存电路系统是有用的,此类读取/写入埠支持以逐行或逐列模式读出数据或将数据写回。
至于数据结构处理指令本身,可定义用于与数据结构互动的数个其他指令。一个示例可系规定目标输入数据结构识别符或目标输出数据结构识别符的数据结构加载指令,响应于该数据结构加载指令,指令译码器控制处理电路系统将从内存加载的数据结构写入数据结构储存电路系统。在其中数据结构处理指令本身不系给定加载能力的架构中,此种数据结构加载指令可以系特别有用的。在此情形中,可能期望在执行数据结构处理指令的前,软件应当首先含有用于加载所涉及的相关输入或输出数据结构的一个或多个数据结构加载指令。
取决于实施数据结构元数据寄存器的方式,数据结构加载指令可以不同方式实施。在一个示例中,数据结构加载指令可从内存地址加载数据结构,该数据结构从一个或多个数据结构元数据寄存器的集合中保存的指示地址的元数据导出,对应于待加载的数据结构的目标输入或输出数据结构识别符。例如,数据结构加载指令可以规定一个或多个通用寄存器,此类通用寄存器提供目标地址识别信息来用于识别将从其加载数据结构的地址,并且除了触发处理电路系统将加载的数据结构写入数据结构储存电路系统之外,数据结构加载指令也可控制处理电路系统基于在指令或数据结构加载指令的另一性质引用的通用寄存器中规定的目标地址识别信息,来更新用于正加载的数据结构的一个或多个数据结构元数据寄存器的相关集合。此途径可提供在元数据寄存器中使用不同于由数据结构加载指令规定的明确地址识别信息之外的格式表示地址识别元数据的灵活性。例如,不是保存实际的地址识别信息本身,而是写入数据结构元数据寄存器中的数据结构加载指令的性质可以包括关于哪些通用寄存器由数据结构加载指令规定的指示、或替代地指示数据结构加载指令的地址的程序计数器,这可允许记录更紧凑形式的元数据以减小数据结构元数据寄存器的大小。记录规定目标地址识别信息的寄存器或数据结构加载指令的程序计数器可足以允许操作系统或执行状态复原的其他软件复原足够的关于与给定数据结构相关联的地址可以恢复的信息。例如,由于通用寄存器还将在上下文切换时复原,则简单地记录对哪些寄存器含有地址信息的引用可系充分的。此外,如果记录数据结构加载指令的程序计数器,则此举可以允许软件或指令译码电路组件获得所引用指令,译码该指令以识别由其引用的通用寄存器,并且随后使用彼等通用寄存器中的经复原状态来识别目标地址识别信息。因此,数据结构元数据寄存器明确地直接指示识别地址所需的地址信息片段可能不必要,因为此举可以经由其他参数来间接地识别。
或者,不同于提供触发数据结构加载的具体指令,在其他架构具体实施中,架构可定义规定目标输入数据结构识别符的准备加载指令。响应于准备加载指令,指令译码器控制处理电路系统基于下列中的一者来更新对应于目标输入数据结构识别符的一个或多个数据结构元数据寄存器的集合:由准备加载指令隐含或明确地规定的目标地址识别信息、或准备加载指令的性质。此外,此性质可以系程序计数器或由准备加载指令规定的通用寄存器的列表。此种准备加载指令在支持具有加载功能的数据结构处理指令的系统中可以是特别有用的,因为如果需要的话,数据结构处理指令可以从内存加载数据结构,则不需要较早指令执行加载作为强制架构特征。替代地,准备加载指令可简单地解释为用于使目标地址识别信息的某一集合与特定输入或输出数据结构的数据结构识别符相关联的指令。此举可设置后续数据结构处理指令可从其加载相关数据结构的地址。
尽管在架构电平处,准备加载指令实际上加载与目标输入数据结构识别符相关联的数据结构系不必要的,视情况在微架构电平处,系统设计者可在任何情形下选择以提供处理电路系统,作为对准备加载指令的响应,该处理电路系统产生加载请求,用于请求将与目标输入数据结构识别符相关联的数据结构从基于目标地址识别信息决定的内存地址传递到数据结构储存电路系统。即,尽管因为加载将由后续数据结构处理指令进行,不强迫准备加载指令执行加载,在准备加载指令时执行以产生加载请求可系更有效的,这是因为此举允许更早发起载入。因此,准备加载指令可以有效地用作预加载指令,但尽管如此,如果在执行准备加载指令的后而在执行后续数据结构处理指令的前中断处理,则数据结构处理指令仍可再次加载所请求的输入数据结构。此举可用于避免操作系统或进行状态复原的其他软件必须负责复原数据结构。
可支持规定目标输出数据结构识别符的准备储存指令,响应于该准备储存指令,指令译码器可控制处理电路系统基于由准备储存指令隐含或明确地规定的目标地址识别信息或准备储存指令的另一性质来更新对应于目标输出数据结构识别符的一个或多个数据结构元数据寄存器的集合。准备储存指令具有将地址识别元数据附接到特定输出数据结构识别符的功能。
上文论述的技术可以应用于各种不同类型的数据结构。在一些示例中,数据结构可包括二维数据排列,其中提供了在二维结构中具有一些有序排列的数个数据组件。例如,数据结构可系矩阵或其他形式的二维结构。在数据结构系矩阵的情形中,数据结构处理指令可包括规定两个输入数据结构识别符的矩阵乘法指令,对此处理操作包括对由两个输入数据结构识别符识别的两个输入数据结构执行以产生输出数据结构的矩阵乘法运算。矩阵乘法指令可以系矩阵乘法及累加指令,其中将两个输入矩阵相乘的结果加到输出矩阵的先前值以产生针对输出矩阵的新值。此外,可以定义将运算应用到输入矩阵的其他形式的矩阵乘法指令。对于一些领域而言,诸如在机器学习中,例如,其中神经网络可能需要大量矩阵乘法来使定义神经网络模型的权重与输入变量相乘用于训练网络或使用该模型作出预测,提供对在CPU本身内执行矩阵运算的本机处理器支持可以系非常有用的。在机器学习算法中,矩阵乘法十分常见,并且因此加快此种运算可以大幅度改进基于机器学习的软件的性能。
在一些示例中,数据结构可系对应于内存系统内的内存地址的数个不连续区块的结构。因此,不同于在内存地址空间中的内存地址的单个连续区块中储存的数据结构,该数据结构可跨越在内存地址空间的相异的不相邻区域处的数个区块。对于矩阵示例而言,其中实际上表示神经网络的矩阵的总体大小例如可实际上大于在指令集架构中针对给定数据结构定义的单元大小,此举可以系特别有用的。例如,数据结构可以被定义为对应于某一大小的矩阵,诸如4×4、8×8、16×16等等(或替代地可支持具有不同数量的行及列的矩形矩阵),但当软件算法需要在较大矩阵大小下应用矩阵计算时,则此类数据结构可被分解为在指令集架构的指令中支持的粒度处的独立运算。这可意味着当将较大矩阵作为整体储存在内存中,使得每行处于内存地址空间中的相邻地址处,并且一行依次跟随地址空间内的先前行的组件,或替代地逐列储存矩阵,使得每列占据内存中的连续地址的区块,并且一列依次跟随先前列的地址时,这将意味着当数据结构处理指令对彼较大矩阵的独立部分(该独立部分可以被认为系矩阵内的独立瓦块)执行操作时,则该瓦块的行或列将对应于内存地址的不连续区块的数量。通过提供指令支持来处置横跨地址空间的不连续部分的此种瓦块,这使得能够更加直接地将矩阵运算应用到更任意大小的矩阵,该矩阵可能大于或小于指令集架构中支持的瓦块大小。
对于对应于内存地址的数个不连续区块的数据结构而言,指示地址的元数据可以包括数个信息片段并且可采取数种形式。例如,指示地址的元数据可包括下列的至少一者:开始地址信息,指示内存地址的多个不连续区块的至少一个的开始地址;偏移信息,指示在内存地址的多个不连续区块的开始地址之间的分离;第一大小信息,指示内存地址的每个不连续区块的大小;以及第二大小信息,指示有多少形成数据结构的内存地址的不连续区块。这些类型的信息可能足以识别较大矩阵内的任何瓦块,其中假设在内存地址空间内逐行或逐列储存较大矩阵,并且瓦块对应于不相邻的地址空间内的独立条带。开始地址信息可以例如指示瓦块的第一行或第一列的开始地址,而偏移信息例如指示在相应行或列的开始地址之间的步幅。第一及第二大小信息可用于处理总体较大矩阵具有数个行或数个列的情形,此类数个行或数个列不系独立瓦块中的行或列的数量的准确倍数,使得当瓦块到达较大矩阵的边缘时,则第一及第二大小信息可以用于遮掉延伸超出矩阵末端的地址。第一大小信息可指示内存地址的每个不连续区块的大小,并且第二大小指示可指示形成数据结构的内存地址的不连续区块的数量。取决于数据结构是逐行还是逐列储存,则第一大小信息中的一者有效地指示在待处理的数据结构中列的数量,并且其他第一大小信息指示行的数量,但任一方式都可以。第一及第二大小信息可以不同方式编码。在一个示例中,第一或第二大小信息可以编码为数值,该数值指示行或列的数量的计数,例如,第一大小信息可指示在内存地址的不连续区块内的数据组件的数量,并且第二大小信息可指示在整个数据结构上的不连续区块的数量。或者,第一和/或第二大小信息可以编码为屏蔽,例如,位映像,其中位1(或0)表示形成数据结构的部分的内存地址的彼不连续区块内的主动组件,并且屏蔽内的位0(或1)指示不形成数据结构的部分的不连续区块内的组件。此举可以随后用于确保任何数据结构处理指令仅应用到内存地址的不连续区块的部分,该部分表示应当由独立数据结构处理指令处理的总体较大的数据结构的部分。
除了开始地址、偏移、以及第一及第二大小信息之外,也可能记录关于数据结构的其他信息,诸如指示数据结构内的独立数据组件的数据组件大小的组件大小信息。例如,一些形式的数据结构处理指令能够支持不同数据组件大小。
或者,替代直接指示开始地址信息、偏移信息、或第一及第二大小信息,其他示例可提供指示地址的元数据,该指示地址的元数据间接地识别此信息,例如,经由识别保存至少一个这些参数的通用寄存器的一个或多个寄存器识别符和/或识别规定保存一个或多个这些参数的寄存器的指令地址的指令地址指示。如上文提及,对于需要将数据结构复原到处理电路系统的储存电路系统以识别在内存中可以发现数据结构的位置的软件或电路系统而言,寄存器识别符或指令地址指示(例如,程序计数器)可能是足够的。
在一些情形中,数据结构可以系三维或阶数大于3的多维数据结构,因此数据结构不必系二维数据结构。大体上,数据结构可以系数据组件的某一阶数的排列。
或者,数据结构的另一示例可以简单地系一维数据组件串流,而不具有二维或多维排列,诸如呈表或矩阵形式。上文论述的技术也可以用于提供一些相当大小的数据串流的数据结构。由于数据结构可具有相对大的大小,这可带来关于上下文切换时延的困难,并且因此上文论述的技术可以用于解决此问题。64字节的数据结构可例如对应于32位组件的4×4矩阵。在其他示例中,输出数据结构可具有至少256字节(32位组件的8×8矩阵)或1千字节(32位组件的16×16矩阵)的大小。将了解,其他示例可以使用不同数量位(诸如16位或64位)的数据组件大小,并且在此情形中数据结构大小可再次变化。然而,大体上,当输出数据结构具有至少64字节的大小时,则这开始带来关于上下文切换时延的相当大困难,并且因此使用指示地址的元数据作为减少在上下文切换时需要保存及复原的数据量的方式是有用的。
注意到,输入数据结构不需要一定具有与输出数据结构相同的大小。例如,当执行矩阵乘法运算时,由于2N位值的乘法可产生2N-位结果,可能产生与输入数据结构相比较大大小的输出数据结构。或者,例如通过截断或舍入乘法结果以拟合与输入相同数量的位,一些具体实施可产生与输入相同大小的输出数据结构。
在一些示例中,不同于视情况使用来自数据结构元数据寄存器的指示地址的元数据来控制在上文论述的可选扩展中论述的从内存加载输入或输出数据结构,由处理电路系统响应于数据结构处理指令而执行的数据结构处理操作可独立于指示地址的元数据。即,用于将至少一个输入数据结构及输出数据结构的先前值映像到输出数据结构的新值的功能可以独立于指示地址的元数据。
然而,在其他示例中,处理电路系统可响应于数据结构处理指令,取决于在一个或多个数据结构元数据寄存器的相关集合中保存的指示地址的元数据而改写对至少一个输入数据结构执行的处理操作,该一个或多个数据结构元数据寄存器对应于至少一个输入数据结构识别符或输出结构识别符。例如,如果指示地址的元数据包括将数据结构的大小限制在特定维度中的第一或第二大小信息,则此举可以用于减少对输入数据结构的数据组件执行的乘法数量,例如,以节省功率或增加性能。例如,当处理具有基于第一及第二大小信息遮掉的一些不活动组件的数据结构时,电路逻辑(如果处理所支持的最大大小的数据结构,则该电路系统逻辑将为主动的)可以通过功率闸控而成为不活动的。此外,如果以多个步骤执行处理操作,则基于第一及第二大小信息,可能不需要一些彼等步骤。
图1示意性示出了数据处理系统2的示例,该数据处理系统包括共享对内存系统8的存取的数个主装置4、6。由主装置4、6发布的内存事务传递到互连10,该互连将事务路由到内存系统并且也可管理在相应主机处快取的数据之间的相干性。主机例如可包括一个或多个中央处理单元(central processing unit;CPU)4、能够执行指令的其他主装置(诸如图形处理单元)、或其他装置6,此类其他装置可能不具有指令执行能力,但可执行某些专用功能,诸如控制对网络的存取或用作加速某些处理功能(诸如讯号处理或矩阵乘法)的硬件加速器。
每个CPU 4可具有用于译码从高速缓存或内存撷取的程序指令的指令译码器12、以及用于响应于由指令译码器12响应于译码后的指令产生的控制讯号而执行数据处理操作的处理电路系统14。可提供寄存器16,用于储存待执行的指令的操作数并且用于储存由处理电路系统14产生的结果。CPU可具有一个或多个高速缓存18,用于从内存系统快取数据、指令或控制信息(诸如页表数据)。视情况,CPU可具有上下文保存电路系统20,用于处置上下文切换时的状态保存,尽管此功能也可以通过在CPU 4上执行的软件来执行。尽管将图1中的两个CPU 4图示为具有等效部件,实际上不必所有CPU皆系相同的,并且一些系统可具有不对称CPU,此类不对称CPU具有不同特性,诸如结合较高性能CPU与较低性能CPU来用于折衷处理性能与功率消耗。此外,一些系统可具有两个以上的CPU。
一些数据处理应用可涉及处理独立数据值,其中数据值从特定地址加载,并且由处理电路系统14执行的一些指令处理以产生写入寄存器16的结果,并且随后一旦结果不再保存于寄存器16中,则将此类结果写回高速缓存18或内存8。
然而,其他处理算法可对较大数据结构进行操作,此类数据结构包括形成数据结构的组件的数个分离的数据值。例如,数据结构可以系相当大小的一维范围的数据串流,例如,诸如待压缩的数据区块。或者,数据结构可系二维或多维矩阵或表,对此处理操作将应用到作为整体的矩阵/表。
如图2所示,此种数据结构的一个示例可系矩阵(在此示例中为二维矩阵)。矩阵处理可以用于某些处理算法,诸如一些讯号处理应用或机器学习应用。例如,机器学习模型(诸如神经网络)可使用矩阵定义,此类矩阵指示定义模型特性的权重且可通过权重乘以输入来应用到输入集合。因此,基于神经网络的处理及其他机器学习应用可包括大量的矩阵乘法运算。尽管可以提供用于执行此种矩阵乘法的硬件加速器6,与硬件加速器的互动可要求CPU 4将数据写入某些内存位置以配置硬件加速器,并且随后使用来自内存的读数从硬件加速器读回结果,并且如果存在其中矩阵乘法运算需要与对CPU本身执行的其他运算穿插的应用,则此举可能会降低性能。此外,将硬件加速器用于矩阵运算可能在系统中导致困难,其中多个CPU 4或软件线程需要共享对硬件加速器6的存取。由此,可能期望在CPU 4内提供对指令的支持,此类指令可以执行矩阵或其他数据结构(作为由指令译码器12支持的本机指令集的部分)的处理,而非需要使用硬件加速器6。
图2示出了可以提供用于保存此种矩阵的逻辑储存结构30的示例。例如,储存结构30可以系CPU内的一些寄存器16或可以作为微架构储存组件提供,诸如CPU 4内的非架构授权的寄存器或高速缓存。此外,逻辑储存结构30可以在互连10内。储存结构30可具有充分的储存某一给定大小的矩阵的容量。在此示例中,矩阵系N×N方形矩阵,其中N系16,但将了解,也可以支持其他大小的矩阵。储存结构30可具有充分的读取及写入埠,使得可能以与将数据组件写入储存结构30的序列不同的数据组件序列从储存结构读取矩阵。例如,矩阵可读取为列或行。这解释了以下事实:矩阵可以不同格式储存在内存中,其中列占据连续内存地址的区块并且一列依次跟随先前列的地址,其中相同行内的组件在地址空间内的不连续地址处(此途径可被称为列主导寻址),或相同行内的组件可储存在连续内存地址的区块中,一行可依次跟随先前行的地址,并且在此情形中,一列内的组件可处于分配到每行的部分内的不连续地址处(此途径被称为行主导寻址)。由于不同软件算法可使用行主导及列主导途径中的不同途径,为这些途径的任一者提供硬件支持可以是有用的。通过提供附加的读取端口,使得矩阵的组件可以一次读出一行或一次读出一列,此举允许矩阵的动态转换,使得在内存列主导中储存的矩阵可以读出行主导或反的还然,这可以大幅度改进与不同类型的软件的兼容性并且避免需要执行附加指令来改组向量组件以将列主导矩阵转换为行主导形式或反的还然。
如图3的示例中示出,数据结构储存电路系统31可具备充分的储存空间,用于保存如果干矩阵或矩阵的部分(瓦块)。在后续描述中,使用术语“瓦块”,该术语指内存中储存的矩阵的N×N部分。当然,如果待处理的内存中的矩阵本身具有维度N×N,则瓦块可实际上对应于整个矩阵。
数据结构储存电路系统31可包括图2所示的储存结构30的数个实例。例如,如图3所示,储存电路系统31可具有充分的用于一次保存8个N×N瓦块的容量。所提供的8组储存区域可分为用于保存矩阵乘法或其他算术运算的输入瓦块的4个区域30A0、A1、B0、B1以及用于保存矩阵乘法运算的输出的4个区域C0至C3。
尽管另一途径可为仅提供3个瓦块储存区域30(例如,用于储存输入瓦块A0、B0及输出瓦块C0),使得可以一次执行单个矩阵乘法,此途径会需要针对每个矩阵乘法运算执行至少2次从内存加载瓦块,这是因为到每个矩阵乘法的输入必须共享相同的2个输入瓦块寄存器。相比的下,通过在本端储存器31中提供至少8个瓦块储存区域30,这意味着用于载入输入瓦块A0、A1、B0、B1的从内存的4次加载可以跨4个矩阵乘法运算分摊,因为跨多个乘法运算共享输入瓦块是常见的(例如,C0=A0*B0,C1=A0*B1,C2=A1*B0,C3=A1*B1),并且此举可通过将载入比例减小到所需倍数来增加性能。由于其可加载相对大量的数据,加载瓦块可系相对耗时的,因此此举对性能而言意义重大。例如,如果瓦块的每个数据组件系32位值并且N=16,则每个瓦块可对应于1千字节的数据。
尽管提供逻辑储存区域30用于处置多于一个乘法运算的相同途径可以扩张到更大数量的乘法,通过在储存电路系统31中提供附加的储存容量用于输入及输出瓦块,在增加的性能与为CPU 4内增加数量的矩阵提供储存电路系统的附加负担之间可存在平衡,并且因此如图3所示的具有8个输入及输出矩阵的途径系在性能与面积成本之间更优选平衡的。尽管如此,如果需要,不同数量的瓦块可以保存在储存结构31中。
图3所示的瓦块储存区域30的每一者可保存表示如图4所示的较大矩阵50内的瓦块40的资料。待处理的总体矩阵50可大于由CPU 4中的指令支持的N乘N瓦块40的大小。因此,对较大矩阵50执行的矩阵乘法可能需要被分解为对矩阵的独立瓦块40执行的独立指令。因此,为了识别矩阵50的给定瓦块40驻留在内存中的位置,可定义数个地址识别参数。较大矩阵50的数据组件可储存在内存地址空间的连续区块中,并且在此示例中矩阵经行主导储存,使得矩阵的第一行在连续区块中的内存地址处储存,其中矩阵的左上组件在最低内存地址处并且随后彼顶行的后续组件在内存中连续增加的内存地址处。当到达第一行的末端时,则其后的下一地址将对应于矩阵的第二行的最左组件的数据组件,并且以此类推,使得由于矩阵的内存地址的序列增加,这对应于在连续行中读出的组件。当然,矩阵也可以经列主导储存,并且在此情形中,序列会逐列而非逐行继续。
因此,为了识别矩阵的独立瓦块40,可定义如果干参数,包括指向瓦块的开始地址的基址42,步幅参数44,该步幅参数有效地指示较大矩阵50的一行或列的大小,并且表示在瓦块40的一行(或如果瓦块经列主导储存则为列)与下一行(或列)的开始地址之间的差异。此外,水平大小及垂直大小信息46、48可定义为指示瓦块40的水平及垂直范围。通常,瓦块可普遍占据所允许的最大大小(例如N乘N)以使用完整的处理器能力。然而,在图4的右下方所示的示例中,一旦瓦块接近较大矩阵结构50的边界,则瓦块可部分重迭较大矩阵50的边缘,并且可能不期望处理位于较大矩阵结构50外侧的部分49。因此,水平及垂直大小参数46、48可用于限制载入CPU 4的瓦块储存区域30中的数据的部分(或限制在矩阵处理指令中处理的部分)。例如,水平大小及垂直大小可编码为行或列计数,或者编码为屏蔽,该屏蔽系位映像,其中位1指示矩阵的有效组件,并且位0指示无效组件,或反的还然。
图5示出了CPU 4内的寄存器16的子集的示例。将了解,这不示出可提供的所有寄存器。寄存器16包括通用寄存器(general purpose register;GPR)60的集合,此类通用寄存器用于操作数的一般储存及由处理电路系统14处理的指令的结果。可提供某一数量的通用寄存器,例如,32或64。例如,整数算术指令可引用其操作数的通用寄存器,并且将其结果写回通用寄存器。
CPU也可具有提供储存区域30的数据结构储存器31,此类储存区域用于保存如图3中的数个输入及输出数据结构A0至C3。例如,此数据结构储存器31可以系架构识别的寄存器的集合、非架构识别的寄存器的集合或高速缓存18的部分。
CPU的寄存器16还包括数个寄存器,此类寄存器提供关于数据结构储存器31中的数据结构的信息。每个数据结构可与数据结构识别符相关联,例如,指示A0、A1、B0、B1及C0至C3可对应于相应数据结构识别符(将了解,此处提供A、B、C注释用于理解,以分别区分第一/第二输入及输出识别符,并且该注释可在识别符中隐含,而非明确编码)。因此,寄存器可包括数据结构元数据寄存器62的集合,此类数据结构元数据寄存器经指定用于保存指示地址的元数据,该指示地址的元数据可以用于识别将对应数据结构储存在内存中的地址。数据结构元数据寄存器62可以系与GPR 60分离的寄存器的专用集合,或者可以系如图5中的虚线图示的GPR的指定子集。这些替代选项将在下文关于图8和图9更详细论述。
数据结构元数据寄存器62可分为多个寄存器集合,各自对应于一个数据结构(瓦块)。对给定寄存器集合而言,这可包括单个寄存器或者两个或多个寄存器。在一个示例中,针对给定数据结构记录的元数据集合可包括上文针对图4论述的参数42、44、46、48。或者,数据结构元数据可以另一方式记录,诸如通过识别保存这些参数的GPR 60的集合(在数据结构元数据寄存器62与GPR 60分离的具体实施中)或识别规定保存这些参数的寄存器的指令的程序计数器地址。将了解,对于不同于矩阵的数据结构类型而言,可提供不同的地址参数集合作为元数据。
视情况,寄存器16也可以包括提供关于数据结构的信息的附加寄存器,诸如数据结构可用性寄存器64,此类数据结构可用性寄存器指示对于给定数据结构识别符而言,对应数据结构在数据结构储存器31中是否可用或是否需要从内存加载。此外,寄存器可以包括数据结构脏指示符寄存器66,此类数据结构脏指示符寄存器指示对于给定数据结构识别符而言,在数据结构储存器31中储存的对应数据结构是干净(与内存中储存的对应数据结构一致)还是脏的(与内存中储存的底层数据结构不同)。这些附加寄存器64、66均系可选的,并且在一些情形中,不将此类附加寄存器提供为与数据结构元数据寄存器62分离,在寄存器64、66中的信息可以替代地在元数据寄存器本身的相关集合内编码。
为了帮助加快上下文保存操作,在架构电平处提供使软件能够决定给定数据结构识别符对应于干净还是脏数据结构的特征可以是有用的。如图6所示,一种可在一些情形中使数据结构脏指示符寄存器66不必要的途径可以是与用于输出数据结构C0至C3的输出数据结构识别符空间72处相比,用分离的输入数据结构识别符空间70中的识别符来定义输入数据结构A0、A1、B0、B1。例如,识别符70的一个集合可用于输入数据结构,并且识别符72的另一集合用于输出数据结构。在图6的示例中,到矩阵乘法运算的“A”及“B”输入可在分离的输入数据结构识别符空间70-A、70-B中定义,这可以帮助减少在硬件中需要的瓦块读取/写入埠的数量。然而,另一途径可以是用常见的输入数据结构识别符空间内的识别符分配所有输入数据结构。
因此,当定义来自分离的识别符空间的识别符时,这意味着相应识别符空间中的对应数据结构不能共享相同的识别符(或从指令编码的其他方面中隐含,诸如用于含有识别符的字段,正引用相应识别符空间70-A、70-B的该识别符)。通过分离用于输入及输出数据结构的识别符空间,这意味着可以假设任何输入数据结构识别符与干净数据结构有关,因为不可能将具有更新值的输出数据结构从输入数据结构识别符空间70写入与输入数据结构识别符相关联的区域中。此举可以用于执行上下文保存的软件或电路组件,因为随后可以保证与输入数据结构识别符空间70中的输入数据结构识别符相关联的所有数据结构将总是干净的,并且因此这意味着数据结构储存器31中的对应数据结构将简单地为内存中的相同数据的复本,并且因此在上下文切换时不需要保存回内存。替代地,仅保存提供关于相关数据在内存中的位置的信息的数据结构元数据寄存器62可以是充分的,由于这可能足以用于当处理的后需要继续时上下文复原的软件再次从内存加载相关数据结构。
视情况,如图6中的虚线图示,可以提供用于储存脏指示符的一个或多个数据结构脏寄存器66,此类脏指示符指示与相应输出数据结构识别符相关联的数据结构是干净还是脏的。此举可允许上下文保存程序决定省去将任何干净的输出数据结构保存到内存,以进一步加速上下文保存。
图7示出了处理指令序列的第一示例,该指令序列包括用于在总体数据结构的粒度处执行处理操作的数据结构处理指令80。在此示例中,数据结构系如上文论述的矩阵的瓦块,并且数据处理指令80系矩阵乘法及累加指令,此类指令规定输出数据结构识别符Ci及两个输入数据结构Aj、Bk,并且控制处理电路系统14产生结果Ci'=Ci+Aj*Bk。在此示例中,i可系在0与3之间的任何值,并且j及k可系0或1(给定针对如上文论述的数据结构储存器31提供的储存区域的数量),但在其他示例中,如果存在附加储存器,则识别符可具有较大值(如果必要的话)。在此示例中,A、B、C指示系隐含的,因为此类指示可由指令编码内的操作数识别符的位置假设。
在图7的示例中,数据结构元数据寄存器62系通用寄存器60的固定子集。对于每个输入数据结构识别符而言,GPR 60的对应子集被分配为表示用于彼数据结构识别符的元数据寄存器62。例如,寄存器X0至X3可表示用于输入数据结构A0的元数据寄存器集合,并且类似地寄存器X4至X7、X8至X11及X12至X15可提供用于输入数据结构A1、B0、B1的元数据,(将了解,使用4个寄存器来提供元数据系一个示例-其他示例可将元数据压缩到较少的寄存器中)。元数据寄存器62的每个集合可包括一个或多个寄存器,并且可提供用于允许软件决定对应于对应数据结构的地址集合的信息,例如,如上文论述的基址42、步幅44、以及水平及垂直大小参数46、48。提供对应于输出数据结构的元数据寄存器是不必要的,尽管也可以提供。
如图7所示,指令译码器12可支持数据结构加载指令82,该数据结构加载指令规定输入数据结构识别符并且控制处理电路系统14将数据结构从地址集合加载与规定的输入数据结构识别符相关联的数据结构储存器31的区域,该地址集合从与规定的输入数据结构寄存器相关联的GPR的对应固定子集导出。例如,对于图7所示的第一加载指令而言,输入数据结构识别符系A0,并且因此可能隐含着用于识别内存中的对应数据结构的地址的地址信息应当从GPR X0至X3的固定子集取得,此类GPR经指定为保存用于输入数据结构A0的地址信息。指令序列可包括如果干加载指令以基于GPR的相应子集中的信息加载相应输入数据结构A0、A1、B0、B1。视情况,如果用于累加运算的输出数据结构的先前值尚未保存在数据结构储存器31中,则也可存在用于加载输出数据结构中的进一步负荷。如果不存在用于输出数据结构的永久指派的元数据寄存器,则这些输出数据结构加载指令可需要明确地引用定义用于对应数据结构的地址信息的通用寄存器。或者,可能不需要用于输出数据结构的此种加载指令,因为可简单地假设在数据结构储存器31中的输出数据结构C0至C3中的一者的内容总是含有相关值,并且随后通过将输出数据结构初始化为0,则后续指令可简单地累加到输出数据结构中。因此,负荷C0至C3系可选的。
已经加载所请求输入的任一者随后加载一系列矩阵乘法及累加(matrixmultiply and accumulate;MMLA)运算计算出相应输出C0至C3。注意到,由于4个输入A0至B1在4个乘法累加运算的中共享,在此示例中每个乘法累加运算存在1个负荷。相应加载及乘法累加指令82、80可重复多次、与通用寄存器移动或者算术或加载指令穿插,此类算术或加载指令更新元数据寄存器x0至x15的相关集合以改变地址参数,用于指向总体矩阵结构50的其他瓦块。或者,可定义矩阵加载指令82,使得除了从由元数据寄存器62指向的当前地址处的内存加载数据结构之外,处理电路系统还隐含地更新元数据寄存器以指向下一个瓦块,例如通过递增基址。在一些示例中,矩阵乘法可以基于地址元数据的对应集合来修改,例如,通过遮掉由水平/垂直大小信息46、48指示的无效组件。最终,一旦不存在更多的待执行的矩阵乘法及累加运算,则矩阵乘法指令80的最后集合的结果可以使用数据结构储存指令84储存回到内存,此类数据结构储存指令可使用通用寄存器来识别于此应当以与元数据寄存器中指示的元数据类似的格式储存彼等数据结构的地址。
尽管对给定数据结构的处理继续进行,使用通用寄存器60的子集作为定义用于彼数据结构的地址元数据的元数据寄存器62意味着要求软件避免将其他值写入通用寄存器60的彼子集,同时仍需要数据结构。此举确保了如果发生中断,并且处理切换到不同的执行上下文,用于指示在数据结构储存器31中保存的给定数据结构的元数据的地址仍将存在并且可以保存至内存,作为通用寄存器60的上下文保存的部分,并且这意味着保存减少上下文切换时延的对应数据结构本身是不必要的。
图8示出了与图7中的序列类似的代码序列的示例,但此处为数据结构提供指示地址的元数据的相应集合的数据结构元数据寄存器62与通用寄存器60分离。数据结构处理指令80及储存指令84可具有与图7中相同的作用。
然而,对于加载指令82而言,由于此时不存在提供地址信息的隐含地识别的通用寄存器,加载指令可包括对通用寄存器的明确引用86的集合,此类通用寄存器提供地址信息的相应片段42、44、46、48,并且随后这些加载指令82可触发指令译码器12以控制处理电路系统14从内存加载来自经由规定的通用寄存器中的信息识别的地址集合的数据结构,并且将加载的数据结构储存到与由加载指令82规定的输入数据结构识别符A0-B1相关联的数据结构储存器31的相关区域中。除了加载数据结构之外,加载指令也可触发处理电路系统将指示地址的元数据写入用于规定的输入数据结构识别符的一个或多个数据结构元数据寄存器62的相关集合。指示地址的元数据可以采取数种形式。其可以简单地系来自通用寄存器的经存取集合的值,此类通用寄存器明确地编码如上文论述的基址42、步幅44以及水平及垂直大小46、48。或者,元数据可以系用于图8的示例中的第一负荷的寄存器区分符,例如,Xa至Xd,此类寄存器区分符识别含有地址信息的寄存器。如果使用此途径,则软件将需要保证彼等寄存器继续保存地址信息并且不在执行加载指令及最终指令之间更新,该最终指令依赖于数据结构储存器内的数据结构。然而,与图7的示例相比,通过允许哪些特定通用寄存器规定地址信息的变化,此途径可提供附加的灵活性。或者,再次假定保证在仍需要数据结构时引用寄存器Xa至Xd等等的内容不改变,指示地址的元数据可以系对程序计数器地址88的指示,该程序计数器地址指示相关加载指令本身的地址。在其中将地址信息42、44、46、48本身写入数据结构元数据寄存器62的示例中,则不需要在用于规定彼信息的源寄存器86处限制任何后续更新,并且在此情形中,可允许软件改变用于定义地址信息42-48的GPR 60的内容,这是因为对应信息保留在数据结构元数据寄存器62中。
另外,图8的示例类似于图7,并且再次通过记录追踪可以发现指示地址的元数据的位置或直接指示指示地址的元数据的信息,使得上下文复原时的软件可以决定对应数据结构在内存中的位置,这意味着不需要保存干净数据结构作为上下文保存算法的部分。
因此,图9是示出控制上下文保存的方法的流程图。此举可以通过在CPU 4内的硬件中的提供之上下文保存电路系统20来执行,或者可以在软件通过操作系统、超管理器或其他监控过程进行。状态保存方法响应于状态保存触发事件(例如,硬件或软件触发的异常或中断)而执行。于步骤100,上下文状态保存包括将正在进行的线程的一般上下文保存到内存内的数据结构。例如,一般上下文可包括指示指令地址(该指令地址表示当前执行点)的程序计数器、通用寄存器60的内容、及需要保留的任何其他处理器状态,该处理器状态可能不直接与处理上文描述的数据结构有关。保存此状态可在监控过程的地址空间内,例如,在操作系统或超管理器的地址空间中对由该监控过程维持的数据结构执行。例如,堆栈数据结构可用于储存为给定线程保存的状态块。
于步骤102,对于数据结构储存器31中的任何干净数据结构而言,状态保存保存了元数据寄存器62的对应集合,但不保存在数据结构储存器31中储存的数据结构本身。这些干净数据结构可以包括任何输入数据结构、以及视情况包括任何输出数据结构,对此脏指示符66指示输出数据结构是干净的。注意到,在其中数据结构元数据寄存器60系GPR 60的子集的情形中,则当将GPR 60保存到内存时,步骤102可能已经隐含地作为步骤100的部分而得以执行。然而,在其中数据结构元数据寄存器62与GPR 60分离的示例中,则可执行步骤102。
于步骤104,对于任何脏数据结构或不知道干净还是脏的数据结构而言,可保存数据结构本身及元数据寄存器62的对应集合。
因此,通过确保存在继续保存地址信息的一些元数据寄存器62(该地址信息关于从内存中获得数据结构的位置),此举可以允许于步骤104保存整个数据结构仅限于彼等脏结构,并且不需要保存干净数据结构,因为此类干净数据结构仅系内存中的数据的复本。
图10示出了可以使用的另一示例。在此示例中,如果输入或输出值在数据结构储存器31中尚不可用,则除了执行数据结构处理操作本身之外,数据结构处理指令800也可触发彼指令所需要的任何输入或输出数据结构的加载。此举意味着上文描述的加载指令82可以用准备加载指令120及准备储存指令122替换,此类准备加载指令及准备储存指令不需要从内存加载对应数据结构,而是可用于将地址信息的集合指派给规定的数据结构识别符A0-C3。这些指令120、122可规定通用寄存器124的集合,此类通用寄存器定义上文论述类型的地址信息42至48,并且此类指令可导致指令译码器12控制处理电路系统14将地址信息写入与规定的数据结构识别符A0-C3相关联的元数据寄存器62的集合。准备加载指令120可用于将地址信息指派给输入数据结构识别符A0、A1、B0、B1,并且准备储存指令122可将地址信息指派给输出数据结构识别符C0-C3。视情况,如果数据结构尚不可用,则准备加载指令也可以将该数据结构预加载到数据结构储存器31中,但这可能不是架构需要的特征。
因此,当到达数据结构处理指令80时,处理电路系统可例如基于数据结构可用性寄存器64中的可用性信息来检查任何输入的可用性,并且加载在数据结构储存器31中尚不可用的指令所需的任何输入。此外,处理电路系统对输入数据结构执行相关数据处理操作以产生输出数据结构。
通过定义指令集架构中的MMLA指令80来还要求加载输入,这意味着用于复原某些数据结构之上下文复原功能是不必要的,因为如果需要的话,数据处理操作80本身将加载任何不可用的数据结构。因此,如果例如在产生图10的示例中的C0输出的第一数据结构处理指令80的后发生中断,并且执行离开当前线程之上下文切换,则在此点处,可将任何脏数据结构C0保存到内存,并且还保存先前复制到元数据寄存器62的指示地址的元数据作为状态保存的部分,但保存任何干净数据结构A0至A1、B0至B1或C1至C3是不必要的。当随后返回到线程时,执行上下文复原,并且一旦已经复原元数据寄存器62,就不必将任何其他数据结构复原到寄存器,因为当处理继续时,每个后续数据结构处理指令80将加载其输入中(如果尚未进行)。此举可以改进安全性,因为其意味着数据结构保留在线程的地址空间内,该线程使用此类数据结构而非必须在监控过程的地址空间内使用。此外,其意味着不必对任何数据结构执行上下文复原,对于在线程(该线程在上下文复原的后)继续的后执行的任何指令而言随后不需要该数据结构。
尽管非架构要求的,准备加载指令120可视情况将其对应数据结构预加载到数据结构储存器31中(如果尚未进行),通过与在发起加载的前硬件等到对应数据结构处理指令80的情况相比更早地针对这些结构发起加载,此举可以帮助改进性能。因此,可用性寄存器64可以用于追踪在准备加载指令120与对应数据处理指令之间是否存在中断,使得硬件可以决定当到达数据结构处理指令80时再次加载任何数据结构是否是必要的。
图11是示出上下文状态复原过程的流程图,该过程例如可由负责管理用于处理的底层线程之上下文复原的软件中的操作系统或超管理器执行。于步骤150,软件复原输入线程的一般上下文,诸如程序计数器及通用寄存器。如果尚未作为通用寄存器复原的部分进行,则于步骤152,上下文复原过程复原数据结构元数据寄存器62,使得后续指令可以随后识别需要从其加载数据结构的内存中的位置。于步骤154,软件不需要复原任何数据结构本身,这是因为这些数据结构可以按需要由后续数据结构处理指令80加载。
尽管上文论述的示例与矩阵有关并且所描述的数据结构处理操作系矩阵乘法,将了解,用于减少上下文保存及复原附加负担的类似技术可以应用于其他数据结构类型。
图12标出可使用的仿真器具体实施。尽管先前描述的实施方案关于用于操作支持相关技术的具体处理硬件的设备及方法来实施本发明,也可能根据本文描述的实施方案提供经由使用计算机程序来实施的指令执行环境。因为此种计算机程序提供硬件架构的基于软件的具体实施,故经常被称为仿真器。仿真器计算机程序的变化包括模仿器、虚拟机、模型及二进制转换器,包括动态二进制转换器。通常,仿真器具体实施可在主处理器730上运行,视情况运行主操作系统720,从而支持仿真器程序710。在一些排列中,在硬件与所提供的指令执行环境之间和/或在相同主处理器上提供的多个不同指令执行环境之间可能存在多层模拟。历史上,已需要高效处理器提供以合理速度执行的仿真器具体实施,但此种途径可在某些情况下为合理的,诸如当期望运行另一处理器本机的代码以获得兼容性时,或出于再用的原因。例如,仿真器具体实施可提供具有不由主处理器硬件支持的附加功能的指令执行环境,或提供通常与不同硬件架构相关联的指令执行环境。模拟的概述在“SomeEfficient Architecture Simulation Techniques”,Robert Bedichek,Winter 1990USENIX Conference,第53页至第63页中给出。
如果先前已经在模拟实施方案中参考特定硬件构造或特征描述实施方案,则等效功能可由适当的软件构造或特征提供。例如,特定电路系统可在仿真实施方案中实施为计算机程序逻辑。类似地,内存硬件(诸如寄存器或高速缓存)可在仿真实施方案中实施为软件数据结构。在先前描述的实施方案中参考的一个或多个硬件组件存在于主硬件(例如,主处理器730)上的排列中,一些模拟实施方案可在适当时利用主硬件。
仿真器程序710可储存在计算机可读取储存媒体(其可系非暂时性媒体)上,并且向目标代码700(其可包括应用、操作系统和超管理器)提供程序接口(指令执行环境),该程序接口与由仿真器程序710模型化的硬件架构的应用程序编程接口相同。因此,目标代码700的程序指令(包括如上文描述的数据结构处理指令)可使用仿真器程序710从指令执行环境内执行,使得实际上不具有上文论述的设备2的硬件特征的主计算机730可以模仿这些特征。
仿真器程序710可包括指令译码程序逻辑712,该指令译码程序逻辑译码目标代码700的指令,并且将此类指令映像到使用本机指令定义的等效功能,此类本机指令由主数据处理设备730支持。例如,指令译码程序逻辑712可包括if/then/else语句,此类语句检查目标代码700中的目标指令的经编码位,并且取决于在特定指令中发现的位,选择在本机指令集中定义的指令序列来仿真目标指令的架构功能。
此外,仿真器程序710可包括寄存器仿真程序逻辑714,该寄存器仿真程序逻辑可管理在主数据处理设备730的内存中定义的储存结构,该储存结构仿真由与目标代码700相关联的指令集架构需要的架构寄存器。例如,使用目标代码700的目标指令中的寄存器引用来识别的寄存器读取/写入操作可映像到内存存取指令,用于读取/写入主数据处理设备730的内存中的数据。使用寄存器仿真程序逻辑714仿真的寄存器可包括上文论述的数据结构元数据寄存器62。
在本专利申请中,词语“经配置为…”用于意味着设备的组件具有能够进行所定义操作的配置。在此上下文中,“配置”意味着硬件或软件的互连的排列或方式。例如,设备可具有提供所定义操作的专用硬件,或者处理器或其他处理装置可经程序化为执行该功能。“经配置为”不暗示需要以任何方式改变设备组件以便提供所定义的操作。
尽管已在本文中参考随附说明书附图详细描述了本发明的说明性实施方案,应理解,本发明不限于彼等精确实施方案,且熟习该项技术者可在其中实现各种变化及修改而不脱离由随附权利要求书所定义的本发明的范围。

Claims (23)

1.一种设备,包括:
一指令译码器,用于译码指令;以及
处理电路系统,用于响应于由所述指令译码器译码的所述指令而执行数据处理;其中:
响应于规定至少一个输入数据结构识别符和一输出数据结构识别符的一数据结构处理指令,所述指令译码器经配置为控制所述处理电路系统对由所述至少一个输入数据结构识别符识别的至少一个输入数据结构执行一处理操作,以产生由所述输出数据结构识别符识别的一输出数据结构;
所述至少一个输入数据结构和所述输出数据结构各自包括对应于多个内存地址的一数据排列;并且
所述设备包括一个或多个数据结构元数据寄存器的多个集合,一个或多个数据结构元数据寄存器的每个集合与一对应数据结构识别符相关联并且经指定为保存指示地址的元数据,所述元数据识别由所述对应数据结构识别符识别的所述数据结构的所述多个内存地址。
2.根据权利要求1所述的设备,其中所述处理电路系统经配置为根据一指令集架构操作,所述指令集架构使软件能够针对至少数据结构识别符的一子集来识别对应于数据结构识别符的所述子集中的一者的一数据结构是干净还是脏的。
3.根据权利要求1和2中任一项所述的设备,其中所述输出数据结构识别符在与所述至少一个输入数据结构识别符分离的一识别符空间中定义。
4.根据任一前述权利要求所述的设备,包括至少一个架构寄存器,用于保存至少一个脏指示符,每个脏指示符指示对应于一给定数据结构识别符的一数据结构是干净还是脏的。
5.根据任一前述权利要求所述的设备,包括响应于一上下文保存触发事件而将处理器状态的一预定子集保存到内存的上下文保存电路系统,其中处理器状态的所述预定子集包括对应于至少一个数据结构识别符的一个或多个数据结构元数据寄存器的所述集合,所述至少一个数据结构识别符对应于一干净数据结构,但不包括对应于所述至少一个数据结构识别符的所述数据结构。
6.根据任一前述权利要求所述的设备,其中与一给定数据结构识别符相关联的所述数据结构元数据寄存器包括下列中的一者:
多个通用寄存器的一固定子集,所述通用寄存器也能够响应于由所述指令译码器和所述处理电路系统支持的非数据结构处理指令而存取;以及
数据结构元数据寄存器的一专用集合,与所述多个通用寄存器分离。
7.根据任一前述权利要求所述的设备,其中响应于所述数据结构处理指令,所述处理电路系统经配置为产生一加载请求,用于当一给定输入数据结构或一给定输出数据结构的一先前值不可用于所述处理电路系统时从内存加载所述给定输入数据结构或所述给定输出数据结构的所述先前值。
8.根据权利要求7所述的设备,其中所述处理电路系统包括检查电路系统,用于检查所述给定输入数据结构在与所述内存分离的数据结构保存电路系统中是否可用。
9.根据任一前述权利要求所述的设备,包括与内存分离的数据结构保存电路系统;以及
响应于所述数据结构处理指令,所述指令译码器经配置为控制所述处理电路系统从所述数据结构保存电路系统读取所述至少一个输入数据结构,并且将所述输出数据结构写入或更新到所述数据结构保存电路系统。
10.根据权利要求9所述的设备,其中当在所述数据结构保存电路系统中保存一给定数据结构时,所述处理电路系统能够以与将所述数据写入所述数据结构保存电路系统的序列不同的一序列从所述给定数据结构读取数据。
11.根据权利要求9和10中任一项所述的设备,其中所述数据结构保存电路系统包括下列中的至少一者:
架构可寻址寄存器;
非架构可寻址寄存器;
一高速暂存内存;和
一高速缓存。
12.根据权利要求9至11中任一项所述的设备,其中响应于规定一目标输入数据结构识别符或一目标输出数据结构识别符的一数据结构加载指令,所述指令译码器经配置为控制所述处理电路系统将从一个或多个数据结构元数据寄存器的所述集合中保存的所述指示地址的元数据导出的内存地址加载的一数据结构写入所述数据结构保存电路系统,所述一个或多个数据结构元数据寄存器对应于所述目标输入数据结构识别符或所述目标输出数据结构识别符。
13.根据权利要求9至12中任一项所述的设备,其中响应于规定一目标输入数据结构识别符或一目标输出数据结构识别符的一数据结构加载指令和一个或多个通用寄存器,所述指令译码器经配置为控制所述处理电路系统:
将从所述一个或多个通用寄存器中保存的目标地址识别信息导出的内存地址加载的一数据结构写入所述数据结构保存电路系统,以及
基于所述目标地址识别信息或所述数据结构加载指令的一性质来更新对应于所述目标输入数据结构识别符或所述目标输出数据结构识别符的一个或多个数据结构元数据寄存器的所述集合。
14.根据任一前述权利要求所述的设备,其中响应于规定一目标输入数据结构识别符的一准备加载指令,所述指令译码器经配置为控制所述处理电路系统基于下列中的一者来更新对应于所述目标输入数据结构识别符的一个或多个数据结构元数据寄存器的所述集合:
由所述准备加载指令隐含或明确地规定的目标地址识别信息;以及
所述准备加载指令的一性质。
15.根据权利要求14所述的设备,其中响应于所述准备加载指令,所述处理电路系统经配置为产生一加载请求,用于请求将与所述目标输入数据结构识别符相关联的一数据结构从基于所述目标地址识别信息决定的内存地址传递到数据结构保存电路系统。
16.根据任一前述权利要求所述的设备,其中响应于规定一目标输出数据结构识别符的一准备储存指令,所述指令译码器经配置为控制所述处理电路系统基于下列中的一者来更新对应于所述目标输出数据结构识别符的一个或多个数据结构元数据寄存器的所述集合:
由所述准备储存指令隐含或明确地规定的目标地址识别信息;以及
所述准备储存指令的一性质。
17.根据任一前述权利要求所述的设备,其中所述多个内存地址包括内存地址的多个不连续区块。
18.根据权利要求17所述的设备,其中所述指示地址的元数据包括下列中的至少一者:
开始地址信息,指示内存地址的所述多个不连续区块的至少一者的一开始地址;
偏移信息,指示在内存地址的所述多个不连续区块的开始地址之间的一分离;
第一大小信息,指示内存地址的每个不连续区块的一大小;
第二大小信息,指示形成所述数据结构的内存地址的所述不连续区块的数量;
组件大小信息,指示所述数据结构的一数据组件大小;
一个或多个寄存器识别符,识别保存所述开始地址信息、所述偏移信息、所述第一大小信息和所述第二大小信息中的至少一者的一个或多个通用寄存器;以及
一指令地址指示,识别保存所述开始地址信息、所述偏移信息、所述第一大小信息和所述第二大小信息中的至少一者的一指令规定寄存器的一地址。
19.根据任一前述权利要求所述的设备,其中所述数据结构处理指令包括规定两个输入数据结构识别符的一矩阵乘法指令,并且所述处理操作包括对由所述两个输入数据结构识别符识别的两个输入数据结构执行的一矩阵乘法运算,以产生所述输出数据结构。
20.根据任一前述权利要求所述的设备,其中所述输出数据结构具有至少64字节的一大小。
21.根据任一前述权利要求所述的设备,其中响应于所述数据结构处理指令,所述处理电路系统经配置为取决于在一个或多个数据结构元数据寄存器的至少一个集合中保存的所述指示地址的元数据而改写对所述至少一个输入数据结构执行的所述处理操作,所述一个或多个数据结构元数据寄存器对应于所述至少一个输入数据结构识别符或所述输出数据结构识别符。
22.一种数据处理方法,包括:
响应于译码规定至少一个输入数据结构识别符和一输出数据结构识别符的一数据结构处理指令,控制所述处理电路系统对由所述至少一个输入数据结构识别符识别的至少一个输入数据结构执行一处理操作,以产生由所述输出数据结构识别符识别的一输出数据结构,所述至少一个输入数据结构和所述输出数据结构各自包括对应于多个内存地址的一数据排列;以及
将指示地址的元数据保存在一个或多个数据结构元数据寄存器的多个集合中,一个或多个数据结构元数据寄存器的每个集合与一对应数据结构识别符相关联并且经指定为保存指示地址的元数据,所述元数据识别由所述对应数据结构识别符识别的所述数据结构的所述多个内存地址。
23.一种储存一计算机程序的非暂时性储存媒体,所述计算机程序用于控制一主数据处理设备仿真由一目标数据处理设备执行一目标程序;所述计算机程序包括:
指令译码程序逻辑,用于译码所述目标程序的指令,其中响应于规定至少一个输入数据结构识别符和一输出数据结构识别符的一数据结构处理指令,所述指令译码程序逻辑经配置为控制所述主数据处理设备对由所述至少一个输入数据结构识别符识别的至少一个输入数据结构执行一处理操作,以产生由所述输出数据结构识别符识别的一输出数据结构,所述至少一个输入数据结构和所述输出数据结构各自包括对应于多个内存地址的一数据排列;以及
寄存器仿真程序逻辑,用于控制对一储存结构的存取以仿真所述目标数据处理设备的寄存器,所述寄存器包括一个或多个数据结构元数据寄存器的多个集合,其中一个或多个数据结构元数据寄存器的每个集合与一对应数据结构识别符相关联并且经指定为保存指示地址的元数据,所述元数据识别由所述对应数据结构识别符识别的所述数据结构的所述多个内存地址。
CN202080018004.6A 2019-08-05 2020-03-23 数据结构处理 Pending CN113498507A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/531,208 US11068268B2 (en) 2019-08-05 2019-08-05 Data structure processing
US16/531,208 2019-08-05
PCT/GB2020/050774 WO2021023954A1 (en) 2019-08-05 2020-03-23 Data structure processing

Publications (1)

Publication Number Publication Date
CN113498507A true CN113498507A (zh) 2021-10-12

Family

ID=70166055

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080018004.6A Pending CN113498507A (zh) 2019-08-05 2020-03-23 数据结构处理

Country Status (8)

Country Link
US (1) US11068268B2 (zh)
EP (1) EP3912027B1 (zh)
JP (1) JP7465887B2 (zh)
KR (1) KR20220038581A (zh)
CN (1) CN113498507A (zh)
IL (1) IL285610B2 (zh)
TW (1) TW202107276A (zh)
WO (1) WO2021023954A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115098271A (zh) * 2022-08-25 2022-09-23 北京医百科技有限公司 一种多线程数据处理方法、装置、设备及介质

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11392316B2 (en) * 2019-05-24 2022-07-19 Texas Instruments Incorporated System and method for predication handling
CN113570028A (zh) * 2020-04-28 2021-10-29 超威半导体公司 用于在神经网络中处理数据的静态生成的经编译表示
US11799986B2 (en) * 2020-09-22 2023-10-24 Apple Inc. Methods and apparatus for thread level execution in non-kernel space
US11423580B2 (en) * 2020-10-12 2022-08-23 Arm Limited Decoding data arrays
CN112100121B (zh) * 2020-11-17 2021-02-12 北京壁仞科技开发有限公司 计算装置、计算设备以及可编程调度方法
TWI767644B (zh) * 2021-04-01 2022-06-11 劉玉堂 透過設定資料結構與自動生成應用程式介面服務資訊的系統
EP4167143A1 (en) 2021-10-15 2023-04-19 Electronics and Telecommunications Research Institute Resource resettable deep neural network accelerator, system, and method

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7610466B2 (en) 2003-09-05 2009-10-27 Freescale Semiconductor, Inc. Data processing system using independent memory and register operand size specifiers and method thereof
US7447868B2 (en) * 2005-06-15 2008-11-04 International Business Machines Corporation Using vector processors to accelerate cache lookups
US8635415B2 (en) * 2009-09-30 2014-01-21 Intel Corporation Managing and implementing metadata in central processing unit using register extensions
US10203958B2 (en) * 2013-07-15 2019-02-12 Texas Instruments Incorporated Streaming engine with stream metadata saving for context switching
GB2549511B (en) * 2016-04-20 2019-02-13 Advanced Risc Mach Ltd An apparatus and method for performing operations on capability metadata
US20170337156A1 (en) 2016-04-26 2017-11-23 Onnivation Llc Computing machine architecture for matrix and array processing
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US11023382B2 (en) 2017-12-22 2021-06-01 Intel Corporation Systems, methods, and apparatuses utilizing CPU storage with a memory reference

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115098271A (zh) * 2022-08-25 2022-09-23 北京医百科技有限公司 一种多线程数据处理方法、装置、设备及介质

Also Published As

Publication number Publication date
WO2021023954A1 (en) 2021-02-11
EP3912027A1 (en) 2021-11-24
US11068268B2 (en) 2021-07-20
IL285610B1 (en) 2024-01-01
TW202107276A (zh) 2021-02-16
IL285610B2 (en) 2024-05-01
IL285610A (en) 2021-09-30
KR20220038581A (ko) 2022-03-29
JP2022543331A (ja) 2022-10-12
EP3912027B1 (en) 2022-11-30
US20210042115A1 (en) 2021-02-11
JP7465887B2 (ja) 2024-04-11

Similar Documents

Publication Publication Date Title
JP7465887B2 (ja) データ構造処理
Mittal et al. A survey of architectural approaches for data compression in cache and main memory systems
US7984273B2 (en) System and method for using a mask register to track progress of gathering elements from memory
TWI529626B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI512466B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
TWI525437B (zh) 在複數執行緒處理單元中的效率式記憶體虛擬化
KR102434170B1 (ko) 하이브리드 메모리 시스템
KR102443600B1 (ko) 하이브리드 메모리 시스템
CN112035397B (zh) 包括fpga的电子系统及其操作方法
US9798543B2 (en) Fast mapping table register file allocation algorithm for SIMT processors
JP7445431B2 (ja) 命令の実行を制御する装置および方法
CN115904501A (zh) 具有在每个维度上可选择的多维循环寻址的流引擎
EP3974966A1 (en) Large scale matrix restructuring and matrix-scalar operations
KR102443593B1 (ko) 하이브리드 메모리 시스템
US9442759B2 (en) Concurrent execution of independent streams in multi-channel time slice groups
US9928033B2 (en) Single-pass parallel prefix scan with dynamic look back
US20130332703A1 (en) Shared Register Pool For A Multithreaded Microprocessor
US11023382B2 (en) Systems, methods, and apparatuses utilizing CPU storage with a memory reference
Bae et al. Ssdstreamer: Specializing i/o stack for large-scale machine learning
CN111788552A (zh) 用于低等待时间硬件存储器的系统和方法
US20230393849A1 (en) Method and apparatus to expedite system services using processing-in-memory (pim)
KR102650569B1 (ko) 범용 연산 가속기 및 그것의 동작 방법
US20230289185A1 (en) Data processing apparatus, method and virtual machine
CN114746848A (zh) 用于存储装置的高速缓存架构
JP2501001B2 (ja) 仮想アドレス変換装置

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