CN111459548B - 双加载指令 - Google Patents
双加载指令 Download PDFInfo
- Publication number
- CN111459548B CN111459548B CN201910558284.9A CN201910558284A CN111459548B CN 111459548 B CN111459548 B CN 111459548B CN 201910558284 A CN201910558284 A CN 201910558284A CN 111459548 B CN111459548 B CN 111459548B
- Authority
- CN
- China
- Prior art keywords
- instruction
- load
- register
- address
- offset
- 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
Links
- 230000009977 dual effect Effects 0.000 title claims abstract description 72
- 238000013528 artificial neural network Methods 0.000 claims description 22
- 238000000034 method Methods 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 2
- 230000006870 function Effects 0.000 description 17
- 238000004422 calculation algorithm Methods 0.000 description 14
- 238000012545 processing Methods 0.000 description 9
- 230000004044 response Effects 0.000 description 6
- 238000013461 design Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- 230000009897 systematic effect Effects 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000012447 hatching Effects 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30141—Implementation provisions of register files, e.g. ports
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Abstract
一种处理器,包括执行单元、存储器和一个或多个寄存器文件。执行单元配置为执行来自指令集的机器代码指令的实例。在指令集中定义的指令类型包括双加载指令,该双加载指令用于从存储器加载至该一个或多个寄存器文件中的至少一个。执行单元配置为:当执行加载指令时,执行以固定步长跨步的第一加载操作和以可变步长跨步的第二加载操作,该可变步长在该一个或多个寄存器文件中的可变步长寄存器中指定。
Description
技术领域
本公开涉及一种响应于单一操作码(opcode)而执行两个加载操作的加载指令。
背景技术
对开发为特定应用而设计的处理器(例如图形处理器(GPU)及数字信号处理器(DSP))的兴趣正在上升。另一类最近受到关注的特定于应用的处理器是专用于机器智能应用的处理器,其被申请人命名为“IPU”(智能处理单元)。这些处理器可以被采用为例如加速器处理器,该加速器处理器布置为执行主机分配的工作,例如训练或帮助训练知识模型,例如神经网络,或者执行或帮助执行基于这种模型的预测或推断。
机器智能算法是基于对“知识模型”执行迭代更新,这可以由多个互连节点的图形表示。每个节点表示其输入的函数。一些节点接收对图形的输入,一些接收来自一个或多个其他节点的输入,而一些节点的输出形成其他节点的输入,一些节点的输出提供图形的输出(在一些情况下,给定节点甚至可能具有以下全部:对图形的输入、来自图形的输出和对其他节点的连接)。此外,由一个或多个相应参数(例如权重)对每个节点的函数进行参数化。在学习级期间,目标是基于经验输入数据集,找到各个参数的值,使得图形作为整体针对可能输入范围而生成期望的输出。用于这样做的各种算法在本领域中是已知的,例如基于随机梯度下降(stochastic gradient descent)的反向传播算法(back propagationalgorithm)。在基于输入数据的多次迭代中,逐渐调整参数以减少它们的误差,并且因此图形收敛于解(solution)。在随后的阶段,学习的模型然后可以用于对在给定的指定输入集的情况下对输出进行预测,或者在给定的指定输出集的情况下对输入(原因)进行推断。
处理器的指令集指的是基本类型的机器代码指令集,处理器的执行单元配置为执行该机器代码指令。每个机器代码指令包括操作数和采用相应零个或更多个操作数的零个或更多个操作数字段。指令集中的每种类型的机器代码指令的特征在于不同的相应操作码,该操作码在执行单元中触发不同逻辑,以在被执行时执行不同相应类型的操作。
一个定制处理器设计以使处理器适用于特定应用如机器智能的方法,是在处理器的指令集中提供一个或多个专用类型的指令,以执行倾向在相关应用中更常出现的类型的操作。例如,如果应用通常需要执行到特定类型的算术函数(例如矩阵乘法)(在其他情况下则需要以一系列更简单的机器代码指令(例如加法及标量乘法)建立),则特定于应用的处理器的新设计可以包括指令集中的指令,该指令可以响应于单一操作码及单一机器代码指令的单一实例的相关操作数而执行这个算术函数。
发明内容
在诸如机器智能的应用中处理数据时要应付的一个问题是稀疏性(sparsity)。即,在一些数据集中,可能只有相对少数的数据值包含有用或相关信息。为了有效地处理这种数据,从存储器仅加载这些值是期望的。然而,相关数据的模式实质上是随机的。要加载哪些数据值是由程序决定的。为了有效地做到这点,可以包括可编程的步长(stride),作为加载指令的隐含功能的一部分。即,随着每个加载指令,指令还将步长值施加于加载地址(通常在当前值的加载之后,即,因而后递增(post-increment)该地址以用于下一个加载指令)。可通过在处理器的可编程寄存器中设置,使该步长值变成可编程的。
另一方面,虽然有些数据可能是稀疏的,但是在相同应用中与稀疏数据一起使用的另一组值可能是有规律的(systematic)。即,程序需要加载来自存储器中一范围的连续地址的所有值(或者至少加载来自存储器地址空间中的规则间隔的值)。这点的一个示例在神经网络中发生,其中程序需要加载神经网络的权重(有规律的)和由神经网络用以操作的数据(通常是稀疏的)两者。
为了有效地处理这些数据,本文认为提供具有“半稀疏”寻址功能的类型的加载指令是期望的。即,加载指令以单一机器代码指令执行两个加载指令,每个具有不同性能。为了容纳第一有规律值组,例如权重,第一加载随着执行的指令的每个实例以固定步长系统性地递增第一加载地址;但为了容纳与第一值组一起处理的稀疏数据集,第二加载操作随着指令的每个实例以可编程步长值递增第二加载地址。
因此,根据本文公开的一方面,存在一种包括执行单元、存储器和一个或多个寄存器文件的处理器。执行单元配置为执行来自指令集的机器代码指令的实例。在指令集中定义的指令类型包括双加载指令,该双加载指令用于从存储器加载至该一个或多个寄存器文件中的至少一个。执行单元配置为:当执行加载指令时,执行以固定步长跨步(stride)的第一加载操作和以可变步长跨步的第二加载操作,该可变步长在该一个或多个寄存器文件中的可变步长寄存器中指定。
执行单元包括配置为执行加载操作的加载-存储单元。执行单元还包括逻辑单元,该逻辑单元可以包括整数算术单元和/或浮点算术单元。视乎实施例,步长可以由加载-存储单元或整数算术单元施加。
在实施例中,加载-存储单元可配置为在第一加载后施加固定步长,并且在第二加载后施加可变步长。即,随着执行的双加载指令的每个实例对地址进行后递增。然而,替代地,在其他实现方式中,不排除步长可以随着双加载指令的每个实例对地址进行预递增(pre-increment)。
在实施例中,双加载指令可采用指定操作数,该操作数指定存储器中用于第一加载的第一源地址、一个或多个寄存器文件其中一个中用于第一加载的第一目的地、存储器中用于第二加载的第二源地址,以及一个或多个寄存器文件其中一个中用于第二加载的第二目的地,第一源地址由一个或多个寄存器文件其中一个中的偏移寄存器中的第一偏移(offset)指定,并且第二源地址由一个或多个寄存器文件其中一个中的偏移寄存器中的第二偏移指定。在这情况下,执行单元配置为:当执行加载指令时,通过将第一值从第一源地址加载至第一目的地来执行第一加载操作,并将固定步长施加于第一偏移,以及通过将第二值从第二源地址加载至第二目的地来执行第二加载操作,并将可变步长施加于第二偏移。
优选地,偏移是相对于非零基地址的偏移。然而,替代地,在其他实现方式中,不排除它可以是从零开始的偏移,即,相关地址空间内的绝对地址。
视乎实施例,第一目的地和第二目的地可以是一个或多个寄存器文件其中一个中的第一寄存器和第二寄存器或不同的寄存器,或者可以是一个或多个寄存器文件其中一个中的相同目的地寄存器中的第一字段和第二字段。例如,在实施例中,用作加载的目的地的寄存器文件具有32位(bit)或64位字架构,而第一值和第二值中的每一个是16位值(例如16位浮点值),第一值被加载到32位寄存器或64位寄存器其中一个的第一字段中,第二值被加载到相同寄存器的第二字段中。
在实施例中,第一偏移和第二偏移可保持在一个或多个寄存器文件其中一个中的相同偏移寄存器的不同字段中,并且执行单元配置为通过分别向第一偏移和第二偏移增加固定步长和可变步长,然后写回到偏移寄存器,从而施加步长。替代地,在其他实现方式中,不排除第一偏移和第二偏移可以保持在相应的第一偏移寄存器和第二偏移寄存器中。
在实施例中,所述偏移寄存器可以由双加载指令的操作数指定。替代地,在其他实现方式中,偏移寄存器可以是隐含的;即,它不需要由操作数指定,例如而是由一个或多个其他较早的指令固定或设置为参数。
在实施例中,执行单元可配置为通过向非零基地址增加第一偏移来确定所述第一源地址,并通过向非零基地址增加第二偏移来确定所述第二目的地地址。例如,在实施例中,基地址可以是保持在32位寄存器中的21位值,而偏移值每个都是增加到32位基地址值的最低有效位(1east significant bit)的16位值。
在实施例中,第一源地址和第二源地址可以使用相同的基地址。或者,在其他实现方式中,不排除可以使用不同的相应基地址。
在实施例中,可以在一个或多个寄存器文件其中一个中的基地址寄存器中指定基地址。在实施例中,双加载指令可采用指定基地址的操作数。在替代实现方式中,不排除例如基地址可以是零,或者可以不是零,而是固定隐含值。
在实施例中,双加载指令可采用指定可变步长寄存器的操作数。替代地,在其他实现方式中,可变步长寄存器可以是隐含的。
在实施例中,可变步长寄存器可以布置为将多个步长值保持在可变步长寄存器的多个相应字段中,并且执行单元配置为通过随着由执行单元执行的双加载指令的每个连续实例使用步长值中的一个不同值来执行可变步长的变化。例如,在实施例中,每个字段是4位的,因此每个允许指定16个不同的可能步长值中的任何一个。在实施例中,步长寄存器是32位宽的,因此允许保持8个步长值。
在实施例中,执行单元可配置为通过随着双加载指令的每个连续实例将可变步长寄存器的内容移位一个字段的位来使用不同值。
在实施例中,执行单元往往可以使用最低有效字段(例如,四个最低有效位),而偏移是右移。例如,当每个字段是4位时,右移包括右移4个位。
然而,在其他替代实施例中,可使用其他改变步长的方式。例如,执行单元可配置为随着双加载指令的每个连续实例使用步长寄存器的不同字段和/或不同的连续步长寄存器。
执行单元可操作成通过执行较早的指令,将步长值加载到可变步长寄存器中,将第一偏移和第二偏移加载到偏移寄存器中,和/或将基地址加载到基地址寄存器中。
在实施例中,处理器可编程为执行包括神经网络的至少一部分的程序,该程序包括双加载指令的多个实例;其中在每个实例中,第一加载操作用于加载神经网络的权重,而第二加载操作用于加载由神经网络用以操作的数据。
根据本文公开的另一方面,提供了一种计算机程序,其体现在计算机可读存储介质上,并包括配置为由本文公开的任何实施例的处理器执行的代码,该代码包括双加载指令的多个实例。
根据本文公开的一方面,提供了一种操作包括执行单元、存储器和一个或多个寄存器文件的处理器的方法,该执行单元配置为执行来自指令集的机器代码指令的实例,其中:在指令集中定义的指令类型包括双加载指令,该双加载指令用于从存储器加载至一个或多个寄存器文件中的至少一个;并且该方法包括通过执行单元执行双加载指令的多个实例,执行单元配置为通过以下方式执行双加载指令的每个所述实例:随着双加载指令的每个连续实例执行以固定步长跨步的第一加载操作,并随着双加载指令的每个连续实例执行以可变步长跨步的第二加载操作,可变步长在一个或多个寄存器文件其中一个中的可变步长寄存器中指定。
在实施例中,方法可包括根据本文公开的任何处理器特征的操作。
附图说明
为了协助理解本公开的实施例和示出可以如何实现这些实施例,将参考附图作为示例,其中:
图1是处理器的示意框图,
图2是神经网络的示意图,
图3是处理器的另一个示意框图,
图4是寄存器文件中一些寄存器的示意图,和
图5示出了半稀疏加载指令的操作。
具体实施方式
图1示出了根据本公开实施例的包括至少一个处理器模块4的处理器的示例。在实施例中,处理器可包括多个这些处理器模块4或“瓦片(tile)”,其实现在相同芯片(chip)(即,管芯(die))上,并通过互连结构连接在一起,以便它们彼此通信。
处理器模块4包括处理单元10、一个或多个寄存器文件26,以及本地存储器11(即,在多瓦片阵列的情况下在同一瓦片上,或者在单一处理器芯片的情况下在同一芯片上)。存储器11包括指令存储器12和数据存储器22(其可以在不同的可寻址存储器单元或同一可寻址存储器单元的不同区域中实现)。指令存储器12存储包括将由处理单元10执行的机器代码指令的程序。数据存储器22存储将由执行的代码用以操作的数据和由执行的代码输出的数据(例如,作为这些操作的结果)。寄存器文件26中的寄存器与通用存储器的不同之处在于:寄存器地址被固定为指令字中的位,而存储器地址可以通过执行指令来计算。
执行流水线13包括获取级14、解码级16和执行级18,该执行级18包括执行单元,该执行单元可以执行算术和其他逻辑运算、地址计算、加载和存储操作,以及其他操作,如指令集架构所定义。注意,本文所引用的指令是指机器代码指令,即处理器指令集的基本指令之一的实例,由单一操作码和零个或更多个操作数组成。
获取级14从存储器12逐一获取程序的指令,并将它们传递到解码级16以进行解码。然后,解码级16将所解码的指令的指示(indication)连同指令中所指定的任何操作数寄存器的解码寄存器地址(即,寄存器文件26中的地址)一起传递给执行单元18,从而执行指令。执行单元18能够访问寄存器文件26中的操作数和控制状态寄存器,可使用它们基于解码寄存器地址执行指令。在实施例中,寄存器文件26可包括用于存储至少包括存储器地址的整数的第一或主要寄存器文件(MRF),以及用于存储浮点值(例如f16和/或f32)的第二或辅助寄存器文件(ARF)。
当执行单元18执行特定类型的指令,它可使用一个或多个寄存器文件26中的至少一个中的一个或多个寄存器,视乎指令的类型。例如,处理器的指令集将包括至少一个类型的加载指令,并在一些实施例中包括多个不同类型的加载指令。加载指令采用用于指定存储器22中的源地址的至少一个操作数,以及用于指定至少一个寄存器文件26中的一个或多个目的地寄存器的至少一个操作数。当执行时,它将来自存储器22中的源地址的值加载到寄存器文件26(例如ARF)中的特定寄存器中。一些类型的加载指令通过保持在其中一个寄存器文件26(例如MRF)中的另一个寄存器中的指针(pointer)来指定源地址,该指针指向存储器22中的源地址。在这情况下,加载的源操作数通过指定要从中获取源地址的MRF中的寄存器,间接地指定源存储器地址。指针可以由其他先前执行的指令实例预加载到MRF中。例如,在一些实施例中,这可以另一个较“基本”类型的加载指令做到,该类型的加载指令采用立即源地址操作数。或者,在其他实施例中,加载不采用立即源操作数,该立即值可以由其他指示中的立即数(immediate)形成,并存储在寄存器中以用于随后的加载指令,然后用作地址寄存器。注意,一般而言,不需要以与任何其他数据不同的方式对待指针。内容恰好是地址,而不是整数或浮点值。因此,在一些实施例中,指令集事实上不包括任何将完整绝对地址采用为立即数的加载指令(但包括用于将立即值复制到寄存器中的指令)。
处理器指令集还包括多个算术指令,通过包括整数算术指令和浮点算术指令两者。算术指令采用一个或多个源操作数和至少一个目的地操作数,指定至少一个寄存器文件26(例如ARF)中的源寄存器和目的地寄存器。当执行时,算术操作将以保持在源寄存器中的值执行其相应类型的算术操作,并将结果放置于指定的目的地寄存器中。例如,加法指令可以采用两个源操作数和一个目的地操作数,并将在源寄存器中找到的值加起来,并将所得的总和(sum)放置于目的地寄存器中。指令集还可包括各种其他更复杂的类型的算术操作,例如用于执行矩阵乘法或卷积(convolution)(或其一部分)。例如,这些类型的指令可以在机器学习中有特定的应用,其中可能期望让程序使用输入数据集有效地卷积权重的矩阵(内核(kernel))。
处理器的指令集还包括至少一个类型的存储指令。存储指令采用用于指定至少一个寄存器文件26(例如ARF)中的至少一个源和存储器22中的至少一个目的地的操作数。当执行时,存储指令将在指定的源寄存器中找到的值存储到存储器22中指定的存储器地址。一些类型的存储指令通过保持在其中一个寄存器文件26(例如MRF)中的另一个寄存器中的指针来指定目的地地址,该指针指向存储器22中的目的地地址。在这情况下,存储的目的地操作数通过指定要从中获取目的地地址的MRF中的寄存器,间接地指定目的地存储器地址。加载-存储指令也是已知的,其以单一指令执行存储和加载两者。
在实施例中,处理单元10可采用多线程处理单元的形式,有时也称为桶形线程处理单元,其能够并发地执行时间上交错的多个线程。在这情况下,存储器12存储程序的多个不同线程,每个线程包括用于执行特定任务的相应一系列指令。获取级12布置为逐一从并发线程组中的不同线程获取指令,并使它们在流水线13中交错。每个并发线程分配有至少一个相应寄存器文件26,用于保持该相应线程的程序状态(即,上下文)与其他并发线程分隔开。有时,每个线程的寄存器称为其上下文寄存器。当执行给定线程时,执行单元18固有地使用相应线程的寄存器文件26,从而获得该线程的指令,例如加载指令、算术指令和存储指令。在实施例中,每个线程的上下文提供有其自己单独的相应MRF和ARF,并且当执行单元18执行给定线程时,它固有地根据操作数的类型而使用相应线程的相应MRF或ARF。
在所公开的处理器的一个示例性应用中,处理器模块4上运行的程序可以实现神经网络100的至少一部分,其概念在图2中作为示例示出。
神经网络包括互连节点(即顶点)102和边缘(即连接)104的图形。图形中的每个节点102具有一个或多个输入边缘和一个或多个输出边缘。一些节点102的一些输入边缘是一些其他节点的输出边缘,从而将节点连接在一起以形成图形。此外,一个或多个节点102的一个或多个输入边缘作为整体形成对图形的输入,而一个或多个节点102的一个或多个输出边缘作为整体形成图形的输出。有时,给定的节点甚至可能具有以下所有这些:对图形的输入、图形的输出和对其他节点的连接。每个边缘104传送值或更常传送张量(n维矩阵),这些值分别形成在其输入边缘和输出边缘上提供给节点102和从节点102提供的输入和输出。
每个节点102表示在其输入边缘上接收的一个或多个输入的函数,该函数的结果是在输出边缘上提供的输出。由一个或多个相应参数(有时称为权重,尽管它们不需要一定是乘法权重)对每个函数进行参数化。通常,由不同节点102表示的函数可以是不同形式的函数和/或可以通过不同参数来参数化。
此外,每个节点的函数的一个或多个参数中的每一个的特征在于相应的误差值。此外,相应的条件可以与每个节点102的参数中的误差相关联。对于表示由单一参数参数化的函数的节点102,条件可以是简单阈值,即如果误差在指定的阈值内,则满足条件,但如果误差超出阈值,则不满足条件。对于由多于一个相应参数参数化的节点102,对于该节点102达到了可接受的误差水平的条件可能更复杂。例如,仅当该节点102的每个参数都落入相应阈值内时,才可以满足条件。作为另一示例,可以组合相同节点102的不同参数的误差来定义组合度量,并且在组合度量的值落入指定阈值的条件下可以满足条件,但是如果组成度量值超出阈值,则不满足条件(或者反之亦然,取决于度量的定义)。无论条件如何,这都给出了节点的参数中的误差是否低于某一可接受程度或水平的度量。通常,可以使用任何合适的度量。条件或度量对于所有节点可以是相同的,或者对于不同的相应节点可以是不同。
在学习级中,算法接收经验数据,即,表示对图形的输入的不同可能组合的多个数据点。随着接收到越来越多的经验,算法基于经验数据逐渐调整图形中各节点102的参数,以试图最小化参数中的误差。目标是找到参数的值,使得图形的输出尽可能接近给定输入的期望输出。由于图形作为整体倾向于这种状态,因此图形会被形容为收敛。在适当程度的收敛之后,图形可以用于执行预测或推断,即预测某些给定输入的结果或推断某些给定输出的原因。
学习级可以采用多种不同的形式。例如,在监督方法中,输入经验数据采用训练数据的形式,即与已知输出相应的输入。对于每个数据点,算法可以调整参数,使得输出更接近地匹配给定输入的已知输出。在随后的预测级中,图形然后可以用于将输入查询映射到近似预测输出(或者如果进行推断,则反之亦然)。其他方法也是可能的。例如,在无监督的方法中,不存在每个输入数据的参考结果的概念,而是改为将机器智能算法留下来在输出数据中识别其自己的结构。或者在强化方法中,算法针对输入经验数据中的每个数据点试验至少一个可能的输出,并且被告知该输出是正还是负(以及潜在地它是正还是负的程度),例如赢或输、奖励或惩罚等等。在许多试验中,算法可以逐渐调整图形的参数,以便能够预测将导致正结果的输入。用于学习图形的各种方法和算法对于机器学习领域的技术人员来说是已知的。
在实施例中,其中处理单元10是多线程处理器模块,每个线程可用于实现神经网络的不同的相应节点102。和/或,在处理器包括多个瓦片而每个瓦片是所述处理器模块4的实例的实施例中,每个瓦片4可用于实现包括一个或多个节点102的子集的神经网络的相应部分。相应地,线程和/或瓦片之间的通信表示神经网络中节点102之间的边缘104。程序作为整体在多个线程和/或瓦片4上运行,可实现包括神经网络的机器智能算法和配置为训练神经网络的训练算法,和/或推断或预测算法来基于神经网络执行推断或预测。
图3示出了根据本文公开的实施例的处理器模块10的更多细节。如图所示,执行单元18包括用于执行加载和存储指令的加载-存储单元(LSU)55,以及用于执行算术指令的逻辑单元58。逻辑单元58可包括用于执行整数算术指令的整数算术逻辑单元(IALU),和/或用于执行浮点算术指令的浮点单元(FPU)。
在给定的应用中,存储器22可用于存储至少三种内容:a)指针(由图中的斜剖面线所示),b)有规律值(交叉剖面线),以及稀疏数据(遍布圆点)。指针是存储器地址或地址偏移或差量(delta),其被加载到至少一个寄存器文件26(例如MRF)中的寄存器中,被其他加载指令用来指向存储器22中要加载的其他值/数据。可以通过先前提及的先前执行的指令将指针放置在寄存器文件26中。一旦完成这步,一个或多个其他类型的加载指令可以从由相对于保持在寄存器中的地址的步长(差量)或偏移定义的地址执行加载。这表示该其他类型的加载指令可以具有较高的语义密度(semantic density)。包括指令格式的所需加载地址的完整立即实例(如基本类型的加载指令那样)占用了源操作数字段中很多位。因此,如果这是不需要的,而其他类型的加载指令的源操作数只需要指定包含指针的较小寄存器地址以进行加载,则它可以容纳一个或多个额外的操作数,比仅单一基本加载操作支持更多功能。此外,软件数据结构呈现空间局部化(spatial locality),所以地址倾向与彼此非常相似。就能量而言,一直获取只相差少许位的指令(和其相关的立即数)是低效的。
本文公开的跨步、高语义密度的加载指令的示例是即将更详尽讨论的双加载指令(也称为半稀疏加载指令)。
有规律值是程序用以操作的值,其中程序将要求从遍布存储器22的区域的一系列存储器地址中的系统性位置加载,即,从每个连续地址或至少从地址空间中的规律间隔加载。神经网络中的权重就是这方面的一个示例。下面描述将有规律值示为权重,但应当理解,这不是限制性的,下文的教导也可应用于其他类型的系统性值。另一方面,稀疏数据是也是由程序用以操作的数据,其中程序仅要求从以没有规律的方式(即,没有规律间隔)分隔的特定所选位置加载。换句话说,只有一些数据包含有用或相关信息。例如,很多数据可能被量化为零,并且仅需要非零数据项;或者作为另一示例,程序可能希望以伪随机(pseudorandom)模式丢弃(drop-out)一些值。这些数据项的存储位置实际上是任意的,它们不遵循有规律的模式,并且在任何给定程序中可以在数据中的任何地方出现。
程序可以请求同时加载来自稀疏数据的所选项和有规律值,例如同时用它们操作。例如,可能需要仅以来自稀疏数据项的所选项减小有规律权重组。例如,在神经网络的情况下,权重通常稠密地堆积,而来自其他神经元的动作(actuation)可能是稀疏地堆积的。
视乎应用,由程序确定它需要加载什么数据。然而,为了允许程序有效地处理存储器内容,本文认为期望在处理器的指令集中提供一种指令,该指令以具有“半稀疏”加载功能的单一指令执行两次加载。即,其中一个加载操作随着执行的加载指令的每个实例以固定步长跨步,而另一次加载随着加载指令的每个实例以可变步长跨步。这类型的加载指令在本文可以称为双加载或半稀疏加载指令,或在一些实施例中称为“ldb16b16”。在实施例中,其语义如下。
ldb16b16$aDst0:Dst0+1,$mBase0,$mOffset++,$mDelta>>
作为示例性实现方式表示,“$m”指MRF中的寄存器(用于存储器地址),“$a”指ARF中的寄存器(用于浮点值)。
如上面的语义表示,双加载指令采用至少一个目的地操作数,该操作数指定在至少一个寄存器文件26(例如ARF)中分别用于第一加载操作和第二加载操作的第一目的地和第二目的地。在实施例中,其中一个寄存器文件26(例如ARF)中有两个单独的目的地寄存器:$aDst0和$aDst0+1,例如邻近的寄存器。在实施例中,这需要单一操作数识别其中一个寄存器文件26中的其中一个寄存器(例如第一$aDst0),而另一个的位置被执行单元18理解为固有地与其相关,例如作为先前或下一个邻近的寄存器$aDt0+1(所谓自然地对准的寄存器)o替代地,在另一实现方式中,不排除第一目的地和第二目的地可以是同一寄存器中的第一字段和第二字段(其中只需要单一目的地操作数来识别该寄存器)。不论哪种方式,在实施例中,双加载指令加载16位值对(二元素向量),例如f16(半精度浮点值)。这可以用于加载一个16位权重,以及来自稀疏数据集的一个16位数据值,例如两个都是f16。
助记符(mnemonic)“1db16b16”指在实施例中,执行的第一加载操作和第二加载操作是16位广播(broadcast)加载。在这上下文中的“广播”指复制标量值,使得它完全占据向量,其中每个向量元素是标量值的拷贝(copy)。1db16b16中的“b”指示两个加载的16位标量值要被广播。在实施例中,这些值各自被复制以占据16位元素的2元素向量。即,第一目的地寄存器和第二目的地寄存器(例如$Dst0和$Dst0+1)是32位宽寄存器;由第一加载操作加载的16位权重被复制以填满第一目的地寄存器(例如$Dst0)的32位,并且第二加载操作的16位数据值被复制以填满第二目的地寄存器(例如$Dst0+1)。这样做的原因是,在至少一个实现方式中,寄存器文件26和ARF流水线可以在最少32位上操作。在16位值的情况下,最小基准是2元素向量(f16v2)。广播确保相同输入值呈现给这两个16位半流水线。复制表示任何例外仅可以是16位输入操作数异常(而例如如果将0呈现给其中一个半流水线,则可能导致非由输入操作数所致的异常)。
双加载指令还采用一个或多个操作数,该一个或多个操作数指定从中分别通过第一加载操作和第二加载操作加载的存储器22中的第一源地址和第二源地址。在实施例中,这些通过在至少一个寄存器文件26中识别一个或多个寄存器来指定,其中在它们之间保持用于确定存储器22中的第一源地址和第二源地址的值。为了做到这点,在实施例中,双加载指令采用识别其中一个寄存器文件26(例如MRF)中的基地址寄存器$mBase的一个源操作数,以及识别其中一个寄存器文件26中的偏移寄存器$mOffset的另一源操作数。基地址寄存器$mBase布置为保持基存储器地址,即基指针(已经由另一指令较早的实例预加载于那里,例如另一种加载指令或形成常数的指令或形成基地址的一些整数运算)。这基地址是第一加载操作和第二加载操作的共同基地址。偏移寄存器$mOffset布置为分别在$mOffset寄存器的第一相应字段和第二相应字段中保持第一加载和第二加载的第一地址偏移值和第二地址偏移值,同样已经由较早执行的指令先前放置在那里。或者,在替代实施例中,视乎偏移尺寸和寄存器架构,两个单独的第一寄存器和第二寄存器可用于保持第一偏移和第二偏移(例如,偏移操作数仅识别其中一个,而另一个的位置固有地与其相关,例如相同寄存器文件中的邻近寄存器)。无论是哪种方式,上面的语义表达中的“++”表示偏移寄存器中的偏移值随着执行的双加载指令的每个实例以步长值自动地递增:第一个以固定步长值递增,第二个以可编程差量递增。
双加载指令还采用至少一个操作数,该至少一个操作数指定第二加载操作的步长值,即随着执行的双加载指令的每个实例施加于偏移寄存器$mOffset中的第二偏移的地址差量。在实施例中,这仅需要单一操作数。在实施例中,操作数通过识别其中一个寄存器文件26(例如MRF)中的差量寄存器$mDelta来指定差量,已经由较早执行的指令先前放置在那里。差量寄存器$mDelta布置为保持至少一个差量值,以及在实施例中保持差量寄存器的多个相应字段(例如4位字段)中的多个差量。双加载指令的功能是随着执行的双加载指令的每个连续实例使用不同的差量值。在实施例中,这通过每次将寄存器的内容右移一字段的位(例如4位)并经常使用当前差量(即,步长)的最不显著字段(例如最低有效4位)来实现。这是上面的表达中“>>”所表示的意思。
如图4所示,在实施例中,基地址寄存器$mBase(在MRF中)是32位宽的,而基地址(base_addr)是占据基地址寄存器的21个最低有效位的21位指针。在实施例中,偏移寄存器$mOffset(在MRF中)是32位宽的。偏移寄存器$mOffset的第一16位字段(例如最高有效16位$mOffset[31:16])用于保持16位偏移值(woffset)以用于第一加载操作(用于权重);并且,偏移寄存器$mOffset的第二16位字段(例如最低有效16位$mOffset[15:0]用于保持16位偏移值(doffset)以用于第二加载操作(用于来自稀疏数据的数据值)。在实施例中,差量寄存器$mDelta(在MRF中)是32位宽的,并其中的每个差量字段是4位的,总共提供8个字段以用于存储8个可独立地设置的4位步长,每个能够采用16个不同的可能值中的任何一个。
图5示出了当由执行单元18执行时双加载指令的操作(执行单元18包括适合地配置的逻辑以响应于双加载指令的操作码而执行这功能)。当执行双加载指令的实例时,第一加载操作将存储器22中的第一源地址中找到的值加载至其中一个寄存器文件26(例如ARF)中的第一目的地寄存器(例如$aDst0)。在实施例中,第一源地址的值是基地址(base_addr)加上第一偏移值。在实施例中,第一源地址取自基地址寄存器$mBase,而第一偏移(woffset)取自偏移寄存器$mOffset的第一字段,例如$mOffset[31:16]。即,第一加载操作从$mBase+$mOffset[31:16]加载至$Dst0中。
还响应于双加载指令的相同实例的相同操作码而执行第二加载操作。第二加载操作将存储器22中的第二源地址中找到的值加载到其中一个寄存器文件26(例如ARF)中的第二目的地寄存器(例如$aDst0+1)。在实施例中,第二源地址的值是基地址(base_addr)加第二偏移值。在实施例中,第二源地址取自基地址寄存器$mBase,并且第二偏移(doffset)取自偏移寄存器$mOffset的第二字段,例如$mOffset[15:0]。即,第二加载操作从$mBase+$mOffset[15:0]加载至$Dst0+1中。
随着执行的双加载指令的每个连续实例,以固定的差量自动地递增第一源地址,例如地址空间的一个单位(原子)(例如,用于跨步的一个单位是2字节,见下文)。在实施例中,这通过将一个单位加到偏移寄存器$mOffset的第一字段中的值来实现。另外,以可编程差量自动地递增第二源地址。在实施例中,这通过将可编程差量加到偏移寄存器$mOffset的第二字段中的值来实现。在实施例中,可编程差量取自差量寄存器$mDelta的其中一个字段。这差量值表示要向第二偏移增加的单位(原子)数量(例如单元数量是2字节)。另外,随着执行的双加载指令的每个连续实例,使用差量寄存器$mDelta中的多个差量值中的不同一个。在实施例中,这通过经常使用差量寄存器$mDelta的最低有效字段(例如最低有效4位),然后随着双加载指令的每个实例将这寄存器的内容右移一字段(例如4位)来实现。等同的变型将经常使用最高有效字段(例如最高有效4位),并随着每个指令左移。注意在二进制逻辑的上下文中,“左”和“右”指位有效值(bit significance),而不是物理定向。
响应于双加载指令的操作码,自动地将两个步长施加于其相应的地址,即,作为执行双加载指令的相同单一实例的固有部分。将步长施加于偏移不需要单独的机器代码指令(虽然最初可能需要它们将基地址、偏移和步长差量加载到基地址寄存器$mBase、偏移寄存器$mOffset和差量寄存器$mDelta中)。
在实施例中,每个被加载的值(即,权重和数据值)是16位值。因此,用于本发明目的的步长或差量的一个单位(原子尺寸)是2字节。因此,随着双加载指令的每个实例,第一源地址(用于权重)以2字节的一个单位递增,而第二源地址(用于数据)以等于差量寄存器中的值(“差量”)加1乘以2字节的数目递增;即,差量+1批2字节的单位。注意,当差量=0,这对应于1单位的步长(2字节);并且当差量=1,这对应于2单位的步长(4字节)等。这是因为对于大多数应用而言,零的步长没有用。然而,不排除在一些替代实现方式中,可编程步长的不同可能值的其中一个提供了能够选择零步长的选项,即,允许两个加载操作之一从一个实例到下一个实例具有静态地址。
在实施例中,第一加载和第二加载以其相应的步长后递增。即,随着执行的双加载指令的每个实例,在该实例的第一加载操作后施加该实例的第一固定步长;并在该实例的第二加载操作后施加相同实例的第二可变步长(虽然第一加载相对于第二加载、第一步长相对于第二步长、第一步长相对于第二加载以及第二步长相对于第一加载的相对次序不一定重要)。然而,在其他替代实现方式中,不排除第一加载和第二加载可以在执行双加载指令时以其相应的步长预递增。
数学地,所述功能可以如下表达。
base_addr=$mBase[20:0]//从基寄存器读取基地址
woffset=$mOffset[31:16]//从偏移寄存器的第一字段读取权重偏移
doffset=$mOffset[15:0]//从偏移寄存器的第二字段读取数据偏移
delta=$mDelta[3:0]//从差量寄存器的4个最低有效位读取步长
EA[0]=base_addr+woffset//向基地址增加权重地址偏移
EA[1]=base_addr+doffset//向基地址增加数据地址偏移
woffset+=2//以2字节递增权重地址偏移
mdelta=(delta+1)*2//以字节计算步长
doffset+=mdelta//以步长递增数据地址偏移
$mOffset:=(woffset<<16)|doffset//将递增的偏移写回偏移寄存器
$mDelta:=$mDelta>>4//将步长差量右移4位以获得下一个步长
第一加载操作和第二加载操作由执行单元18的加载-存储单元(LSU)55响应于双加载指令的操作码而执行。在实施例中,步长的计算和施加也可以由LSU执行;或者,在其他实施例中,一些或所有这种功能可以通过重用执行单元18的另一单元58(例如整数算术逻辑单元IALU)来实现。
应当理解,仅通过示例方式描述了上述实施例。
例如,上面提供的确实语义不一定是限制性的,本领域技术人员可能找到其他方法将相同或类似的潜在功能编码到单一机器代码指令中。例如,一个或多个操作数可以是立即操作数而不是参考寄存器(例如$mBase、$mOffset或$mDelta)中保持的值而指定其相应信息的操作数(“立即”是指令集架构的上下文的术语,意思是通过作为数字直接编码到操作数字段中而不是参考寄存器来指定信息)。
替代地或附加地,可能不需要一个或多个操作数,而它们指定的信息可以是隐含的(“隐含”是指令集架构的上下文中的领域术语,意思是相关信息不一定在操作数中指定,因为它自动地被假设为这样)。例如,步长寄存器$mDelta的身份可以是隐含的。
在其他变型中,可以提供更多操作数字段,例如指令中可以提供两个目的地操作数字段,允许独立地指定第一目的地寄存器和第二目的地寄存器。这种设计考虑可以视乎例如预期应用的功能量,以及处理器架构的指令位宽。
在其他示例性变型中,第一偏移和第二偏移可以是绝对地址而不是相对于基准的,即偏移在地址空间中相对于0,因此不需要基地址操作数。此外,本文引用的偏移或差量概念(包括其被描述为“增加”或“递增”等的情况)不应被解读为排除增加负值。即,等同地,随着双加载指令的每个实例,可以从基地址减去偏移的数值,和/或从第二偏移减去步长(差量)的数值(从而通过存储器地址逆向操作,从较高的值开始,然后减少至较低的值)。
另外,注意上述各种寄存器和值的架构位宽和尺寸不是限制性的,并且再次可以视乎设计处理器的设计考虑和预期应用等在其他实现方式中不同。
另外,本公开的范围不限于神经网络或机器学习中的应用,本文的教导可以更一般地用于任何需要同时加载和处理一些有规律值与来自稀疏数据集的其他所选值的任何应用中。此外,本公开的范围不限于多线程或多瓦片架构。可在可用于加载和处理有规律数据和稀疏数据的任何设计的处理器上使用本技术。
一旦给出了本文的公开内容,所公开的技术的其他变型或用例对本领域技术人员而言可变得显而易见。本公开的范围不受所描述的实施例限制,而是仅受所附权利要求限制。
Claims (15)
1.一种处理器,包括执行单元、存储器和一个或多个寄存器文件,所述执行单元配置为执行来自指令集的机器代码指令的实例,其中:
在指令集中定义的指令类型包括双加载指令,所述双加载指令用于从存储器加载至所述一个或多个寄存器文件中的至少一个;和
所述执行单元配置为:当双加载指令的每个所述实例被执行时,执行第一加载操作以从存储器中的第一地址加载数据,以及执行第二加载操作以从存储器中的第二地址加载数据;
其中,为了执行第一加载操作,第一地址随着双加载指令的每个连续实例而递增固定步长,使得用于第一加载操作的第一地址相差双加载指令的相应实例与双加载指令的先前实例或后续实例中的至少一个之间的固定步长;
并且为了执行第二加载操作,第二地址随着双加载指令的每个连续实例而递增可变步长,使得用于第二加载操作的第二地址相差双加载指令的相应实例与双加载指令的先前实例或后续实例中的至少一个之间的相应可变步长,所述可变步长在所述一个或多个寄存器文件其中一个中的可变步长寄存器中指定。
2.如权利要求1所述的处理器,其中:
所述双加载指令采用操作数,所述操作数指定存储器中用于第一加载的第一源地址、所述一个或多个寄存器文件其中一个中用于第一加载的第一目的地、存储器中用于第二加载的第二源地址,以及所述一个或多个寄存器文件其中一个中用于第二加载的第二目的地,所述第一源地址由所述一个或多个寄存器文件其中一个中的偏移寄存器中的第一偏移指定,并且所述第二源地址由所述一个或多个寄存器文件其中一个中的偏移寄存器中的第二偏移指定;和
所述执行单元配置为:当执行加载指令时,通过将第一值从第一源地址加载至第一目的地来执行第一加载操作,并将固定步长施加于第一偏移,以及通过将第二值从第二源地址加载至第二目的地来执行第二加载操作,并将可变步长施加于第二偏移。
3.如权利要求2所述的处理器,其中所述第一偏移和所述第二偏移保持在所述一个或多个寄存器文件其中一个中的相同偏移寄存器的不同字段中,并且所述执行单元配置为通过分别向第一偏移和第二偏移增加固定步长和可变步长,然后写回到偏移寄存器,从而施加步长。
4.如权利要求3所述的处理器,其中所述偏移寄存器由双加载指令的操作数指定。
5.如权利要求2所述的处理器,其中所述执行单元配置为通过向非零基地址增加第一偏移来确定所述第一源地址,并通过向非零基地址增加第二偏移来确定所述第二目的地地址。
6.如权利要求5所述的处理器,其中所述第一源地址和所述第二源地址使用相同的基地址。
7.如权利要求6所述的处理器,其中所述基地址在所述一个或多个寄存器文件其中一个中的基地址寄存器中指定。
8.如权利要求7所述的处理器,其中所述双加载指令采用指定基地址的操作数。
9.如权利要求1所述的处理器,其中所述双加载指令采用指定可变步长寄存器的操作数。
10.如权利要求1所述的处理器,其中所述可变步长寄存器布置为将多个步长值保持在可变步长寄存器的多个相应字段中,并且所述执行单元配置为通过随着由执行单元执行的双加载指令的每个连续实例使用步长值中的一个不同值来执行可变步长的变化。
11.如权利要求10所述的处理器,其中所述执行单元配置为通过随着双加载指令的每个连续实例将可变步长寄存器的内容移位一个字段的位来使用不同值。
12.如权利要求1所述的处理器,其编程为执行包括神经网络的至少一部分的程序,所述程序包括双加载指令的多个实例;其中在每个实例中,所述第一加载操作用于加载神经网络的权重,而所述第二加载操作用于加载由神经网络用以操作的数据。
13.如权利要求1所述的处理器,其中,所述执行单元被配置为对于所执行的双重加载指令的每个所述实例:
在第一加载操作的第一源地址后递增固定步长以供双加载指令的下一个实例使用;和
为第二加载操作的第二源地址后递增可变步长以供双加载指令的下一个实例使用。
14.一种存储有计算机程序的计算机可读存储介质,包括配置为由任何前述权利要求所述的处理器执行的代码,所述代码包括双加载指令的多个实例。
15.一种操作包括执行单元、存储器和一个或多个寄存器文件的处理器的方法,所述执行单元配置为执行来自指令集的机器代码指令的实例,其中:
在指令集中定义的指令类型包括双加载指令,所述双加载指令用于从存储器加载至所述一个或多个寄存器文件中的至少一个;和
所述方法包括通过执行单元执行双加载指令的多个实例,所述执行单元配置为当双加载指令的每个所述实例被执行时,执行第一加载操作以从存储器中的第一地址加载数据,以及执行第二加载操作以从存储器中的第二地址加载数据;
其中,为了执行第一加载操作,第一地址随着双加载指令的每个连续实例而递增固定步长,使得用于第一加载操作的第一地址相差双加载指令的相应实例与双加载指令的先前实例或后续实例中的至少一个之间的固定步长;
并且为了执行第二加载操作,第二地址随着双加载指令的每个连续实例而递增可变步长,使得用于第二加载操作的第二地址相差双加载指令的相应实例与双加载指令的先前实例或后续实例中的至少一个之间的相应可变步长,所述可变步长在所述一个或多个寄存器文件其中一个中的可变步长寄存器中指定。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1900848.1A GB2580664B (en) | 2019-01-22 | 2019-01-22 | Double load instruction |
GB1900848.1 | 2019-01-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111459548A CN111459548A (zh) | 2020-07-28 |
CN111459548B true CN111459548B (zh) | 2024-03-22 |
Family
ID=65656024
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910558284.9A Active CN111459548B (zh) | 2019-01-22 | 2019-06-25 | 双加载指令 |
Country Status (7)
Country | Link |
---|---|
US (1) | US11061679B2 (zh) |
JP (1) | JP6843187B2 (zh) |
CN (1) | CN111459548B (zh) |
CA (1) | CA3040894C (zh) |
DE (1) | DE102019112186A1 (zh) |
FR (1) | FR3091937B1 (zh) |
GB (1) | GB2580664B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220350613A1 (en) * | 2021-04-30 | 2022-11-03 | Oracle International Corporation | Processor Supporting Self-Relative Addressing Modes |
GB202112803D0 (en) * | 2021-09-08 | 2021-10-20 | Graphcore Ltd | Processing device using variable stride pattern |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102754069A (zh) * | 2010-02-18 | 2012-10-24 | 国际商业机器公司 | 加载/存储分离设施及其指令 |
CN103810125A (zh) * | 2012-11-12 | 2014-05-21 | 国际商业机器公司 | 有源存储器件聚集、分散和过滤 |
CN106951214A (zh) * | 2011-09-26 | 2017-07-14 | 英特尔公司 | 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑 |
CN108292224A (zh) * | 2015-12-30 | 2018-07-17 | 英特尔公司 | 用于聚合收集和跨步的系统、设备和方法 |
CN108369515A (zh) * | 2015-12-30 | 2018-08-03 | 英特尔公司 | 用于跨步加载的系统、设备和方法 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
IL139249A (en) | 1998-05-27 | 2005-08-31 | Advanced Risc Mach Ltd | Recirculating register file |
AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
US7275148B2 (en) * | 2003-09-08 | 2007-09-25 | Freescale Semiconductor, Inc. | Data processing system using multiple addressing modes for SIMD operations and method thereof |
US7487296B1 (en) * | 2004-02-19 | 2009-02-03 | Sun Microsystems, Inc. | Multi-stride prefetcher with a recurring prefetch table |
US8145877B2 (en) * | 2008-03-31 | 2012-03-27 | Xilinx, Inc. | Address generation for quadratic permutation polynomial interleaving |
US8458685B2 (en) * | 2009-06-12 | 2013-06-04 | Cray Inc. | Vector atomic memory operation vector update system and method |
US9619229B2 (en) * | 2012-12-27 | 2017-04-11 | Intel Corporation | Collapsing of multiple nested loops, methods and instructions |
US9582422B2 (en) * | 2014-12-24 | 2017-02-28 | Intel Corporation | Hardware prefetcher for indirect access patterns |
EP3286640A4 (en) * | 2015-04-24 | 2019-07-10 | Optimum Semiconductor Technologies, Inc. | COMPUTER PROCESSOR HAVING SEPARATE RECORDS FOR ADDRESSING A MEMORY |
US9875214B2 (en) * | 2015-07-31 | 2018-01-23 | Arm Limited | Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers |
US10108538B1 (en) | 2017-07-31 | 2018-10-23 | Google Llc | Accessing prologue and epilogue data |
US20190332924A1 (en) * | 2018-04-27 | 2019-10-31 | International Business Machines Corporation | Central scheduler and instruction dispatcher for a neural inference processor |
US10769070B2 (en) * | 2018-09-25 | 2020-09-08 | Arm Limited | Multiple stride prefetching |
GB2584268B (en) | 2018-12-31 | 2021-06-30 | Graphcore Ltd | Load-Store Instruction |
-
2019
- 2019-01-22 GB GB1900848.1A patent/GB2580664B/en active Active
- 2019-04-19 US US16/389,682 patent/US11061679B2/en active Active
- 2019-04-23 CA CA3040894A patent/CA3040894C/en active Active
- 2019-05-09 DE DE102019112186.8A patent/DE102019112186A1/de active Pending
- 2019-06-07 FR FR1906116A patent/FR3091937B1/fr active Active
- 2019-06-19 JP JP2019113331A patent/JP6843187B2/ja active Active
- 2019-06-25 CN CN201910558284.9A patent/CN111459548B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102754069A (zh) * | 2010-02-18 | 2012-10-24 | 国际商业机器公司 | 加载/存储分离设施及其指令 |
CN106951214A (zh) * | 2011-09-26 | 2017-07-14 | 英特尔公司 | 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑 |
CN103810125A (zh) * | 2012-11-12 | 2014-05-21 | 国际商业机器公司 | 有源存储器件聚集、分散和过滤 |
CN108292224A (zh) * | 2015-12-30 | 2018-07-17 | 英特尔公司 | 用于聚合收集和跨步的系统、设备和方法 |
CN108369515A (zh) * | 2015-12-30 | 2018-08-03 | 英特尔公司 | 用于跨步加载的系统、设备和方法 |
Also Published As
Publication number | Publication date |
---|---|
JP6843187B2 (ja) | 2021-03-17 |
GB2580664A (en) | 2020-07-29 |
US11061679B2 (en) | 2021-07-13 |
GB2580664B (en) | 2021-01-13 |
FR3091937A1 (fr) | 2020-07-24 |
FR3091937B1 (fr) | 2021-12-24 |
GB201900848D0 (en) | 2019-03-13 |
US20200233670A1 (en) | 2020-07-23 |
JP2020119490A (ja) | 2020-08-06 |
CA3040894C (en) | 2022-03-22 |
CN111459548A (zh) | 2020-07-28 |
DE102019112186A1 (de) | 2020-07-23 |
CA3040894A1 (en) | 2020-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3798928A1 (en) | Deep learning implementations using systolic arrays and fused operations | |
US20200394495A1 (en) | System and architecture of neural network accelerator | |
EP2569694B1 (en) | Conditional compare instruction | |
KR102413832B1 (ko) | 벡터 곱셈 덧셈 명령 | |
CN111381880B (zh) | 一种处理器、介质和处理器的操作方法 | |
CN117724763A (zh) | 用于矩阵操作加速器的指令的装置、方法和系统 | |
US8433883B2 (en) | Inclusive “OR” bit matrix compare resolution of vector update conflict masks | |
KR102379894B1 (ko) | 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법 | |
CN110235099B (zh) | 用于处理输入操作数值的装置和方法 | |
KR20180126520A (ko) | 벡터 술어 명령 | |
CN111459548B (zh) | 双加载指令 | |
US11907158B2 (en) | Vector processor with vector first and multiple lane configuration | |
CN114327362A (zh) | 大规模矩阵重构和矩阵-标量操作 | |
CN114691217A (zh) | 用于8位浮点矩阵点积指令的装置、方法和系统 | |
CN110998512B (zh) | 在数据处理设备中对连续值进行匹配 | |
US20220107805A1 (en) | Floating Point Number Format | |
CN117763269A (zh) | 基于多核cpu处理器的稠密线性方程组处理方法和装置 | |
WO2023148467A1 (en) | Technique for performing memory access operations | |
CN112862086A (zh) | 一种神经网络运算处理方法、装置及计算机可读介质 | |
WO2023165771A1 (en) | Machine code instruction | |
Mikhtonyuk et al. | Boolean function minimization based on Intel architecture |
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 |