CN117795496A - 可重新配置计算组构中的并行矩阵运算 - Google Patents
可重新配置计算组构中的并行矩阵运算 Download PDFInfo
- Publication number
- CN117795496A CN117795496A CN202280053768.8A CN202280053768A CN117795496A CN 117795496 A CN117795496 A CN 117795496A CN 202280053768 A CN202280053768 A CN 202280053768A CN 117795496 A CN117795496 A CN 117795496A
- Authority
- CN
- China
- Prior art keywords
- memory
- data structure
- coordinate data
- input matrix
- values
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 156
- 239000004744 fabric Substances 0.000 title description 82
- 239000013598 vector Substances 0.000 claims abstract description 142
- 238000012545 processing Methods 0.000 claims abstract description 115
- 238000009825 accumulation Methods 0.000 claims abstract description 60
- 230000015654 memory Effects 0.000 claims description 411
- 238000000034 method Methods 0.000 claims description 40
- 238000004891 communication Methods 0.000 claims description 35
- 230000006870 function Effects 0.000 claims description 9
- 230000001360 synchronised effect Effects 0.000 description 149
- 238000010586 diagram Methods 0.000 description 18
- 239000000872 buffer Substances 0.000 description 12
- 238000013461 design Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 230000002093 peripheral effect Effects 0.000 description 9
- 230000005540 biological transmission Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 7
- 230000009467 reduction Effects 0.000 description 7
- 238000007792 addition Methods 0.000 description 6
- 239000000758 substrate Substances 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 5
- 238000007726 management method Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000012937 correction Methods 0.000 description 3
- 238000007667 floating Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 230000001902 propagating effect Effects 0.000 description 3
- 230000011664 signaling Effects 0.000 description 3
- 230000000153 supplemental effect Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 239000000470 constituent Substances 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 108091071338 17 family Proteins 0.000 description 1
- 102100035964 Gastrokine-2 Human genes 0.000 description 1
- 101001075215 Homo sapiens Gastrokine-2 Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 229920003211 cis-1,4-polyisoprene Polymers 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 230000020169 heat generation Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 239000012212 insulator Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000011295 pitch Substances 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 235000013599 spices Nutrition 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/53—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
- G06F7/5306—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel with row wise addition of partial products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Complex Calculations (AREA)
- Multi Processors (AREA)
Abstract
可将描述输入矩阵的非零值的第一组多个坐标数据结构元素加载到计算元件。还可将具有对应于所述第一组多个坐标数据结构元素的输入矩阵列号的输入向量行号的第一组输入向量值加载到所述计算元件。可使用所述计算元件的多个并行处理通道来更新多个部分累加值,其中每一部分累加值对应于输出向量行及所述多个并行处理通道中的一者。可跨所述并行处理通道的至少一部分对对应于所述第一输入矩阵行的所述部分累加值的至少一部分求和以产生第一输出向量行值。
Description
优先权
本申请要求2021年8月3日提交的第17/392,756号美国申请的优先权的权益,所述申请的全文以引用的方式并入本文中。
背景技术
各种计算机架构(例如冯·诺依曼架构)常规上使用数据的共享存储器、用于存取共享存储器的总线、算术单元及程序控制单元。然而,在处理器与存储器之间移动数据可能需要大量的时间及能量,这又可能约束计算机系统的性能及容量。鉴于这些限制,期望新的计算架构及装置以使计算性能超越晶体管微缩(即,摩尔定律)的实践。
附图说明
为了便于识别任何特定元件或动作的论述,参考编号中的最高有效数字或若干最高有效数字指代其中首次出现那个元件的图号。
图1大体上说明根据实施例的在存储器计算系统的背景下的第一存储器计算装置的第一实例。
图2大体上说明根据实施例的存储器计算装置的存储器子系统的实例。
图3大体上说明根据实施例的用于存储器控制器的可编程原子单元的实例。
图4说明根据实施例的存储器计算装置的混合线程处理器(HTP)加速器的实例。
图5说明根据实施例的存储器计算装置的混合线程组构(HTF)的表示的实例。
图6A大体上说明根据实施例的小芯片系统的实例。
图6B大体上说明展示来自图6A的实例的小芯片系统中的各种组件的框图。
图7大体上说明根据实施例的存储器计算装置的基于小芯片的实施方案的实例。
图8说明根据实施例的存储器计算装置小芯片的实例平铺。
图9是展示用于使用多于一个同步流在可重新配置计算组构处执行操作的工作流程的一个实例的图。
图10是展示用于在可重新配置计算组构处执行操作的工作流程的一个实例的图,其中同步流与存储器接口交互。
图11是展示用于使用可重新配置计算组构执行循环的工作流程的一个实例的图。
图12是展示用于在可重新配置计算组构中执行矩阵向量乘法的工作流程的一个实例的图。
图13是展示可在可重新配置计算组构中执行以执行矩阵向量乘法的过程流程的一个实例的流程图。
图14是展示用于在可重新配置计算组构中利用实例聚集加载及分散写入操作执行矩阵向量乘法的实例技术的另一说明的图。
图15是展示可在可重新配置计算组构中执行以执行矩阵向量乘法的过程流程的一个实例的过程流程。
图16是展示用于在可重新配置计算组构中执行矩阵向量乘法的工作流程的一个实例的图,其中坐标数据结构及输入向量存储在外部存储器处。
图17说明实例机器的框图,利用所述机器、在所述机器中或通过所述机器可实施本文中所论述的任何一或多种技术(例如,方法论)。
具体实施方式
可利用材料、装置及集成技术的最新进展来提供以存储器为中心的计算拓扑。例如,对于受大小、重量或功率要求约束的应用,此类拓扑可实现计算效率及工作负载处理量的提升。所述拓扑可被用来促进存储器或其它数据存储元件附近或内部的低延时计算。所述方法可特别适用于具有稀疏查找的各种计算密集型操作,例如在变换计算(例如,快速傅里叶变换计算(FFT))中,或在例如神经网络或人工智能(AI)、金融分析或者例如针对计算流体动力学(CFD)、增强型工程师声学模拟器(EASE)、以集成电路为核心的模拟程序(SPICE)等等的模拟或建模的应用中。
本文中所论述的系统、装置及方法可包含或使用具有处理器或处理能力的存储器计算系统,所述存储器计算系统提供在存储器或数据存储组件中、附近或与其集成在一起。此类系统在本文中通常被称为近存储器计算(CNM)系统。CNM系统可为基于节点的系统,其中所述系统中的个别节点使用系统缩放组构来耦合。每一节点可包含或使用专用或通用处理器及用户可存取加速器与定制计算组构来促进密集型操作,特别是在预期较高高速缓存未命中率的环境中。
在实例中,CNM系统中的每一节点可具有一或若干主机处理器。在每一节点内,专用混合线程处理器可占据芯片上网络的离散端点。混合线程处理器可存取所述系统的特定节点中的存储器的一些或全部,或者混合线程处理器可经由系统缩放组构跨多个节点的网络存取存储器。每一节点处的定制计算组构或混合线程组构可具有(若干)其自身处理器或加速器且可在比混合线程处理器更高的带宽下操作。可不同地配置近存储器计算系统中的不同节点,例如具有不同计算能力、不同类型的存储器、不同接口或其它差异。然而,所述节点可共同地经耦合以在所定义地址空间内共享数据及计算资源。
在实例中,近存储器计算系统或所述系统内的节点可由用户进行配置以用于定制操作。用户可使用高级编程语言(例如C/C++)提供指令,所述指令可被编译及直接映射到所述系统或者CNM系统中的一或多个节点的数据流架构中。即,所述系统中的节点可包含可经配置以直接实施或支持用户指令以由此增强系统性能且减少延时的硬件块(例如,存储器控制器、原子单元、其它客户加速器等)。
在实例中,近存储器计算系统可特别适合于实施指令及嵌套循环(例如,两个、三个或更多个深度循环,或者多维循环)的层次结构。标准编译器可被用来接受高级语言指令且又直接编译成所述节点中的一或多者的数据流架构。例如,所述系统中的节点可包含混合线程组构加速器。混合线程组构加速器可在CNM系统的用户空间中执行且可启动其自身线程或子线程,所述线程或子线程可并行操作。每一线程可映射到不同循环迭代以由此支持多维循环。凭借启动此类嵌套循环的能力以及其它能力,CNM系统可为计算密集型操作实现显著的时间节省及延时改进。
在一些实例中,近存储器计算系统经编程以将可重新配置计算组构(例如本文中所描述的各种HTF)的组件布置成一或多个同步流。可重新配置计算组构包括可经布置以形成一或多个同步流的一或多个硬件流控制器及一或多个硬件计算元件,如本文中所描述。
计算元件包括计算元件存储器及形成用于处理经接收数据的计算流水线的处理器或其它合适逻辑电路系统。在一些实例中,计算元件包括多个并行处理通道,例如单指令多数据(SIMD)处理通道。计算元件还包括用于将同步及异步消息发送及接收到流控制器、其它计算元件及其它系统组件的电路系统,如本文中所描述。本文中关于图5的片块504、510、512描述实例计算元件。
流控制器包括用于管理同步流的处理器或其它逻辑电路系统,如本文中所描述。流控制器包括用于将同步及异步消息发送到计算元件、其它流控制器及其它系统组件的电路系统,如本文中所描述。在一些实例中,流控制器使用本文中所描述的片块504、510、512中的一或多者的片块基础来实施。
同步流是包括硬件流控制器及一组一或多个硬件计算元件之间的有序同步数据路径的可重新配置计算组构中的硬件布置。同步流可执行一或多个工作线程。为了执行线程,同步流的硬件组件传递同步消息且按同步流的顺序执行一组预定操作。
同步流的流控制器通过将第一同步消息提供到同步流的第一计算元件来启动同步流处的线程。第一同步消息包含数据(例如,用于由计算元件处理的数据)且还可包含向计算元件提供各种旗标以及其它配置及/或指令数据的控制信息。第一计算元件经编程以例如基于由第一同步消息提供的数据而执行一或多个操作。第一计算元件产生也可包含数据及控制信息的第二同步消息。例如,第二同步消息可描述由第一计算元件执行的一或多个操作的结果。
第一计算元件根据同步流的顺序将第二同步消息提供到下一计算元件。同步流的下一计算元件可为可重新配置计算组构的另一计算元件,但在一些实例中,单个计算元件可执行同步流的连贯操作,这意味着在一些布置中,同步流的计算元件可将同步消息引导到其本身。下一计算元件经编程以执行一或多个操作,所述操作可包含准备第三同步消息及将第三同步消息发送到后续计算元件。
线程在同步流的所有计算元件已按同步流的预定顺序完成它们的经编程操作时完成。当线程已完成时,同步消息的流水线将在流控制器处开始按同步流的预定顺序在各种计算元件之间传播。因为所述布置是同步的,所以线程的完成可在固定的时间量(例如,从流控制器启动同步流起的可预测数目个时钟周期)内发生。
包含同步流的HTF的布置可促进并行处理。例如,用于同步流的流控制器不需要在启动额外线程之前等待一个线程完成。考虑包含流控制器及多个计算元件的实例同步流。流控制器通过将同步消息提供到同步流的第一计算元件来启动第一线程。第一计算元件执行其处理且将第二同步消息引导到下一计算元件,以此类推。在第一计算元件完成其处理且将同步消息引导到下一计算元件之后,流控制器可例如通过将额外同步消息提供到第一计算元件来启动同步流处的额外线程。
可通过利用以预定义节奏或辐条计数操作的计算元件(例如本文中所描述的各种片块)来获得同步流在可重新配置计算组构处的额外并行化。例如,计算元件可使用预定数个时钟周期来执行各种操作,例如接收同步消息、执行处理操作、发送同步消息等。计算元件可经配置以接收新同步消息且在来自先前线程的操作仍在传播通过计算元件时开始一个线程的操作。新线程可为先前线程的相同同步流的不同线程或可为不同同步流的线程。
同步流可使用可重新配置计算组构的异步结构以使用异步消息与可重新配置计算组构的其它同步流及/或其它组件进行通信。例如,流控制器可从分派接口及/或从另一流控制器接收指示流控制器开始同步流处的线程的异步消息。分派接口可在可重新配置计算组构与其它系统组件之间进行对接。而且,在一些实例中,同步流可将用以指示线程完成的异步消息发送到分派接口。
异步消息还可被各种同步流用来存取存储器。例如,可重新配置计算组构可包含一或多个存储器接口。存储器接口是被同步流或其组件用来存取不是同步流的部分的外部存储器的硬件组件。在同步流处执行的线程可包含将读取及/或写入请求发送到存储器接口。因为读取及写入是异步的,所以向存储器接口启动读取或写入请求的线程可能不会接收到请求的结果。代替地,读取或写入请求的结果可被提供到在不同同步流处执行的不同线程。
考虑布置有用于启动读取请求的第一同步流及用于接收读取请求的结果的第二同步流的实例可重新配置计算组构。第一同步流处的第一线程将异步读取请求消息发送到存储器接口。第一线程还可将异步继续型消息发送到第二同步流的流控制器,其中所述继续消息指示读取请求。存储器接口从存储器获取经请求数据且将读取数据引导到第二同步流的适当计算元件。计算元件接着将指示数据已被接收的异步消息引导到第二流控制器。(在一些实例中,存储器接口将读取数据直接提供提供到第二流控制器。)在接收到读取数据已被接收的指示之后,第二流控制器启动第二同步流处的线程以进一步处理读取请求的结果。
近存储器计算系统或者近存储器计算系统的节点或组件可包含或使用各种存储器装置、控制器及互连件等等。在实例中,所述系统可包括各种互连节点,且所述节点或节点群组可使用小芯片来实施。小芯片是一种用于集成各种处理功能性的新兴技术。通常,小芯片系统由集成在中介层上且封装在一起的离散芯片(例如,不同衬底或裸片上的集成电路(IC))组成。这种布置不同于在一个衬底(例如,单个裸片)上含有不同装置块(例如,知识产权(IP)块)的单个芯片(例如,IC)(例如芯片上系统(SoC))或集成在板上的离散封装装置。一般来说,小芯片提供优于单裸片芯片的生产效益,包含更高的良率或降低的开发成本。下文所论述的图6A及图6B大体上说明例如可包括近存储器计算系统的小芯片系统的实例。
可重新配置计算组构通常被用来执行矩阵运算,例如矩阵向量乘法或矩阵乘法。矩阵运算可能非常适用于在可重新配置计算组构中执行,因为大多数矩阵运算可并行执行。例如,矩阵向量乘法可被分成分块,其中每一分块可独立地并行执行。其它矩阵运算(例如矩阵乘法)可通过执行多个矩阵向量乘法运算来执行。而且,许多常见编程问题(例如数据库页面之间的联合)可利用矩阵运算来解决。
然而,用于解决编程问题的矩阵运算通常涉及稀疏矩阵。稀疏矩阵是具有很少的非零元素的矩阵。对稀疏矩阵执行矩阵运算可能造成低效。例如,因为稀疏矩阵包含很少的非零元素,所以用来存储所述矩阵的计算机存储器处的大多数位置将具有值零,从而导致浪费的存储器位置。而且,当对稀疏矩阵执行矩阵运算时,大多数构成计算简单地乘以零,从而导致浪费的处理器操作。
为了说明,考虑下面的实例6×5矩阵[1]:
矩阵[1]
0 | 7 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 3 |
0 | 0 | 5 | 0 | 10 |
0 | 0 | 0 | 0 | 0 |
9 | 0 | 0 | 0 | 3 |
0 | 0 | 8 | 0 | 0 |
实例矩阵[1]总共包含30个元素,其中仅7个是非零。因此,如果实例矩阵[1]将被存储在存储器处,那么用于存储所述矩阵的30个存储器位置中的23个将存储零。而且,考虑下面的实例矩阵[1]与实例5×1向量[2]之间的实例矩阵向量乘法:
[2]
1 |
5 |
8 |
3 |
6 |
矩阵向量乘法的结果是6×1向量,其中例如结果向量的每一元素是对应矩阵行元素向量元素的乘积的和,如由下面的结果向量[3]所给出:
结果向量[3]
如从实例结果向量[3]可看出,在经执行以实施矩阵向量乘法的30次乘法运算中,有23次乘以零。涉及更大向量及矩阵的运算可能导致甚至更高程度的低效存储器使用及低效的乘零运算。
一种解决由稀疏矩阵引起的这些问题的方式是以经编码形式(例如以坐标数据结构)表达稀疏矩阵。坐标数据结构包含对应于对应稀疏矩阵的非零元素的元素。坐标数据结构元素包含稀疏矩阵的行号、列号、行号及列号处的非零值。表示实例矩阵[1]的实例坐标数据结构在由下面的COO[4]给出:
COO[4]
1,2,7 | 2,5,3 | 3,3,5 | 3,5,10 | 5,1,9 | 5,5,3 | 6,3,8 |
在实例COO[4]中,矩阵[1]中的每一非零项由行号、列号及值来表示。例如,在矩阵[1]中,行1列2处的值是7。行2列5处的元素值是3,以此类推。
使用经编码形式(例如坐标数据结构)来表示稀疏矩阵可减少存储所述矩阵所需的存储器及用以寻找矩阵矢量积的操作。例如,尽管实例矩阵[1]包含将被存储在存储器处的30个元素,但COO[4]仅包含21个元素(7个行号、7个列号及7个值)。对于更大的稀疏矩阵及具有更低的非零元素与零元素比率的稀疏矩阵,存储器节省可能甚至更大。
尽管将经编码形式用于矩阵可减少存储器使用及处理器操作,但其也可能使并行执行操作更加困难。再次考虑上面的矩阵[1]与向量[2]的实例矩阵向量乘法,其中矩阵[1]以所展示形式存储。可重新配置计算组构或其它合适处理架构可并行执行用于确定结果向量[3]的元素的乘法及求和运算。如由结果向量[3]所展示,确定每一元素涉及执行预定次数的乘法运算及对所述乘法运算的结果求和。现在考虑用以在实例矩阵[1]以COO[4]的格式表示时获得相同结果的操作,如由结果向量[5]所给出:
结果向量[5]
结果向量[5]等效于结果向量[3],但是通过执行7次乘法运算及2次加法运算来获得的而非执行30次乘法运算及20次加法运算以获得结果向量[3]。然而,如由结果向量[5]所展示,次数减少的乘法及加法运算无法容易地并行化。
各种实例通过利用聚集加载及分散写入操作以在可重新配置计算组构中实施矩阵向量乘法来解决这些及其它问题。计算元件可包括用于并行执行操作的多个并行处理通道。在一些实例中,并行处理通道是单指令多数据(SIMD)通道,其中每一通道经布置以对不同数据同时执行单个指令(例如,乘法)。计算元件可包括用来存储各种值(例如包含如本文中所描述的输入矩阵、输入向量、结果向量及/或各种中间值的坐标表示的坐标数据结构)的计算元件存储器。计算元件存储器可支持分散/聚集输入/输出(I/O),其有时也被称为向量I/O。根据分散/聚集I/O,计算元件可执行从计算元件存储器处的非连续存储器位置加载值的聚集加载。计算元件存储器还可支持将数据写入到计算元件存储器处的非连续存储器位置的分散写入。
矩阵向量乘法可包含从坐标数据结构加载对应于并行处理通道的数目的数个元素。如上文利用实例坐标数据结构COO[4]所展示,从坐标数据结构加载的每一元素可包含输入矩阵的行、输入矩阵的列以及输入矩阵在所指示行及列处的(非零)值。计算元件可使用聚集加载来加载待与坐标数据结构元素相乘的输入向量元素。所加载输入向量元素可取决于由坐标数据结构元素指示的输入矩阵列。因此,聚集加载可返回如由经加载坐标数据结构元素的输入矩阵列指示的特定的非连续值,而非从输入矩阵请求值块。
当数据被加载时,计算元件使用并行处理通道来并行执行乘法运算。乘法运算的结果被写入到计算元件存储器以更新并行处理通道与输入矩阵的所考虑行的每一组合的部分累加值。部分累加值可通过并行处理通道及行存储在计算元件存储器中。因此,更新部分累加值可包含使用各种乘法运算的结果来更新计算元件存储器中的非连续位置处的值的分散写入操作。接着,加载另一批坐标数据结构元素及对应输入向量元素。使用经加载数据来执行另一轮并行乘法运算且再次更新行及并行处理通道累加值。这一直持续到所有坐标数据结构元素均被处理(或输入矩阵的给定数目个行的所有坐标数据结构元素均被处理)。接着,跨所有并行处理通道对每一行的部分累加值归约或求和。结果是输出向量。
为了进一步说明,考虑具有执行由矩阵[1]、输入向量[2]及COO[4]给出的实例矩阵向量乘法的三个并行处理通道的实例计算元件。计算元件最初将从COO[4]加载三个元素:(1,2,7)、(2,5,3)及(3,3,5)。为了对这些元素执行乘法,计算元件将执行聚集加载以从计算元件存储器检索输入向量[2]的相关元素。例如,对于COO元素(1,2,7),计算元件将加载输入向量[2]的第2行元素,所述元素在这个实例中是(5)。对于COO元素(2,5,3),计算元件将加载输入向量[2]的第5行元素,所述元素在这个实例中是(6)。对于COO元素(3,3,5),计算元件将加载输入向量[2]的第3行元素,所述元素在这个实例中是(8)。因此,计算元件执行从计算元件存储器进行的返回输入向量[2]的第2行、第5行及第3行元素的单个聚集加载。
在数据被加载之后,三个并行处理通道并行执行三个乘法运算。例如,第一并行处理通道可执行第一乘法运算:(5*7)。第二并行处理通道可执行第二乘法运算:(6*3)。第三并行处理通道可执行第三乘法运算:(8*5)。乘法运算的结果被用来更新计算元件存储器处的相应部分累加值。计算元件存储器中的部分累加值的实例布置由表[6]给出。
表[6]
通道1 | 通道2 | 通道3 | |
行1 | 35 | 0 | 0 |
行2 | 0 | 18 | 0 |
行3 | 0 | 0 | 40 |
行4 | 0 | 0 | 0 |
行5 | 0 | 0 | 0 |
行6 | 0 | 0 | 0 |
如表[6]中所展示,每一并行处理通道(通道1、通道2、通道3)具有对应于输入矩阵的每一行(行1、行2等等)的部分累加值。在这个实例中,第一并行处理通道执行对应于输入矩阵的第一行的乘法运算(5*7),因此对应于通道1及行1的部分累加值被更新为35。第二并行处理通道执行对应于输入矩阵的第二行的乘法运算(6*3),因此对应于通道2及行2的部分累加值被更新为18。第三并行处理通道执行对应于输入矩阵的第三行的乘法运算(8*5),因此对应于通道3及行3的部分累加值被更新为40。因为各种经更新部分累加值的位置不需要连续,所以分散写入可被用来执行更新。
接下来,计算元件加载对应于下三个COO元素的值:(3,5,10)、(5,1,9)及(5,5,3)。计算元件还加载对应输入向量值。对于COO元素(3,5,10),计算元件将加载输入向量[2]的第5行元素,所述元素在这个实例中是(6)。对于COO元素(5,1,9),计算元件将加载输入向量[2]的第1行元素,所述元素在这个实例中是(1)。对于COO元素(5,5,3),计算元件将加载输入向量[2]的第5行元素,所述元素在这个实例中是(6)。从输入向量的加载可利用如本文中所描述的聚集加载来执行。
三个并行处理通道被用来执行乘法运算,其中第一并行处理通道执行(6*10),第二并行处理通道执行(1*9),且第三并行处理通道执行(6*3)。对各种部分累加值的更新由下表[7]展示:
表[7]
通道1 | 通道2 | 通道3 | |
行1 | 35 | 0 | 0 |
行2 | 0 | 18 | 0 |
行3 | 60 | 0 | 40 |
行4 | 0 | 0 | 0 |
行5 | 0 | 9 | 18 |
行6 | 0 | 0 | 0 |
如所展示,对应于通道1及行3的部分累加值被更新为60。对应于通道2及行5的部分累加值被更新为9。而且,对应于通道3及行5的部分累加值被更新为18。
在这个实例中,单个COO元素保持为(6,3,8)。计算元件可从输入向量(8)加载这个COO元素及对应第3行元素。剩余乘法运算可由第一并行处理通道来执行。可相应地更新对应于通道1及行6的部分累加值以产生下表8的布置:
表[8]
通道1 | 通道2 | 通道3 | |
行1 | 35 | 0 | 0 |
行2 | 0 | 18 | 0 |
行3 | 60 | 0 | 40 |
行4 | 0 | 0 | 0 |
行5 | 0 | 9 | 18 |
行6 | 64 | 0 | 0 |
为了执行归约,计算元件跨所有并行处理通道对每一行的部分累加值求和以产生结果向量[9]:
结果向量[9]
35 |
18 |
60+40=100 |
0 |
9+18=27 |
64 |
如所展示,结果向量[9]等效于结果向量[5]及结果向量[3],但与结果向量[5]不同,结果向量[9]是使用并行处理来获得的而没有结果向量[3]的存储器及处理低效。
图1大体上说明近存储器计算系统或CNM系统102的第一实例。CNM系统102的实例包含例如可各自包含各种近存储器计算装置的多个不同存储器计算节点。所述系统中的每一节点可在其自身操作系统(OS)域(例如,Linux等等)中操作。在实例中,所述节点可共同存在于CNM系统102的共同OS域中。
图1的实例包含CNM系统102的第一存储器计算节点104的实例。CNM系统102可具有使用缩放组构106耦合的多个节点,例如包含第一存储器计算节点104的不同例子。在实例中,CNM系统102的架构可支持使用缩放组构106按比例放大到n个不同存储器计算节点(例如,n=4096)。如下文进一步论述,CNM系统102中的每一节点可为多个装置的组合件。
CNM系统102可包含用于所述系统中的各种节点的全局控制器,或所述系统中的特定存储器计算节点可任选地充当同一系统中的一或多个其它存储器计算节点的主机或控制器。因此,可类似地或不同地配置CNM系统102中的各种节点。
在实例中,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格式之间转换分组格式,等等。
本文中描述呈各种实例配置的CNM系统102,例如包括节点的系统,且每一节点可包括各种芯片(例如,处理器、交换机、存储器装置等)。在实例中,CNM系统102中的第一存储器计算节点104可包含使用小芯片实施的各种芯片。在CNM系统102的下述基于小芯片的配置中,小芯片间通信以及所述系统内的额外通信可使用CPI网络。本文中所描述的CPI网络是CTCPI的实例,即,作为CTCPI的小芯片特定实施方案。因此,CPI的下述结构、操作及功能性可同样适用于如可使用非基于小芯片的CTCPI实施方案实施的结构、操作及功能。除非另有明确地指示,否则本文中对CPI的任何论述同样适用于CTCPI。
CPI接口包含支持虚拟信道以实现小芯片之间的灵活及高速交互的基于分组的网络,例如可包括第一存储器计算节点104或CNM系统102的部分。CPI可实现从小芯片内网络到更广泛小芯片网络的桥接。例如,高级可扩展接口(AXI)是一种用于芯片内通信的规范。然而,AXI规范涵盖多种物理设计选项,例如物理信道的数目、信号时序、功率等。在单个芯片中,通常选择这些选项来满足设计目标,例如功耗、速度等。然而,为了实现基于小芯片的存储器计算系统的灵活性,例如使用CPI的适配器可在能够在各种小芯片中实施的各种AXI设计选项之间进行对接。通过实现物理信道到虚拟信道的映射以及用分组化协议封装基于时间的信令,CPI可被用来例如在特定存储器计算节点内跨更广泛小芯片网络(例如跨第一存储器计算节点104或跨CNM系统102)桥接小芯片内网络。
CNM系统102可缩放以包含多节点配置。即,第一存储器计算节点104或其它以不同方式配置的存储器计算节点的多个不同例子可使用缩放组构106来耦合,以提供经缩放系统。所述存储器计算节点中的每一者可运行其自身操作系统且可经配置以联合协调全系统的资源使用。
在图1的实例中,第一存储器计算节点104的第一交换机110耦合到缩放组构106。缩放组构106可提供可促进不同存储器计算节点当中及之间的通信的交换机(例如,CTCPI交换机、PCIe交换机、CPI交换机或其它交换机)。在实例中,缩放组构106可帮助各种节点在分区全局地址空间(PGAS)中进行通信。
在实例中,来自第一存储器计算节点104的第一交换机110耦合到一个或多个不同存储器计算装置,例如包含第一存储器计算装置112。第一存储器计算装置112可包括本文中被称为近存储器计算(CNM)小芯片的基于小芯片的架构。第一存储器计算装置112的封装版本可包含例如一个或多个CNM小芯片。为了高带宽及低延时,所述小芯片可使用CTCPI通信地耦合。
在图1的实例中,第一存储器计算装置112可包含芯片上网络(NOC)或第一NOC118。通常,NOC是装置内的互连网络,其连接一组特定端点。在图1中,第一NOC 118可提供第一存储器计算装置112的各种存储器、计算资源与端口之间的通信及连接性。
在实例中,第一NOC 118可包括例如在存储器计算装置的每一例子内或作为耦合一节点中的多个存储器计算装置的网格的折叠式Clos拓扑。例如可使用多个较小基数的交叉开关来提供与较高基数的交叉开关拓扑相关联的功能性的Clos拓扑提供各种益处。例如,Clos拓扑可跨NOC展现一致的延时及对分带宽。
第一NOC 118可包含各种不同交换机类型,包含中心交换机、边缘交换机及端点交换机。所述交换机中的每一者可被构造为在输入与输出节点之间提供基本上均匀的延时及带宽的交叉开关。在实例中,端点交换机及边缘交换机可包含两个单独交叉开关,一个用于去往中心交换机的业务而另一个用于远离中心交换机的业务。中心交换机可被构造为将所有输入交换到所有输出的单个交叉开关。
在实例中,所述中心交换机可例如取决于特定集线器交换机是否参与芯片间通信而各自具有多个端口(例如,各自四个或六个端口)。参与芯片间通信的中心交换机的数目可根据芯片间带宽要求来设置。
第一NOC 118可支持计算元件与存储器之间的各种有效负载(例如,从8到64字节有效负载;可类似地使用其它有效负载大小)。在实例中,第一NOC 118可针对相对较小的有效负载(例如,8到16字节)进行优化以高效地处置对稀疏数据结构的存取。
在实例中,第一NOC 118可经由第一物理层接口114、PCIe从属模块116或端点及PCIe主导模块126或根端口耦合到外部主机。即,第一物理层接口114可包含用以允许外部主机处理器耦合到第一存储器计算装置112的接口。外部主机处理器可任选地例如使用PCIe交换机或其它本机协议交换机耦合到一个或多个不同存储器计算装置。通过基于PCIe的交换机与外部主机处理器通信可能将装置到装置通信限于由所述交换机支持的通信。相比之下,例如使用CTCPI通过存储器计算装置-本机协议交换机的通信可允许不同存储器计算装置之间或当中的更充分通信,包含对例如用于创建工作线程及发送事件的分区全局地址空间的支持。
在实例中,CTCPI协议可由第一存储器计算装置112中的第一NOC 118使用,且第一交换机110可包含CTCPI交换机。CTCPI交换机可允许将CTCPI分组从源存储器计算装置(例如第一存储器计算装置112)传送到不同目的地存储器计算装置(例如,在同一节点或其它节点上),例如而无需转换为另一分组格式。
在实例中,第一存储器计算装置112可包含内部主机处理器122。内部主机处理器122可经配置以例如使用内部PCIe主导模块126与第一NOC 118或第一存储器计算装置112的其它组件或模块进行通信,这可帮助消除将消耗时间及能量的物理层。在实例中,内部主机处理器122可基于RISC-V ISA处理器,且可使用第一物理层接口114以在第一存储器计算装置112外部进行通信,例如与第一存储器计算装置112的其它存储装置、联网装置或其它外围装置进行通信。内部主机处理器122可控制第一存储器计算装置112且可充当操作系统相关功能性的代理。内部主机处理器122可包含相对少量的处理核心(例如,2到4个核心)及主机存储器装置124(例如,包括DRAM模块)。
在实例中,内部主机处理器122可包含PCI根端口。当内部主机处理器122在使用中时,其根端口中的一者接着可连接到PCIe从属模块116。内部主机处理器122的根端口中的另一者可连接到第一物理层接口114,例如以提供与外部PCI外围装置的通信。当内部主机处理器122被停用时,接着可将PCIe从属模块116耦合到第一物理层接口114以允许外部主机处理器与第一NOC 118进行通信。在具有多个存储器计算装置的系统的实例中,第一存储器计算装置112可经配置以充当系统主机或控制器。在这个实例中,内部主机处理器122可在使用中,且相应的其它存储器计算装置中的内部主机处理器的其它例子可被停用。
可在第一存储器计算装置112通电时配置内部主机处理器122,例如以允许主机初始化。在实例中,内部主机处理器122及其相关联数据路径(例如,包含第一物理层接口114、PCIe从属模块116等)可从输入引脚配置到第一存储器计算装置112。所述引脚中的一或多者可被用来启用或停用内部主机处理器122且相应地配置PCI(或其它)数据路径。
在实例中,第一NOC 118可经由缩放组构接口模块136及第二物理层接口138连接到缩放组构106。缩放组构接口模块136或SIF可促进第一存储器计算装置112与装置空间(例如分区全局地址空间(PGAS))之间的通信。PGAS可经配置使得特定存储器计算装置(例如第一存储器计算装置112)可例如使用加载/存储范例存取不同存储器计算装置上(例如,同一节点或不同节点上)的存储器或其它资源。可使用各种可缩放组构技术,包含CTCPI、CPI、Gen-Z、PCI或通过CXL桥接的以太网。缩放组构106可经配置以支持各种分组格式。在实例中,缩放组构106支持无序分组通信或支持有序分组,例如可使用路径识别符以跨多个等效路径展开带宽。缩放组构106通常可支持远程操作,例如远程存储器读取、写入及其它内置原子、远程存储器原子、远程存储器计算装置发送事件以及远程存储器计算装置调用及返回操作。
在实例中,第一NOC 118可耦合到一个或多个不同存储器模块,例如包含第一存储器装置128。第一存储器装置128可包含各种种类的存储器装置,例如LPDDR5或GDDR6等等。在图1的实例中,第一NOC 118可经由可专用于特定存储器模块的存储器控制器130协调与第一存储器装置128的通信。在实例中,存储器控制器130可包含存储器模块高速缓存及原子操作模块。原子操作模块可经配置以提供相对高处理量的原子运算符,例如包含整数及浮点运算符。原子操作模块可经配置以将其运算符应用于存储器模块高速缓存(例如,包括SRAM存储器侧高速缓存)内的数据,由此允许使用同一存储器位置以最小的处理量下降进行背靠背原子操作。
存储器模块高速缓存可为频繁存取的存储器位置提供存储,例如而无须重新存取第一存储器装置128。在实例中,存储器模块高速缓存可经配置以仅高速缓存存储器控制器130的特定例子的数据。在实例中,存储器控制器130包含经配置以与第一存储器装置128(例如包含DRAM装置)对接的DRAM控制器。存储器控制器130可提供存取调度及位错误管理,以及其它功能。
在实例中,第一NOC 118可耦合到混合线程处理器(HTP 140)、混合线程组构(HTF142)以及主机接口及分派模块(HIF 120)。HIF 120可经配置以促进存取基于主机的命令请求队列及响应队列。在实例中,HIF 120可分派在HTP 140或HTF 142的处理器或计算元件上执行的新线程。在实例中,HIF 120可经配置以维持跨HTP 140模块及HTF 142模块的工作负载平衡。
混合线程处理器或HTP 140可包含例如可基于RISC-V指令集的加速器。HTP 140可包含高度线程化的事件驱动处理器,其中线程可在单指令旋转中执行,例如以维持高指令处理量。HTP 140包括相对较少的定制指令以支持低开销线程能力、事件发送/接收及共享存储器原子运算符。
混合线程组构或HTF 142可包含加速器,例如可包含非冯·诺依曼、粗粒度的可重新配置处理器。HTF 142可针对高级语言操作及数据类型(例如,整数或浮点)进行优化。在实例中,HTF 142可支持数据流计算。HTF 142可经配置以例如当执行受存储器限制的计算内核时,使用第一存储器计算装置112上可用的基本上全部存储器带宽。
CNM系统102的HTP及HTF加速器可使用各种高级的结构化编程语言来编程。例如,HTP及HTF加速器可使用C/C++编程(例如使用LLVM编译器框架)来编程。HTP加速器可利用例如具有经配置以改进存储器存取效率、提供消息传递机制及管理事件以及其它事项的各种添加的定制指令集的开源编译器环境。在实例中,HTF加速器可经设计以实现使用高级编程语言对HTF 142进行编程,且编译器可产生在HTF 142硬件上运行的模拟器配置文件或二进制文件。HTF 142可提供用于精确及简明地表达算法,同时隐藏HTF加速器本身的配置细节的中级语言。在实例中,HTF加速器工具链可使用LLVM前端编译器及LLVM中间表示(IR)以与HTF加速器后端对接。
图2大体上说明根据实施例的存储器计算装置的存储器子系统200的实例。存储器子系统200的实例包含控制器202、可编程原子单元208及第二NOC 206。控制器202可包含或使用可编程原子单元208以使用存储器装置204中的信息实行操作。在实例中,存储器子系统200包括来自图1的实例的第一存储器计算装置112的一部分,例如包含第一NOC 118或存储器控制器130的部分。
在图2的实例中,第二NOC 206耦合到控制器202,且控制器202可包含存储器控制模块210、本地高速缓存模块212及内置原子模块214。在实例中,内置原子模块214可经配置以处置相对简单、单循环的整数原子。内置原子模块214可以与例如正常存储器读取或写入操作相同的处理量执行原子。在实例中,原子存储器操作可包含将数据存储到存储器、执行原子存储器操作且接着用来自存储器的加载数据进行响应的组合。
可提供本地高速缓存模块212(例如可包含SRAM高速缓存)以帮助减少重复存取的存储位置的延时。在实例中,本地高速缓存模块212可为子存储器行存取提供读取缓冲区。本地高速缓存模块212对于具有相对小数据高速缓存或没有数据高速缓存的计算元件特别有益。
存储器控制模块210(例如可包含DRAM控制器)可提供低级请求缓冲及调度,例如以提供对存储器装置204(例如可包含DRAM装置)的高效存取。在实例中,存储器装置204可包含或使用例如具有16Gb密度及64Gb/sec峰值带宽的GDDR6 DRAM装置。可类似地使用其它装置。
在实例中,可编程原子单元208可包含例如可经配置以执行整数加法或更复杂的多指令操作(例如布隆过滤器插入)的单循环或多循环运算符。在实例中,可编程原子单元208可经配置以执行加载及存储到存储器操作。可编程原子单元208可经配置以利用具有一组专用指令的RISC-V ISA来促进与控制器202的交互以原子地执行用户定义的操作。
例如从节点上或节点外主机接收的可编程原子请求可经由第二NOC 206及控制器202路由到可编程原子单元208。在实例中,(例如,由可编程原子单元208实行的)定制原子操作可与(例如,由内置原子模块214实行的)内置原子操作相同,区别仅在于编程原子操作可由用户而不是系统架构师来定义或编程。在实例中,可编程原子请求分组可通过第二NOC206发送到控制器202,且控制器202可将所述请求识别为定制原子。控制器202接着可将经识别请求转发到可编程原子单元208。
图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的实例。
在实例中,PAU核心306是流水线处理器使得每时钟周期一起执行不同指令的多个阶段。PAU核心306可包含桶形多线程处理器,其中线程控制件304电路系统在每一时钟周期时在不同寄存器堆(例如,含有当前处理状态的寄存器组)之间切换。这实现当前执行的线程之间进行高效上下文切换。在实例中,PAU核心306支持八个线程,从而导致八个寄存器堆。在实例中,一些或所有寄存器堆未集成到PAU核心306中,而是驻留在本地数据高速缓存310或指令SRAM 308中。这通过消除用于此类存储器中的寄存器的传统触发器来降低PAU核心306中的电路复杂性。
本地PAU存储器可包含例如可包含用于各种原子的指令的指令SRAM 308。所述指令包括用以支持各种应用程序加载的原子运算符的若干组指令。当例如由应用小芯片请求原子运算符时,由PAU核心306执行对应于原子运算符的一组指令。在实例中,指令SRAM 308可经分区以建立若干组指令。在这个实例中,由请求进程所请求的特定可编程原子运算符可通过分区号来识别可编程原子运算符。分区号可在向可编程原子单元302注册可编程原子运算符(例如,将可编程原子运算符加载到可编程原子单元302中)时建立。可编程指令的其它元数据可被存储在可编程原子单元302本地的存储器中的存储器中(例如,在分区表中)。
在实例中,原子运算符操纵数据高速缓存310,所述数据高速缓存通常在原子运算符的线程完成时同步(例如,刷新)。因此,除从外部存储器(例如从存储器控制器314)进行初始加载以外,可在可编程原子运算符线程的执行期间减少大多数存储器操作的延时。
当执行线程试图发出存储器请求时,如果潜在危险条件会阻止此请求,那么流水线处理器(例如PAU核心306)可能会遇到问题。在此,存储器请求是从存储器控制器314检索数据,无论其是来自存储器控制器314上的高速缓存还是裸片外存储器。为了解决这个问题,PAU核心306经配置以拒绝对线程的存储器请求。通常,PAU核心306或线程控制件304可包含用以启用流水线中的一或多个线程重新调度点的电路系统。在此,拒绝发生在流水线中的位于这些线程重新调度之外(例如,之后)的点处。在实例中,危险发生在所述重新调度点之外。在此,在存储器请求指令通过其中可进行存储器请求的流水线阶段之前的最后线程重新调度点之后,线程中的前一指令产生危险。
在实例中,为了拒绝存储器请求,PAU核心306经配置以确定(例如,检测)在存储器请求中指示的存储器上存在危险。在此,危险表示使得允许(例如,执行)存储器请求将导致线程的不一致状态的任何状况。在实例中,危险是飞行中的存储器请求。在此,无论数据高速缓存310是否包含所请求存储器地址的数据,飞行中的存储器请求的存在都使得数据高速缓存310中的位于那个地址处的数据应是什么不确定。因此,线程必须等待飞行中的存储器请求完成以对当前数据进行操作。当存储器请求完成时,危险被清除。
在实例中,危险是数据高速缓存310中的用于所请求存储器地址的脏高速缓存行。尽管脏高速缓存行通常指示高速缓存中的数据是当前的且这个数据的存储器控制器版本不是当前的,但在不从高速缓存操作的线程指令上可能出现问题。此指令的实例使用存储器控制器314的内置原子运算符或其它单独硬件块。在存储器控制器的背景下,内置原子运算符可与可编程原子单元302分离且不能存取PAU内部的高速缓存或数据高速缓存310。如果高速缓存行是脏的,那么内置原子运算符将不会对最新近数据进行操作,直到高速缓存经刷新以同步化高速缓存与其它存储器或裸片外存储器为止。这种相同情况可能发生在存储器控制器的其它硬件块(例如密码块、编码器等)上。
图4说明混合线程处理器(HTP)加速器或HTP加速器400的实例。根据实施例,HTP加速器400可包括存储器计算装置的一部分。在实例中,HTP加速器400可包含或包括来自图1的实例的HTP 140。HTP加速器400包含例如HTP核心402、指令高速缓存404、数据高速缓存406、转译块408、存储器接口410及线程控制器412。HTP加速器400可进一步包含例如分派接口414及用于与NOC(例如来自图1的实例的第一NOC 118、来自图2的实例的第二NOC 206或其它NOC)对接的NOC接口416。
在实例中,HTP加速器400包含基于RISC-V指令集的模块且可包含相对少量的其它或额外定制指令以支持低开销、具备线程能力的混合线程(HT)语言。HTP加速器400可包含高线程处理器核心(HTP核心402),在所述核心中或利用所述核心,线程可在单个指令旋转中执行,例如以维持高指令处理量。在实例中,线程可在其等待其它未决事件完成时被暂停。这可允许计算资源高效地用于相关工作而非轮询上。在实例中,多线程屏障同步可使用高效的HTP到HTP及HTP往/返主机的消息传递,例如可允许数千个线程在例如几十个时钟周期内初始化或唤醒。
在实例中,分派接口414可包括用于处置基于硬件的线程管理的HTP加速器400的功能块。即,分派接口414可管理将工作分派给HTP核心402或其它加速器。然而,非HTP加速器通常不能分派工作。在实例中,从主机分派的工作可使用驻留在例如主机主存储器(例如,基于DRAM的存储器)中的分派队列。另一方面,从HTP加速器400分派的工作可使用驻留在SRAM中的分派队列,例如在对特定节点内的目标HTP加速器400的分派中。
在实例中,HTP核心402可包括代表线程执行指令的一或多个核心。即,HTP核心402可包含指令处理块。HTP核心402可进一步包含或可耦合到线程控制器412。线程控制器412可为HTP核心402内的每一活动线程提供线程控制及状态。数据高速缓存406可包含用于主机处理器(例如,用于本地及远程存储器计算装置,包含用于HTP核心402)的高速缓存,且指令高速缓存404可包含用于由HTP核心402使用的高速缓存。在实例中,数据高速缓存406可经配置用于读取及写入操作,且指令高速缓存404可经配置用于只读操作。
在实例中,数据高速缓存406是每硬件线程提供的小型高速缓存。数据高速缓存406可暂时存储由拥有线程使用的数据。数据高速缓存406可由HTP加速器400中的硬件或软件来管理。例如,在由HTP核心402执行加载及存储操作时,硬件可经配置以根据需要自动地分配或逐出行。例如使用RISC-V指令的软件可确定哪些存储器存取应被高速缓存及何时应使行无效或将其写回到其它存储器位置。
HTP加速器400上的数据高速缓存具有各种益处,包含使较大存取对存储器控制器更高效、允许执行线程避免停止。然而,存在使用高速缓存会引起低效的情况。实例包含其中数据仅被存取一次且致使高速缓存行颠簸的存取。为了帮助解决这个问题,HTP加速器400可使用一组定制加载指令来强制加载指令检查高速缓存命中且在高速缓存未命中时,发出对所请求操作数的存储器请求且不将所获得数据放入数据高速缓存406中。因此,HTP加速器400包含各种不同类型的加载指令,包含非高速缓存及高速缓存行加载。如果在高速缓存中存在脏数据,那么非高速缓存加载指令将使用高速缓存数据。非高速缓存加载指令忽略高速缓存中的干净数据且不将经存取数据写入到数据高速缓存。对于高速缓存行加载指令,完整的数据高速缓存行(例如,包括64个字节)可从存储器加载到数据高速缓存406中且可将所寻址存储器加载到所指定寄存器中。如果干净或脏数据在数据高速缓存406中,那么这些加载可使用高速缓存数据。如果所引用存储器位置不在数据高速缓存406中,那么可从存储器存取整个高速缓存行。使用高速缓存行加载指令可在正引用循序存储器位置(例如存储器复制操作)时减少高速缓存未命中,但如果不使用所引用存储器数据,那么也可能浪费NOC接口416处的存储器及带宽。
在实例中,HTP加速器400包含非高速缓存的定制存储指令。非高速缓存的存储指令可帮助避免因未被循序地写入到存储器的写入数据而使数据高速缓存406颠簸。
在实例中,HTP加速器400进一步包含转译块408。转译块408可包含用于存储器计算装置的本地存储器的虚拟到物理转译块。例如,主机处理器(例如HTP核心402)可执行加载或存储指令,且所述指令可产生虚拟地址。虚拟地址可例如使用来自转译块408的转译表被转译为主机处理器的物理地址。例如,存储器接口410可包含HTP核心402与NOC接口416之间的接口。
图5说明根据实施例的存储器计算装置的混合线程组构(HTP)或HTF 500的表示的实例。在实例中,HTF 500可包含或包括来自图1的实例的HTF 142。HTF 500是可针对高级语言操作数类型及运算符(例如,使用C/C++或其它高级语言)进行优化的粗粒度、可重新配置的计算组构。在实例中,HTF 500可包含互连强化SIMD运算单元的可配置、n位宽(例如,512位宽)的数据路径。
在实例中,HTF 500包括包含多个HTF片块(包含实例片块504或片块N)的HTF集群502。每一HTF片块可实施具有本地片块或计算元件存储器及算术功能的一或多个计算元件。例如,每一片块可包含支持整数及浮点运算的计算流水线。在实例中,数据路径、计算元件及其它基础结构可被实施为强化IP以提供最大性能,同时最小化功耗及重新配置时间。
在图5的实例中,包括HTF集群502的片块线性地经布置,且所述集群中的每一片块可耦合到HTF集群502中的一或多个其它片块。在图5的实例中,实例片块504或片块N耦合到四个其它片块,包含经由标记为SF IN N-2的端口耦合到片块510(例如,片块N-2)的片块基础、经由标记为SF IN N-1的端口耦合到邻近片块512(例如,片块N-1)及经由标记为SF INN+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及SFOUT N+2的输出端口)耦合到相同片块或其它片块。在这个实例中,各种片块的名称的有序列表是所述片块的位置的概念指示。在其它实例中,包括HTF集群502的片块可被布置成栅格或其它配置,其中每一片块类似地耦合到所述栅格中的其最近邻居中的一或若干者。设置在集群的边缘处的片块可任选地具有到邻近片块的较少连接。例如,片块N-2或图5的实例中的片块510的片块基础可仅耦合到邻近片块512(片块N-1)及实例片块504(片块N)。类似地,可使用更少或额外片块间连接。
HTF集群502可进一步包含存储器接口模块,包含第一存储器接口模块506。存储器接口模块可将HTF集群502耦合到NOC,例如第一NOC 118。在实例中,存储器接口模块可允许集群内的片块向存储器计算系统中(例如所述系统中的同一或不同节点中)的其它位置提出请求。即,HTF 500的表示可包括可跨多个节点分布的较大组构的一部分,例如在所述节点中的每一者处具有一或多个HTF片块或HTF集群。请求可在较大组构的背景下的片块或节点之间提出。
在图5的实例中,HTF集群502中的片块使用同步组构(SF)来耦合。同步组构可提供HTF集群502中的特定片块与其相邻片块之间的通信,如上文所描述。每一HTF集群502可进一步包含异步组构(AF),所述异步组构可提供例如所述集群中的片块、所述集群中的存储器接口与所述集群中的分派接口508当中的通信。
在实例中,同步组构可交换包含数据及控制信息的消息。控制信息可尤其包含指令RAM地址信息或线程识别符。控制信息可被用来设置数据路径,且可选择数据消息字段作为所述路径的源。通常,可更早地提供或接收控制字段,使得它们可被用来配置数据路径。例如,为了帮助最小化通过片块中的同步流流水线的任何延迟,控制信息可比数据字段早几个时钟周期到达片块。可提供各种寄存器来帮助协调流水线中的数据流时序。
在实例中,HTF集群502中的每一片块可包含一或多个片块存储器。每一片块存储器可具有与数据路径相同的宽度(例如,512个位)且可具有所指定深度,例如在512到1024个元件的范围内。片块存储器可被用来存储支持数据路径操作的数据。例如,经存储数据可包含作为内核的集群配置的部分加载的常数,或可包含作为数据流的部分计算的变量。在实例中,片块存储器可作为来自另一同步流的数据传送从异步组构写入,或可包含例如由另一同步流启动的加载操作的结果。片块存储器可经由同步流中的同步数据路径指令执行来读取。
在实例中,HTF集群502中的每一片块可具有专用指令RAM(INST RAM)。在具有16个片块的HTF集群502及具有64个条目的相应指令RAM例子的实例中,所述集群可允许用多达1024个乘法-移位及/或ALU运算来映射算法。各种片块可任选地例如使用同步组构流水线化在一起,以允许具有最少存储器存取的数据流计算,从而最小化延时且降低功耗。在实例中,异步组构可允许存储器引用与计算并行进行,由此提供更高效的流内核。在实例中,各种片块可包含对基于循环的结构的内置支持且可支持嵌套循环内核。
同步组构可允许多个片块(例如,其多个计算元件)被流水线化,例如而无需数据排队。例如,参与同步流的计算元件可充当单个流水线数据路径。用于同步流的流控制器可为或包含片块(例如,在图5的实例中是片块N-2)、片块上的计算元件及/或片块上的片块基础或控制器。同步流的流控制器可通过流水线片块启动工作线程。流控制器可负责以预定义节奏(在本文中被称为辐条计数)起始线程。例如,如果辐条计数是3,那么片块基础可每隔两个时钟周期启动线程。
在实例中,同步流包括HTF集群502中的一组所连接计算元件。线程的执行可从流控制器开始且可经由同步组构从流控制器前进到其它计算元件(例如,在同一同步流中的其它片块处)。流控制器可提供待对于第一片块执行的指令。在默认情况下,第一计算元件可提供相同指令以供其它所连接计算元件执行。然而,在一些实例中,流控制器或后续计算元件可实施有条件地指定或使用替代指令的条件操作。可通过使计算元件的数据路径产生布尔条件值来选择替代指令,且接着可使用所述布尔值以在当前计算元件的指令集与替代指令之间进行选择。
异步组构可被用来执行相对于同步流异步地发生的操作。HTF集群502中的每一片块可包含到异步组构的接口。入站接口可包含例如FIFO缓冲区或队列(例如,AF IN QUEUE)以为无法立即处理的消息提供存储。类似地,异步组构的出站接口可包含FIFO缓冲区或队列(例如,AF OUT QUEUE)以为无法立即发出的消息提供存储。
在实例中,异步组构中的消息可被分类为数据消息或控制消息。数据消息可包含写入到片块存储器0(MEM_0)或存储器1(MEM_1)的SIMD宽度数据值。控制消息可经配置以控制线程创建、释放资源或发出外部存储器引用。
HTF集群502中的片块可为HTF执行各种计算操作。所述计算操作可通过配置片块及/或其计算元件内的数据路径来执行。在实例中,片块包含为片块执行计算操作的两个功能块:乘法及移位运算块(MS OP)以及算术、逻辑及位运算块(ALB OP)。所述两个块可经配置以执行流水线操作,例如乘法及加法,或移位及加法等等。
在实例中,系统中的存储器计算装置的每一例子可具有用于其运算符块(例如,MSOP及ALB OP)的完整支持指令集。在这种情况下,可跨系统中的所有装置实现二进制兼容性。然而,在一些实例中,维持一组基础功能性及任选指令集类别是有帮助的,例如以满足各种设计折中,例如裸片大小。所述方法可与RISC-V指令集具有基础集及多个任选指令子集的方式类似。
在实例中,实例片块504可包含辐条RAM。辐条RAM可被用来指定哪个输入(例如,来自四个SF片块输入及片块基础输入当中)是每一时钟周期的主要输入。辐条RAM读取地址输入可源于从零计数到辐条计数减一的计数器。在实例中,可在不同片块(例如在同一HTF集群502内)上使用不同辐条计数,以允许由内循环用于确定特定应用程序或指令集的性能的数个切片或唯一片块例子。在实例中,辐条RAM可指定何时将同步输入写入到片块存储器,例如何时使用特定片块指令的多个输入及所述输入中的一者何时先于其它者到达。较早到达的输入可被写入到片块存储器且稍后可在所有输入都可用时被读取。在这个实例中,片块存储器可作为FIFO存储器来存取,且FIFO读取及写入指针可被存储在片块存储器中的基于寄存器的存储区或结构中。
图6A及图6B大体上说明可被用来实施CNM系统102的一或多个方面的小芯片系统的实例。如上文类似地提及,CNM系统102中的节点或CNM系统102中的节点内的装置可包含基于小芯片的架构或近存储器计算(CNM)小芯片。封装式存储器计算装置可包含例如一个、两个或四个CNM小芯片。所述小芯片可使用高带宽、低延时互连件(例如使用CPI接口)来互连。通常,小芯片系统由集成在中介层上且在许多实例中根据需要通过一或多个所建立网络互连以提供具有所期望功能性的系统的离散模块(各自为“小芯片”)组成。中介层及所包含小芯片可被封装在一起以促进与更大系统的其它组件互连。每一小芯片可包含潜在地与离散电路组件组合的一或多个个别集成电路(IC)或“芯片”,且可耦合到相应衬底以促进附接到中介层。系统中的大多数或所有小芯片可个别地经配置用于通过所建立网络进行通信。
将小芯片配置为系统的个别模块不同于在单个芯片上实施此系统,所述单个芯片含有一个衬底(例如,单个裸片)上的不同装置块(例如,知识产权(IP)块)(例如芯片上系统(SoC))或集成在印刷电路板(PCB)上的离散封装装置。一般来说,小芯片提供比离散封装装置更好的性能(例如,更低的功耗、减少的延时等),且小芯片提供比单裸片芯片更大的生产效益。这些生产效益可包含更高的良率或减少的开发成本及时间。
小芯片系统可包含例如一或多个应用(或处理器)小芯片及一或多个支持小芯片。在此,应用小芯片与支持小芯片之间的区别仅仅是对小芯片系统的可能设计场景的参考。因此,例如,仅举例来说,合成视觉小芯片系统可包含用以产生合成视觉输出的应用小芯片连同支持小芯片,例如存储器控制器小芯片、传感器接口小芯片或通信小芯片。在典型使用案例中,合成视觉设计者可设计应用小芯片且从其它方获得支持小芯片。因此,设计支出(例如,在时间或复杂性方面)减少,因为避免支持小芯片中体现的功能性的设计及生产。
小芯片还支持原本可能难以实现的IP块(例如使用不同处理技术或使用不同特征大小(或使用不同接触技术或间距)制造的IP块)的紧密集成。因此,具有不同物理特性、电特性或通信特性的多个IC或IC组合件可以模块化方式组装以提供具有各种所期望功能性的组合件。小芯片系统还可促进调适以适应小芯片系统将并入到其中的不同更大系统的需求。在实例中,可针对特定功能的功率、速度或发热进行优化—如可能发生在传感器上—的IC或其它组合件可比试图在单个裸片上与其它装置集成更容易地与其它装置集成在一起。另外,通过减小裸片的总体大小,小芯片的良率趋向于高于更复杂的单裸片装置的良率。
图6A及图6B大体上说明根据实施例的小芯片系统的实例。图6A是安装在可例如通过外围组件互连快速(PCIe)连接到更广泛计算机系统的外围板604上的小芯片系统602的表示。小芯片系统602包含封装衬底606、中介层608及四个小芯片:应用小芯片610、主机接口小芯片612、存储器控制器小芯片614及存储器装置小芯片616。其它系统可包含许多额外小芯片以提供额外功能性,如从以下论述将显而易见。小芯片系统602的封装被说明为具有盖子或覆盖物618,但可使用小芯片系统的其它封装技术及结构。图6B是为了清楚起见而标记小芯片系统中的组件的框图。
应用小芯片610被说明为包含小芯片系统NOC 620以支持用于小芯片间通信的小芯片网络622。在实例实施例中,小芯片系统NOC 620可被包含在应用小芯片610上。在实例中,来自图1的实例的第一NOC 118可响应于选定支持小芯片(例如,主机接口小芯片612、存储器控制器小芯片614及存储器装置小芯片616)而定义,从而使设计者能够为小芯片系统NOC 620选择适当数目个小芯片网络连接或交换机。在实例中,小芯片系统NOC 620可位于单独小芯片上,或位于中介层608内。在如本文中所论述的实例中,小芯片系统NOC 620实施小芯片协议接口(CPI)网络。
在实例中,小芯片系统602可包含或包括第一存储器计算节点104或第一存储器计算装置112的一部分。即,第一存储器计算装置112的各种块或组件可包含可安装在外围板604、封装衬底606及中介层608上的小芯片。第一存储器计算装置112的接口组件通常可包括主机接口小芯片612,第一存储器计算装置112的存储器及存储器控制相关组件通常可包括存储器控制器小芯片614,第一存储器计算装置112的各种加速器及处理器组件通常可包括应用小芯片610或其例子等等。
例如可被用于系统中的小芯片之间或当中的通信的CPI接口是支持虚拟信道以实现小芯片之间的灵活且高速交互的基于分组的网络。CPI实现从小芯片内网络到小芯片网络622的桥接。例如,AXI是被广泛地用来设计芯片内通信的规范。然而,高级可扩展接口(AXI)规范涵盖各种各样的物理设计选项,例如物理信道的数目、信号时序、功率等。在单个芯片内,通常选择这些选项来满足设计目标,例如功耗、速度等。然而,为了实现小芯片系统的灵活性,使用适配器(例如CPI)来在可在各种小芯片中实施的各种AXI设计选项之间进行对接。通过实现物理信道到虚拟信道的映射且用分组化协议封装基于时间的信令,CPI跨小芯片网络622桥接小芯片内网络。
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单元。
在实例中,CPI分组协议(例如,点对点或可路由)可使用AIB信道内的对称的接收及传输I/O单元。CPI流协议允许更灵活地使用AIB I/O单元。在实例中,用于流模式的AIB信道可将I/O单元配置为全TX、全RX或半TX半RX。CPI分组协议可在SDR或DDR操作模式下使用AIB信道。在实例中,AIB信道对于SDR模式以80个I/O单元(即,40TX及40RX)的增量配置且对于DDR模式以40个I/O单元的增量配置。CPI流协议可在SDR或DDR操作模式下使用AIB信道。在此,在实例中,AIB信道对于SDR及DDR模式两者以40个I/O单元为增量。在实例中,每一AIB信道被指派唯一接口识别符。在CPI重置及初始化期间使用所述识别符来确定跨邻近小芯片的成对AIB信道。在实例中,接口识别符是包括7位小芯片识别符、7位列识别符及6位链路识别符的20位值。AIB物理层使用AIB带外移位寄存器传输接口识别符。使用移位寄存器的位32到51,跨AIB接口在两个方向上传送20位接口识别符。
AIB将一组堆叠AIB信道定义为AIB信道列。AIB信道列具有某一数目个AIB信道加上一辅助信道。辅助信道含有用于AIB初始化的信号。列内的所有AIB信道(辅助信道除外)具有相同配置(例如,全TX、全RX或半TX及半RX),并且具有相同数目个数据I/O信号。在实例中,AIB信道从邻近于AUX信道的AIB信道开始以连续递增顺序编号。邻近于AUX的AIB信道被定义为AIB信道零。
通常,个别小芯片上的CPI接口可包含串行化-去串行化(SERDES)硬件。SERDES互连件非常适合其中期望具有低信号计数的高速信令的场景。然而,SERDES可能导致复用及解复用、错误检测或校正(例如,使用块级循环冗余校验(CRC))、链路级重试或前向错误校正的额外功耗及更长延时。然而,当低延时或能耗是超短距离的小芯片到小芯片互连的主要关注点时,可利用具有允许以最小延时进行数据传送的时钟速率的并行接口。CPI包含用以最小化这些超短距离小芯片互连件中的延时及能耗两者的元件。
对于流控制,CPI采用基于信用的技术。接收者(例如应用小芯片610)向发送者(例如存储器控制器小芯片614)提供表示可用缓冲区的信用。在实例中,CPI接收者包含在给定传输时间单位内用于每一虚拟信道的缓冲区。因此,如果CPI接收者支持时间上的五个消息及单个虚拟信道,那么接收者具有布置在五行中的五个缓冲区(例如,每单位时间一行)。如果支持四个虚拟信道,那么接收者具有布置在五行中的二十个缓冲区。每一缓冲区保存一个CPI分组的有效负载。
当发送者向接收者传输时,发送者基于所述传输而使可用信用递减。一旦接收者的所有信用被消耗,发送者就停止将分组发送到接收者。这确保接收者总是具有可用缓冲区来存储所述传输。
随着接收者处理经接收分组且释放缓冲区,接收者将可用缓冲区空间传达给发送者。接着,发送者可使用这个信用返回以允许传输额外信息。
图6A的实例包含使用直接的小芯片到小芯片技术而无需小芯片系统NOC 620的小芯片网状网络624。小芯片网状网络624可在CPI或另一小芯片到小芯片协议中实施。小芯片网状网络624通常实现小芯片的流水线,其中一个小芯片充当到流水线的接口,而流水线中的其它小芯片仅与它们本身对接。
另外,专用装置接口(例如一或多个行业标准存储器接口(例如举例来说同步存储器接口,例如DDR5、DDR6))可被用来将装置连接到小芯片。小芯片系统或个别小芯片到外部装置(例如更大系统的连接可通过所期望接口(例如,PCIe接口)进行。在实例中,此外部接口可通过主机接口小芯片612来实施,在所描绘实例中,所述主机接口小芯片提供小芯片系统外部的PCIe接口。当行业中的惯例或标准集中在此接口上时,通常采用此类专用小芯片接口626。将存储器控制器小芯片614连接到动态随机存取存储器(DRAM)存储器装置小芯片616的双倍数据速率(DDR)接口的所说明实例正是此行业惯例。
在多种可能的支持小芯片中,存储器控制器小芯片614可能存在于小芯片系统中,这是因为几乎无所不在地对于计算机处理使用存储以及对于存储器装置使用精湛的尖端技术。因此,使用由他人生产的存储器装置小芯片616及存储器控制器小芯片614使小芯片系统设计者能够获得由成熟生产商生产的稳健产品。通常,存储器控制器小芯片614提供存储器装置特定接口来读取、写入或擦除数据。通常,存储器控制器小芯片614可提供额外特征,例如错误检测、错误校正、维护操作或原子运算符执行。对于一些类型的存储器,维护操作往往特定于存储器装置小芯片616,例如NAND快闪存储器或存储类存储器中的废弃项目收集、NAND快闪存储器中的温度调节(例如,交叉温度管理)。在实例中,维护操作可包含逻辑到物理(L2P)映射或管理以在数据的物理与逻辑表示之间提供间接层级。在其它类型的存储器(例如DRAM)中,一些存储器操作(例如刷新)有时可由主机处理器或存储器控制器来控制,且在其它时候,由DRAM存储器装置或者由与一或多个DRAM装置相关联的逻辑(例如接口芯片(在实例中,缓冲区))来控制。
原子运算符是例如可由存储器控制器小芯片614执行的数据操纵。在其它小芯片系统中,原子运算符可由其它小芯片来执行。例如,“递增”的原子运算符可由应用小芯片610在命令中指定,所述命令包含存储器地址及可能的递增值。在接收到所述命令时,存储器控制器小芯片614从所指定存储器地址检索数字,将所述数字递增所述命令中指定的量,且存储结果。在成功完成时,存储器控制器小芯片614将命令成功的指示提供到应用小芯片610。原子运算符避免跨小芯片网状网络624传输数据,从而实现此类命令的较低延时执行。
原子运算符可被分类为内置原子或可编程(例如,定制)原子。内置原子是在硬件中不变地实施的有限操作集。可编程原子是可在存储器控制器小芯片614的可编程原子单元(PAU)(例如,定制原子单元(CAU))上执行的小程序。
存储器装置小芯片616可为易失性存储器装置或非易失性存储器,或者包含易失性存储器装置或非易失性存储器的任何组合。易失性存储器装置的实例包含但不限于随机存取存储器(RAM)—例如DRAM)、同步DRAM(SDRAM)及图形双倍数据速率类型6SDRAM(GDDR6SDRAM)等等。非易失性存储器装置的实例包含但不限于与非(NAND)型快闪存储器、存储类存储器(例如,相变存储器或基于忆阻器的技术)、铁电RAM(FeRAM)等等。所说明实例包含作为小芯片的存储器装置小芯片616,然而,所述装置可驻留在别处,例如在外围板604上的不同封装中。对于许多应用,可提供多个存储装置小芯片。在实例中,这些存储器装置小芯片可各自实施一或多种存储技术且可包含集成计算主机。在实例中,存储器小芯片可包含不同技术的多个堆叠式存储器裸片,例如一或多个静态随机存取存储器(SRAM)装置与一或多个动态随机存取存储器(DRAM)装置堆叠在一起或者以其它方式与一或多个DRAM装置通信。在实例中,存储器控制器小芯片614可用于协调小芯片系统602中的多个存储器小芯片之间的操作(例如,在高速缓存存储的一或多个层级中使用一或多个存储器小芯片,且使用一或多个额外存储器小芯片作为主存储器)。小芯片系统602可包含如可被用来为单独主机、处理器、传感器、网络等提供存储器控制功能性的多个存储器控制器小芯片614例子。例如所说明系统中的小芯片架构通过经更新小芯片配置(例如在不需要重新设计系统结构的其余部分的情况下),在允许适应不同存储器存储技术及不同存储器接口方面提供优势。
图7大体上说明根据实施例的存储器计算装置的基于小芯片的实施方案的实例。所述实例包含具有四个近存储器计算或CNM小芯片的实施方案,且所述CNM小芯片中的每一者可包含或包括来自图1的实例的第一存储器计算装置112或第一存储器计算节点104的部分。各种部分本身可包含或包括相应小芯片。基于小芯片的实施方案可包含或使用基于CPI的系统内通信,如上文在来自图6A及图6B的实例小芯片系统602中类似地论述。
图7的实例包含包括多个小芯片的第一CNM封装700。第一CNM封装700包含耦合到CNM NOC集线器710的第一小芯片702、第二小芯片704、第三小芯片706及第四小芯片708。第一到第四小芯片中的每一者可包括相同或基本上相同的组件或模块的例子。例如,所述小芯片可各自包含HTP加速器、HTF加速器及用于存取内部或外部存储器的存储器控制器的相应例子。
在图7的实例中,第一小芯片702包含耦合到CNM NOC集线器710的第一NOC集线器边缘714。第一CNM封装700中的其它小芯片类似地包含NOC集线器边缘或端点。NOC集线器边缘中的交换机促进经由CNM NOC集线器710进行小芯片内或小芯片系统内通信。
第一小芯片702可进一步包含一个或多个存储器控制器716。存储器控制器716可对应于与第一NOC集线器边缘714对接的相应不同NOC端点交换机。在实例中,存储器控制器716包括存储器控制器小芯片614,或包括存储器控制器130,或包括存储器子系统200或其它存储器计算实施方案。存储器控制器716可耦合到相应不同存储器装置,例如包含第一外部存储器模块712a或第二外部存储器模块712b。所述外部存储器模块可包含例如可由系统中的相应不同小芯片选择性地存取的GDDR6存储器。
第一小芯片702可进一步包含例如经由相应不同NOC端点交换机耦合到第一NOC集线器边缘714的第一HTP小芯片718及第二HTP小芯片720。所述HTP小芯片可对应于HTP加速器,例如来自图1的实例的HTP 140,或来自图4的实例的HTP加速器400。所述HTP小芯片可与HTF小芯片722进行通信。HTF小芯片722可对应于HTF加速器,例如来自图1的实例的HTF142,或来自图5的实例的HTF 500。
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)。在实例中,第一CNM封装700使用各种CPI、PCIe、CXL或其它组构所耦合到的装置可组成共同全局地址空间。
在图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片块集群进入及退出功率/时钟门模式。
图8说明根据实施例的存储器计算装置的实例平铺。在图8中,平铺式小芯片实例800包含小芯片的不同近存储器计算集群的四个例子,其中所述集群耦合在一起。近存储器计算小芯片的每一例子本身可包含一或多个构成小芯片(例如,主机处理器小芯片、存储器装置小芯片、接口小芯片等等)。
平铺式小芯片实例800包含来自图7的实例的第一近存储器计算(CNM)封装700的例子作为其CNM集群中的一或多者。例如,平铺式小芯片实例800可包含第一CNM集群802,所述第一CNM集群包含第一小芯片810(例如,对应于第一小芯片702)、第二小芯片812(例如,对应于第二小芯片704)、第三小芯片814(例如,对应于第三小芯片706)及第四小芯片816(例如,对应于第四小芯片708)。第一CNM集群802中的小芯片可耦合到共同NOC集线器,所述共同NOC集线器又可耦合到邻近集群或若干邻近集群中(例如,第二CNM集群804或第四CNM集群808中)的NOC集线器。
在图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,以此类推。
在实例中,平铺式小芯片实例800中的近存储器计算小芯片中的一者可包含负责跨平铺式小芯片实例800的工作负载平衡的主机接口(例如,对应于来自图7的实例的主机接口724)。主机接口可促进例如从平铺式小芯片实例800外部存取基于主机的命令请求队列及响应队列。主机接口可使用平铺式小芯片实例800中的近存储器计算小芯片中的一或多者中的混合线程处理器及混合线程组构分派新执行线程。
图9是展示用于使用多于一个同步流在可重新配置计算组构(例如HTF 142或HTF500)处执行操作的工作流程900的一个实例的图。图9的工作流程900利用分派接口902及两个同步流901、903。分派接口902经配置以从近存储器计算系统的其它部分接收指令及/或数据,如本文中所描述。在一些实例中,分派接口902以与本文中所描述的分派接口508类似的方式布置。
同步流901、903包含相应流控制器904、906及有序同步数据路径908、910,如本文中所描述。同步数据路径908、910例如可在相应同步流901、903的计算元件之间,如本文中所描述。流控制器904、906及同步数据路径908、910由可重新配置计算组构(例如本文中所描述的HTF 142或HTF 500)布置。
可重新配置计算组构可经布置以实施包含流控制器904、906及同步数据路径908、910的各种计算元件的同步流901、903。例如,流控制器904、906可使用片块510、512等的相应片块基础来实施。同步数据路径908、910可在片块510、512等之间实施,其中片块510、512实施本文中所描述的计算元件。如本文中所描述及图5处所说明的片块、片块基础等可为混合线程组构(HTF)(例如HTF 142)的组件,所述HTF是存储器计算装置(例如图1的存储器计算装置112)的部分。本文中所描述的其它同步流可使用如本文中所描述的HTF的片块及片块基础类似地布置。
在图9的工作流程900中,域接口902通过经由可重新配置计算组构的异步结构将异步消息912提供到流控制器904来启动处理任务。异步消息912可为继续型消息。域接口902可基于其自身编程及/或响应于来自近存储器计算系统可重新配置计算组构的另一组件的指令而启动处理任务。在一些实例中,域接口902还针对用于执行处理任务(包含例如对各种流控制器904、906及计算元件进行编程以实施同步流901、903)的正确内核配置对可重新配置计算组构进行配置。
异步消息912可指示流控制器904开始同步流线程。例如,当辐条RAM为同步流901的组件之间的同步数据路径908选择流控制器904时,所述流控制器可通过将第一同步消息提供到同步数据路径908的第一计算元件来启动所述线程。同步消息可包含数据及控制信息,如本文中所描述。同步数据路径908的第一计算元件通过执行处理任务且产生被发送到同步数据路径908的第二计算元件的下一同步消息来开始线程的执行。第二计算元件执行处理任务且产生被发送到同步数据路径908的第三计算元件的第三同步消息等等,直到在同步数据路径908的所有计算元件处均执行线程为止。
同步数据路径908的计算元件经编程以在执行线程的同时执行各种操作,包含例如用于配置同步流903的操作。例如,在执行同步流901处的线程期间,同步数据路径908的计算元件中的一或多者将异步消息914发送到同步流903的流控制器906。异步消息914指示流控制器906以至少一个条件的出现为条件而启动同步流903处的线程。在这个实例中,所述条件或若干条件包含从同步流901接收到指示线程完成或启动同步流903处的线程是可接受的另一异步消息。稍后,在执行同步流901处的线程时,同步数据路径908的计算元件将异步消息916发送到同步流903的流控制器906。异步消息916指示同步流901处的线程已完成及/或到达同步流903处的对应线程可开始所在的点。在一些实例中,异步消息916指示在同步流903处的线程期间执行的处理的结果。
在接收到异步消息916时(及当满足异步消息914的其它条件(如果有的话)时),流控制器906例如通过将第一同步消息发送到同步数据路径910的第一计算元件来启动同步流903处的线程。在一些实例中,例如,在同步流903处的线程完成时,同步数据路径910的计算元件将把用以指示经请求处理任务已完成的异步消息918发送到分派接口902。
图10是展示用于在可重新配置计算组构(例如HTF 142或HTF 500)处执行操作的工作流程1000的一个实例的图,其中同步流1001、1003与存储器接口1016交互。在工作流程1000中,域接口1002通过经由可重新配置计算组构的异步结构将异步消息1010提供到流控制器1004来启动处理任务。异步消息1010指示流控制器1004在一或多个条件出现时启动同步流1001处的线程。(在一些实例中,消息1010可指示流控制器1004立即开始执行线程,而无需等待任何条件的出现)。
流控制器1004通过将同步消息提供到同步数据路径1022的第一计算元件来启动线程,如本文中所描述。在执行同步流1001处的线程期间,同步数据路径1022的计算元件将异步消息1012提供到同步流1003的流控制器1006。异步消息1012可指示流控制器1006在接收到来自存储器接口1016的数据已被接收的指示时启动同步流1003处的线程。
作为执行同步流1001处的线程的部分,同步数据路径1022的另一计算元件将异步消息1014提供到存储器接口1016。异步消息1014包括待引导到近存储器计算系统的存储器(例如举例来说包含可重新配置计算组构的存储器计算装置的存储器元件)的读取请求。在一些实例中,异步消息1014还可识别将接收读取请求的结果的同步流1003的计算元件。
存储器接口1016在适当系统存储器处执行读取请求以获得加载数据。当加载数据被接收时,存储器接口1016将包含加载数据的异步消息1018引导到由异步消息1014指示的同步流1003的计算元件(例如,同步数据路径1024的计算元件中的一者)。在接收到加载数据时,计算元件将加载数据写入到计算元件存储器且将异步消息1017发送到同步流1003的流控制器1006。消息1017指示加载数据已被接收。在一些实例中,存储器接口1016将与消息1018类似的包含加载数据的异步消息提供到同步流1003的多个计算元件。已接收到加载数据的每一计算元件可将与消息1017类似的对应异步消息提供到流控制器1006。
在接收到异步消息1017时(及在满足继续型消息1012的任何其它条件之后),流控制器1006例如通过将同步消息提供到同步数据路径1024的第一计算元件来启动同步流1003处的线程。如果同步流1003的多于一个的计算元件将接收加载数据,那么当流控制器1006已从已接收到加载数据的计算元件接收所有预期异步消息时,流控制器1006可启动线程。在一些实例中,在同步流1003处的线程完成时,同步数据路径1024的计算元件中的一或多者(例如,其最后计算元件)将指示完成的异步消息1020发送到分派接口1002。
图11是用于使用可重新配置计算组构(例如HTF 142或HTF 500)执行循环1122的工作流程1100的一个实例的图。工作流程1100使用三个同步流1101、1103、1105来说明。在这个实例中,循环1122的每次迭代使用单个同步流1103处的单个线程来执行。
流控制器1102例如通过将同步消息提供到同步数据路径1108的第一计算元件来启动同步流1101处的第一线程。执行同步流1101处的线程包含将异步消息1114发送到同步流1105的流控制器1106。异步消息1114可指示流控制器1106将在接收到循环1122已完成的指示之后执行同步流1105处的线程。执行同步流1101处的线程还包含将异步消息1116发送到同步流1103的流控制器1104。异步消息1116指示流控制器1104执行循环。例如,异步消息1116可包含指示循环中的迭代次数的迭代计数。
流控制器1104启动用于循环的第一次迭代的线程。同步域1103的同步数据路径1110的计算元件执行循环的第一次迭代。当线程完成时,一或多个计算元件将指示循环的第一次迭代已完成的异步消息1120发送到流控制器1104。
在一些实例中,流控制器1104在启动用于循环的第一次迭代的第一线程之后继续启动用于执行循环的额外迭代的额外线程。例如,如果流控制器1104具有辐条计数3,那么其可启动同步流1103处的用于每三个时钟周期的循环的新迭代的新线程。这可在不考虑用于先前循环迭代的线程是否已完成传播通过同步数据路径1110的计算元件的情况下发生。在一些实例中,实施不同循环迭代的各种线程可在同步流1103的同步数据路径1110的计算元件处并发地执行(例如,偏移达辐条计数)。
当实施循环1122的所有迭代的线程已完成时,流控制器1104将接收到源自实施迭代的所有线程的异步消息。当这已发生时,流控制器1104将指示循环1122已完成的异步消息1118发送到流控制器1106。流控制器1106可通过在计算元件1112处启动线程以实施可重新配置计算组构的编程的下一部分而作出响应。
图11展示可经组合以在不同背景下实施循环的各种实例元件。首先,尽管图11的实例展示由同步流1101处的线程启动循环1122,但在一些实例中,循环可由另一组件(例如分派接口)来启动。而且,尽管在图11的实例中,循环1122的完成触发另一同步流1105处的另一线程,但在一些实例中,循环的完成可指示处理任务的完成。因此,作为如图11中所展示那样将指示循环的完成的同步消息1118提供到另一流控制器1106的补充或代替,可将所述同步消息提供到分派接口。
而且,图11说明可被用来实施嵌套循环的元件。例如,同步流1101处的启动循环1122的线程可能正在执行将循环1122作为内循环进行调用的外循环的迭代。而且,在一些实例中,例如,同步流1103处的实施循环1122的迭代的每一线程可致使另一同步流(未展示)实施另一循环,如同同步流1101处的线程致使同步流1103执行循环1122那样。
在图11的实例中,循环1122的每次迭代使用单个同步流程1103来执行。然而,在一些实例中,循环迭代的执行可利用多个同步流。例如,执行用于循环1122的迭代的线程可包含将异步消息发送到第二流控制器及/或存储器接口。第二流控制器启动另一同步流(未展示)处的线程以执行循环迭代的另一部分。在这个实例中,在循环迭代完成时,完成循环迭代的同步流将异步消息发送到启动所述循环的流控制器(例如,流控制器1104)。
图12是展示经配置以执行本文中所描述的矩阵向量乘法的计算元件1202的一个实例的图1200。计算元件1202包括计算元件存储器1204,计算元件存储器1204可经配置以执行如本文中所描述的分散/聚集I/O操作。在一些实例中,计算元件1202及计算元件存储器1204使用例如片块及片块存储器来实施,如本文中所描述。
在图12中,计算元件1202包括标记为LANE 0、LANE 1、LANE 2等等的N个并行处理通道。而且,在一些实例中,所述并行处理通道是SIMD通道,如本文中所描述。计算元件1202通过在加载1206处加载来自输入矩阵坐标数据结构的元素来执行矩阵向量乘法。所加载坐标数据结构元素的数目可基于计算元件1202处的并行处理通道的数目。例如,如果存在八个并行处理通道(例如,N=8),那么可加载来自坐标数据结构的八个元素。
加载1208是从计算元件存储器1204进行的用以检索具有对应于经检索坐标数据结构元素的列值的行值的输入向量元素的聚集加载。这些值被提供到相应并行处理通道,如所展示。例如,每一并行处理通道可接收来自经检索坐标数据结构(CDS)元素的值及对应于那个CDS元素的列的输入向量(IV)值。
并行处理元件执行并行乘法运算。使用运算的结果来使用到计算元件存储器1204的分散写入1210更新相应通道及输入矩阵行的部分累加值。如本文中所描述,可执行图12中所展示的流程,直到坐标数据结构的所有元素均被处理(或对应于预定数目个行的所有元素均被处理)为止。接着,计算元件可例如通过对所有并行处理通道上的每一输入通道行的所有部分累加值求和来对部分累加值归约。每一行的部分累加值的和可为结果向量的元素。图13是展示可在可重新配置计算组构中执行以执行矩阵向量乘法的过程流程1300的一个实例的流程图。在一些实例中,过程流程1300可由片块或其它计算元件(例如举例来说图12的计算元件1202)来执行。
在操作1302处,计算元件从坐标数据结构加载表示输入矩阵的元素分块。分块可包含与计算元件处的并行处理通道的数目相等的数个元件。如果剩余的(例如,尚未加载的)坐标数据结构元素少于并行处理通道,那么计算元件可加载所有剩余的坐标数据结构元素。来自坐标数据结构的每一元素指示输入矩阵行号、输入矩阵列号以及行及列处的输入矩阵值。
在操作1304处,计算元件根据输入向量执行聚集加载,所述输入向量可存储在计算元件存储器处。聚集加载返回对应于由坐标数据结构元素指示的输入矩阵的列的输入向量元素。例如,指示输入矩阵的第X列的坐标数据结构提示计算元件加载第X个输入向量元素。
在操作1306处,计算元件使用在操作1302及1304处加载的输入数据执行并行乘法运算。例如,计算元件的每一并行处理通道可对来自坐标数据结构元素的相应值与来自输入向量的对应元素执行乘法运算。在操作1308处,使用乘法运算的结果来更新相应并行处理通道及输入矩阵行的部分累加值。这可使用分散写入操作来执行,如本文中所描述。
在操作1310处,确定是否存在额外坐标数据结构元素待加载。如果存在额外坐标数据结构元素待加载,那么计算元件可在操作1302处从坐标数据结构加载另一元素分块且如本文中所描述那样继续进行。
如果来自坐标数据结构的所有元素已被加载且继续进行,那么在操作1312处计算元件对行/通道部分累积变量归约以产生输出向量。例如,如本文中所描述,可通过跨所有并行处理通道对输入矩阵的每一对应行的部分累加值求和来产生输出向量的每一元素。
图14是展示用于在可重新配置计算组构中利用实例聚集加载及分散写入操作执行矩阵向量乘法的实例技术的另一说明的图1400。图1400包含可被包含在计算元件处的元件,例如本文描述的片块中的一或多者。例如,图1400展示标记为LANE 0到LANE 7的八个并行处理通道。还展示实例存储器位置1402、1404。存储器位置1402存储标记为V0到VN的输入向量的值。存储器位置1404存储各种并行处理通道LANE 0到Lane 7的部分累加值。在这个实例中,每一并行处理通道对应于存储器位置1404的列。即,LANE 0对应于列A,LANE 1对应于列B,以此类推。存储器位置1404的行对应于输入矩阵的行。在这个实例中,输入矩阵、输入向量及输出向量具有i-1个行。例如,对应于LANE 2及输入矩阵行4的部分累加值将存储在存储器位置A4处。
在图14中,已为LANE 0到LANE 7加载八个坐标数据结构元素的实例分块,如由下表10所说明及展示:
表[10]
如本文中所描述,计算元件可执行从计算元件存储器的聚集读取以从对应于输入向量的第2、第23、第56、第14、第31、第51、第4及第16个元素的存储器位置检索值。在各种实例中,存储输入向量的这些元素的存储器位置是不连续的。使用聚集加载可允许计算元件在单个操作中从(潜在地)非连续存储器位置加载输入向量值,如本文中所描述。
如本文中所描述,可将来自加载的数据提供到各种并行处理通道,其中每一并行处理通道对相应输入数据执行乘法运算。使用乘法运算的结果来执行到存储器位置1404的分散加载以更新相应部分累加值。在图14的实例中,分散写入也执行加法指派。例如,将LANE 0乘积(L0P)加到位于存储器位置A0处的ROW 1的LANE 0部分累加值(PA0)。将LANE 1乘积(L1P)加到位于存储器位置B1处的ROW 1的LANE 1部分累加值(PA1)。将LANE 2乘积(L2P)加到位于存储器位置C1处的ROW 1的LANE 2部分累加值(PA1)。将LANE 3乘积(L3P)加到位于存储器位置D2处的ROW 2的LANE 3部分累加值(PA2)。将LANE 4乘积(L4P)加到位于存储器位置E3处的ROW 3的LANE 3部分累加值(PA3)。
将LANE 5乘积(L5P)加到位于存储器位置F3处的ROW 3的LANE 5部分累加值(PA3)。
将LANE 6的乘积(L6P)加到位于存储器位置G4处的ROW 4的LANE 6部分累加值(PA4)。将LANE 7乘积(L6P)加到位于存储器位置H4处的ROW 4的LANE 7部分累加值(PA4)。在一些实例中,所有部分累加值均利用单个分散写入来更新。
在图14的实例中,在存储器位置1404的行号与输入矩阵的行号之间存在一对一相关性。在各种实例中,情况可能并非如此。计算元件可对输入矩阵行号执行变换以将其映射到存储器位置1404处的对应行。在一些实例中,计算元件将散列函数(例如模N散列)应用于输入矩阵行号以在存储器位置1404处产生对应行。N可为输入矩阵中的行的数目(及/或与当前行块一起考虑的输入矩阵的行的数目)。因此,存储部分累加值的存储器位置的块可能不需要从行零开始,如图14所展示。
图14说明来自坐标数据结构的一个元素分块的处理。可类似地处理额外分块,其中类似地更新各种行及通道的累加值,直到所有坐标数据结构元素均被处理(或给定范围的输入矩阵行的所有坐标数据结构元素均被处理)为止。接着如本文中所描述,可关于行及值对部分累加值归约以产生输出向量。例如,可跨所有通道LANE 0到LANE 7对部分累加值PA0求和以产生输出向量的第一元素。这可包含例如对存储器位置1404的行0求和。可跨所有通道LANE 0到LANE 7对部分累加值PA1求和以产生输出向量的第二元素。可跨所有通道LANE 0到LANE 7对部分累加值PA2求和以产生输出向量的第三元素,以此类推。
图15是展示可在可重新配置计算组构中执行以执行矩阵向量乘法的过程流程的一个实例的过程流程。在图15的实例中,输入矩阵的行被视为在多于一个行块中。这可能限制计算元件存储器处的存储部分累加值所需的存储器位置的数目。例如,如果具有8个并行处理通道的计算元件考虑对应于256个行的输入矩阵的行块,那么8个并行处理通道的所得部分累加值可存储在包含256×8(或2048)个存储器位置的存储器块中。
在操作1502处,计算元件确定对应于待考虑的输入矩阵行的下一块的坐标数据结构元素。例如,坐标数据结构可与指示对应于输入矩阵处的每一行或行块的元素的数目的对应索引数据结构相关联。在其它实例中,坐标数据结构按输入矩阵行值排序。计算元件可解析坐标数据结构以识别超出当前行块的第一元素。
在操作1504处,计算元件加载下N个坐标数据结构元素,其中N计算元件处的并行处理通道的数目。在操作1506处,计算元件执行从计算元件存储器进行的聚集加载以获得对应于经接收坐标数据结构元素的输入向量值。在操作1508处,计算元件在各种并行处理通道处执行SIMD运算以对来自操作1504及1506的输入值执行乘法运算。结果是N个乘积。在操作1510处,使用在操作1508处产生的N个乘积以例如使用如本文中所描述的分散写入更新对应于相关联的并行处理通道及输入矩阵行的部分累加值。
在操作1512处,计算元件确定是否存在来自当前行块的额外坐标数据结构元素。如果存在,那么计算元件在操作1504处加载下N个坐标数据结构元素且如本文中所描述那样继续进行。如果当前行块没有剩余的额外坐标数据结构元素,那么在操作1514处,计算元件通过并行处理通道及输入矩阵行来对部分累加值归约,如本文中所描述。结果是对应于当前行块的行的输出矩阵的一部分。在操作1516处,将这些结果写入到输出向量的对应部分。
在操作1518处,计算元件确定是否存在任何额外行块待考虑。如果存在,那么计算元件返回到操作1502以识别下一行块的坐标数据结构条目。如果没有行块剩余,那么在操作1520处,计算元件前进到下一操作。
下文在代码段[1]处给出用于实施矩阵向量乘法的实例伪代码:
代码段[1]:
在代码段[1]中,第一for循环对于来自输入矩阵的256行的所有行块执行。在第一for循环中,计算元件从256个块中的输入矩阵选择行。计算元件确定坐标数据结构(COO)处的当前行块的第一元素(firstEle)及坐标数据结构(COO)处的当前行块的最后元素(lastEle)。在这个实例中,对应于特定行的坐标数据结构(COO)的元素单独地存储在被称为(rowStart)的索引数据结构中。计算元件查询索引数据结构(rowStart)以确定坐标数据结构(COO)处的当前行块的坐标处的第一元素(firstEle)及最后元素(lastEle)。
第一嵌套for循环对于当前行块中的每一坐标数据结构(COO)元素进行操作且致使计算元件产生行块的部分累加值。在这个实例中,计算元件经构造成具有八个并行处理或SIMD通道。因此,来自坐标数据结构(COO)的八个元素被加载。在这个实例中,坐标数据结构(COO)的八个元素的行及列值被加载在一个64字节负载中,其中8个字节表示一元素的行与列的每一组合。来自八个元素的坐标数据结构(COO)的值被加载在第二64字节负载中,其中8个字节表示每一元素值。
在聚集加载中使用来自经加载坐标数据结构(COO)的列值来加载对应于输入元素的列的输入向量元素(vecVal)。接着,计算元件的并行处理通道按照行(row)及并行处理通道(k)产生部分累加值(partAccum)。使用分散写入将经更新部分累加值按照行及并行处理通道写入到计算元件存储器,如本文中所描述。执行第一嵌套循环,直到对于当前行块中的所有坐标数据结构元素都更新部分累加值为止。
第二嵌套for循环对当前行块的部分累加值(partAccum)归约。在这个实例中,部分累加值以与图14中所展示的布置类似的布置存储在计算元件存储器处。计算元件存储器可能够使用单个指令跨存储器位置列求和。因此,在代码实例[1]中,对于来自行块的第一行,计算元件对来自并行处理通道0的部分累加值(partAccum[row][0])与处理通道4的部分累加值(partAccum[row][4])求和以产生中间值(accumA0)。类似地,对于第一行,对来自并行处理通道1及5、2及6以及3及7的部分累加值求和,如所展示。接着对中间值求和。通过对中间值和的结果求和来得出跨所有并行处理通道的部分累加值的最终和。在这个实例中,三个所指示归约指令(reduction instru1、reduction instr2及reductioninstru3)是在计算元件存储器处执行的单个指令。归约的结果存储在输出向量(y[row])处。接着,使用双重嵌套for循环来清除所考虑行的部分累加值。第二嵌套for循环作为当前行块中的每一行的单个指令来执行。
在各种实例(例如图12中所展示的实例)中,坐标数据结构及输入向量可存储在计算元件存储器(例如图12的计算元件存储器1204)处。在各种其它实例中,可使用其它存储器来存储坐标数据结构及/或输入向量。图16是展示用于在可重新配置计算组构中执行矩阵向量乘法的工作流程1600的一个实例的图,其中坐标数据结构及输入向量存储在外部存储器1609处。在图16的实例中,可重新配置计算组构经布置成同步流1601、1603、1605、1607。为了简化,在图16中未展示存储器接口,但将明白,各种同步流1601、1603、1605、1607可经由一或多个存储器接口与外部存储器1609进行通信,如本文中所描述。
在图16的实例中,同步流1601、1603、1605、1607是对于坐标数据结构元素的块执行向量矩阵乘法的循环迭代的部分。例如,同步流1601的流控制器1602接收指示同步流1601开始对于坐标数据结构元素的块执行矩阵向量乘法的异步循环消息1642。流控制器1602开始同步数据路径1604处的同步流线程。同步流1601将用以从坐标数据结构加载值块的异步读取请求1644及1646发送到外部存储器1609。在这个实例中,包含行、列及值的单个坐标数据结构元素存储在两个位置处,其中行及列值在一个向量1622中且对应值在另一向量1624中。因此,同步流1601加载行及列值块1628以及对应值块1634。
作为线程的部分,同步数据路径1604的计算元件(例如,经由存储器控制器)将异步读取请求1644发送到外部存储器1609。异步读取请求1644指示来自外部存储器1609处的行及列向量1622的行及列号块1628。异步读取请求1644指示行及列号块1628将被提供到同步流1603的同步数据路径1608的一或多个计算元件。同步数据路径1604的后续计算元件(例如,经由存储器控制器)将异步读取请求1646发送到外部存储器1609。异步读取1646请求对应于行及列值块1628的值块1634。值块1634将被提供到同步流1605的同步数据路径1612的一或多个计算元件。行及列号块1628经由异步消息1648被提供到同步数据路径1608的一或多个计算元件。对应值块1634经由异步消息1650被提供到同步数据路径1612的一或多个计算元件。
在同步流1601处的同步流线程完成时,将指示流控制器1606开始同步流1603处的同步流线程的异步消息1649提供到同步流1603的流控制器1606。块行及列值1628存储在同步数据路径1608的一或多个计算元件的计算元件存储器处。同步数据路径1608的计算元件中的一或多者将行及列值块划分成可存储在例如计算元件存储器处的列值块1630及行值块1632。
同步数据路径1608的计算元件中的一或多者还可(例如,经由存储器控制器)将异步聚集负载消息1651发送到存储器1609。异步聚集加载消息可请求对应于列向量1630的列的输入向量1626的值。异步消息1651可请求将所得输入向量值块1636提供到同步流1605的同步数据路径1612的一或多个计算元件。外部存储器1609可执行聚集加载且经由异步消息1652将输入向量值块1636提供到经请求的计算元件或若干计算元件。同步流1603可将指示行值1632在片块存储器中的位置的异步消息1653提供到同步数据路径1612的一或多个计算元件。
同步流1603处的同步流线程可将指示同步流1605启动同步流1605处的同步流线程的异步消息1653发送到同步流1605的流控制器1610。同步流1605处的同步流线程利用坐标数据结构值1636、输入向量值1636及行值1632来例如以关于图14所描述的方式更新片块存储器1640处的部分累加值。包含流控制器1614及同步数据路径1616的额外同步流1607可如本文中所描述那样对部分累加值求和且发送指示向量矩阵乘法的块的完成的额外异步消息1620。向量矩阵乘法的额外块可由同步流1601、1603、1605、1607处的额外同步流线程来执行。
图17说明实例机器1700的框图,利用所述机器、在所述机器中或通过所述机器可实施本文中所论述的任何一或多种技术(例如,方法论)。如本文中所论述,实例可包含机器1700中的逻辑或数个组件或机制,或者可由其来操作。电路系统(例如,处理电路系统)是在包含硬件(例如,简单电路、门、逻辑等)的机器1700的有形实体中实施的电路的集合。电路系统成员资格可随时间推移而变化。电路系统包含可在操作时独自地或组合地执行所指定操作的成员。在实例中,电路系统的硬件可不变地经设计以执行特定操作(例如,硬连线)。在实例中,电路系统的硬件可包含可变连接的物理组件(例如,执行单元、晶体管、简单电路等)(包含物理修改(例如,磁性地、电地、不变聚集粒子的可移动放置等)的机器可读媒体)以对特定操作的指令进行编码。在连接物理组件时,硬件构成的基础电性质例如从绝缘体变为导体,或反之亦然。所述指令使嵌入式硬件(例如,执行单元或加载机构)能够经由可变连接在硬件中创建电路系统的成员以在操作时实行特定操作的部分。因此,在实例中,机器可读媒体元件是电路系统的部分或当装置操作时通信地耦合到电路系统的其它组件。在实例中,所述物理组件中的任一者可被用于多于一个电路系统的多于一个成员中。例如,在操作中,执行单元可在一个时间点被用于第一电路系统的第一电路中且由第一电路系统中的第二电路重用,或在不同时间由第二电路系统中的第三电路重用。这些组件关于机器1700的额外实例。
在替代实施例中,机器1700可作为独立装置操作或可连接(例如,联网)到其它机器。在联网部署中,机器1700可在服务器-客户端网络环境中以服务器机器、客户端机器或两者的身份操作。在实例中,机器1700可充当对等(P2P)(或其它分布式)网络环境中的对等机器。机器1700可为个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、移动电话、网络器具、网络路由器、交换机或网桥,或者能够执行指令(循序或以其它方式)的任何机器,所述指令指定待由那个机器采取的动作。此外,虽然仅说明单个机器,但术语“机器”也应被理解为包含个别地或联合地执行一组(或多组)指令以执行本文中论述的任何一或多种方法论(例如云计算、软件即服务(SaaS)、其它计算机集群配置)的任何机器集合。
机器1700(例如,计算机系统)可包含硬件处理器1702(例如,中央处理单元(CPU)、图形处理单元(GPU)、硬件处理器核心或其任何组合)、主存储器1704、静态存储器1706(例如,用于固件、微码、基本输入输出(BIOS)、统一可扩展固件接口(UEFI)等的存储器或存储装置)及大容量存储装置1708(例如,硬盘驱动器、磁带驱动器、快闪存储装置或其它块装置),其中的一些或全部可经由互连链路1730(例如,总线)彼此进行通信。机器1700可进一步包含显示装置1710、字母数字输入装置1712(例如,键盘)及用户接口(UI)导航装置1714(例如,鼠标)。在实例中,显示装置1710、输入装置1712及UI导航装置1714可为触摸屏显示器。机器1700可另外包含大容量存储装置1708(例如,驱动单元)、信号产生装置1718(例如,扬声器)、网络接口装置1720及一或多个传感器1716,例如全球定位系统(GPS)传感器、指南针、加速度计或其它传感器。机器1700可包含输出控制器1728,例如串行(例如,通用串行总线(USB)、并行或者其它有线或无线(例如,红外线(IR)、近场通信(NFC)等)连接以与一或多个外围装置(例如,打印机、读卡器等)进行通信或者对其进行控制。
硬件处理器1702、主存储器1704、静态存储器1706或大容量存储装置1708的寄存器可为或包含机器可读媒体1722,所述机器可读媒体上存储有体现本文中所论述的任何一或多种技术或功能或者由其使用的一或多组数据结构或指令1724(例如,软件)。指令1724在由机器1700执行期间还可完全或至少部分地驻留在硬件处理器1702、主存储器1704、静态存储器1706或大容量存储装置1708的寄存器中的任一者内。在实例中,硬件处理器1702、主存储器1704、静态存储器1706或大容量存储装置1708中的一者或任何组合可构成机器可读媒体1722。虽然机器可读媒体1722被说明为单个媒体,但术语“机器可读媒体”可包含经配置以存储一或多个指令1724的单个媒体或多个媒体(例如,集中式或分布式数据库,或者相关联的高速缓存及服务器)。
术语“机器可读媒体”可包含能够存储、编码或携载用于由机器1700执行且致使机器1700执行本公开的任何一或多种技术的指令,或者能够存储、编码或携载由此类指令使用或与此类指令相关联的数据结构的任何媒体。非限制性机器可读媒体实例可包含固态存储器、光学媒体、磁性媒体及信号(例如,射频信号、其它基于光子的信号、声音信号等)。在实例中,非暂时性机器可读媒体包括带有具有不变(例如,静止)质量的多个粒子的机器可读媒体,且因此是物质的组合物。因此,非暂时性机器可读媒体是不包含暂时性传播信号的机器可读媒体。非暂时性机器可读媒体的具体实例可包含:非易失性存储器,例如半导体存储器装置(例如,电可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM))及快闪存储器装置;磁盘,例如内部硬盘及可卸除磁盘;磁光盘;以及CD-ROM及DVD-ROM盘。
在实例中,存储或以其它方式提供在机器可读媒体1722上的信息可代表指令1724,例如指令1724本身或可从其导出指令1724的格式。可从其导出指令1724的这种格式可包含源代码、经编码指令(例如,以经压缩或经加密形式)、经打包指令(例如,分成多个包)等。机器可读媒体1722中代表指令1724的信息可由处理电路系统处理成指令以实施本文中所论述的操作中的任一者。例如,从信息导出指令1724(例如,由处理电路处理)可包含:编译(例如,从源代码、目标代码等)、解译、加载、组织(例如,动态地或静态地链接)、编码、解码、加密、解密、打包、解包信息或以其它方式将信息操纵到指令1724中。
在实例中,指令1724的导出可包含(例如,由处理电路系统)汇编、编译或解译信息以从由机器可读媒体1722提供的一些中间或预处理格式创建指令1724。信息在以多个部分提供时可被组合、解包及修改以创建指令1724。例如,信息可在一或若干远程服务器上呈多个压缩源代码包(或目标代码,或二进制可执行代码等)。源代码包在通过网络传输时可被加密,且在必要时可被解密、解压缩、汇编(例如,链接),及在本地机器处被编译或解译(例如,成库、独立可执行文件等),且由本地机器来执行。
指令1724可利用数种传送协议(例如,帧中继、因特网协议(IP)、传输控制协议(TCP)、用户数据报协议(UDP)、超文本传送协议(HTTP)等)中的一者,经由网络接口装置1720通过使用传输媒体的通信网络1726进一步传输或接收。实例通信网络可包含局域网(LAN)、广域网(WAN)、分组数据网络(例如,因特网)、移动电话网络(例如,蜂窝网络)、普通老式电话(POTS)网络及无线数据网络(例如,被称为的电气及电子工程师协会(IEEE)802.17标准族、被称为/>的IEEE 802.16标准族)、IEEE 802.15.4标准族、对等(P2P)网络等等。在实例中,网络接口装置1720可包含一或多个物理插孔(例如,以太网、同轴或电话插孔)或者一或多根天线以连接到网络1726。在实例中,网络接口装置1720可包含多根天线以使用单输入多输出(SIMO)、多输入多输出(MIMO)或多输入单输出(MISO)技术中的至少一者进行无线通信。术语“传输媒体”应被理解为包含能够存储、编码或携载用于由机器1700执行的指令的任何无形媒体,且包含数字或模拟通信信号或其它无形媒体以促进此软件的通信。传输媒体是机器可读媒体。
为了更好地说明本文中所论述的方法及设备,下文陈述一组非限制性实例实施例作为数字识别实例。
上述详细描述包含对附图的参考,所述附图形成所述详细描述的一部分。附图以说明的方式展示其中可实践本发明的具体实施例。这些实施例在本文中也被称为“实例”。此类实例可包含除所展示或描述元件之外的元件。然而,本发明人也考虑其中仅提供那些所展示或描述元件的实例。此外,对于特定实例(或者其一或多个方面),或者对于本文中所展示或描述的其它实例(或者其一或多个方面),本发明人还考虑使用那些所展示或描述元件(或者其一或多个方面)的任何组合或排列的实例。
在本文献中,如专利文献中常用,术语“一(a)”或“一(an)”被用来包含一或多于一个,而与“至少一个”或“一或多个”的任何其它例子或用法无关。在本文献中,术语“或”被用指代非排他性“或”,使得“A或B”可包含“A而非B”、“B而非A”以及“A及B”,除非另有指示。在所附权利要求书中,术语“包含”及“其中(in which)”被用作相应术语“包括”及“其中(wherein)”的简明英语等效词。而且,在所附权利要求书中,术语“包含”及“包括”是开放式的,即,包含除在一权利要求中在此术语之后列出的元件之外的元件的系统、装置、物品或过程仍然被认为落入那个权利要求的范围内。此外,在所附权利要求书中,术语“第一”、“第二”及“第三”等仅仅被用作标签且并不意在对它们的对象施加数值要求。
上述描述意在说明性的而非限制性的。例如,上述实例(或者其一或多个方面)可彼此组合地使用。例如,所属领域的一般技术人员在审阅上述描述后可使用其它实施例。提交时应理解是,其将不被用来解释或限制权利要求书的范围或含义。而且,在上述详细描述中,各种特征可被分组在一起以简化本公开。这不应被解释为意指非要求的所公开特征对于任何权利要求是必不可少的。相反,发明主题可在于少于特定所公开实施例的所有特征。因此,所附权利要求书由此并入到所述详细描述中,其中每一权利要求自身要求作为单独实施例,且经考虑,此类实施例可以各种组合或排列彼此组合。本发明的范围应参考所附权利要求书连同此权利要求书所授权的等效物的全范围来确定。
Claims (20)
1.一种方法,其包括:
将第一组多个坐标数据结构元素加载到计算元件,所述第一组多个坐标数据结构元素描述输入矩阵的非零值,所述第一组多个坐标数据结构元素中的第一坐标数据结构元素包括第一输入矩阵行号、第一输入矩阵列号以及对应于所述第一输入矩阵行号及所述第一输入矩阵列号的第一输入矩阵值;
将具有对应于所述第一组多个坐标数据结构元素的输入矩阵列号的输入向量行号的第一组输入向量值加载到所述计算元件;
使用所述计算元件的多个并行处理通道来更新分别对应于输出向量行及所述多个并行处理通道中的一者的多个部分累加值,所述更新至少部分地基于所述第一多个坐标数据结构元素及所述第一组输入向量值;及
跨所述并行处理通道的至少一部分对对应于所述第一输入矩阵行的所述多个部分累加值的一部分求和以产生第一输出向量行值。
2.根据权利要求1所述的方法,其进一步包括跨所述并行处理通道的至少一部分对对应于第二输入矩阵行的所述多个部分累加值的一部分求和以产生第二输出向量行值。
3.根据权利要求1所述的方法,其进一步包括:
将第二组多个坐标数据结构元素加载到所述计算元件,所述第二组多个坐标数据结构元素也描述所述输入矩阵的非零值;
将具有对应于所述第二组多个坐标数据结构元素的输入矩阵列号的输入向量行号的第二组输入向量值加载到所述计算元件;及
使用所述计算元件的所述多个并行处理通道来使用所述第二组多个坐标数据结构元素及所述第二组输入向量值更新所述多个部分累加值的至少一部分。
4.根据权利要求1所述的方法,其进一步包括:
确定对应于所述输入矩阵的第一数目个行的所述坐标数据结构元素的一部分,所述输入矩阵的所述第一数目个行包括所述第一输入矩阵行,所述坐标数据结构元素的所述部分包括所述第一组多个坐标数据结构元素;及
在对对应于所述第一输入矩阵行的所述多个部分累加值的所述部分求和之前,使用对应于所述输入矩阵的所述第一数目个行的所述坐标数据结构元素的所述部分更新所述多个部分累加值。
5.根据权利要求1所述的方法,所述第一组输入向量值包括具有非连续输入向量行号的多个输入向量值。
6.根据权利要求1所述的方法,其中所述多个部分累加值的所述更新包括执行写入操作,所述写入操作将所述多个部分累加值中的第一经更新部分累加值写入到第一存储器位置且将所述多个部分累加值中的第二经更新部分累加值写入到不与所述第一存储器位置连续的第二存储器位置。
7.根据权利要求1所述的方法,所述第一组输入向量值的所述加载是从计算元件存储器处的非连续存储器位置进行的聚集加载。
8.根据权利要求1所述的方法,所述多个部分累加值的所述更新包括:
将散列函数应用于所述第一输入矩阵行号以产生第一行号散列;及
使用所述第一行号散列将对应于所述第一输入矩阵行及所述多个并行处理通道中的第一处理通道的第一部分累加值写入到计算元件存储器处的第一位置。
9.根据权利要求8所述的方法,所述多个部分累加值的所述更新包括:
将所述散列函数应用于所述第一组多个坐标数据结构元素中的第二坐标数据结构的第二输入矩阵行号以产生第二行号散列;及
使用所述第一行号散列将对应于所述第二输入矩阵行及所述多个并行处理通道中的第二处理通道的第二部分累加值写入到计算元件存储器处的第二位置,所述第二位置与所述第一位置非连续,且所述第一部分累加值及所述第二部分累加值的所述写入使用分散写入操作来执行。
10.一种设备,其包括:
计算元件存储器,其包括多个存储器位置;及
计算元件,其与所述计算元件存储器通信,所述计算元件包括多个并行处理通道,所述计算元件经编程以执行包括以下者的操作:
加载第一组多个坐标数据结构元素,所述第一组多个坐标数据结构元素描述输入矩阵的非零值,所述第一组多个坐标数据结构元素中的第一坐标数据结构元素包括第一输入矩阵行号、第一输入矩阵列号以及对应于所述第一输入矩阵行号及所述第一输入矩阵列号的第一输入矩阵值;
从所述计算元件存储器加载具有对应于所述第一组多个坐标数据结构元素的输入矩阵列号的输入向量行号的第一组输入向量值;
使用所述计算元件的所述多个并行处理通道来更新分别对应于输出向量行及所述多个并行处理通道中的一者的多个部分累加值,所述更新至少部分地基于所述第一组多个坐标数据结构元素及所述第一组输入向量值;及
跨所述并行处理通道的至少一部分对对应于所述第一输入矩阵行的所述多个部分累加值的一部分求和以产生第一输出向量行值。
11.根据权利要求10所述的设备,所述操作进一步包括跨所述并行处理通道的至少一部分对对应于第二输入矩阵行的所述多个部分累加值的一部分求和以产生第二输出向量行值。
12.根据权利要求10所述的设备,所述操作进一步包括:
将第二组多个坐标数据结构元素加载到所述计算元件,所述第二组多个坐标数据结构元素也描述所述输入矩阵的非零值;
将具有对应于所述第二组多个坐标数据结构元素的输入矩阵列号的输入向量行号的第二组输入向量值加载到所述计算元件;及
使用所述计算元件的所述多个并行处理通道来使用所述第二组多个坐标数据结构元素及所述第二组输入向量值更新所述多个部分累加值的至少一部分。
13.根据权利要求10所述的设备,所述操作进一步包括:
确定对应于所述输入矩阵的第一数目个行的所述坐标数据结构元素的一部分,所述输入矩阵的所述第一数目个行包括所述第一输入矩阵行,所述坐标数据结构元素的所述部分包括所述第一组多个坐标数据结构元素;及
在对对应于所述第一输入矩阵行的所述多个部分累加值的所述部分求和之前,使用对应于所述输入矩阵的所述第一数目个行的所述坐标数据结构元素的所述部分更新所述多个部分累加值。
14.根据权利要求10所述的设备,所述第一组输入向量值包括具有非连续输入向量行号的多个输入向量值。
15.根据权利要求10所述的设备,其中所述多个部分累加值的所述更新包括执行写入操作,所述写入操作将所述多个部分累加值中的第一经更新部分累加值写入到第一存储器位置且将所述多个部分累加值中的第二经更新部分累加值写入到不与所述第一存储器位置连续的第二存储器位置。
16.根据权利要求10所述的设备,所述第一组输入向量值的所述加载是从计算元件存储器处的非连续存储器位置进行的聚集加载。
17.根据权利要求10所述的设备,所述多个部分累加值的所述更新包括:
将散列函数应用于所述第一输入矩阵行号以产生第一行号散列;及
使用所述第一行号散列将对应于所述第一输入矩阵行及所述多个并行处理通道中的第一处理通道的第一部分累加值写入到计算元件存储器处的第一位置。
18.根据权利要求17所述的设备,所述多个部分累加值的所述更新包括:
将所述散列函数应用于所述第一组多个坐标数据结构元素中的第二坐标数据结构的第二输入矩阵行号以产生第二行号散列;及
使用所述第一行号散列将对应于所述第二输入矩阵行及所述多个并行处理通道中的第二处理通道的第二部分累加值写入到计算元件存储器处的第二位置,所述第二位置与所述第一位置非连续,且所述第一部分累加值及所述第二部分累加值的所述写入使用分散写入操作来执行。
19.一种其上包括指令的机器可读媒体,所述指令在由计算机架构执行时致使所述计算机架构执行包括以下者的操作:
将第一组多个坐标数据结构元素加载到所述计算架构的计算元件,所述第一组多个坐标数据结构元素描述输入矩阵的非零值,所述第一组多个坐标数据结构元素中的第一坐标数据结构元素包括第一输入矩阵行号、第一输入矩阵列号以及对应于所述第一输入矩阵行号及所述第一输入矩阵列号的第一输入矩阵值;
将具有对应于所述第一组多个坐标数据结构元素的输入矩阵列号的输入向量行号的第一组输入向量值加载到所述计算元件;
使用所述计算元件的多个并行处理通道来更新分别对应于输出向量行及所述多个并行处理通道中的一者的多个部分累加值,所述更新至少部分地基于所述第一组多个坐标数据结构元素及所述第一组输入向量值;及
跨所述并行处理通道的至少一部分对对应于所述第一输入矩阵行的所述多个部分累加值的一部分求和以产生第一输出向量行值。
20.根据权利要求19所述的机器可读媒体,所述操作进一步包括跨所述并行处理通道的至少一部分对对应于第二输入矩阵行的所述多个部分累加值的一部分求和以产生第二输出向量行值。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/392,756 US20230056246A1 (en) | 2021-08-03 | 2021-08-03 | Parallel matrix operations in a reconfigurable compute fabric |
US17/392,756 | 2021-08-03 | ||
PCT/US2022/038784 WO2023014588A1 (en) | 2021-08-03 | 2022-07-29 | Parallel matrix operations in a reconfigurable compute fabric |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117795496A true CN117795496A (zh) | 2024-03-29 |
Family
ID=85156375
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280053768.8A Pending CN117795496A (zh) | 2021-08-03 | 2022-07-29 | 可重新配置计算组构中的并行矩阵运算 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230056246A1 (zh) |
CN (1) | CN117795496A (zh) |
WO (1) | WO2023014588A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20240232129A1 (en) * | 2023-01-10 | 2024-07-11 | RapidSilicon US, Inc | Programmable Compute Architecture |
CN116150563B (zh) * | 2023-02-24 | 2024-01-05 | 之江实验室 | 一种业务执行方法、装置、存储介质及电子设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3338043B2 (ja) * | 2000-11-02 | 2002-10-28 | 株式会社ソニー・コンピュータエンタテインメント | 並列演算装置、エンタテインメント装置、演算処理方法、コンピュータプログラム、半導体デバイス |
US7568059B2 (en) * | 2004-07-08 | 2009-07-28 | Asocs Ltd. | Low-power reconfigurable architecture for simultaneous implementation of distinct communication standards |
US9557995B2 (en) * | 2014-02-07 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing segmented operations |
CN109376114B (zh) * | 2016-11-03 | 2022-03-15 | 中科寒武纪科技股份有限公司 | Slam运算装置和方法 |
US10896141B2 (en) * | 2019-03-26 | 2021-01-19 | Intel Corporation | Gather-scatter cache architecture having plurality of tag and data banks and arbiter for single program multiple data (SPMD) processor |
US11057318B1 (en) * | 2019-08-27 | 2021-07-06 | Innovium, Inc. | Distributed artificial intelligence extension modules for network switches |
US11182458B2 (en) * | 2019-12-12 | 2021-11-23 | International Business Machines Corporation | Three-dimensional lane predication for matrix operations |
-
2021
- 2021-08-03 US US17/392,756 patent/US20230056246A1/en active Pending
-
2022
- 2022-07-29 WO PCT/US2022/038784 patent/WO2023014588A1/en active Application Filing
- 2022-07-29 CN CN202280053768.8A patent/CN117795496A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2023014588A1 (en) | 2023-02-09 |
US20230056246A1 (en) | 2023-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11782725B2 (en) | Mask field propagation among memory-compute tiles in a reconfigurable architecture | |
US11675588B2 (en) | Tile-based result buffering in memory-compute systems | |
CN114691354A (zh) | 动态分解及线程分配 | |
CN114691317A (zh) | 可重新配置的计算结构中的循环执行 | |
CN118043815A (zh) | 调试数据流计算机架构 | |
CN117795496A (zh) | 可重新配置计算组构中的并行矩阵运算 | |
CN117296048A (zh) | 传输具有不同延时的请求类型 | |
CN118076944A (zh) | 可重新配置计算组构中的循环执行期间的数据存储 | |
CN118119933A (zh) | 用于触发协作进程的提前终止的机制 | |
CN117581200A (zh) | 在分派期间从存储器加载数据 | |
US20240086324A1 (en) | High bandwidth gather cache | |
CN117435545A (zh) | 用于请求计算系统中的原子操作的方法和系统 | |
CN117632256A (zh) | 用于处置多元件处理器中的断点的装置及方法 | |
CN117435549A (zh) | 用于硬件组件之间的通信的方法和系统 | |
CN118647984A (zh) | 到计算组构中的节点的内核映射 | |
US11698853B2 (en) | Saturating local cache in memory-compute systems | |
CN115705167A (zh) | 在可重新配置计算结构中对外部存储器进行索引 | |
CN118043792A (zh) | 提供事件消息的可靠接收的机制 | |
CN118140209A (zh) | 可重新配置计算组构中的循环执行 | |
CN117546133A (zh) | 缓解具有多个存储器控制器的系统上的存储器热点 | |
CN118056181A (zh) | 链式资源锁定 | |
WO2023278016A1 (en) | Efficient complex multiply and accumulate | |
CN117280332A (zh) | 通过具有多个片上系统的结构避免死锁 | |
US11861366B2 (en) | Efficient processing of nested loops for computing device with multiple configurable processing elements using multiple spoke counts | |
CN118043794A (zh) | 粗粒度可重新配置的架构中的连接性 |
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 |