发明内容
针对上文描述的关于带宽和延时的问题,根据本公开的实施例提供了解决方案。总的来说,根据本公开的实施例提供了一种***,在此可称为存储访问打包(PackedMemory Access,PMA)子***,其中主机端的组件将存储访问请求(读请求或写请求)累积、打包在单个包(事务)中,可选地,也可以对打包在单个包中的存储访问请求进行压缩。介质端的辅助组件在单个包中响应各个请求,该单个包也可以被压缩。
更具体地,在一些实施例中,PMA子***包括耦合至处理器的写请求队列和读请求队列,其中,处理器包括一个或多个处理器核。来自处理器核的写请求排列在写请求队列中,来自处理器的读请求排列在读请求队列中。当写请求队列中的写请求的数量达到写请求队列的阈值数量时,PMA子***将写请求队列中的多个写请求打包在单个写请求包中;当读请求队列中的读请求的数量达到读请求队列的阈值数量时,PMA子***将读请求队列中的多个读请求打包在单个读请求包中。
介质端包括存储子***,所述存储子***例如包括存储控制器和存储装置(例如,存储模块)。在写请求包完成后,由PMA子***向介质端发送写请求包;在读请求包完成后,由PMA子***向介质端发送读请求包。
在一些实施例中,读请求包包括但不限于:用于标识读请求包中的读请求的数量的信息;以及与读请求包中的读请求相关联的地址。
在一些实施例中,写请求包包括但不限于:用于标识写请求包中写请求的数量的信息;与写请求包中的写请求相关联的地址;以及需要写入至所述相关联的地址的数据。
在一些实施例中,PMA子***用于:在打包写请求包之前,对需要包括在写请求包中的信息进行压缩;在打包读请求包之前,对需要包括在读请求包中的信息进行压缩。
在一些实施例中,存储子***对由PMA子***发送的写请求包进行解包,并且,基于写请求包中的地址,将写请求包中的数据写入存储模块中的相应位置。
在一些实施例中,存储子***用于:对由PMA子***发送的读请求包进行解包;基于读请求包中的地址从存储模块中的相应位置读取数据;将从存储模块读取到的数据打包在读响应包中;并将读响应包发送到PMA子***。在一些实施例中,存储子***在对打包读响应包之前,对需要包括在读响应包中的信息进行压缩。
在一些实施例中,PMA子***接收读响应包;对读响应包进行解包;将读响应包中的信息存储在加载/存储队列中;并将数据从加载/存储队列发送到处理器核(其发出了读请求包中包含的请求)。在一些实施例中,如果读响应包中的数据被压缩,则PMA子***还用于对读响应包中的数据进行解压缩。
根据本公开的第一方面,提供了一种由计算机实现的方法,其中,包括:接收第一请求,所述第一请求为存储访问请求;将所述第一请求添加至第一队列;当所述第一队列中存储访问请求的数量达到阈值数量时,将多个请求打包在单个的第一包中,所述多个请求包括所述第一请求和所述第一队列中其它的存储访问请求;以及向存储设备发送所述第一包,所述第一包包括所述多个请求。
在一些实施例中,所述第一包包括:读请求和写请求之一,且所述第一队列包括:读请求队列和写请求队列之一。
在一些实施例中,所述第一包还包括:类型标识信息,用于对所述第一包中请求的类型进行标识;数量标识信息,用于对所述第一包中请求的数量进行标识;以及请求关联地址,是与所述第一包中的请求相关联的地址。
在一些实施例中,在所述第一包中请求的类型为写请求的情况下,所述第一包还包括:需要写入至所述请求关联地址的数据。
在一些实施例中,该方法还包括:在所述将多个请求打包在第一包中以及所述向存储设备发送第一包的步骤之前,对需要包括在所述第一包中的信息进行压缩。
在一些实施例中,该方法还包括:在所述向存储设备发送第一包的步骤之后,接收第二包,在所述第一包包括读请求的情况下,所述第二包包括从存储器读出的读出数据,所述读出数据响应于所述第一包。
在一些实施例中,该方法还包括:对所述第二包中的第一信息进行解包;将所述第二包中的所述第一信息存储在加载/存储队列中;以及将与所述第一请求相关联的数据从所述加载/存储队列发送到处理器核,所述第一请求由所述处理器核发出。
在一些实施例中,该方法,其中,还包括:对所述第二包中被压缩的信息进行解压缩。
根据本公开的第二方面,提供了一种计算机***,包括:一种处理器,包括多个处理器核;存储子***,与所述处理器耦合;以及存储访问打包子***,耦合在所述处理器和所述存储子***之间,所述存储访问打包子***包括写请求队列和读请求队列,其中,来自所述处理器的写请求在所述写请求队列中排队,来自所述处理器的读请求在所述读请求队列中排队;当所述写请求队列中写请求的数量达到写请求的阈值数量时,所述存储访问打包子***将所述写请求队列中的写请求打包在写请求包中;当所述读请求队列中读请求的数量达到读请求的阈值数量时,所述存储访问打包子***将所述读请求队列中的读请求打包在读请求包中;以及在所述写请求包完成后,所述存储访问子***将所述写请求包发送至所述存储子***;在所述读请求包完成后,所述存储访问子***将所述读请求包发送至所述存储子***。
在一些实施例中,所述读请求包包括:读请求数量标识信息,用于对所述读请求包中读请求的数量进行标识;以及读请求关联地址,是与所述读请求包中的读请求相关联的地址。
在一些实施例中,所述写请求包包括:写请求数量标识信息,用于对所述写请求包中的写请求的数量进行标识;写请求关联地址,与所述写请求包中的写请求相关联;以及需要写入至所述写请求关联地址的数据。
在一些实施例中,所述存储访问打包子***在打包所述写请求包之前,对需要包括在所述写请求包中的信息进行压缩;所述存储访问打包子***在打包所述读请求包之前,对需要包括在所述读请求包中的信息进行压缩。
在一些实施例中,所述存储子***包括:多通道的存储控制器;以及多个存储模块,与所述存储控制器耦合。所述存储子***用于:对所述存储访问打包子***发送的写请求包进行解包,其中所述存储访问打包子***发送的所述写请求包包括第一数据和第一地址;以及根据所述第一地址将所述第一数据写入所述多个存储模块。
在一些实施例中,所述存储子***包括:多通道的存储控制器;以及多个存储模块,与所述存储控制器耦合。所述存储子***用于:对所述存储访问打包子***发送的读请求包进行解包,所述存储访问打包子***发送的所述读请求包包括第二地址;基于所述第二地址从所述多个存储模块读取第二数据;将所述第二数据打包在读响应包中;以及将所述读响应包发送到所述存储访问打包子***。
在一些实施例中,所述存储子***用于:在打包所述读响应包之前,对需要包括在所述读响应包中的信息进行压缩。
在一些实施例中,所述存储访问打包子***用于:接收读响应包,所述读响应包响应于由所述存储访问打包子***发送的第一读请求包,所述读响应包包括读出数据,所述读出数据是响应于所述第一读请求包而从所述存储器中读取到的数据;对所述读响应包进行解包;将所述读响应包中的信息存储在加载/存储队列中;以及将来自所述加载/存储队列的数据发送至处理器核,所述第一读请求包中的请求由所述处理器核发出。
在一些实施例中,在所述读响应包中的所述读出数据被压缩的情况下,所述存储访问打包子***还用于对所述读出数据进行解压缩。
根据本公开的第三方面,还提供了一种非暂时性计算机可读存储介质,其包括存储在其上的计算机可执行指令,所述计算机可执行指令包括:第一指令,用于将第一请求添加到第一队列中,所述第一请求为存储访问请求;第二指令,当所述第一队列中存储访问请求的数量达到阈值数量时,所述第二指令用于将多个请求打包在单个的第一包中,所述多个请求包括所述第一请求和所述第一队列中其它的存储访问请求;以及第三指令,用于将所述第一包发送到存储设备,所述第一包包括所述多个请求。
在一些实施例中,所述计算机可执行指令还包括第四指令,所述第四指令包括在所述第一包中,并用于提供:类型标识信息,用于对所述第一包中请求的类型进行标识;数量标识信息,用于对所述第一包中请求的数量进行标识;以及请求关联地址,是与所述第一包中的请求相关联的地址。
在一些实施例中,所述计算机可执行指令还包括第五指令,所述第五指令包括在所述第一包中,并用于:在所述第一包中请求的类型是写请求的情况下,提供需要写入至所述请求关联地址的数据。
在一些实施例中,所述计算机可执行指令还包括第六指令,用于对需要包括在所述第一包中的信息进行压缩。
在一些实施例中,所述计算机可执行指令还包括:解包指令,用于对第二包中的第二信息进行解包,其中在所述第一包包括读请求的情况下,所述第二包包括读出数据,所述读出数据是响应于所述第一包而从存储器中读取的数据;存储指令,用于在加载/存储队列中存储所述第二信息;以及发送指令,用于将与所述第一请求相关联的数据从所述加载/存储队列发送到处理器核,所述第一请求由所述处理器核发出。
在一些实施例中,所述计算机可执行指令还包括:解压缩指令,用于对所述第二包中被压缩的信息进行解压缩的指令。
根据本公开的实施例减少了存储访问请求的数量。每个包包括一个轻量级头和一个包含多个存储访问请求(读请求或写请求)的有效载荷。从而可以降低成本和延时,并因此提高了带宽效率、提高了执行存储访问请求(例如,读请求和写请求)的速度。
本领域普通技术人员在阅读了以下由各个附图所示的实施例的详细描述之后,将认识到本发明的各个实施例所具有的上述目的、其他目的以及优点。
具体实施方式
下文将详细参考本公开的各种实施例,其示例在附图中示出。尽管本文结合这些实施例进行了描述,但应当理解,这并不意味着要将本公开限制于这些实施例。本公开旨在覆盖可包括在由所附权利要求限定的本公开的精神和范围内的替代、修改和等同方案。此外,在本公开的以下详细描述中,阐述了许多具体细节,以便提供对本公开的透彻理解。然而,需要理解的是,本公开可以在没有这些特定细节的情况下被实践。另一方面,公知的方法、过程、组件和电路没有被详细描述,以避免不必要地模糊本公开的各方面。
在下文中详细描述的某些部分是根据对计算机存储器内的数据位执行的过程、逻辑块、处理和其它符号表示的操作来呈现的。这些描述和表示是数据处理领域的技术人员所使用的手段,从而以最有效的方式将其工作的实质传达给本领域的其他技术人员。在本申请中,过程、逻辑块、处理等被构思为实现期望结果且自洽的一系列的步骤或指令。这些步骤是利用物理量的物理操作。通常,尽管不一定,这些量采用能够在计算机***中存储、传输、组合、比较和以其他方式***作的电或磁信号的形式。
主要出于通用的原因,将这些信号称为事务、比特、值、元素、符号、字符、样本、像素等有时被证明是便利的。
然而,应当记住,所有这些以及类似的术语都应与适当的物理量相关联,并且仅仅是应用于这些量的便利标记。除非在以下讨论中另外有显而易见的特别说明,否则应当理解,在整个本公开中,使用诸如“接收”、“添加”、“打包”、“发送”、“写入”、“读取”、“压缩”、“解压缩”、“解包”、“存储”等术语的讨论是指设备或计算机***或类似的电子计算设备或***(例如,图3和图4所示的***)的动作和处理过程。计算机***或类似的电子计算设备在存储器、寄存器或其它这样用于信息存储、传输或显示的设备内对表示为物理(电学)量的数据进行操作和变换。
可以在驻留在由一个或多个计算机或其它设备执行的某种形式的计算机可读存储介质(例如程序模块)上的计算机可执行指令的一般上下文中讨论在此描述的一些元件或实施例。作为示例而非限制,计算机可读存储介质可以包括非暂时性计算机存储介质和通信介质。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。在各种实施例中,程序模块的功能可以根据需要组合或分布。
计算机存储介质包括以任何方法或技术实现的易失性和非易失性、可移动和不可移动介质,用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息。计算机存储介质包括但不限于随机存取存储器(Random Access Memory,可简称为RAM)或动态随机存储器(Dynamic Random Access Memory,可简称为DRAM)、只读存储器(Read OnlyMemory,可简称为ROM)、电可擦除可编程只读存储器(Electrically ErasableProgrammable Read Only Memory,可简称为EEPROM)、闪存(Flash Memory,例如SSD)或其它存储器技术、致密盘只读存储器(Compact Disk Read Only Memory,可简称为CD-ROM)、数字多功能盘(Digital Versatile Disk,可简称为DVD)或其它光存储器、盒式磁带(Magnetic Cassette)、磁带(Magnetic Tape)、磁盘存储器(Magnetic Disk Storage)或其它磁存储设备、或可用于存储所需信息并可访问以检索该信息的任何其它介质。
通信介质可以用于具体表达计算机可执行指令、数据结构和程序模块,并且可以包括任意信息传递介质。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、射频(Radio Frequency,RF)、红外和其它无线介质的无线介质。上述任意组合也可以包括在计算机可读介质的范围内。
根据本公开的实施例包括计算机***,该计算机***包括用于实现存储端指针追踪的组件。根据本公开的实施例可以应用在诸如但不限于图相关的应用中,图相关的应用例如包括采用图神经网络的图分析。根据本公开的实施例可用于计算机***的子***,在此可称为存储访问打包(Packed Memory Access,可简称为PMA)子***。PMA子***对来自处理器核的存储访问请求(读请求或写请求)进行累积、打包,并可选择性地将来自处理器核的存储访问请求压缩在单个事务(包)中,再将该包发送到辅助的存储子***。存储子***对该包进行解包(并且,如果该包已被压缩,则对包信息进行解压缩),并处理这些请求(例如,用于请求对存储模块进行数据的读取或写入)。存储子***还用于:将对应于读请求的响应打包在单个包中,并且该包也可以被压缩。PMA子***对来自存储子***的包进行解包(并且,如果该包被压缩,则对包信息进行解压缩),并将该包中的数据转发到发起读请求的处理器核。
图1示出了根据本公开的实施例的方法的流程示意图100。由流程图100中的框所表示的全部或部分操作可以被实现为驻留在某种形式的非暂时性计算机可读存储介质上的计算机可执行指令,所述计算机可执行指令可以分别被诸如图3和图4所示的计算机***300和400的计算机***执行。
在图1所示的框102中,PMA子***(如图3和4所示)接收存储访问请求。存储访问请求可以是读请求或写请求。
在图1所示的框104中,存储访问请求被添加到队列中。在一些实施例中,分别对读请求和写请求使用单独的队列。因此,在这些实施例中,读请求被添加到读请求队列中,而写请求被添加到写请求队列中。
在框106中,在队列中请求的数量达到阈值数量的情况下,将该队列中的请求打包在单个包中。更具体地,在写请求队列中的写请求的数量达到写请求队列的阈值数量的情况下,写请求队列中的写请求被PMA子***打包在单个写请求包中;在读请求队列中的读请求的数量达到读请求队列的阈值数量的情况下,读请求队列中的读请求被PMA子***打包在单个读请求包中。队列的阈值数量的值由变量(本文中称为PLEN)设置,下面会对此进一步讨论。在一些实施例中,变量PLEN的值可由用户设置和调整。写请求队列的阈值数量和读请求队列的阈值数量可以是相同的值也可以是不同的值,且对于不同的包,各个值可以发生改变。
在上述操作被执行的过程中,请求可以继续在相应的队列中累积。被打包在包中的各请求将会从相应的队列中删除。
在一些实施例中,读请求包包括但不限于:用于将包的类型标识为读请求包的信息;该读请求包中读请求的数量;以及与该读请求包中的读请求相关联的地址。需要注意的是,读请求包中读请求的数量等于被指定用于该读请求包的PLEN值。被指定用于该读请求包的PLEN值可以由用户设置和调整。结合图2C,将进一步对读请求包进行描述。
在一些实施例中,写请求包包括但不限于:用于将包的类型标识为写请求包的信息;用于标识该写请求包中写请求的数量的信息;与该写请求包中的写请求相关联的地址;以及,需要写入到该写请求包中所述相关联的地址处的数据。需要注意的是,写请求包中写请求的数量等于被指定用于该写请求包的PLEN值。被指定用于该写请求包的PLEN值可以由用户设置和调整。结合图2D,将进一步对写请求包进行描述。
在一些实施例中,在对需要包括在包中的信息进行打包之前,可以对需要包括在包中的信息进行压缩。更具体地,在一些实施例中,PMA子***可用于:在打包写请求包之前,对需要包括在写请求包中的信息进行压缩;在打包读请求包之前,对需要包括在读请求包中的信息进行压缩。在一些实施例中,被压缩的信息是包的有效载荷(例如,写请求包的有效载荷和读请求包的有效载荷),参见图2C和2D。
在图1所示的框108中,包含多个请求的包被发送至存储子***(如图3和4所示)内的存储装置(例如,存储控制器),该存储子***耦合至PMA***。
在图1所示的框110中,存储子***根据包的类型(读请求包或写请求包)对该包进行处理。如果该包包括被压缩的信息,则存储子***在对该包进行处理之前,会对被压缩的信息进行解压缩。
对于写请求包,存储子***对写请求包进行解包,并基于写请求包中的地址将写请求包中的数据写入存储模块。此外,存储子***可以向PMA子***发送写响应,以指示写请求已被提交。
对于读请求包,存储子***对读请求包进行解包,基于读请求包中的地址从存储模块中读取数据,将从存储模块读取到的数据打包在读响应包中,并将读响应包发送到PMA子***。在一些实施例中,存储子***用于:在打包读响应包之前,对需要包括在读响应包中的信息(例如,有效载荷)进行压缩。结合图2F,将进一步对读响应包进行描述。
在图1所示的框112中,PMA子***接收对读请求包的响应和对写请求包的响应。对于读响应包,PMA子***用于:接收读响应包;对读响应包进行解包;将读响应包中的信息存储在加载/存储队列中;并将来自加载/存储队列的数据发送到发起读请求(包含在相应的读请求包中)的处理器核。在一些实施例中,在执行这些操作之前,如果读响应包中包含被压缩的信息,则PMA子***对读响应包中的信息(例如,有效载荷)进行解压缩。对于写响应,PMA子***可以通知主机写请求已被提交。
上述处理参数和步骤顺序仅以示例的方式给出,并且可以根据需要或期望而改变。例如,虽然可以以特定顺序示出或描述上文所示和/或描述的步骤,但这些步骤不一定需要以上文所示或描述的顺序执行。本公开描述和/或示出的各种示例方法的一个或多个步骤还可以被省略,本公开描述和/或示出的步骤之外的附加步骤也可以包括在本公开描述和/或示出的各种实例方法中。
图2A、2B、2C、2D、2E和2F分别示出了根据本公开的实施例中包的格式的示例。示例中包括了特定字段、字段尺寸、字段布置和包宽度(例如,16位);然而,本发明并不限于此。
图2A示出了根据本公开的实施例中由处理器核发出的读请求或写请求的包202的格式的示例。在该示例中,包202包括:用于包含操作码(OPCODE)的四位字段、用于对数据的每个实例的长度(以位为单位)进行标识的三位字段(DLEN)、用于对包进行标识的九位标签、以及用于包括地址且可能包括数据的有效载荷(PAYLOAD)。在读请求包中,有效载荷包括地址;在写请求包中,有效载荷包括地址和数据。
在本示例和下面的示例中,表1可定义操作码的示例。
表1-操作码的示例
图2B示出了根据本公开的实施例中包204的通用格式的示例,该包204可以是读请求包(包括多个读请求)或写请求包(包括多个写请求)。在该示例中,包204包括:四位操作码、用于对数据长度进行标识的三位字段(DLEN)、用于对包中的存储访问请求(读请求或写请求)的数量进行标识的七位字段(PLEN)、用于对包进行标识的七位标签、用于对诸如包的类型(例如,读请求包或写请求包)进行标识的三位字段(PMA-OP)、以及包括地址(用于读和写)且可能包括数据(用于写)的有效载荷。在本示例中,标签字段被分段为两位字段和五位字段。
对于本示例和下述示例,表2可定义PMA操作码的示例。
表2-PMA操作码的示例
图2C示出了根据本公开的实施例中包括多个读请求的读请求包206的格式的示例。在该示例中,读请求包206包括上文描述的字段(结合图2B所示的示例)。读请求包206的有效载荷包括:被打包到包中的每个读请求的地址。在该示例中,每个地址字段可以如图所示被分段,这取决于地址的长度和读请求包206的宽度。
图2D示出了根据本公开的实施例中包括多个写请求的写请求包208的格式的示例。在该示例中,写请求包208包括上文描述的字段(结合图2B所描述的示例)。写请求包208的有效载荷包括:被打包到包中的每个写请求的地址;以及与该地址相关联的数据(例如,数据data-1与地址adr-1相关联)。在该示例中,每个地址字段和每个数据字段可以如图所示被分段,这取决于地址或数据的长度以及写请求包208的宽度。
图2E示出了根据本公开的实施例中用于其它类型的操作的包210的格式的示例。在该示例中,包210包括四位操作码、用于定义数据类型的三位字段(DTYPE)、九位标签、六位子操作码字段(NDP-OP)、两位保留字段(R)、多个可选操作数(OPERAND)字段以及可包括地址和数据的有效载荷。
在该示例中,表3可定义子操作码NDP-OP的示例,表4可定义数据类型DTYPE的示例。
表3-NDP-OP子操作码的示例
表4-数据类型的示例
图2F示出了根据本公开的实施例中读响应包212的格式的示例,读响应包212包括响应于读请求包(如图2C所示)的数据。在该示例中,读响应包212包括上文所述的字段(结合图2B所描述的示例)。在一种实现方案中,读响应包212具有标签,该标签与读响应包所响应的读请求包中的标签相同。包212的有效载荷包括从读请求包所包括的地址处读取到的数据。读响应包212中的PLEN值指示该读响应包所包含的数据实例的数目,并且等于读响应包所响应的读请求包中的PLEN值。在该示例中,每个数据字段可以如图所示被分段,这取决于数据的长度和读响应包212的宽度。
图3示出根据本公开的实施例中的主机计算机***300的组件或元件的示例的框图。下面描述的计算机***300包括某些设备或组件,然而,本发明并不限于此。根据本公开的计算机***可以包括下文所描述的设备或组件之外的设备或组件,例如可包括一个以上的下文所述的设备或组件。计算机***300可用于实现上述方法(结合图1所描述的示例)。
在图3所示的实施例中,计算机***300包括处理器302,其中,处理器302包括一个或多个处理器核303。计算机***300还包括PMA子***320和存储子***340。
PMA子***320包括读请求队列322和写请求队列324。读请求队列322接收来自处理器核303的读请求(READ REQ)323并对其进行排队,而写请求队列324接收来自处理器核的写请求(WRITE REQ)325并对其进行排队。读请求队列322具有大于或等于第一阈值的长度,而写请求队列324具有大于或等于第二阈值的长度,第二阈值可以与第一阈值相同,也可以与第一阈值不同。第一阈值和第二阈值分别等于包204、206和208(如图2B、2C和2D所示)中所包括的相应的PLEN值。
在一些实施例中,图3所示的PMA子***320包括打包模块328。打包模块328可根据配置信息被配置,该配置信息可由用户定义且可被改变。配置信息包括但不限于:第一阈值和第二阈值的值(例如,相应的PLEN值)。配置信息(例如,PLEN的值)可以在包级别上进行设置,并且对于不同的包,配置信息可以不同。
在读请求队列322中的读请求的数量达到第一阈值的情况下,打包模块328将该数量的读请求打包在读请求包331中(也可参见图2C)。在写请求队列324中的写入请求的数量达到第二阈值的情况下,打包模块328将该数量的写请求打包在写请求包333中(也可参见图2D)。
继续参考图3,PMA子***320和存储子***340通过相应的物理和介质访问控制(Physical and Media Access Control,MAC/PHY)层335和345耦合。
存储子***340包括解包模块350,解包模块350用于对来自PMA子***的读请求包331和写请求包333进行解包。被解包的读请求351和被解包的写请求353被转发到存储控制器360。在一些实施例中,存储控制器360是多通道的存储控制器。在一些实施例中,存储控制器360可以是四通道的存储控制器。
存储子***340还包括多个双列直插存储模块(Dual In-line Memory Module,DIMM)365。在一些实施例中,每个DIMM可以包括一个或多个DRAM。在一些实施例中,DRAM是缓冲DRAM。
响应于被解包的读请求包351,可利用读请求包中的地址从DIMM 365中读取数据366。存储子***340还包括打包模块370,打包模块370将数据366打包在读响应包371中(也可参见图2F)。
PMA子***320还包括解包模块330。读响应包371通过MAC/PHY层345和335被转发至解包模块330,解包模块330用于对读响应包进行解包。
读响应包371中的数据的顺序可以不同于从处理器核303接收到的读请求323的顺序以及读请求323被添加至读请求队列322中的顺序。因此,读响应包371中的数据被存储在存储排序缓冲器(例如,加载/存储队列380)中。加载/存储(load/store,可简称为L/S)队列380中的数据可被核标识符(core-ID)索引,并且还可被读响应包371中的标签索引。其中,核标识符用于对各处理器核303中请求了该数据的处理器核进行标识。利用L/S队列380中关于标签和核标识符的信息,包括在读响应包371中的数据可以被映射并转发到正确的处理器核303中。
响应于被解包的写请求包353,写请求被提交(数据被写入DIMM 365)。存储***340可以向PMA子***320发送写响应(未示出),以通知主机写请求已经被提交。
图4示出根据本公开的实施例中计算机***400的选定组件或元件的示例的框图。计算机***400可用于实现上文描述的方法(结合图1所描述的示例)。在图3和图4中,类似的数字描述了类似的元素。
与图3所示的计算机***300相比,计算机***400包括:压缩模块402和412,以及解压缩模块404和414。压缩模块402和解压缩模块414可以是PMA子***320的一部分,压缩模块404和解压缩模块412可以是存储子***340的一部分。
在打包读请求包之前,压缩模块402对需要包括在读请求包中的信息进行压缩;在打包写请求包之前,压缩模块402对需要包括在写请求包中的信息进行压缩。在一些实施例中,被压缩的信息包括:写请求包的有效载荷和读请求包的有效载荷(参见图2C和2D)。
在打包读响应包之前,压缩模块412对需要包括在读响应包中的信息进行压缩。在一些实施例中,被压缩的信息是读响应包的有效载荷(参见图2F)。
在读请求包被解包之后,解压缩模块404对读请求包中的信息(例如,有效载荷)进行解压缩;在写请求包被解包之后,解压缩模块404对写请求包中的信息(例如,有效载荷)进行解压缩。
在读响应包被解包之后,解压缩模块414对读响应包中的信息(例如,有效载荷)进行解压缩。
与常规方法相比,根据本公开的实施例(不包括对有效载荷的压缩)按照因子提高带宽效率,因子的范围可从大约1.4(对于1024的64字节访问)到大约2.4(对于128的16字节访问)到大约4(对于128的8字节访问)。因此,根据本发明的实施例可以显著地提高带宽效率。在有效载荷被压缩的实施例中,带宽效率可以获得更大的提升。因此,延时也有所降低。
本公开实施例还可应用于数据中心,图5示出了根据本公开的实施例的数据中心500的网络结构示意图。数据中心500可用于实现上文描述的方法(结合图1所描述的示例)。
数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加速、展示、计算、存储数据信息。在今后的发展中,数据中心也将会成为企业竞争的资产。随着数据中心应用的广泛化,人工智能等越来越多地应用到数据中心。而神经网络作为人工智能的重要技术,已经大量应用到数据中心大数据分析运算中。
大型数据中心的网络结构通常如图5所示,即互连网络模型(HierarchicalInter-Networking Model)。这个模型包含了以下部分:
服务器560:各服务器560是数据中心的处理和存储实体,数据中心中大量数据的处理和存储都是由这些服务器560完成的。
接入交换机530:接入交换机530是用来让服务器560接入到数据中心中的交换机。一台接入交换机530接入多台服务器560。接入交换机530通常位于机架顶部,所以它们也被称为机顶(Top of Rack)交换机,它们物理连接服务器。
汇聚交换机520:每台汇聚交换机520连接多台接入交换机530,同时提供其他的服务,例如防火墙,入侵检测,网络分析等。
核心交换机510:核心交换机510为进出数据中心的包提供高速的转发,为汇聚交换机520提供连接性。整个数据中心的网络分为L3层路由网络和L2层路由网络,核心交换机510为通常为整个数据中心的网络提供一个弹性的L3层路由网络。
通常情况下,汇聚交换机520是L2和L3层路由网络的分界点,汇聚交换机520以下的是L2网络,以上是L3网络。每组汇聚交换机管理一个传送点(Point of Delivery,POD),每个POD内都是独立的VLAN网络。服务器在POD内迁移不必修改IP地址和默认网关,因为一个POD对应一个L2广播域。
汇聚交换机520和接入交换机530之间通常使用生成树协议(Spanning TreeProtocol,STP)。STP使得对于一个VLAN网络只有一个汇聚层交换机520可用,其他的汇聚交换机520在出现故障时才被使用(上图中的虚线)。也就是说,在汇聚交换机520的层面,做不到水平扩展,因为就算加入多个汇聚交换机520,仍然只有一个在工作。
图6示出了根据本公开实施例的数据中心500内的服务器的结构示意图。服务器600可用于实现上文描述的方法(结合图1所描述的示例)。
服务器560是数据中心500中真实的处理设备,其包括由总线连接的存储器610、调度单元集群670和加速单元集群680。调度单元集群670包括多个调度单元620。加速单元集群680包括多个加速单元630。加速单元在本公开实施例中主要是为了加速神经网络模型的运算处理速度而设计的专门处理单元,可以体现为专门为神经网络运算处理设计的处理单元、图形处理单元(GPU)、专用集成电路(ASIC)和现场可编程门阵列(FPGA)等。调度单元是对加速单元进行调度、向各加速单元分配要执行的待执行指令序列的处理单元,它可以采用中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。
传统的中央处理单元的架构设计,使得在架构中控制单元、存储单元占用了很大一部分空间,而计算单元占用的空间反而不足,因此其在逻辑控制方面十分有限,而在大规模并行计算方面则效率不够。因此,开发出了各种专门的加速单元,用来针对不同功能和不同领域的计算进行更有效的提高运算速度的处理。本公开实施例提出的加速单元是专用于加速神经网络模型的运算处理速度的处理单元。它是采用数据驱动并行计算的架构,用于处理各神经网络节点的大量运算(例如卷积、池化等)的处理单元。由于各神经网络节点的大量运算(例如卷积、池化等)中的数据和中间结果在整个计算过程中紧密联系,会被经常用到,用现有的中央处理单元构架,由于中央处理单元的核内的内存容量很小,因此要大量频繁访问核外存储器,造成处理的低效。采用这种专用于加速神经网络模型的运算处理速度的加速单元,由于其每个核中具有适于神经网络计算用到的存储容量的片上内存,避免频繁访问核外部的存储器,就能大大提高处理效率,提高计算性能。
加速单元630要接受调度单元620的调度。如图6所示,存储器610中存储有各种神经网络模型,包括这些模型的节点和节点的权重数据等。这些神经网络模型当需要时被图6中的一个调度单元620部署到一个加速单元630。即,调度单元620可以通过指令的形式向加速单元630发送模型中的参数(如各节点的权重)在存储器610中的地址。加速单元630在实际使用该神经网络模型进行计算时,就会根据这些参数(例如权重)在存储器610中的地址,直接在存储器610中寻址这些参数,将其暂存在其片上内存中。加速单元630在实际使用该神经网络模型进行计算时,调度单元620还会将模型的输入参数通过指令的形式发送给加速单元630,暂存在加速单元630的片上内存中。这样,加速单元630就可以根据这些输入参数和模型中的参数(例如权重)进行推理计算。
在本公开实施例中,结合图3或图4所示的示例,服务器600包括PMA子***(例如图3或4所示的PMA子***320)和存储子***(例如图3或4所示的存储子***340)。其中,存储器610可作为存储模块(例如图2或4所示的存储模块365),其经由存储子***中的存储控制器与调度单元620和/或加速单元630耦合通信。调度单元620可以基于PMA子***和存储子***实现对存储访问请求(例如读请求和/或写请求)的处理,加速单元630也可以基于PMA子***和存储子***实现对存储访问请求的处理,与上文描述的实施例的相同/相似之处不再赘述。
与常规的数据中心相比,根据本公开实施例的数据中心及其控制方法可以显著地提高存储访问效率和带宽效率、降低延时。在有效载荷被压缩的实施例中,带宽效率可以获得更大的提升。
虽然前述公开使用特定框图、流程图和示例阐述了各种实施例,但本文中描述和/或图示的每个框图组件、流程图步骤、操作和/或组件可以使用宽范围的配置单独和/或集体地实现。此外,任何包含在其他组件内的组件的公开都应该被认为是示例,因为相同的功能可以通过许多其他架构来实现。
尽管已经以结构特征和/或方法动作的特定语言描述了主题,但应当理解,本公开中定义的主题不一定限于上述特定的特征或动作。上文描述的特定的特征和动作是以实现本公开的示例的形式被公开的。
根据本发明的实施例是这样被描述的。虽然本发明已在特定实施例中被描述,但本发明不应被解释为受这些实施例的限制,而应该根据所附的权利要求来解释。