一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

在可重新配置计算结构中对外部存储器进行索引的制作方法

2023-02-19 09:42:42 来源:中国专利 TAG:


1.本公开涉及在可重新配置计算结构中对外部存储器进行索引。


背景技术:

2.如冯诺伊曼(von neumann)架构的各种计算机架构通常使用用于数据的共享存储器、用于对共享存储器进行存取的总线、算术单元以及程序控制单元。然而,在处理器与存储器之间移动数据可能需要大量时间和能量,这进而可能约束计算机系统的性能和容量。鉴于这些限制,需要新计算架构和装置来推动计算性能超出晶体管规模的实践(即,摩尔定律(moore's law))。


技术实现要素:

3.在一方面,本公开提供一种设备,其包括:可重新配置计算结构,所述可重新配置计算结构包括多个计算元件和至少一个流控制器,所述可重新配置计算结构被布置成包含第一同步流,所述第一同步流包括所述至少一个流控制器中的一个流控制器和所述多个计算元件中的多个,所述第一同步流通过使用存储的指令被编程以执行包括以下的操作:执行第一同步流线程,所述第一同步流线程用于执行用于生成多维数组的至少一个值的循环迭代的至少一部分;由所述第一同步流的计算元件向存储器接口发送写入请求,所述写入请求包括指示所述循环迭代的迭代索引和包括所述多维数组的至少一个值的有效负载数据;和存储器接口,所述存储器接口通过使用存储的指令被编程以执行包括以下的操作:使用所述迭代索引的所述指示来确定外部存储器偏移量;和将所述有效负载数据写入到外部存储器中由所述外部存储器偏移量指示的外部存储器位置。
4.在另一方面,本公开进一步提供一种方法,其包括:由可重新配置计算结构的第一同步流执行第一同步流线程,所述第一同步流线程用于执行循环迭代的至少一部分以用于生成多维数组的至少一个值,所述可重新配置计算结构包括多个计算元件和至少流控制器,所述可重新配置计算结构被布置成包含所述第一同步流,所述第一同步流包括所述可重新配置计算结构的所述流控制器和所述多个计算元件中的多个;由所述第一同步流的计算元件向存储器接口发送写入请求,所述写入请求包括指示所述循环迭代的迭代索引和包括所述多维数组的至少一个值的有效负载数据;由所述存储器接口使用所述迭代索引来确定外部存储器偏移量;和由所述存储器接口将所述有效负载数据写入到外部存储器中由所述外部存储器偏移量指示的外部存储器位置。
5.在又一方面,本公开进一步提供一种机器可读媒体,在所述机器可读媒体上包括指令,所述指令当由处理器执行时,使得所述处理器执行包括以下的操作:由第一同步流执行第一同步流线程,所述第一同步流线程用于执行循环迭代的至少一部分以用于生成多维数组的至少一个值;由所述第一同步流的计算元件向存储器接口发送写入请求,所述写入请求包括指示所述循环迭代的迭代索引和包括所述多维数组的至少一个值的有效负载数据;由所述存储器接口使用所述迭代索引来确定外部存储器偏移量;和由所述存储器接口
将所述有效负载数据写入到外部存储器中由所述外部存储器偏移量指示的外部存储器位置。
附图说明
6.为容易地识别对任何特定元件或动作的论述,附图标记中的一或多个最高有效数字指的是首次介绍所述元件的图号。
7.图1大体示出根据实施例的在存储器计算系统的上下文中的第一存储器计算装置的第一实例。
8.图2大体示出根据实施例的存储器计算装置的存储器子系统的实例。
9.图3大体示出根据实施例的用于存储器控制器的可编程原子单元的实例。
10.图4示出根据实施例的存储器计算装置的混合线程处理器(htp)加速器的实例。
11.图5示出根据实施例的存储计算装置的混合线程结构(htf)的表示的实例。
12.图6a大体示出根据实施例的小芯片系统的实例。
13.图6b大体示出示出来自图6a的实例的小芯片系统中的各种组件的框图。
14.图7大体示出根据实施例的用于存储器计算装置的基于小芯片的实现的实例。
15.图8示出根据实施例的存储器计算装置小芯片的示例性拼片化。
16.图9是示出用于使用多于一个同步流在可重新配置计算结构处执行操作的工作流的一个实例的图。
17.图10是示出用于在可重新配置计算结构处执行操作的工作流的一个实例的图,其中同步流与存储器接口交互。
18.图11是示出用于使用可重新配置计算结构执行循环的工作流的一个实例的图。
19.图12是示出使用可重新配置计算结构来执行三重嵌套循环的工作流的一个实例的图。
20.图13是示出布置有被配置为生成迭代索引的流控制器的同步流的一个实例的图。
21.图14是示出可以由流控制器执行以使用迭代索引在同步流处执行循环的处理流程的一个实例的流程图。
22.图15是示出利用打包迭代索引(packed iteration index)的同步流的流控制器和计算元件的一个实例的图。
23.图16是示出可以使用同步流和存储器接口来执行以将多维数组的值写入到外部存储器中的处理流程的一个实例的流程图。
24.图17是示出使用外部存储器偏移量映射到外部存储器位置的多维数组的一个实例的图。
25.图18是示出可以由存储器接口执行以生成外部存储器偏移量的处理流程的一个实例的流程图。
26.图19示出示例性机器的框图,利用该示例性机器、在该示例性机器中或者通过该示例性机器可以实现本文所讨论的技术(例如,方法)中的任何一或多个。
具体实施方式
27.可利用材料、装置和集成技术中的最新进展来提供以存储器为中心的计算拓扑。
这类拓扑可实现在例如用于受大小、重量或功率要求约束的应用的计算效率和工作负载处理量方面的进展。拓扑可用于促进存储器或其它数据存储元件附近或内部的低时延计算。方法可尤其非常适合于利用稀疏查找的各种计算密集型操作,如在变换计算(例如,快速傅立叶变换计算(fft))中,或在如神经网络或人工智能(ai)、财务分析或模拟或模型化的应用中,所述模拟或模型化如用于计算流体动力学(cfd)、工程师用增强型声学模拟器(ease)、以集成电路为重心的模拟程序(spice)等。
28.本文中所讨论的系统、装置和方法可包含或使用具有处理器或处理能力的存储器计算系统,所述处理器或处理能力提供于存储器或数据存储组件中、附近或与存储器或数据存储组件集成。这类系统在本文中通常被称为近存储器计算(compute-near-memory,cnm)系统。cnm系统可为基于节点的系统,其中系统中的单个节点使用系统规模结构进行耦合。尤其在预期高高速缓存未命中速率的环境中,每一节点可包含或使用专用或通用处理器以及用户可访问加速器,并具有用以促进密集操作的自定义计算结构。
29.在实例中,cnm系统中的每一节点可具有一或多个主机处理器。在每一节点内,专用混合线程处理器可占据芯片上网络的离散端点。混合线程处理器可对系统的特定节点中的存储器中的一些或全部进行存取,或混合线程处理器可经由系统规模结构对跨多个节点的网络的存储器进行存取。每一节点处的自定义计算结构或混合线程结构可具有其自身的处理器或加速器,且可在比混合线程处理器更高的带宽下操作。近存储器计算系统中的不同节点可不同地配置,如具有不同计算能力、不同类型的存储器、不同接口或其它差异。然而,节点可共同耦合以共享所定义地址空间内的数据和计算资源。
30.在实例中,近存储器计算系统或系统内的节点可经用户配置以用于自定义操作。用户可以使用高级编程语言(如c/c )提供指令,这些指令可以被编译并直接映射到系统的数据流架构中,或者cnm系统中的一或多个节点的数据流架构中。也就是说,系统中的节点可以包含硬件块(例如,存储器控制器、原子单元、其它客户加速器等),其可以被配置为直接实现或支持用户指令,从而增强系统性能并减少时延。
31.在实例中,近存储器计算系统可尤其适合于实施指令和嵌套循环的层次结构(例如,两个、三个或更多个循环深度,或多维循环)。标准编译程序可用于接受高级语言指令,且进而将其直接编译到节点中的一或多个的数据流架构中。例如,系统中的节点可包含混合线程结构加速器。混合线程结构加速器可在cnm系统的用户空间中执行,且可发起其自身的线程或子线程,所述线程或子线程可并行地操作。每一线程可映射到不同循环迭代,由此支持多维循环。利用发起这类嵌套循环的能力以及其它能力,cnm系统可实现对计算密集型操作的明显时间节省和时延改进。
32.在一些实例中,近存储器计算系统被编程为将可重新配置计算结构的组件(如本文所述的各种htf)布置成一或多个同步流。可重新配置计算结构包括一或多个硬件流控制器和一或多个硬件计算元件,它们可以被布置成形成一或多个同步流,如本文所述。
33.计算元件包括计算元件存储器和形成用于处理接收的数据的计算流水线的处理器或其它合适的逻辑电路。在一些实例中,计算元件包括多个并行处理通道(processing lane),如单指令多数据(simd)处理通道。计算元件还包括用于向流控制器、其它计算元件和其它系统组件发送和接收同步和异步消息的电路系统,如本文所述。本文关于图5的拼片504、510、512描述了示例性的计算元件。
34.流控制器包括用于管理同步流的处理器或其它逻辑电路系统,如本文所述。流控制器包括用于向计算元件、其它流控制器和其它系统组件发送同步和异步消息的电路系统,如本文所述。在一些实例中,使用本文描述的拼片504、510、512中的一或多个的拼片基部来实现流控制器。
35.同步流是可重新配置计算结构中的硬件布置,其包括硬件流控制器和一组一或多个硬件计算元件之间的有序同步数据路径。
36.同步流可以执行一或多个工作线程。为了执行线程,同步流的硬件组件传递同步消息,并且按照同步流的顺序执行一组预定的操作。同步流的流控制器通过向同步流的第一计算元件提供第一同步消息来启动同步流处的线程。第一同步消息包含数据(例如,用于由计算元件处理的数据),并且还可以包含向计算元件提供各种标志和其它配置和/或指令数据的控制信息。第一计算元件被编程为例如基于由第一同步消息提供的数据来执行一或多个操作。第一计算元件生成第二同步消息,该第二同步消息也可以包含数据和控制信息。例如,第二同步消息可以描述由第一计算元件执行的一或多个操作的结果。
37.第一计算元件根据同步流的顺序向下一个计算元件提供第二同步消息。同步流的下一个计算元件可以是可重新配置计算结构的另一个计算元件,尽管在一些实例中,单个计算元件可以执行同步流的连续操作,这意味着在一些布置中,同步流的计算元件可以将同步消息引导至其自身。下一个计算元件被编程以执行一或多个操作,其可以包含准备第三同步消息并将第三同步消息发送给后续计算元件。
38.当同步流的所有计算元件已经按照同步流的预定顺序完成它们的编程操作时,线程就完成了。当线程已经完成时,同步消息的流水线将按照同步流的预定顺序在各个计算元件之间传播,从流控制器开始。因为该布置是同步的,所以线程的完成可以在固定的时间量内发生(例如,从流控制器启动同步流时起的可预测数量的时钟周期)。
39.将htf布置为包含同步流可以促进并行处理。例如,用于同步流的流控制器不需要在启动额外的线程之前等待一个线程完成。考虑包含流控制器和多个计算元件的示例性同步流。流控制器通过向同步流的第一计算元件提供同步消息来启动第一线程。第一计算元件执行其处理,并将第二同步消息引导至下一个计算元件,以此类推。在第一计算元件完成其处理并将同步消息引导到下一个计算元件之后,流控制器可以在同步流处启动额外的线程,例如,通过向第一计算元件提供附加的同步消息。
40.在可重新配置计算结构处的同步流的附加并行化可以通过利用以预定义的节奏或辐条计数操作的计算元件(如本文描述的各种拼片)来获得。例如,计算元件可以使用预定数量的时钟周期来执行各种操作,如接收同步消息、执行处理操作、发送同步消息等。计算元件可以被配置为接收新的同步消息并开始对线程的操作,同时来自先前线程的操作仍然通过计算元件传播。新的线程可以是先前线程的同一同步流的不同线程,或者可以是不同同步流的线程。
41.同步流可以使用可重新配置计算结构的异步结构来使用异步消息与其它同步流和/或可重新配置计算结构的其它组件进行通信。例如,流控制器可以从分派接口和/或从另一个流控制器接收异步消息,该消息指示流控制器在同步流处开始线程。分派接口可以在可重新配置计算结构和其它系统组件之间接口。此外,在一些实例中,同步流可以向分派接口发送异步消息,以指示线程的完成。
42.异步消息也可以被各个同步流用来访问外部存储器。例如,可重新配置计算结构可以包含一或多个存储器接口。存储器接口是由同步流或其组件用来访问不是同步流的一部分的外部存储器的硬件组件。在同步流中执行的线程可以包含向存储器接口发送读取和/或写入请求。因为读取和写入是异步的,所以向存储器接口发起读取或写入请求的线程可能不会收到请求的结果。相反,读取或写入请求的结果可以被提供给在不同的同步流处执行的不同线程。
43.考虑被布置有用于启动读取请求的第一同步流和用于接收读取请求的结果的第二同步流的示例性可重新配置计算结构。第一同步流中的第一线程向存储器接口发送异步读取请求消息。第一线程还可以向第二同步流的流控制器发送异步继续类型的消息,其中继续消息指示读取请求。存储器接口从存储器获取所请求的数据,并将读取的数据引导到第二同步流的适当计算元件。然后,计算元件将异步消息引导至第二流控制器,指示数据已经被接收。(在一些实例中,存储器接口将读取数据直接提供给第二流控制器)。在接收到读取数据已被接收的指示之后,第二流控制器在第二同步流处启动线程以进一步处理读取请求的结果。
44.在一些实例中,如本文所述的hft的可重新配置计算结构被用于执行一或多个循环,如如本文所述的一组嵌套循环。为了执行循环,可重新配置计算结构利用布置成一或多个同步流的流控制器和计算元件,如本文所述。例如,同步流的流控制器可以为循环的每次迭代在同步流处启动线程。考虑由下面的代码段[1]给出的简单的示例性循环:
[0045][0046]
流控制器可以通过在i=1循环迭代的同步流处启动第一线程来开始示例性循环。在该实例中,通过流控制器将x[i-1]的初始值与初始同步消息的有效负载数据一起传递给第一计算元件。同步流的一或多个计算元件确定x[1]的值,并将x[1]的值作为同步或异步消息返回到流控制器。然后,流控制器在i=2循环迭代的同步流处启动第二线程,将x[1]的返回值作为x[i-1]传递到同步消息中。该过程继续直到循环的所有迭代完成,并且返回x[10]的值。
[0047]
上面的示例性循环对循环的每次迭代使用单个同步流。然而,在一些实例中,对于每个循环迭代可以使用多个同步流。考虑由下面的代码段[2]给出的示例性循环:
[0048][0049]
在该实例中,每次循环迭代都涉及将i乘以从存储器中读取的值y[i],然后将结果
写入存储器。因此,每次循环迭代包含异步存储器读取和异步存储器写入。如本文所述,存储器读取涉及向存储器接口发送异步消息,然后等待存储器接口用包含所请求的数据的另一异步消息进行回复。因为存储器读取是异步的,所以每次循环迭代可以使用在两个不同的同步流处执行的同步流线程。对于i=1循环迭代,第一同步流处的线程向存储器接口发送异步消息,包含对y[1]的值的读取请求。第一同步流处的线程还可以向第二同步流的第二流控制器发送异步消息,指示第二流控制器期望读取请求的结果(直接来自存储器接口或者来自已经接收到读取数据的第二同步流的计算元件)。存储器接口启动对y[1]的值的读取,并通过异步消息向第二同步流提供y[1]的值。当接收到指示接收到读取数据的异步消息时,第二流控制器在第二同步流处启动线程。(y[1]的返回值可以被提供给计算元件,例如,通过线程的同步通信和/或在线程启动之前直接从存储器接口提供)。第二线程确定x[1]的值,并向存储器接口发送同步消息,包含对x[1]的写入请求。
[0050]
在一些实例中,同步流控制器可以在同步流处启动的线程的数量受到同步流的组件的资源的限制。例如,同步流的线程可以将数据写入到同步流计算元件处的各个本地计算元件存储器中。如果同时启动太多的同步流线程,则一些同步流线程可能在混合线程结构中缺少足够的本地存储器或其它资源。这可能会阻止同步流线程写入其数据和/或导致它覆盖其它同步流线程的本地存储的数据。
[0051]
为了防止这种情况,可重新配置计算结构可以限制在给定时间可以启动的同步流线程的数量。例如,可重新配置计算结构可以实现线程标识符(id)的池。在实现同步流线程之前,流控制器可以确定线程id可用。在一些实例中,同步流线程的同步消息可以包含给定线程的线程id的指示。
[0052]
当同步流线程完成时,它可以例如向启动同步流线程的流控制器发送异步空闲消息。这向流控制器指示已完成的同步流线程的线程id(和相关资源)现在可供新的同步流线程使用。
[0053]
在一些实例中,单个线程id可以同时用于多于一个同步流。例如,当在多于一个同步流上执行单个操作串时,多个同步流处的相应线程可以利用相同的线程id。再次考虑代码段[2]的实例。回想一下,对于i=1循环迭代,第一同步流处的线程向存储器接口发送异步消息,其中具有对y[1]的值的读取请求,并且向第二同步流的第二流控制器发送异步继续类型的消息。当在第二同步流处接收到y[1]的值时,第二流控制器在第二同步流处启动线程。在该实例中,第一同步流处的i=1线程和第二同步流处的i=1线程可以使用公共线程id(和相关资源)。
[0054]
此外,在一些实例中,线程id可以由不同的层级来描述,其中不同数量的线程id(和相应的资源)在不同的层级上可用。考虑嵌套循环。执行嵌套循环的第一级循环的同步流线程可以被分配来自第一级线程池的线程id(和相应的资源)。来自第二级循环的同步流线程可以被分配来自第二级线程池的线程id(和相应的资源),以此类推。
[0055]
在一些实例中,线程id可以基于由流控制器接收的异步消息通过流控制器来跟踪,以指示流控制器开始启动同步流线程。考虑这样的实例,在该实例中分派接口向同步流的流控制器发送异步循环消息。循环消息可以指示待执行的循环迭代的数量、可用线程id的数量,以及在一些实例中,先前使用的线程id变得再次可用的一或多个条件。例如,当同步流线程完成时(如果单个线程id仅用于一个同步流),或者当不同同步流处的后续同步流
线程完成时(如果单个线程id用于多于一个同步流,如本文所述),由流控制器用来启动同步流线程的线程id可以再次可用。近存储器计算系统或近存储器计算系统的节点或组件可包含或使用各种存储器装置、控制器和互连件等等。在实例中,系统可包括各种互连节点,且节点或节点群组可使用小芯片来实施。小芯片是用于集成各种处理功能性的新兴技术。通常,小芯片系统由集成在中介层上且封装在一起的离散芯片(例如,不同衬底或管芯上的集成电路(ic))构成。这种布置不同于单个芯片(例如,ic),所述单个芯片含有在一个衬底(例如,单个管芯)上的不同装置块(例如,知识产权(ip)块),如芯片上系统(soc),或集成在板上的离散封装装置。一般来说,小芯片提供相较于单个管芯芯片的生产效益,包含更高的良率或降低的开发成本。下面讨论的图6a和图6b大体示出了小芯片系统的实例,如可以包括近存储器计算系统。
[0056]
当同步流用于执行循环时,执行循环的不同迭代的同步流线程可能需要从外部存储器(例如,除本地计算元件存储器或拼片存储器之外的存储器)读取数据和/或向其写入数据。例如,在实现全部或部分循环迭代的同步流线程的执行期间,计算元件可以通过存储器接口对外部存储器进行循环迭代特定的读取或写入。
[0057]
当同步流的计算元件在执行循环迭代时从外部存储器读取和/或向外部存储器写入时,有时期望计算元件从特定于正在执行的循环迭代的存储器位置读取和/或向所述存储器位置写入。例如,如果执行第一循环迭代的同步流线程从计算元件存储器处的第一位置读取操作数数据,则执行第二次迭代的同步流线程可以从不同位置读取其操作数数据。执行第三次迭代的同步流线程可以从仍然不同的位置读取其操作数数据,以此类推。类似地,同步流可以被布置成使得线程将结果数据写入到循环迭代特定的存储器位置。
[0058]
使同步流计算元件从循环迭代特定的存储器位置读取和写入到循环迭代特定的存储器位置的一种方式是使用迭代索引。迭代索引从循环的迭代次数中导出,并且指向在迭代执行期间可以从其读取和/或写入到其的特定存储器位置或存储器位置的集合。当同步流计算元件从存储器读取或向存储器写入时,它使用迭代索引来指代迭代特定的存储器位置。
[0059]
考虑上述示例性的代码段[2]。第一同步流和第二同步流处的计算元件可以使用迭代次数i来导出迭代索引。在代码段[2]的实例中,i循环的每次迭代使用两个存储器位置。从存储器位置读取操作数数据x[i],并将输出数据y[i]写入到存储器位置。因此,简单的迭代索引可以通过简单地将迭代的i值乘以2来确定。
[0060]
考虑由以下代码段[3]给出的另一实例:
[0061][0062]
该实例包含具有第一级x循环和第二级y循环的嵌套循环。在该实例中,对于从1到
2048的x的值,第一级x循环将执行2048次。对于外部循环的每次迭代,第二级y循环将执行2048次,总共4,235,364次迭代。可能期望确定对于4,235,364次迭代中的每一次都具有唯一值的代码段的迭代索引。在一些实例中,这可以通过从第一级循环的迭代次数和第二级循环的迭代生成迭代索引来实现。利用代码段[3],可以通过对第一级x循环迭代次数和第二级y循环迭代次数执行运算来导出唯一的迭代索引。例如,其中x=588且y=2043的循环迭代的迭代索引可以通过对588和2043执行运算来导出。
[0063]
迭代索引可以在执行循环期间导出。然而,在同步流中导出迭代索引可能涉及使用额外的计算元件资源,或者甚至用额外的计算元件构建同步流。例如,参考上面的代码段[3],用于计算值s[x,y]的同步流可以包含计算元件,所述计算元件从计算元件存储器中取出值r[x,y],执行所指示的乘法,并将结果s[x,y]写回到计算元件存储器。然而,计算元件可以首先导出迭代索引,然后使用该迭代索引从适当的计算元件存储器位置读取r[x,y],并将s[x,y]写入到属性计算元件存储器位置。迭代索引可以在计算元件处导出,或者在一些实例中,可以使用位于第一计算元件之前的附加计算元件。这可能导致计算元件的低效使用。
[0064]
此外,在一些可重新配置计算结构中,计算迭代索引可能不是计算元件的最佳用途。再次考虑上面的示例性代码段[3]。在该实例中,生成迭代索引涉及处理两个12位值(表示1-2048)。然而,在各种实例中,可重新配置计算结构的计算元件被布置成对更宽或者甚至比12位宽得多的数据进行操作。在本文描述的一些实例中,计算元件可以被布置成在512位数据路径上操作。使用512位数据路径的一或多个周期来对12位值执行操作可能不是高效的。因此,在一些实例中,流控制器被配置成生成迭代索引。然后,所生成的迭代索引经由同步消息被传递给同步流的计算元件,如其中在同步流线程的执行期间在计算元件之间传递控制信息。
[0065]
在一些实例中,可重新配置计算结构用于执行两个或更多个嵌套循环,以便为多维数组生成值。嵌套循环的每次迭代可以生成多维数组的一个(或多个)值,其中内部循环迭代对应于多维数组的一维,并且外部循环迭代对应于多维数组的另一维。再次考虑上面的示例性代码段[3]。在该实例中,嵌套循环的每次迭代都生成多维数组s[x,y]的值。由每次迭代生成的值的坐标由外部循环迭代和内部循环迭代的值给出。例如,在示例性代码段[3]中,其中x=321且y=832的迭代结果是多维数组值s[321,832]。
[0066]
在一些实例中,期望可重新配置计算结构在外部存储器中存储多维数组。例如,存储在一或多个计算元件存储器中的数组,虽然可被同步流容易地访问,但可能不可被近存储器计算系统的其它组件访问。此外,在一些实例中,可以使用多于一个的同步流来生成多维数组。再次参考示例性代码段[3],x和/或y迭代的某个范围的x和y迭代可以由一个同步流执行,而另一个范围的x和y迭代由另一个同步流执行。例如,一个同步流可以执行其中x在1至64之间的迭代。另一个同步流可以执行其中x在65至128之间的迭代,以此类推。
[0067]
当多维数组被存储在外部存储器中时,可能需要根据数组中这些值的位置来存储多维数组的值。再次用示例性代码段[3]来说明,可能期望将数组s[x,y]的值存储在外部存储器中标识这些值的相应x和y位置的位置处。这可能会使其它组件稍后访问该数组变得更加简单。然而,将数组值写入标识数组值的空间位置的外部存储器位置会遇到至少两个障碍。例如,外部存储器位置地址可以是线性的,或者如果不是线性的,可能与多维数组的维
度不匹配。可以通过简单地将数组值写入按照值被写入的顺序分配的存储器位置来解决该问题。然而,该方法可能在可重新配置计算结构或另一种布置中带来挑战,在所述另一种布置中数组的值可能不是按顺序确定的。例如,如果确定s[1,3]的值的一或多个同步流线程在确定s[1,1]的值的一或多个同步流线程之前完成,则这些值可以被无序写入。
[0068]
各种实例通过将存储器接口配置为将迭代索引或其它迭代指示符转换为外部存储器偏移量来解决这些和其它挑战。再次考虑示例性代码段[3]。执行内部“y”循环的迭代的同步流线程可以接收或计算指示外部“x”循环的迭代和内部“y”循环的迭代的迭代索引。为了将值s[x,y]保存到外部存储器,线程可以发送异步写入请求,该异步写入请求包含有效负载数据(在该实例中为s[x,y])以及迭代索引或x和y循环的对应迭代的其它指示符。存储器接口可以将迭代索引或循环迭代的其它指示符转换成相应的外部存储器偏移量,并将有效负载数据写入到由相对于基础地址的外部存储器偏移量所指示的一或多个外部存储器位置。
[0069]
图1大体示出了近存储器计算系统或cnm系统102的第一实例。cnm系统102的实例包含多个不同的存储器计算节点,如每个节点可以包含各种近存储器计算装置。系统中的每一节点可在其自身的操作系统(os)域(例如,linux及其它)中操作。在实例中,节点可共同地存在于cnm系统102的共同os域中。
[0070]
图1的实例包含cnm系统102的第一存储器计算节点104的实例。cnm系统102可以具有多个节点,如包含第一存储器计算节点104的不同实例,这些节点使用规模结构106耦合。在实例中,cnm系统102的架构可以使用规模结构106支持具有高达n个不同的存储器计算节点(例如,n=2048)的规模化。如下面进一步讨论的,cnm系统102中的每个节点可以是多个装置的集合。
[0071]
cnm系统102可包含用于系统中的各个节点的全局控制器,或系统中的特定存储器计算节点可任选地充当同一系统中的一或多个其它存储器计算节点的主机或控制器。cnm系统102中的各个节点可因此类似地或不同地配置。
[0072]
在实例中,cnm系统102中的每一节点可包括使用指定操作系统的主机系统。在cnm系统102中的各个节点之间,操作系统可以是共同的或不同的。在图1的实例中,第一存储器计算节点104包括主机系统108、第一交换机110和第一存储器计算装置112。主机系统108可以包括处理器,如可以包含x86、arm、risc-v或其它类型的处理器。第一交换机110可被配置成如使用专用或另一通信协议(在本文中通常称为芯片到芯片协议接口(ctcpi))促进第一存储器计算节点104的装置或cnm系统102的装置之间或当中的通信。也就是说,ctcpi可包含对于cnm系统102为唯一的专用接口,或可包含或使用其它接口,如计算高速链路(cxl)接口、外围组件互连高速(pcie)接口或小芯片协议接口(cpi)以及其它。第一交换机110可包含被配置成使用ctcpi的交换机。例如,第一交换机110可包含cxl交换机、pcie交换机、cpi交换机或其它类型的交换机。在实例中,第一交换机110可被配置成耦合不同地配置的端点。例如,第一交换机110可被配置成在如pcie与cpi格式等之间转换分组格式。
[0073]
cnm系统102在本文中以各种示例性配置(如包括节点的系统)进行描述,且每一节点可包括各种芯片(例如,处理器、交换机、存储器装置等)。在实例中,cnm系统102中的第一存储器计算节点104可包含使用小芯片实施的各种芯片。在下文讨论的cnm系统102的基于小芯片的配置中,小芯片间通信以及系统内的额外通信可使用cpi网络。本文中所描述的
cpi网络为ctcpi的实例,也就是说,作为ctcpi的小芯片特定实现方式。因此,cpi的下文所描述的结构、操作和功能性可同等地适用于如可另外使用非基于小芯片的ctcpi实现方式来实施的结构、操作和功能。除非另外明确地指示,否则本文中cpi的任何论述同等地适用于ctcpi。
[0074]
cpi接口包含基于分组的网络,其支持虚拟信道,以能够实现小芯片之间的灵活和高速交互,如可以包括第一存储器计算节点104或cnm系统102的部分。cpi可以实现从小芯片内网络到更广泛的小芯片网络的桥接。例如,高级可扩展接口(axi)是用于芯片内通信的规范。然而,axi规范涵盖大量的物理设计选项,如物理信道的数量、信号定时、功率等。在单个芯片内,通常选择这些选项以满足设计目标,如功率消耗、速度等。然而,为实现基于小芯片的存储器计算系统的灵活性,如使用cpi的适配器可在可实施于各种小芯片中的各种axi设计选项之间介接。通过利用分组化协议启用物理信道到虚拟信道映射且包封基于时间的信令,cpi可用于跨较宽小芯片网络(如跨第一存储器计算节点104或跨cnm系统102)桥接(如特定存储器计算节点内的)小芯片内网络。
[0075]
cnm系统102可缩放以包含多节点配置。也就是说,可使用规模结构106耦合第一存储器计算节点104的或其它不同地配置的存储器计算节点的多个不同实例,以提供经缩放系统。存储器计算节点中的每一个可运行其自身的操作系统,且可被配置成联合地协调系统宽资源使用。
[0076]
在图1的实例中,第一存储器计算节点104的第一交换机110被耦合至规模结构106。规模结构106可以提供可以促进不同存储器计算节点中和之间的通信的交换机(例如,ctcpi交换机、pcie交换机、cpi交换机或其它交换机)。在实例中,规模结构106可有助于各个节点在分区全局地址空间(pgas)中进行通信。
[0077]
在实例中,第一存储器计算节点104的第一交换机110被耦合至一或多个不同的存储器计算装置,如包含第一存储器计算装置112。第一存储器计算装置112可以包括基于小芯片的架构,其在本文中被称为近存储器计算(cnm)小芯片。第一存储器计算装置112的封装版本可包含例如一或多个cnm小芯片。小芯片可使用ctcpi以通信方式耦合以用于高带宽和低时延。
[0078]
在图1的实例中,第一存储器计算装置112可以包含芯片上网络(noc)或第一noc 118。通常,noc是装置内的互连网络,连接特定的一组端点。在图1中,第一noc 118可提供第一存储器计算装置112的各种存储器、计算资源和端口之间的通信及连接。
[0079]
在实例中,第一noc 118可包括折叠式克洛斯(clos)拓扑,如在存储器计算装置的每一实例内,或作为在节点中耦合多个存储器计算装置的网格。克洛斯拓扑供应各种益处,如可使用多个较小基数交叉开关以提供与较高基数交叉开关拓扑相关联的功能性。例如,克洛斯拓扑可跨noc呈现一致时延和对分带宽。
[0080]
第一noc 118可包含各种不同交换机类型,包含集线交换机、边缘交换机和端点交换机。交换机中的每一个可被配置为在输入与输出节点之间提供基本上均一的时延和带宽的交叉开关。在实例中,端点交换机和边缘交换机可包含两个单独交叉开关,一个交叉开关的流量去往集线交换机,且另一交叉开关的流量远离集线交换机。集线交换机可被配置为将所有输入切换到所有输出的单个交叉开关。
[0081]
在实例中,集线交换机可如取决于特定集线交换机是否参与芯片间通信而各自具
有多个端口(例如,各自四个或六个端口)。参与芯片间通信的集线交换机的数量可由芯片间带宽要求设置。
[0082]
第一noc 118可支持计算元件与存储器之间的各种有效负载(例如,8至64字节有效负载;可类似地使用其它有效负载大小)。在实例中,可针对相对较小有效负载(例如,8至16字节)优化第一noc 118,以有效地处置对稀疏数据结构的存取。
[0083]
在实例中,第一noc 118可经由第一物理层接口114、pcie从属模块116或端点以及pcie主模块126或根端口而耦合到外部主机。也就是说,第一物理层接口114可以包含允许外部主机处理器耦合到第一存储器计算装置112的接口。外部主机处理器可以任选地耦合到一或多个不同的存储器计算装置,如使用pcie交换机或其它本地协议交换机。通过基于pcie的交换机与外部主机处理器的通信可将装置到装置通信限制于由交换机支持的装置到装置通信。相比之下,如使用ctcpi的通过存储器计算装置本地协议交换机的通信可允许不同存储器计算装置之间或当中的更完全通信,包含对分区全局地址空间的支持,如用于产生工作线程及发送事件。
[0084]
在实例中,ctcpi协议可由第一存储器计算装置112中的第一noc 118使用,且第一交换机110可包含ctcpi交换机。ctcpi交换机可允许ctcpi分组如在不转换成另一分组格式的情况下从如第一存储器计算装置112的源存储器计算装置传送到(例如,同一或另一节点上的)不同目的地存储器计算装置。
[0085]
在实例中,第一存储器计算装置112可以包含内部主机处理器122。内部主机处理器122可以被配置为例如使用内部pcie主模块126与第一noc 118或第一存储器计算装置112的其它组件或模块通信,这可以帮助消除将消耗时间和能量的物理层。在实例中,内部主机处理器122可以基于risc-v isa处理器,并且可以使用第一物理层接口114来在第一存储器计算装置112外部进行通信,如与第一存储器计算装置112的其它存储装置、网络或其它外围设备进行通信。内部主机处理器122可以控制第一存储器计算装置112,并且可以充当用于操作系统相关功能性的代理。内部主机处理器122可包含相对较少数量的处理核心(例如,2至4个核心)和主机存储器装置124(例如,包括dram模块)。
[0086]
在实例中,内部主机处理器122可包含pci根端口。当使用内部主机处理器122时,其根端口之一可以被连接到pcie从属模块116。内部主机处理器122的另一个根端口可以被连接到第一物理层接口114,如以提供与外部pci外围设备的通信。当内部主机处理器122被禁用时,那么pcie从属模块116可以被耦合到第一物理层接口114,以允许外部主机处理器与第一noc 118通信。在具有多个存储器计算装置的系统的实例中,第一存储器计算装置112可以被配置成充当系统主机或控制器。在该实例中,内部主机处理器122可处于使用中,且相应其它存储器计算装置中的内部主机处理器的其它实例可停用。
[0087]
内部主机处理器122可配置在第一存储器计算装置112的加电处,以便允许主机初始化。在实例中,内部主机处理器122及其相关数据路径(例如,包含第一物理层接口114、pcie从属模块116等)可以从输入引脚被配置到第一存储器计算装置112。一或多个引脚可以用于启用或禁用内部主机处理器122,并且相应地配置pci(或其它)数据路径。
[0088]
在实例中,第一noc 118可以通过规模结构接口模块136和第二物理层接口138被耦合至规模结构106。规模结构接口模块136或sif可以促进第一存储器计算装置112和装置空间(如分区全局地址空间(pgas))之间的通信。pgas可被配置成使得如第一存储器计算装
置112的特定存储器计算装置可如使用加载/存储范例访问不同存储器计算装置上的(例如,同一或不同节点上的)存储器或其它资源。可使用各种可规模结构技术,包含ctcpi、cpi、gen-z、pci或经由cxl桥接的以太网。规模结构106可被配置成支持各种分组格式。在实例中,规模结构106支持无序分组通信,或支持有序分组,如可使用路径标识符以跨多个等效路径扩展带宽。规模结构106通常可支持远程操作,如远程存储器读取、写入和其它内置原子、远程存储器原子、远程存储器计算装置发送事件以及远程存储器计算装置调用和返回操作。
[0089]
在实例中,第一noc 118可以被耦合至一或多个不同的存储器模块,如包含第一存储器装置128。第一存储器装置128可以包含多种类型的存储器装置,例如lpddr5或gddr6以及其它。在图1的实例中,第一noc 118可以通过专用于特定存储器模块的存储器控制器130协调与第一存储器装置128的通信。在实例中,存储器控制器130可包含存储器模块高速缓存和原子操作模块。原子操作模块可被配置成提供相对较高处理量的原子运算符,如包含整数和浮点运算符。原子操作模块可被配置成将其运算符应用于存储器模块高速缓存(例如,包括sram存储器侧高速缓存)内的数据,由此允许使用同一存储器位置的背对背原子操作,其具有最小处理量降级。
[0090]
存储器模块高速缓存可以为频繁访问的存储器位置提供存储,如无需重新访问第一存储器装置128。在实例中,存储器模块高速缓存可以被配置成仅高速缓存用于存储器控制器130的特定实例的数据。在实例中,存储器控制器130包含被配置为与第一存储器装置128介接的dram控制器,如包含dram装置。存储器控制器130可提供访问调度和位错误管理,以及其它功能。
[0091]
在实例中,第一noc 118可耦合到混合线程处理器(htp 140)、混合线程结构(htf 142)以及主机接口和分派模块(hif 120)。hif 120可被配置成促进对基于主机的命令请求队列和响应队列的访问。在实例中,hif 120可以在htp 140或htf 142的处理器或计算元件上分派新的执行线程。在实例中,hif 120可被配置成维持htp 140模块和htf 142模块之间的工作负载平衡。
[0092]
混合线程处理器或htp 140可包含加速器,如可基于risc-v指令集。htp 140可包含高度线程化的事件驱动处理器,其中线程可在单个指令轮换中执行,以便维持高指令处理量。htp 140包括相对较少的自定义指令以支持低开销线程化能力、事件发送/接收和共享存储器原子运算符。
[0093]
混合线程结构或htf 142可包含加速器,如可包含非冯诺伊曼粗粒度可重新配置处理器。htf 142可针对高级语言操作和数据类型(例如,整数或浮点)而优化。在实例中,htf 142可支持数据流计算。htf 142可被配置成如在执行存储器界定计算内核时使用第一存储器计算装置112上可用的基本上所有存储器带宽。
[0094]
cnm系统102的htp和htf加速器可使用各种高级结构化编程语言来编程。例如,htp和htf加速器可以使用c/c 编程,如使用llvm编译器框架编程。htp加速器可如通过各种附加自定义指令集来利用开放源编译程序环境,所述各种附加自定义指令集被配置成改进存储器存取效率、提供消息传递机构以及管理事件等等。在实例中,htf加速器可被设计成使用高级编程语言实现htf 142的编程,且编译程序可产生在htf 142硬件上运行的模拟器配置文件或二进制文件。htf 142可提供中级语言以用于精确且简明地表达算法,同时隐藏
htf加速器自身的配置细节。在实例中,htf加速器工具链可使用llvm前端编译程序和llvm中间表示(ir)来与htf加速器后端介接。
[0095]
图2大体示出了根据实施例的存储器计算装置的存储器子系统200的实例。存储器子系统200的实例包含控制器202、可编程原子单元208和第二noc 206。控制器202可以包含或使用可编程原子单元208,以使用存储器装置204中的信息来执行操作。在实例中,存储器子系统200包括来自图1的实例的第一存储器计算装置112的一部分,如包含第一noc 118或存储器控制器130的部分。
[0096]
在图2的实例中,第二noc 206被耦合至控制器202,并且控制器202可以包含存储器控制模块210、本地高速缓存模块212和内置原子模块214。在实例中,内置原子模块214可以被配置成处理相对简单的单周期整数原子。内置原子模块214可在与例如正常存储器读取或写入操作相同的处理量下执行原子。在实例中,原子存储器操作可包含以下的组合:将数据存储到存储器,执行原子存储器操作,以及接着以从存储器加载数据来作出响应。
[0097]
可提供如可包含sram高速缓存的本地高速缓存模块212以有助于减小用于反复存取的存储器位置的时延。在实例中,本地高速缓存模块212可提供用于子存储器线存取的读取缓冲器。本地高速缓存模块212可尤其有利于具有相对较小或无数据高速缓存的计算元件。
[0098]
如可包含dram控制器的存储器控制模块210可提供低级请求缓冲和调度,以便提供对存储器装置204(如可包含dram装置)的有效存取。在实例中,存储器装置204可包含或使用gddr6 dram装置,如具有16gb密度和64gb/秒峰值带宽。可类似地使用其它装置。
[0099]
在实例中,可编程原子单元208可包括单循环或多循环运算符,如可被配置成执行整数加法或更复杂的多指令操作,如布隆过滤器(bloom filter)插入。在实例中,可编程原子单元208可被配置成执行加载和存储到存储器操作。可编程原子单元208可被配置成通过专用指令集利用risc-v isa,以促进与控制器202的交互来以原子方式执行用户定义的操作。
[0100]
可编程原子请求(如从节点上或节点外主机接收的)可以通过第二noc 206和控制器202被路由至可编程原子单元208。在实例中,自定义原子操作(例如,由可编程原子单元208实施)可以与内置原子操作(例如,由内置原子模块214实施)相同,除了可编程原子操作可以由用户而不是系统架构师来定义或编程。在实例中,可编程原子请求分组可通过第二noc 206发送到控制器202,且控制器202可将请求识别为自定义原子。控制器202可接着将所识别请求转发到可编程原子单元208。
[0101]
图3大体示出了根据实施例的供与存储器控制器一起使用的可编程原子单元302的实例。在实例中,可编程原子单元302可包括或对应于来自图2的实例的可编程原子单元208。也就是说,图3示出了可编程原子单元302(pau)的实例中的组件,如上面参考图2(例如,在可编程原子单元208中)或参考图1(例如,在存储器控制器130的原子操作模块中)所述的那些组件。如图3中所示出,可编程原子单元302包含pau处理器或pau核心306、pau线程控制304、指令sram 308、数据高速缓存310以及与存储器控制器314介接的存储器接口312。在实例中,存储器控制器314包括来自图2的实例的控制器202的实例。
[0102]
在实例中,pau核心306为流水线处理器,使得不同指令的多个阶段在每时钟周期一起执行。pau核心306可包含桶形多线程处理器,其中线程控制304电路系统在每一时钟周
期后在不同寄存器堆(例如,含有当前处理状态的寄存器集)之间切换。这实现了当前执行线程之间的高效上下文切换。在实例中,pau核心306支持八个线程,从而产生八个寄存器堆。在实例中,一些或所有的寄存器堆没有被集成到pau核心306中,而是驻留在本地数据高速缓存310或指令sram 308中。这通过消除用于这类存储器中的寄存器的传统触发器(flip-flop),降低了pau核心306中的电路复杂性。
[0103]
本地pau存储器可包含指令sram 308,如可包含用于各种原子的指令。指令包括用以支持各种应用加载的原子运算符的指令集。当如通过应用小芯片来请求原子运算符时,通过pau核心306执行对应于原子运算符的一组指令。在实例中,指令sram 308可以被分区以建立指令集。在该实例中,由请求过程请求的特定可编程原子运算符可通过分区号识别可编程原子运算符。当可编程原子运算符被注册到可编程原子单元302(例如,被加载到可编程原子单元302中)时,可以建立分区号。可编程指令的其它元数据可以存储在可编程原子单元302本地的存储器中(例如,在分区表中)。
[0104]
在实例中,原子运算符操纵数据高速缓存310,在用于原子运算符的线程完成时,所述数据高速缓存310通常被同步(例如,刷新)。因此,除从如存储器控制器314的外部存储器初始加载以外,在可编程原子运算符线程的执行期间,对于大多数存储器操作,时延可减小。
[0105]
如果潜在的危险条件将阻止存储器请求,那么在执行线程尝试发出这类请求时,流水线处理器(如pau核心306)可经历问题。本文中,存储器请求是从存储器控制器314检索数据,无论其是来自存储器控制器314上的高速缓存还是管芯外存储器。为解决这一问题,pau核心306被配置成拒绝对线程的存储器请求。通常,pau核心306或线程控制304可包含用以启用流水线中的一或多个线程重新调度点的电路系统。本文中,拒绝发生在流水线中这些线程重新调度点之外(例如,之后)的点处。在实例中,危险发生在重新调度点之外。本文中,在存储器请求指令通过可做出存储器请求的流水线阶段之前的最后一个线程重新调度点之后,线程中的前一指令创建了危险。
[0106]
在实例中,为拒绝存储器请求,pau核心306被配置成确定(例如,检测)存储器请求中指示的存储器上存在危险。本文中,危险表示允许(例如,执行)存储器请求将引起线程的不一致状态的任何条件。在实例中,危险是进行中的存储器请求。本文中,无论数据高速缓存310是否包含所请求的存储器地址的数据,进行中的存储器请求的存在使得不确定数据高速缓存310中所述地址处的数据应该是什么。因此,线程必须等待进行中的存储器请求完成以对当前数据操作。在存储器请求完成时,清除危险。
[0107]
在实例中,危险是数据高速缓存310中用于所请求的存储器地址的脏高速缓存线。虽然脏高速缓存线通常指示高速缓存中的数据为当前的且这类数据的存储器控制器版本不为当前的,但在并不从高速缓存操作的线程指令上可出现问题。这类指令的实例使用存储器控制器314的内置原子运算符或其它单独的硬件块。在存储器控制器的情况下,内置原子运算符可以与可编程原子单元302分离,并且不能访问pau内的高速缓存或数据高速缓存310。如果高速缓存线是脏的,那么内置原子运算符将不会对最新的数据进行操作,直到刷新高速缓存以同步高速缓存和其它或管芯外存储器。这种相同情形可利用存储器控制器的其它硬件块(如加密块、编码器等)发生。
[0108]
图4示出了混合线程处理器(htp)加速器或htp加速器400的实例。根据实施例,htp
加速器400可以包括存储器计算装置的一部分。在实例中,htp加速器400可包含或包括来自图1的实例的htp 140。htp加速器400包含例如htp核心402、指令高速缓存404、数据高速缓存406、转换块408、存储器接口410和线程控制器412。htp加速器400可以进一步包含分派接口414和noc接口416,如用于与noc(如来自图1的实例的第一noc 118、来自图2的实例的第二noc 206或其它noc)介接。
[0109]
在实例中,htp加速器400包含基于risc-v指令集的模块,且可包含相对较少数量的其它或额外自定义指令以支持低开销的具有线程化功能的混合线程(ht)语言。htp加速器400可包含高度线程化处理器核心,htp核心402,在所述htp核心402中或利用所述htp核心402,线程可在单个指令轮换中执行,以便维持高指令处理量。在实例中,线程可在其等待其它待决事件完成时暂停。这可允许计算资源有效地用于相关工作,而不是轮询。在实例中,多线程障碍同步可使用有效htp到htp和htp到/从主机消息传送,如可允许数千线程在例如数十个时钟周期中初始化或唤醒。
[0110]
在实例中,分派接口414可包括用于处置基于硬件的线程管理的htp加速器400的功能块。也就是说,分派接口414可管理对htp核心402或其它加速器的工作的分派。然而,非htp加速器通常不能够分派工作。在实例中,从主机分派的工作可使用驻留在例如主机主存储器(例如,基于dram的存储器)中的分派队列。另一方面,从htp加速器400分派的工作可使用驻留于sram中的分派队列,如在用于特定节点内的目标htp加速器400的分派内。
[0111]
在实例中,htp核心402可包括代表线程执行指令的一或多个核心。也就是说,htp核心402可包含指令处理块。htp核心402可以进一步包含线程控制器412或可以被耦合到线程控制器412。线程控制器412可以为htp核心402内的每个活动线程提供线程控制和状态。数据高速缓存406可以包含用于主机处理器的高速缓存(例如,用于本地和远程存储器计算装置,包含用于htp核心402的高速缓存),并且指令高速缓存404可以包含供htp核心402使用的高速缓存。在实例中,数据高速缓存406可以被配置成用于读取和写入操作,并且指令高速缓存404可以被配置成用于只读操作。
[0112]
在实例中,数据高速缓存406为每硬件线程提供的小高速缓存。数据高速缓存406可临时存储供拥有线程使用的数据。数据高速缓存406可以由htp加速器400中的硬件或软件来管理。例如,当加载和存储操作由htp核心402执行时,硬件可以被配置成根据需要自动地分配或驱逐线。软件,如使用risc-v指令,可以确定哪些存储器访问应该被高速缓存,以及何时应该使线无效或写回到其它存储器位置。
[0113]
在htp加速器400上高速缓存的数据具有各种益处,包含使存储器控制器的存取更有效,从而允许执行线程避免停滞。然而,在使用高速缓存时存在导致低效率的情形。实例包含其中仅存取数据一次的存取,且导致高速缓存线的颠簸(thrashing)。为了帮助解决该问题,htp加速器400可以使用一组自定义的加载指令来强制加载指令检查高速缓存命中,并且在高速缓存未命中时发出对所请求的操作数的存储器请求,并且不将所获得的数据放入数据高速缓存406中。因此,htp加速器400包含各种不同类型的加载指令,包含非缓存和缓存线加载。如果脏数据存在于高速缓存中,那么非高速缓存的加载指令使用高速缓存的数据。非高速缓存的加载指令忽略高速缓存中的干净数据,且并不将所存取数据写入到数据高速缓存。对于高速缓存线加载指令,可将完整数据高速缓存线(例如,包括64字节)从存储器加载到数据高速缓存406中,且可将所寻址存储器加载到指定寄存器中。如果干净或脏
数据在数据高速缓存406中,这些加载可以使用高速缓存的数据。如果所引用的存储器位置不在数据高速缓存406中,则可以从存储器访问整个高速缓存线。在参考循序存储器位置(如存储器复制操作)时,高速缓存线加载指令的使用可减少高速缓存未命中,但如果不使用所参考存储器数据,那么还可能浪费noc接口416处的存储器和带宽。
[0114]
在实例中,htp加速器400包含非高速缓存的自定义存储指令。非高速缓存的存储指令可有助于利用并未循序地写入到存储器的写入数据来避免使数据高速缓存406颠簸。
[0115]
在实例中,htp加速器400进一步包含转换块408。转换块408可以包含用于存储器计算装置的本地存储器的虚拟到物理转换块。例如,如htp核心402中的主机处理器可执行加载或存储指令,且指令可产生虚拟地址。虚拟地址可以被转换成主机处理器的物理地址,如使用来自转换块408的转换表。例如,存储器接口410可以包含htp核心402和noc接口416之间的接口。
[0116]
图5示出了根据实施例的存储器计算装置的混合线程结构(htf)或htf 500的表示的实例。在实例中,htf 500可包含或包括来自图1的实例的htf 142。htf 500是粗粒度可重新配置计算结构,其可以针对高级语言操作数类型和运算符进行优化(例如,使用c/c 或其它高级语言)。在实例中,htf 500可包含互连硬化simd算术单元的可配置n位宽(例如,512位宽)数据路径。
[0117]
在实例中,htf 500包括htf集群502,所述htf集群502包含多个htf拼片,包含示例性的拼片504或拼片n。每个htf拼片可以实施一或多个具有本地拼片或计算元件存储器和算术功能的计算元件。例如,每一拼片可包含具有对整数和浮点操作的支持的计算流水线。在实例中,数据路径、计算元件和其它基础结构可实施为硬化ip以提供最大性能,同时使功率消耗和重新配置时间最小化。
[0118]
在图5的实例中,包括htf集群502的拼片是线性排列的,并且集群中的每个拼片可以被耦合到htf集群502中的一或多个其它拼片。在图5的实例中,示例性的拼片504或拼片n被耦合到四个其它拼片,包含经由标记为sf in n-2的端口被耦合到拼片510的拼片基部(例如,拼片n-2)、经由标记为sf in n-1的端口被耦合到邻近拼片512(例如,拼片n-1)以及经由标记为sf in n 1的端口被耦合到拼片n 1且经由标记为sf in n 2的端口被耦合到拼片n 2。拼片基部是拼片(如拼片504、510、512)的硬件部分,其被配置为启动线程和/或以其它方式充当流控制器。示例性拼片504可以经由相应的输出端口被耦合到相同或其它拼片,如标记为sf out n-1、sf out n-2、sf out n 1和sf out n 2的输出端口。在该实例中,各个拼片的名称的有序列表是拼片的位置的概念指示。在其它实例中,包括htf集群502的拼片可布置在栅格或其它配置中,其中每一拼片类似地耦合到其在栅格中的最接近相邻者中的一或几个。设置在集群的边缘处的拼片可任选地具有较少与相邻拼片的连接。例如,图5的实例中的拼片n-2或拼片510处的拼片基部可以仅被耦合到相邻拼片512(拼片n-1)和示例性拼片504(拼片n)。可类似地使用较少或额外拼片间连接。
[0119]
htf集群502可以进一步包含存储器接口模块,包含第一存储器接口模块506。存储器接口模块可以将htf集群502耦合到noc,如第一noc 118。在实例中,存储器接口模块可以允许集群内的拼片向存储器-计算系统中的其它位置(如在系统中的相同或不同节点中)发出请求。也就是说,htf 500的表示可包括可跨多个节点分布的更大结构的一部分,如在节点中的每一个处具有一或多个htf拼片或htf集群。可在更大结构的上下文内的拼片或节点
之间作出请求。
[0120]
在图5的实例中,htf集群502中的拼片使用同步结构(sf)耦合。同步结构可以提供htf集群502中的特定拼片与其相邻拼片之间的通信,如上所述。每个htf集群502可以进一包含异步结构(af),其可以提供例如集群中的拼片、集群中的存储器接口以及集群中的分派接口508之间的通信。
[0121]
在实例中,同步结构可交换包含数据和控制信息的消息。控制信息除其它事项之外还可包含指令ram地址信息或线程标识符。控制信息可用于设置数据路径,且可选择数据消息字段作为路径的源。通常,可较早地提供或接收控制字段,使得其可用于配置数据路径。例如,为了帮助最小化通过拼片中的同步流流水线的任何延迟,控制信息可以在数据字段之前几个时钟周期到达拼片。可提供各种寄存器以有助于协调流水线中的数据流定时。
[0122]
在实例中,htf集群502中的每个拼片可以包含一或多个拼片存储器。每个拼片存储器可以具有与数据路径相同的宽度(例如,512位),并且可以具有指定的深度,如在512至1024个元件的范围内。拼片存储器可用于存储支持数据路径操作的数据。例如,存储的数据可以包含作为内核的集群配置的一部分加载的常数,或者可以包含作为数据流的一部分计算的变量。在实例中,拼片存储器可以作为来自另一同步流的数据传输从异步结构写入,或者可以包含如由另一同步流启动的加载操作的结果。可以通过同步流中的同步数据路径指令执行来读取拼片存储器。
[0123]
在实例中,htf集群502中的每个拼片可以具有专用指令ram(inst ram)。在具有16个拼片的htf集群502以及具有64个条目的相应指令ram实例的实例中,该集群可以允许用高达1024个乘法-移位和/或alu运算来映射算法。各种拼片可如使用同步结构任选地一起流水线化,以允许利用最小存储器存取的数据流计算,因此使时延最小化且减小功率消耗。在实例中,异步结构可允许存储器参考与计算并行地继续进行,由此提供更有效的流式传输内核。在实例中,各种拼片可以包含对基于循环的构造的内置支持,并且可以支持嵌套循环内核。
[0124]
同步结构可以允许多个拼片(例如,其多个计算元件)流水线化,如无需数据排队。例如,参与同步流的计算元件可以充当单个流水线化的数据路径。用于同步流的流控制器可以是或包含拼片(例如,在图5的实例中的拼片n-2)、拼片上的计算元件和/或拼片上的拼片基部或控制器。同步流的流控制器可以通过流水线化的拼片启动工作的线程。流控制器可以负责以预定义的节奏(在本文中被称为辐条计数)来启动线程。例如,如果辐条计数是3,那么拼片基部可以每三个时钟周期启动线程。
[0125]
在实例中,同步流包括htf集群502中的一组连接的计算元件。线程的执行可以在流控制器处开始,并且可以从流控制器经由同步结构前进到其它计算元件(例如,在同一同步流中的其它拼片处)。流控制器可以提供待为第一计算元件执行的指令。在默认情况下,第一计算元件可以为其它连接的计算元件提供相同的指令来执行。然而,在一些实例中,流控制器或后续计算元件可以实现有条件地指定或使用替代指令的条件操作。可以通过使计算元件的数据路径产生布尔条件值来选择替代指令,然后可以使用该布尔值在当前计算元件的指令集和替代指令之间进行选择。
[0126]
异步结构可以用于执行相对于同步流异步发生的操作。htf集群502中的每个拼片可以包含到异步结构的接口。入接口可包含例如fifo缓冲器或队列(例如,异步结构入队
列),以针对无法立即处理的消息提供存储。类似地,异步结构的出接口可包含fifo缓冲器或队列(例如,异步结构出队列),以针对无法立即发出的消息提供存储。
[0127]
在实例中,异步结构中的消息可分类为数据消息或控制消息。数据消息可包含写入到拼片存储器0(mem_0)或存储器1(mem_1)的simd宽度数据值。控制消息可被配置成控制线程创建、释放资源或发出外部存储器参考。
[0128]
htf集群502中的拼片可以为htf执行各种计算操作。可以通过配置拼片和/或其计算元件内的数据路径来执行计算操作。在实例中,拼片包含执行用于拼片的计算操作的两个功能块:乘法和移位操作块(ms op)以及算术、逻辑和位操作块(alb op)。两个块可被配置成执行流水线操作,如乘法和相加,或移位和相加等等。
[0129]
在实例中,系统中的存储器计算装置的每一实例可具有用于其运算符块(例如,ms op和alb op)的完整支持指令集。在这种情况下,可跨系统中的所有装置实现二进制兼容性。然而,在一些实例中,可有助于维持基础功能性集合和任选指令集类别,以便满足各种设计折衷,如管芯大小。方法可与risc-v指令集具有基础集合和多个任选指令子集的方式类似。
[0130]
在实例中,示例性拼片504可以包含辐条ram。辐条ram可用于指定哪一输入(例如,来自四个sf拼片输入和基础拼片输入当中)为用于每一时钟周期的主输入。辐条ram读取地址输入可起源于从零计数到辐条计数减去一的计数器。在实例中,不同辐条计数可用于如同一htf集群502内的不同拼片,以允许由内循环使用的数个拼片或独特拼片实例确定特定应用程序或指令集的性能。在实例中,辐条ram可指定同步输入将写入到拼片存储器的时间,例如使用用于特定拼片指令的多个输入以及输入中的一个在其它输入之前到达的时间。较早到达输入可写入到拼片存储器,且可稍后在所有输入可用时读取。在该实例中,拼片存储器可作为fifo存储器进行存取,且fifo读取和写入指针可存储在拼片存储器中的基于寄存器的存储器区或结构中。
[0131]
图6a和图6b大体示出了可以用于实施cnm系统102的一或多个方面的小芯片系统的实例。如上类似地提及的,cnm系统102中的节点或者cnm系统102中的节点内的装置可以包含基于小芯片的架构或者近存储器计算(cnm)小芯片。封装的存储器计算装置可包含例如一个、两个或四个cnm小芯片。小芯片可使用高带宽、低时延互连件(如使用cpi接口)互连。通常,小芯片系统由集成在中介层上的离散模块(每个“小芯片”)组成,并且在许多实例中,根据需要通过一或多个已建立的网络互连,以提供具有期望功能性的系统。中介层和所包含的小芯片可封装在一起,以便于与较大系统的其它组件互连。每一小芯片可包含一或多个单独集成电路(ic)或“芯片”,其可能与离散电路组件组合,且可耦合到相应衬底以便于附接到中介层。系统中的大多数或所有小芯片可单独地配置成用于通过已建立的网络进行通信。
[0132]
小芯片作为系统的单独模块的配置不同于在单芯片上实施的此类系统,所述芯片在一个衬底(例如单个管芯)上含有不同装置块(例如,知识产权(ip)块),如芯片上系统(soc),或集成在印刷电路板(pcb)上的多个离散封装装置。一般来说,小芯片提供比离散封装装置更好的性能(例如,更低的功率消耗、减少的时延等),并且小芯片提供了比单个管芯芯片更大的生产益处。这些生产益处可包含更高的良率或减少的开发成本和时间。
[0133]
小芯片系统可包含例如一或多个应用(或处理器)小芯片和一或多个支持小芯片。
本文中,应用小芯片与支持小芯片之间的区别只是对小芯片系统可能的设计情境的参考。因此,例如,合成视觉小芯片系统可包含(仅作为实例)用以产生合成视觉输出的应用小芯片,以及如存储器控制器小芯片、传感器接口小芯片或通信小芯片等支持小芯片。在典型的用例中,合成视觉设计者可设计应用程序小芯片并且从其他方获取支持小芯片。因此,由于避免设计和生产支持小芯片中所体现的功能性,因此减少了设计支出(例如,在时间或复杂性方面)。
[0134]
小芯片还支持原本可能很困难的ip块紧密集成,如使用不同处理技术或使用不同特征大小(或利用不同的接触技术或间距)制造的ip块。因此,可以模块化方式组装具有不同物理、电气或通信特性的多个ic或ic组件,以提供具有各种所需功能性的组件。小芯片系统还可促进调适以适应将并入有小芯片系统的不同较大系统的需要。在实例中,ic或其它组件可以针对特定功能的功率、速度或发热进行优化—就像传感器可能发生的那样—可以比试图在单个管芯上集成更容易地与其它装置集成。另外,通过减小管芯的整体大小,小芯片的良率往往高于更复杂的单管芯装置的良率。
[0135]
图6a和图6b大体示出了根据实施例的小芯片系统的实例。图6a是安装在外围板604上的小芯片系统602的表示,该小芯片系统602可以通过例如外围组件互连高速(pcie)连接到更广泛的计算机系统。小芯片系统602包含封装基板606、中介层608和四个小芯片,即应用程序小芯片610、主机接口小芯片612、存储器控制器小芯片614和存储器装置小芯片616。其它系统可以包含许多额外的小芯片以提供额外的功能性,如将从以下讨论中显而易见的。小芯片系统602的封装以封盖或盖板618说明,但可使用用于小芯片系统的其它封装技术和结构。图6b是为了清楚起见标记小芯片系统中的组件的框图。
[0136]
应用程序小芯片610被示出为包含小芯片系统noc 620,以支持小芯片网络622进行小芯片间通信。在示例性实施例中,小芯片系统noc 620可以被包含在应用程序小芯片610上。在实例中,可以响应于选择的支持小芯片(例如,主机接口小芯片612、存储器控制器小芯片614和存储器装置小芯片616)来定义来自图1的实例的第一noc 118,从而使得设计者能够为小芯片系统noc 620选择适当数量的小芯片网络连接或开关。在实例中,小芯片系统noc 620可以位于单独的小芯片上,或者位于中介层608内。在如本文讨论的实例中,小芯片系统noc 620实现小芯片协议接口(cpi)网络。
[0137]
在实例中,小芯片系统602可以包含或包括第一存储器计算节点104或第一存储器计算装置112的一部分。也就是说,第一存储器计算装置112的各个块或组件可以包含可以安装在外围板604、封装基板606和中介层608上的小芯片。第一存储器计算装置112的接口组件通常可以包括主机接口小芯片612,第一存储器计算装置112的存储器和存储器控制相关组件通常可以包括存储器控制器小芯片614,第一存储器计算装置112的各种加速器和处理器组件通常可以包括应用程序小芯片610或其实例,等等。
[0138]
如可用于系统中的小芯片之间或当中的通信的cpi接口为基于分组的网络,其支持虚拟信道以实现小芯片之间的灵活且高速交互。cpi能够实现从小芯片内网络到小芯片网络622的桥接。例如,高级可扩展接口(axi)是一种广泛用于设计芯片内通信的规范。然而,axi规范涵盖大量的物理设计选项,如物理信道的数量、信号定时、功率等。在单个芯片内,通常选择这些选项以满足设计目标,如功率消耗、速度等。然而,为了实现小芯片系统的灵活性,使用如cpi等适配器在可实施于各种小芯片中的各种axi设计选项之间介接。通过
实现物理信道到虚拟信道的映射且利用包化协议包封基于时间的信令,cpi跨小芯片网络622桥接小芯片内网络。
[0139]
cpi可利用多种不同的物理层来发射包。物理层可包含简单的导电连接,或可包含驱动器以增大电压,或以其它方式促进在较长距离内发射信号。此类物理层的一个实例可以包含高级接口总线(aib),其在各种实例中可以在中介层608中实现。aib使用带有转发时钟的源同步数据传输来发送和接收数据。以单数据速率(sdr)或双数据速率(ddr)相对于所发射的时钟跨aib传送包。aib支持各种信道宽度。信道可被配置成具有对称数量的发射(tx)和接收(rx)输入/输出(i/o),或者具有非对称数量的发射器和接收器(例如,所有发射器或所有接收器)。信道可根据哪一个小芯片提供主时钟而充当aib主体或从属。aib i/o单元支持三种时钟模式:异步(即非计时)、sdr和ddr。在各种实例中,非计时模式用于时钟和一些控制信号。sdr模式可使用专用的仅sdr i/o单元,或双重用途sdr/ddr i/o单元。
[0140]
在实例中,cpi包协议(例如,点到点或可路由)可在aib信道内使用对称的接收和发射i/o单元。cpi串流协议允许更灵活地利用aib i/o单元。在实例中,流模式的aib信道可将i/o单元配置为全部为tx、全部为rx或一半为tx且一半为rx。cpi包协议可在sdr或ddr操作模式下使用aib信道。在实例中,对于sdr模式,aib信道以80个i/o单元(即,40个tx和40个rx)的增量配置,并且对于ddr模式,aib信道以40个i/o单元的增量配置。cpi串流协议可在sdr或ddr操作模式下使用aib信道。本文中,在实例中,aib信道针对sdr和ddr模式两者以40个i/o单元为增量。在实例中,向每一aib信道分配唯一的接口标识符。所述标识符在cpi复位和初始化期间用于确定跨邻近小芯片的成对aib信道。在实例中,接口标识符为包括七位小芯片标识符、七位列标识符和六位链路标识符的20位值。aib物理层使用aib带外移位寄存器来发射接口标识符。使用移位寄存器的位32到51跨越aib接口在两个方向上传送20位接口标识符。
[0141]
aib将堆叠的一组aib信道限定为aib信道列。aib信道列具有一定数量的aib信道,外加辅助信道。辅助信道含有用于aib初始化的信号。列内的所有aib信道(辅助信道除外)具有相同配置(例如,全部为tx、全部为rx,或者一半为tx且一半为rx,以及具有相同数量的数据i/o信号)。在实例中,以邻近于aux信道的aib信道开始,以连续递增次序对aib信道编号。与aux相邻的aib信道被定义为aib信道零。
[0142]
通常,单独小芯片上的cpi接口可包含串行化-反串行化(serdes)硬件。serdes互连非常适用于需要高速信令和低信号计数的情境。然而,对于复用和解复用、错误检测或校正(例如,使用块级循环冗余检查(crc))、链路级重试或前向错误校正,serdes可能会引起额外的功耗和更长的时延。然而,当低时延或能耗为超短距离小芯片到小芯片互连的主要关注点时,可利用时钟速率允许以最少时延进行数据传送的并行接口。cpi包含用于使这些超短距离小芯片互连的时延和能耗两者最小化的元件。
[0143]
对于流控制,cpi采用基于信用的技术。如应用程序小芯片610的接收方向如存储器控制器小芯片614的发送方提供代表可用缓冲器的信用。在实例中,cpi接收方包含用于给定发射时间单位的每一虚拟信道的缓冲器。因此,如果cpi接收方在时间上支持五个消息和单个虚拟信道,则接收方具有布置成五行的五个缓冲器(例如,每一单位时间一行)。如果支持四个虚拟信道,那么接收方具有布置成五行的二十个缓冲器。每一缓冲器保持一个cpi包的有效负载。
[0144]
当发送方向接收方进行传输时,发送方基于传输而使可用信用递减。一旦接收方的所有信用已消耗,发送方就停止向接收方发送包。这确保接收方始终具有可用缓冲器以存储发射。
[0145]
当接收方处理接收到的包并释放缓冲器时,接收方将可用缓冲空间传送回到发送方。接着,发送方可使用该信用返回以允许传输额外信息。
[0146]
图6a的实例包含小芯片网状网络624,其使用直接的小芯片到小芯片技术,而无需小芯片系统noc 620。小芯片网状网络624可以在cpi或另一种小芯片到小芯片协议中实现。小芯片网状网络624通常实现小芯片流水线,其中一个小芯片充当到流水线的接口,而流水线接口中的其它小芯片仅与自身介接。
[0147]
另外,还可使用专用装置接口来将装置连接到小芯片,所述专用装置接口为如一或多个行业标准存储器接口(如同步存储器接口,如ddr5、ddr6)。小芯片系统或单独的小芯片与外部装置的连接(如更大的系统)可以通过期望的接口(例如,pcie接口)。在实例中,可通过主机接口小芯片612实施此类外部接口,在所描绘的实例中,所述主机接口小芯片提供小芯片系统外部的pcie接口。当行业中的惯例或标准已经集中在此类接口上时,通常采用这类专用小芯片接口626。将存储器控制器小芯片614连接到动态随机存取存储器(dram)存储器装置小芯片616的双数据速率(ddr)接口的图示的实例正是这样的行业惯例。
[0148]
在各种可能的支持小芯片中,存储器控制器小芯片614可能存在于小芯片系统中,因为几乎无所不在地使用用于计算机处理的存储以及用于存储器装置的成熟先进技术。因此,使用通过其它技术产生的存储器装置小芯片616和存储器控制器小芯片614使小芯片系统设计者能够获得由成熟生产商生产的稳健产品。通常,存储器控制器小芯片614提供用以读取、写入或擦除数据的存储器装置特定的接口。通常,存储器控制器小芯片614可以提供额外的特征,如错误检测、错误校正、维护操作或原子运算符执行。对于一些类型的存储器,维护操作往往特定于存储器装置小芯片616,如nand闪存或存储类存储器中的垃圾收集、nand闪存存储器中的温度调整(例如,交叉温度管理)。在实例中,维护操作可包含逻辑到物理(l2p)映射或管理,以在数据的物理与逻辑表示之间提供间接层级。在例如dram的其它类型的存储器中,如刷新的一些存储器操作可在某些时间由主机处理器或存储器控制器控制,且在其它时间由dram存储器装置或与一或多个dram装置相关联的逻辑控制,所述逻辑为如接口芯片(在实例中,缓冲器)。
[0149]
原子运算符是一种数据操作,其例如可以由存储器控制器小芯片614执行。在其它小芯片系统中,原子运算符可以由其它小芯片执行。例如,可由应用程序小芯片610在命令中指定“增量”的原子运算符,所述命令包含存储器地址且可能包含增量值。在接收到命令后,存储器控制器小芯片614从指定存储器地址检索数字,使所述数字以命令中所指定的量递增,并且存储结果。在成功完成后,存储器控制器小芯片614向应用程序小芯片610提供命令成功的指示。原子运算符避免跨过小芯片网状网络624传输数据,从而导致这类命令的较低的时延执行。
[0150]
原子运算符可被分类为内置原子或可编程(例如,自定义)原子。内置原子是在硬件中不变地实施的一组有限的操作。可编程原子是可在存储器控制器小芯片614的可编程原子单元(pau)(例如,自定义原子单元(cau))上执行的小程序。
[0151]
存储器装置小芯片616可以是或包含易失性存储器装置或非易失性存储器的任意
组合。易失性存储器装置的实例包含但不限于随机存取存储器(ram)—如dram、同步dram(sdram)、图形双倍数据速率类型6sdram(gddr6 sdram)以及其它。非易失性存储器装置的实例包含(但不限于)与非(nand)型闪存存储器、存储类存储器(例如,相变存储器或基于忆阻器的技术)、铁电ram(feram)及其它。图示的实例包含作为小芯片的存储器装置小芯片616,然而,该装置可以位于其它地方,如在外围板604上的不同封装中。对于许多应用,可以提供多个存储器装置小芯片。在实例中,这些存储器装置小芯片可各自实施一或多种存储技术,且可包含集成计算主机。在实例中,存储器小芯片可包含不同技术的多个堆叠存储器管芯,例如一或多个静态随机存取存储器(sram)装置与一或多个动态随机存取存储器(dram)装置堆叠或以其它方式通信。在实例中,存储器控制器小芯片614可用于协调小芯片系统602中的多个存储器小芯片之间的操作,例如,在一或多个层级的高速缓存层级中使用一或多个存储器小芯片,且使用一或多个额外存储器小芯片作为主存储器。小芯片系统602可以包含多个存储器控制器小芯片614实例,如可以用于为单独的主机、处理器、传感器、网络等提供存储器控制功能性。如所示系统中的小芯片架构通过更新的小芯片配置,如在不需要重新设计系统结构的其余部分的情况下,在允许适应不同的存储器存储技术和不同的存储器接口方面提供了优势。
[0152]
图7大体示出了根据实施例的用于存储器计算装置的基于小芯片的实现方式的实例。实例包含具有四个近存储器计算或cnm、小芯片的实现方式,并且cnm小芯片中的每一个可以包含或包括来自图1的实例的第一存储器计算装置112或第一存储器计算节点104的部分。各个部分本身可以包含或包括相应的小芯片。基于小芯片的实现方式可以包含或使用基于cpi的系统内通信,如上文在来自图6a和图6b的示例性小芯片系统602中类似讨论的。
[0153]
图7的实例包含包括多个小芯片的第一cnm封装700。第一cnm封装700包含耦合到cnm noc集线器710的第一小芯片702、第二小芯片704、第三小芯片706和第四小芯片708。第一至第四小芯片中的每一个都可以包括相同或基本上相同的组件或模块的实例。例如,每个小芯片可以包含htp加速器、htf加速器和用于访问内部或外部存储器的存储器控制器的相应实例。
[0154]
在图7的实例中,第一小芯片702包含耦合至cnm noc集线器710的第一noc集线器边缘714。第一cnm封装700中的其它小芯片类似地包含noc集线器边缘或端点。noc集线器边缘中的交换机便于经由cnm noc集线器710的小芯片内通信或小芯片系统内通信。
[0155]
第一小芯片702可以进一步包含一或多个存储器控制器716。存储器控制器716可以对应于与第一noc集线器边缘714介接的相应的不同的noc端点交换机。在实例中,存储器控制器716包括存储器控制器小芯片614,或者包括存储器控制器130,或者包括存储器子系统200,或者其它存储器计算实现。存储器控制器716可以被耦合到相应的不同存储器装置,例如包含第一外部存储器模块712a或第二外部存储器模块712b。外部存储器模块可包含例如可选择性地由系统中的相应不同小芯片存取的gddr6存储器。
[0156]
第一小芯片702可以进一步包含第一htp小芯片718和第二htp小芯片720,其如通过相应的不同的noc端点交换机被耦合到第一noc集线器边缘714。htp小芯片可以对应于htp加速器,如来自图1的实例的htp 140,或者来自图4的实例的htp加速器400。htp小芯片可以与htf小芯片722通信。htf小芯片722可以对应于htf加速器,如来自图1的实例的htf 142,或者来自图5的实例的htf 500。
[0157]
cnm noc集线器710可借助于各种接口和交换机耦合到其它小芯片或其它cnm封装中的noc集线器实例。例如,cnm noc集线器710可以通过第一cnm封装700上的多个不同的noc端点被耦合到cpi接口。多个不同noc端点中的每一个可以被耦合到例如第一cnm封装700外部的不同节点。在实例中,cnm noc集线器710可以使用ctcpi或其它非cpi协议被耦合到其它外围设备、节点或装置。例如,第一cnm封装700可以包含被配置为将第一cnm封装700与其它装置介接的pcie规模结构接口(pcie/sfi)或cxl接口(cxl)。在实例中,使用各种cpi、pcie、cxl或其它结构将第一cnm封装700耦合到的装置可构成共同全局地址空间。
[0158]
在图7的实例中,第一cnm封装700包含主机接口724(hif)和主机处理器(r5)。主机接口724可以对应于例如来自图1的实例的hif 120。主机处理器或r5可对应于来自图1的实例的内部主机处理器122。主机接口724可以包含用于将第一cnm封装700耦合到其它外部装置或系统的pci接口。在实例中,通过主机接口724可以在第一cnm封装700或第一cnm封装700内的拼片集群上启动工作。例如,主机接口724可以被配置为命令如第一cnm封装700中的各个小芯片之间的单独的htf拼片集群进入和退出功率/时钟门模式。
[0159]
图8示出了根据实施例的存储器计算装置的示例性拼片化。在图8中,拼片的小芯片实例800包含小芯片的不同的近存储器计算集群的四个实例,其中集群被耦合在一起。近存储器计算小芯片的每一个实例自身可包含一或多个构成小芯片(例如,主机处理器小芯片、存储器装置小芯片、接口小芯片等)。
[0160]
拼片的小芯片实例800包含来自图7的实例的第一cnm封装700的实例作为其近存储器计算(cnm)集群的中一或多个。例如,拼片的小芯片实例800可包含第一cnm集群802,其包含第一小芯片810(例如,对应于第一小芯片702)、第二小芯片812(例如,对应于第二小芯片704)、第三小芯片814(例如,对应于第三小芯片706)和第四小芯片816(例如,对应于第四小芯片708)。第一cnm集群802中的小芯片可耦合到共同noc集线器,其进而可耦合到一或多个相邻集群中的(例如,第二cnm集群804或第四cnm集群808中的)noc集线器。
[0161]
在图8的实例中,拼片的小芯片实例800包含第一cnm集群802、第二cnm集群804、第三cnm集群806和第四cnm集群808。各种不同的cnm小芯片可以被配置在公共地址空间中,使得小芯片可以跨不同的拼片分配和共享资源。在实例中,集群中的小芯片可彼此通信。例如,第一cnm集群802可经由小芯片间cpi接口818通信地耦合到第二cnm集群804,且第一cnm集群802可经由另一或同一cpi接口通信地耦合到第四cnm集群808。第二cnm集群804可经由同一或另一cpi接口通信地耦合到第三cnm集群806,以此类推。
[0162]
在实例中,拼片的小芯片实例800中的近存储器计算小芯片中的一个可以包含主机接口(例如,对应于来自图7的实例的主机接口724),其负责跨过拼片的小芯片实例800的工作负载平衡。主机接口可以便于访问基于主机的命令请求队列和响应队列,如从拼片的小芯片实例800的外部。主机接口可以使用拼片的小芯片实例800中的一或多个近存储器计算小芯片中的混合线程处理器和混合线程结构来分派新的执行线程。
[0163]
图9是示出了使用多于一个同步流在可重新配置计算结构(如htf 142或htf 500)上执行操作的工作流900的一个实例的图。图9的工作流900利用分派接口902和两个同步流901、903。分派接口902被配置成从近存储器计算系统的其它部分接收指令和/或数据,如本文所述。在一些实例中,分派接口902以类似于本文描述的分派接口508的方式布置。
[0164]
同步流901、903包含相应的流控制器904、906和布置在有序同步数据路径908、910
中的计算元件,如本文所述。同步数据路径908、910例如可以位于相应的同步流901、903的计算元件之间,如本文所述。流控制器904、906和同步数据路径908、910由可重新配置计算结构布置,如本文描述的htf 142或htf 500。
[0165]
可重新配置计算结构可以被布置成实施同步流901、903,其包含流控制器904、906和同步数据路径908、910的各种计算元件。例如,流控制器904、906可以使用拼片510、512等的相应的拼片基部来实现。同步数据路径908、910可以在拼片510、512等之间实现,其中拼片510、512等实现本文描述的计算元件。如本文所述和图5所示的拼片、拼片基部等可以是混合线程结构(htf)(如htf 142)的组件,其是存储器计算装置(如图1的存储器计算装置112)的一部分。本文描述的其它同步流可以使用如本文描述的htf的拼片和拼片基部来类似地布置。
[0166]
在图9的工作流900中,域接口902通过经由可重新配置计算结构的异步结构向流控制器904提供异步消息912,来启动处理任务。异步消息912可以是继续类型的消息。域接口902可以基于其自己的编程和/或响应于来自近存储器计算系统可重新配置计算结构的另一组件的指令来启动处理任务。在一些实例中,域接口902还针对用于执行处理任务的正确内核配置来配置可重新配置计算结构,所述处理任务包含例如对各个流控制器904、906和计算元件编程以实现同步流901、903。
[0167]
异步消息912可以指示流控制器904启动同步流线程。例如,当辐条ram为同步流901的组件之间的同步数据路径908选择流控制器904时,流控制器可以通过向同步数据路径908的第一计算元件提供第一同步消息来启动线程。如本文所述,同步消息可以包含数据和控制信息。同步数据路径908的第一计算元件通过执行处理任务并生成发送到同步数据路径908的第二计算元件的下一同步消息来开始线程的执行。第二计算元件执行处理任务并生成第三同步消息,该第三同步消息被发送到同步数据路径908的第三计算元件,以此类推,直到线程在同步数据路径908的所有计算元件处被执行。
[0168]
同步数据路径908的计算元件被编程为在执行线程时执行各种操作,包含例如用于配置同步流903的操作。例如,在同步流901处的线程执行期间,同步数据路径908的一或多个计算元件向同步流903的流控制器906发送异步消息914。异步消息914指示流控制器906以至少一个条件的出现为条件在同步流903处启动线程。在该实例中,一或多个条件包含从同步流901接收到另一个异步消息,该异步消息指示线程完成或者在同步流903处启动线程是以其它方式可接受的。稍后,在同步流901处执行线程时,同步数据路径908的计算元件向同步流903的流控制器906发送异步消息916。异步消息916指示同步流901处的线程已经完成和/或到达其中同步流903处的对应线程可以开始的点。在一些实例中,异步消息916指示在同步流903处的线程期间执行的处理的结果。
[0169]
在接收到异步消息916后(以及当满足异步消息914的其它条件时,如果有的话),流控制器906启动同步流903处的线程,例如,通过向同步数据路径910的第一计算元件发送第一同步消息。在一些实例中,例如,在同步流903处的线程完成时,同步数据路径910的计算元件将向分派接口902发送异步消息918,以指示所请求的处理任务已经完成。
[0170]
图10是示出了用于在可重新配置计算结构(如htf 142或htf 500)上执行操作的工作流1000的一个实例的图,其中同步流1001、1003与存储器接口1016相互作用。在工作流1000中,域接口1002通过经由可重新配置计算结构的异步结构向流控制器1004提供异步消
息1010来启动处理任务。异步消息1010指示流控制器1004在一或多个条件发生时启动同步流1001处的线程。(在一些实例中,消息1010可以指示流控制器1004立即开始执行线程,而无需等待任何条件的出现)。
[0171]
流控制器1004通过向同步数据路径1022的第一计算元件提供同步消息来启动线程,如本文所述。在同步流1001处的线程执行期间,同步数据路径1022的计算元件向同步流1003的流控制器1006提供异步消息1012。异步消息1012可以指示流控制器1006在接收到已经接收到来自存储器接口1016的数据的指示时,启动在同步流1003处的线程。
[0172]
作为在同步流1001处的线程执行的一部分,同步数据路径1022的另一计算元件向存储器接口1016提供异步消息1014。异步消息1014包括指向近存储器计算系统的存储器的读取请求,如例如包含可重新配置计算结构的存储器计算装置的存储器元件。在一些实例中,异步消息1014还可以标识同步流1003的将接收读取请求的结果的计算元件。
[0173]
存储器接口1016在适当的外部存储器上执行读取请求,以获取加载数据。当接收到加载数据时,存储器接口1016将包含加载数据的异步消息1018引导至由异步消息1014指示的同步流1003的计算元件(例如,同步数据路径1024的计算元件中的一个)。在接收到加载数据时,计算元件将加载数据写入到计算元件存储器中,并向同步流1003的流控制器1006发送异步消息1017。消息1017指示已经接收到加载数据。在一些实例中,存储器接口1016向同步流1003的多个计算元件提供包含加载数据的异步消息,类似于消息1018。已经接收到加载数据的每个计算元件可以向流控制器1006提供相应的异步消息,类似于消息1017。
[0174]
在接收到异步消息1017时(以及在满足继续类型的消息1012的任何其它条件后),流控制器1006在同步流1003处启动线程,例如,通过向同步数据路径1024的第一计算元件提供同步消息。如果同步流1003的多于一个的计算元件要接收加载数据,则当流控制器1006已经从已经接收到加载数据的计算元件接收到所有预期的异步消息时,流控制器1006可以启动线程。在一些实例中,在同步流1003处的线程完成时,同步数据路径1024的一或多个计算元件(例如,其最后的计算元件)向分派接口1002发送指示完成的异步消息1020。
[0175]
图11是示出使用可重新配置计算结构(如htf 142或htf 500)来执行循环1122的工作流1100的一个实例的图。使用三个同步流1101、1103、1105来示出工作流1100。在该实例中,循环1122的每次迭代使用单个同步流1103处的单个线程来执行。在该实例中,同步流1101和同步流1105的线程可以执行具有公共线程id的线程。同步流1103处的线程可以具有不同的线程id,这些线程id可以是较低层级的线程id。例如,如果同步流1101和1105的线程处于层级t1,则同步流1103的线程可以处于层级t0。
[0176]
流控制器1102启动同步流1101处的第一线程,例如,通过向同步数据路径1108的第一计算元件提供同步消息。在同步流1101处执行线程包含向同步流1105的流控制器1106发送异步消息1114。异步消息1114可以是继续类型的消息,其指示流控制器1106将在接收到循环1122已经完成的指示之后在同步流1105处执行线程。在一些实例中,异步消息1114还指示在同步流1101处执行的线程的线程id,使得同步流1105处的相应线程可以使用相同的线程id(以及相关资源)。在同步流1101处执行线程还包含向同步流1103的流控制器1104发送异步消息1116。异步消息1116可以是指示流控制器1104执行循环的循环类型的消息。例如,异步消息1116可以包含指示循环中迭代次数的迭代计数。
[0177]
流控制器1104为循环的第一次迭代启动线程。在一些实例中,流控制器1104生成迭代索引,如本文所述。迭代索引可以被包含在例如经由同步消息通过同步流传播的控制信息中。同步域1103的同步数据路径1110的计算元件执行循环的第一次迭代。同步数据路径1110的计算元件可以使用由流控制器1104生成的迭代索引。当线程完成时,一或多个计算元件向流控制器1104发送异步消息1120,指示循环的第一次迭代已经完成。由同步流1103生成的异步消息(如消息1118)可以携带循环1122的迭代索引。
[0178]
在一些实例中,流控制器1104在为循环的第一次迭代启动第一线程后,继续启动额外的线程,以用于执行循环的额外迭代。例如,如果流控制器1104具有三的辐条计数,则它可以在同步流1103处启动新线程,用于每三个时钟周期的循环的新迭代。这可以在不考虑先前循环迭代的线程是否已经完成传播通过同步数据路径1110的计算元件的情况下发生。在一些实例中,实现不同循环迭代的各个线程可以同时在同步流1103的同步数据路径1110的计算元件处执行(例如,以辐条计数偏移)。
[0179]
当实施循环1122的所有迭代的线程已经完成时,流控制器1104将接收到源自实施迭代的所有线程的异步消息。当这已经发生时,流控制器1104向流控制器1106发送异步消息1118,指示循环1122已经完成。流控制器1106可以通过在计算元件1112处启动线程来响应,以实现可重新配置计算结构的编程的下一部分。
[0180]
图11示出了可以被组合以在不同上下文中实现循环的各种示例性元件。首先,尽管图11的实例示出了由同步流1101处的线程启动的循环1122,但是在一些实例中,循环可以由如分派接口的另一组件启动。此外,尽管在图11的实例中,循环1122的完成在另一同步流1105处触发另一线程,但是在一些实例中,循环的完成可以指示处理任务的完成。因此,除了提供给如图11所示的另一个流控制器1106之外,或者代替提供给如图11所示的另一个流控制器1106,指示循环的完成的同步消息1118可以被提供给分派接口。
[0181]
此外,图11示出了可以用于实现嵌套循环的元件。例如,启动循环1122的同步流1101处的线程可以正在执行调用循环1122作为内部循环的外部循环的迭代。此外,在一些实例中,例如,当同步流1101处的线程导致同步流1103执行循环1122时,实现循环1122的迭代的同步流1103处的每个线程可以使得另一个同步流(未示出)实现另一个循环。
[0182]
在图11的实例中,使用单个同步流1103来执行循环1122的每次迭代。然而,在一些实例中,循环迭代的执行可以利用多个同步流。例如,执行用于循环1122的迭代的线程可以包含向第二流控制器和/或存储器接口发送异步消息。第二流控制器启动另一个同步流(未示出)处的线程,以执行循环迭代的另一部分。在该实例中,在循环迭代完成时,完成循环迭代的同步流向启动该循环的流控制器(例如,流控制器1104)发送异步消息。
[0183]
在一些实例中,可以修改图11的布置,使得循环类型的异步消息1116和继续类型的异步消息1114由流控制器1102发送,而不是由同步流1101的计算元件发送,如图11所示。这可以减少在同步数据路径1108处使用的计算元件的数量。在一些实例中,它可以允许省略同步流1101的计算元件。
[0184]
图12是示出了使用可重新配置计算结构(如htf 142或htf 500)来执行三重嵌套循环的工作流1200的实例的图。使用分派接口1202和四个同步流1203、1205、1207和1209来示出工作流1200。图12的工作流1200可以用于执行下面的代码段[4]:
[0185][0186][0187]
在图12的实例中,可重新配置计算结构被配置为包含三个线程层级,t2、t1和t0。然而,在图12的实例中,分派接口1202被配置成直接向流控制器1204发送循环类型的异步消息1212。这可以允许分派接口1202有效地作为具有一个可用线程id的额外线程层级来操作,该额外线程层级在本文中被称为线程层级t3。异步消息1212可以指示第一级x循环的迭代次数(在该实例中,l次迭代)。
[0188]
流控制器1204通过启动同步流1203处的线程来响应循环类型的异步消息1212,以用于执行第一级x循环的迭代。例如,如本文所述,流控制器1204可以为在同步流1203处启动的每个线程生成迭代索引值,并且经由同步消息向同步流1203的计算元件提供迭代索引。在同步流1203处启动的线程可以被分配t2级线程id。同步流1203处的每个线程可以向流控制器1206发送异步消息1214。异步消息1214可以是循环类型的消息,指示流控制器1206开始在同步流1205处启动线程,以用于执行第二级y循环的迭代。异步消息1214可以指示第二级y循环的迭代次数(在该实例中,m次迭代)。
[0189]
流控制器1206可以确定每个启动的线程的相应的迭代索引,并且在同步流1205处启动线程,例如,通过发送一或多个同步消息,如本文所述。在同步流1205处启动的线程可以被分配t1级线程id。同步流1205处的每个线程可以向流控制器1208发送异步消息1216。异步消息1216可以是循环类型的消息,指示流控制器1208开始在同步流1207处启动线程,以用于执行第三级z循环的迭代。异步消息1216可以指示第三级z循环的迭代次数(在该实例中,n次迭代)。
[0190]
流控制器1208可以确定每个启动的线程的相应的迭代索引,并在同步流1207处启动线程,例如,通过发送一或多个同步消息,如本文所述。在同步流1207处启动的线程可以被分配t0级线程id。同步流1207处的线程可以例如通过将s的迭代特定值写入到由迭代索引指示的计算元件存储器位置来更新累加值s。同步流1207处的线程也可以在完成时向流控制器1208发送异步消息1218。异步消息1218可以是完整且空闲类型的消息,指示同步流1207处的线程已完成,并且由完成的线程所使用的t0线程id(以及相关资源)现在可用于重新分配给另一同步流线程。
[0191]
当流控制器1208启动n个线程并接收到n个异步消息1218实例时,可以确定第三级z循环的实例已完成(例如,第三级z循环的n次迭代已经完成)。流控制器1208向流控制器1206发送异步消息1220,指示由特定循环异步消息1216请求的第三级z循环的实例已经完
成,并且发送循环异步消息1216的同步流1205处的线程的t1级线程id现在是空闲的。因为异步消息1220是由流控制器1208发送的,所以可能不需要包含额外的同步流来结束z循环,例如,如图12的实例中那样。
[0192]
流控制器1206可以为第二级y循环的m次迭代中的每次迭代启动线程,并且这些线程中的每一个可以发送启动第三级z循环的实例的异步消息1216。因此,流控制器1206最终可以接收异步消息1220的n个实例。在接收到异步消息1220的m个实例时,流控制器1206可以确定第二级y循环的一个实例的所有迭代已经执行。作为响应,流控制器1206向流控制器1204发送异步消息1222。异步消息1222可以是完整且空闲类型的消息,指示第二级y循环的实例完成,并且请求它的同步流1203处的线程的t2级线程id现在是空闲的。
[0193]
流控制器1208可以为第一级x循环的l次迭代中的每次迭代启动线程,并且这些线程中的每一个可以发送启动第二级y循环的实例的异步消息1214。因此,流控制器1206最终可以接收异步消息1222的l个实例。在接收到异步消息1222的l个实例时,流控制器1208可以确定第一级x循环的所有迭代已经执行。作为响应,流控制器1208向流控制器1204发送异步消息1224。异步消息1222可以是指示三重嵌套循环完成的完整类型消息。响应于来自分派接口1202的异步消息1224和先前继续类型的异步消息1213,流控制器1210启动同步流1209处的线程,以执行累积值s的保存。在完成时,同步流1209处的线程向分派接口1202发送异步消息1226。异步消息1226可以是完整且空闲类型的消息,指示代码段[5]是完整的并且(单个)t3级线程id是可用的。
[0194]
图13是示出了同步流1300的一个实例的图,该同步流1300被布置有配置成生成迭代索引的流控制器1302。同步流1300可以由可重新配置计算结构(如本文描述的htf142或htf 500)来布置。图13的示例性同步流1300包含流控制器1302和示例性的计算元件1304、1306、1308、1310。可重新配置计算结构的一或多个拼片、拼片基部或其它组件可以被编程以实现流控制器1302,并且各个拼片(或其部分)可以被配置以实现相应的计算元件1304、1306、1308、1310。
[0195]
图13的同步流程1300示出了在从流程控制器1302到计算元件1304的组件之间、在从计算元件1304到计算元件1308的组件之间、在从计算元件1308到计算元件1310的组件之间以及在从计算元件1310到计算元件1306的组件之间传递同步消息1328、1330、1332、1334的示例性同步数据路径。
[0196]
流控制器1302可以接收异步消息1326,所述异步消息指示流控制器1302使用同步流1300执行循环。异步消息1326可以包含例如待使用同步流1300执行的循环的迭代计数。如果待由同步流1300执行的循环是嵌套循环的第二级或更低级循环,则异步消息1326还可以包含关于一或多个更高级循环的信息,包含例如更高级循环的迭代计数、发送异步消息1326的更高级循环迭代的迭代次数等。迭代计数是待执行的循环的总迭代次数。例如,对1至2048之间的x的值执行的循环具有2048的循环计数。迭代次数是所执行的特定迭代的次数。
[0197]
再次参考上述示例性代码段[4],如果异步消息1326指示流控制器1302实施第三级z循环,则它可以包含来自与第三级z循环的调用执行相关联的第一级x循环的迭代次数和第二级y循环的迭代次数。在一些实例中,如本文所述,异步消息1326还可以包含第一级x循环和/或第二级y循环的迭代计数。
[0198]
流控制器1302可以通过开始启动同步流1300处的同步流线程,实施由异步消息1326指示的循环。同步流线程对应于所请求的循环的不同迭代。流控制器1302通过向同步流1300的第一计算元件1304发送同步消息1328来启动同步流线程。流控制器1302可以包含迭代索引电路1324,所述迭代索引电路为循环的每次迭代生成迭代索引。由迭代索引电路1324生成的迭代索引作为同步消息1328的一部分被提供给同步流1300的第一计算元件1304。迭代索引可以被包含在例如控制信息中。
[0199]
迭代索引电路1324可以通过任何合适的方式确定迭代索引。在一些实例中,迭代索引电路1324使用在同步流1300处执行的循环的迭代次数和/或迭代计数和/或一或多个更高级循环的迭代次数和/或迭代计数来生成迭代索引。考虑这样的实例,其中存在一个更高级的循环,其在该实例中被称为外部循环,其中由同步流1300递增的循环被称为内部循环。迭代索引电路1324可以对较高级循环的迭代次数执行第一操作,并且将结果与内部循环迭代次数组合。
[0200]
在一些实例中,对外部循环迭代次数的操作包含将外部循环二进制掩码应用于外部循环迭代次数。这可能会返回屏蔽的外部循环迭代次数。在其它实例中,对外部循环迭代次数的操作包含将外部循环迭代次数乘以常数,以生成外部循环迭代次数乘积。例如,通过加法、布尔“或”或任何其它合适的函数,可以将对外部循环迭代次数的操作的结果与屏蔽的外部循环迭代次数相结合。如果存在多于一个外部循环(例如,如果在同步流程1300处执行的循环是第三级或更低级的循环),则迭代索引可以考虑多于一个或所有外部循环的迭代次数和/或迭代计数。
[0201]
在一些实例中,将操作应用于外部循环迭代次数将外部循环迭代次数限制为与同步流1300相关联的外部循环迭代的指示。考虑上面代码段[3]的实例,其中n等于2048。本文中,x的第一级外部循环执行2048次,并且y的第二级内部循环也执行2048次,这意味着内部循环总共执行16,777,216次迭代。同步流1300的计算元件可能没有足够的计算元件存储器来存储所有16,777,216次迭代的数据。因此,多个同步流可以用于执行内部循环和/或计算元件存储器被写入到外部存储器中,并在预定次数的迭代后被清除。因此,屏蔽和/或乘以外部循环迭代次数可以限制所得的屏蔽的外部循环迭代次数,以指示将在同步流程1300处执行的外部循环的迭代。
[0202]
在一些实例中,迭代索引电路1324例如从外部循环迭代次数和唯一的内部循环迭代次数为待由同步流1300执行的循环的每次迭代生成唯一的迭代索引。在其它实例中,迭代电路1324为待由同步流1300执行的循环的第一次迭代生成初始迭代索引。迭代索引电路1324为循环的后续迭代向初始迭代索引添加余量。余量可以反映在每次迭代中可以由计算元件使用的在相应计算元件存储器处的空间量。在一些实例中,余量是或基于计算元件1304、1306、1308、1310的数据宽度。例如,每个计算元件1304、1306、1308、1310可以在每个操作中处理预定量的数据。迭代索引电路1324通过将数据宽度(或数据宽度的倍数)加到前一次迭代的迭代索引上来找到一次循环迭代的迭代索引。
[0203]
如上所述,由迭代索引电路1324为给定同步流线程生成的迭代索引对应于待由该线程实施的循环迭代。流控制器1302将迭代索引包含在发送给计算元件1304的同步消息1328中,以启动同步流1300。计算元件1304使用迭代索引来执行i/o操作。在图13的实例中,计算元件1304使用迭代索引来在计算元件1304的计算元件存储器1314处执行一或多个i/o
操作。例如,计算元件1304可以从计算元件存储器读取操作数数据和/或在由迭代索引指示的存储器位置处将结果数据写入到计算元件存储器1314中。例如,计算元件1304可以从与基本存储器位置偏移量等于迭代索引的量的存储器位置读取数据和/或向所述存储器位置写入数据。在一些实例中,迭代索引相对于不同的基础存储器位置用于不同的操作。例如,计算元件1304可以从由第一基础位置偏移迭代索引量的存储器位置读取操作数数据,并将结果数据写入到从第二基础位置偏移迭代索引量的另一存储器位置。
[0204]
计算元件1304可以通过同步消息1330将由迭代索引电路1324产生的迭代索引传递至下一个计算元件1308。以这种方式,迭代索引可以继续在作为同一同步流线程的一部分的计算元件1306、1308、1310之间传递。计算元件1308、1310、1306可以使用迭代索引,例如,用于对相应的计算元件存储器1318、1320、1316的i/o操作。
[0205]
在一些实例中,一或多个计算元件1304、1306、1308、1310可以使用迭代索引来引用外部存储器位置。在图13的实例中,计算元件1306向存储器接口1322发送异步消息1336。异步消息1336可以包含迭代索引,并且使用迭代索引来指代在外部存储器处对应于执行线程的迭代的一或多个存储器位置。例如,异步消息1336可以包含写入消息,该写入消息包含待写入的数据,并且使用迭代索引来指代用于存储数据的存储器位置。在其它实例中,除了写入请求或者代替写入请求,异步消息1336可以包含读取请求。读取请求可以请求在由迭代索引指示的存储器位置处存储到外部存储器中的数据。
[0206]
图14是示出了处理流程1400的一个实例的流程图,处理流程1400可以由流程控制器执行,以使用迭代索引在同步流处执行循环。执行处理流程1400的流控制器与同步流相关联并在同步流处启动线程,如本文所述。在操作1402处,流控制器接收异步消息,该异步消息指示流控制器在同步流处执行循环。异步消息包含用于循环的迭代计数。
[0207]
在操作1404处,流控制器确定同步流线程的迭代索引,以执行循环的第一次迭代。这可以包含例如对一或多个相关联的外部循环的迭代次数执行操作,并将结果与所请求的循环的迭代次数组合,如本文所述。在操作1406中,流控制器例如通过将同步消息引导至同步流的第一计算元件来启动同步流处的线程。
[0208]
在操作1408处,流控制器确定是否存在更多的待执行的所请求循环的迭代。如果是,则在操作1404处,流控制器为循环的下一次迭代生成迭代索引。这可以包含对外部循环迭代计数执行操作,并将结果与内部循环迭代次数组合,如上所述。在其它实例中,在操作1404处确定下一次迭代的迭代索引包含将余量值添加到前一次迭代的迭代索引。当新的同步流线程的线程id可用时,并且例如在适当的辐条计数时,在操作1406处,流控制器启动同步流处的下一个线程,以执行下一次迭代。如果在操作1408处,没有更多的待执行的循环迭代,则在操作1410处,流控制器等待它的下一个消息。
[0209]
图15是示出了利用打包迭代索引的同步流的流控制器和计算元件的一个实例的图。在一些实例中,可重新配置计算结构的拼片或其它计算元件各自包括多个并行处理通道,如simd处理通道。图15示出了包含流控制器1502的实例,其具有迭代索引电路1528以生成迭代索引,如本文所述。流控制器1502生成打包迭代索引,并经由同步消息1508将打包迭代索引提供给示例性的计算元件1504。
[0210]
计算元件1504包括并行处理通道1510、1512、1514、1516。示出了n个并行处理通道,其中n可以是任何合适的数字,包含例如8。此外,并行处理通道的宽度可以是任何合适
的值。在一些实例中,存在8个64位的处理通道,其中总数据路径宽度为512位。也可以使用其它数量的处理通道和处理通道宽度。在该实例中,每个并行处理通道使用不同的迭代索引iil0、iil1、iil2、iiln。每个通道特定的迭代索引可以偏移多个通道的数据宽度。例如,如果并行处理通道具有8位的数据宽度,则每个通道特定的迭代索引可以从前一个通道的迭代索引偏移8位。
[0211]
流控制器1502的迭代索引电路1528可以被配置为生成打包迭代索引。打包迭代索引包含打包成单个值的多于一个并行处理通道的通道特定的迭代索引。例如,迭代索引电路1528可以生成如本文所述的第一通道1510的第一迭代索引。迭代索引电路1528可以通过将通道宽度添加到第一通道迭代索引来为下一个通道1512生成相应的迭代索引。可以通过将通道宽度添加到通道1512的迭代索引来生成通道1514的迭代索引,以此类推。所有通道1510、1512、1514、1516的索引接口可以被生成并被打包到单个打包迭代索引中。在一些实例中,打包迭代索引的宽度等于并行处理通道1510、1512、1514的组合数据宽度。例如,如所示出的,可以并行地向相应的通道1510、1512、1514、1516提供打包迭代接口。每个通道1510、1512、1514、1516可以使用其通道特定的迭代索引来执行对计算元件存储器1506和/或对外部存储器的i/o操作,如本文所述。
[0212]
图16是示出了可以使用同步流和存储器接口执行以将多维数组的值写入到外部存储器中的处理流程1600的一个实例的流程图。处理流程1600包含三个列1601、1603、1605。列1601包含由同步流的流控制器执行的操作。列1603包含由同步流的计算元件执行的操作。列1605包含由存储器接口执行的操作。在图16的实例中,同步流执行一组两个或更多个嵌套循环的内部循环。例如,参考示例性的代码段[3],同步流可以执行内部“y”循环的全部或一部分。参考图12的实例,例如,类似于图12的同步流1207,图16的同步流可以执行内部“z”循环的全部或一部分。
[0213]
在操作1602处,流控制器接收开始执行循环的指令。该指令可以是例如从分派接口、另一个流控制器或其它合适的组件接收的异步循环消息。循环消息可以包含内部循环的迭代计数的指示以及一或多个外部循环的相应迭代次数的指示。例如,如果处理流程1600用于执行示例性代码段[3]的内部“x”循环,则循环消息可以指示内部“x”循环的迭代计数2048以及启动循环消息的外部“y”循环的迭代的相应迭代次数。如果处理流程1600被用于执行图12的实例的内部“z”循环,则循环消息可以指示内部“z”循环的迭代计数n以及启动循环消息的外部“y”循环的迭代的相应迭代次数和启动“y”循环的迭代的另一个“x”循环的相应迭代计数。
[0214]
在操作1604处,流控制器启动第一同步流线程1610a,以执行内部循环的迭代。为了启动同步流线程1610a,流控制器向同步流计算元件中的第一计算元件发送同步消息1609a。同步消息1609a可以包含待由同步流线程执行的内部循环迭代的指示以及一或多个相应外部循环的迭代次数的指示。在一些实例中,包含同步消息1609a的迭代次数的指示是或包含迭代索引,如本文所述。
[0215]
在操作1606处,流控制器确定在操作1604处启动的迭代是否为内部循环的最后一次迭代。如果是,则在操作1608处,流控制器发送异步完成消息。异步完成消息可以被发送到例如另一个同步流的分派接口和/或流控制器,如本文所述。
[0216]
如果在操作1606处,流控制器确定存在仍有待启动的迭代,则流控制器返回至操
作1604,并通过向同步流计算元件的第一计算元件发送附加同步消息1609b,启动另一线程1610b,以执行内部循环的下一次迭代。同步消息1609b可以例如以适当的辐条计数发送,以便避免干扰先前的同步流线程1610a。在一些实例中,仅当额外的线程id可用时,流控制器在操作1604处启动新的同步流线程。
[0217]
现在参考同步流线程1610a、1610b、1610n,同步流的计算元件接收消息1609a、1609b、1609n。在操作1608a、1608b、1608n处,同步流计算元件确定多维数数组的一或多个数组值,例如,如本文所述。在操作1614a、1614b、1614n处,同步流的计算元件向存储器接口发送相应的异步写入请求1607a、1607b、1607n。每个相应的写入请求1607a、1607b、1607n包含指示由发送同步流线程生成的一或多个数组值的有效负载数据,以及内部循环的迭代次数和一或多个外部循环的迭代次数的指示。在一些实例中,写入请求1607a、1607b、1607n包含指示所有相关循环的迭代次数的迭代索引,例如,类似于关于图13描述的写入请求1336。
[0218]
存储器接口可以在接收到每个写入请求1607a、1607b、1607n时执行操作1616、1618和1620。在操作1616处,存储器接口接收写入请求。在操作1618处,存储器接口确定与由写入请求1607a、1607b、1607n指示的迭代次数相关联的外部存储器偏移量。外部存储器偏移量指示由有效负载数据指示的数组的一或多个值将被写入到其中的外部存储器位置。例如,存储器接口可以将外部存储器偏移量添加到基础外部存储器位置,以确定用于写入有效负载数据的位置。如本文更详细描述的,偏移量可以在多维数组和一组外部存储器位置之间映射。
[0219]
在操作1618处,存储器数组在由在操作1616处确定的外部存储器偏移量所指示的一或多个外部存储器位置处将有效负载数据写入到外部存储器。例如,存储器接口可以将外部存储器偏移量添加到基础外部存储器位置,并将有效负载数据写入到相应的地址。
[0220]
图17是示出了使用外部存储器偏移量映射至外部存储器位置1704的多维数组1702的一个实例的图。图17的布置示出了存储器接口可以由包含写入请求(如写入请求1607a、1607b、1607n)的迭代次数来确定外部存储器偏移量的一种方式。在图17的实例中,多维数组1702是具有2048
×
2048或800h
×
800h的维度的二维数组。例如,可以使用一组两个嵌套循环(具有2048的迭代计数的外部循环和也具有2048的迭代计数的内部循环)来生成多维数组。对于外部循环的每次迭代,内部循环生成2048个数组值,导致总共2048
×
2048或4,194,304个数组值。
[0221]
存储器接口确定外部存储器偏移量,以将数组1702转换为相对于基础外部存储器位置的一组线性外部存储器位置。在图17中,外部存储器位置1704开始于示例性的基础外部存储器地址0x10000000,并且从顶部到底部增加。在图17的实例中,外部存储器地址以十六进制表示。
[0222]
如本文所述,数组1702的每个值被存储到外部存储器位置1704,所述外部存储器位置1704从基础外部存储器地址偏移对应于生成这些值的循环迭代的值。图17示出了其中这被逐行完成的实例。也就是说,从基础外部存储器地址0x10000000开始写入数组1702的底部行,然后写入数组1702的底部行的下一行,以此类推。然而,本文所描述的技术也可以应用于逐列写入数组1702。
[0223]
存储器接口使用内部循环数和外部循环数来为给定的数组值生成外部存储器偏移量。数组1702的每个值的行和列值可以由生成该值的外部和内部循环迭代的迭代次数来
表征。例如,数组值[0,0]可以由外部循环的第一次迭代和内部循环的相应第一次迭代生成。数组值[137,820]可以由外部循环的第138次迭代和内部循环的相应第820次迭代生成。
[0224]
存储器接口可以使用外部循环偏移量和内部循环偏移量的组合为数组值生成外部存储器偏移量。在一些实例中,外部循环偏移量可以通过下面的等式[5]来概括:
[0225]
外部循环_偏移量=(外部循环_迭代*(数据_宽度*外部循环_维度))[5]
[0226]
在[5]中,外部循环_偏移量是外部循环偏移量。外部循环_迭代是外部循环的迭代次数。数据_宽度是用于存储数组1702的每个值的外部存储器位置的数量。例如,如果外部存储器具有一个字节的存储器位置,那么数据_宽度是数组值中的字节的数量。并且,外部循环_维度是多维数组的对应于外部循环的维度。在图17的实例中,多维数组的外部循环维度是2048,并且数据宽度是八个字节。因此,第一行中数组值的外部循环偏移量为零,并且第二行中数组值的外部循环偏移量为16,384(4000h)。在一些实例中,内部循环偏移量可以通过等式[6]来概括:
[0227]
内部循环_偏移量=(内部循环_迭代*数据宽度)[6]
[0228]
在等式[6]中,内部循环_偏移量是内部循环偏移量,并且内部循环_迭代是内部循环的迭代次数。在一些实例中,总外部存储器偏移量是内部循环偏移量和外部循环偏移量之和,由下面的等式[7]给出:
[0229]
外部存储器偏移量=外部循环_偏移量 内部循环_偏移量[7]
[0230]
现在考虑图17的实例,其中基础外部存储器位置地址为0x10000000,并且数据宽度为八(例如,每个数组值占用八个一字节外部存储器位置)。对于数组值[0,0],外部循环偏移量和内部循环偏移量将为零,总循环偏移量为零。因此,存储器接口可以将数组值[0,0]写入到基础外部存储器地址0x10000000。
[0231]
对于数组1702的值[0,1],外部循环偏移量仍为零,而内部循环偏移量为八,因此外部存储器偏移量为八。因此,数组值[0,1]可以从外部存储器位置0x10000008开始存储,该外部存储器位置从基础外部存储器地址0x10000000偏移八。对于数组1702的值[0,2],外部循环偏移量仍然为零,而内部循环偏移量为16。因此,数组值[0,2]被写入到外部存储器位置0x10000010,其与基础外部存储器地址0x10000000偏移十六个字节(记得外部存储器位置地址是以十六进制表示的)。
[0232]
该模式贯穿数组的行[0,i],其中外部循环偏移量为零并且内部循环偏移量基于内部循环迭代次数。对应于外部循环的第一次迭代0的内部循环的最后一次迭代生成数组值[0,2047],其是第一行的最后一个值。对于数组值[0,2047],外部循环偏移量保持为零,而内部循环偏移量是8的2047倍,即16,376(3ff8h)。因此,存储器接口可以从外部存储器位置0x10003ff8开始存储数组值[0,2047],该外部存储器位置由基础外部存储器地址偏移16,376或3ff8h。
[0233]
还考虑数组1702的第二行的第一列值(值[1,0])。对于该数组值,外部循环偏移量现在是16,384(4000h)。内部循环偏移量为零,因此总偏移量为16,384(4000h)。因此,存储器接口从外部存储器位置地址0x1004000开始写入数组1702值[1,0],如图17所示。存储器接口可以类似地为数组1702的其它值找到外部存储器偏移量,如图所示。
[0234]
在一些实例中,多维数组的数组值可以由具有计算元件的同步流确定,所述计算元件具有多个并行处理通道。在这些布置中,每个同步流线程可以并行执行内部循环的多
次迭代。因此,由每个同步流生成的有效负载数据包含数组1702的多个值。
[0235]
考虑这样的实例,其中同步流的计算元件包含八个并行处理通道,其中每个并行处理通道生成八字节数组值。因此,每个同步流线程可以同时评估内部循环的八次迭代。由每个线程生成的有效负载数据可以包含为八次迭代生成的八个数组值,其中每个数组值包括八个字节。因此,来自第一同步流线程的有效负载数据可以包含数组1702的[0,0]、[0,1]、[0,2]、[0,3]、[0,4]、[0,5]、[0,6]和[0,7]值。由下一个同步流线程生成的有效负载数据可以包含数组1702的[0,8]、[0,9]、[0,10]、[0,11]、[0,12]、[0,13]、[0,14]和[0,15],以此类推。因此,执行内部循环的2048次迭代以生成数组1702的一行值可以仅涉及执行256个同步流线程。
[0236]
在其中同步流计算元件包括多个并行处理通道的实例中,存储器接口可以通过在寻找内部循环偏移量时考虑线程数量和并行处理通道的数量来考虑这一点。实例由下面的等式[7]给出:
[0237]
外部循环_偏移量=(内部循环_线程数*数据宽度*并行处理通道_数量)[7]
[0238]
在等式[7]中,内部循环_线程数是同步流线程的线程数。例如,返回数组值[i,0]、[i,1]、[i,2]、[i,3]、[i,4]、[i,5]、[i,6]和[i,7]的线程将是线程0,返回数组值[i,8]、[i,9]、[i,10]、[i,11]、[i,12]、[i,13]、[i,14]和[i,15]的线程将是线程1,以此类推。并行处理通道_数量是计算元件中并行处理通道的数量。当使用并行处理通道时,存储器接口可以使用等式[7]来生成内部循环偏移量,同时使用等式[5]来生成一或多个外部循环偏移量。
[0239]
在一些实例中,本文所述的外部存储器偏移量可以用于其中不同同步流用于生成多维数组的不同值的布置中。例如,不同的同步流可以生成外部存储器偏移量,如本文所述,并且将这些偏移量应用于不同的基础位置。再次参考图17的实例,考虑由1706指示的数组1702的64列。64列1706对应于列编号129-191。使用本文描述的内部和外部循环偏移量,并且使用0x10000400作为基础外部存储器位置,单个同步流可以执行对应于列129-191的内部循环的六十四次迭代。其它同步流可以使用其它合适的基础外部存储器位置类似地找到数组1702的不同列的数组值。
[0240]
应当理解,尽管图17示出了二维数组,但在一些实例中,所述技术可以用于具有额外维度的数组。例如,考虑一组用于生成a
×b×
c数组的三个嵌套循环。第一级循环将执行a次。第二级循环将执行b次,并且第三级或内部循环将执行c次。在该实例中,存储器接口将通过对第一级循环的外部循环偏移量、第二级循环的外部循环偏移量和第三级或内部循环的内部循环偏移量求和来找到内部循环的每次迭代的外部存储器偏移量。在该实例中,第一级循环的外部循环维度将是a,并且第二级循环的外部循环维度将是b。可以添加输出数组的额外维度,例如,通过添加如所示出的额外外部循环偏移量来添加输出数组的额外维度。
[0241]
在一些实例中,由同步流线程生成的写入请求可以使用迭代索引指示内部和外部循环迭代次数,如本文所述。在这些实例中,存储器接口可以被配置成将迭代索引转换成指示内部循环迭代次数的内部循环部分和指示外部循环迭代次数的外部循环部分。例如,这可以通过屏蔽和(如有必要)除法(或位移位)来实现。考虑示例性的八位迭代索引,其中外部循环迭代次数由四个最高有效位表示,并且内部循环迭代次数由四个最低有效位表示。为了找到内部循环偏移量,存储器接口可以应用内部循环掩码,所述内部循环掩码屏蔽四
个最高有效位。为了找到外部循环偏移量,存储器接口可以应用外部循环掩码,所述外部循环掩码屏蔽四个最低有效位,并将剩余位右移四位,以产生外部循环迭代次数。
[0242]
考虑由具有带有多个并行处理通道的计算元件的同步流实施的另一实例,如本文所述。回想在此类布置中,执行内部循环迭代的同步流线程的数量少于内部循环迭代的数量。因此,迭代索引中用于指示线程数的位的数量可以少于用于指示完整内部循环迭代次数的位的数量。
[0243]
图18是示出了可以由存储器接口执行以产生外部存储器偏移量的处理流程1800的一个实例的流程图。例如,处理流程1800示出了存储器接口可以执行处理流程1600的操作1618的一种示例性方式。在操作1802处,存储器接口接收包括有效负载数据和迭代索引或外部循环迭代次数和内部循环迭代次数的其它指示的写入请求。
[0244]
在操作1804处,存储器接口确定外部循环偏移量。在其中使用迭代索引的实例中,存储器接口可以应用迭代索引的适当屏蔽和移位来产生外部循环迭代次数。如本文所述,然后可以使用外部循环迭代次数来生成外部循环偏移量。如果存在多于一个外部循环,则存储器接口可以生成多于一个外部循环偏移量,如本文所述。在操作1806处,存储器接口确定内部循环偏移量。在其中使用迭代索引的实例中,存储器接口可以应用迭代索引的适当屏蔽和移位,以产生内部循环迭代次数和/或内部循环线程数。如本文所述,可以使用内部循环迭代次数和/或内部循环线程数来生成内部循环偏移量。
[0245]
在操作1808处,存储器接口使用在操作1806处确定的内部循环偏移量和在操作1804处确定的一或多个外部循环偏移量来确定写入请求的外部存储器偏移量。例如,存储器接口可以对内部偏移量和一或多个外部偏移量求和。在操作1810处,存储器接口在由偏移量指示的外部存储器位置开始写入有效负载数据。例如,存储器接口可以通过将偏移量添加到基础外部存储器位置来确定由偏移量指示的外部存储器位置的地址,如本文所述。
[0246]
图19示出了示例性机器1900的框图,本文讨论的任何一或多种技术(例如,方法)可以通过该示例性机器实施,或者本文讨论的任何一或多种技术(例如,方法)可以在该示例性机器中实施。如本文所述,实例可以包含机器1900中的逻辑或多个组件或机构,或者可以由机器1900中的逻辑或多个组件或机构来操作。电路系统(例如,处理电路系统)是在包含硬件(例如,简单电路、门、逻辑等)的机器1900的有形实体中实现的电路的集合。电路系统成员资格可随时间推移为灵活的。电路系统包含在操作时可单独或组合地执行特定操作的构件。在实例中,可以不可改变的方式设计电路系统的硬件以进行特定操作(例如,硬连线)。在实例中,电路系统的硬件可以包含可变地连接的物理组件(例如,执行单元、晶体管、简单电路等),其包含被物理地修改(例如,磁地、电地、可移动放置不变的聚集颗粒等)以编码特定操作的指令的机器可读媒体。在连接物理组件时,改变硬件组成部分的根本电性质,例如从绝缘体变为导体,或反之亦然。指令使得嵌入式硬件(例如,执行单元或加载机构)能够经由可变连接以硬件创建电路系统的构件以在处于操作中时实行特定操作的部分。因此,在实例中,机器可读媒体元件是电路系统的一部分或在装置操作时以通信方式耦合到电路系统的其它部件。在实例中,物理组件中的任一个可以用于多于一个电路系统中的多于一个部件中。例如,在操作下,执行单元可在一个时间点用于第一电路系统中的第一电路,且由第一电路系统中的第二电路重新使用,或在不同时间由第二电路系统中的第三电路重新使用。关于机器1900的这些组件的另外的实例。
[0247]
在替代的实施例中,机器1900可以作为独立装置操作,或者可以被连接(例如,联网)至其它机器。在联网部署中,机器1900可在服务器-客户端网络环境中以服务器机器、客户端机器或这两者的能力操作。在实例中,机器1900可以充当对等(p2p)(或其它分布式)网络环境中的对等机器。机器1900可以是个人计算机(pc)、平板pc、机顶盒(stb)、个人数字助理(pda)、移动电话、网络器具、网络路由器、交换机或桥接器,或能够执行(依次或以其它方式)指定待由所述机器采取的动作的指令的任何机器。此外,虽然仅示出单个机器,但术语“机器”还应被视为包含单独或联合执行一组(或多组)指令以执行本文讨论的方法论中的任何一或多种的任何机器集合,如云计算、软件即服务(software as a service,saas)、其它计算机集群配置。
[0248]
机器1900(例如,计算机系统)可以包含硬件处理器1902(例如,中央处理单元(cpu)、图形处理单元(gpu)、硬件处理器核心或其任意组合)、主存储器1904、静态存储器1906(例如,用于固件、微代码、基本输入输出(bios)、统一可扩展固件接口(uefi)等的存储器或存储装置)以及大容量存储装置1908(例如,硬盘驱动器、磁带驱动器、闪存存储装置或其它块装置),它们中的一些或全部可以经由互连1930(例如,总线)彼此通信。机器1900可以进一步包含显示装置1910、字母数字输入装置1912(例如,键盘)和用户界面(ui)导航装置1914(例如,鼠标)。在实例中,显示装置1910、输入装置1912和ui导航装置1914可以是触摸屏显示器。机器1900可以另外包含大容量存储装置1908(例如,驱动单元)、信号生成装置1918(例如,扬声器)、网络接口装置1920和一或多个传感器1916,如全球定位系统(gps)传感器、指南针、加速度计或其它传感器。机器1900可以包含输出控制器1928,如串行(例如,通用串行总线(usb))、并行或其它有线或无线(例如,红外(ir)、近场通信(nfc)等)连接以与一或多个外围装置(例如,打印机、读卡器等)通信或控制所述一或多个外围装置。
[0249]
硬件处理器1902、主存储器1904、静态存储器1906或大容量存储装置1908的寄存器可以是或包含机器可读媒体1922,在机器可读媒体1922上存储有一或多组数据结构或指令1924(例如,软件),其体现了本文所述的任何一或多种技术或功能或者由本文所述的任何一或多种技术或功能使用。在通过机器1900执行期间,指令1924还可以完全或至少部分地驻留在硬件处理器1902、主存储器1904、静态存储器1906或大容量存储装置1908的任何寄存器中。在实例中,硬件处理器1902、主存储器1904、静态存储器1906或大容量存储装置1908中的一者或任意组合可以构成机器可读媒体1922。虽然机器可读媒体1922被示出为单个媒体,但是术语“机器可读媒体”可以包含被配置成存储一或多个指令1924的单个媒体或多个媒体(例如,集中式或分布式数据库,或者相关高速缓存和服务器)。
[0250]
术语“机器可读媒体”可包含能够存储、编码或承载供机器1900执行且使机器1900执行本公开的技术中的任何一或多种的任何媒体,或能够存储、编码或承载由此类指令使用或与此类指令相关的数据结构的任何媒体。非限制性机器可读媒体实例可包含固态存储器、光学媒体、磁性媒体和信号(例如,射频信号、其它基于光子的信号、声音信号等)。在实例中,非暂时性机器可读媒体包括具有多个粒子的机器可读媒体,所述粒子具有不变(例如,静止)质量,且因此为物质组成。因此,非暂时性机器可读媒体是不包含暂时性传播信号的机器可读媒体。非暂时性机器可读媒体的具体实例可以包含:非易失性存储器,如半导体存储器装置(例如,电可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom))和闪存存储器装置;磁盘,如内部硬盘和可移动盘;磁光盘;以及cd-rom和dvd-rom盘。
[0251]
在实例中,存储在或以其它方式提供在机器可读媒体1922上的信息可以代表指令1924,如指令1924本身或可以从其导出指令1924的格式。可从其导出指令1924的该格式可包含源代码、已编码指令(例如,呈压缩或加密形式)、已封装指令(例如,拆分成多个封装)等。机器可读媒体1922中表示指令1924的信息可以由处理电路系统处理成指令,以实现本文讨论的任何操作。例如,从信息中导出指令1924(例如,由处理电路系统处理)可以包含:编译(例如,从源代码、目标代码等)、解释、加载、组织(例如,动态地或静态地链接)、编码、解码、加密、解密、封装、解封装或以其它方式将信息操纵到指令1924中。
[0252]
在实例中,指令1924的推导可以包含信息的汇编、编译或解释(例如,通过处理电路系统),以从由机器可读媒体1922提供的一些中间或预处理格式中创建指令1924。信息当以多个部分提供时可以被组合、解封装和修改以创建指令1924。例如,信息可以在一或若干个远程服务器上的多个压缩源代码封装(或目标代码,或二进制可执行代码等)中。源代码封装在通过网络传输时可以被加密,并且在必要时可以被解密、解压缩、汇编(例如,链接),并且在本地机器处被编译或解释(例如,编译或解释成库、独立可执行的等),并且由本地机器执行。
[0253]
指令1924可以利用多种传输协议(例如,帧中继(frame relay)、互联网协议(ip)、传输控制协议(tcp)、用户数据报协议(udp)、超文本传输协议(http)等)中的任何一种,经由网络接口装置1920通过使用传输媒体的通信网络1926被进一步传输或接收。示例性的通信网络可以包含局域网(lan)、广域网(wan)、分组数据网络(例如,因特网)、移动电话网络(例如,蜂窝网络)、普通老式电话(pots)网络和无线数据网络(例如,被称为的电气和电子工程师协会(ieee)802.11标准族、被称为的ieee 802.16标准族)、ieee 802.15.4标准族、对等(p2p)网络,以及其它。在实例中,网络接口装置1920可以包含一或多个物理插孔(例如,以太网、同轴或电话插孔)或一或多个天线,以连接到网络1926。在实例中,网络接口装置1920可以包含多个天线,以使用单输入多输出(simo)、多输入多输出(mimo)或多输入单输出(miso)技术中的至少一种进行无线通信。术语“传输媒体”应被视为包含能够存储、编码或承载指令以由机器1900执行的任何无形媒体,且包含数字或模拟通信信号或用以促进此类软件的通信的其它无形媒体。传输媒体是机器可读媒体。
[0254]
为了更好地说明本文中所描述的方法和设备,一组非限制性实例实施例在下文阐述为带编号的实例。
[0255]
以上详细描述包含对附图的参考,所述附图形成所述详细描述的一部分。图式借助于说明展示可实践本发明的特定实施例。这些实施例在本文中也被称为“实例”。此类实例可包含除了所示出或所描述的那些元件之外的元件。然而,本发明人还预期其中仅提供所示或所描述的那些元件的实例。此外,本发明人还预期使用相对于特定实例(或其一或多个方面)或相对于本文展示或描述的其它实例(或其一或多个方面)而展示或描述的那些元件的任何组合或排列的实例(或其一或多个方面)。
[0256]
在本文件中,如专利文件中常见,使用术语“一”或“一个”以包含一个或多于一个,这与“至少一个”或“一或多个”的任何其它实例或用途无关。在本文件中,除非另外指示,否则术语“或”用于指代非排他性的或,使得“a或b”可以包含“a而非b”、“b而非a”,以及“a和b”。在所附的权利要求中,术语“包含(including)”和“其中(in which)”被用作相应术语“包括(comprising)”和“其中(wherein)”的简明英语等同物。此外,在所附的权利要求中,
术语“包含”和“包括”是开放式的,也就是说,包含除了在权利要求中的此类术语之后列出的那些要素之外的要素的系统、装置、制品或过程仍然被认为落入该权利要求的范围内。此外,在以下权利要求书中,术语“第一”、“第二”和“第三”等仅用作标签,并且并不旨在对其对象施加数字要求。
[0257]
以上描述旨在是说明性的,而非限制性的。例如,上文所描述的实例(或其一或多个方面)可以彼此组合使用。如所属领域的一般技术人员在查阅以上描述后可使用其它实施例。所述文件在遵守以下理解的情况下提交:其将不会用于解释或限制权利要求的范围或含义。同样,在以上具体实施方式中,可以将各种特征分组在一起以简化本公开。该情况不应解释为期望未要求的揭示特征对任何权利要求来说是必需的。实际上,本发明主题可在于比特定公开的实施例的所有特征要少。因此,特此将所附权利要求书并入到具体实施方式中,其中每一权利要求作为一单独实施例而独立存在,且预期此类实施例可以各种组合或排列彼此组合。本发明的范围应该通过参考所附的权利要求书以及所述权利要求书所授予的等效物的完整范围来确定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献