CN114556311A - 具有多级多步的直接存储器存取架构 - Google Patents

具有多级多步的直接存储器存取架构 Download PDF

Info

Publication number
CN114556311A
CN114556311A CN202080071556.3A CN202080071556A CN114556311A CN 114556311 A CN114556311 A CN 114556311A CN 202080071556 A CN202080071556 A CN 202080071556A CN 114556311 A CN114556311 A CN 114556311A
Authority
CN
China
Prior art keywords
memory address
memory
dimension
tensor
request
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
CN202080071556.3A
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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of CN114556311A publication Critical patent/CN114556311A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Bus Control (AREA)
  • Memory System (AREA)
  • Complex Calculations (AREA)

Abstract

描述了能够执行多级多步并且并行地确定多个存储器地址的DMA架构。在一个方面,DMA系统包括一个或多个硬件DMA线程。每个DMA线程包括请求生成器,所述请求生成器被配置为在每个并行存储器地址计算周期期间并行地生成针对多维张量的m个存储器地址,并且针对每个地址生成对存储器系统执行存储器操作的相应请求。请求生成器包括m个存储器地址单元,每个存储器地址单元包括步长跟踪器,该步长跟踪器被配置为针对张量的每个维度生成针对该维度的相应步长索引值,并且基于相应步长索引值生成针对该维度的相应步幅偏移值。每个存储器地址单元包括存储器地址计算元件,该存储器地址计算元件被配置为生成针对张量元素的存储器地址并且发送执行存储器操作的请求。

Description

具有多级多步的直接存储器存取架构
背景技术
直接存储器存取(DMA)是使得设备或子系统能够独立于处理器访问存储器的能力。这使得处理器免于参与数据传输,使得处理器可用于执行其他操作。DMA可以被用来从处理器卸载昂贵的存储器操作,诸如大存储器传输操作和分散-聚集操作。
发明内容
本说明书描述了涉及DMA架构的技术,所述DMA架构能够例如在单个时钟周期期间,并行地执行多级多步并且确定多个存储器地址。
通常,本说明书中描述的主题的一个创新方面可以体现在包括一个或多个硬件DMA线程的直接存储器存取(DMA)系统中。每个DMA线程包括:请求生成器,所述请求生成器被配置为在每个并行存储器地址计算周期期间,(i)并行地生成针对多维张量的m个存储器地址,并且对于每个存储器地址,(ii)生成对存储器系统执行针对所述多维张量的存储器操作的相应请求。所述请求生成器包括m个存储器地址单元。每个存储器地址单元包括步长跟踪器,所述步长跟踪器被配置为针对所述多维张量的每个维度,生成(i)针对所述维度的相应步长索引值,以及基于所述相应步长索引值,生成(ii)针对所述维度的相应步幅偏移值;以及存储器地址计算元件,存储器地址计算元件被配置为:在每个并行存储器地址计算周期期间并且基于每个相应的步幅偏移值来生成针对所述多维张量的张量元素的存储器地址;以及将使用所述存储器地址执行所述存储器操作的请求传送到所述存储器系统,其中,m大于或等于1。该方面的其它实现方式包括对应的装置和方法。
这些和其他实现方式可以各自可选地包括以下特征中的一个或多个。在一些方面,所述请求生成器被配置为在单个时钟周期期间并行地生成所述存储器地址,并且在单个时钟周期期间执行每个并行存储器计算。在每个时钟周期期间,每个存储器地址单元的存储器地址计算元件生成针对与每个其他存储器地址单元的存储器地址计算元件相同或不同的张量元素的存储器地址。
在一些方面中,所述请求生成器被配置为针对所述多维张量接收描述符,所述描述符针对每个维度定义针对所述维度的步幅值的相应步长。所述请求生成器可以包括m个通道,每个通道包括相应的步长跟踪器和相应的存储器地址计算元件。每个通道的相应的步长跟踪器和相应的存储器地址计算元件与每个其他通道并行地计算对应的存储器地址。所述步长跟踪器可以被配置为基于循环嵌套来生成针对所述多维张量的存储器地址,所述循环嵌套针对所述多维张量的每个维度包括用于遍历所述多维张量的维度的相应循环。针对每个维度的每步幅步长值表示针对所述维度的相应循环的循环边界,以及针对每个维度的步长索引值表示针对所述维度的相应循环的循环索引。
在一些方面,每个步长跟踪器被配置为在每个时钟周期期间更新针对所述维度中的每个维度的步长索引值。针对每个步长跟踪器的步长索引值的组合可以不同于针对每个其它步长跟踪器的步长索引值的组合。每个步长跟踪器可以包括步长增量器链,所述步长增量器链包括多个步长增量器,每个步长增量器被配置为确定针对相应维度的维度存储器地址偏移值。与所述循环嵌套的最内循环相对应的步长增量器链的第一步长增量器可以被配置为接收提前量。在每个时钟周期期间更新针对所述维度中的一个或多个维度的步长索引值可以包括由所述第一步长增量器基于所述提前量更新针对所述一个或多个维度的步长索引值。
在一些方面,与所述最内循环被嵌套的循环相对应的步长增量器链的一个或多个第二步长增量器中的每一个被配置为从所述步长增量器链中的先前步长跟踪器接收回绕(wrap)量。在每个时钟周期期间更新针对所述维度中的一个或多个维度的步长索引值可以包括由所述第二步长增量器基于所述回绕量来更新针对所述一个或多个维度的步长索引值。
一些方面可以包括进度跟踪器,所述进度跟踪器包括响应重排序单元和同步单元。所述响应重排序单元可以被配置为针对每个张量维持是否执行针对所述张量元素的存储器操作的状态。所述同步单元可以被配置为向处理器内核提供多个部分更新,所述多个部分更新的每一个指定对所述多维张量的张量元素执行的存储器操作的总体状态。
在一些方面,每个请求包括唯一标识符。所述响应重排序单元可以被配置为以任何顺序从所述存储器系统接收响应。每个响应可以包括为其提供所述响应的请求的唯一标识符。响应重排序单元可以被配置为当在所述响应中接收到至少阈值数量的连续唯一标识符时,释放唯一标识符集以供所述请求生成器重新使用。
通常,本说明书中描述的主题的另一创新方面可以体现在包括一个或多个处理器内核、存储器系统和包括一个或多个DMA线程的DMA引擎的系统中。每个DMA线程可以包括请求生成器,所述请求生成器被配置为在每个并行存储器地址计算周期期间,(i)并行地生成针对多维张量的m个存储器地址,并且对于每个存储器地址,(ii)生成对存储器系统执行针对所述多维张量的存储器操作的相应请求,其中,所述请求生成器包括m个存储器地址单元,其中,m大于或等于1。每个存储器地址单元可以包括步长跟踪器,所述步长跟踪器被配置为针对所述多维张量的每个维度,生成(i)针对所述维度的相应步长索引值,以及基于所述相应步长索引值,生成(ii)针对所述维度的相应步幅偏移值;以及存储器地址计算元件,存储器地址计算元件被配置为:在每个并行存储器地址计算周期期间并且基于每个相应的步幅偏移值来生成针对所述多维张量的张量元素的存储器地址;以及将使用所述存储器地址执行所述存储器操作的请求传送到所述存储器系统。每个DMA线程可以包括进度跟踪器,所述进度跟踪器包括响应重排序单元和同步更新单元,所述同步更新单元被配置为向所述一个或多个处理器内核提供针对由所述DMA引擎管理的存储器操作的部分同步更新。该方面的其他实现方式包括对应的装置和方法。
这些和其他实现方式可以各自可选地包括以下特征中的一个或多个。在一些方面,请求生成器被配置为在单个时钟周期期间并行地生成所述存储器地址,并且在单个时钟周期期间执行每个并行存储器计算。
在每个时钟周期期间,每个存储器地址单元的存储器地址计算元件可以生成针对与每个其他存储器地址单元的存储器地址计算元件相同或不同的张量元素的存储器地址。所述请求生成器可以被配置为针对所述多维张量接收描述符,所述描述符针对每个维度定义针对所述维度的步幅值的相应步长。所述请求生成器可以包括m个通道,每个通道包括相应的步长跟踪器和相应的存储器地址计算元件,其中,每个通道的相应的步长跟踪器和相应的存储器地址计算元件与每个其他通道并行地计算对应的存储器地址。
通常,本说明书中描述的主题的另一创新方面可以体现在由DMA系统执行的方法中。该方法包括:由请求生成器在每个并行存储器地址计算周期期间,(i)并行地生成针对多维张量的m个存储器地址,并且对于每个存储器地址,(ii)生成对存储器系统执行针对所述多维张量的存储器操作的相应请求,其中,所述请求生成器包括m个存储器地址单元,其中,m大于或等于1,以及其中,每个存储器地址单元包括步长跟踪器和存储器地址计算单元;由每个存储器地址单元的步长跟踪器并且针对所述多维张量的每个维度,生成(i)针对所述维度的相应步长索引值,以及基于所述相应步长索引值,生成(ii)针对所述维度的相应步幅偏移值;以及由每个存储器地址单元的存储器地址计算元件并且在每个并行存储器地址计算周期期间,基于每个相应的步幅偏移值来生成针对所述多维张量的张量元素的存储器地址;以及将使用所述存储器地址执行所述存储器操作的请求传送到所述存储器系统。
本说明书中描述的主题可以在具体实施例中实现,以便实现以下优点中的一个或多个。本文档中描述的DMA架构使得能够例如每个时钟周期并行地生成针对多维张量的多(m)个存储器地址,这提供了更快的存储器地址生成和更高的存储器吞吐量。DMA架构可以包括多个通道,每个通道具有步长跟踪器,该步长跟踪器执行多步技术以基于针对多维张量的循环嵌套并行地计算针对张量元素的存储器地址。由DMA架构的请求生成器所使用的技术使得多个步长跟踪器能够使用针对张量的多个维度的不同步长索引值来并行操作,以在时钟周期期间并且独立于每一其他步长跟踪器并行地生成针对不同张量元素的地址。每个步长跟踪器可以在每个时钟周期期间更新其步长索引值,以准备确定针对其下一张量元素的存储器地址。
DMA架构还可以包括进度跟踪器,该进度跟踪器向处理器内核提供部分同步更新,该处理器内核将消耗存储在所确定的存储器地址处的存储器中的数据。这使得处理器内核能够在整个DMA存储器事务完成之前开始消耗数据,从而减少由存储器传输施加在处理器内核上的等待时间并且提高处理器计算的整体效率。进度跟踪器可以包括响应重排序单元,该响应重排序单元可以一次并且以任何顺序从存储器接收多个响应,该存储器可以乱序地处理和响应所生成的请求。由于响应重排序单元的大小是有限的,所以当已经接收到至少阈值数量的请求的响应时,响应重排序单元可以释放用于请求的标识符。这使得请求生成器能够使用所释放的标识符来继续发出存储器请求,而无需等待对所有最大数量的请求的响应,从而提高存储器传送的速度和效率。
下面参考附图描述前述主题的各种特征和优点。根据本文描述的主题和权利要求,其他特征和优点是显而易见的。
附图说明
图1是DMA线程生成并跟踪存储器操作的进度的示例环境的图。
图2A是示例请求生成器的图。
图2B描绘了用于确定存储器地址的示例伪代码。
图3是示例步长跟踪器的图。
图4是示例步长增量器链的图。
图5是示例进度跟踪器的图。
图6是示例响应重排序单元的图。
图7是图示用于生成对存储器操作的请求的示例过程的流程图。
图8是图示用于跟踪存储器操作的进度的示例过程的流程图。
在各个附图中,相同的附图标记和名称表示相同的元件。
具体实施方式
一般来说,本文档描述了能够例如在单个时钟周期期间和在单个时钟周期内并行地执行多级多步并且确定多个存储器地址的DMA架构。芯片可以包括从芯片的(一个或多个)处理器内核卸载存储器传送操作的一个或多个DMA引擎。每个DMA引擎可以包括一个或多个DMA线程。每个DMA线程是代表(一个或多个)内核管理DMA事务的执行的硬件单元。时钟周期可以是DMA引擎或内核执行一个操作所需的时间。
图1-6中所示并在下文描述的示例DMA架构提供了一种设计,该设计可以支持每个时钟周期多达四个张量维度以及多达四个源和四个目的地存储器地址。然而,DMA架构并不特别适用于每个周期仅四个维度或四个地址。类似的架构可以用于每个周期的其他数量的维度和地址。此外,每个周期的地址数量可以不同于将为其确定地址的张量的维度数量。例如,DMA线程可以包括五个通道以每个周期生成五个地址,而硬件被配置为计算具有多达四维度、多达10维度或另一最大数量维度的张量的地址。也就是说,架构是可参数化的,并且设置的选择取决于设计的面积/频率目标。
图1是DMA线程120生成并跟踪存储器操作的进度的示例环境100的图。DMA线程120可以生成并跟踪存储器操作的进度,作为代表处理器内核请求的事务的一部分。DMA线程120是可以作为DMA引擎的一部分的硬件单元,所述DMA引擎包括DMA线程120并且可选地包括一个或多个附加DMA线程。DMA线程120可以管理针对一个或多个处理器内核(包括内核110)的DMA事务,诸如分散-聚集和其他存储器传送操作。例如,DMA线程120可以编排在包括内核110和DMA线程120的芯片上的存储器系统的不同存储器之间的多维张量的传输。DMA线程120通过将请求(命令)发送到存储器系统中来编排数据移动,并跟踪这些请求的完成,使得它可以将进度与请求事务的内核同步。一旦读取/写入请求/命令处于存储器系统中,就可以独立地服务每个请求,而不考虑请求排序。DMA线程120处理请求/响应的排序以及与内核同步。将这些存储器操作卸载到DMA线程120为其他任务(例如,执行机器学习计算、整形张量等)释放了内核110上的计算周期。
内核110可以通过向DMA线程120发送描述符112来请求DMA事务。每个DMA事务可以包括一个或多个存储器传送操作。描述符112包括关于DMA事务的信息。例如,描述符112可以包括指定将从其读取数据的存储器系统150的源存储器152(例如,源存储器152的(一个或多个)存储器地址)、将向其写入数据的目的地存储器154(例如,目的地存储器154的(一个或多个)存储器地址)、将针对其的张量元素存储在源存储器152中的源张量的大小和形状(例如,维度),以及将针对其的张量元素存储在目的地存储器154中的目的地张量的大小和形状的信息。张量元素是张量中与张量中的特定索引位置相对应的一条数据。
源张量的大小和形状可以与目的地张量的大小和形状相同或不同。例如,如果张量由内核110重新成形,则大小和形状可以不同。描述符112可以使用针对张量的每个维度的每步幅步长值来定义每个张量的大小和形状。在for循环中,步长是循环的每次迭代的增量的大小,而每步幅步长是循环重置之前的总步数,例如,循环的循环界限。
例如,针对张量维度的每步幅步长可以等于该维度上的张量元素的数量。具体地,8×6×4×2四维张量可以具有针对第一维度为8的每步幅步长、针对第二维度为6的每步幅步长、针对第三维度为4的每步幅步长、以及针对第四维度为2的每步幅步长。如下文更详细所述,每步幅步长可以被用来遍历张量的每个维度并计算针对张量元素的存储器地址。
描述符112还可以包括针对每个维度的步幅维度偏移值。这些步幅维度偏移值(也被称为维度偏移值)用于确定针对张量元素的存储器地址,如下所述。维度偏移是步幅距离。在沿着张量维度的过程的每个步长处,DMA线程120使存储器地址“跳跃”步幅维度偏移值。对于源张量,描述符112可以包括针对源张量的每个维度的步幅维度偏移值。对于目的地张量,描述符112还可以包括针对目的地张量的每个维度的步幅维度偏移值。
DMA线程120包括存储描述符112的描述符队列122。例如,DMA线程120可以基于接收并存储在描述符队列122中的描述符112顺序地执行多个DMA线程。在一些实现方式中,描述符队列122是先进先出(FIFO)队列,使得DMA线程120以接收针对DMA事务的描述符112的顺序执行DMA事务。DMA事务的执行是完全流水线化的,并且可以以执行乱序操作的方式实现,但是对于处理器来说似乎是以程序顺序执行。
DMA线程120还包括描述符拆分器124。描述符拆分器124可以从描述符112中提取由源子线程130使用的信息和由目的地子线程140使用的信息,并且向每个子线程130和140提供适当的信息。
一般来说,源子线程130产生读取请求以从源存储器152读取数据,将读取请求发送到存储器系统150,跟踪读取操作的进度,并且使内核110与读取操作的进度同步。类似地,目的地线程140生成将数据写入目的地存储器154的写入请求,将写入请求发送到存储器系统150,跟踪写入操作的进度,并且使内核110与写入操作的进度同步。存储器系统150可以是针对内核110或针对包括内核110的芯片的主存储器,例如针对内核110或芯片的随机存取存储器(RAM)。存储器系统实现真正存储器互连,使得针对每个源存储器读取请求读取的数据与对目的地存储器的写入请求配对。数据从不通过DMA线程(请求地址被发出并且响应被接收,但是那些响应和请求不携带存储器数据)。
源子线程130包括基于描述符112生成读取请求的请求生成器132。如下文更详细所述,请求生成器132可以例如每个时钟周期并行地生成多个存储器地址,并且生成针对每个存储器地址的读取请求。例如,当请求生成器132遍历多维张量时,请求生成器132可以在内核110的单个时钟周期期间,为多个张量元素中的每一个生成相应的存储器地址。每个读取请求可以包括请求标识符“请求ID”、要从其读取数据的存储器地址、存储器操作码。请求ID可以是被用来将请求与响应相关联的序列号或标签,因为响应可以不按顺序接收,如下所述。存储器操作码指示存储器操作,例如,请求是针对读取、写入、存储器集还是针对以请求的存储器地址为目标的另一操作。
源子线程130还包括跟踪由读取请求指定的读取操作的进度的进度跟踪器134。例如,存储器系统150可以向进度跟踪器134发送对已经完成读取操作的信号的读取响应。每个读取响应可以包括正在发送对其响应的读取请求的请求ID。以这种方式,进度跟踪器134可以使用请求ID来跟踪DMA事务的进度。
目的地子线程140包括基于描述符112生成写入请求的请求生成器142。如下文更详细所述,请求生成器142可以例如每个时钟周期并行地生成多个存储器地址,并且生成针对每个存储器地址的写入请求。例如,当请求生成器142遍历多维张量时,请求生成器142可以在内核110的单个时钟周期期间为多个张量元素中的每一个生成相应的存储器地址。每个写入请求可以包括请求ID并指定要写入数据的存储器地址。
目的地子线程140还包括跟踪由写入请求指定的写入操作的进度的进度跟踪器134。例如,存储器系统150可以向进度跟踪器144发送对已经完成写入操作的信号的写入响应。每个写入响应可以包括对其正在发送响应的写入请求的请求ID。以这种方式,进度跟踪器144可以使用请求ID来跟踪DMA事务的进度。
进度跟踪器134和144可以分别向内核110发送同步消息115和116,以在对应于描述符112的DMA事务的过程中更新内核110。同步消息115和116可以指定完成级别(例如,完成的存储器操作的百分比或总数)和/或已经接收到响应的请求ID。
如下所述,进度跟踪器134和144可以发送同步消息115和116,同步消息115和116提供关于DMA事务进度的部分或不完整更新。例如,每个进度跟踪器134和144可以被配置为每次已经接收到针对DMA事务的指定数量(例如,阈值数量)的响应时发送同步消息115和116。在特定示例中,每个进度跟踪器134和144可以被配置为每次已经针对至少阈值数量的请求ID的连续序列接收到响应时发送同步消息115和116。由于内核110可以知道正在执行存储器操作的顺序(并且因此知道正在移动张量元素的顺序),所以内核110可以基于这些部分更新开始处理已经被传送的数据,而不必等待整个DMA事务集合完成。
将单独的子线程用于读取和写入操作可以实现更高的吞吐量。例如,如果每个子线程130和140可以在每个时钟周期并行地生成特定数量的请求,例如,每个时钟周期四个请求,则由两个子线程130和140生成的请求的总数是特定数量的两倍,例如八个请求。
在一些情况下,可以使用多个DMA线程来执行DMA事务。例如,如果存储器的带宽足以在每个时钟周期处理比单个DMA线程可以生成的请求更多的请求,则可以使用多个DMA线程来生成请求。如果使用多个DMA线程来传送多维张量的数据,则每个DMA线程可以接收针对多维张量的一部分(例如,张量的切片)的描述符。描述符可以指定张量的切片的大小和形状以及存储器地址,类似于全张量的描述符。
图2A是可用于实现图1的每个请求生成器132和142的示例请求生成器200的图。在该示例中,请求生成器200被配置用于存在多达四个张量维度并且每个时钟周期可以生成多达四个存储器地址的实现方式。
通常,请求再生器200可以确定多维张量或其它多维数据结构(为了简洁起见,在本文中称为张量)中的张量元素的存储器地址。请求生成器200可以确定存储器地址,使得张量的数据可以从存储器读取和/或写入存储器。请求生成器200可以基于定义张量内的张量元素的位置的张量元素的步长索引值来计算张量元素的存储器地址。示例请求生成器200用在相邻级之间具有流水线寄存器220、230、240、260和270的五级设计来实现。
为了确定存储器地址,请求生成器200可以通过逐步遍历针对每个维度的每个步长索引值来遍历每个维度。例如,如果维度包括十个元素,则请求生成器200可以按从一到十的顺序逐步遍历步长索引值。在概念上,这可以使用包括针对张量的每个维度的循环的循环嵌套来执行。在这样的示例中,可以通过针对循环的每次迭代递增针对该循环的步长索引值来使用其循环遍历张量的维度,直到达到等于循环中的元素数量的循环边界。当达到循环边界时,下一个外部循环被递增,并且当前循环被重置为对应于维度中的第一元素的第一步长索引值。最内循环可以包括存储器地址计算,以确定针对张量内对应于循环嵌套中的四个循环的步长索引值的位置处的张量元素的存储器地址。在图2B中示出了用于使用四个循环来确定存储器地址的示例伪代码280。
参看图2B,伪代码280包括用于遍历张量的四个维度的四个循环281-284。所图示的伪代码280描述事务的一半(源侧读取或目的地侧写入)。对于整个事务,相同或相似的伪代码可以被独立地实例化两次。在伪代码280中,每个维度的循环边界(steps_per_stride)对于传送的源侧和目的地侧都是相同的,但是步幅偏移值(stride_dimension_offset_value_i)可以是不同的。也就是说,steps_per_stride_0在针对源侧和目的地侧的伪代码中是相同的,但是源侧伪代码中的stride_dimension_offset_value_0可以与目的地伪代码中的stride_dimension_offset_value_0不同。
最外循环281对应于维度之一,并且包括步长索引值i0和循环边界steps_per_stride_0。循环边界steps_per_stride_0可以等于与最外循环281相对应的维度中的元素的数量。类似地,循环282对应于维度之一并且包括步长索引值i1和steps_per_stride_1的循环边界(其可以等于对应于循环282的维度中的元素的数量),并且循环283对应于维度之一并且包括步长索引值i2和steps_per_stride_2的循环边界(其可以等于对应于循环283的维度中的元素的数量)。
最内循环284也对应于维度之一,并且包括步长索引值i3和循环边界steps_per_stride_3(其可以等于对应于最内循环284的维度中的元素的数量)。对于最内循环的每次迭代,将使用函数285为张量的每个维度计算维度存储器地址偏移值,并且使用这些维度存储器地址偏移值来使用函数286确定对应于步长索引值i0-i3的张量元素的存储器地址。对应于最外循环281的维度的维度存储器地址偏移值(destination_memory_address_offset_0)等于针对该循环的步长索引值i0和针对该维度的步幅维度偏移值(stride_dimension_offset_value_0)的乘积。以类似的方式为每个其他维度确定维度存储器地址偏移值,如图2B所示。如上所述,针对维度的步幅维度偏移值可以被包括在描述符中。
然后可以基于基本存储器地址和针对张量的每个维度的维度存储器地址偏移值来计算针对张量元素的存储器地址。例如,针对张量元素的存储器地址可以基于(例如等于)基本存储器地址和针对维度的维度存储器地址偏移值的总和,如图2B所示。
返回到图2A,请求生成器200可以并行地执行类似的存储器地址计算,例如,无需实际迭代循环。在该示例中,请求生成器200包括针对例如在一个时钟周期内并行地计算四个存储器地址的四个通道201-204。在其它示例中,两个或更多个通道可以被用来并行地计算两个或更多个存储器地址,例如,三个通道用于三个存储器地址,五个通道用于五个存储器地址等等。也就是说,请求生成器200可以包括m个通道以并行计算m个存储器地址,其中,m大于或等于1。请求生成器200可以在并行存储器地址计算周期期间计算m个存储器地址,该并行存储器地址计算周期可以具有小于或等于单个时钟周期的持续时间。
通道的数量可以与张量的维度数量相同或不同。例如,请求生成器200可以被用来基于包括在描述符112中的信息来计算具有不同维度数量的张量的存储器地址。例如,具有四个通道的请求生成器200可以使用多达所有四个通道,为三维张量计算每个周期多达四个存储器地址。相同的请求生成器200还可以使用多达所有四个通道,针对一维、二维或四维张量每个周期计算多达四个地址。
基于多级多步(在该示例中为四级多步)并行执行这样的计算可能是困难的,因为每个通道201-204必须计算与每个其他通道不同的张量元素的存储器地址,并且每个通道独立于每个其他通道操作。当每个通道201-204并行地(例如,同时)计算存储器地址时,一个通道不能等待另一个通道完成,然后迭代一个或多个循环以确定针对下一张量元素的存储器地址。相反,每个通道必须能够确定其下一张量元素(例如,针对其下一张量元素的步长索引值)并且确定针对该张量元素的存储器地址而无需等待另一通道。
对于每个通道201-204(因此对于每个并行存储器地址计算),请求生成器200包括存储器地址单元242-248。每个存储器地址单元242-248包括相应的步长跟踪器222-228和相应的存储器地址计算元件252-258。通常,步长跟踪器222-228被配置为逐步通过张量的张量元素并且确定针对张量元素的维度存储器地址偏移值。存储器地址计算元件252-258被配置为使用从步长跟踪器222-228接收的维度存储器地址偏移值来确定针对张量元素的存储器地址。
请求生成器200包括预先计算针对步长跟踪器222-228的值的计算元件210。例如,计算元件210可以预先计算可以由步长跟踪器222-228使用的各种步长比较值,以确定将为其确定存储器地址的下一张量元素的下一步长索引值。如下所述,可以连同其他标准使用将当前步长索引值与步长比较值比较以确定下一个步长索引值。计算元件210可以预先计算针对张量的每个维度的步长比较值。这些步长比较值可以是例如针对该维度的每步幅步长减1、针对该维度的每步幅步长减2、针对该维度的每步幅步长减3等,这取决于请求生成器200正在为其生成存储器地址并发送请求的当前描述符112的张量的维度的数量。计算元件210是可选的,预计算值也是可选的。预先计算这些值可以帮助改善下一个时钟周期上的关键路径定时。
计算元件210可以包括一组硬件加法器,其预先计算步长比较值并将步长比较值存储在寄存器220(或其它适当的数据存储元件)中。计算元件210可以基于在描述符中接收的每步幅步长值来计算比较偏移值。描述符可以包括针对一个或多个维度的每步幅步长值。在该示例中,描述符可以包括针对维度1-3(sps_1至sps_3)的每步幅步长值而不是针对维度0(例如,对应于最外循环的维度)的每步幅步长值。例如,如果使用32位有符号整数表示每步幅步长变量,则可以暗示针对维度0的每步幅步长值是最大整数值,例如,可以存储在有符号32位整数中的最大整数值。在另一示例中,每步幅步长值可以被包括在描述符中,但在图2A中未示出。
由于每步幅步长值可以基于张量的大小和形状而变化,因此计算元件210可以预先计算每个描述符的步长比较值,并将步长比较值存储在寄存器220中。描述符也可以被存储在寄存器220中。
请求生成器200还包括有限状态机(FSM)232。FSM 232可以基于来自描述符112的信息来初始化和控制步长跟踪器222-228。例如,FSM 232可以从寄存器230获得描述符信息,并且基于描述符信息确定将针对由描述符定义的DMA事务发送的请求的数量。该数量可以是张量中的张量元素的数量。FSM 232可以跟踪要发送的剩余请求的数量,并向每个步长跟踪器222-224发送基于该剩余请求数量的提前量。提前量定义了在由存储器地址计算元件252-258执行的存储器地址计算的下一个周期期间要计算的存储器地址的数量。
例如,在使用所有四个通道201-204执行DMA事务的过程期间,提前量可以等于4。然而,如果要对DMA事务计算的存储器地址的总数小于4,则最后一个周期的提前量将小于4。例如,如果存储器地址的总数是18,则FSM 232将在前4个周期内向每个步长跟踪器222-228提供为4的提前量,然后在最后一个周期内提供为2的提前量。
FSM 232还可以停止步长跟踪器232。例如,如下所述,进度跟踪器134和144可以一次仅跟踪特定数量的请求的进度。当请求生成器200用完所分配的请求ID时,请求生成器200可以使其自身停止,例如,使步长跟踪器232停止。当请求ID被释放并且可以被重新分配时,例如,当如下所述,针对至少阈值数量的顺序请求ID接收到响应时,进度跟踪器134和144可以返回请求ID信用。
请求生成器132和142也可能由于外部互连背压而停止(即,存储器系统还不能接受新请求)。在一些实现方式中,可以使用可由软件配置的硬件FSM来独立地节流每个DMA线程120。软件可以在可配置的采样窗口上为每个DMA线程120设置目标请求生成带宽,并且一旦达到分配的带宽,DMA线程120就将自动地停止其流水线。因此,DMA线程120可以在三种不同的情况下停止:存储器系统网络背压、请求带宽节流和耗尽的请求ID分配(等待进度跟踪器以返回信用)。
每个步长跟踪器222-228使用从FSM 232接收的提前量、针对张量的每个维度的当前步长索引值以及针对每个维度的每步幅步长值来确定针对每个维度的下一个步长索引值。每个步长跟踪器222-228还基于针对维度的下一步长索引值和针对维度的步幅维度偏移值来确定针对每个维度的维度存储器地址偏移值。每个步长跟踪器222-228经由寄存器240将所确定的维度存储器地址偏移值输出到其对应的存储器地址计算元件252-258。如下所述,存储器地址计算元件252-258基于所接收的维度存储器地址偏移值来确定针对张量元素的存储器地址。
步长跟踪器222-228确定针对彼此不同的张量元素的维度存储器地址偏移值。例如,考虑包括16个总张量元素的2×2×2×2张量(或其他形状张量)。由于四个通道201-204每个周期生成四个请求,因此每个步长跟踪器222-228将确定针对16个张量元素中的总共四个张量元素的维度存储器地址偏移值。例如,步长跟踪器222可以确定针对第一、第五、第九和第十三张量元素的维度存储器地址偏移值,而步长跟踪器224确定针对第二、第六、第十和第十四张量元素的维度存储器地址偏移值等等。
步长跟踪器222-228可以彼此并行地并且彼此独立地确定它们各自的维度存储器地址偏移值。也就是说,在一些实现方式中,步长跟踪器222-228不向任何其他步长跟踪器222-228传送任何数据。相反,每个步长跟踪器222-228可以被配置为基于步长跟踪器222-228的初始化和从FSM 232接收的提前量来确定其下一张量元素(例如,针对其下一张量元素的步长索引值),如下文更详细所述。以这种方式,步长跟踪器222-228都不必等待另一个步长跟踪器222-228,并且所有步长跟踪器222-228在单个时钟周期中完成并行计算。用于确定维度存储器地址偏移值的步长跟踪器和技术的示例架构在图3、4和7中示出并在下文描述。
每个存储器地址计算元件252-258包括第一求和元件262A-268A和第二求和元件262B-268B。每个第一求和元件262A-268A可以针对每个并行存储器地址计算周期确定从其步长跟踪器222-228接收的维度存储器地址偏移值的总和。例如,求和元件262A可以针对给定张量元素,确定由步长跟踪器222生成的四个维度存储器地址偏移值的总和。第一求和元件262A-268A可以被实现为硬件加法器。
也可以被实现为硬件加法器的第二求和元件262B-268B可以基于基地址和由其对应的第一求和元件262A-268A计算的维度存储器地址偏移值的总和来确定针对张量元素的存储器地址。例如,求和元件262B可以通过将基地址与由步长跟踪器222针对给定张量元素生成的四个维度存储器地址偏移值的总和相加来确定针对给定张量元素的存储器地址。
第二求和元件262B-268B可以将它们的存储器地址输出到寄存器270。请求发送器290可以生成对每一存储器地址的请求且将所述请求发送到存储器系统,例如图1的存储器系统150。请求可以包括请求ID和存储器地址。请求ID可以按顺序被分配给请求。例如,如果DMA线程被配置为一次具有500个未完成的请求,则请求ID可以从0或1开始,并且分别达到499或500。如果使用0-499,则第一请求可以包括请求ID 0,第二请求可以包括请求ID 1,以此类推。请求发送器299可以包括确定针对每个请求的请求ID的计数器。
四个通道201-204可以各自在单个时钟周期期间并行地生成针对张量元素的存储器地址。FSM 232可以控制通道201-204的步长跟踪器222-228迭代通过张量的每个张量元素,直到针对张量中的每个张量元素计算存储器地址。当完成发出对描述符的请求时,FSM232可以移动到下一个描述符。然而,FSM 232不必等待接收对所有请求的响应。如果存在至少阈值数量的可用顺序请求ID(例如,已经接收到对其的响应),则进度跟踪器132或134可以通知请求生成器200,使得请求生成器200可以使用那些可用请求ID发出对下一个描述符的请求。这进一步提高了DMA线程的吞吐量和效率。
如上所述,DMA子线程132和134的请求生成器132和134可以使用请求生成器200来实现。在该示例中,每个子线程132和134将能够在每个时钟周期发送四个请求。
图3是可用于实施图2A的步长跟踪器222-228中的每一个的示例步长跟踪器300的图。在该示例中,步长跟踪器300包括两个增量器链322和324,其可以执行相同或相似的功能以生成针对张量元素的步长索引值和维度存储器地址偏移值。这允许步长增量器链中的一个主动地确定由DMA线程开始处理的当前描述符的维度存储器地址偏移值,而另一个步长增量器链被初始化以用于要由该DMA线程处理的下一个描述符。
例如,步长增量器链324可以主动地确定针对当前描述符的维度存储器地址偏移值。步长增量器链324可以使用从FSM(例如,图2的FSM 232)接收的提前量和(如由描述符定义的)步幅参数来确定针对当前描述符的维度存储器地址偏移值。当步长增量器链324为活动时,FSM可以初始化步长增量器链322,如下文参考图4所述。
当为当前描述符请求存储器地址的最后一个周期时,FSM可以切换到初始化的步长增量器链322,并向步长增量器链322发送初始化量。步长增量器链322可以在步长增量器链324确定其最后一组维度存储器地址偏移值的时钟周期之后的下一个时钟周期上生成第一组维度存储器地址偏移值。以这种方式使用两个步长增量器链可以显著地提高DMA线程的吞吐量和效率,特别是对于小张量。例如,如果请求生成器仅花费三个时钟周期来确定针对该张量的所有存储器地址,则使用时钟周期来在张量之间重新初始化单个步长增量器链导致吞吐量(例如,每单位时间执行的存储器操作的数量)减少25%。
当在步长增量器链322和324之间切换时,FSM可以控制一组复用器332-338来选择哪个步长增量器链的输出经由寄存器342被发送到存储器地址计算单元。例如,FSM可以在增量器链322活动时选择每个复用器332-338的顶部通道,并且在增量器链324活动时选择每个复用器332-338的底部通道。
如上参考图2B所述,每个通道201-204包括可以被实现为步长跟踪器300的步长跟踪器。在该示例中,步长跟踪器300针对通道0并且针对通道0输出四个维度存储器地址偏移值。
尽管未示出,但是每个步长跟踪器300还可以输出用于确定维度存储器地址偏移值的下一步长索引值。这些下一步长索引值被输入回步长跟踪器300以用在确定后续步长索引值和维度存储器地址偏移值中。也就是说,步长增量器链324可以确定针对每个维度的步长索引值和针对每个维度的维度存储器地址偏移值。这些值可以作为将用于确定下一个值的当前值被反馈到步长增量器链324。
步长跟踪器300还可以包括针对步长索引值的复用器,所述复用器针对每个维度,从步长增量器链322和324两者接收步长索引值,类似于复用器322-338如何从步长增量器链322和324两者接收维度存储器地址偏移值。这些复用器的输出可以被馈送到步长增量器链324中,以用在确定后续步长索引值中。
当步长增量器链324计算针对当前描述符的维度存储器地址偏移值时,步长增量器链322可以使用初始化状态确定针对下一个描述符的第一组存储器地址的维度存储器地址偏移值。然而,FSM可以控制复用器332-338以传递从步长增量器链324接收的维度存储器地址偏移值。在当前描述符完成时,FSM可以控制复用器332-338以传递由步长增量器链322在一个周期内计算的维度存储器地址偏移值,其将包括针对下一张量的前四个张量元素的值。FSM还可以控制针对步长索引值的复用器,以在该一个周期内将步长索引值从步长增量器322传递到步长增量器链324。之后,步长增量器链324具有步长索引值的当前状态,并且可以确定该描述符的剩余周期的维度存储器地址偏移值。在完成该描述符的第一周期之后,FSM可以控制复用器以再次传递步长增量器链324的输出。
图4是示例步长增量器链400的图。步长增量器链400可以包括针对DMA线程被配置为处理的最大张量的每个维度的步长增量器。在该示例中,步长增量器链400包括针对多达四个维度张量的四个步长增量器410-440。图4中所示的示例步长增量器链被实现为组合功能,在样式上类似于进位纹波加法器电路。
每个步长增量器410-440可以接收参数集。针对步长增量器410-440的参数集可以包括对应于步长增量器410-440的维度的每步幅步长和由计算元件210预先计算的维度的每个步长比较值。当这些值可以基于执行DMA事务的张量的大小和形状而改变时,可以为每个描述符初始化步长增量器410-440。
每个步长增量器410-440还可以接收针对维度的步长索引值和针对该维度的维度偏移值。对于第一周期,可以将针对该维度的步长索引值初始化为零(如由步长增量器链322的输入值所示)。在第一周期之后,输入到步长增量器410-440的步长索引值是由步长增量器410-440输出的下一步长索引值。如上所述,针对维度的维度偏移值是乘以步长索引值的值以确定维度存储器地址偏移值。与使用图2B的伪代码280的四个循环相比,步长增量器410的功能类似于循环嵌套的最内循环。然而,不是对该循环的每次迭代,使步长索引递增1,步长增量器410基于从FSM接收的提前量来递增其步长索引值。例如,如果提前量为4,则步长增量器410使针对该维度的步长索引值递增4。如果该增量超过针对该维度的每步幅步长,则步长增量器可以将步长索引值重新初始化为零并保持递增直到其已经递增四次,这可以包括多于一次的重新初始化。例如,如果每步幅步长为3并且提前量为4,则步长增量器410将从0递增到3,重新初始化为0,在四次递增之后从0递增到1。
不是使用状态迭代,步长增量器410可以使用表现类似于一对优化加法器的组合函数。像加法器一样,步长增量器的一部分采用两个操作数(“step 3index”和“advance_amount”)并且产生总和(“step3next index”)和进位(“wrap amount”)。功能对于维度偏移是类似的,除了计算下一维度偏移的函数不产生回绕量输出之外。
步长增量器410可以将回绕量输出到步长增量器420。回绕量可以等于步长增量器410的步长索引值在当前循环中基于接收到的提前量将被重新初始化的次数。也就是说,回绕量反映了四个环基于提前量将回绕的次数。
对于步长增量器410-440计算其维度存储器地址偏移值的每个周期,例如,在单个时钟周期期间,步长增量器410可以计算针对其维度的下一步长索引值、针对步长增量器420的回绕量和维度存储器地址偏移值(例如,下一步长索引值和针对该维度的维度偏移值的乘积)。
步长增量器420可以使用从步长增量器410接收的回绕量,类似于步长增量器420使用从FSM接收的提前量的方式。也就是说,回绕量表示与步长增量器420相对应的维度的步长索引值在该循环中将被递增的次数。步长增量器420可以使用从步长增量器410接收的回绕量来递增其步长索引值,以确定下一步长索引值。步长增量器420还可以使用下一步长索引值(例如,下一步长索引值和针对该维度的步幅维度偏移值的乘积)来确定其维度存储器地址偏移值。
类似于步长增量器410,步长增量器420还可以计算回绕量并将其输出到步长增量器430。回绕量可以等于基于从步长增量器410接收的回绕量,在当前循环中重新初始化步长增量器420的步长索引值的次数。也就是说,回绕量反映了四个循环将基于所接收的回绕量将被回绕的次数。
步长增量器430可以以类似的方式使用从步长增量器420接收的回绕量。也就是说,回绕量表示与步长增量器430相对应的维度的步长索引值在该循环中将被递增的次数。步长增量器430可以使用从步长增量器420接收的回绕量来递增其步长索引值,以确定下一步长索引值。步长增量器430还可以使用下一步长索引值(例如,下一步长索引值和针对该维度的步幅维度偏移值的乘积)来确定其维度存储器地址偏移值。
类似于步长增量器420,步长增量器430还可以计算回绕量并将其输出到步长增量器440。回绕量可以等于基于从步长增量器420接收的回绕量在当前循环中重新初始化步长增量器430的步长索引值的次数。也就是说,回绕量反映了四个循环基于所接收的回绕量被回绕的次数。
步长增量器440可以以类似的方式使用从步长增量器430接收的回绕量。也就是说,回绕量表示与步长增量器440相对应的维度的步长索引值在该循环中将被递增的次数。步长增量器440可以使用从步长增量器430接收的回绕量来递增其步长索引值,以确定下一步长索引值。步长增量器440还可以使用下一步长索引值(例如,下一步长索引值和针对该维度的步幅维度偏移值的乘积)来确定其维度存储器地址偏移值。
对于步长增量器410-440计算其维度存储器地址偏移值的每个周期,例如,在单个时钟周期期间,步长增量器410-440可以各自计算针对其维度的下一步长索引值、针对下一步长增量器的回绕量(如果合适)和维度存储器地址偏移值(例如,针对该维度的下一步长索引值和步幅维度偏移值的乘积)。
在一些实现方式中,每个增量器410-440可以在确定针对其维度的下一步长索引值和/或针对其维度的回绕量中使用一组标准。该标准可以包括增量(例如,针对增量器410的提前量或针对增量器420-440的回绕量)。标准还可以包括针对该维度的每步幅步长,以及当前步长索引值与步长比较值的比较。
例如,可以生成表,例如查找表,其指定对于增量、每步幅步长以及当前步长索引值匹配哪个步长比较值的每个特定组合,下一步长索引值将是多少和回绕量将是多少。特定组合可以基于请求生成器可以为其生成存储器地址的张量的维度的数量而不同。以这种方式,每个步长增量器410-440可以简单地将增量和当前步长索引值与表进行比较,以确定下一步长索引值和回绕量将是多少。
图5是可用于实现图2A的进度跟踪器134和144中的每一个的示例进度跟踪器500的图。进度跟踪器500包括进度跟踪器队列510、响应重排序单元520和同步单元530。
进度跟踪器队列510可以从描述符接收描述符(或需要处理响应和同步的描述符的相关部分)并存储描述符。描述符使得同步单元530能够确定由描述符定义的DMA事务的进度,如下所述。
响应重排序单元520可以接收从存储器系统(例如,图1的存储器系统150)接收的响应。每个响应可以指定与响应相对应的请求的请求ID。也就是说,存储器系统可以向进度跟踪器500发送对从对应于进度跟踪器500的请求生成器接收的每个完成的请求的响应。
响应重排序单元520可以以任何顺序接收响应,并且基于它们的请求ID重排序响应。存储器系统可以以与接收请求的顺序不同的顺序处理请求。例如,存储器系统可以使用带宽优化技术来使一些请求优先于其他请求。鉴于此,响应重排序单元520可以被配置为接收无序响应并对响应进行重排序以跟踪由存储器系统完成的存储器操作的进度。示例响应重排序单元在图6中示出并在下文更详细地描述。
同步单元530可以从响应重排序单元接收进度数据,并将同步消息发送到内核,例如图1的内核110。例如,同步单元530可以从响应重排序单元520接收指定已经接收的有序请求ID的数量的数据。同步单元530可以被配置为每次已经完成由描述符定义的存储器操作的至少阈值量(或阈值百分比)时发送同步消息。例如,同步单元530可以确定要对当前描述符执行的存储器操作(例如,取决于子线程的读取或写入)的总数。同步更新单元530可以被配置为每次已经完成至少10%的存储器操作时向内核发送同步消息。如上所述,内核可以使用这些部分更新来开始消耗传输的数据,而无需等待由描述符定义的所有存储器操作完成。
响应重排序单元520和/或同步单元530可以被配置为向请求生成器通知请求生成器可以重新使用一组请求ID。例如,每次在来自存储器系统的响应中接收到至少阈值数量的有序请求ID时,这些请求ID可以被释放到响应生成器以供重新使用。这使得请求生成器能够在请求生成器已经发送了可以由进度跟踪器500处理的最大数量的请求之后但在已经完成所有请求之前继续生成请求。
例如,假设进度跟踪器500包括一次只能跟踪500个存储器操作的响应重排序缓冲器,并且请求ID是0-499。如果已经在请求中使用了所有500个存储器操作并且没有请求已经被响应,则请求生成器必须停止,直到从进度跟踪器500接收到指定可用请求ID的通知。如果进度跟踪器500接收到对请求ID 0-15(但不是对所有标识符)的响应,并且阈值小于15,则进度跟踪器500可以发送通知(例如,请求ID信用返回消息),该通知指定请求生成器可以使用请求ID 0-15继续发送请求,而无需等待所有500个存储器操作完成。
图6是可用于实现图5的响应重排序单元520的示例响应重排序单元600的图。响应重排序单元600包括响应向量610和重排序向量630,它们中的每一个可以使用位向量寄存器来实施。响应向量610和重排序向量630可以各自包括针对可以由请求生成器发出的每个请求ID的位。该位可以指示请求ID的状态。例如,如果该位的值为零,则尚未接收到针对存储器操作的响应。如果该位的值为1,则已经接收到对存储器操作的响应。响应向量610、重排序向量630和弹出向量(如下所述)可以都是相同的大小,例如,包括相同位数。
响应向量610可以被配置为一次接收多个响应,例如,在该示例中一次接收多达四个响应。例如,响应向量610可以被配置为接收与对应请求生成器的通道的数量匹配的多个同时响应。在其他示例中,响应向量610可以被配置为接收与对应请求生成器的通道的数量不同(例如,大于通道的数量)的多个同时响应。
重排序向量630中的位可以按请求ID的顺序排列。在重排序向量630的输入处为逻辑OR门624。OR门624可以是包括针对重排序向量630的每一位的OR门的位向量OR门。对于每一请求ID,请求ID的响应向量的位和由AND门622(例如,位向量AND门)输出的请求ID的位可以是OR门的输入以确定重排序向量630中的请求ID的位的值。
该AND门622对于每个请求ID具有一对输入,因此对于重排序向量630的每个位具有一对输入。对于给定的请求ID,如果重排序向量630中的位和由弹出向量逻辑640维护的弹出向量中的请求ID的弹出位都具有值1,则AND门的输出对于给定的请求ID为1。如下所述,例如,当请求ID被释放以供请求生成器使用时,存储器地址的弹出位可以被设置为1以将该位清除回值0。也就是说,如果接收到对请求ID的响应并且尚未释放请求ID,则AND门622的针对对应于请求ID的位的输出将是1。如果请求ID已被释放,则AND门622针对该位的输出将是零,因为来自弹出向量的输入将是1。
响应重排序单元600还包括头指针逻辑650、弹出向量逻辑640和内部弹出计数逻辑660。头指针逻辑650可以维护在重排序向量630中的位之后的下一位处的指针,以用于已经接收到响应的最高有序请求ID。有序请求ID可以在第一请求ID处开始,并且延伸到已经接收到响应的每个顺序请求ID,直到达到尚未接收到响应的请求ID。例如,如果请求ID包括0-499并且已经接收到0-8、11、56和61-78的响应,则有序请求ID将是0-8。在该示例中,头指针将指向请求ID 9的位。一旦接收到针对请求ID 9和10的响应,则有序请求ID将是0-11,假设尚未接收到针对请求ID 12的响应。
头指针逻辑650还可以预先计算另外的头指针,诸如头指针加1(例如,头指针指向的位之后的下一位、头指针加2等)。以这种方式,弹出计数逻辑660可以在单个时钟周期期间弹出重排序向量630中的多于一个位。这是可用于满足给定时钟频率的定时的可选特征。对于每个周期具有许多响应的大的重排序向量,逻辑复杂度显著增加。当目标频率相对快时或者当每个周期存在许多响应(例如,许多通道)时,可以使用该预先计算。
内部弹出计数逻辑660可以监视重排序向量630中的位,以确定当头指针移动时可弹出(例如,清除)重排序向量的多少位。例如,内部弹出计数逻辑660可以预测具有值为1的任何位串,其指示针对对应于位的存储器操作已经接收到响应。当头指针逻辑650移动到另一位时,头指针逻辑630可以提供头指针移动到的(例如,head_plus_i_next)位置(例如,位)。基于头指针的新位置和所监视的位,内部弹出计数逻辑660可以确定可以弹出多少位,例如,每个时钟周期多达最大弹出次数。例如,如果头指针可向上移动十位且每时钟周期弹出的最大数量为4位,则内部弹出计数逻辑660可以指令弹出向量逻辑640在第一周期弹出4位,在第二周期弹出4位,且在第三周期弹出2位。头指针将递增该周期弹出的相同数量的条目,因此在该示例中,它可以每个周期前进多达4。
弹出向量逻辑640可以维持待弹出的位的弹出向量,且将该弹出向量提供为至AND门622的输入。弹出向量逻辑640可以基于头指针和额外头指针及从内部弹出计数逻辑660接收的待弹出位的数量来确定待弹出的位。例如,如果要弹出的位数为4,则弹出向量逻辑640可以将位从当前头指针弹出到头指针加4。由于已经计算了头指针加4的值,所以弹出向量逻辑640不必消耗时钟周期来确定要弹出的位的位置。
头指针逻辑650还可以从弹出计数逻辑接收待弹出的位的数量。头指针逻辑650可以更新头指针且基于待弹出的位的数量来预先计算额外头指针。
响应重排序单元600还包括有序项目寄存器672以及计算元件670和674。有序项目寄存器672可以维护已经弹出但尚未释放到请求生成器的有序项目的数量的计数。为此,计算单元670基于内部弹出计数逻辑660的输出来聚合已经弹出的位的数量。
寄存器672中的有序项目的数量也被发送到同步单元530。同步单元530可以基于已经弹出的有序项目的数量来确定何时将请求ID释放到请求生成器。例如,同步单元可以发送指定可以由请求生成器使用的请求ID的量的数据,例如,请求ID信用返回。计算单元674可以从当前在寄存器672中的有序项目的数量中减去该数量,并用结果(加上来自内部弹出计数逻辑660的任何新弹出的项目)更新寄存器。例如,如果寄存器672指示已经弹出了15个有序项目,并且同步单元530将10个释放到请求生成器,则计算元件674可以从15个请求ID中减去10个释放的请求ID并存储和更新5个请求ID的值。以这种方式,寄存器272存储可以被释放到请求生成器的请求ID的数量的运行计数。
图7是图示用于生成存储器操作请求的示例过程700的流程图。过程700可以由请求生成器(例如,图1的请求生成器132或142或图2的请求生成器200)执行。
请求生成器接收一个或多个描述符(702)。每个描述符包括关于DMA事务(例如,一组存储器传送操作)的信息。例如,描述符可以包括指定将从其读取数据的源存储器、将向其写入数据的目的地存储器、将张量元素存储在源存储器中的源张量的大小和形状(例如,维度)、将张量元素存储在目的地存储器中的目的地张量的大小和形状,以及针对每个维度的步幅维度偏移值的信息。
请求生成器初始化步长跟踪器(704)。如上所述,请求生成器可以包括多个通道,每个通道例如每个时钟周期并行地计算存储器地址。每个通道可以包括步长跟踪器和存储器地址计算单元。每个步长跟踪器可以包括步长增量器链。初始化步长跟踪器可以包括向每个步长增量器提供步长参数并初始化针对每个步长增量器的步长索引值。
请求生成器生成存储器地址(706)。例如,请求生成器可以使用多个通道来并行地计算多个存储器地址,例如,在单个时钟周期期间。特别地,在时钟周期期间,每个步长跟踪器可以计算针对张量的每个维度(其对应于张量中的特定张量元素)的下一步长索引值,并且使用针对该维度的下一步长索引值和针对该维度的步幅维度偏移值来计算针对每个维度的维度存储器地址偏移值。然后,每个通道的存储器地址计算单元可以基于由通道上的步长跟踪器输出的每个维度的维度存储器地址偏移值和基地址来计算存储器地址。例如,针对通道(且因此张量元素)的存储器地址可以是基地址与维度存储器地址偏移值的总和。
请求生成器生成请求并将其发送到存储器系统(708)。请求可以是读取请求或写入请求。每个请求可以指定在该周期期间计算的请求ID和存储器地址。也就是说,请求生成器可以生成并发送针对每个计算机存储器地址的相应请求。请求生成器可以将请求发送到使用请求中的存储器地址执行读取或写入操作的存储器系统。
请求生成器确定是否有为其计算存储器地址的更多张量元素(710)。例如,如上所述,FSM可以跟踪针对描述符待生成的剩余的请求的数量。如果存在更多张量元素,则过程700返回到步骤706以生成更多存储器地址。
如果不存在附加张量元素,则请求生成器确定是否存在对其执行DMA事务的附加描述符(714)。例如,请求生成器可以检查描述符队列以确定队列中是否存在任何附加描述符。如果不是,则过程结束。如果是,则过程返回到步骤704,其中,为下一个描述符初始化步长跟踪器。如上所述,可以在完成先前描述符的DMA事务之前初始化步长跟踪器。
图8是图示用于跟踪存储器操作的进度的示例过程800的流程图。过程800可以由进度跟踪器(例如,图1的进度跟踪器134或144或图5的进度跟踪器500)执行。
进度跟踪器接收一个或多个响应(802)。例如,存储器系统可以响应于完成存储器操作而发送对所跟踪的进度的响应。响应可以指定针对所完成的存储器操作的请求ID。
进度跟踪器更新重排序向量(804)。进度跟踪器可以更新重排序向量以指示已经完成对应于请求ID的存储器操作。例如,进度跟踪器可以将针对请求ID的位从值0更新为值1,以指示已经完成对应于请求ID的存储器操作。
进度跟踪器确定连续元素(例如,针对请求ID的位)的数量是否大于或等于阈值(806)。如果是,则进度跟踪器可以释放请求ID以由请求生成器重新使用(808)。如果不是,则过程800继续到步骤810而不释放任何请求ID。
在步骤810中,进度跟踪器确定所接收的响应的数量是否大于或等于阈值。该数量可以是自将先前的同步消息发送到正在执行存储器操作的内核以来接收到的响应的数量。在另一示例中,进度跟踪器可以确定是否已经接收到要接收的响应的总数的至少阈值百分比。
在任一示例中,如果已经达到或超过阈值,则进度跟踪器可以与内核同步(812)。例如,进度跟踪器可以向内核发送指示所接收的响应的总数或总百分比的同步消息。在另一示例中,进度跟踪器可以向内核发送同步消息,该同步消息指示自将先前的同步消息发送到内核以来接收到的响应的数量。
如果尚未达到阈值,则过程800继续到步骤814。在步骤814中,进度跟踪器确定是否已经接收到针对描述符的所有响应。如果不是,则过程800返回到步骤802,在步骤802中接收更多响应。如果是,则进度跟踪器可以例如通过发送指示已经完成针对描述符的所有存储器操作的同步消息来与内核816同步。
虽然本说明书包含许多具体实现方式细节,但是这些不应当被解释为对任何发明或可能要求保护的范围的限制,而是应当解释为特定于特定发明的具体实施例的特征的描述。在本说明书中在单独实施例的上下文中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实现。此外,尽管特征在上文可能被描述为以某些组合起作用并且甚至最初如此要求保护,但是来自所要求保护的组合的一个或多个特征在一些情况下可以从组合中被删除,并且所要求保护的组合可以针对子组合或子组合的变形。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应当被理解为要求以所示的特定顺序或按顺序执行这些操作,或者执行所有示出的操作,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统组件的分离不应当被理解为在所有实施例中都需要这种分离,并且应当理解,所描述的程序组件和系统通常可以一起被集成在单个软件产品中或被封装到多个软件产品中。
因此,已经描述了主题的特定实施例。其它实施例在以下权利要求书的范围内。在一些情况下,权利要求书中记载的动作可以以不同的顺序执行,并且仍然实现期望的结果。另外,附图中描绘的过程不一定需要所示的特定顺序或相继顺序来实现期望的结果。在某些实现方式中,多任务和并行处理可能是有利的。

Claims (20)

1.一种直接存储器存取(DMA)系统,包括:
一个或多个硬件DMA线程,其中,每个DMA线程包括:
请求生成器,所述请求生成器被配置为在每个并行存储器地址计算周期期间,(i)并行地生成针对多维张量的m个存储器地址,并且对于每个存储器地址,(ii)生成对存储器系统执行针对所述多维张量的存储器操作的相应请求,其中,所述请求生成器包括m个存储器地址单元,并且其中,每个存储器地址单元包括:
步长跟踪器,所述步长跟踪器被配置为针对所述多维张量的每个维度,生成(i)针对该维度的相应步长索引值,以及基于所述相应步长索引值,生成(ii)针对该维度的相应步幅偏移值;以及
存储器地址计算元件,所述存储器地址计算元件被配置为:
在每个并行存储器地址计算周期期间并且基于每个相应的步幅偏移值来生成针对所述多维张量的张量元素的存储器地址;以及
将使用所述存储器地址执行所述存储器操作的请求传送到所述存储器系统;
其中,m大于或等于1。
2.如权利要求1所述的DMA系统,其中,所述请求生成器被配置为在单个时钟周期期间并行地生成所述存储器地址,并且在单个时钟周期期间执行每个并行存储器计算。
3.如权利要求2所述的DMA系统,其中,在每个时钟周期期间,每个存储器地址单元的存储器地址计算元件生成针对与每个其他存储器地址单元的存储器地址计算元件相同或不同的张量元素的存储器地址。
4.如权利要求1至3中的任一项所述的DMA系统,其中,所述请求生成器被配置为针对所述多维张量接收描述符,所述描述符针对每个维度定义针对所述维度的步幅值的相应步长。
5.如权利要求1至4中的任一项所述的DMA系统,其中,所述请求生成器包括m个通道,每个通道包括相应的步长跟踪器和相应的存储器地址计算元件,其中,每个通道的相应的步长跟踪器和相应的存储器地址计算元件与每个其他通道并行地计算对应的存储器地址。
6.如权利要求5所述的DMA系统,其中:
所述步长跟踪器被配置为基于循环嵌套来生成针对所述多维张量的存储器地址,所述循环嵌套针对所述多维张量的每个维度包括用于遍历所述多维张量的维度的相应循环;以及
针对每个维度的每步幅步长值表示针对所述维度的相应循环的循环边界,以及针对每个维度的步长索引值表示针对所述维度的相应循环的循环索引。
7.如权利要求6所述的DMA系统,其中,每个步长跟踪器被配置为在每个时钟周期期间更新针对所述维度中的每个维度的步长索引值。
8.如权利要求6所述的DMA系统,其中,针对每个步长跟踪器的步长索引值的组合不同于针对每个其它步长跟踪器的步长索引值的组合。
9.如权利要求8所述的DMA系统,其中:
每个步长跟踪器包括步长增量器链,所述步长增量器链包括多个步长增量器,每个步长增量器被配置为确定针对相应维度的维度存储器地址偏移值;
与所述循环嵌套的最内循环相对应的步长增量器链的第一步长增量器被配置为接收提前量;以及
在每个时钟周期期间更新针对所述维度中的一个或多个维度的步长索引值包括由所述第一步长增量器基于所述提前量更新针对所述一个或多个维度的步长索引值。
10.如权利要求9所述的DMA系统,其中:
与所述最内循环被嵌套的循环相对应的步长增量器链的一个或多个第二步长增量器中的每一个被配置为从所述步长增量器链中的先前步长跟踪器接收回绕量;以及
在每个时钟周期期间更新针对所述维度中的一个或多个维度的步长索引值包括由所述第二步长增量器基于所述回绕量来更新针对所述一个或多个维度的步长索引值。
11.如权利要求1至10中的任一项所述的DMA系统,进一步包括进度跟踪器,所述进度跟踪器包括响应重排序单元和同步单元。
12.如权利要求11所述的DMA系统,其中,所述响应重排序单元被配置为针对每个张量维持是否执行针对所述张量元素的存储器操作的状态。
13.如权利要求11所述的DMA系统,其中,所述同步单元被配置为向处理器内核提供多个部分更新,所述多个部分更新中的每一个指定对所述多维张量的张量元素执行的存储器操作的总体状态。
14.如权利要求11所述的DMA系统,其中:
每个请求包括唯一标识符;
所述响应重排序单元被配置为:
以任何顺序从所述存储器系统接收响应,每个响应包括为其提供所述响应的请求的唯一标识符;以及
当在所述响应中接收到至少阈值数量的连续唯一标识符时,释放唯一标识符集以供所述请求生成器重新使用。
15.一种系统,包括:
一个或多个处理器内核;
存储器系统;以及
DMA引擎,所述DMA引擎包括一个或多个DMA线程,其中,每个DMA线程包括:
请求生成器,所述请求生成器被配置为在每个并行存储器地址计算周期期间,(i)并行地生成针对多维张量的m个存储器地址,并且对于每个存储器地址,(ii)生成对存储器系统执行针对所述多维张量的存储器操作的相应请求,其中,所述请求生成器包括m个存储器地址单元,其中,m大于或等于1,并且其中,每个存储器地址单元包括:
步长跟踪器,所述步长跟踪器被配置为针对所述多维张量的每个维度,生成(i)针对该维度的相应步长索引值,以及基于所述相应步长索引值,生成(ii)针对该维度的相应步幅偏移值;以及
存储器地址计算元件,所述存储器地址计算元件被配置为:
在每个并行存储器地址计算周期期间并且基于每个相应的步幅偏移值来生成针对所述多维张量的张量元素的存储器地址;以及
将使用所述存储器地址执行所述存储器操作的请求传送到所述存储器系统;以及
进度跟踪器,所述进度跟踪器包括响应重排序单元和同步更新单元,所述同步更新单元被配置为向所述一个或多个处理器内核提供针对由所述DMA引擎管理的存储器操作的部分同步更新。
16.如权利要求15所述的系统,其中,所述请求生成器被配置为在单个时钟周期期间并行地生成所述存储器地址,并且在单个时钟周期期间执行每个并行存储器计算。
17.如权利要求16所述的系统,其中,在每个时钟周期期间,每个存储器地址单元的存储器地址计算元件生成针对与每个其他存储器地址单元的存储器地址计算元件相同或不同的张量元素的存储器地址。
18.如权利要求15至17中的任一项所述的系统,其中,所述请求生成器被配置为针对所述多维张量接收描述符,所述描述符针对每个维度定义针对该维度的步幅值的相应步长。
19.如权利要求15至18中的任一项所述的系统,其中,所述请求生成器包括m个通道,每个通道包括相应的步长跟踪器和相应的存储器地址计算元件,其中,每个通道的相应的步长跟踪器和相应的存储器地址计算元件与每个其他通道并行地计算对应的存储器地址。
20.一种由DMA系统执行的方法,所述方法包括:
由请求生成器在每个并行存储器地址计算周期期间,(i)并行地生成针对多维张量的m个存储器地址,并且对于每个存储器地址,(ii)生成对存储器系统执行针对所述多维张量的存储器操作的相应请求,其中,所述请求生成器包括m个存储器地址单元,其中,m大于或等于1,以及其中,每个存储器地址单元包括步长跟踪器和存储器地址计算单元;
由每个存储器地址单元的步长跟踪器并且针对所述多维张量的每个维度,生成(i)针对该维度的相应步长索引值,以及基于所述相应步长索引值,生成(ii)针对该维度的相应步幅偏移值;以及
由每个存储器地址单元的存储器地址计算元件并且在每个并行存储器地址计算周期期间,基于每个相应的步幅偏移值来生成针对所述多维张量的张量元素的存储器地址;以及
将使用所述存储器地址执行所述存储器操作的请求传送到所述存储器系统。
CN202080071556.3A 2020-02-14 2020-11-30 具有多级多步的直接存储器存取架构 Pending CN114556311A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202062977062P 2020-02-14 2020-02-14
US62/977,062 2020-02-14
US16/838,796 US11314674B2 (en) 2020-02-14 2020-04-02 Direct memory access architecture with multi-level multi-striding
US16/838,796 2020-04-02
PCT/US2020/062605 WO2021162765A1 (en) 2020-02-14 2020-11-30 Direct memory access architecture with multi-level multi-striding

Publications (1)

Publication Number Publication Date
CN114556311A true CN114556311A (zh) 2022-05-27

Family

ID=77272083

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080071556.3A Pending CN114556311A (zh) 2020-02-14 2020-11-30 具有多级多步的直接存储器存取架构

Country Status (7)

Country Link
US (3) US11314674B2 (zh)
EP (1) EP4022450A1 (zh)
JP (2) JP7472277B2 (zh)
KR (1) KR20220062068A (zh)
CN (1) CN114556311A (zh)
TW (1) TW202131195A (zh)
WO (1) WO2021162765A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113836049A (zh) * 2021-09-17 2021-12-24 海飞科(南京)信息技术有限公司 存储器访问方法和电子装置

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11314674B2 (en) * 2020-02-14 2022-04-26 Google Llc Direct memory access architecture with multi-level multi-striding
US11704130B2 (en) * 2021-08-16 2023-07-18 Micron Technology, Inc. Indexing external memory in a reconfigurable compute fabric
CN116821019B (zh) * 2023-08-30 2023-11-14 腾讯科技(深圳)有限公司 数据处理方法、计算机设备及芯片

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6057457A (ja) * 1983-09-07 1985-04-03 Ricoh Co Ltd Dma装置
US4855903A (en) * 1984-12-20 1989-08-08 State University Of New York Topologically-distributed-memory multiprocessor computer
JPS63216170A (ja) * 1987-03-05 1988-09-08 Mitsubishi Electric Corp デイジタル信号処理プロセツサ
JPH03268040A (ja) * 1990-03-19 1991-11-28 Toshiba Corp アドレス発生装置
US5361363A (en) * 1990-10-03 1994-11-01 Thinking Machines Corporation Input/output system for parallel computer for performing parallel file transfers between selected number of input/output devices and another selected number of processing nodes
JPH04333952A (ja) * 1991-05-10 1992-11-20 Toshiba Corp Dmaコントロールlsi
US5659797A (en) * 1991-06-24 1997-08-19 U.S. Philips Corporation Sparc RISC based computer system including a single chip processor with memory management and DMA units coupled to a DRAM interface
EP0562251A2 (en) * 1992-03-24 1993-09-29 Universities Research Association, Inc. Parallel data transfer network controlled by a dynamically reconfigurable serial network
JPH06243113A (ja) * 1993-02-19 1994-09-02 Fujitsu Ltd 並列計算機における計算モデルのマッピング法
US5526501A (en) * 1993-08-12 1996-06-11 Hughes Aircraft Company Variable accuracy indirect addressing scheme for SIMD multi-processors and apparatus implementing same
US5628026A (en) * 1994-12-05 1997-05-06 Motorola, Inc. Multi-dimensional data transfer in a data processing system and method therefor
US5809334A (en) 1996-09-24 1998-09-15 Allen-Bradley Company, Llc Receive packet pre-parsing by a DMA controller
US6185634B1 (en) * 1996-09-27 2001-02-06 Emc Corporation Address triggered DMA controller with an indicative signal including circuitry for calculating a new trigger address value based on the sum of the current trigger address and the descriptor register data with a trigger address register
EP1059588A1 (en) 1999-06-09 2000-12-13 Texas Instruments Incorporated Multi-channel dma with request scheduling
US7035958B2 (en) * 2002-10-03 2006-04-25 International Business Machines Corporation Re-ordering a first request within a FIFO request queue to a different queue position when the first request receives a retry response from the target
US6874054B2 (en) 2002-12-19 2005-03-29 Emulex Design & Manufacturing Corporation Direct memory access controller system with message-based programming
US7331013B2 (en) * 2004-02-18 2008-02-12 Nvidia Corporation Viterbi decoder with survivor bits stored to support look-ahead addressing
US7165722B2 (en) * 2004-03-10 2007-01-23 Microsoft Corporation Method and system for communicating with identification tags
US7363397B2 (en) * 2004-08-26 2008-04-22 International Business Machines Corporation System and method for DMA controller with multi-dimensional line-walking functionality
US7577772B2 (en) 2004-09-08 2009-08-18 Qlogic, Corporation Method and system for optimizing DMA channel selection
US8843727B2 (en) 2004-09-30 2014-09-23 Intel Corporation Performance enhancement of address translation using translation tables covering large address spaces
US7529245B1 (en) * 2005-04-04 2009-05-05 Sun Microsystems, Inc. Reorder mechanism for use in a relaxed order input/output system
US20060259658A1 (en) * 2005-05-13 2006-11-16 Connor Patrick L DMA reordering for DCA
US20090125647A1 (en) * 2005-06-30 2009-05-14 Citibank, N.A. Device And Method For Executing A DMA Task
US7926046B2 (en) * 2005-12-13 2011-04-12 Soorgoli Ashok Halambi Compiler method for extracting and accelerator template program
US7870544B2 (en) * 2006-04-05 2011-01-11 International Business Machines Corporation Insuring maximum code motion of accesses to DMA buffers
TWI346873B (en) * 2007-03-27 2011-08-11 Ind Tech Res Inst A direct memory access controller with dynamic data width adjustment, method thereof, and computer accessible storage media to store program thereof
US20090031001A1 (en) * 2007-07-27 2009-01-29 Archer Charles J Repeating Direct Memory Access Data Transfer Operations for Compute Nodes in a Parallel Computer
JP2010033188A (ja) * 2008-07-25 2010-02-12 Fujitsu Ltd 送信経路選択装置、データ送信システム、コンピュータ装置および送信経路選択方法
US20100180100A1 (en) * 2009-01-13 2010-07-15 Mavrix Technology, Inc. Matrix microprocessor and method of operation
US8255593B2 (en) * 2009-09-29 2012-08-28 Oracle America, Inc. Direct memory access with striding across memory
JP5706754B2 (ja) * 2011-05-13 2015-04-22 キヤノン株式会社 データ処理装置及びデータ処理方法
US9996500B2 (en) * 2011-09-27 2018-06-12 Renesas Electronics Corporation Apparatus and method of a concurrent data transfer of multiple regions of interest (ROI) in an SIMD processor system
US9094039B2 (en) * 2013-10-18 2015-07-28 Advanced Micro Devices, Inc. Efficient deflate decompression
US10255547B2 (en) * 2014-12-04 2019-04-09 Nvidia Corporation Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
US20170192720A1 (en) * 2015-12-31 2017-07-06 Arteris, Inc. Prioritization of order ids in dram scheduling
US10061714B2 (en) 2016-03-18 2018-08-28 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors
US11055063B2 (en) 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10896367B2 (en) * 2017-03-07 2021-01-19 Google Llc Depth concatenation using a matrix computation unit
US9946539B1 (en) * 2017-05-23 2018-04-17 Google Llc Accessing data in multi-dimensional tensors using adders
CN108388527B (zh) 2018-02-02 2021-01-26 上海兆芯集成电路有限公司 直接存储器存取引擎及其方法
US11101804B2 (en) * 2019-01-22 2021-08-24 Intel Corporation Fast memory for programmable devices
US10997102B2 (en) * 2019-04-01 2021-05-04 Wave Computing, Inc. Multidimensional address generation for direct memory access
US11314674B2 (en) * 2020-02-14 2022-04-26 Google Llc Direct memory access architecture with multi-level multi-striding

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113836049A (zh) * 2021-09-17 2021-12-24 海飞科(南京)信息技术有限公司 存储器访问方法和电子装置
CN113836049B (zh) * 2021-09-17 2023-08-08 海飞科(南京)信息技术有限公司 存储器访问方法和电子装置

Also Published As

Publication number Publication date
JP2024105255A (ja) 2024-08-06
EP4022450A1 (en) 2022-07-06
KR20220062068A (ko) 2022-05-13
WO2021162765A1 (en) 2021-08-19
JP2023513652A (ja) 2023-04-03
JP7472277B2 (ja) 2024-04-22
US20240070098A1 (en) 2024-02-29
TW202131195A (zh) 2021-08-16
US20220327075A1 (en) 2022-10-13
US20210255976A1 (en) 2021-08-19
US11314674B2 (en) 2022-04-26
US11762793B2 (en) 2023-09-19

Similar Documents

Publication Publication Date Title
CN114556311A (zh) 具有多级多步的直接存储器存取架构
US11836524B2 (en) Memory interface for a multi-threaded, self-scheduling reconfigurable computing fabric
US11010161B2 (en) Multiple types of thread identifiers for a multi-threaded, self-scheduling reconfigurable computing fabric
US20210406015A1 (en) Execution or Write Mask Generation for Data Selection in a Multi-Threaded, Self-Scheduling Reconfigurable Computing Fabric
KR102465213B1 (ko) 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 조건부 브랜칭 제어
KR102446709B1 (ko) 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭의 실행 제어
US20190303144A1 (en) Backpressure Control Using a Stop Signal for a Multi-Threaded, Self-Scheduling Reconfigurable Computing Fabric
US20190303346A1 (en) Loop Thread Order Execution Control of a Multi-Threaded, Self-Scheduling Reconfigurable Computing Fabric
KR20200138787A (ko) 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 효율적인 루프 실행
KR20200138761A (ko) 재진입 큐를 사용하는 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 루프 실행 제어
US20210263872A1 (en) Multi-Threaded, Self-Scheduling Reconfigurable Computing Fabric
US11782760B2 (en) Time-multiplexed use of reconfigurable hardware
CN116301920B (zh) 一种用于部署cnn模型至基于fpga的高性能加速器的编译系统
CN110799955B (zh) 具有预编程功能的高速计算机加速器
CN111475205B (zh) 一种基于数据流解耦合的粗粒度可重构阵列结构设计方法
US10956361B2 (en) Processor core design optimized for machine learning applications
JP2004515856A (ja) ディジタル信号処理装置
WO2014202128A1 (en) P-select n-port round robin arbiter for scheduling requests
CN117472637B (zh) 一种中断管理方法、系统、设备及介质
JP2011123715A (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40071755

Country of ref document: HK