CN109416674A - 用于暂存器使能的多核处理器的元组编码感知直接存储器访问引擎 - Google Patents
用于暂存器使能的多核处理器的元组编码感知直接存储器访问引擎 Download PDFInfo
- Publication number
- CN109416674A CN109416674A CN201780028187.8A CN201780028187A CN109416674A CN 109416674 A CN109416674 A CN 109416674A CN 201780028187 A CN201780028187 A CN 201780028187A CN 109416674 A CN109416674 A CN 109416674A
- Authority
- CN
- China
- Prior art keywords
- descriptor
- data
- memory
- column
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- 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/30105—Register structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
Abstract
表格数据被高效地从源存储器移动到目的地存储器。第一电子电路集合访问存储在特定存储器位置处的描述符。该描述符指示表格数据的列的宽度和行数,以及表格数据操纵操作,并指示存储表格数据的源存储器位置和用于存储表格数据操纵结果的目的地存储器位置。第一电子电路集合确定指示要执行的表格数据操纵操作的控制信息,并将控制信息发送到第二电子电路集合。基于该控制信息,第二电子电路集合从源存储器位置检索表格数据并应用表格数据操纵操作,以生成数据操纵结果,并使数据操纵结果存储在目的地存储器位置处。
Description
背景技术
在多核处理器上执行的数据库服务器对大量表格数据执行数据操纵操作。表格数据是逻辑上组织为行和一列或多列的数据,每列具有确定的大小,每行包括每列。从逻辑上讲,表格数据驻留在类似表的结构中,诸如电子表格或关系表。但是,表格数据的实际物理存储可以采用各种形式。例如,在行为主的格式中,表格数据可以被存储为连续存储在存储器地址空间内的行,每行包括每列并且给定的列占用行内相同数量的字节。在列为主的格式中,每列可以与其它列分开存储,作为在存储器地址内连续存储的列向量,用于列向量中每行的特定条目存储在每个其它列的相应列向量的相同相对位置或索引中。
为了高效地对表格数据执行数据操纵操作,将表格数据从主存储器移动到更靠近核心处理器的存储器,其中操作可以由核心处理器更高效地执行。因此,表格数据在更靠近核心处理器的存储器与主存储器之间的移动是由数据库服务器频繁执行的操作类型。
但是,用于将表格数据移动到更靠近核心处理器的存储器的方法增加了开销,这种开销显著地抵消或消除了由表格数据移动到更靠近核心处理器的存储器所获得的任何优点。即使是能够卸载移动数据任务的直接存储器访问(DMA)引擎也不能提供处理器效率的充分提高,原因有几个。由数据库操作处理的表格数据不是以最适合DMA引擎移动的方式组织或格式化的。
此外,更靠近核心处理器的存储器的大小通常小。因此,DMA引擎将只能在本地存储器已满之前将一小部分数据移动到那个存储器中,并且需要在需要再次写入之前清空。这导致DMA引擎多次重复该处理并且每次DMA将数据移动到更靠近核心处理器的存储器时发出中断,从而导致大量中断。大量中断恶化核心处理器的性能,因为每次核心处理器被中断时,核心处理器都必须确定中断的源以及如何处理中断。
此外,在多核处理器体系架构中,其中每个核具有其自己的本地存储器,每个核需要DMA引擎以便访问该核的本地存储器。每个核实现DMA引擎大大增加了这种多核处理器体系架构在门(gate)计数、面积和功耗方面的成本。
附图说明
在附图中:
图1图示了数据移动系统的多个电子电路的示例布置。
图2图示了将数据从源存储器位置移动到目的地存储器位置的描述符的示例。
图3图示了用于移动以表格格式存储的数据的描述符的示例。
图4图示了用于对一个或多个执行数据操纵操作的描述符的示例。
图5图示了数据操纵操作块的示例布置。
图6图示了使用硬件电路系统移动数据而不执行软件的示例处理。
图7A图示了根据本发明实施例的、可以在核心处理器之间分区的列的示例。
图7B图示了根据本发明实施例的、用于在核心处理器之间分区数据的分区阶段。
图7C图示了根据本发明实施例的、参与分区的数据移动系统的部分的多个电子电路的示例布置。
图7D图示了根据本发明实施例的、用于分区数据的描述符的布置。
图7E分区了根据本发明实施例的、可以在核心处理器之间分区的列的示例,以及结合分区所生成的列的示例。
图8A图示了根据本发明实施例的、用于在分区期间接收列的行的暂存器存储器中的缓冲器。
图8B图示了根据本发明实施例的、为缓冲在分区期间接收的列的行而执行的操作。
图9A图示了根据本发明实施例的描述符的流水线操作。
图9B图示了根据本发明实施例的流水线描述符。
图10图示了根据本发明实施例的、用于在对列进行分区之后行解析(resolution)的RID列。
图11A图示了根据本发明实施例的、用于在分区之后生成用于行解析的RID列的描述符。
图11B图示了根据本发明实施例的、用于在对列进行分区之后行解析的RID列。
图12A描绘了根据本发明实施例的、由数据移动引擎使用的各种存储器。
图12B描绘了根据本发明实施例的、由数据移动引擎使用的RID存储器。
图13描绘了根据本发明实施例的、与由数据移动引擎使用的各种存储器互连的复制环。
图14描绘了根据本发明实施例的、用于配置耦合到复制环的各种存储器之间的数据移动的描述符。
图15是描绘根据本发明的实施例的、在耦合到复制环的各种存储器之间沿着复制环的数据移动的操作的流程图。
图16描绘了在各种数据移动引擎之间互连并且用于在数据移动引擎之间广播数据的复制环。
具体实施方式
在以下描述中,出于解释的目的,阐述了许多具体细节,以便提供对本发明的透彻理解。但是,显而易见的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,以框图形式示出了众所周知的结构和设备,以避免不必要地模糊本发明。
总体概述
本文描述的技术提供了访问源存储器位置处的表格数据以及将表格数据复制和存储在目的地存储器位置,而无需执行软件程序。此外,该技术还提供了在数据飞往目的地存储器位置的同时对表格数据执行一个或多个数据操纵操作,同样无需执行软件程序。换句话说,数据操纵操作通常将在用于将数据发送到目的地存储器位置的相同时钟周期内并且在将表格数据存储在目的地存储器位置之前执行。因此,存储在目标存储器位置中的表格数据是由数据操纵操作产生的表格数据。因此,核心处理器可以避免花费附加的时钟周期来操纵表格数据。
在实施例中,响应于特定存储器位置被推送或存储到可由第一电子电路集合访问的第一寄存器空间内的第一寄存器中,第一电子电路集合访问存储在该特定存储器位置的描述符。描述符可以指示存储所述表格数据的位置的源存储器位置,并且描述符还可以指示存储数据操纵操作的结果的目的地存储器位置。目的地存储器位置可以在对描述符进行编程的核心数据处理器本地的存储器内。由于存储器在核心数据处理器的本地,核心数据处理器与存储器之间的距离短,因此减少了从目的地存储器位置访问表格数据的等待时间。核心处理器在访问表格数据时的性能得到改进。
描述符还可以指示一列表格数据的列宽度和表格数据的行数,其中表格数据包括列和行。通过依据表格数据的行数和列宽度来描述要移动的表格数据,描述符向数据移动系统指定如何格式化数据库表的数据库列并将其存储在源存储器位置。数据库表的不同列可以由不同的描述符指定,因此数据移动系统完全了解数据库表如何被格式化并存储在源存储器位置。因此,取决于表格数据在源存储器位置处如何格式化和组织,数据移动系统始终被优化为从源存储器位置访问表格数据并将其存储在目标存储器位置中。
描述符还可以指示要对数据的列执行的一个或多个表格数据操纵操作。表格数据操纵操作的示例可以是一种类型的过滤操作,在本文被描述为聚集(gather)操作。描述符可以指示应当对表格数据执行聚集操作。描述符还可以指定本地存储器内的位向量的存储器位置。本文描述的数据移动系统使用由描述符指定的位向量来滤除不满足过滤标准的表格数据列的行。数据移动系统在数据飞往目标存储器位置的同时或在表格数据存储在目标存储器位置之前滤除表格数据列的行,并压缩结果行(未被滤除的行),同时将结果行存储在目标存储器位置中,即使结果行未存储在源存储器位置的连续存储器位置中,也使得结果行存储在目的地存储器内的连续存储器位置中。
因此,在执行聚集操作之后存储在目的地存储器位置中的表格数据列的行数将有可能少于由描述符指定的行数。因此,除了上面提到的性能增益之外,还实现了在多核处理器中核心本地的存储器内有限存储空间的更高效使用。
基于描述符,第一电子电路集合确定指示要对表格数据执行的一个或多个数据操纵操作的控制信息。使用硬件数据信道,第一电子电路集合将控制信息发送到第二电子电路集合,以执行一个或多个操作。第二电子电路集合根据控制信息从源存储器位置检索表格数据,并将一个或多个数据操纵操作应用于表格数据,以生成数据操纵结果,并使数据操纵结果存储在目的地存储器位置。
一旦表格数据存储在目的地存储器位置,本文描述的技术就允许数据移动系统通过使用与特定描述符相关联的事件标识符来通知核心处理器数据在目的地存储器中可用。核心处理器能够处理这些事件标识符,而无需中断处理程序。因此,显著降低了中断处理程序的开销成本。
本文描述的技术还允许数据移动系统开始处理下一个描述符。在核心处理器处理存储在目的地存储器位置的表格数据的同时,数据移动系统可以开始处理下一个描述符。换句话说,下一个描述符的处理与存储的表格数据的访问和处理可以同时发生。因此,核心处理器可以访问和处理来自目的地存储器的数据,同时数据移动系统将用于下一个描述符的表格数据移动到在那个描述符中指定的不同目的地存储器位置。由此显著提高了处理数据的速度。
在其它实施例中,本公开涵盖了执行前述步骤的数据移动系统和计算机装置。
数据移动系统的概述
核心处理器和DMEM
图1图示了数据移动系统101的示例布置。图1包括多个核心处理器103a、103g、104a、104g。每个核心处理器103a、103g、104a、104g连接到本地高速暂存器(Scratchpad)存储器,诸如静态随机存取存储器(SRAM),在本文称为DMEM(直接存储器)。在图1中,核心处理器103a、103g、104a、104g分别连接到DMEM单元102a、102g、105a、105g。在所有核心处理器中,只有连接到特定DMEM的处理器才可以直接访问该特定DMEM。因此,DMEM 102a可以由核心处理器103a访问,但不能由核心处理器103g、104a、104g访问。DMEM 102g可以由核心处理器103g访问,但不能由核心处理器103a、104a、104g访问。同样,DMEM 105a可以由核心处理器104a访问,但不能由核心处理器103a、103g、104g访问,并且DMEM 105g可以由核心处理器104g访问,但不能由核心处理器103a、103g、104a访问。
直接存储器访问复合体(COMPLEX)(DMAC)
本文描述的数据移动系统包括三个主要的功能块,直接存储器访问复合体(DMAC)、直接存储器访问X-Bar(DMAX)和直接存储器访问DMEM(DMAD)。本文描述的数据移动系统仅包括一个DMAC块以及若干DMAX和DMAD块。DMAC包括若干复合体的数据检索、加载和操纵引擎。DMAX块主要包括数据路由引擎,并且DMAD块主要包括数据解码引擎和描述符信道块。
本文描述的数据移动系统包括每个核心一个DMAD块,因此DMAD块的数量取决于数据移动系统中使用的核心的数量。例如,32核处理器系统中的数据移动系统,DMAD块的数量是32。在实施例中,若干DMAD块可以被配置为将数据和指令路由到一个DMAX块。继续32核处理器的示例,可以配置8个DMAD块,以将数据和指令路由到一个DMAX块,由此产生4个DMAX块,以服务32个核心的32个DMAD块。
本文描述的数据移动系统仅包括单个DMAC。单个DMAC处理经由DMAX从数据移动系统的所有DMAD块路由的数据和指令。DMAC包括执行复合体功能的引擎并且,由于其复杂性,需要相对于DMAX和DMAD块内的引擎的最大门计数、面积和功率。因此,DMAC比DMAX和DMAD块更影响数据移动系统的总成本。但是,通过跨DMAX和DMAD块共享DMAC资源,DMAC对数据移动系统的成本将被摊销(amortized)。因此,就门计数、面积和功率而言,数据移动系统的总成本显著低于上述替代方法。
在实施例中,本文描述的数据移动系统在单个芯片上实现。因此,对于每个核心处理器,连接到每个核心处理器的DMEM、用于每个核心处理器的DMAD块、DMAX块和DMAC块都在单个芯片上设计、实现和配置。总线互连芯片中数据移动系统的所有功能块。
图1描绘了直接存储器访问复合体(DMAC)140以及DMAC 140的若干主要引擎。DMAC140及其引擎的细节和工作在下面进一步描述。
直接存储器访问DMEM(DMAD)
每个核心处理器103a、103g、104a、104g分别连接到DMAD106a、106g、115a、115g。每个DMAD包括一组电子电路,这些电子电路被设计为从连接到特定DMAD的核心处理器接收指令。例如,DMAD 106a被设计为仅从核心处理器103a接收指令。
核心处理器通过编程命令集(在本文被称为描述符)将指令发送到DMAD。描述符通过多个字段描述数据从一个位置到另一个位置的移动。描述符中的一些字段可以包括描述符类型、指示要从其移动的表格数据的源位置的源地址位置、指示来自源位置的表格数据要复制到的目的地位置的目的地地址位置、要对其操作的表格数据列的大小、需要被复制的表格数据列的行数、一个或多个数据操纵操作以及等待事件标识符以及其它控制标志(flag)。
一旦核心处理器对描述符进行了编程,核心处理器就将描述符存储在DMEM中的位置处。例如,核心处理器103a在对描述符进行编程后将其存储在DMEM单元102a中。然后,通过将DMEM单元102a内描述符的存储位置发送到DMAD 106a的两个硬件数据信道之一上,核心处理器103a将描述符发送到DMAD 106a。通过将存储器位置存储到寄存器中,核心处理器将描述符的存储器位置发送到数据信道。在实施例中,寄存器可以被设计为先进先出或FIFO寄存器,使得被推送或存储到寄存器中的第一存储器位置将是被添加到两个硬件数据信道之一的受硬件管理的列表中的第一存储器位置。
DMEM接口块
每个DMAD包括DMEM接口块,该DMEM接口块被配置为存储目的地为与其DMAD耦合的DMEM单元的任何数据,并且为与其DMAD耦合的DMEM单元生成写请求,以将发送到其DMAD的数据存储在与其DMAD耦合的DMEM单元中。例如,DMAD 106a包括DMEM接口块107a。DMEM接口块107a是一组电子电路,该组电子电路已经被设计为将发送到DMAD 106a并且目的地为DMEM单元102a的数据存储在DMEM接口块107a可访问的寄存器之一中。此外,DMEM接口块107a的电子电路组还已经被设计为为DMEM单元102a生成存储目的地为DMEM单元102a的数据的写请求。DMAD 106g、115a和115g类似地分别包括DMEM接口块107g、109a、109g。
DMEM接口块还被配置为从与其DMAD耦合的DMEM单元读取或检索数据。DMEM接口块可以使用DMEM单元位置生成从DMEM单元位置读取或检索数据的读请求。DMEM接口块可以接收从特定DMEM单元位置读取或检索数据的读请求,并且作为响应,DMEM接口块可以从该特定DMEM单元位置读取或检索数据。DMEM接口块可以将读取或检索出的数据发送到其DMAD内请求该数据的硬件部件。DMEM接口块可以接收在特定DMEM单元位置处写入或存储数据的写请求,并且作为响应,DMEM接口块可以在与该DMEM接口块的DMAD耦合的DMEM单元中的该特定DMEM位置处写入或存储数据。图1中描绘的DMEM接口块107a、107g、109a、109g中的每一个都被设计为分别用DMEM单元102a、102g、105a和105g执行上述操作。
DMAD的描述符信道块
每个DMAD包括描述符信道块,该描述符信道块是DMAD的电子电路的子集,其被设计为确定将向其添加描述符的硬件数据信道。在实施例中,每个DMAD可以被设计为维护两个硬件数据信道,并且可以具有两个描述符信道块,每个硬件数据信道一个描述符信道块。例如,DMAD 106a被设计为维护两个硬件数据信道。描述符信道块108a和108b是DMAD 106a的两个描述符信道块。类似地,DMAD 106g包括描述符信道块108g、108h,DMAD 115a包括描述符信道块111a、111b,并且DMAD 115g包括描述符信道块111g、111h。
每个描述符信道块每个硬件数据信道维护两个受硬件管理的列表、活动列表和空闲列表。在实施例中,受硬件管理的活动列表和空闲列表是链接列表。一旦核心处理器将描述符的DMEM位置存储到FIFO寄存器中,连接到核心处理器的DMAD的描述符信道块就将描述符的DMEM位置从FIFO寄存器发送到硬件数据信道之一。在实施例中,一旦描述符的DMEM位置存储到FIFO寄存器中,描述符信道块就确定被分配要在那个特定硬件数据信道上处理的描述符的数量并且,如果被分配要在那个特定硬件数据信道上处理的描述符的数量大于零,那么描述符信道块将由FIFO寄存器中新推送或存储的DMEM位置识别的新描述符添加到那个特定硬件数据信道的活动列表。通过向DMAD发送的指令,描述符信道块将新描述符添加到活动列表,将新描述符的DMEM位置写入添加到那个特定硬件数据信道的最后一个描述符的链接地址(Link Address)字段。
通过将描述符的DMEM位置存储到已被指定为描述符信道块被设计为从其读取并开始处理下一个可用描述符的寄存器(在本文中称为要读取的下一个描述符寄存器(NextDescriptor to Read register))中,描述符信道块开始处理描述符。如果活动列表为空,那么描述符信道块将来自FIFO寄存器的DMEM位置存储到要读取的下一个描述符寄存器中。如果活动列表不为空,那么通过更新先前在活动列表结束处的描述符的链接地址字段值,描述符信道块将存储在来自FIFO寄存器的DMEM位置处的描述符添加到活动列表的末尾,以包含来自FIFO寄存器的DMEM位置值。
在实施例中,描述符信道块可访问的寄存器(在本文被描述为最后描述符列表寄存器(Last Descriptor List register))包括当前在活动列表的末尾处的描述符的DMEM位置。通过将来自FIFO寄存器的DMEM位置作为当前位于列表末尾处的描述符的链接地址字段的值存储或写入并且将来自FIFO的DMEM位置值存储在最后描述符列表寄存器中,描述符信道块将新描述符添加到活动列表。然后,描述符信道块使用当前正被处理的描述符的链接地址字段遍历活动列表。
一旦描述符的DMEM位置存储在要读取的下一个描述符寄存器中,描述符信道块就使用存储在该寄存器中的DMEM位置,从那个DMEM检索在该DMEM位置处可用的描述符的数据。描述符信道块将从DMEM读取数据的请求发送到DMAD的DMEM接口块。读取数据的请求包括描述符的DMEM位置。在实施例中,读取数据的请求还指定要读取的字节数。在实施例中,要读取的字节数等于构成整个描述符的字节数或描述符的总大小。在实施例中,描述符的总大小是16字节。DMEM接口块使用指定的DMEM位置从DMEM检索数据,并将数据转发到描述符信道块。描述符信道块对描述符数据进行解码,包括但不限于确定描述符的类型。描述符信道块确定描述符的类型并至少基于描述符的类型处理描述符。
描述符类型
根据实施例,存在至少三种类型的描述符,它们是数据描述符、控制描述符、辅助描述符。描述符的类型由描述符数据内的描述符类型字段指示。每种类型的描述符都存在多种变体。数据描述符指定数据移动系统如何将数据从一个存储器位置移动到另一个存储器位置,并在移动期间变换数据。
控制描述符提供用于循环通过一个或多个描述符不止一次的信息。附加的控制描述符包括(1)可以用于对数据移动系统内的某些配置进行编程的描述符,在本文被称为程序描述符,(2)可以用于控制数据移动中的事件寄存器的描述符,在本文被称为事件描述符,以及(3)可以帮助分区表格数据的描述符,在本文被称为散列和范围引擎描述符。
辅助描述符提供有助于处理另一个描述符的信息。例如,如果所需控制信息的大小超过控制信息所允许的最大大小,那么辅助描述符可以用于提供附加的控制信息。
影响直接存储器访问复合体(DMAC)140中的寄存器或控制状态的数据描述符、辅助描述符和控制描述符被转发到DMAC。影响DMAD中的寄存器的、指示一个或多个描述符的循环机制的控制描述符,或者不需要发送到DMAC的、影响被设计为存储与等待事件对应的数据的寄存器的其它控制描述符被描述符信道块进一步处理。
直接存储器访问X-BAR(CROSS-BAR)
通过将描述符的数据转发到直接存储器访问CROSS(X)-BAR(DMAX)110a、110d,将描述符转发到DMAC。DMAX包括电子电路,该电子电路被配置为控制和路由从DMAD到DMAC以及从DMAC到DMAD的数据流。在实施例中,DMAX的电子电路可以被分为3组。一组电子电路可以被设计为将描述符的所有控制信息从DMAD发送到DMAC,而另一组电子电路可以被设计为从DMAD向DMAC发送与从DMAC到DMAD的读请求的响应对应的所有数据,以从DMEM读取数据。第三组电子电路可以被设计为从DMAC到DMAD发送读请求,以从DMEM读取数据。此外,第三组电子电路可以被设计为将所有描述符返回路径从DMAC发送到DMAD,其中每条描述符返回路径包括与描述符相关联的标识符,该标识符指示该描述符所属的DMAD,那个DMAD内处理描述符和那个描述符的标识符的描述符信道块。
例如,DMAX 110a包括仲裁单元(诸如仲裁单元112a)和用于将数据从DMAD 106a发送到DMAC 140的FIFO寄存器112b。在实施例中,数据包括可以由仲裁单元112a用于选择输入数据路径之一并将包括控制信息的数据发送到FIFO寄存器112b中的描述符的控制信息。类似地,DMAX110a包括FIFO寄存器114b和路由单元114a,以将数据从DMAC发送到DMAD。在实施例中,从DMAC发送的数据可以包括控制信息,使得路由单元114a选择用于目的地DMAD的数据路径,以发送数据。DMAX 110a还包括另一个仲裁单元113a和FIFO寄存器113b,用于发送要从DMEM复制到外部存储存储器的数据。
DMAX 110d包括仲裁单元112g和113g以及路由单元114g,它们分别提供与仲裁单元112a和113a以及路由单元114a相同的功能并执行相同的功能。DMAX 110d还包括FIFO寄存器112h、113h和114h,它们分别提供与112b、113b、114b相同的功能并执行相同的功能。
直接存储器访问复合体(DMAC)-写描述符解析器
DMAC 140包括写描述符仲裁单元120a,并且写描述符仲裁单元120a的输出存储在写描述符解析器逻辑块120b中。写描述符解析器逻辑块120b包括一个或多个寄存器。写描述符解析器逻辑块120b的电子电路被设计为累积从DMAX发送的描述符数据和控制信息。在实施例中,来自DMAX的描述符数据可以以片段的形式发送,并且写描述符解析器逻辑块120b的电子电路可以累积各种描述符字段并重新组装描述符字段,以形成完整的描述符数据。写描述符解析器逻辑块120b确定描述符的描述符类型,并基于由始发DMAD提供的描述符类型和控制信息来执行操作。
响应于确定描述符是数据描述符并且特别是写描述符,写描述符解析器逻辑块120b可以使用由始发DMAD提供的源计数器值来修改描述符数据中指定的源地址。此外,写描述符解析器逻辑块120b还可以使用由始发DMAD提供的目的地计数器值来修改目的地地址。写描述符解析器逻辑块120b还将数据移动操作和描述符数据发送到适当的数据移动引擎(诸如DMEM加载引擎)。
如果描述符类型是辅助类型描述符,那么写描述符解析器逻辑块120b可以更新本地辅助数据保持寄存器并将描述符返回到始发DMAD。如果描述符类型是程序或控制类型描述符,那么写描述符解析器逻辑块120b可以将描述符内指定的DMAC配置数据存储在描述符中指定的DMAC配置寄存器中,并将描述符返回到始发DMAD。
直接存储器访问复合体(DMAC)-读描述符解析器
DMAC 140还包括读描述符仲裁单元121a,并且读描述符仲裁单元121a的输出是读描述符解析器逻辑块121b。读描述符解析器逻辑块121b包括一个或多个寄存器。读描述符解析器逻辑块121b的电子电路被设计为累积从DMAX发送的描述符数据和控制信息。在实施例中,来自DMAX的描述符数据可以以片段的形式发送,并且读描述符解析器逻辑块121b的电子电路可以累积各种描述符字段并重新组装描述符字段,以形成完整的描述符数据。读描述符解析器逻辑块121b确定描述符的描述符类型,并基于由始发DMAD提供的描述符类型和控制信息来执行操作。
响应于确定描述符是数据描述符并且特别是读描述符,读描述符解析器逻辑块121b可以使用由始发DMAD提供的源计数器值来修改描述符数据中指定的源地址。此外,读描述符解析器逻辑块121b还可以使用由始发DMAD提供的目的地计数器值来修改目的地地址。读描述符解析器逻辑块121b还将数据移动操作和描述符数据发送到适当的数据移动引擎(诸如DDR加载引擎)。
与写描述符解析器逻辑块120b类似,如果描述符类型是辅助类型描述符,那么读描述符解析器逻辑块121b可以更新本地辅助数据保持寄存器并将描述符返回到始发DMAD。如果描述符类型是程序或控制类型描述符,那么读描述符解析器逻辑块121b可以将描述符内指定的DMAC配置数据存储在描述符中指定的DMAC配置寄存器中,并将描述符返回到始发DMAD。
直接存储器访问复合体(DMAC)-数据移动引擎
DMAC 140包括数据移动引擎130a、130b、130c、130d。数据移动引擎130a、130b、130c、130d中的每一个包括一个或多个DMEM加载引擎和一个或多个DDR加载引擎。数据移动引擎130a、130b、130c、130d中的每一个还包括一个或多个DMEM存储引擎和一个或多个DDR存储引擎。每个数据移动引擎从写描述符解析器逻辑块120b和读描述符解析器逻辑块121b接收操作。数据移动引擎130a、130b、130c、130d通过从指定的源存储器复制数据并将数据存储在指定的目的地存储器中来执行这些操作。每个数据移动引擎还使用由描述符解析器逻辑块提供的控制信息来执行它们的操作。
数据移动引擎130a、130b、130c、130d生成对指定的源存储器的读请求。数据移动引擎130a、130b、130c、130d响应于该读请求而累积发送到数据移动引擎的数据,然后生成对指定的目的地存储器的写请求。在实施例中,实现缓冲处理,使得发送到数据移动引擎的数据可以存储在数据移动引擎可访问的寄存器块中。数据移动引擎响应于读请求而开始处理发送的数据,而不等待所请求的数据可用。
系统总线接口主块123的电子电路被设计为接收来自数据移动引擎130a、130b、130c、130d的读和写请求,并将它们翻译成针对数据移动系统外部的存储器单元(诸如主存储器或另一个存储器单元)的系统总线接口读请求和系统总线接口写请求。系统总线接口主块123的电子电路将其响应于系统总线接口读请求而接收的数据发送到发送读请求的数据移动引擎。在实施例中,系统总线接口是AXI(高级可扩展接口),并且系统总线接口主块123是AXI主块。
描述符返回块125被设计为将由写描述符解析器逻辑块120b、读描述符解析器逻辑块121b以及数据移动引擎130a、130b、130c、130d处理的描述符返回到它们的始发DMAD。
DMS存储器150包括DMAC 140的各种部件可以从其读取或向其写入的存储器。一般而言,DMS存储器150用于存储由DMAC 140执行的操作使用或由其生成的数据。
补充操作引擎126代表逻辑块,每个块对存储在DMS存储器150中的列执行具体种类的操作。例如,补充操作引擎126可以包括分区引擎,该分区引擎在数据移动系统中的核心处理器之间分区存储在DMS存储器150中的一个或多个列中存储的元组。这种分区可以包括为每个元组生成识别通过分区向其分配元组的协处理器的标识符。
此外,补充操作引擎126可以包括散列引擎。散列引擎为存储在DMS存储器150中的一个或多个列生成散列值。可以包括的引擎的另一个示例是复制引擎。复制引擎在DMS存储器150内的存储器位置之间复制数据。
使用描述符移动数据和执行数据操纵操作
图2图示了使用描述符将数据从源存储器位置移动到目的地存储器位置的示例方法。图2包括三个描述符201a、202a、203a。元素201b、202b和203b分别各自与对描述符201a、202a、203a执行的操作对应。这些元素的目的是描绘对描述符201a、202a、203a执行的操作的次序。
图2描绘了一万行数据从源存储器位置到目的地存储器位置的移动。在这个示例中,源存储器位置是双倍数据速率同步动态随机存取存储器(DDR),并且目的地存储器位置是连接到分别对描述符102a和103a进行编程的核心处理器的DMEM。在图2中描绘的示例中,描述符201a、202a、203a由核心处理器103a编程。
解码描述符数据
描述符201a和202a是数据描述符。描述符的描述符类型字段指示描述符201a和202a是数据描述符。在实施例中,二进制数可以用于描述每个描述符类型和数据将被移动的方向。例如,二进制数0000可以在DMAD的描述符信道块的电子电路中编码,该电子电路处理描述符,以表示从DDR存储器到DMEM存储器或DMEM的数据移动。类似地,从DMEM到DDR存储器的数据移动可以由二进制数0001表示。对于描述符201a和202a,数据将从DDR存储器移动到DMS存储器或DMEM存储器。因此,描述符201a、202a的描述符类型字段指示适当的字段值。图201a和202a中所示的“Desc Type”字段的值仅用于提供清楚的说明性示例。
核心处理器确定源数据的源位置以及数据将被发送到的目的地位置。核心处理器还确定要通过描述符在源数据位置处被处理的行数。在实施例中,核心处理器可以配置有允许描述符处理的最大行数。可以基于DMEM的大小或DMEM中的可用存储空间来动态地确定这种阈值限制。
在图2中,由于要处理的数据的总行数至少为一万行,因此核心处理器还对控制描述符进行编程,该控制描述符允许DMAD多次使用相同的描述符。换句话说,控制描述符允许DMAD的电子电路实现循环机制,直到不满足控制描述符内的某个条件。允许DMAD实现这种循环机制的控制描述符在本文中将被称为循环描述符。
在实施例中,核心处理器还可以被配置为利用DMEM中的多个缓冲器来存储来自源数据位置的数据。利用多个缓冲器允许核心处理器更快地访问存储在DMEM中的数据,因此比使用单个缓冲器更快地处理那个数据,因为它允许核心处理器在数据移动系统在其它缓冲器中移动或存储数据的同时访问存储在一个缓冲器中的数据。在不同描述符中指定不同目的地存储器位置的灵活性允许使用多个缓冲器。
如本文所述,如果描述符中指定的目的地存储器位置是缓冲器的起始存储器位置,那么缓冲器被说成是与该描述符相关联的。每个描述符可以仅表示正被移动到DMEM单元中的表格数据列的总行数的一部分。因此,与特定描述符相关联的缓冲器存储该表格数据列的总行数的一部分,并且核心处理器可以开始处理存储在缓冲器中的行,而无需等待表格数据列的剩余行数被移动或存储到它们相应的缓冲器中。
此外,可以通过利用等待事件来减少来自数据移动系统的硬件部件与核心处理器上执行的软件之间的切换控制中的中断例程和中断处理程序的开销成本。核心处理器可以被配置为将特定事件分配给DMEM中的特定缓冲器,并且特定事件的值将确定数据移动系统的硬件部件是否将访问该特定缓冲器或者核心处理器上执行的软件是否将访问该特定缓冲器。
在图2中,描述符201a被分配Event0。基于该配置,核心处理器103a可以将Event0设置为值1或0,以便允许DMAD的硬件部件处理该描述符。例如,如果DMAD 106a的电子电路被设计为仅在Event0被设置为零时才开始处理描述符,那么核心处理器103a将在核心处理器103a对描述符进行编程之后将Event0值设置为0。核心处理器103a不访问那个特定缓冲器,直到Event0的值被设置为一。当Buffer0 201b满时,DMAD 106a将Event0的值设置为1。
在图2中,在DMEM单元102a内,数据存储在两个缓冲器中,一个在地址0x0000处,另一个在地址0x2000处。如上所述,使用至少两个缓冲器使得能够更快地处理数据。一旦DMAD106a和数据移动系统的其它硬件部件开始处理描述符201a,与描述符相关联的数据就将被存储在DMEM单元102a的地址0x0000处的Buffer0中。一旦Buffer0填充了数据,DMAD 106a就将Event0值设置为1,这将向核心处理器103a指示Buffer0准备好被访问并且Buffer0中的数据准备好被处理。在第一次完成描述符201a的处理之后,DMAD106a和数据移动系统的其它硬件部件将开始处理描述符202a。在数据移动系统的硬件部件开始处理描述符202a的同时,核心处理器103a将处理来自Buffer0的数据。因此,使用两个数据缓冲器允许处理数据记录子集上的数据记录,而无需等待首先检索出完整的数据记录集合。因此,减少了处理时间并提高了处理速度。
在图2中,描述符201a将是要被推送到DMAD 106a的两个硬件数据信道之一上的第一个描述符,并且它将是描述符201a、202a、203a中要被处理的第一个描述符。将在描述符201a已开始处理之后处理描述符202a,然后描述符203a将是三个描述符中要被处理的最后一个描述符,并且将在描述符202a开始处理之后处理描述符203a。核心处理器在对描述符进行编程之后将描述符存储在DMEM中,并且在图2中,核心处理器103a在DMEM或DMEM单元102a的地址0x5000处存储描述符201a,在地址0x5010处存储描述符202a,并且在地址0x5020处存储描述符203a。
在图2中,描述符201a和202a的“SrcAddr”指示存储表格数据的源存储器内数据列的起始位置。描述符201a和202a的“DestAddr”指示DMEM中将存储来自源存储器的数据的位置。“Column Width”指示以字节为单位的数据列中数据的大小,并且“Rows”指示每次数据移动系统处理描述符201a或202a时将处理的行数。描述符可以包括“Src Auto Inc Allow”字段,其中“Src Auto Inc Allow”字段向DMAC内的描述符解析器逻辑块指示基于描述符内的一个或多个其它字段的值来修改源地址。在实施例中,描述符内的一个或多个其它字段包括描述符的“Counter Inc”字段、“Column Width”字段和“Rows”字段。描述符解析器逻辑块可以使用在描述符中指定的源地址作为起始点或基本源地址并将偏移值添加到基本源地址来修改描述符中指定的源地址,其中偏移值由描述符解析器逻辑块基于源计数器的值、从描述符中指定的源地址移动或复制的表格数据列的宽度以及正在从描述符中指定的源地址移动或复制的表格数据列的行数来确定。
如上所述,描述符的“Column Width”字段指定表格数据的列的宽度,并且描述符的“Rows”字段指定表格数据的列的行数。可以从包括源计数器的寄存器读取或检索源计数器的值。在一些实施例中,描述符的“Counter Inc”字段指定包括源计数器值的寄存器。在一些实施例中,“Counter Inc”字段指示应当被考虑或使用的计数器值是源计数器值,并且描述符信道块被配置为检索存储在包括源计数器值的特定寄存器中的值。在一些实施例中,描述符信道块被设计为从已被指定存储源计数器值的特定寄存器中检索源计数器值。
“SrcAddrInc”字段的值确定是否应当递增由“Counter Inc”字段指定的计数器。在实施例中,如果设置了“SrcAddrInc”字段,那么由“Counter Inc”字段指定的计数器由处理描述符的描述符信道块递增,并且如果未设置“SrcAddrInc”字段,那么由“Counter Inc”字段指定的计数器不递增。在实施例中,处理描述符的描述符信道块递增由描述符信道块与描述符信道块相关联的源计数器的“Counter Inc”字段指定的计数器的值。
在图2中,描述符201a的“Counter Inc”字段指定计数器是描述符信道块处理描述符201a的源计数器,在图2中,如上所述,它是描述符信道块108a。描述符201a的“SrcAddrInc”字段触发由描述符信道块108a递增由“Counter Inc”字段指定的计数器值。在描述符信道块已经将描述符201a的控制信息发送到与描述符信道块108a的DMAD相关联的DMAX之后,描述符信道块108a递增由“Counter Inc”字段指定的计数器的值。
“Link Addr”字段帮助DMAD的描述符信道块内的电子电路在硬件中维护各种数据结构。“Link Addr”字段识别DMEM位置,其中存储描述符信道块必须处理的下一个描述符。此外,“Link Addr”字段不是由软件编程的,而是如下所述的描述符信道块的电子电路将确定应当被处理的下一个描述符的存储器位置并将那个存储器位置的值存储在“Link Addr”字段中。
控制描述符(具体而言是循环描述符)的循环地址字段允许DMAD的描述符信道块内的电子电路实现循环机制。在图2中,描述符203a的“Loop Addr(循环地址)”字段包含描述符201a的存储器地址值,由此使DMAD的描述符信道块重新处理描述符201a。在重新处理描述符201a之后,DMAD的描述符信道块将处理存储在描述符201a的“Link Addr”字段中的存储器地址的描述符,这意味着描述符信道块将重新处理描述符202a。因此,描述符信道块将继续重新处理所有描述符,直到满足循环条件。描述符203a中的循环条件由“IterationCount”指定。在图2中,当迭代计数等于零时,满足循环条件。
描述符信道块将在循环描述符中指定的迭代计数存储在被指定用于存储迭代计数值的特定寄存器中。每次描述符信道块处理循环描述符时,描述符信道块从该特定寄存器读取或检索迭代计数值并确定它是否为零。如果迭代计数值不为零,那么描述符信道块处理循环描述符,将特定寄存器中的迭代计数值递减一,并且如上所述,重新处理与该循环描述符链接的所有描述符。在图2中,描述符信道块108a将描述符203a的迭代计数值存储在寄存器中,并且每次描述符信道块108a处理描述符203a时,描述符信道块108a检索存储在寄存器中的迭代计数值并确定迭代计数值是否为零。如果迭代计数值不为零,那么描述符信道块108a处理描述符203a,递减寄存器中的迭代计数值,并开始重新处理描述符201a。因此,图2中的每个描述符将被处理5次。
由DMAD处理描述符
一旦描述符201a、202a、203a被编程并分别存储在DMEM中的地址0x5000、x5010和0x5020处,核心处理器103a就将描述符201a、202a、203a的DMEM地址推送到DMAD 106a可访问的FIFO寄存器中。在实施例中,核心处理器还指示应当将描述符推入到的DMAD的描述符信道块的特定硬件数据信道。DMAD的描述符信道块或者将描述符添加到由描述符信道块维护的现有列表,或者构建新列表。在构建或添加到列表时,DMAD的描述符信道块将把推送到FIFO寄存器的第二存储器地址写到放在列表上的第一个描述符的描述符的链接地址字段上。
例如,在图2中,描述符201a、202a、203a的存储器地址被推送到可由核心处理器103a和DMAD 106a访问的FIFO寄存器上。首先推入描述符201a的存储器地址,然后推入202a的存储器地址,然后推入203a的存储器地址。如上所述,DMAD的每个描述符信道块每个硬件数据信道维护两个列表,活动列表和空闲列表。描述符信道块108a确定描述符201a、202a、203a的存储器地址被推送到其上的硬件数据信道的活动列表是否为空。在实施例中,描述符信道块可以基于与列表相关联的计数器来确定列表是否为空。描述符信道块108a基于与那个活动列表相关联的计数器是否为零来确定活动列表是否为空。
描述符信道块108a通过将描述符202a的存储器地址写入或复制到描述符201a的链接地址字段并且将描述符203a的存储器地址写入或复制到描述符202a的链接地址字段来添加到活动列表。如果由描述符信道块108a控制的硬件数据信道的活动列表不为空,那么描述符信道块108a在描述符201a之前将描述符201a的存储器地址写入或复制到被推送到那个特定硬件数据上的最后一个描述符的链接地址字段中。如果硬件数据信道的活动列表为空,那么描述符信道块108a将描述符201a的存储器地址从FIFO寄存器复制到被指定存储将被处理的下一个描述符的寄存器。
描述符信道块108a使用描述符201a的存储器地址从DMEM检索描述符201a的描述符数据。描述符信道块108a通过检查描述符的WAIT字段来确定是否需要满足等待条件。在图2中,要求满足WAIT条件并由Event0的值控制。描述符信道块108a通过确定Event0的值来确定是否满足等待条件。在实施例中,描述符信道块可以通过检查包括描述符信道块可以使用或被编程为使用的所有事件的值的寄存器来确定事件的值。如果由WAIT字段指定的事件处于指定的WAIT值,那么满足WAIT条件。一旦满足WAIT条件,描述符信道块就不必再为处理描述符而等待。
响应于确定满足WAIT条件,描述符信道块108a继续处理描述符并确定描述符的类型。在实施例中,描述符信道块基于“Desc Type”字段中的编码值确定描述符的类型。在图2中,描述符201a是读描述符,其中源存储器是DDR存储器并且目的地存储器是核心处理器103a或DMEM单元102a本地的DMEM。描述符信道块108a向DMAD 106a的读描述符接口发送描述符201a的控制信息,包括“Src Auto Inc Allow”字段的值、源计数器值(因为设置了“SrcAuto Inc Allow”字段值),以及执行在描述符中指定的任何操作可能需要的任何其它信息。在实施例中,描述符信道块108a可以向DMAD 106a的读描述符接口发送描述符的控制信息的片段以及执行在描述符中指定的任何其它操作所需的任何其它数据。每个片段的大小取决于连接描述符信道块108a的总线接口与DMAD 106a的读描述符接口的宽度。描述符信道块108a还确定是否需要基于“Src Auto Inc Allow”字段来调节或修改描述符中指定的源地址。
描述符信道块可以使用描述符的字段的一个或多个值来确定是否需要自动调节或修改源地址。在图2中,描述符信道块108a确定需要基于“Src Auto Inc Allow”字段的值自动调节或修改源地址。描述符信道块108a还基于“SrcAddrInc”字段的值确定“CounterInc”字段中指定的计数器的值是否应当递增。由描述符201a的“Counter Inc”字段指定的计数器是“src”计数器。因此,描述符信道块108a还向DMAD 106a的读接口发送“src”计数器的计数器值。每个硬件数据信道与用于调节或修改源地址的特定计数器相关联,该源地址存储在寄存器中并由控制硬件数据信道的描述符信道块管理。图2的示例中的“src”计数器是与由描述符信道块108a控制的硬件数据信道相关联的计数器。在图2中,“src”计数器值在第一次被发送时为零。在将“src”计数器的值发送到DMAD 106a的读描述符接口之后,描述符信道块108a将“src”计数器的值递增1。
描述符信道块还与目的地计数器值相关联。除“DestAddrInc”字段的值确定目的地计数器是否将递增并且“Dest Auto Inc Allow”字段的值确定描述符中指定的目的地地址是否应当通过偏移值进行修改之外,目的地计数器值以与源计数器值相似的方式递增。“Counter Inc”字段将指定或指示与描述符信道块相关联的目的地计数器。
由DMAX处理描述符
描述符201a数据被发送到仲裁单元112a,然后存储在FIFO寄存器112b中。然后,FIFO寄存器112b将数据发送到读描述符解析器逻辑块121b,然后发送到读描述符解析器逻辑块121b内的寄存器中。在实施例中,如果以片段发送描述符数据,那么描述符解析器逻辑块重新组装描述符数据。
由DMAC处理描述符
描述符读描述符解析器逻辑块121b确定是否应当基于与源地址自动增量字段对应的值来调节描述符数据中指定的源地址。在图2中,“Src Auto Inc Allow”是这种字段并且基于那个字段的值,读描述符解析器逻辑块121b确定应当自动调节或修改源地址。在实施例中,可以根据以下公式自动调节或修改源地址:
新源地址=源地址+源地址计数器值*行*列宽(以字节为单位的大小)
上面的源地址是描述符数据中发送的源地址。计数器值是与描述符数据一起发送的计数器的值,其在图2的示例中为零。行是描述符数据中指定的行数,并且列宽是列的大小(以位为单位)。因此,将相应的值插入上面的公式产生:
=0x0 0000 0000+0*1000*8
=0x0 0000 0000
上面的新源地址与描述符数据中指定的源地址相同,因为有助于确定从源地址的偏移的计数器值为零。这是准确的结果,因为描述符201a表示图2中要求被处理的10000行数据的前1000行。因此,不需要与最初指定的地址的偏移。基于描述符的描述符类型字段中指示的数据移动的方向,读描述符解析器逻辑块121b将描述符201a的控制信息和执行在描述符201a中指定的任何操作所需的任何其它数据发送到数据移动引擎130a的适当的加载引擎块。在图2中,描述符类型字段“Desc Type”指示数据移动是从DDR到DMEM,因此,描述符201a的控制信息和执行描述符201a中指定的任何操作所需的任何其它数据被发送到的是当加载引擎块是数据移动引擎130a的DDR加载引擎块。
数据移动引擎的适当加载引擎块确定描述符数据中指定的源存储器的类型,并基于源存储器的类型生成读请求。在图2中,响应于确定源存储器是DDR存储器,数据移动引擎130a的DDR加载引擎块生成对系统总线接口主块123的读请求。在实施例中,读请求中请求的数据量可以具有最大阈值,并且由数据移动引擎的适当加载引擎块生成的读请求的数量可以部分地基于在一个读请求内可以请求的数据量以及描述符为迭代其处理而请求的数据量的最大阈值。例如,如果最大阈值是256字节,那么数据移动引擎130a的适当加载引擎块将生成32个读请求,以满足描述符201a请求的8000字节数据。
系统总线接口主块123接受读请求并将读请求发送到可以接受该请求的适当存储器单元接口。响应于这些请求,与读请求对应的数据被返回到系统总线接口主块123。与读请求对应的数据从系统总线接口主块123发送到发起该读请求的数据移动引擎的适当加载引擎。数据移动引擎的适当加载引擎基于描述符的描述符类型字段中指示的目的地存储器单元将数据发送到数据移动引擎内的适当存储块单元。在图2的示例中,系统总线接口主块123将数据发送到数据移动引擎130a的DDR加载引擎,并且DDR加载引擎将数据发送到数据移动引擎130a内的DMEM存储块单元。数据移动引擎130a内的DMEM存储块单元将描述符的数据和控制信息与描述符201a中指定的目的地地址和与核心处理器103a相关联的标识符一起发送到DMAX 110a内的FIFO寄存器114b。FIFO寄存器114b使用从DMEM存储块单元发送到FIFO寄存器114b的控制信息中包括的核心处理器标识符将DMEM单元102a识别为与核心处理器标识符相关联的DMEM单元,并且将数据从写接口114a经由DMAD 106a内的DMEM接口块107a发送到DMEM单元102a,以将数据存储在描述符中指定的目的地地址处。
数据操纵操作
在实施例中,描述符201a可以指示可能需要对从源存储器位置请求的表格数据执行一个或多个表格数据操纵操作,诸如聚集、分散(scatter)、聚集-分散或跨步(stride)操作。
聚集操作
聚集操作是一种类型的过滤操作,其中表格数据列内的行的传送取决于该特定行是否满足过滤标准。
位向量或行标识符列表被用于评估特定行是否满足过滤标准。在一些实施例中,位向量内的高位指示应当将表格数据列内的对应行传送到目的地存储器位置。例如,如果位向量是1011,那么表格数据列中的第一、第三和第四行应当被传送到目的地存储器位置。在一些实施例中,行标识符列表可以指向可以被传送到目的地存储器位置的表格数据列内的确切行。因此,在将表格数据存储在目的地存储器位置之前,执行从源存储位置对表格数据的过滤。
分散操作
分散操作允许将表格数据存储在非线性目的地地址处。在实施例中,分散操作使用位向量或行标识符列表和基本目的地地址来确定被传送到目的地存储器位置的表格数据列的每行的目的地地址。在本文被称为聚集-分散操作的聚集和分散操作也可以组合执行。
聚集-分散操作
在聚集-分散操作中,如上所述,在数据飞往目的地地址的同时过滤来自源存储器位置的表格数据,并且结果所得的数据以非线性地址存储在目的地存储器内。在实施例中,使用聚集和分散操作确保满足过滤标准的表格数据列的每行以一定方式存储在目的地存储器中,使得表格数据列的一个经过滤的行到表格数据列的另一个经过滤的行之间的存储器地址偏移反映(mirror)源存储器地址偏移。
跨步操作
跨步操作允许将表格数据从源存储器中的列为主的格式转换成目的地存储器中的行为主的格式。跨步操作还允许将数据从目的地存储器中的行为主的格式转换成源存储器中的列为主的格式。为了执行从列为主到行为主的转换,基于所有感兴趣的表格数据列的每行的字节数来确定步幅。感兴趣的表格数据列将属于特定的数据表。
本文描述的数据移动系统使用在描述符中指定的基本目的地地址和步幅来确定用于表格数据列的每一行的目的地地址。为了从目的地存储器中的行为主执行转换以便将其以列为主的格式存储在源存储器中,数据移动系统使用步幅来确定表格数据列的所有行。例如,为了确定表格数据列的第二行,数据移动系统使用步幅量从以行为主的格式存储在目的地存储器中的数据列的第一行的地址偏移。因此,表格数据存储在源存储器中的特定格式将不在处理那个数据时提供兼容性问题。
表格数据到目的地存储器的传输
在将数据发送到FIFO寄存器114b之后,数据移动引擎130a中的DMEM存储器单元将描述符201a的描述符返回路径发送到DMAC 140中的描述符返回块,其中描述符的描述符返回路径包括DMAD标识符、描述符信道块标识符以及与描述符相关联的描述符标识符。DMAC140中的描述符返回块将描述符201a的描述符返回路径发送到FIFO寄存器114b内的返回的描述符FIFO寄存器。FIFO寄存器114b将描述符201a的描述符返回路径发送到DMAD 106a中的描述符信道块108a。描述符信道块108a设置通知事件,以向核心处理器103a发信号通知描述符201a请求的数据准备好被处理。在图2中,通知事件由描述符201a的“Notify”字段识别,并且是Event0。
描述符返回路径
在处理描述符之前,描述符信道块确定是否存在可以与描述符相关联的任何空闲或可用的描述符标识符。如果描述符信道块确定没有描述符标识符可用,那么描述符信道块一直等到描述符标识符可用。在实施例中,一个或多个寄存器包括所有空闲的描述符标识符。一旦描述符标识符可用,描述符信道块就开始处理描述符并将可用描述符标识符与描述符相关联。在一些实施例中,描述符标识符可以是2位标识符,因此,DMAD内的每个描述符信道块可以一次处理和支持多达四个不同的描述符。与描述符相关联的描述符标识符包括在那个描述符的控制信息内并被发送到DMAC。
此外,描述符信道块在发送到DMAC的控制信息中包括其自己的标识符。在一些实施例中,描述符信道块标识符是一位标识符。例如,那一位中的值零识别DMAD的一个描述符信道块,并且那一位中的值一识别DMAD的另一个描述符信道块。描述符信道块还包括与描述符信道块所在的DMAD相关联的DMAD标识符。在一些实施例中,DMAD标识符可以是5位。
描述符标识符、描述符信道块标识符和DMAD标识符在本文中被统称为描述符返回路径。在一些实施例中,与描述符相关联的标识符可以是位序列,并且位序列的不同子集与描述符标识符、描述符信道块标识符和DMAD标识符对应。例如,与描述符相关联的标识符可以是8位的序列,其中五个最高有效位与DMAD标识符对应、下一位与描述符信道块标识符对应,并且两个最低有效位与描述符标识符对应。
一旦DMAC完成了处理满足描述符中指定的数据请求所需的所有操作,DMAC就为那个描述符配置描述符返回路径。那个描述符的描述符返回路径包括与该描述符相关联并包括在那个描述符的控制信息中的DMAD标识符、描述符信道块标识符和描述符标识符。DMAC经由与始发DMAD相关联的DMAX将描述符返回路径发送到其始发DMAD。与始发DMAD相关联的DMAX内的路由单元基于包括在描述符返回路径中的DMAD标识符来确定始发DMAD,并将描述符返回路径发送到始发DMAD的描述符返回接口块。
始发DMAD的描述符返回接口块基于描述符信道块标识符确定处理那个描述符的描述符信道块,并将描述符返回路径发送到处理那个描述符的描述符信道块。处理那个描述符的描述符信道块基于描述符标识符确定那个描述符的DMEM位置。在实施例中,描述符的DMEM位置与和描述符相关联的描述符标识符之间的关联由处理该描述符的描述符信道块存储在查找表中。
描述符信道块108a确定循环计数是否为零,并且如果循环计数为零,那么描述符信道块108a确定是否将描述符201a添加到由描述符信道块108a控制的硬件数据信道的空闲列表。在实施例中,描述符信道块108a可以基于描述符的数据是否指示应当将特定描述符添加到空闲列表来确定是否将描述符添加到空闲列表。例如,在描述符的数据内可以存在可以具有值1或0的空闲推送字段,以指示应当将特定描述符添加到空闲列表。此外,如果循环计数为零,那么描述符信道块108a还将那个信道的活动计数值递减1。如果循环计数不为零,那么描述符信道块108a对于这个特定迭代终止描述符201a的处理。
遍历受硬件管理的列表
在描述符信道块108a将描述符201a数据发送到仲裁单元112a之后,描述符信道块108a基于描述符201a的数据内的链接地址字段确定DMEM单元102a描述符信道块的活动列表内的下一个描述符的地址。描述符信道块108a从DMEM 102a地址0x5010检索描述符202a的数据。类似于如何处理描述符201a,描述符信道块108a处理描述符202a,并将描述符202a数据与“src”计数器值一起发送到仲裁单元112a,如由描述符202a所指示的。当与202a的数据一起发送时,“src”计数器值是1。在描述符202a数据被发送到仲裁单元112a之后,描述符信道块108a将“src”计数器值递增1。因此,
“src”计数器值现在是2。
描述符202a控制信息和与描述符202a数据一起发送的“src”计数器值存储在FIFO寄存器112b中,然后发送到读描述符仲裁单元121a并存储在读描述符解析器逻辑块121b中。类似于上述方式,读描述符解析器逻辑块121b再次确定应当调节或自动递增描述符数据中指定的源地址。读描述符解析器逻辑块可以根据上述相同的公式调节或修改源地址,即:
新源地址=源地址+源计数器值*行*列宽(以字节为单位的大小)
上面的源地址是在描述符202a数据中发送的源地址。计数器值是与描述符202a数据一起发送的计数器的值,其为1。行是描述符202a数据中指定的行数,并且列宽是以字节为单位的列的大小。因此,将对应的值插入上面的公式会产生:
=0x0 0000 0000+1*1000*8
=0x0 0000 1F40
新源地址现在是0x0 0000 1F40,其中1F40是等同于8000的十六进制值。这是准确的结果,因为描述符202a表示图2中要求被处理的10000行数据的第二个1000行,因此,需要从最初指定的地址开始的偏移。读描述符解析器逻辑块121b将描述符数据发送到数据移动引擎130a的适当的加载引擎块。数据移动引擎130a的适当加载引擎块处理描述符202a数据,类似于描述符201a数据的处理。为描述符202a检索的数据存储在DMEM 102a中在描述符202a中指定的目的地存储器地址处。
描述符202a的DMEM 102a地址从DMAC 140的描述符返回块发送到DMAD 106a的描述符信道块108a,类似于上面发送描述符201a的DMEM 102a地址的方式。描述符信道块108a设置通知事件,以向核心处理器103a发信号通知描述符202a所请求的数据已准备好被处理。在图2中,由描述符202a的“Notify”字段识别的通知事件是Event1。描述符信道块108a再次确定循环计数是否为零,并且如果它是零,那么描述符信道块108a完成描述符的处理,类似于上述针对描述符201a的方式。如果循环计数不为零,那么描述符信道块108a对于这个特定迭代终止描述符202a的处理。
硬件实现的循环机制
在描述符信道块108a将描述符202a数据发送到仲裁单元112a之后,描述符信道块108a基于描述符202a的链接地址字段确定DMEM 102a描述符信道块的活动列表内的下一个描述符的地址。描述符信道块108a从DMEM 102a地址0x5020检索描述符203a的数据。描述符信道块108a确定描述符203a是程序或控制类型描述符,特别是循环类型描述符。描述符信道块108a确定循环计数或迭代计数是否为零,并且如果它不为零,那么描述符信道块108a将循环计数值递减1。如上所述,循环或迭代计数存储在被指定用于存储循环计数值的特定寄存器中,并且描述符信道块从该特定寄存器中检索循环计数值并确定循环计数值是否为零。如果循环计数不为零,那么描述符信道块通过将循环计数值递减1来更新循环计数,并将更新后的循环计数值存储在该特定寄存器中。在图2中,迭代计数值从4开始,因此,第一次描述符203a被处理时,循环或迭代计数为4,并且在它被描述符信道块108a递减之后,循环或迭代计数将是3。
响应于确定循环或迭代计数不为零,描述符信道块108a确定它应当循环回到哪个描述符并重新处理。描述符信道块108a基于指定循环回(loop back)地址的描述符203a确定它应当循环回到哪个描述符,该循环回地址识别应当被再次处理的描述符的DMEM地址。在图2中,循环回地址在描述符203a的“Loop Addr”字段中指定,而DMEM 102a地址0x5000是DMEM 102a内的描述符201a的地址。
描述符信道块108a从DMEM 102a检索描述符201a数据。描述符信道块108a基于事件Event0的值确定是否满足描述符201a的等待条件。在图2中,如果Event0值为0,那么满足描述符201a的等待条件。如上所述,描述符信道块108a预先将Event0的值设置为1,以便向核心处理器103a指示数据可用于在由描述符201a指定的目的地地址进行处理。因此,如果核心处理器103a没有完成其对由描述符201a指定的目的地地址处的数据的处理,那么核心处理器不将Event0清除为0,因此描述符信道块108a必须一直等到Event0值被清除为0(即,设置为0)。
如果Event0值被清除为0,那么描述符信道块108a处理描述符201a,类似于在前面的迭代中处理描述符201a的方式,如上所述。描述符信道块108a继续遍历硬件数据信道的活动列表,并且基于描述符201a的链接地址数据来检索描述符202a数据。描述符信道块108a处理描述符202a,类似于在先前迭代中处理它的方式。描述符信道块108a继续遍历硬件数据信道的活动列表,并且基于描述符202a的链接地址数据来检索描述符203a的数据。
描述符信道块108a再次确定循环计数是否为0。循环计数值为3,因此,描述符信道块108a将循环计数值递减1并再次循环回到描述符201a并再次处理描述符201a。描述符信道块108a继续循环通过描述符,直到循环计数值为0。当循环计数值为0时,描述符信道块108a确定是否应当重置描述符信道块108a的源或目的地计数器。在图2中,描述符203a利用“Src Count Reset”和“Dest Count Reset”指定必须重置硬件数据信道的源和目的地计数器的字段。
描述符信道块108a通过将Event30的值设置为1来通知核心处理器103a循环已经终止或结束,因为在描述符203a中将Event30指定为核心处理器被配置为从描述符203a接收通知的事件。描述符信道块108a还将硬件数据信道的活动列表计数递减1。现在完成了描述符203a的处理,并因此完成了描述符201a和202a的处理。因此,来自源存储器位置的10000行数据已由数据移动系统处理。
使用描述符移动数据表
图3图示了使用描述符将包括四列的整个数据表从源存储器移动到本地DMEM的示例。图3包括四个数据描述符310a、311a、312a、313a和一个控制描述符314a。每个描述符表示存储在源存储器中的数据表的数据的列。图3中的源存储器是数据移动系统外部的DDR存储器。图3中的目的地存储器是DMEM,它在对描述符310a、311a、312a、313a进行编程的核心处理器的本地。为了说明清楚的示例,将使用图1和图2中描述的硬件部件和处理来描述图3。为了说明清楚的示例,图3中的描述符也由核心处理器103a编程。
描述符310a在描述符310a的“SrcAddr”字段中指定源存储器中的数据表的第一列的起始地址。类似地,描述符311a、312a、313a将源存储器中的数据表的第二、第三和第四列的起始地址指定为它们相应的源地址。在“DestAddr”字段内,描述符310a、311a、312a、313a中的每一个指定DMEM 102a内的不同的目的地地址,DMEM在核心处理器103a的本地。描述符314a是循环描述符,其指示处理这些描述符的描述符信道块应当循环回到描述符310a(存储在描述符314a中指定的DMEM 102a地址处的描述符)。
DMAD 106a的描述符信道块之一将把描述符310a、311a、312a、313a,314a添加到由描述符信道块控制的硬件数据信道的活动列表,类似于图2中的描述符信道块向活动列表添加描述符的方式。描述符信道块将以描述符310a开始处理图3的描述符。描述符310a的处理类似于图2和图1中描述的描述符处理的方式。
但是,与图2不同,在描述符310a数据被发送到仲裁单元112a之后,描述符信道块的源地址计数器将不递增,因为描述符310a没有指定源地址计数器应当递增。这对于图3是准确的,因为描述符311a、312a和313a的源地址对于每个是不同的,因为每个描述符正在处理数据表的不同数据列,在循环的第一次迭代中,描述符311a、312a和313a中的每一个应当从描述符中指定的源地址开始处理它们相应的数据列,而无需与源地址的任何偏移。类似地,描述符311a、312a也没有指定应当递增源地址,以便确保跟随它们的描述符从正确的存储器地址开始处理它们相应的数据列。
描述符313a数据指定源地址计数器应当递增。因此,在将描述符313a的控制信息发送到仲裁单元112a之后,描述符信道块108a的源计数器递增。在发送描述符313a的控制信息的最后一个字节之后递增源地址计数器确保下一次处理描述符310a、311a、312a、313a时,准确地调节、修改或偏移310a、311a、312a、313a中指定的源地址。处理和返回描述符310a、311a、312a、313a,314a的其余方面类似于图1和图2中描述的方式。
因此,数据移动系统可以使用描述符从源存储器复制整个数据表,并将数据表存储在目的地存储器中。
执行数据操纵操作
最初使用聚集操作图示了在将数据从源存储器位置移动到目的地存储器位置的同时执行表格数据操纵操作的方法。如前所述,聚集操作是一种类型的过滤操作,其中表格数据列内的行的传送取决于特定行是否满足过滤标准,并且分散操作允许以非线性目的地地址存储表格数据。稍后将描述其它类型的表格数据操纵操作。
图4图示了用于执行聚集操作的示例描述符。这些描述符包括指定针对列执行聚集操作的数据描述符。数据描述符还可以指定分散操作。可以使用用于过滤行的若干过滤器模式来执行收集或分散操作,一种模式使用行标识符(RID)的列表并且另一种模式使用位向量(BV)。
过滤器模式由DMAD的“scat/gat”寄存器中的值指定。程序描述符被用于配置“scat/gat寄存器”的值。scat/gat寄存器的值不仅指定过滤器模式是RID还是BV,而且还指定DMS存储器中RID或BV的存储地址。使用数据描述符,被用于执行聚集操作的RID或BV从DMEM复制到DMS存储器,或从主存储器复制到DMS存储器。
参考图4,它描绘了四个描述符,程序描述符401a、数据描述符402a和数据描述符403a,以及循环描述符404a。为了说明的目的,将使用图1、图2和图3中描述的硬件部件和处理来描述图4;图4中的描述符也由核心处理器103a编程。描述符被用于使用BV执行聚集操作。
在图4中,核心处理器103a配置用于配置scat/gat寄存器的程序描述符401a。scat/gat寄存器的值指定执行聚集操作的各个方面。描述符401a通过在描述符类型字段中指定DMAD解码为与程序描述符对应的值来指示它是程序描述符。描述符401a通过在“Register”字段中指定scat/gat寄存器来配置scat/gat寄存器值。scat/gat寄存器的值指定使用RID还是BV模式进行过滤,并且如果指定了RID模式,那么指定RID的宽度是多少。
因而,描述符401a通过指定“Mode”字段中的特定值来指定RID还是BV模式用于过滤。在描述符401a中,那个值指定BV模式。如果模式已经是RID,那么描述符401a应当已经指定了RID的宽度。根据实施例,RID的宽度可以是1、2、4或8字节。
描述符401a还指定BV应当驻留的DMS存储器地址。BV可以最初由核心处理器103a在其DMEM单元102a中形成和/或存储。分开的描述符(描述符402a)指定将RID或BV移动到这个DMS存储器地址。
描述符402a在图4中是数据描述符,其指定将BV从DMEM移动到DMS存储器。描述符402a指定BV存储在由“DMEM Addr”字段指定的DMEM位置(即,源存储器位置)处。描述符402a还使用“DMS Addr”字段指定要存储那个BV的目的地地址。“DMS Addr”字段中的值指定DMS存储器150内用于存储BV的存储器位置。将BV(或RID)移动或复制并存储到DMS存储器减少了在执行聚集操作的同时数据移动引擎访问BV(或RID)的等待时间。在实施例中,描述符402a可以指定将BV(或RID)从主存储器或DDR存储器单元移动到DMS存储器。
此外,描述符402a还指示要存储在程序描述符401a和402a中指定的目的地存储器中的BV的长度。在实施例中,要存储的BV的长度基于将被处理的特定描述符中指定的行数,以将BV从DMEM移动到DMS存储器。描述符402a还在“Rows”字段中指定特定位向量包括的位数。
在图4中,描述符403a是数据描述符,其指定要对表格数据的列执行的聚集操作。描述符403a在“Gather”字段内指定应当执行聚集操作。在实施例中,“Gather”字段内的值可以是向DMAD内的描述符信道块指示正在请求对表格数据列执行聚集操作的编码值,诸如位或二进制数。描述符403a的其它字段类似于图2和图3中描述的描述符的字段,并且类似于由图1中所示的DMS处理的描述符。
描述符404a是循环描述符。类似于针对循环描述符314a所描述的那样对其进行配置和处理。
处理聚集操作
在图4中,元素401b、402b、403b和404b分别与对描述符401a、402a、403a和404a执行的操作对应。这些元素的目的是描绘对描述符401a、402a、403a和404a执行的操作的次序。
核心处理器103a配置描述符401a、402a、403a和404a,并将DMEM单元102a内的相应存储器位置发送到DMAD 106a中的描述符信道块之一。例如,核心处理器103a可以将与描述符信道块108a相关联的标识符以及描述符401a的存储器位置发送到DMAD 106a内的FIFO接口。DMAD 106a基于接收到的标识符将描述符401a添加到描述符信道块108a的活动列表。类似地处理其它描述符402a、403a和404a。描述符401a、402a、403a和404a的检索以与关于图1、图2和图3描述的相同方式执行。
在图4中,描述符信道块108a对描述符401a进行解码,并基于描述符401a的描述符类型字段将描述符401a识别为程序描述符。由于描述符401a识别要配置为scat/gat寄存器的寄存器,因此描述符信道块108a将DMAD 106a的scat/gat寄存器配置为指定过滤模式为BV的值,以及DMS 150中将存储BV的地址。
在图4中,描述符信道块108a对描述符402a进行解码,并基于描述符402a的描述符类型字段将描述符402a识别为数据描述符。如上所述,数据描述符的描述符类型字段还指示数据移动的方向,从而识别要从其移动或复制数据的源存储器位置,以及数据要存储到其的目的地存储器位置。描述符402a的描述符类型字段指示数据移动的方向是从DMEM到DMS存储器中的存储器单元,因此,在“DMEM addr”字段中指定的存储器位置是DMEM单元102a内的数据的源存储器位置,并且“DMS addr”字段中指定的存储器位置是用于存储BV的DMS存储器单元内的目的地存储器位置。
路由单元114a基于描述符402a的控制信息将读请求发送到DMEM接口块107a。DMEM接口块107a基于在描述符402a的“DMEM Addr”字段中指定的存储器位置从DMEM单元102a检索BV。在DMEM接口块107a处接收的控制信息包括在描述符402a的“DMEM Addr”字段中指定的存储器位置。DMEM接口块107a生成包括来自DMEM单元102a的BV和描述符402a的控制信息的读响应。DMEM接口块107a将读响应发送到仲裁单元113a。仲裁单元113a基于描述符402a的控制信息将读响应发送到数据移动引擎130a。
数据移动引擎130a将BV存储在用于存储行标识符或BV的DMS的存储器单元中描述符402a的“DMS Addr”字段中指定的存储器位置处。
指定使用BV的数据操纵操作并且在跟在将BV存储在DMS的存储器单元中的描述符之后的描述符的处理可以暂时挂起,直到所有所需的BV都成功存储在DMS的存储器单元中,由此防止使用不完整的BV为指定数据操纵操作的描述符生成读或写请求。
描述符信道块可以基于在当前描述符中指定的等待事件的类型和等待条件临时挂起对正在处理的当前描述符之后的描述符的处理。一种类型的等待事件(在本文被称为“预等待”事件)是向描述符信道块指示指定那个事件类型的描述符的处理直到等待条件(也在那个描述符中指定)被满足才应当开始的等待事件。上面在图2和图3中描述了这种类型的等待事件的示例。另一种类型的等待事件(在本文被称为“后等待”事件)是向描述符信道块指示可以处理指定后等待事件类型的描述符但是描述符信道块直到在具有后等待的描述符中指定的等待条件被满足并且描述符正在执行的操作已完成才能开始处理那个描述符信道块的活动列表中的下一个描述符的等待事件。
图4图示了使用后等待事件来临时挂起描述符信道块的活动列表中其它描述符的处理。在图4中,描述符402a指定事件类型是后等待事件,因此描述符信道块108a(处理描述符402a的描述符信道块)暂时挂起对下一个描述符的处理,直到满足在描述符402a中指定的后等待条件。如上所述,如果在描述符的“WAIT”字段中指定的事件处于描述符的“WAIT”字段中指定的值并且由描述符指定的操作已经完成,那么后等待条件被满足。在图4中,当Event4的值被设置为1时,满足描述符402a的后等待条件。因此,描述符信道块108a(处理描述符402a的描述符信道块)不开始处理描述符信道块108a的活动列表上的下一个描述符(描述符402b),直到Event4的值被设置为1。因此,描述符信道块108a的活动列表中的描述符402a之后的所有描述符都被暂时挂起,直到描述符402a的后等待事件的等待条件被满足并且由描述符402a指定的操作(BV从DMEM到DMS存储器的移动)已经完成。
一旦满足了描述符402a的等待条件,描述符信道块108a就如关于图2和图3所描述的那样遍历其活动列表,并开始处理描述符403a。描述符信道块108a基于描述符类型字段确定描述符403a是数据描述符,并且数据移动的方向是从外部存储器到DMEM单元102a。描述符信道块108a还确定应当对存储到DMEM单元102a中的表格数据执行聚集操作。
如上所述,在表格数据存储在目的地存储器单元中之前,数据移动系统执行数据操纵操作(诸如对表格数据的聚集操作)。因此,在任何表格数据存储在描述符403a中指定的目的地存储器位置的目的地存储器单元中之前,DMAC 140中的数据移动引擎将对从源存储器位置检索出的表格数据执行由描述符403a请求的聚集操作。
描述符信道块108a将包括在描述符403a中指定的聚集操作的描述符403a的控制信息发送到仲裁单元112a。仲裁单元112a基于描述符403a的描述符类型经由读描述符仲裁单元121a向读描述符解析器块121b发送DMAD 106a的scat/gat寄存器的控制信息、在描述符403a中指定的聚集操作,以及与DMAX 110a相关联的标识符。
如上所述,一个或多个数据移动引擎可以与一个或多个DMAX单元相关联,使得DMAC的读描述符或写描述符解析器将包括从一个或多个DMAX单元接收的描述符中指定的任何数据操纵操作的描述符控制信息发送到相关联的数据移动引擎。在图1中,对于大多数数据移动描述符,数据移动引擎130a与DMAX 110a相关联,因此,读描述符解析器121b或写描述符解析器120b将包括在从DMAX 110a接收的描述符中指定的任何数据操纵操作的描述符控制信息发送到数据移动引擎130a。
读描述符解析器121b基于接收到的DMAX标识符向数据移动引擎130a发送来自DMAD 106a的scat/gat寄存器的控制信息、在描述符403a中指定的聚集操作,以及与DMAX110a相关联的标识符,因为数据移动引擎130a与DMAX 110a相关联。
数据移动引擎基于从读描述符解析器或者写描述符解析器接收的描述符信息来确定要对从源存储器位置移动或复制的表格数据执行数据操纵操作。在图1中,在来自scat/gat寄存器的控制信息中的“DMS Addr”中指定的存储器位置处,数据移动引擎130a检索存储在被指定用于存储BV的DMS的存储器单元中的BV,如图4中所示的序列中详述的。这个控制信息还通知数据移动引擎130a过滤模式是BV。
数据移动引擎130a解析检索出的BV,以便确定是否应当生成对源存储器的读请求。如上所述,位向量内的每一位与存储在源存储器单元中的源存储器位置处的表格数据列中的行对应。每一位的值识别表格数据列中的对应行是否可以存储在目的地存储器单元中,或者是否可以将其滤除,因此不存储在目的地存储器单元中。在实施例中,如果BV中对应位的值为1,那么表格数据列中的行将被存储在目的地存储器单元中,而如果BV中对应位的值为0,那么将滤除表格数据列中的行。
在实施例中,数据移动引擎解析BV,以确定足够数量的连续位的值是否指示它们对应的行将被滤除,使得不生成对于其对应行的读或写请求。在确定是否应当生成对于对应行的读或写请求时,数据移动引擎检查来自对应行的数据的总累积大小是否超过数据的阈值大小。在确定来自对应行的数据的总累积大小时,数据移动引擎可以使用在描述符中指定并发送到数据移动引擎的表格数据列的列宽以及指示其对应的行将被滤除的位数来计算累积大小。通过部分地使用数据的阈值大小来确定是否应当使用读或写请求允许数据移动系统提供对于表格数据列内的特定行集合确定读或写请求的灵活处理。
数据的阈值大小可以部分地取决于可以从源存储器位置发送的每个读或写请求的数据量。例如,如果每个读或写请求可以发送的数据量是256个字节,那么数据的阈值量可以设置为256个字节,并且如果指示其对应行应当被滤除的位的连续数量乘以列宽等于或超过256个字节,那么数据移动引擎可能不会生成读请求。数据移动引擎可以对于与那个连续数量的位集合对应的行跳过读请求的生成,或者对于与位向量中的剩余位数对应的行跳过写请求的生成。因此,当指定聚集操作时由数据移动引擎生成的读或写请求的数量取决于指示其对应的行将被滤除的连续位数,而不仅仅取决于描述符中指定的行数。
在图4中,描述符403a指定列宽为8字节,并且如果阈值数据量是256字节,那么数据移动引擎130a可以确定,如果检索到的BV中的32个连续位的值指示它们在表格数据列中的对应行应当被滤除,那么将不生成读请求。因此,数据移动引擎130a基于BV数据中的位的值生成读请求。数据移动引擎130a将读请求和描述符403a的控制信息发送到系统总线接口主块123。系统总线接口主块123将描述符403a的控制信息存储在系统总线接口主块123内的寄存器中。
系统总线接口主块123将接收到的读请求发送到源存储器单元。对于每个读请求,系统总线接口主块123从源存储器单元接收数据。系统总线接口主块123将来自源存储器单元的表格数据的列和描述符403a的控制信息发送到数据移动引擎130a。数据移动引擎130a至少部分地基于接收到的聚集操作和/或来自系统总线接口主块123的描述符403a的控制信息将表格数据的列发送到聚集操作引擎。
聚集操作引擎基于BV确定接收到的表格数据列中的对应行是否应当存储在目的地存储器单元中。对于BV中的每一位,聚集操作引擎基于该位的值确定对应的行是否应当存储在目的地存储器单元中。聚集操作引擎基于以下公式识别表格数据列中对应的行:
聚集地址=描述符源基地址+(列宽*位号)
上面给出的聚集地址表示与位号(bit number)对应的行的地址。描述符源基地址是描述符403a中指定的源存储器位置。列宽是以字节为单位的列的大小,并且位号表示BV内的位,位号从零开始。例如,如果BV由4位(1011)组成,那么位号零是右起第一位并且值为一。位号一是右起第二位并且值为一。位号二是右起第三位并且值为零。位号三是右起第四位并且值为1。
在实施例中,聚集操作引擎存储从源地址聚集的数据,其中位号的位的值是1。聚集操作引擎将具有对应位值1的行的数据发送到DMEM存储引擎。所聚集的数据被累积并存储在目的地存储器中的连续存储器范围中。如关于图1、图2和图3所描述的,行的数据被发送到DMEM单元102a。
分散操作
与聚集操作类似,描述符可以指定分散操作。从源存储器位置接收的数据被发送到分散操作引擎。BV也被发送到分散操作引擎。分散操作引擎根据以下公式确定表格数据列的每一行的目的地地址:
分散地址=描述符目的地基地址+(列宽*位号)
上面的分散地址表示将被存储的表格数据列的每个合格(qualifying)行的目的地地址。描述符目的地基地址是描述符中指定的地址。列宽是以字节为单位的列的大小,并且位号表示BV内的位,位号从零开始。
描述符可以指定聚集和分散操作两者,以指示应当对来自源存储器位置的数据执行聚集操作,并且应当对执行聚集操作的数据执行分散操作。当指定聚集和分散操作两者时聚集和分散操作的功能类似于上面针对聚集操作和分散操作所描述的方式。
跨步操作
一组描述符(每列一个)可以指定应当对从其源存储器位置到其目的地存储器位置的一组表格数据列执行跨步操作。如上所述的跨步操作将以列为主的格式存储在源存储器位置处的表格数据列变换为以行为主的格式存储在目的地存储器位置处,或者将以行为主的格式存储在源存储器位置处的表格数据列变换为以列为主的格式存储在目的地存储器位置处。
核心处理器可以确定步幅量,以帮助从列为主的格式变换为行为主的格式,或者反之亦然。步幅量是跨感兴趣的所有表格数据列的每行的字节数。例如,如果要从外部存储器单元移动或复制两列表格数据并将其存储到DMEM单元中,那么步幅量是这两列表格数据的列宽的总和。
来自源存储器位置的数据被发送到步幅操作引擎,并且步幅操作引擎根据以下公式将以列为主的格式存储的表格数据变换为行为主的格式:
目的地地址=目的地基地址+(dst count*stride)
上面的目的地地址表示DMEM中的目的地地址,并且目的地基地址表示描述符中指定的目的地地址。dst count表示要移动的列元素的行号,并且stride表示以字节为单位的步幅量。因此,以列为主的格式存储的来自源存储器的每行表格数据将以行为主的格式存储在目的地存储器处。
步幅操作引擎可以根据以下公式将以行为主的格式存储的表格数据变换为列为主的格式:
源地址=源基地址+(src count*stride)
上面的源地址表示DMEM中的源地址,并且源基地址表示描述符中指定的源地址。Src count表示要移动的列元素的行号,并且stride表示以字节为单位的步幅量。因此,以行为主的格式存储在源主存储器位置处的每行表格数据将以列为主的格式存储在目的地存储器处。
对齐的行程(run)长度编码(ARLE)操作
本文描述的数据移动系统允许来自源存储器位置(诸如主存储器或DDR存储器单元)的编码或压缩数据在将数据存储在目的地存储器单元(诸如DMEM单元)中之前被解压缩,并且允许来自源存储器位置(诸如DMEM单元)的未编码或解压缩数据在将数据存储在主存储器或DDR存储器单元中之前进行压缩。
基于描述符的某些字段中指定的值,动态地执行表格数据的压缩和解压缩。基于对应的行程和数据阵列,执行表格数据列的压缩和解压缩。行程包括一个或多个元素,其中每个元素指定重复数据阵列的对应数据元素的次数。压缩采用未压缩的数据列并生成数据阵列和对应的行程阵列;解压缩采用行程阵列和数据阵列并生成未压缩的数据列。当解压缩ARLE压缩数据时,DMS逻辑从主存储器读取数据并和行程阵列并将它们存储在内部DMS存储器缓冲器中。在DMS存储器中缓冲存储在主存储器中的行程和数据阵列避免了对主存储器中相同阵列的多次访问,从而降低了DMS所消耗的总功率,并提高了在DMS内解压缩表格数据的性能。同样,当执行ARLE压缩时,DMS在本地DMS存储器中创建行程和数据阵列,并在本地存储器填充(fill)时将阵列移动到主存储器。使用本地DMS存储器进行压缩具有类似于使用本地DMS存储器进行解压缩所描述的优点。
行程和数据阵列的总大小部分地取决于从源存储器位置移动或复制的行数。阵列的大小还部分地取决于从源存储器位置移动或复制的表格数据列的宽度以及表格数据列的平均压缩比。行程阵列的大小取决于可以存储的最大行程值。在实施例中,行程元素是一个字节宽。例如,如果表格数据列的宽度为2个字节,表格数据的那一列被移动的行数为256,并且平均压缩比为1∶4,那么行程阵列的总大小为256/4或64字节,并且数据阵列的总大小为(256/4)*(表格数据列的宽度)或(256/4)*2或128字节。在执行解压缩时,使用描述符将行程和数据阵列从源存储器位置移动或复制到与ARLE压缩/解压缩块耦合的本地DMS存储器单元。
核心处理器配置辅助类型描述符,以向数据移动系统提供行程阵列的地址。辅助描述符的描述符类型字段包括指示描述符是辅助类型描述符的值。在实施例中,那个值是二进制数的序列,其向描述符信道块指示该描述符是辅助类型描述符。与上述方法类似,描述符信道块对辅助描述符进行解码。与上述方法类似,描述符信道块确定辅助描述符的控制信息。
辅助描述符中提供的行程地址是行程的起始地址。在实施例中,辅助描述符包括“Run Address”字段,并且提供行程地址作为“Run Address”字段的值。在实施例中,行程阵列的宽度限于一个字节。描述符信道块包括辅助描述符的描述符类型和由描述符信道块确定的控制信息内的行程地址。与上述方法类似,描述符信道块将辅助描述符的控制信息发送到数据移动引擎。
由于描述符是辅助描述符,因此数据移动系统不将任何数据从源存储器位置移动到目的地存储器位置。相反,数据移动系统存储在辅助描述符中提供的值,以使用它来处理跟在辅助描述符之后的数据描述符。因此,基于控制信息并且特别是描述符类型,数据移动引擎确定描述符是辅助描述符并将控制信息中提供的行程地址存储在寄存器中,并且不向系统主总线块接口生成从行程地址位置检索行程阵列的任何读请求。
在配置辅助类型描述符之后,由核心处理器配置的紧接着下一个描述符是数据描述符。在数据描述符之前的辅助类型描述符中提供的信息将用于处理该数据描述符。数据描述符在源存储器单元(诸如主存储器或另一个存储器单元)中提供对齐的行程长度编码的表格数据的起始地址。这就是前面段落中称为数据阵列的内容。这个数据描述符的“Rows”字段包括关于在对齐的行程长度编码的表格数据被解码之后将产生的行数的信息。数据描述符的“Width”字段包括指示数据阵列的起始地址处可用的数据阵列的列宽的值,该值在数据描述符中提供。
跟在辅助描述符之后的数据描述符发起表格数据的运行长度对齐解码所需的行程阵列的移动。数据移动引擎为行程阵列生成读请求,其中包括在读请求中的源地址是来自辅助描述符的行程地址,该地址存储在数据移动引擎可访问的寄存器中。数据移动引擎将读请求发送到系统总线接口主块。数据移动引擎还生成对数据阵列的读请求,并将读请求发送到系统总线接口主块。
系统总线接口主块从它们相应的源存储器位置检索行程和数据阵列,类似于上述方法。系统总线接口主块将阵列发送到数据移动引擎。数据移动引擎使用行程阵列解码数据阵列。解码的行程长度对齐的编码数据存储在数据描述符中指定的目的地存储器位置,类似于上述方法。在一个实施例中,目的地存储器位置可以在与数据描述符的始发描述符信道块相关联的DMEM(诸如图1中的102a)中,或者在DMS存储器中,用于后续DMS处理(图1中的150)。
数据操纵操作块
图5图示了数据操纵操作引擎的示例布置。为了说明的目的,使用图1的元素示出了数据操纵操作的清楚示例。图5描绘了每个数据移动引擎130a、130b、130c和130d内的多个数据操纵操作块。
图5包括步幅操作块509、分散操作块510、聚集操作块511和ARLE解压缩块512。如上所述,系统总线接口主块123将数据请求转发到源存储器位置并且还从源存储器位置接收包括表格数据在内的数据。系统总线接口主块将响应于读请求而从源存储器位置接收的数据以及请求该数据的描述符的控制信息发送到仲裁单元516。仲裁单元516包括多路复用器516a和仲裁器516b。多路复用器单元516a将从源存储器位置接收的数据和描述符的控制信息发送到路由单元514。
基于从多路复用器516a接收的控制信息,路由单元514将从多路复用器516a接收的数据发送到数据操纵操作块509、510、511、512中的任一个或发送到包括多路复用器502a和路由控制器502b的路由单元502。例如,如果从多路复用器516a接收的控制信息不指示要执行任何数据操纵操作,那么从多路复用器516a接收的表格数据和控制信息被发送到多路复用器502a。因此,当不要求执行数据操纵操作时,数据移动系统提供跳过一个或多个数据操纵操作块而不是浪费时钟周期或数据操纵操作块资源的灵活性。
类似地,如果从多路复用器516a接收的控制信息指示一个或多个数据操纵操作,那么从多路复用器516a接收的表格数据和控制信息被发送到适当的数据操纵操作块。当控制信息指示要对从多路复用器516a接收的数据执行多于一个数据操纵操作时,路由单元514可以配置有将对表格数据集合执行数据操纵操作的特定次序。
将对表格数据集合执行数据操纵操作的示例次序是首先由ARLE操作块对表格数据进行解压缩,如果与表格数据相关联的控制信息指示将要执行这种操作的话。然后,如果控制信息指示应当执行聚集操作,你们对解压缩的表格数据执行聚集操作。在聚集操作之后,如果控制信息指示要执行分散操作,那么对聚集操作之后剩余的表格数据执行分散操作。最后,如果控制信息指示应当执行跨步操作,那么对执行了分散操作的表格数据执行跨步操作。数据操纵操作的这个示例次序在图5中示出。
在图5中,路由单元514被配置为,如果从多路复用器516a接收的控制信息指示应当解压缩表格数据,那么首先将从多路复用器516a接收的表格数据路由到ARLE解压缩块512。ARLE解压缩块512将解压缩的表格数据和相关联的控制信息发送到路由单元508。路由单元508基于控制信息确定是否请求或要求附加的数据操纵操作,并相应地发送数据。假定控制信息指示还应当执行聚集操作,那么路由单元508将由ARLE解压缩和控制信息产生的表格数据发送到多路复用器515c,多路复用器515c将其发送到聚集操作块511。
聚集操作块511执行如上所述的聚集操作,并将结果所得的表格数据和控制信息发送到路由单元507。路由单元507确定控制信息是否指示对表格数据执行任何其它数据操纵操作。在实施例中,路由单元507仅检查控制信息是否指示要执行分散或跨步操作,因为次序中的下一个操作是分散操作和/或跨步操作,而不是ARLE操作。此外,路由单元507可以向分散操作块510或跨步操作块509发送,但是不能向ARLE解压缩块512发送。
假定控制信息指示要执行跨步操作,那么路由单元507将结果所得的表格数据和控制信息发送到多路复用器515a。多路复用器515a将表格数据和控制信息发送到跨步操作块509。因此,完全跳过分散操作块510,从而节省了分散操作块510的资源。跨步操作块509将结果所得的表格数据发送到路由单元505。路由单元505基于控制信息中指示的目的地存储器位置将结果所得的表格数据和控制信息发送到多路复用器501a或多路复用器502a。类似地,如果控制信息指示不请求或不要求其它数据操纵操作,那么基于目的地存储器位置,路由单元506、507、508可以将数据从它们相应的数据操纵操作块发送到多路复用器501a或多路复用器502a。
为多路复用器501a发送的数据的目的地是DMS存储器。数据最初在数据对齐/累积器503中对齐并累积,数据对齐/累积器503将数据写入DMS存储器内的目的地存储器位置。仲裁器501b是用于多路复用器501a的仲裁器。
为多路复用器502a发送的数据的目的地是DMEM。数据在数据对齐/累积器504中对齐并累积,数据对齐/累积器504将数据写入DMEM存储器内的目的地存储器位置。仲裁器502b是用于多路复用器502a的仲裁器。
因此,上述每个数据操纵操作块的输出可以级联到其它数据操纵操作块之一的输入中。例如,可以将来自聚集操作块的输出作为输入馈送到分散操作块中。类似地,来自ARLE压缩/解压缩块的输出可以被馈送到聚集、分散或跨步操作块的输入中。此外,数据移动引擎可以基于由描述符提供的控制信息跳过一些或所有数据操纵操作块。
最后,对于不同的描述符,数据操纵操作块可以各自对表格数据上的数据操纵操作并发地执行(即,在相同的时钟周期中)。例如,路由单元514将从用于第一描述符的多路复用器516a接收的表格数据路由到ARLE解压缩块512。ARLE解压缩块512解压缩表格数据并将解压缩的表格数据和用于描述符的相关联的控制信息发送到路由单元508。路由单元508将由ARLE解压缩得到的表格数据和用于第一描述符的控制信息发送到多路复用器515c。
多路复用器515c将表格数据发送到聚集操作块511。同时,路由单元514将从用于第二描述符的多路复用器516a接收的表格数据路由到ARLE解压缩块512。在聚集操作块511对第一描述符的表格数据执行聚集操作的同时(即,在相同的时钟周期内),ARLE解压缩块512解压缩用于第二描述符的表格数据。
在不执行软件程序的情况下移动数据和执行数据操纵操作的方法
图6图示了使用硬件电路系统移动数据而不执行软件的示例处理。在实施例中,针对图6描述的操作可以由图1中描述的数据移动系统执行。
在步骤601a和601b中,响应于特定存储器位置被推入可由第一电子电路集合访问的第一寄存器空间内的第一寄存器,所述第一电子电路集合访问存储在该特定存储器位置处的描述符。在实施例中,特定存储器位置可以是在对描述符进行编程的核心处理器本地的DMEM内的存储器地址。在实施例中,第一电子电路集合可以是图1中描述的任何DMAD的电子电路组。
在步骤602中,第一电子电路集合基于描述符确定指示要对表格数据执行的所述一个或多个数据操纵操作的控制信息。在实施例中,描述符可以指定所述表格数据的源存储器位置和目的地存储器位置。在一些实施例中,源存储器位置可以在主存储器(诸如DDR)内,并且目的地存储器位置可以在DMEM内,如图1中所描述的。在一些实施例中,源存储器位置可以在DMEM内,并且目的地存储器位置可以在主存储器中。在实施例中,描述符可以指定表格数据列的宽度、表格数据的行数,以及对数据列执行的一个或多个数据操纵操作。
在步骤603中,第一电子电路集合使用硬件数据信道将控制信息发送到第二电子电路集合,以执行一个或多个数据操纵操作。在实施例中,第二电子电路集合可以是图1中描述的DMAC内的电子电路组。在实施例中,如图1中所描述的单个DMAC可以处理来自图1中所描述的多个DMAD单元的指令。因此,因为单个DMAC服务于多个DMAD单元,所以本文描述的数据移动系统显著减少了移动数据所需的门计数、面积和功率。
在步骤604a中,根据控制信息,所述第二电子电路集合从源存储器位置检索所述表格数据。在实施例中,源存储器位置可以由描述符指定。在步骤604b中,第二电子电路集合将一个或多个数据操纵操作应用于所述表格数据,以生成数据操纵结果。在实施例中,在将目的地存储器位置中的表格数据以持续的高带宽存储成核心处理器期望的格式之前执行数据操纵操作。在步骤604c中,第二电子电路集合使所述数据操纵结果存储在目的地位置处。在实施例中,目的地位置可以由所述描述符指定。
分区
行的分区以三个阶段执行,在本文中称为分区阶段。本文使用示例的列集合来图示分区阶段,其在图7A中描绘。图7B描绘了分区阶段。分区阶段至少部分地由DMAC 140的部件执行。图7C是描绘DMAC 140的视图的图,该视图突出显示参与分区的部件。
一般而言,分区涉及将列从主存储器移动到DMS存储器150(具体而言,列存储器774),DMS存储器150实际上是中间存储器,在那里列被分级,以在核心处理器的暂存器器之间被分区。对于要分区的每一行,生成标识符,该标识符识别通过分区向其分配行的核心处理器。所生成的标识符在本文被称为核心处理器标识符(CID)。将行移动到由行的相应CID识别出的核心处理器的DMEM。
参考图7A,它描绘了存储在主存储器中的四列,键列key1、键列key2、有效载荷列pay3和有效载荷列pay4,它们一起包括行715。这些列中的每一列可以连续地存储在主存储器中,或者可以存储在连续存储器的多个“块”中。键列是具有用于生成CID的值的列。有效载荷列不用于生成CID。
一般而言,为了对行进行分区,数据移动系统101按行的子集对行进行分区。例如,如果行715包括1k行(1024行),那么各自包括256行的7个子集由数据移动系统101分区在一起。
分区阶段
图7B描绘了根据本发明实施例的分区阶段。参考图7B,在第一分区阶段721(在本文被称为“DMS加载阶段”)中,行的子集从主存储器加载到DMS存储器150中。要加载的行应当包括至少一个键列。
在第二分区阶段722(在本文被称为“CID生成阶段”)中,基于在DMS加载阶段中加载的一个或多个键列,生成CID列表。为驻留在DMS加载阶段中的子集的每一行生成CID并与其相关联。
在第三分区阶段723(在本文被称为“核心分区阶段”)中,行的子集在核心处理器之间分布。每行被移动到由行的相应CID识别的核心处理器。
分区描述符
数据移动系统101被配置为通过使用链接的描述符来对行进行分区,在本文被称为分区链。在分区链内,对于每个分区阶段使用不同的链接描述符集,每个集合在本文被称为分区子链。当描述符由数据移动系统101(例如,由DMAD)通过将Link Addr字段设置为引用相同的或另一个链或子链的另一个描述符来链接时,描述符在本文被称为链或子链。使用图7C中描绘的数据移动系统101的部件对行进行分区。在行715的上下文中图示了数据移动系统101对行的分区。图7D中描绘了可以用于分区的说明性分区链730。
在图7D中,分区链730可以由数据移动系统101内的一个或多个核心处理器中的任何一个生成。一旦由核心处理器生成,分区链就经由DMAD转发到DMAC 140,以便以先前为描述符描述的方式处理。为了说明的目的,核心处理器104g正在生成分区链730,并且核心处理器104g使用DMAD 115g以图7D中所描绘的次序将分区链730的描述符转发到DMAC 140以供执行。
参考图7D,DMS加载子链751包括数据描述符731、数据描述符732、数据描述符733和数据描述符734。DMS加载子链751中的数据描述符导致DMS加载阶段的执行。这些数据描述符中的每一个指定主存储器中用于行715的子集的不同列的源地址,以及列存储器774内的不同目的地地址,DMS存储器150内的存储器区域。每个数据描述符还指定256作为移动到DMS存储器150的行数。数据描述符731用于列key1,数据描述符732用于列key2,数据描述符733用于列pay3,并且数据描述符734用于列pay4。
数据描述符731包括将列key1识别为键列的属性,在本文被称为键列标签。数据描述符732包括将列key2识别为键列的键标签。
当具有键标志的数据描述符被转发到DMAC 140时,它最初由读描述符解析器逻辑块121b处理。读描述符解析器逻辑块121b通知HARE引擎773接收具有键标志的数据描述符。HARE引擎773是一组电子电路,其基于由键列寄存器771指示的一个或多个列来生成散列值和/或CIDS。键列寄存器771是FIFO寄存器。当HARE引擎773被通知数据描述符731时,HARE引擎773将如数据描述符731指定的、在列存储器774中保持列key1的地址和列key1的宽度添加到键列寄存器771。对于数据描述符732,键列寄存器771中的条目以相同的方式添加。
HARE描述符
CID生成子链752包括一个描述符,HARE描述符735。HARE描述符735指定基于由键列寄存器771识别出的键列生成CID。HARE描述符735包括各种字段,每个字段指定生成CID的方面。HARE描述符由读描述符解析器逻辑块121b转发到HARE引擎773,HARE引擎773相应地生成CID。
图7E示出了CID阵列717。HARE引擎773在执行HARE描述符735时生成CID阵列717。CID阵列717中的每个元素与行715中的行对应,并且在完成执行HARE描述符735时保持用于715中的每行的CID。CID 717存储在CID存储器776中。
HARE描述符735包括指定用于生成CID的算法的字段。根据实施例,可以指定三种算法中的一种,它们是Radix、Radix/Hash和Range。
在RADIX算法下,由键列中的连续位位置范围表示的值实际上被用作CID。RADIX寄存器777指定位位置的范围,并且键列寄存器771指定键列。例如,为了识别32个核心处理器,RADIX寄存器777存储指定位位置范围0至7的值。对于列存储器774中键列中的行的列值,HARE引擎773将CID阵列717中的对应元素设置为列值的位0至7的值。
在RADIX/HASH算法下,CID实际上是通过将RADIX算法应用于从一个或多个键列生成的散列值而生成的。具体而言,包含散列值的散列值列是使用由键列寄存器771识别出的一个或多个键列生成的。散列值列716被用于生成CID阵列。散列值列716存储在散列列存储器775中,位于由HARE描述符的字段指定的地址处。散列列包含用于一个或多个键列中每一行的散列值。散列列的位范围被用于为CID阵列生成CID,位范围由RADIX寄存器777指定。
例如,HARE描述符735中的字段指定用于生成CID的RADIX/HASH算法,并且RADIX寄存器777指定位位置0-4。从列key1和key2的第一行,HARE引擎773生成散列值并将该散列值存储为散列列716中的第一行。散列列716存储在散列列存储器775中。这个散列值的前五位作为值存储在CID阵列717中的第一行中。从key1和key2的第二行,HARE引擎773生成散列值并将该散列值存储为散列列716中的第二行。这个散列值的前五位作为值存储在CID阵列717中的第一元素中。
RANGE算法
在范围分区下,通过将键列的行中的列值与可配置数量的递增范围值进行比较来生成行的CID。如果可配置数量的范围值是“R”,那么该比较导致每行被置于R范围之一当中。然后,通过使用依据存储在一个或多个范围配置寄存器中的“范围到CID映射”分配给范围的CID来确定行的CID。根据实施例,范围配置寄存器在DMAC 140中并且包括用于每个CID的范围配置寄存器,其中CID表示核心处理器。每个范围配置寄存器与范围相关联并存储映射到那个范围的CID。使用程序描述符对配置寄存器进行编程。实际上,每个范围配置注册都在范围到CID映射中保存将那个范围映射到CID的条目。
可以被编程到范围配置寄存器中的范围到CID映射是灵活的。多个范围可以被映射到相同的CID,或者多个CID可以被映射到相同的范围。并非每个CID都需要映射。
当范围被映射到多个CID时,每当HARE引擎773基于键列中的列值确定范围时,都以线性递增的方式分配CID,从将那个范围映射到CID的条目开始并递增CID,直到它比分配给下一个范围的CID小一。当已知一个范围将具有比其它范围更多的匹配时,这种技术可以被用于帮助减少CID偏斜。当与那个范围存在匹配时,不是一次又一次地使用单个CID,而是使用多个CID,并且使用它们使得到那些CID的分布是相等的(even)。
用于分区的描述符
一旦为HARE引擎描述符生成了CID阵列,在结束针对行集合的CID生成阶段之后,核心分区阶段就可以开始。核心分区描述符被用于为核心分区阶段配置数据移动系统101。图7D描绘了核心分区子链753,其包括核心分区描述符。核心分区子链753包括核分区描述符741、核心分区描述符742、核心分区描述符743、核心分区描述符744和核心分区描述符745。描述符741、核心分区描述符742、核心分区描述符743、核心分区描述符744和核心分区描述符745中的每一个是用于将相应列从DMS存储器150分区到DMEM存储器的数据描述符,相应列根据CID阵列717中的CID在核心处理器之间分区。每个描述符包括指定根据CID阵列717对相应列进行分区的分区标志属性。因此,核心分区描述符741、742、743、744和745在本文中被称为核心分区描述符。
这些分区描述符中的每一个识别要在核心处理器之间分区的列。Source Addr通过引用列存储器774中的列地址来识别列。核心分区描述符741识别列key1,核心分区描述符742识别列key2,核心分区描述符743识别列pay3,核心分区描述符744识别列pay4。每个描述符还指定相应列的宽度。核心分区描述符745具有设置为指示核心分区描述符745是分区子链753中的最后一个分区描述符的属性。
核心分区描述符745识别散列列716。描述符在被执行时使得散列列716在数据移动系统101的核心处理器之间进行分区。实际上,包括从行715的其它列生成的散列值的列被添加到行715。
每个分区描述符指定DMEM中的目的地地址(即,在Destination Addr中)。目的地地址是DMEM存储器中的区域,在本文被称为列FIFO缓冲器。对于每个核心分区描述符,数据移动系统101中的核心处理器在目的地地址处的暂存器存储器中具有相应的列FIFO缓冲器。
分区引擎772沿着连接到分区引擎772和核心处理器的相应DMEM接口块的“分区数据路径”发送分区到核心处理器的行。分区数据路径包括数据移动引擎中的数字电路系统和核心处理器的相应DMAD的FIFO寄存器。核心处理器的相应DMAD块接收被分区到那个核心处理器的行715的行,并且经由核心处理器的相应DMEM接口块将行放入那个核心处理器的相应列FIFO缓冲器。例如,分区引擎772沿着数据移动引擎130a和FIFO寄存器114b中的分区数据路径发送分区到核心处理器103a的行。DMAD 106a接收行并经由DMEM接口块107a将行放入核心处理器103a的相应列FIFO缓冲器。以这种方式,核心处理器103a通过分区引擎772接收分区到核心处理器103a的行。
当核心处理器的DMAD块将核心分区描述符转发到DMAC 140时,读描述符解析器逻辑块121b将该核心分区描述符转发到分区引擎772。然后,分区引擎772根据CID阵列717分区由分区描述符识别出的列。
例如,假设CID阵列717中的前四个元素包含以下CID:0、6、16、0,它们分别识别核心处理器103a、103g、104a和103a。为了处理核心分区描述符741,分区引擎772读取列key1的第一行和来自CID阵列717中的第一个元素的第一CID值,并将列key1的第一行转发到核心处理器103a,核心处理器103a由第一CID值0识别。核心接收分区的数据,将行放在102a的列FIFO缓冲器中由核心分区描述符741的字段Dest Addr指定的地址处。分区引擎772将列key1的第二行转发到核心处理器103g,如由CID值6识别的。核心接收分区的数据,将行放在102g的由核心分区描述符741的字段Dest Addr识别的列FIFO缓冲器中。除了它被添加到核心处理器104a的列FIFO缓冲器之外,第三行以类似的方式处理。
分区引擎772将列key1的第四行转发到核心处理器103a,如由CID阵列717的第四个元素中的CID值0识别的。核心接收分区的数据,将那行添加到102a的列FIFO缓冲器,其已经保持来自列key1的第一行。
分区引擎772以类似的方式处理核心分区描述符742、743、744和745。但是,要注意的是,用于这些描述符的行被放置在在核心分区子链753的每个分区描述符之间不同的列FIFO缓冲器中。对于核心分区描述符745,从散列列存储器775,并且具体而言是从散列列716,获得散列值的行。
子缓冲
为了使核心处理器处理针对核心分区子链被分区到那个核心处理器的行,那个核心处理器必须能够确定何时分区的行被存储在核心分区子链的相应列FIFO缓冲器中。
根据实施例,当一批一行或多行已经完全添加到列FIFO缓冲器时,通知核心处理器。批大小(即,行数)是可配置的,并且可以被设置为1。可以通过使用程序描述符设置批大小寄存器来配置批大小。批大小寄存器驻留在每个DMAD块中。DMAD块的批大小寄存器也可以由DMAD块的相应核心处理器通过经由配置接口直接写到批大小寄存器来配置。
每个列FIFO缓冲器都被视为环形缓冲器。对于特定的核心处理器,相应的列FIFO缓冲器实际上与相同的尾索引和头索引相关联。尾索引指定核心处理器的任何相应列FIFO缓冲器中的第一个未读行的索引(以FIFO次序)。头索引指定应当将行添加到任何列FIFO缓冲器的索引。
如将更详细描述的,DMS 101的电子电路系统管理关于列FIFO缓冲器的流控制的各方面,包括在每个核心处理器的基础上维护尾索引和头索引,并防止“缓冲器溢出”,即,防止覆写任何核心处理器的列FIFO缓冲器中未读的行。这种流控制可以包括停止将分区的行分布到列FIFO缓冲器,以防止缓冲器溢出。
对于为针对核心处理器的核心分区子链分区的特定行集合,尾索引和头索引响应于将行添加到用于被标记为核心分区子链中最后一个描述符的分区描述符的“最后一个”列FIFO缓冲器而被更新。尾索引和头索引被用于核心分区子链的所有列FIFO缓冲器,并且在将整行添加到所有这些列FIFO缓冲器之前不会改变。当行被添加到最后一个列FIFO缓冲器时,行被完整地添加。
通知核心处理器向相应的列FIFO缓冲器添加行(或尾索引的更新)需要一定量的开销。当添加一批多行时,通过通知核心处理器可以减少开销。如前面所提到的,批大小是可配置的。当多个行的数量被添加到相应的列FIFO缓冲器时,其中该数量等于配置的批大小,核心处理器被通知。
子缓冲器
当批大小大于一时,列FIFO缓冲器被有效地划分为子缓冲器。当等于批大小的多行被添加到最后一个列FIFO缓冲器并通知核心处理器时,包括那个数量的行的子缓冲器可供核心处理器用于处理。因此,批大小在本文中被称为子缓冲器大小。
图8A描绘了说明性列FIFO缓冲器802a,其保持分区到核心处理器103a的用于核心分区描述符745的行,以及驻留在DMEM单元102a中的行。列FIFO缓冲器802a包括256行。列FIFO缓冲器802a的子缓冲器大小是64。因此,列FIFO缓冲器802a包括四个子缓冲器:子缓冲器811、子缓冲器812、子缓冲器813和子缓冲器814。
DMEM单元102a中用于核心分区描述符741、742、743和744的列FIFO缓冲器也具有相同大小的子缓冲器。
当列FIFO缓冲器802a的子缓冲器811被填充,并且它和其它列FIFO缓冲器的相应的其它子缓冲器可用于让核心处理器处理时,通知核心处理器并向其提供尾索引。尾索引指向子缓冲器中的第一行,因此在本文被称为子缓冲器索引。子缓冲器索引指向列FIFO缓冲器中尚未由核心处理器处理的行集合。给定子缓冲器大小,核心处理器为每个列FIFO子缓冲器处理以子缓冲器索引指向的行开始的那个数量的行。
索引(诸如子缓冲器索引、尾索引和头索引)是指列FIFO缓冲器内行的顺序位置。为了使用索引访问任何特定列FIFO缓冲器中的行,将索引解析为存储器地址。根据软件的执行,核心处理器使用列FIFO缓冲器的基本存储器地址(如在相应核心分区描述符的Destination Addr字段中指定的)、列的宽度根据以下公式计算用于行的存储器地址,该公式假设第一行的索引值为零。
行存储器地址=基本存储器地址+(索引*列宽)
因此,以这种方式,索引可以被用于识别要在每个列FIFO缓冲器中访问的行(或行集合的开始)。
行处理和流控制
根据本发明的实施例,DMEM接口块的电子电路系统被配置为用于处理每个列FIFO缓冲器的流控制的各方面。流控制的这些方面包括:(1)维护被标记为最后一个分区描述符的分区描述符的每个列FIFO缓冲器的尾索引和头索引,(2)当已经用行填充子缓冲器时通知核心处理器,以及(3)向分区引擎772发信号通知停止分区和分布行,以防止列FIFO缓冲器溢出。
执行软件的核心处理器也参与处理列FIFO缓冲器的流控制的各方面。这些包括向相应的DMEM接口块发信号通知子缓冲器已被完全读取、处理和/或以其它方式可用于接收新的分区的行。
图8B是描绘由核心处理器103a和DMEM接口块107a执行以处理由分区引擎772转发到核心处理器103a的行的操作的图。
参考图8B,在820处,核心处理器103a从DMAD DMEM接口块107a接收已填充最后一个列FIFO缓冲器的子缓冲器的通知以及子缓冲器索引。在822处,核心处理器103a处理由子缓冲器索引识别的子缓冲器中的行,其不仅包括用于核心分区描述符745的最后一个列FIFO缓冲器,而且包括用于核心分区描述符741、742、743和744的其它列FIFO缓冲器,在823处,核心处理器103a发送子缓冲器已被完全处理的通知。
在824处,核心处理器103a等待子缓冲器可用的下一个通知。在等待的同时或代替等待,核心处理器可以执行其它操作和工作。
DMEM接口块107a执行操作830-838。在830处,DMEM接口块107a从分区引擎772接收被分区到核心处理器103a的行。为核心分区子链753中的每个分区描述符接收一列行;DMEM接口块107a用这些行填充相应的列FIFO缓冲器。为核心分区子链753接收的最后一列行是用于最后一个核心分区描述符745的行。
在832处,在添加等于或大于相应列FIFO缓冲器的子缓冲器大小的最后一列行的数量之后,DMAD DMEM接口块107a向核心处理器103a发送子缓冲器已被填充的通知以及子缓冲器索引。
DMEM接口块107a维护子缓冲器索引和头索引。这种维护包括执行环形缓冲器所需的任何环绕(wrapping around)操作。
关于头索引,当每一行被添加到用于核心FIFO分区子链753中的第一分区描述符的列FIFO缓冲器中时,DMEM接口块107a递增头索引。头索引的值实际上控制是否停止向列FIFO缓冲器添加新行,以防止缓冲器溢出。防止头索引的值达到子缓冲器索引的值。
在834处,DMEM接口块107a检测头索引与子缓冲索引之间的差异是否满足“满标准”。满标准是基于头索引与子缓冲器索引之间的阈值差异。一旦差异等于或小于阈值,就满足了满标准。一旦确定满足了满标准,在836处,DMEM接口块107a就向分区引擎772发信号通知停止分区。具体而言,DMEM接口块107a对相应的分区数据路径进行反压,并且当分区数据路径变满时,分区引擎772停止分区。满标准所基于的阈值差异可由DMAD寄存器使用程序描述符或由给定DMAD的相应核心处理器通过配置接口写入寄存器来配置。
在838处,响应于核心处理器103a已经处理了子缓冲器的行的通知的接收,子缓冲器索引由DMEM接口块107a递增。如果DMEM接口块107a已检测到满足了满标准,那么在子缓冲器索引递增之后重新评估标准。当DMEM接口块107a检测到不再满足满标准时,DMEM接口块107a向分区引擎772发信号通知开始对第一核心分区描述符741进行分区。
分区流水线操作
根据本发明的实施例,流水线操作允许各种资源(诸如分区引擎772和HARE引擎773)并发地用于处理不同分区子链的行的子集。三个分区阶段中的每一个可以并发地执行(即,在相同的时钟周期内)以处理不同的行子集。
图9A是描绘根据本发明实施例的分区流水线操作的图。参考图9A,流水线集合901包括分区描述符的三个流水线集合,每个集合处理来自主存储器的相同行。其中两个集合在图9A中显示了两次,如下所述。每个流水线集合包括用于每个分区阶段的分区子链;每个分区子链与相应流水线集合中的另一个分区子链断开链接,即,分区链中最后一个描述符的Link address字段没有链接到相应流水线集合中的另一个分区子链的第一个描述符。流水线集合中的分区子链之间的执行次序通过等待条件来控制,如下所述。流水线集合包括:
a.DMS加载子链A1、CID生成子链A2和核心分区子链A3,用于分区相应的行集合。在图9A中,这个集合被显示两次-第二次这个集合在不同的相应行集合上执行;
b.DMS加载子链B1、CID生成子链B2和核心分区子链B3,用于分区另一个相应的行集合。在图9A中,这个集合被显示两次-第二次这个集合在不同的相应行集合上执行,以及
c.DMS加载子链C1、CID生成子链C2和核心分区子链C3,用于分区再一个相应的行集合。
间隔I1至17是有序的时间段序列。在间隔I1至I7的每一个中,数据移动系统101可以并发地执行多达三个分区子链,每个分区阶段一个。
对于每个流水线集合,分区子链以分区阶段次序执行,并等待完成预先完成的分区子链。例如,DMS加载子链A1在间隔11中执行。在间隔I2中执行必须等待DMS加载子链A1的执行完成的CID生成子链A2。在间隔I3中执行必须等待CID生成子链A2的执行完成的核心分区子链A3。
通过等待条件的编排,流水线集合的分区子链实际上在循环中执行。因此,在间隔I4中执行DMS加载子链A1以处理不同的行集合之前,DMS加载子链A1的执行必须等待间隔I3中核心分区子链A3的完成。
间隔I1和12包括流水线操作的初始阶段,称为填充阶段。在填充阶段,没有为每个分区阶段执行分区子链。因为每个分区阶段只能在一个间隔中执行一个分区子链,并且用于行子集的第一个分区阶段以DMS加载阶段开始,所以间隔I1仅包括执行一个DMS加载子链,(即,DMS加载子链A1)。在间隔I2中,执行两个分区子链,它们是DMS加载子链B1和CID生成子链A2。
间隔I3至I5包括流水线操作的满阶段(full phase),其中可以并发地执行三个分区子链,三个分区阶段中的每一个有一个。在间隔I3中,并发地执行DMS加载子链C1、CID生成子链B2和核心分区子链A3。在间隔I4中,并发地执行CID生成子链C2、核心分区子链B3和DMS加载子链A1。
构建和提交分区子链
根据本发明的实施例,对于每个分区阶段,分离的核心处理器形成并提交一系列分区子链。
参考图9B,其描绘了DMS加载链911,包括来自每个流水线集合的DMS加载阶段的分区子链,并且特别地,包括DMS加载子链A1、DMS负载子链B1和DMS加载子链C1。核心处理器103a在DMEM单元102a内形成这些链描述符,并将链描述符提交到DMAD 106a的描述符信道块之一。描述符的链还包括用于循环DMS加载链911的执行的循环描述符。循环描述符和DMS加载链911被配置为用于循环,如上所述。
CID生成链912包括用于CID生成阶段的分区子链,其包括CID生成子链A2、CID生成子链B2和CID生成子链C2。核心处理器103g在DMEM单元102g内形成CID生成链912,并将CID生成链912提交到数据信道DMAD 106g。描述符的链还包括用于循环CID生成链912的执行的循环描述符。循环描述符和CID生成链912被配置为用于循环,如前所述。
核心分区链913包括用于核心分区阶段的分区子链,其包括核心分区子链A3、核心分区子链B3和核心分区子链C3。核心处理器104a在DMEM单元105a内形成核心分区链913,并将核心分区链913提交到DMAD 115a的描述符信道块之一。描述符的链还包括用于循环核心分区链913的执行的循环描述符。循环描述符和核心分区链913被配置为用于循环,如前所述。
对于通过执行分区子链集合而被处理的行集合,必须以分区阶段次序执行分区子链。当分区子链由相同的核心处理器提交时,分区子链以提交给相应DMAD的给定描述符信道的次序执行。因此,只要以分区阶段次序提交分区子链,就以分区阶段次序执行子链。重要的是防止某些描述符开始,直到某些其它描述符完成为止。例如,防止CID生成子链A2开始,直到DMS加载子链A1完成。
但是,对于流水线集合901,每个分区阶段的分区子链由不同的核心处理器提交。因此,对于由分区子链集合处理的给定行集合,必须同步子链的执行,使得以分区阶段次序执行该分区子链集合。
根据实施例,这种同步是通过等待事件来编排的,如图9B中所示。具体而言,每个分区子链与在开始执行分区子链之前必须满足的等待条件相关联。阻止分区子链的执行,直到满足等待条件。等待条件是基于事件。用于分区子链的等待条件由分区子链中的第一个描述符的“wait for”字段指定的。
例如,对于DMS加载子链A1,等待条件是Event0等于0,对于CID生成子链A2,等待条件是Event3等于0,而对于核心分区子链A3,等待条件是Event6等于0。
完成分区子链的执行使得:(a)将事件设置为使得用于分区子链的等待条件不满足的状态,由此阻止分区子链执行,以及(b)将另一个事件设置为满足同一流水线集合中后续分区子链的等待条件的状态,由此解锁该后续分区子链的执行。
完成分区子链的执行可能需要设置两个事件以用于同步。在实施例中,描述符只能设置一个事件。因此,分区子链可以包括附加描述符,其目的是设置事件。
例如,最初,核心处理器103a设置事件,使得仅允许执行DMS加载子链A1并且阻止CID生成子链A2和核心分区子链A3的执行。因而,核心处理器103a清除Event0(即,设置为0),并将Event3和Event6都设置为1。完成DMS加载子链A1的执行将Event0设置为1,由此阻止DMS加载子链A1再次执行,并清除事件3,由此解锁CID生成子链A2的执行。执行CID生成子链A2的完成将event3设置为1,由此阻止CID生成子链A2再次执行,并清除Event6,由此解锁核心分区子链A3的执行。执行核心分区子链A3的完成将Event6设置为1,由此阻止核心分区子链A3再次执行,并清除Event0,由此解锁后续DMS加载子链A1的执行。
行标识号
根据实施例,数据移动系统101可以被配置为生成RID列,该RID列可以用于在源列与从源列生成的结果列或者与源列对齐的其它列之间执行行解析。
图10图示了RID以及RID如何用于执行行解析。参考图10,它描绘了源列SC71002,该列被数据移动系统101分区成三个结果列,结果列RC1 1031、结果列RC2 1032和结果列RC3 1033。
图10还描绘了未分区的列NP3 1003、NP4 1004和NP5 1005。这些列与源列SC7行对齐。但是,这些列未在当前图示中分区。
RID列RID7是包括RID的列。当最初根据描述符生成RID列时,RID列中的RID是有序的数字序列。在有序的数字序列中,每个数字与序列中的相邻数字相差相同的常数(在本文称为计数器值)。计数器值常常是值一。序列中的第一个RID被称为起始值。
为了在RID列RID7中使用RID来执行行解析,假设RID列RID7与源列SC7行对齐。因而,行1014在源列SC7中包含RID 1304和值“E”。
基于RID列中的有序RID序列的起始值和相应的计数器值,RID列中的行的RID可以用于在与该RID列行对齐的其它列上对那个行执行行解析。
例如,给定起始值1300并且计数器值为1,可以将RID 1308解析为行1018。
用于保留行对齐的数据操纵操作的行解析
可以对多个源列执行数据操纵操作,使得在相应结果列之间保留行对齐。前面描述的基于描述符的分区是保留结果列之间的行对齐的这种表格数据操作的示例。当源列是包含有序RID序列并与另一个特定源列行对齐的RID列时,以及当结果列之间的行对齐由应用于两个源列的数据操纵操作保留时,结果RID列可以用于在为其它特定源列生成的结果列与其它特定源列之间执行行解析。
参考图10,RID列RID7和源列SC7被分区,使得同一行属于同一分区。因此,用于每个分区的相应结果列对是行对齐的(每个分区存储在不同核心处理器的DMEM中)。结果RID列RRID1 1021和结果列RC1 1031属于同一分区并且是行对齐的,结果RID列RRID2 1022和结果列RC2 1032属于同一分区并且是行对齐的,结果RID列RRID3 1023和结果列RC3 1033属于同一分区并且是行对齐的。
为了使用结果列的相应结果RID列在结果列与相应源列之间执行行解析,使用基于行对齐的解析从结果RID列获取行的RID,并使用RID对源列执行基于RID的行解析。例如,为了在用于结果列RC3中的行1018的源列SC7与结果列RC3之间执行行解析,使用行对齐的解析来获得用于该行的RID。行1018是结果列RC3中的第三个元素。因此,结果RID列RRID3中的第三个元素包含行1018的RID,即,1308。基于RID值1308、起始值1300以及计数器值1,基于RID的解析产生那一行1018是源列SC7中的第九个元素。
使用结果RID列RRID1、RRID2或RRID3的基于RID的解析可以用于不仅在源列SC7与结果列RC1、RC2或RC3之间执行行解析,而且还用于与源列SC7行对齐的其它列。因此,使用结果RID列RRID1、RRID2或RRID3的基于RID的解析可以用于分别在结果列RC1、RC2和RC3与任何未分区的列NP3、NP4和NP5之间执行行解析。
行标识号生成
如前面所提到的,数据移动系统101在数据移动系统101的各种存储器内生成RID。RID由每个数据移动引擎中的专用RID引擎生成(参见图7C),每个RID引擎包括电子电路的集合,该电子电路被设计为响应于读取描述符而生成RID列。
参考图7C,每个数据移动引擎包括RID引擎和RID存储器单元。RID存储器单元是用于存储RID的一种类型的DMS存储器,但它不限于仅存储RID。数据移动引擎130a包括RID引擎703a和RID存储器单元704a,数据移动引擎130b包括RID引擎703b和RID存储器单元704b,数据移动引擎130c包括RID引擎703c和RID存储器单元704c,数据移动引擎130d包括RID引擎703d和RID存储器单元704d。
根据实施例,响应于指定生成RID列的各个方面的数据描述符,生成有序的RID序列的列。用于生成RID列的数据描述符包括在本文被称为“RID标志”的属性,该属性指定在目的地地址字段中指定的目的地地址处生成有序的RIDS序列的列。目的地地址可以在特定核心处理器的DMEM、DMS存储器150或RID存储器内。指定以这种方式生成RID的数据描述符在本文中被称为RID描述符。
与先前描述的为数据描述符执行的数据移动不同,数据移动系统101生成RID不涉及从源地址移动数据。因此,对于RID描述符,数据描述符的源地址字段不被视为从中获得要移动的数据的源地址。相反,源地址字段被视为用于生成RID序列的计数器值,其通常是一。因此,当源地址字段值为一时,序列中的相继RID相差一。如果源地址字段值为二,那么序列中的相继RID相差二。
RID列可以具有单字节或多字节列宽。RID描述符中的Column Width字段指定列宽。
在实施例中,在RID列中开始生成RID的有序序列的RID起始值在RID描述符之前的辅助数据描述符中指定。RID描述符包括“RID start flag”以指定辅助描述符设置RID起始值。辅助数据描述符中的“RID Starting Value”字段指定RID起始值。可替代地,可以通过使用程序描述符设置寄存器或通过使用RID描述符中的字段来指定RID起始值。在辅助描述符中指定RID起始值对于适应更大列宽的更大RID起始值会是有利的。对于大到足以指定更大起始值的字段,RID描述符中可用的空间可能不足。
具有RID生成的示例性分区链
如前面所提到的,RID生成对于在核心处理器之间分区行之后识别行特别有利。在分区期间,可以在列存储器中为正在被分区的列生成RID列,这实际上是为正被分区的列中的行添加RID列。当RID被分区到核心处理器的DMEM时,行将包括RID列。
图11A示出了包括描述符的分区链1130,该描述符可以用于引起包括RID列的行的分区。图11B示出了在根据分区链1130分区行时生成和/或以其它方式处理的列。
分区链1130在数据移动系统101的核心处理器之间分区列,列包括RID列。分区链1130包括用于加载阶段的DMS加载子链1151、用于CID生成阶段的CID生成子链1152,以及用于核心分区阶段的核心分区子链1153。
DMS加载子链1151包括数据描述符1131、数据描述符1132、辅助描述符1133和RID描述符1134。数据描述符1131和数据描述符1132中的每一个指定主存储器中用于行715的的子集的不同列的源地址以及列存储器774中的不同目的地地址。数据描述符1131用于键列KEY8 1111,数据描述符1132用于有效载荷列PAY8 1112。数据描述符1131包括键列标签。每个数据描述符还指定256作为移动到DMS存储器150的行数。
辅助描述符1133在RID起始值字段中指定RID起始值1300。当辅助描述符1133被转发到DMAC 140时,它最初由读描述符解析器逻辑块121b处理。读描述符解析器逻辑块121b检测到包含RID起始值的辅助描述符,从而使得读描述符解析器逻辑块121b用该起始值更新内部解析器寄存器。为了说明的目的,RID起始值是1300。在实施例中,RID描述符紧接在包含RID起始值的Aux描述符之后。
RID描述符1134是RID描述符。RID描述符1134包括RID标签。RID描述符1134指定列宽字段1、列存储器774内的目的地地址,以及256作为在RID列中生成的行数。源地址字段被设置为1,指定计数器值为1。
当RID描述符1134被转发到DMAC 140时,它最初由读描述符解析器逻辑块121b处理。读描述符解析器逻辑块121b检测RID标签,从而使得读描述符解析器逻辑块121b通知数据移动块(130a、130b、130c或130d)之一中的RID引擎接收到RID描述符1134。
当被通知的RID引擎接收到通知时,RID引擎相应地生成RID列RID81113。因此,RID列RID8具有两个字节的列宽,其包括256行或元素。RID列RID8中的第一个RID是1300,RID起始值在辅助描述符1133中指定。RID列RID8中的相继RID是通过将RID起始值递增1(指定的计数器值)来创建的。因此,RID列RID8中的下两个相继的RID分别为1301和1302。
CID生成子链1152包括一个描述符,HARE描述符1135。HARE引擎773在执行HARE描述符1135时生成CID阵列CID81118。
核心分区子链1153指定如何对键列KEY8、有效载荷列PAY8和RID列RID8执行核心分区。核心分区子链753包括核心分区描述符1141、核心分区描述符1142和核心分区描述符1143。核心分区描述符1141用于分区键列KEY8,核心分区描述符1142用于分区有效载荷列PAY8,而核心分区描述符1143用于分区RID列RID8。
如前所述,这些分区描述符中的每一个识别要在核心处理器之间分区的相应列。关于核心分区描述符1143,Source Addr字段通过引用列存储器774中的列地址来识别RID列RID8。
每个核心分区描述符指定DMEM中的目的地地址(即,在Destination Addr字段中)。对于每个核心分区描述符,数据移动系统101中的核心处理器在暂存器存储器中目的地地址处具有相应的列FIFO缓冲器,即,对于每个核心处理器,对于键列KEY8、有效载荷列PAY8和RID列RID8中的每一个存在相应的列FIFO缓冲器。这些列FIFO缓冲器是行对齐的。
例如,在处理HARE描述符1135之后,假设CID阵列CID8中的前四个元素包含以下CID:前四行中的0、6、16、0,它们分别识别核心处理器103a、103g、104a和103a。在处理核心分区子链1153之后,列KEY8、有效载荷列PAY8和RID列RID8的第一和第四行连续存储在核心处理器103a的相应列FIFO缓冲器中。在核心处理器103a中用于RID列RID8的列FIFO缓冲器中,前两个元素分别包含第一和第四RID条目1300和1303,就像这些行在分区之前存储在列存储器774中时那样。
用于其它表格数据操纵操作的RID
分区是表格数据操纵操作的一个示例,该操作在生成结果列时更改行对齐。另一个是聚集操作。在聚集操作中,数据移动系统101在列从源存储器位置飞往目的地存储器位置的同时滤除该列的行,并且在将结果所得的行存储在目的地存储器位置中的同时压缩该列的结果行(即,未被滤除的行),使得,即使结果所得的行在源存储器位置处没有存储在连续存储器位置中,结果所得的行也存储在目的地存储器内的连续存储器位置中。可以基于位向量滤除行。
根据实施例,RID描述符可以指定数据操纵操作(诸如聚集操作)。因此,在对移动到存储器(诸如核心处理器的DMEM)的特定列执行数据操纵之后,实际上以相同的方式操纵RID列。结果被操纵的列和RID列是行对齐的,从而允许RID用于基于RID的行解析。
在执行聚集和/或分散操作之前,数据移动系统可以将RID列表内的每个RID从其逻辑RID转换成对应的物理RID。如本文所述,逻辑RID是分配给数据库表中的每一行的唯一标识符。如本文所述,物理RID是从逻辑RID导出的。在实施例中,通过从逻辑RID中减去基值来导出物理RID。这种将逻辑RID转换成物理RID的能力允许核心处理器对表格数据列的行的、存储在主存储器中连续地址中的较小子集工作。此外,核心处理器可以使用行的子集利用聚集操作来发起数据移动,而无需首先将行的逻辑RID转换成其对应的物理RID。
由数据移动系统101生成列RID对于许多不同类型的数据库操作具有许多优点。这种操作的一个示例是分区的“过滤和投影”数据库操作。在分区的过滤和投影操作中,可以在核心处理器之间分区行,使得行的一部分行对照过滤标准并行地评估,以确定行的哪个子集满足过滤标准。然后进一步处理行的该子集。这种进一步处理包括处理“carry”列,在过滤部分是分区的过滤和投影操作的上下文中,“carry”列是未对照标准进行评估的列。
用于执行分区的过滤和投影操作的一种技术是将行整体分区,然后检查与过滤有关的列。在这种技术中,所携带的列被分布到核心处理器的暂存器存储器,即使所携带的列的许多“滤除的”行从未以其它方式被处理。如果过滤标准是选择性的,那么可能花费大量处理带宽来发送与分区的过滤和投影操作无关的数据。
对于RID,只需要在核心处理器之间分区与过滤标准有关的列的子集。满足标准的行的RID可以用于从其它列获得行。
为了识别列中的行的子集,RID可能需要较少的存储器来识别比位向量更小的子集。位向量(至少一个未压缩的)占用相同数量的存储器以识别行集合中行的子集,而不管该子集中的行数。当子集中的行数远小于该集合的行数时,位向量是稀疏的,即,仅设置少量位来识别行。在这种情况下,RID的列表可以比位向量占用更少的存储器。
稀疏的位向量可以用于生成占用较少存储器的RID列表。RID描述符可以指定生成RID列并在聚集操作中应用位向量,由此在目的地存储器位置中生成RID列,该RID列包括识别由位向量识别出的行的RID。
DMS存储器组织
根据本发明的实施例,DMS存储器包括四类存储器,每个类别可由DMAC 140的引擎(或多个引擎)访问,以存储由那个引擎读取或写入的数据。每个类别可以包括一个或多个存储器单元。一个类别用于存储要分区的列和/或用作生成散列列的输入,另一个类别用于存储散列列,另一个类别用于存储RID列或位向量,最后另一个类别用于存储CID。在图12A和图12B中描绘了这些类别的存储器及其相对于DMAC的各种引擎的布置。
参考图12A,其描绘了列存储器单元774a、列存储器单元774b和列存储器单元774c。列存储器单元774a、列存储器单元774b和列存储器单元774c中的每一个被用于存储被分区和/或用作用于生成散列列的输入的列。
DDR加载引擎1231a、DDR加载引擎1231b、DDR加载引擎1231c和DDR加载引擎1231d分别是数据移动引擎130a、数据移动引擎130b、数据移动引擎130c和数据移动引擎130d的DDR数据加载引擎。根据实施例,DDR加载引擎1231a、1231b、1231c和1231d中的每一个可以将列从DDR存储器移动到列存储器单元774a、774b和774c中的任何一个。响应于从读描述符解析器逻辑块121b接收到控制信息而移动列。读描述符解析器逻辑块121b基于由读描述符解析器逻辑块121b解析的描述符来调度控制信息,该描述符指定DDR存储器中的列的源地址和目的地列存储器单元774a、774b或774c,以及目的地列存储器单元774a、774b或774c内的目的地地址。由DDR加载引擎1231a、1231b、1231c和1231d对列存储器单元774a、774b和774c中任何一个的写访问由仲裁单元1290a仲裁。
HARE引擎774(经由仲裁单元1290b)访问列存储器单元774a、774b或774c中的任何一个,以读取从其生成散列列的一个或多个键列。分区引擎772(经由仲裁单元1290c)访问列存储器单元774a、774b或774c中的任何一个,以读取其中的一个或多个列以进行分区。
参考图12B,其描绘了RID存储器单元704a、704b、704c和704d。RID存储器单元704a、704b、704c和704d中的每一个包括一个或多个存储器单元,这些存储器单元用于存储RID列或BV。RID列可以从DMEM加载到RID存储器单元704a、704b、704c或704d中的任何一个。而且,每个DDR加载引擎都有RID引擎,该RID引擎可以访问驻留在那个数据移动引擎中的本地RID存储器。因此,RID存储器单元704a、704b、704c或704d可以用于存储根据RID描述符(例如,RID描述符1134)生成的RID列,该列指定RID存储器单元704a、704b、704c或704d中的哪一个存储RID列。如前所述,RID列也可以存储在列存储器774a、774b和774c中。
如前面所提到的,数据移动引擎130a、130b、130c和130d均包括DDR加载引擎,它们分别是DDR加载引擎1231a、1231b、1231c和1231d。此外,数据移动引擎130a、130b、130c和130d均包括DMEM加载引擎,它们分别是DMEM加载引擎1241a、1241b、1241c和1241d。
根据RID存储器单元在数据移动引擎内部的实施例,每个数据移动引擎的DDR加载引擎和DMEM加载引擎可以仅访问相应的RID存储器单元,以读取和写入RID列。DDR加载引擎1231a和DMEM加载引擎1241a可以经由仲裁单元1290f访问RID存储器单元704a,DDR加载引擎1231b和DMEM加载引擎1241b可以经由仲裁单元1290g访问RID存储器单元704b,DDR加载引擎1231c和DMEM加载引擎访问1241c可以经由仲裁单元1290h访问RID存储器单元704c,DDR加载引擎1231d和DMEM加载引擎1241d可以经由仲裁单元1290i访问RID存储器单元704d。
数据移动引擎只能使用存储在相应DDR加载引擎和DMEM加载引擎可访问的RID存储器中的RID列或BV来执行聚集和/或分散操作。例如,为了使数据移动引擎130a使用RID列执行聚集操作,RID列应该当存储在RID存储器单元704a中。
DMS-DMS存储器移动
根据实施例,数据移动引擎仅对(经由DMAD)连接到特定DMAX的核心处理器组执行数据移动操作。例如,数据移动引擎130a对核心处理器103a和103g执行数据移动,而不对数据移动系统101中的其它核心处理器(诸如104a和104g)执行。
可以由不同的数据移动引擎执行到不同核心处理器的不同数据移动,但是可以使用相同的RID列或BV来执行数据移动。为了使用相同的RID列或BV,将RID列和/或BV复制到执行数据移动的数据移动引擎可访问的多个RID存储器单元。
将RID列或BV的复制移动到多个RID存储器单元的一种方式是执行多个描述符,每个描述符指定将相同的RID列从DDR存储器移动到特定的RID存储器。但是,这要求从DDR存储器到数据移动系统101的多次移动。
为了避免从DDR存储器的多次移动,数据移动系统101被配置为在DMS存储器中的各种存储器单元之间内部移动数据。以这种方式执行的数据移动在本文中被称为内部DMS存储器移动。内部DMS存储器移动可以比主存储器与数据移动系统101之间的数据移动更高效地执行。数据移动系统101可以被配置为通过向数据移动系统101提交DMS-DMS描述符来执行内部DMS存储器移动。复制环用于执行内部DMS存储器移动。
图13示出了复制环1300,其包括被配置为用于内部DMS存储器移动的数字电子电路系统。复制环1300包括复制环节点,每个复制环节点是数字电子电路系统块,其被配置为参与将数据移入和移出DMS存储器和其它复制环节点内的存储器单元。根据实施例,存在若干种复制环节点:DMS复制引擎节点和复制存储器接口节点。复制环1300包括DMS复制引擎1311,以及复制存储器接口节点1312、1313、1314、1315、1316、1317、1318、1319和1320,每个用作内部DMS存储器移动的源或目的地的DMS存储器单元一个。
DMS复制引擎1311包括被配置为执行以下描述的各种功能的数字电子电路系统。一般而言,DMS复制引擎1311响应于从读描述符解析器逻辑块121b接收到由读描述符解析器逻辑块121b针对DMS-DMS描述符生成的控制信息而发起内部DMS存储器移动。
每个复制环节点通过分离的总线链接到两个其它复制环节点中的每一个,从而形成回路或环,数据沿着该环在复制环节点之间发送。每个复制环节点接收控制信息,并且可以接收由另一个复制存储器接口节点从DMS存储器单元检索并经由总线从另一个复制环节点发送的“复制数据”。术语“复制数据”是指存储在DMS存储器单元中的数据,该数据使用内部DMS存储器移动被复制到另一个DMS存储器单元。
每个复制存储器接口节点耦合到相应的DMS存储器单元,并且被配置为将复制数据写到相应的DMS存储器单元和/或从那个DMS存储器读取复制数据。在另一个实施例中,当这种存储器单元在物理上彼此邻近时,复制存储器接口节点可以耦合到多个存储器单元。
根据实施例,该回路是有向的。即,给定的复制环节点通过两条分离的总线连接到两个其它复制环节点;给定的复制环节点从其接收控制数据和/或复制数据的一个复制环节点(“源节点”),以及给定的复制环节点向其转发控制数据和/或读取的数据的另一个复制环节点(“目的地节点”)。
参考图13,复制存储器接口节点1312、1313和1314是用于DMS存储器150内的列存储器的复制存储器接口节点。复制存储器接口节点1312、1313和1314分别耦合到列存储器774a、774b和774c。复制存储器接口节点1315耦合到散列列存储器775。复制存储器接口节点1316耦合到CID存储器776。复制存储器接口节点1316、1317、1318和1319分别耦合到RID存储器704a、704b、704c和704d。
图13中描绘的每个复制环节点的源和目的地节点由表示复制环节点之间的总线的有向线指示,从复制环节点的源节点指向复制环节点的线以及从复制环节点指向复制环节点的目的地节点的线。例如,用于复制存储器接口节点1312的源和目的地节点分别是DMS复制引擎1311和复制存储器接口节点1313。
DMS-DMS描述符
与先前描述的其它数据移动操作一样,描述符被用于配置数据移动系统101,以执行内部DMS存储器移动。图14描绘了DMS-DMS描述符1401,该描述符被用于配置数据移动系统101,以执行内部DMS存储器移动。
参考图14,其描绘了DMS-DMS描述符1401。DMS-DMS描述符1401的“Desc Type”字段指定DMS-DMS描述符1401的描述符类型。
“SrcAddr”字段指定复制数据的源地址。根据实施例,源地址应当指覆盖多个DMS存储器单元的单个存储器地址空间(“DMS存储器地址空间”)。一系列DMS存储器地址空间专用于单个DMS存储器单元,并且任何DMS存储器单元内的地址落入相应的专用范围内。因此,任何列存储器774a、774b、774c,散列列存储器775,CID存储器776以及RID存储器704a、704b、704c和704d的每个存储器地址落入特定范围内,并且在DMS存储器地址空间内是绝对的。
“DestAddr”字段指定DMS存储器单元内写入复制数据的目的地地址。对于为DMS-DMS描述符写入复制数据的每个DMS存储器单元,目的地地址是相同的。与“SrdAddr”字段的源地址不同,目的地地址是相对于特定的DMS存储器单元(例如,偏移)。
“Write Map”字段指定写入复制数据的DMS存储器。例如,Write Map可以是位图,其中每个位与列存储器单元774a、774b、774c,散列列存储器单元775,CID存储器单元776以及RID存储器单元704a、704b、704c和704d之一对应。
“Column Width”指示复制数据的列的大小,“Rows”指定复制数据的行数。
内部DMS存储器移动
图15是描绘图13中的复制环1300为内部DMS存储器移动执行的操作的流程图。响应于核心处理器将DMS-DMS描述符提交给核心处理器的相应DMAD的描述符信道来执行操作。
参考图15,在1505处,DMS复制引擎1311从读描述符解析器逻辑块121b接收控制信息。控制信息包括DMS-DMS描述符中指定的信息,包括源地址、目的地地址和写映射,如分别由“SrcAddr”、“DestAddr”和“Write Map”字段指定的。
操作1510-1535表示包括由每个复制环节点执行的操作的循环。在循环的每次迭代中,相继的复制环节点在循环中执行操作。DMS复制引擎1311执行初始迭代,并且用DMS复制引擎1311对操作的初始执行来说明循环的操作。
在1510处,当前的复制环节点(即,DMS复制引擎1311)将控制信息转发到当前复制环节点的目的地节点(复制存储器接口节点1312)。在由另一个复制环节点执行的循环的后一次迭代中,操作1510还可能需要接收复制数据。当在先前的迭代中,由复制存储器接口节点(诸如复制存储器接口节点1312)从源DMS存储器单元读取复制数据时,接收到复制数据。
在1515处,如果复制数据由源节点转发,那么目的地节点(复制存储器接口节点1312)接收控制信息和复制数据。由于DMS复制引擎1311没有发送任何复制数据,因此仅接收控制信息。
在接收到控制信息以及有可能接收到复制数据时,目的地节点可以简单地将控制信息/复制数据转发到复制环1300中的下一个复制环节点。以这种方式转发控制信息/复制数据实际上是在控制信息指示对于目的地节点不执行读或写操作时发生的。具体而言,如果源地址没有识别出位于目的地节点的DMS存储器单元中的存储器地址,并且写映射不指示将复制数据写入DMD存储器单元,或者没有复制数据从源节点连同控制信息一起转发,那么对于目的地节点不执行到DMS存储器的读取或写入。目的地节点在1510处变成源节点,并将控制信息/复制数据转发到下一个目的节点。
否则,响应于如下的某些确定,执行两个替代操作集合中的一个。首先,在1520处,响应于确定源地址映射到目的地节点的DMS存储器单元(“源DMS存储器单元”),目的地节点读取源地址处的复制数据。
第二,在1525处,响应于确定写映射识别出目的地节点的DMS存储器单元,目的地节点将接收到的复制数据写入相应的DMS存储器单元,复制数据被写入由DMS-DMS描述符的“DestAddr”指定的目的地地址。在1530处,设置控制数据中的写映射,使得它不再指定将复制数据写到那个目的地节点。
在执行操作1520或1530之后,目的地节点确定写映射是否指定将复制数据写入任何DMS存储器单元。如果确定写映射指定要将复制数据写入任何DMS存储器单元,那么目的地节点在1510处变成源节点,并将控制信息和/复制数据发送到下一个目的地节点。否则,内部DMS存储器移动结束。
DMS-DMS描述符可以指定用于复制环节点的复制数据的源地址,该复制环节点不是复制环1300中的第一个节点,即,不是复制存储器接口节点1312。在这种情况下,仅控制信息从复制环节点转发到复制环节点,直到到达“复制数据源节点”,即,直到到达处理与源地址对应的DMS存储器单元的复制存储器接口节点。复制数据源节点从相应的DMS存储器单元读取复制数据,并将复制数据连同控制信息一起转发到相继的复制环节点。
在DMS存储器单元内将数据移位可能是有用的。为了适应这种场景,DMS存储器单元在DMS-DMS描述符中被写映射识别为既是复制数据的源又是复制数据的目的地。复制数据由源复制存储器接口节点从源DMS存储器单元读取,然后源复制存储器接口节点将复制数据写入目的地地址处的源DMS存储器单元(它也是目的地DMS存储器单元)。
在另一个有用的场景中,多个核心处理器可以各自生成较大BV的具体部分;然后,在多个RID存储器单元之间分布每个具体部分,以在多个RID存储器单元的每一个中生成较大BV的副本。可以使用内部DMS存储器移动在多个RID存储器单元中的每一个中高效地组装BV的副本。每个核心处理器可以配置DMS-DMS描述符,以将相应的BV部分从核心处理器的相应RID存储器单元加载到与较大BV中的相应BV部分对应的目的地地址处的其它RID存储器单元中。对于每个核心处理器,所使用的目的地地址是不同的。每个核心处理器配置DMS-DMS核心处理器,以在其它RID存储器单元中的目的地地址处复制BV部分。
将数据广播到多个DMEM单元
根据实施例,每个数据移动引擎130a、130b、130c和130d经由对应的DMAX连接到由DMAX服务的分离的核心处理器集合的DMEM单元,并且响应于具有DMEM单元作为数据移动的源或目的地的单个数据描述符,只能将数据移入和移出连接到那个DMAX的DMEM。该核心处理器集合、相应的DMEM单元和数据库移动引擎被称为在彼此的本地。其它数据移动引擎、不在该集合中的数据移动系统101中的其它核心处理器以及其它核心处理器的DMEM单元在本文中被称为远程的。
例如,数据移动引擎130a通过DMAX 110a连接到本地核心处理器103a和103g的本地DMEM单元102a和102g。数据移动引擎130a可以仅响应于单个描述符而将数据从主存储器移动到或者DMEM单元102a或者102g。关于数据移动引擎130a,核心处理器104a和104g的DMEM单元105a和105g被称为远程的。
根据实施例,数据移动引擎130a、130b、130c和130d中的每一个响应于由本地核心处理器提交的、具有被指定为数据移动的目的地的DMEM的单个描述符而将数据从源存储器移动到多个DMEM单元,这多个DMEM单元关于数据移动引擎可以是本地的和远程的。例如,核心处理器103a提交数据描述符,该数据描述符由本地数据引擎130a处理。数据描述符指定将数据从主存储器移动到多个DMEM单元,其中一些DMEM单元对于数据移动引擎130a是本地的,并且其中一些是远程的。作为响应,数据移动引擎130a处理描述符,从而将数据从源存储器移动到多个DMEM单元,如下面进一步详细描述的。响应于这样指定的单个描述符而将数据移动到多个DMEM单元在本文中被称为DMEM广播。
在DMEM广播中,由数据移动引擎进行的到远程DMEM单元的数据移动是通过具有复制存储器接口节点的复制环完成的,每个复制存储器接口节点连接到数据移动引擎。这种复制环在图16中绘出。
参考图16,其描绘了复制环1600。与复制环1300一样,复制环1600包括复制存储器接口节点。但是,复制存储器接口节点各自都连接到数据移动引擎,并且各自被配置为响应于通过复制环1600发送的控制数据和“广播数据”而写入(或读取)到数据移动引擎的电路系统。复制环1600中的每个复制环节点通过总线链接到两个其它复制环节点,由此形成回路或环,控制数据和广播数据沿着该环在相继的复制环节点之间转发,如前面对复制环1300所描述的。
复制环1600包括复制存储器接口节点1612、1613、1614和1615,它们分别连接到数据移动引擎130a、数据移动引擎130b、数据移动引擎130c和数据移动引擎130d。DME复制引擎1611包括数字电子电路系统,该数字电子电路系统被配置为响应于从数据移动引擎160接收到控制数据和广播数据而通过复制环1600发起控制数据和广播数据的传输。
复制存储器接口节点所连接到的数据移动引擎本地的DMEM单元被称为相对于数据移动引擎是本地的。因此,在数据移动引擎130a本地的DMEM单元102a和102g对于复制存储器接口节点1612是本地的。
DMEM广播描述符和处理
可以指定执行DMEM广播的数据描述符在本文被称为DMEM广播描述符。根据实施例,若干种类型的数据描述符可以是DMEM广播描述符。
指定将数据从DDR存储器移动到DMEM的描述符类型可以指定将数据广播到一个或多个DMEM单元。要向其广播的DMEM单元由DMEM映射识别。类似于写映射,DMEM映射包括位序列,每个位与DMEM单元相关联并且可以被设置为向DMEM单元广播数据。
数据描述符由发出请求的核心处理器提交,如前面对于数据描述符所描述的。核心处理器的本地数据移动引擎从DDR存储器中检索数据,并将数据发送到发出请求的核心处理器的DMEM单元,以写入其中。
从数据描述符生成的控制信息包括DMEM映射。如果数据移动引擎确定DMEM映射识别出在数据移动引擎本地的任何DMEM单元,那么数据移动引擎将从DDR存储器读取的数据视为广播数据,并将广播数据发送到由DMEM映射识别出的任何本地DMEM单元。
如果数据移动引擎确定DMEM映射识别出远离数据移动引擎的任何DME单元,那么数据移动引擎将从DDR存储器读取的数据视为广播数据,并在复制环1600上将控制数据与广播数据一起发送到环上的下一个复制环节点。例如,如果DME 103a是接收从DDR读取的数据的本地DME,那么它连接到的复制环节点(复制存储器接口节点1612)将控制数据和广播数据放在环1600上,在那里将其发送到复制存储器接口节点1613。
控制数据和广播数据沿着复制环1600在相继的复制存储器接口节点1613、1614和1615之间转发,类似于如对于复制环1300所描述的。
当每个复制存储器接口节点接收控制数据和广播数据时,复制存储器接口节点确定DMEM映射是否识别出在复制存储器接口节点本地的DMEM单元。如果DMEM映射识别出在复制存储器接口节点本地的DMEM单元,那么复制存储器接口节点将控制数据和广播数据写入数据移动引擎的内部电路系统。数据移动引擎将广播数据发送到由DMEM映射识别出的任何本地DMEM单元,以写入其中。
类似于写映射,当广播数据被写入数据移动引擎的内部电路系统时,相应的复制存储器接口节点将DMEM映射设置为指示广播数据已被转发到DMEM单元。因此,如果在复制存储器接口节点设置DMEM映射之后DMEM映射指示不存在向其转发广播数据的DMEM单元,那么复制存储器接口节点停止发送广播数据。
数据描述符还可以识别要执行的表格数据操纵操作(例如,分散和聚集)。如果数据移动引擎确定控制数据指定执行表格数据操纵操作,那么移动广播数据的数据移动引擎可以根据数据库操作变换广播数据并将变换后的广播数据写入DMEM单元。
数据描述符不仅可以指定广播数据的源是DDR存储器,而且数据描述符可以指定广播数据的源是DMEM单元或DMS存储器。向其广播的DMEM单元由数据描述符中的DMEM映射识别。
数据描述符由发出请求的核心处理器提交,如前面对于数据描述符所描述的。核心处理器的本地数据移动引擎从发出请求的核心处理器的DMEM单元检索广播数据,并将为数据描述符生成的控制数据以及和广播数据在复制环1600上发送到环上的下一个复制环节点,如前所述。
控制数据和广播数据被发送到所有复制存储器接口节点(1312、1613、1614和1615)并由其处理,类似于上面所描述的。
对复制环的外围访问
类似于上述那些的复制环可以用于通过外围设备访问DMS存储器。外围设备连接到类似于复制环1300的复制环。例如,外围设备可以是连接到DMS复制引擎的调试控制器。调试控制器可以将控制数据发送到复制环引擎,复制环引擎沿着复制环发送控制数据。源地址指定从中读取数据的DMS存储器单元。对应的复制存储器接口节点从DMS存储器单元读取数据,并沿着复制环将数据发送到复制引擎,复制引擎将数据返回到控制器。类似地,控制数据可以指定将数据复制到其它DMS存储器单元。
为了将数据广播到多个DMEM单元,可以使用类似于复制环1600的复制环。外围设备将控制数据与广播数据一起发送到复制环的复制引擎。广播数据由复制环经由相应的数据移动引擎传播到DMEM映射中指定的DMEM单元。外围设备可以通过SOC(“片上系统”)互连的主设备连接到DMS中的复制引擎。外围设备本身可以是网络接口,诸如PCIe(外围部件互连快速)或以太网。控制数据可以指定执行由一个或多个数据库移动引擎执行的表格数据操纵操作。
扩展和替代方案
在前面的说明书中,已经参考许多具体细节描述了本发明的实施例,这些细节可以随实现而变化。因此,作为本发明的唯一和排他的指示并且是申请人作为本发明的意图的内容在从本申请发出的权利要求的集合,以这种权利要求发出的具体形式,包括任何后续的更正。对于这些权利要求中包含的术语在本文明确阐述的任何定义将决定权利要求中使用的术语的含义。因此,权利要求中没有明确叙述的任何限制、元素、特性、特征、优点或属性不应当以任何方式限制这种权利要求的范围。因而,说明书和附图被认为是说明性而不是限制性的。
Claims (15)
1.一种用于将表格数据移动到片上存储器的方法:
响应于特定存储器位置被推入第一寄存器空间内的第一寄存器,该第一寄存器空间可由第一电子电路集合访问:
所述第一电子电路集合访问存储在该特定存储器位置处的描述符,其中该描述符指示:
表格数据列的宽度、所述表格数据的行数,以及对该数据列执行的一个或多个表格数据操纵操作;
所述表格数据的源存储器位置;
数据操纵操作的数据操纵结果的目的地存储器位置;
基于该描述符,第一电子电路集合确定指示要对表格数据执行的所述一个或多个数据操纵操作的控制信息;
使用硬件数据信道,第一电子电路集合将控制信息发送到第二电子电路集合,以执行所述一个或多个操作;
根据控制信息,所述第二电子电路集合
从所述源存储器位置检索所述表格数据;
将所述一个或多个数据操纵操作应用于所述表格数据,以生成所述数据操纵结果;
使所述数据操纵结果存储在所述目的地存储器位置处。
2.如权利要求1所述的方法,其中描述符指示描述符的类型。
3.如权利要求1所述的方法,其中描述符指示在第一电子电路集合确定控制信息的步骤之前应当满足的等待条件。
4.如权利要求1所述的方法,还包括:
第一电子电路集合将描述符添加到受硬件管理的链接列表;
其中将描述符添加到受硬件管理的链接列表包括将所述特定存储器位置写入第二描述符的特定描述符字段。
5.如权利要求1所述的方法,其中描述符指示自动递增所述表格数据的源存储器位置以及源计数器。
6.如权利要求5所述的方法,还包括:
响应于第二存储器位置被推入第一寄存器:
所述第一电子电路集合访问存储在第二存储器位置处的第二描述符,其中该第二描述符指示:
所述表格数据的源存储器位置;
所述第二电子电路集合至少部分地基于源计数器的值确定新的源存储器位置。
7.如权利要求6所述的方法,还包括:
在第一电子电路集合将控制信息发送到第二电子电路集合的步骤之后,第一电子电路集合将源计数器值递增一。
8.如权利要求1所述的方法,还包括:
响应于第二存储器位置被推入第一寄存器:
所述第一电子电路集合访问存储在第二存储器位置处的第二描述符,其中该第二描述符指示:
所述特定存储器位置;
所述第一电子电路集合访问存储在该特定存储器位置处的描述符;
基于该描述符,所述第一电子电路集合确定指示要对表格数据执行的所述一个或多个数据操纵操作的控制信息。
9.如权利要求8所述的方法,还包括:
第二描述符指示迭代计数;
在访问存储在所述特定存储器位置处的描述符之前,第一电子电路集合确定迭代计数不为零。
10.如权利要求1所述的方法,其中描述符指示通知标志。
11.一种方法,包括:
数据处理核心,与第一片上存储器耦合,从而将描述符的特定存储器地址推入第一寄存器空间内的第一寄存器,该第一寄存器空间可由耦合到所述片上存储器的第一电子电路访问;
其中该描述符指示表格数据列的宽度、所述表格数据的行数,以及对所述表格数据执行的数据操纵操作;
响应于所述描述符的所述特定存储器地址被所述数据处理核心推入所述第一寄存器:
使用第一寄存器中的特定存储器地址,第一电子电路集合访问第一片上存储器中的描述符;
基于该描述符,第一电子电路集合确定指示要执行的一个或多个数据操纵操作的控制信息;
响应于确定控制信息:
使用硬件数据信道,第一电子电路集合将控制信息发送到第二电子电路集合,以执行所述一个或多个数据操纵操作。
12.如权利要求11所述的方法,还包括:
数据处理核心确定所述特定存储器地址在第二寄存器空间内的第二寄存器中可用,该第二寄存器空间被指定为存储第一存储器的空闲的存储器地址;以及
响应于该特定存储器地址在第二寄存器中可用,
数据处理核心将描述符存储在该特定存储器地址处。
13.如权利要求11所述的方法,还包括:
其中数据处理核心确定是否设置了指示第一存储器的一个或多个存储器地址在第二寄存器空间内的寄存器中可用的标志,其中第二寄存器空间被指定为存储第一存储器的空闲的存储器地址;
响应于标志被设置:
数据处理核心确定所述特定存储器地址在寄存器空间内的特定寄存器中可用。
14.如权利要求11所述的方法,还包括:
第一电子电路集合将描述符添加到由数据移动系统的硬件管理的链接列表中。
15.如权利要求14所述的方法,其中通过在描述符的链接地址字段中指定与第一描述符不同的第二描述符的存储器地址来执行将描述符添加到链接列表,其中第二描述符在第一寄存器空间内的第二寄存器中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/073,905 | 2016-03-18 | ||
US15/073,905 US10061714B2 (en) | 2016-03-18 | 2016-03-18 | Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors |
PCT/US2017/022975 WO2017161275A1 (en) | 2016-03-18 | 2017-03-17 | Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109416674A true CN109416674A (zh) | 2019-03-01 |
CN109416674B CN109416674B (zh) | 2022-06-03 |
Family
ID=58448648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780028187.8A Active CN109416674B (zh) | 2016-03-18 | 2017-03-17 | 用于暂存器使能的多核处理器的元组编码感知直接存储器访问引擎 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10061714B2 (zh) |
EP (2) | EP3430521B1 (zh) |
CN (1) | CN109416674B (zh) |
WO (1) | WO2017161275A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11379660B2 (en) * | 2019-06-27 | 2022-07-05 | International Business Machines Corporation | Deep learning approach to computing spans |
CN115002052A (zh) * | 2022-07-18 | 2022-09-02 | 井芯微电子技术(天津)有限公司 | 一种分层的缓存控制器、控制方法及控制设备 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10534606B2 (en) | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
US11113054B2 (en) | 2013-09-10 | 2021-09-07 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression |
US10025822B2 (en) | 2015-05-29 | 2018-07-17 | Oracle International Corporation | Optimizing execution plans for in-memory-aware joins |
US10067954B2 (en) | 2015-07-22 | 2018-09-04 | Oracle International Corporation | Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations |
US10061832B2 (en) | 2016-11-28 | 2018-08-28 | Oracle International Corporation | Database tuple-encoding-aware data partitioning in a direct memory access engine |
US10402425B2 (en) | 2016-03-18 | 2019-09-03 | Oracle International Corporation | Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors |
US10055358B2 (en) | 2016-03-18 | 2018-08-21 | Oracle International Corporation | Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors |
US10599488B2 (en) | 2016-06-29 | 2020-03-24 | Oracle International Corporation | Multi-purpose events for notification and sequence control in multi-core processor systems |
US10380058B2 (en) | 2016-09-06 | 2019-08-13 | Oracle International Corporation | Processor core to coprocessor interface with FIFO semantics |
US10783102B2 (en) | 2016-10-11 | 2020-09-22 | Oracle International Corporation | Dynamically configurable high performance database-aware hash engine |
US10176114B2 (en) | 2016-11-28 | 2019-01-08 | Oracle International Corporation | Row identification number generation in database direct memory access engine |
US10459859B2 (en) | 2016-11-28 | 2019-10-29 | Oracle International Corporation | Multicast copy ring for database direct memory access filtering engine |
US10725947B2 (en) * | 2016-11-29 | 2020-07-28 | Oracle International Corporation | Bit vector gather row count calculation and handling in direct memory access engine |
US11586614B2 (en) | 2019-07-30 | 2023-02-21 | Oracle International Corporation | Native persistent store support for blockchains |
US11640391B2 (en) | 2019-09-11 | 2023-05-02 | Oracle International Corporation | Supporting blockchain collections in a database |
US11314674B2 (en) * | 2020-02-14 | 2022-04-26 | Google Llc | Direct memory access architecture with multi-level multi-striding |
US11875178B2 (en) | 2020-07-30 | 2024-01-16 | Oracle International Corporation | Using multiple blockchains for applying transactions to a set of persistent data objects in persistent storage systems |
US20230239160A1 (en) * | 2022-01-26 | 2023-07-27 | Oracle International Corporation | Deferred and secure data signing |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5175810A (en) * | 1989-06-19 | 1992-12-29 | Digital Equipment Corporation | Tabular data format |
US20030184457A1 (en) * | 1999-12-14 | 2003-10-02 | Vivian Hsiun | Programmable variable-length decoder |
US20060179255A1 (en) * | 2005-02-08 | 2006-08-10 | Takeshi Yamazaki | Methods and apparatus for synchronizing data access to a local memory in a multi-processor system |
CN1916877A (zh) * | 2005-08-19 | 2007-02-21 | 国际商业机器公司 | 在处理器与存储器流控制器间传送命令参数的系统和方法 |
CN101031888A (zh) * | 2004-09-30 | 2007-09-05 | 英特尔公司 | 用于直接存储器存取地址转换的错误处理 |
CN101162492A (zh) * | 2006-08-16 | 2008-04-16 | Arm有限公司 | 保护数据处理设备中的系统控制寄存器 |
US7603488B1 (en) * | 2003-07-15 | 2009-10-13 | Alereon, Inc. | Systems and methods for efficient memory management |
US20090319550A1 (en) * | 2008-06-23 | 2009-12-24 | Kickfire, Inc. | Fast bulk loading and incremental loading of data into a database |
WO2011040928A1 (en) * | 2009-10-02 | 2011-04-07 | Intel Corporation | Method and appratus for managing a random array of independent disks (raid) |
CN104934057A (zh) * | 2014-03-17 | 2015-09-23 | 日本电气株式会社 | 访问计数设备、存储器系统和访问计数方法 |
Family Cites Families (136)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6336180B1 (en) * | 1997-04-30 | 2002-01-01 | Canon Kabushiki Kaisha | Method, apparatus and system for managing virtual memory with virtual-physical mapping |
GB1332631A (en) | 1971-02-26 | 1973-10-03 | Ibm | Data processing system |
US4276594A (en) * | 1978-01-27 | 1981-06-30 | Gould Inc. Modicon Division | Digital computer with multi-processor capability utilizing intelligent composite memory and input/output modules and method for performing the same |
SE8307228D0 (sv) | 1983-12-30 | 1983-12-30 | Grundstenen 16808 Ab | Datakomprimering |
USRE34052E (en) | 1984-05-31 | 1992-09-01 | International Business Machines Corporation | Data processing system with CPU register to register data transfers overlapped with data transfer to and from main storage |
US4626829A (en) | 1985-08-19 | 1986-12-02 | Intelligent Storage Inc. | Data compression using run length encoding and statistical encoding |
US5109226A (en) | 1989-11-22 | 1992-04-28 | International Business Machines Corporation | Parallel processors sequentially encoding/decoding compaction maintaining format compatibility |
US5604899A (en) | 1990-05-21 | 1997-02-18 | Financial Systems Technology Pty. Ltd. | Data relationships processor with unlimited expansion capability |
US5287193A (en) | 1991-04-10 | 1994-02-15 | Industrial Technology Research Institute | Parallel processing architecture of run-length codes |
US5423010A (en) | 1992-01-24 | 1995-06-06 | C-Cube Microsystems | Structure and method for packing and unpacking a stream of N-bit data to and from a stream of N-bit data words |
US6058473A (en) * | 1993-11-30 | 2000-05-02 | Texas Instruments Incorporated | Memory store from a register pair conditional upon a selected status bit |
US5581705A (en) | 1993-12-13 | 1996-12-03 | Cray Research, Inc. | Messaging facility with hardware tail pointer and software implemented head pointer message queue for distributed memory massively parallel processing system |
GB2306280B (en) | 1994-09-30 | 1997-10-22 | Ricoh Kk | A coding system and entropy decoder |
US5887183A (en) | 1995-01-04 | 1999-03-23 | International Business Machines Corporation | Method and system in a data processing system for loading and storing vectors in a plurality of modes |
US5511190A (en) | 1995-01-20 | 1996-04-23 | Tandem Computers, Inc. | Hash-based database grouping system and method |
JP3518034B2 (ja) | 1995-03-30 | 2004-04-12 | 三菱電機株式会社 | ソート方法並びにソート処理装置並びにデータ処理装置 |
US5592622A (en) | 1995-05-10 | 1997-01-07 | 3Com Corporation | Network intermediate system with message passing architecture |
US5655080A (en) | 1995-08-14 | 1997-08-05 | International Business Machines Corporation | Distributed hash group-by cooperative processing |
US5696956A (en) | 1995-11-08 | 1997-12-09 | Digital Equipment Corporation | Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents |
US5675382A (en) | 1996-04-08 | 1997-10-07 | Connectix Corporation | Spatial compression and decompression for video |
US5706495A (en) | 1996-05-07 | 1998-01-06 | International Business Machines Corporation | Encoded-vector indices for decision support and warehousing |
US5884229A (en) | 1996-06-10 | 1999-03-16 | Exxon Production Research Company | Method for measuring lateral continuity at a specified subsurface location from seismic data |
US6178405B1 (en) | 1996-11-18 | 2001-01-23 | Innomedia Pte Ltd. | Concatenation compression method |
AUPO647997A0 (en) * | 1997-04-30 | 1997-05-22 | Canon Information Systems Research Australia Pty Ltd | Memory controller architecture |
US5933650A (en) | 1997-10-09 | 1999-08-03 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US6047081A (en) | 1997-10-24 | 2000-04-04 | Imation Corp. | Image processing software system having configurable communication pipelines |
US6006179A (en) | 1997-10-28 | 1999-12-21 | America Online, Inc. | Audio codec using adaptive sparse vector quantization with subband vector classification |
FR2770660B1 (fr) | 1997-11-03 | 2000-08-25 | Inside Technologies | Microprocesseur, notamment pour carte a puce |
US6065070A (en) | 1998-03-18 | 2000-05-16 | National Semiconductor Corporation | DMA configurable channel with memory width N and with steering logic comprising N multiplexors, each multiplexor having a single one-byte input and N one-byte outputs |
US20010049780A1 (en) | 1998-03-27 | 2001-12-06 | Shreekant Thakkar | Method and apparatus for performing integer operations in response to a result of a floating point operation |
US6219457B1 (en) | 1998-05-26 | 2001-04-17 | Silicon Graphics, Inc. | Method and system for decoding data encoded in a variable length code word |
EP1046100A1 (en) | 1998-08-06 | 2000-10-25 | Trimedia Technologies, Inc. | Data processor and method of processing data |
JP2000187668A (ja) | 1998-12-22 | 2000-07-04 | Hitachi Ltd | グループ化方法と重複排除方法 |
JP2000261674A (ja) | 1999-03-09 | 2000-09-22 | Fujitsu Ltd | 画像伸長装置 |
US6826522B1 (en) | 1999-06-21 | 2004-11-30 | Pts Corporation | Methods and apparatus for improved efficiency in pipeline simulation and emulation |
US6416410B1 (en) | 1999-12-03 | 2002-07-09 | Nintendo Co., Ltd. | Data compression/decompression based on pattern and symbol run length encoding for use in a portable handheld video game system |
US6331826B1 (en) | 2000-01-04 | 2001-12-18 | International Business Machines Corporation | Method for providing an improved run-length encoding algorithm for data compression |
WO2001050612A1 (en) | 2000-01-05 | 2001-07-12 | Realnetworks, Inc. | Systems and methods for multiple-file data compression |
US6671797B1 (en) | 2000-02-18 | 2003-12-30 | Texas Instruments Incorporated | Microprocessor with expand instruction for forming a mask from one bit |
US6934712B2 (en) | 2000-03-21 | 2005-08-23 | International Business Machines Corporation | Tagging XML query results over relational DBMSs |
US6598041B1 (en) | 2000-09-07 | 2003-07-22 | International Business Machines Corporation | Method, system, and program for processing modifications to data in tables in a database system |
US6917987B2 (en) | 2001-03-26 | 2005-07-12 | Intel Corporation | Methodology and mechanism for remote key validation for NGIO/InfiniBand™ applications |
US6745174B2 (en) | 2001-03-29 | 2004-06-01 | Hewlett-Packard Development Company, L.P. | Method of executing before-triggers in an active database |
US20020188830A1 (en) | 2001-06-01 | 2002-12-12 | Brian Boles | Bit replacement and extraction instructions |
US6996569B1 (en) | 2001-06-20 | 2006-02-07 | Microstrategy Incorporated | Systems and methods for custom grouping of data |
US20030182464A1 (en) | 2002-02-15 | 2003-09-25 | Hamilton Thomas E. | Management of message queues |
US20030167460A1 (en) | 2002-02-26 | 2003-09-04 | Desai Vipul Anil | Processor instruction set simulation power estimation method |
JP2003271541A (ja) * | 2002-03-14 | 2003-09-26 | Fuji Xerox Co Ltd | Dma転送装置およびその制御方法 |
US6823329B2 (en) | 2002-04-02 | 2004-11-23 | Sybase, Inc. | Database system providing methodology for acceleration of queries involving functional expressions against columns having enumerated storage |
US7127467B2 (en) | 2002-05-10 | 2006-10-24 | Oracle International Corporation | Managing expressions in a database system |
US7249118B2 (en) | 2002-05-17 | 2007-07-24 | Aleri, Inc. | Database system and methods |
US7020661B1 (en) | 2002-07-10 | 2006-03-28 | Oracle International Corporation | Techniques for pruning a data object during operations that join multiple data objects |
US6986023B2 (en) | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
JP3958662B2 (ja) | 2002-09-25 | 2007-08-15 | 松下電器産業株式会社 | プロセッサ |
US6842848B2 (en) | 2002-10-11 | 2005-01-11 | Sandbridge Technologies, Inc. | Method and apparatus for token triggered multithreading |
US7673304B2 (en) | 2003-02-18 | 2010-03-02 | Microsoft Corporation | Multithreaded kernel for graphics processing unit |
US7730292B2 (en) | 2003-03-31 | 2010-06-01 | Hewlett-Packard Development Company, L.P. | Parallel subword instructions for directing results to selected subword locations of data processor result register |
US7013378B2 (en) | 2003-04-30 | 2006-03-14 | Hewlett-Packard Development Company, L.P. | Method and system for minimizing the length of a defect list for a storage device |
US7433886B2 (en) | 2003-10-24 | 2008-10-07 | Microsoft Corporation | SQL language extensions for modifying collection-valued and scalar valued columns in a single statement |
US7984453B2 (en) | 2003-11-19 | 2011-07-19 | Cray Inc. | Event notifications relating to system failures in scalable systems |
US7047252B2 (en) | 2003-12-02 | 2006-05-16 | Oracle International Corporation | Complex computation across heterogenous computer systems |
US9557994B2 (en) * | 2004-07-13 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number |
US7469241B2 (en) | 2004-11-30 | 2008-12-23 | Oracle International Corporation | Efficient data aggregation operations using hash tables |
US7814104B2 (en) | 2005-05-04 | 2010-10-12 | Oracle International Corporation | Techniques for partition pruning |
US7725595B1 (en) | 2005-05-24 | 2010-05-25 | The United States Of America As Represented By The Secretary Of The Navy | Embedded communications system and method |
JP2007079789A (ja) | 2005-09-13 | 2007-03-29 | Nec Corp | 計算機システム及びイベント処理方法 |
US7861060B1 (en) | 2005-12-15 | 2010-12-28 | Nvidia Corporation | Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior |
US8049760B2 (en) | 2006-02-06 | 2011-11-01 | Via Technologies, Inc. | System and method for vector computations in arithmetic logic units (ALUs) |
US7783862B2 (en) | 2006-08-07 | 2010-08-24 | International Characters, Inc. | Method and apparatus for an inductive doubling architecture |
US8156082B2 (en) | 2006-10-06 | 2012-04-10 | Sybase, Inc. | System and methods for temporary data management in shared disk cluster |
US8380742B2 (en) | 2006-10-10 | 2013-02-19 | Microsoft Corporation | Integration of database reporting with ERP systems |
US8533216B2 (en) | 2006-10-30 | 2013-09-10 | Teradata Us, Inc. | Database system workload management method and system |
US7769729B2 (en) | 2007-05-21 | 2010-08-03 | Sap Ag | Block compression of tables with repeated values |
US8032499B2 (en) | 2007-05-21 | 2011-10-04 | Sap Ag | Compression of tables based on occurrence of values |
US20090037700A1 (en) | 2007-07-30 | 2009-02-05 | Clear Falls Pty Ltd | Method and system for reactively assigning computational threads of control between processors |
US9524317B2 (en) | 2007-08-24 | 2016-12-20 | International Business Machines Corporation | Optimization of aggregate queries in database management systems using an early out join when processing min and max functions |
US20090070786A1 (en) | 2007-09-11 | 2009-03-12 | Bea Systems, Inc. | Xml-based event processing networks for event server |
HUE042697T2 (hu) | 2007-09-24 | 2019-07-29 | Hasso Plattner Inst Fuer Digital Engineering Ggmbh | ETL kisebb nulla redundancia rendszer és eljárás OLTP adatok jelentésére |
US8078595B2 (en) | 2007-10-09 | 2011-12-13 | Oracle International Corporation | Secure normal forms |
US7991794B2 (en) | 2007-12-18 | 2011-08-02 | Oracle International Corporation | Pipelining operations involving DML and query |
US7769726B2 (en) | 2007-12-31 | 2010-08-03 | Sap, Ag | Method for verification of data and metadata in a data repository |
US8275761B2 (en) | 2008-05-15 | 2012-09-25 | International Business Machines Corporation | Determining a density of a key value referenced in a database query over a range of rows |
US8374986B2 (en) | 2008-05-15 | 2013-02-12 | Exegy Incorporated | Method and system for accelerated stream processing |
US7979399B2 (en) | 2008-06-10 | 2011-07-12 | International Business Machines Corporation | Database journaling in a multi-node environment |
US8832112B2 (en) | 2008-06-17 | 2014-09-09 | International Business Machines Corporation | Encoded matrix index |
US20100030728A1 (en) | 2008-07-29 | 2010-02-04 | Oracle International Corporation | Computing selectivities for group of columns and expressions |
US8108361B2 (en) | 2008-07-31 | 2012-01-31 | Microsoft Corporation | Efficient column based data encoding for large-scale data storage |
US9430526B2 (en) | 2008-09-29 | 2016-08-30 | Teradata Us, Inc. | Method and system for temporal aggregation |
US20100088309A1 (en) | 2008-10-05 | 2010-04-08 | Microsoft Corporation | Efficient large-scale joining for querying of column based data encoded structures |
US9639493B2 (en) | 2008-11-05 | 2017-05-02 | Micron Technology, Inc. | Pattern-recognition processor with results buffer |
US8312038B2 (en) | 2008-12-18 | 2012-11-13 | Oracle International Corporation | Criteria builder for query builder |
KR100998929B1 (ko) | 2009-01-23 | 2010-12-09 | 한국과학기술원 | 캐쉬 컨트롤러 장치, 캐쉬 컨트롤러 장치를 이용한 인터페이스 방법 및 프로그래밍 방법 |
US8725707B2 (en) | 2009-03-26 | 2014-05-13 | Hewlett-Packard Development Company, L.P. | Data continuous SQL process |
US8935223B2 (en) | 2009-04-30 | 2015-01-13 | Oracle International Corporation | Structure of hierarchical compressed data structure for tabular data |
US8285709B2 (en) | 2009-05-12 | 2012-10-09 | Teradata Us, Inc. | High-concurrency query operator and method |
EP2290562A1 (en) | 2009-08-24 | 2011-03-02 | Amadeus S.A.S. | Segmented main-memory stored relational database table system with improved collaborative scan algorithm |
WO2011023424A1 (en) | 2009-08-27 | 2011-03-03 | International Business Machines Corporation | A method and system for testing a computer program |
US9110594B2 (en) | 2009-11-04 | 2015-08-18 | Seagate Technology Llc | File management system for devices containing solid-state media |
US8832142B2 (en) | 2010-08-30 | 2014-09-09 | Oracle International Corporation | Query and exadata support for hybrid columnar compressed data |
US8103658B2 (en) | 2009-11-13 | 2012-01-24 | Oracle International Corporation | Index backbone join |
US8516268B2 (en) | 2010-08-23 | 2013-08-20 | Raytheon Company | Secure field-programmable gate array (FPGA) architecture |
US8649783B2 (en) | 2010-09-22 | 2014-02-11 | Nuance Communications, Inc. | No-cost mobile device messaging, such as for provisioning an application on a mobile device |
US8260803B2 (en) | 2010-09-23 | 2012-09-04 | Hewlett-Packard Development Company, L.P. | System and method for data stream processing |
US8938644B2 (en) | 2010-12-03 | 2015-01-20 | Teradata Us, Inc. | Query execution plan revision for error recovery |
FR2969156B1 (fr) | 2010-12-21 | 2013-02-08 | Chryso | Polymere comportant une fonction hydrolysable utilisable comme fluidifiant |
US8996463B2 (en) | 2012-07-26 | 2015-03-31 | Mongodb, Inc. | Aggregation framework system architecture and method |
US10311105B2 (en) | 2010-12-28 | 2019-06-04 | Microsoft Technology Licensing, Llc | Filtering queried data on data stores |
US8676834B2 (en) | 2011-02-16 | 2014-03-18 | International Business Machines Corporation | Set-level comparisons in dynamically formed groups |
US9432298B1 (en) * | 2011-12-09 | 2016-08-30 | P4tents1, LLC | System, method, and computer program product for improving memory systems |
US8244780B1 (en) | 2011-04-13 | 2012-08-14 | Sprint Communications Company L.P. | Parameter oriented automated database command |
US20120303633A1 (en) | 2011-05-26 | 2012-11-29 | International Business Machines Corporation | Systems and methods for querying column oriented databases |
FR2976409B1 (fr) | 2011-06-07 | 2013-07-12 | Souriau Sas | Procede et outillage d'insertion de ferrites dans un connecteur electrique filtre |
EP2729883B1 (en) | 2011-07-08 | 2021-12-29 | Yale University | Query execution systems and methods |
EP2788901A1 (en) | 2011-12-08 | 2014-10-15 | Oracle International Corporation | Techniques for maintaining column vectors of relational data within volatile memory |
US9342314B2 (en) | 2011-12-08 | 2016-05-17 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors |
US9792117B2 (en) | 2011-12-08 | 2017-10-17 | Oracle International Corporation | Loading values from a value vector into subregisters of a single instruction multiple data register |
US9697174B2 (en) | 2011-12-08 | 2017-07-04 | Oracle International Corporation | Efficient hardware instructions for processing bit vectors for single instruction multiple data processors |
US10534606B2 (en) | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
US9317342B2 (en) | 2011-12-23 | 2016-04-19 | Intel Corporation | Characterization of within-die variations of many-core processors |
CN104126166A (zh) | 2011-12-23 | 2014-10-29 | 英特尔公司 | 用于执行使用掩码的向量打包一元编码的系统、装置和方法 |
US9563658B2 (en) | 2012-08-20 | 2017-02-07 | Oracle International Corporation | Hardware implementation of the aggregation/group by operation: hash-table method |
US9600522B2 (en) | 2012-08-20 | 2017-03-21 | Oracle International Corporation | Hardware implementation of the aggregation/group by operation: filter method |
US9176999B2 (en) | 2012-09-13 | 2015-11-03 | International Business Machines Corporation | Multiplication-based method for stitching results of predicate evaluation in column stores |
US9292569B2 (en) | 2012-10-02 | 2016-03-22 | Oracle International Corporation | Semi-join acceleration |
WO2014144889A2 (en) | 2013-03-15 | 2014-09-18 | Amazon Technologies, Inc. | Scalable analysis platform for semi-structured data |
US10929501B2 (en) | 2013-08-08 | 2021-02-23 | Sap Se | Managing and querying spatial point data in column stores |
US11113054B2 (en) | 2013-09-10 | 2021-09-07 | Oracle International Corporation | Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression |
US9430390B2 (en) | 2013-09-21 | 2016-08-30 | Oracle International Corporation | Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications |
US9326000B2 (en) | 2014-07-02 | 2016-04-26 | Omnivision Technologies (Shanghai) Co., Ltd. | Method and system for still image encoding and random access decoding |
US9658675B1 (en) | 2015-02-19 | 2017-05-23 | Amazon Technologies, Inc. | Achieving power saving by a circuit including pluralities of processing cores based on status of the buffers used by the processing cores |
US10025822B2 (en) | 2015-05-29 | 2018-07-17 | Oracle International Corporation | Optimizing execution plans for in-memory-aware joins |
US10067954B2 (en) | 2015-07-22 | 2018-09-04 | Oracle International Corporation | Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations |
US10055358B2 (en) | 2016-03-18 | 2018-08-21 | Oracle International Corporation | Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors |
US10599488B2 (en) | 2016-06-29 | 2020-03-24 | Oracle International Corporation | Multi-purpose events for notification and sequence control in multi-core processor systems |
US10380058B2 (en) | 2016-09-06 | 2019-08-13 | Oracle International Corporation | Processor core to coprocessor interface with FIFO semantics |
US10783102B2 (en) | 2016-10-11 | 2020-09-22 | Oracle International Corporation | Dynamically configurable high performance database-aware hash engine |
-
2016
- 2016-03-18 US US15/073,905 patent/US10061714B2/en active Active
-
2017
- 2017-03-17 EP EP17714368.2A patent/EP3430521B1/en active Active
- 2017-03-17 CN CN201780028187.8A patent/CN109416674B/zh active Active
- 2017-03-17 WO PCT/US2017/022975 patent/WO2017161275A1/en active Application Filing
- 2017-03-17 EP EP20163192.6A patent/EP3686745B1/en active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5175810A (en) * | 1989-06-19 | 1992-12-29 | Digital Equipment Corporation | Tabular data format |
US20030184457A1 (en) * | 1999-12-14 | 2003-10-02 | Vivian Hsiun | Programmable variable-length decoder |
US7603488B1 (en) * | 2003-07-15 | 2009-10-13 | Alereon, Inc. | Systems and methods for efficient memory management |
CN101031888A (zh) * | 2004-09-30 | 2007-09-05 | 英特尔公司 | 用于直接存储器存取地址转换的错误处理 |
US20060179255A1 (en) * | 2005-02-08 | 2006-08-10 | Takeshi Yamazaki | Methods and apparatus for synchronizing data access to a local memory in a multi-processor system |
CN1916877A (zh) * | 2005-08-19 | 2007-02-21 | 国际商业机器公司 | 在处理器与存储器流控制器间传送命令参数的系统和方法 |
CN101162492A (zh) * | 2006-08-16 | 2008-04-16 | Arm有限公司 | 保护数据处理设备中的系统控制寄存器 |
US20090319550A1 (en) * | 2008-06-23 | 2009-12-24 | Kickfire, Inc. | Fast bulk loading and incremental loading of data into a database |
WO2011040928A1 (en) * | 2009-10-02 | 2011-04-07 | Intel Corporation | Method and appratus for managing a random array of independent disks (raid) |
CN104934057A (zh) * | 2014-03-17 | 2015-09-23 | 日本电气株式会社 | 访问计数设备、存储器系统和访问计数方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11379660B2 (en) * | 2019-06-27 | 2022-07-05 | International Business Machines Corporation | Deep learning approach to computing spans |
CN115002052A (zh) * | 2022-07-18 | 2022-09-02 | 井芯微电子技术(天津)有限公司 | 一种分层的缓存控制器、控制方法及控制设备 |
CN115002052B (zh) * | 2022-07-18 | 2022-10-25 | 井芯微电子技术(天津)有限公司 | 一种分层的缓存控制器、控制方法及控制设备 |
Also Published As
Publication number | Publication date |
---|---|
EP3430521A1 (en) | 2019-01-23 |
US10061714B2 (en) | 2018-08-28 |
EP3686745A1 (en) | 2020-07-29 |
CN109416674B (zh) | 2022-06-03 |
EP3686745B1 (en) | 2022-06-22 |
WO2017161275A1 (en) | 2017-09-21 |
EP3430521B1 (en) | 2020-07-15 |
US20170270052A1 (en) | 2017-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109416674A (zh) | 用于暂存器使能的多核处理器的元组编码感知直接存储器访问引擎 | |
CN109154934A (zh) | 用于暂存器使能的多核处理器的行程长度编码感知直接存储器访问过滤引擎 | |
US10061832B2 (en) | Database tuple-encoding-aware data partitioning in a direct memory access engine | |
DE3751514T2 (de) | Adressieranordnung für RAM-Puffer-Steuereinrichtung. | |
DE68928980T2 (de) | Multiprozessor mit Koordinatenschalter zwischen Prozessoren und Speichern | |
DE68924934T2 (de) | Parallelsynchronisationstechnik. | |
DE102018212479A1 (de) | Technologien zum Verwalten einer flexiblen Host-Schnittstelle eines Netzwerkschnittstellen-Controllers | |
EP3869352A1 (en) | Network-on-chip data processing method and device | |
US10459859B2 (en) | Multicast copy ring for database direct memory access filtering engine | |
DE69111764T2 (de) | Übereinstimmungsprotokolle für Mehrprozessoren mit gemeinsam genutztem Speicher. | |
US10402425B2 (en) | Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors | |
US6298382B1 (en) | Information retrieving method, information retrieving system, and retrieval managing unit for the same | |
US20150117795A1 (en) | Image processing apparatus | |
DE10104209A1 (de) | Verfahren und System zum Erhöhen der Leistung durch Ersetzen einer Steuerung einer Maschine mit finiten Zuständen durch eine hardware-implementierte Datenstrukturmanipulation | |
WO2005106713A1 (ja) | 情報処理方法及び情報処理システム | |
US20050246667A1 (en) | Bus structure, database and method of designing interface | |
US9703739B2 (en) | Return available PPI credits command | |
US10176114B2 (en) | Row identification number generation in database direct memory access engine | |
JP4117621B2 (ja) | データ一括転送装置 | |
US10725947B2 (en) | Bit vector gather row count calculation and handling in direct memory access engine | |
US9548947B2 (en) | PPI de-allocate CPP bus command | |
US9699107B2 (en) | Packet engine that uses PPI addressing | |
US9559988B2 (en) | PPI allocation request and response for accessing a memory system |
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 |