掌桥专利:专业的专利平台
掌桥专利
首页

封装条件分支操作

文献发布时间:2023-06-19 18:35:48


封装条件分支操作

技术领域

大体来说,本申请涉及计算机架构。更具体地说,本申请涉及封装条件分支操作。

背景技术

例如冯诺伊曼(Von Neumann)架构的各种计算机架构常规地使用用于数据的共享存储器、用于存取共享存储器的总线、算术单元以及程序控制单元。然而,在处理器与存储器之间移动数据可能需要大量时间和能量,这又可能约束计算机系统的性能和容量。鉴于这些限制,需要新的计算架构和装置来提高计算性能,使其超出晶体管缩放的实践(即,摩尔定律(Moore's Law))。

发明内容

在一个方面中,本申请提供一种装置,其包括:处理器;存储器,所述存储器存储指令,所述指令在由所述处理器执行时使得所述处理器执行包括以下各项的操作:从存储器装置读取操作代码;在所述存储器装置中从操作代码的一部分生成第一有向非循环图数据结构,所述第一有向非循环图对所述代码的条件语句的第一分支的程序流进行建模;在所述存储器装置中从操作代码的所述部分生成第二有向非循环图数据结构,所述第二有向非循环图对所述条件语句的第二分支的程序流进行建模;在所述存储器装置中初始化评分表数据结构,所述评分表数据结构包括多个单元格,所述多个单元格由对应于所述第一有向非循环图数据结构中的节点数目的列数目和对应于所述第二有向非循环图数据结构中的节点数目的行数目定义;对于所述评分表数据结构中对应于所述第一有向非循环图数据结构中的第一节点和所述第二有向非循环图数据结构中的第二节点的每一单元格,将基于评分函数而计算的分数写入到所述存储器装置,所述评分函数使用所述评分表数据结构中的一或多个先前评分单元格中的分数,所述单元格对应于所述第一有向非循环图数据结构和所述第二有向非循环图数据结构中由至少一个边缘分别连接到所述第一节点和所述第二节点的节点;对于所述评分表数据结构中的每一单元格,将所述第一节点和所述第二节点的每一传入边缘的最佳映射的标识符存储在所述存储器装置中;确定所述评分表数据结构中用于回溯程序的开始单元格;使用所述最佳映射的所述标识符从具有最高分数的单元格回溯以产生组合图;以及基于所述组合图将指令集封装在目标代码中,所述目标代码被配置成当在粗粒度可重配置阵列中执行时使得所述指令集中的指令在所述粗粒度可重配置阵列的处理单元处有条件地执行。

在另一方面中,本申请提供一种方法,其包括:从存储器装置读取操作代码;在所述存储器装置中从操作代码的一部分生成第一有向非循环图数据结构,所述第一有向非循环图对所述代码的条件语句的第一分支的程序流进行建模;在所述存储器装置中从操作代码的所述部分生成第二有向非循环图数据结构,所述第二有向非循环图对所述条件语句的第二分支的程序流进行建模;在所述存储器装置中初始化评分表数据结构,所述评分表数据结构包括多个单元格,所述多个单元格由对应于所述第一有向非循环图数据结构中的节点数目的列数目和对应于所述第二有向非循环图数据结构中的节点数目的行数目定义;对于所述评分表数据结构中对应于所述第一有向非循环图数据结构中的第一节点和所述第二有向非循环图数据结构中的第二节点的每一单元格,将基于评分函数而计算的分数写入到所述存储器装置,所述评分函数使用所述评分表数据结构中的一或多个先前评分单元格中的分数,所述单元格对应于所述第一有向非循环图数据结构和所述第二有向非循环图数据结构中由至少一个边缘分别连接到所述第一节点和所述第二节点的节点;对于所述评分表数据结构中的每一单元格,将所述第一节点和所述第二节点的每一传入边缘的最佳映射的标识符存储在所述存储器装置中;确定所述评分表数据结构中用于回溯程序的开始单元格;使用所述最佳映射的所述标识符从具有最高分数的单元格回溯以产生组合图;以及基于所述组合图将指令集封装在目标代码中,所述目标代码被配置成当在粗粒度可重配置阵列中执行时使得所述指令集中的指令在所述粗粒度可重配置阵列的处理单元处有条件地执行。

在另一方面中,本申请提供一种非暂时性机器可读媒体,其存储指令,所述指令在由机器执行时使得所述机器执行包括以下各项的操作:从存储器装置读取操作代码;在所述存储器装置中从操作代码的一部分生成第一有向非循环图数据结构,所述第一有向非循环图对所述代码的条件语句的第一分支的程序流进行建模;在所述存储器装置中从操作代码的所述部分生成第二有向非循环图数据结构,所述第二有向非循环图对所述条件语句的第二分支的程序流进行建模;在所述存储器装置中初始化评分表数据结构,所述评分表数据结构包括多个单元格,所述多个单元格由对应于所述第一有向非循环图数据结构中的节点数目的列数目和对应于所述第二有向非循环图数据结构中的节点数目的行数目定义;对于所述评分表数据结构中对应于所述第一有向非循环图数据结构中的第一节点和所述第二有向非循环图数据结构中的第二节点的每一单元格,将基于评分函数而计算的分数写入到所述存储器装置,所述评分函数使用所述评分表数据结构中的一或多个先前评分单元格中的分数,所述单元格对应于所述第一有向非循环图数据结构和所述第二有向非循环图数据结构中由至少一个边缘分别连接到所述第一节点和所述第二节点的节点;对于所述评分表数据结构中的每一单元格,将所述第一节点和所述第二节点的每一传入边缘的最佳映射的标识符存储在所述存储器装置中;确定所述评分表数据结构中用于回溯程序的开始单元格;使用所述最佳映射的所述标识符从具有最高分数的单元格回溯以产生组合图;以及基于所述组合图将指令集封装在目标代码中,所述目标代码被配置成当在粗粒度可重配置阵列中执行时使得所述指令集中的指令在所述粗粒度可重配置阵列的处理单元处有条件地执行。

附图说明

为了容易地标识对任何特定元件或动作的论述,参考标号中的最高有效数字是指首次引入所述元件的参考标号。

图1大体示出根据实施例的在存储器计算系统的上下文中的第一存储器计算装置的第一实例。

图2大体示出根据实施例的存储器计算装置的存储器子系统的实例。

图3大体示出根据实施例的用于存储器控制器的可编程原子单元的实例。

图4示出根据实施例的存储器计算装置的混合线程处理器(HTP)加速器的实例。

图5示出根据实施例的存储器计算装置的混合线程网状架构(HTF)的表示的实例。

图6A大体示出根据实施例的小芯片系统的实例。

图6B大体示出了示出来自图6A的实例的小芯片系统中的各种组件的框图。

图7大体示出根据实施例的用于存储器计算装置的基于小芯片的实施方案的实例。

图8示出根据实施例的存储器计算装置小芯片的实例平铺。

图9示出根据本公开的一些实例的表示真分支、假分支和实例已封装指令DAG的三个DAG。

图10示出根据本公开的一些实例的评分矩阵或表1004。

图11示出根据本公开的一些实例的已填写评分矩阵。

图12示出根据本公开的一些实例的确定指令封装的方法的流程图。

图13示出根据本公开的一些实例的指令封装组件的示意图。

图14示出实例机器1600的框图,可利用所述机器、在所述机器中或通过所述机器实施本文中所论述的任何一或多种技术(例如,方法)。

具体实施方式

可利用材料、装置和集成技术中的最新进展来提供以存储器为中心的计算拓扑。此类拓扑可实现例如用于受大小、重量或功率要求约束的应用的计算效率和工作负载处理量的进展。拓扑可用于促进存储器或其它数据存储元件附近或内部的低时延计算。方法可尤其非常适合于利用稀疏查找的各种计算密集操作,例如在变换计算(例如,快速傅立叶变换计算(FFT))中,或在例如神经网络或人工智能(AI)、金融分析或模拟或建模等应用中,所述模拟或建模例如用于计算流体动力学(CFD)、增强型工程师声学模拟器(EASE)、以集成电路为重心的模拟程序(SPICE)等。

本文中所论述的系统、装置和方法可包含或使用具有处理器或处理能力的存储器计算系统,所述处理器或处理能力提供于存储器或数据存储组件中、附近或与存储器或数据存储组件集成。此类系统在本文中通常被称为近存储器计算(CNM)系统。CNM系统可为基于节点的系统,其中系统中的个别节点使用系统缩放网状架构来耦合。尤其在预期高的高速缓存未命中速率的环境中,每一节点可包含或使用专用或通用处理器以及用户可存取加速器,其具有用以促进密集操作的自定义计算网状架构。

在实例中,CNM系统中的每一节点可具有一或多个主机处理器。在每一节点内,专用混合线程处理器可占用片上网络的离散端点。混合线程处理器可对系统的特定节点中的存储器中的一些或全部进行存取,或混合线程处理器可经由系统缩放网状架构对跨多个节点的网络的存储器进行存取。每一节点处的自定义计算网状架构或混合线程网状架构可具有其自身的处理器或加速器,且可在比混合线程处理器更高的带宽下操作。近存储器计算系统中的不同节点可不同地配置,例如具有不同计算能力、不同类型的存储器、不同接口或其它差异。然而,节点可共同耦合以共享所定义地址空间内的数据和计算资源。

在实例中,近存储器计算系统或系统内的节点可经用户配置以用于自定义操作。用户可使用例如C/C++等高级编程语言来提供指令,所述高级编程语言可编译且直接映射到系统的或CNM系统中的一或多个节点的数据流架构中。也就是说,系统中的节点可包含硬件块(例如,存储器控制器、原子单元、其它客户加速器等),所述硬件块可被配置成直接实施或支持用户指令以由此增强系统性能且减少时延。

在实例中,近存储器计算系统可尤其适合于实施指令和嵌套循环的层次结构(例如,两个、三个或更多个循环深度,或多维循环)。标准编译程序可用于接受高级语言指令,且进而直接编译到节点中的一或多个的数据流架构中。举例来说,系统中的节点可包含混合线程网状架构加速器。混合线程网状架构加速器可在CNM系统的用户空间中执行,且可发起其自身的线程或子线程,所述线程或子线程可并行地操作。每一线程可映射到不同循环迭代,由此支持多维循环。利用发起此类嵌套循环的能力以及其它能力,CNM系统可实现对计算密集操作的明显时间节省和时延改进。

近存储器计算系统或近存储器计算系统的节点或组件可包含或使用各种存储器装置、控制器和互连件等。在实例中,系统可包括各种互连节点,且节点或节点群组可使用小芯片来实施。小芯片是一种用于集成各种处理功能性的新兴技术。一般来说,小芯片系统由集成在中介层上且封装在一起的离散芯片(例如,不同衬底或裸片上的集成电路(IC))构成。这种布置不同于单芯片(例如,IC),所述单芯片在一个衬底(例如,单个裸片)上含有不同装置块(例如,知识产权(IP)块),例如片上系统(SoC),或集成在板上的离散封装装置。一般来说,小芯片提供相较于单裸片芯片的生产效益,包含更高的良率或降低的开发成本。下文所论述的图6A和图6B大体示出例如可包括近存储器计算系统的小芯片系统的实例。

如所提到,CNM系统可包含数据流架构。数据流架构通过在二维平铺块阵列上布置指令来对程序进行编码。为了支持条件指令,每一ALU操作还输出平铺块控制逻辑可对其操作的条件代码。当执行的主要路径将执行指令RAM中的第i个指令时,当条件代码为假时,控制将改为选择第i+1个指令。为了使此方案有效地起作用,需要调度程序以使得真分支上的操作与假分支上的操作在时隙中配对,其中任一操作都有足够的硬件资源可用。本发明描述用于有效地解决此封装问题的方法。

在一些实例中,公开使用改进的动态编程算法来封装条件分支指令的系统、方法、装置和机器可读媒体。条件代码分支可建模为具有拓扑排序的有向非循环图(DAG)。这些DAG可用于构造动态编程表以使用动态编程算法发现一个路径到另一路径上的映射。此映射可用于封装供数据流处理器执行的指令。

传统的动态编程算法,例如史密斯-沃特曼(Smith-Waterman)算法,被设计成发现串序列中的共性,但对DAG并不起作用,因为DAG在每一步骤或一或多个空位处假设单个前置字符。在DAG中,每一节点可具有多个前置节点且可能不连续。也就是说,节点x+1可能不与节点x共享路径。

举例来说,史密斯-沃特曼算法用于对两个字符串执行局部序列对准。在史密斯-沃特曼算法中,评分矩阵内置有表示第一序列中的字符的列和表示第二序列中的字符的行。每一行和列表示序列的不同字符之间的相交点。当计算每一特定单元格的分数时,算法将分数计算为以下中的最大值:零;来自左上方相邻单元格的分数(其表示两个序列的递增)与评估行中的字符是否与列中的字符匹配的匹配分数的和;特定单元格左侧的单元格中的分数(其表示序列中表示行的跳过)减去空位罚分;以及特定单元格的顶部相邻单元格的分数(其表示序列中表示列的跳过)减去空位罚分。一旦填充了评分表,算法就通过从评分矩阵中的最高评分单元格开始来回溯;然后递归地选择具有最高分数的选定单元格的左侧、对角左侧或顶部的单元格,且最后具有分数零的矩阵单元格处结束。一直向对角左侧移动表示选择行和列中的字符;向左移动表示选择列中的字符但选择行中的空位;且向上移动表示选择行中的字符但选择列中的序列中的空位。尼德曼-翁施(Needleman-Wunsch)是类似的,不同之处在于在评分期间,保存了产生最高分数的前置单元格(例如,左侧、顶部或顶部对角左侧的单元格)。在回溯期间,尼德曼-翁施算法从最右下角的单元格开始,且跨由保存的前置单元格指示的路径返回。

与字符序列相比,DAG可具有到特定节点的多个路径。实际上,还有可能的是,两个邻近节点不会共享图中的边缘,因为拓扑排序并不意味着所有操作是相关的。在本公开中,创建评分表,其中行表示第一DAG上的节点且列表示第二DAG上的节点。因此,每一单元格表示第一DAG上的节点x和第二DAG上的第二节点y。当前公开的算法在对单元格进行评分时不只是考虑史密斯-沃特曼或尼德曼-翁施算法中的三个相邻单元格,而是将图结构考虑在内。

最后,所述表不仅记录最优选择,还存储每一传入边缘的最佳映射。这是为了启用将产生最终映射的算法的最终回溯阶段。由于可能存在多个输入进入的多个操作,因此算法需要至少产生来自此节点的许多路径才能够映射DAG中的所有操作。

图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可缩放以包含多节点配置。也就是说,可使用缩放网状架构106耦合第一存储器计算节点104的或其它不同地配置的存储器计算节点的多个不同例项,以提供缩放系统。存储器计算节点中的每一个可运行其自身的操作系统,且可被配置成联合地协调系统范围内的资源使用。

在图1的实例中,第一存储器计算节点104的第一交换机110耦合到缩放网状架构106。缩放网状架构106可提供可促进不同存储器计算节点当中及之间的通信的交换机(例如,CTCPI交换机、PCIe交换机、CPI交换机或其它交换机)。在实例中,缩放网状架构106可有助于分区全局地址空间(PGAS)中的各种节点通信。

在实例中,来自第一存储器计算节点104的第一交换机110耦合到一或多个不同存储器计算装置,例如包含第一存储器计算装置112。第一存储器计算装置112可包括基于小芯片的架构,其在本文中称为近存储器计算(CNM)小芯片。第一存储器计算装置112的封装版本可包含例如一或多个CNM小芯片。小芯片可使用CTCPI以通信方式耦合以用于高带宽和低时延。

在图1的实例中,第一存储器计算装置112可包含片上网络(NOC)或第一NOC 118。通常,NOC是装置内的互连网络,其连接一组特定端点。在图1中,第一NOC 118可提供第一存储器计算装置112的各种存储器、计算资源和端口之间的通信及连接。

在实例中,第一NOC 118可包括折叠式克洛斯(Clos)拓扑,例如在存储器计算装置的每一例项内,或作为在节点中耦合多个存储器计算装置的网格。克洛斯拓扑提供各种益处,例如可使用多个较小基数交叉开关以提供与较高基数交叉开关拓扑相关联的功能性。举例来说,克洛斯拓扑可跨NOC展现一致的时延和对分带宽。

第一NOC 118可包含各种不同交换机类型,包含集线交换机、边缘交换机和端点交换机。交换机中的每一个可构造为在输入与输出节点之间提供基本上均一的时延和带宽的交叉开关。在实例中,端点交换机和边缘交换机可包含两个分开的交叉开关,一个交叉开关的流量去往集线交换机,且另一交叉开关的流量远离集线交换机。集线交换机可构造为将所有输入切换到所有输出的单个交叉开关。

在实例中,集线交换机可例如取决于特定集线交换机是否参与芯片间通信而各自具有多个端口(例如,各自四个或六个端口)。参与芯片间通信的集线交换机的数目可由芯片间带宽要求设置。

第一NOC 118可支持计算元件与存储器之间的各种有效负载(例如,8到64字节有效负载;可类似地使用其它有效负载大小)。在实例中,可针对相对较小有效负载(例如,8到16字节)优化第一NOC 118,以有效地处置对稀疏数据结构的存取。

在实例中,第一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包含DRAM控制器,其被配置成与例如包含DRAM装置的第一存储器装置128介接。存储器控制器130可提供存取调度和位错误管理,以及其它功能。

在实例中,第一NOC 118可耦合到混合线程处理器(HTP 140)、混合线程网状架构(HTF 142)以及主机接口和分派模块(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可在与例如正常存储器读取或写入操作相同的处理量下执行原子。在实例中,原子存储器操作可包含以下的组合:将数据存储到存储器,执行原子存储器操作,以及接着以从存储器加载数据来作出响应。

可提供例如可包含SRAM高速缓存的本地高速缓存模块212以帮助减少用于反复存取的存储器位置的时延。在实例中,本地高速缓存模块212可提供用于子存储器线存取的读取缓冲器。本地高速缓存模块212可尤其有利于具有相对较小的数据高速缓存或无数据高速缓存的计算元件。

例如可包含DRAM控制器的存储器控制模块210可提供低级请求缓冲和调度,以便提供对存储器装置204(例如可包含DRAM装置)的有效存取。在实例中,存储器装置204可包含或使用GDDR6 DRAM装置,例如具有16Gb密度和64Gb/秒峰值带宽。可类似地使用其它装置。

在实例中,可编程原子单元208可包括单周期或多周期运算符,其例如可被配置成执行整数加法或更复杂的多指令操作,例如布隆过滤器(bloom filter)插入。在实例中,可编程原子单元208可被配置成执行加载和存储到存储器操作。可编程原子单元208可被配置成通过一组专用指令利用RISC-V ISA,以促进与控制器202的交互,从而以原子方式执行用户定义的操作。

可经由第二NOC 206和控制器202将例如从节点上或节点外主机接收到的可编程原子请求路由到可编程原子单元208。在实例中,自定义原子操作(例如,由可编程原子单元208进行)可与内置原子操作(例如,由内置原子模块214进行)相同,不同之处在于可编程原子操作可由用户而非系统架构师定义或编程。在实例中,可编程原子请求分组可通过第二NOC 206发送到控制器202,且控制器202可将请求识别为自定义原子。控制器202可接着将所标识请求转发到可编程原子单元208。

图3大体示出根据实施例的供与存储器控制器一起使用的可编程原子单元302的实例。在实例中,可编程原子单元302可包括或对应于来自图2的实例的可编程原子单元208。也就是说,图3示出可编程原子单元(PAU)302的实例中的组件,例如上文关于图2(例如,可编程原子单元208中的)或关于图1(例如,存储器控制器130的原子操作模块中的)提及的组件。如图3中所说明,可编程原子单元302包含PAU处理器或PAU核心306、PAU线程控制304、指令SRAM 308、数据高速缓存310和存储器接口312以与存储器控制器314介接。在实例中,存储器控制器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本地的存储器中的存储器中(例如,在分区表中)。

在实例中,原子运算符操纵数据高速缓存310,当用于原子运算符的线程完成时,所述数据高速缓存通常被同步(例如,刷新)。因此,除从例如存储器控制器314的外部存储器初始加载以外,在可编程原子运算符线程的执行期间,对于大多数存储器操作,时延可减少。

如果潜在的危险条件会阻止存储器请求,那么在执行线程尝试发出此类请求时,流水线处理器(例如PAU核心306)可能会遇到问题。此处,存储器请求为从存储器控制器314检索数据,无论其是来自存储器控制器314上的高速缓存还是裸片外存储器。为了解决这一问题,PAU核心306被配置成拒绝对线程的存储器请求。通常,PAU核心306或线程控制304可包含用以启用流水线中的一或多个线程重新调度点的电路系统。此处,拒绝发生在流水线中这些线程重新调度点之外(例如,之后)的点处。在实例中,危险发生在重新调度点之外。此处,在存储器请求指令通过可作出存储器请求的流水线阶段之前的最后一个线程重新调度点之后,线程中的前一指令产生了危险。

在实例中,为了拒绝存储器请求,PAU核心306被配置成确定(例如,检测)存储器请求中指示的存储器上存在危险。此处,危险表示允许(例如,执行)存储器请求会引起线程的不一致状态的任何条件。在实例中,危险是进行中的存储器请求。此处,无论数据高速缓存310是否包含所请求的存储器地址的数据,进行中的存储器请求的存在使得不确定数据高速缓存310中所述地址处的数据应该是什么。因此,线程必须等待进行中的存储器请求完成才能对当前数据进行操作。当存储器请求完成时,危险被清除。

在实例中,危险是数据高速缓存310中用于所请求的存储器地址的脏高速缓存线。虽然脏高速缓存线通常指示高速缓存中的数据是当前的且此数据的存储器控制器版本不是,但不从高速缓存中操作的线程指令可能会出现问题。此指令的实例使用存储器控制器314的内置原子运算符或其它单独硬件块。在存储器控制器的上下文中,内置原子运算符可与可编程原子单元302分开,且无法对PAU内部的数据高速缓存310或指令SRAM 308进行存取。如果高速缓存线为脏的,那么内置原子运算符不会对最新数据进行操作,直到数据高速缓存310刷新以使高速缓存与另一或裸片外存储器同步为止。这种同样的情况也可能发生在存储器控制器的其它硬件块上,所述硬件块例如密码块、编码器等。

图4示出混合线程处理器(HTP)加速器或HTP加速器400的实例。HTP加速器400可包括根据实施例的存储器计算装置的一部分。在实例中,HTP加速器400可包含或包括来自图1的实例的HTP 140。HTP加速器400包含例如HTP核心402、指令高速缓存404、数据高速缓存406、转译块408、存储器接口410和线程控制器412。HTP加速器400可进一步包含例如用于与NOC介接的分派接口414和NOC接口416,所述NOC例如来自图1的实例的第一NOC 118、来自图2的实例的第二NOC 206或其它NOC。

在实例中,HTP加速器400包含基于RISC-V指令集的模块,且可包含相对较少数目的其它或额外自定义指令以支持低开销的具有线程化功能的混合线程(HT)语言。HTP加速器400可包含高度线程化处理器核心,HTP核心402,在所述HTP核心中或利用所述HTP核心,线程可在单个指令轮换中执行,以便维持高指令处理量。在实例中,线程可在其等待其它待决事件完成时暂停。这可允许计算资源有效地用于相关工作,而不是轮询。在实例中,多线程屏障同步可使用有效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上高速缓存的数据具有各种益处,包含使更大的存取对存储器控制器更有效,从而允许执行线程避免停滞。然而,有时使用高速缓存会使得效率低下。实例包含仅存取数据一次的存取,且引起高速缓存线的颠簸(thrashing)。为了帮助解决这一问题,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示出根据实施例的存储器计算装置的混合线程网状架构(HTF)或HTF 500的表示的实例。在实例中,HTF 500可包含或包括来自图1的实例的HTF 142。HTF 500为粗粒度可重配置计算网状架构,其可针对高级语言操作数类型和运算符(例如,使用C/C++或其它高级语言)而优化。在实例中,HTF 500可包含互连硬化SIMD算术单元的可配置n位宽(例如,512位宽)数据路径。

在实例中,HTF 500包括HTF集群502,其包含多个HTF平铺块,包含实例平铺块504或平铺块N。每一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 IN N+1的端口耦合到平铺块N+1,以及经由标记为SF IN N+2的端口耦合到平铺块N+2。实例平铺块504可经由相应输出端口(例如标记为SF OUT N-1、SF OUT N-2、SF OUT N+1和SF OUT 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的实例中,使用同步网状架构(SF)来耦合HTF集群502中的平铺块。同步网状架构可提供HTF集群502中的特定平铺块与其相邻平铺块之间的通信,如上文所描述。每一HTF集群502可进一步包含异步网状架构(AF),所述异步网状架构可提供例如集群中的平铺块、集群中的存储器接口以及集群中的分派接口508当中的通信。

在实例中,同步网状架构可交换包含数据和控制信息的消息。控制信息可尤其包含指令RAM地址信息或线程标识符。控制信息可用于设置数据路径,且可选择数据消息字段作为路径的源。通常,可较早地提供或接收控制字段,使得其可用于配置数据路径。举例来说,为了帮助最小化通过平铺块中的同步域流水线的任何延迟,控制信息可在数据字段之前的几个时钟周期到达平铺块。可提供各种寄存器以帮助协调流水线中的数据流定时。

在实例中,HTF集群502中的每一平铺块可包含多个存储器。每一存储器可具有与数据路径相同的宽度(例如,512位),且可具有例如介于512到1024个元素范围内的指定深度。平铺块存储器可用于存储支持数据路径操作的数据。举例来说,所存储的数据可包含作为内核的集群配置的部分加载的常量,或可包含计算为数据流的部分的变量。在实例中,平铺块存储器可作为来自另一同步域的数据传送而从异步网状架构写入,或可包含例如由另一同步域发起的加载操作的结果。可经由同步域中的同步数据路径指令执行读取平铺块存储器。

在实例中,HTF集群502中的每一平铺块可具有专用指令RAM(INST RAM)。在具有十六个平铺块的HTF集群502和具有六十四个条目的指令RAM例项的实例中,集群可允许算法映射具有多达1024个乘法-移位和/或ALU操作。各种平铺块可例如使用同步网状架构任选地一起流水线化,以允许利用最小存储器存取的数据流计算,因此使时延最小化且降低功耗。在实例中,异步网状架构可允许存储器参考与计算并行地继续进行,由此提供更有效的流式传输内核。在实例中,各种平铺块可包含对基于循环的构造的内置支持,且可支持嵌套循环内核。

同步网状架构可允许多个平铺块流水线化,例如不需要数据队列。参与同步域的平铺块可例如充当单个流水线化数据路径。同步域的第一或基础平铺块(例如,平铺块N-2,在图5的实例中)可通过流水线化平铺块发起工作线程。基础平铺块可负责以在本文中称为辐条计数(Spoke Count)的预定义节奏(cadence)开始工作。举例来说,如果辐条计数为3,那么基础平铺块可每隔两个时钟周期发起工作。

在实例中,同步域包括HTF集群502中的一组已连接平铺块。线程的执行可在域的基础平铺块处开始,且可经由同步网状架构从基础平铺块前进到同一域中的其它平铺块。基础平铺块可提供要对第一平铺块执行的指令。第一平铺块可默认地为其它已连接平铺块提供要执行的相同指令。然而,在一些实例中,基础平铺块或后续平铺块可有条件地指定或使用替代指令。替代指令可通过使平铺块的数据路径产生布尔(Boolean)条件值来选择,且接着可使用布尔值在当前平铺块的指令集与交替指令之间进行选择。

异步网状架构可用于执行相对于同步域异步地发生的操作。HTF集群502中的每一平铺块可包含到异步网状架构的接口。入接口可包含例如FIFO缓冲器或队列(例如,AF INQUEUE),以针对无法立即处理的消息提供存储。类似地,异步网状架构的出接口可包含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或其它组合件可针对特定功能的功率、速度或发热进行优化,如同传感器可能发生的情况一样,相比于在单个裸片上尝试与其它装置集成,所述IC或其它组合件可更容易地与其它装置集成。此外,通过减小裸片的整体大小,小芯片的良率往往高于更复杂的单裸片装置的良率。

图6A和图6B大体示出根据实施例的小芯片系统的实例。图6A是安装在外围板604上的小芯片系统602的表示,所述外围板可例如通过外围组件互连高速(PCIe)连接到更广泛的计算机系统。小芯片系统602包含封装衬底606、中介层608和四个小芯片,应用小芯片610、主机接口小芯片612、存储器控制器小芯片614和存储器装置小芯片616。其它系统可包含许多额外小芯片以提供额外功能性,如将从以下论述中显而易见。小芯片系统602的封装以封盖或盖板618示出,但可使用用于小芯片系统的其它封装技术和结构。图6B是出于清楚起见标记小芯片系统中的组件的框图。

应用小芯片610示出为包含用以支持用于小芯片间通信的小芯片网络622的小芯片系统NOC 620。在实例实施例中,小芯片系统NOC 620可包含于应用小芯片610上。在实例中,可响应于选定的支持小芯片(例如,主机接口小芯片612、存储器控制器小芯片614和存储器装置小芯片616)而定义来自图1的实例的第一NOC 118,因此使得设计者能够为小芯片系统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主体或从属。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单元(即,40个TX和40个RX)的增量配置,并且针对DDR模式以40个I/O单元的增量配置。CPI流协议可在SDR或DDR操作模式中使用AIB信道。此处,在实例中,AIB信道针对SDR和DDR模式两者以40个I/O单元为增量。在实例中,向每一AIB信道指派唯一的接口标识符。所述标识符在CPI复位和初始化期间用于确定跨邻近小芯片的成对AIB信道。在实例中,接口标识符是包括七位小芯片标识符、七位列标识符和六位链路标识符的20位值。AIB物理层使用AIB带外移位寄存器来传输接口标识符。使用移位寄存器的位32到51跨AIB接口在两个方向上传送20位接口标识符。

AIB将堆叠的一组AIB信道定义为AIB信道列。AIB信道列具有一定数目的AIB信道,外加辅助信道。辅助信道含有用于AIB初始化的信号。列内的所有AIB信道(辅助信道除外)具有相同配置(例如,全部为TX、全部为RX或者一半为TX且一半为RX,并且具有相同数目的数据I/O信号)。在实例中,从邻近于AUX信道的AIB信道开始,以连续增大次序对AIB信道编号。邻近于AUX的AIB信道被定义为AIB信道零。

通常,个别小芯片上的CPI接口可包含串行化-反串行化(SERDES)硬件。SERDES互连非常适用于需要高速信令和低信号计数的情境。然而,对于多路复用和解复用、错误检测或校正(例如,使用块级循环冗余校验(CRC))、链路级重试或前向错误校正,SERDES可能会引起额外的功耗和更长的时延。然而,当低时延或能耗是超短距离小芯片到小芯片互连的主要关注点时,可利用时钟速率允许以最少时延进行数据传送的并行接口。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(GDDR6 SDRAM)等。非易失性存储器装置的实例包含但不限于与非(NAND)型快闪存储器、存储类存储器(例如,相变存储器或基于忆阻器的技术)、铁电RAM(FeRAM)等。所示实例包含作为小芯片的存储器装置小芯片616,然而,装置可驻留在其它地方,例如在外围板604上的不同封装中。对于许多应用,可提供多个存储器装置小芯片。在实例中,这些存储器装置小芯片可各自实施一或多种存储技术,且可包含集成计算主机。在实例中,存储器小芯片可包含不同技术的多个堆叠存储器裸片,例如与一或多个动态随机存取存储器(DRAM)装置堆叠或以其它方式通信的一或多个静态随机存取存储器(SRAM)装置。在实例中,存储器控制器小芯片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的实例的HTF 142或来自图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)。在实例中,使用各种CPI、PCIe、CXL或其它网状架构将第一CNM封装700耦合到的装置可构成共同全局地址空间。

在图7的实例中,第一CNM封装700包含主机接口724(HIF)和主机处理器(R5)。主机接口724可对应于例如来自图1的实例的HIF 120。主机处理器或R5可对应于来自图1的实例的内部主机处理器122。主机接口724可包含用于将第一CNM封装700耦合到其它外部装置或系统的PCI接口。在实例中,工作可通过主机接口724在第一CNM封装700或第一CNM封装700内的平铺块集群上发起。举例来说,主机接口724可被配置成命令个别HTF平铺块集群(例如在第一CNM封装700中的各种小芯片当中)进入和退出功率/时钟门模式。

图8示出根据实施例的存储器计算装置的实例平铺。在图8中,平铺的小芯片实例800包含小芯片的不同近存储器计算集群的四个例项,其中集群耦合在一起。近存储器计算小芯片的每一例项自身可包含一或多个构成小芯片(例如,主机处理器小芯片、存储器装置小芯片、接口小芯片等)。

平铺的小芯片实例800包含来自图7的实例的第一CNM封装700的例项作为其近存储器计算(CNM)集群中的一或多个。举例来说,平铺的小芯片实例800可包含第一CNM集群802,其包含第一小芯片810(例如,对应于第一小芯片702)、第二小芯片812(例如,对应于第二小芯片704)、第三小芯片814(例如,对应于第三小芯片706)和第四小芯片816(例如,对应于第四小芯片708)。第一CNM集群802中的小芯片可耦合到共同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中的近存储器计算小芯片中的一个可包含主机接口(例如,对应于来自图7的实例的主机接口724),其负责跨平铺的小芯片实例800的工作负载平衡。主机接口可促进例如从平铺的小芯片实例800外部对基于主机的命令请求队列和响应队列的存取。主机接口可在平铺的小芯片实例800中的近存储器计算小芯片中的一或多个中使用混合线程处理器和混合线程网状架构来分派新执行线程。

如先前所描述,混合线程网状架构数据流架构可通过在二维平铺块阵列上布置指令来对程序进行编码。为了支持条件指令,每一ALU操作还输出平铺块控制逻辑可对其操作的条件代码。当执行的主要路径将执行指令RAM中的第i个指令时,当条件代码为假时,控制将改为选择第i+1个指令。为了使此方案有效地起作用,需要调度程序以使得真分支上的操作与假分支上的操作在时隙中配对,其中任一操作都有足够的硬件资源可用。也就是说,两个指令加载到HTF中的平铺块上,且所述平铺块基于条件的结果执行指令。这些指令可以多种不同配置封装,一些配置比其它配置更有效。本发明描述用于有效地解决此封装问题的方法。

条件代码分支可建模为具有拓扑排序的有向非循环图(DAG)。这些DAG可用于构造动态编程表以使用动态编程算法发现一个路径到另一路径上的部分映射。传统的动态编程算法,例如史密斯-沃特曼算法,对DAG并不起作用,因为DAG在每一步骤(或一或多个空位)处假设单个前置。举例来说,用于对两个字符串执行局部序列对准的史密斯-沃特曼算法将评分矩阵的每一点处的左相邻单元格、对角左侧相邻单元格和顶部相邻单元格视为评分函数的输入,以选择为所述单元格产生最优分数的映射。当将两个DAG映射到一起时,任何节点都可具有多个传入边缘,而不是前一个相邻者。实际上,还有可能的是,两个邻近节点不会共享图中的边缘,因为拓扑排序并不意味着所有操作是相关的。

在一些实例中,公开使用改进的动态编程算法来封装条件分支指令的系统、方法、装置和机器可读媒体。条件代码分支可建模为具有拓扑排序的有向非循环图(DAG)。这些DAG可用于构造动态编程表以使用动态编程算法发现一个路径到另一路径上的映射。此映射可用于封装供数据流处理器执行的指令。与传统动态编程算法相比,本公开将DAG的图结构考虑在内。

图9示出根据本公开的一些实例的表示真分支902、假分支904和实例已封装指令DAG 906的三个DAG。节点可基于相同的位置进行标记,且边缘是数据相关性。因此,节点二取决于来自节点一的数据等等。真分支DAG 902表示条件的真分支的有向非循环图。假分支DAG 904表示相同条件的假分支的有向非循环图。已封装指令DAG 906示出将两个指令封装在一起的封装操作的结果。已封装指令DAG 906中的符号为(真分支节点,假分支节点)。“X”指示没有为给定DAG封装指令。举例来说,第一节点910将执行来自真分支的节点一或执行假分支中的节点一(取决于条件的结果),但两者都被加载到HTF平铺块的存储器中。节点912封装来自假分支DAG 904的空操作指令(X)和节点二。类似地,节点914封装来自假分支DAG 904的空操作指令(X)和节点三。节点918封装来自真分支DAG 902的节点二和来自假分支DAG 904的节点四。

在封装算法的一个实例实施方案中,系统利用评分矩阵。图10示出根据本公开的一些实例的评分矩阵或表1004。表中的每一单元格(除第一行和列外)对应于真分支DAG902和假分支DAG 904中的特定节点。当对特定单元格进行评分时,使用评分函数,其考虑基于图的结构而选择的一组先前单元格的分数。所使用的先前单元格的集合包括表示真DAG中的前置节点的真DAG的单元格集合(其中每一节点表示一行)和表示假DAG中的前置节点的假DAG的单元格集合的并集。另外,还可以将跳过节点添加到集合中。对于真DAG,这些跳过单元格可以是表示前置节点的单元格正左侧的单元格。对于假DAG,这些跳过单元格可以是表示前置节点的单元格正上方的单元格。用于假设DAG映射的节点集合如图10所示。实线是针对真DAG 902考虑的先前单元格,且虚线是针对假DAG 904考虑的先前单元格。

如果由特定先前单元格表示的节点与由当前评分单元格表示的节点之间在DAG中没有边缘,那么可从先前单元格的集合中去除节点以使用。举例来说,节点5在假DAG904中不连接到节点2,因此,图10中的转变示出有穿过其中的“X”。类似地,在真DAG 902中,节点3不转变到节点2,并且因此X穿过转变并且不使用转变。

对于由特定先前单元格表示的节点和由当前评分单元格表示的节点之间在DAG中具有单个边缘的情况,节点可仍保持在集合中,并且可对应于空操作与另一节点配对的情况。举例来说,考虑方块1006。在此进行对角线移动意味着将1与5匹配,然后一起考虑真(2)、假(2)。这实际上很好,因为节点1与2之间实际上存在连接,所以我们具有保留一些数据流结构的连接。然而,在假分支上,节点5与节点2之间不存在连接,因此我们添加不存在且将需要在某个地方进行空操作来路由数据的连接。如果不存在其它好的选项,那么这是可允许的连接。然而,如果其它移动没有此问题,那么算法很可能会更好地采用它们。

对于由特定先前单元格表示的节点和由当前评分单元格表示的节点之间在DAG中具有两个边缘(例如,真和假分支中由当前单元格表示的节点分别与真和假分支中由特定先前单元格表示的节点都具有边缘)的情况,转变的分数可高于仅存在一个边缘的情况。图10中通过箭头的“X”标记示出要考虑的单元格修剪。

在一些实例中,所考虑的先前单元格可包含表示由当前评分单元格表示的节点的前置节点的所有单元格,且还跳过那些单元格的机会。举例来说,在图10中,使用此方法产生要考虑的额外单元格,如虚线箭头1008所示。

最后,所述表不仅记录最优选择,还存储每一传入边缘的最佳映射。这是为了启用将产生最终映射的算法的最终回溯阶段。由于可能存在多个输入进入的多个操作,因此算法需要至少产生来自此节点的许多路径才能够映射DAG中的所有操作。

图11示出根据本公开的一些实例的评分函数的应用。此评分函数利用全局对准(尼德曼-翁施)评分,其中第一行和列利用空位罚分(针对每一空位增加)。图11的评分函数具有空位罚分一;如果真DAG的传入边缘数目等于假DAG的传入边缘数目,则对角线移动的分数为加二;如果真DAG的传入边缘数目不等于假DAG的传入边缘数目,则对角移动的罚分为减二;如果两个分支的总传入节点小于或等于四个,则奖分为一;如果先前节点与当前节点没有连接,则无链路罚分为五。如先前所提到,基于将真DAG中的节点与假DAG中由评分表中的单元格表示的节点对准的评分函数而确定匹配。另外,对于图中不具有到两个前置节点的链路的转变,无匹配罚分为减五。

作为实例,基于先前节点的集合(由在集合中的每一节点处开始且在节点1110处结束的箭头所示)计算单元格1110的分数。分数可为以下中的最大值:

·节点1112的分数为三

ο真DAG 902的节点三具有一个传入边缘,且假DAG的节点三具有一个传入边缘,因此分数为加二;

οDAG 902的总传入边缘为一,且DAG 904的总传入边缘为一,因此总共为二,且二小于四,因此我们具有奖分一;

ο分数为3+2+1=6

·节点1114的分数为二

οDAG 902的总传入边缘为一,且DAG 904的总传入边缘为一,因此总共为二,且二小于四,因此我们具有奖分一;

ο空位罚分为二,因为我们未递增假DAG 904。

ο分数为2+1-2=1

·节点1116的分数为二

οDAG 902的总传入边缘为一,且DAG 904的总传入边缘为一,因此总共为二,且二小于四,因此我们具有奖分一;

ο空位罚分为二,因为我们未递增假DAG 904。

ο分数为2+1-2=1

因为最大分数为六,所以使用此分数且将其输入到单元格1110中。

评分的另一实例为单元格1118(如图10所示),其中基于先前单元格的分数的最大值而计算单元格的分数(一)。举例来说,以下中的最大值:

·具有分数二的单元格1120

οDAG 902的总传入边缘为一,且DAG 904的总传入边缘为一,因此总共为二,且二小于四,因此我们具有奖分一;

ο空位罚分为二。

ο分数为2+1-2=1

·具有分数二的单元格1116

ο真DAG 902的节点二具有一个传入边缘,且假DAG的节点二具有一个传入边缘,因此分数为加二;

οDAG 902的总传入边缘为一,且DAG 904的总传入边缘为一,因此总共为二,且二小于四,因此我们具有奖分一;

ο由于DAG 902的节点3未直接连接到节点二,因此存在减五无链路罚分;

ο分数为2+2+1-5=0;

·单元格1122具有分数一(-1)

ο真DAG 902的节点二具有一个传入边缘,且假DAG的节点二具有一个传入边缘,因此分数为加二;

οDAG 902的总传入边缘为一,且DAG 904的总传入边缘为一,因此总共为二,且二小于四,因此我们具有奖分一;

ο由于DAG 902的节点3未直接连接到节点二,因此存在减五无链路罚分;

ο分数为1+2+1-5=-1;

·具有分数二的单元格1124

οDAG 902的总传入边缘为一,且DAG 904的总传入边缘为一,因此总共为二,且二小于四,因此我们具有奖分一;

ο空位罚分为二。

ο分数为2+1-2=1

由于最大分数为一,因此将此分数输入到表中。现在,在一些实例中,可考虑来自前置节点的所有传入边缘。也就是说,还可考虑节点1112。在所述情况下:

·单元格1112具有分数三

ο真DAG 902的节点二具有一个传入边缘,且假DAG的节点二具有一个传入边缘,因此分数为加二;

οDAG 902的总传入边缘为一,且DAG 904的总传入边缘为一,因此总共为二,且二小于四,因此我们具有奖分一;

ο由于连接了两个链路,因此不存在无链路罚分;

ο分数为3+1+2=6;

一旦完成评分表,算法就进行回溯以创建映射。在回溯阶段,在使用局部对准的一些实例中,回溯从最高评分单元格开始,并通过考虑每一评分表单元格来向后工作,其中每一图和每一左上相邻单元格上存在传入边缘(对于空操作评分更高的情境)。接着为每一所考虑单元格选择最高分数,且算法接着考虑每一评分表单元格,其中所述单元格和所述单元格的左上相邻单元格的图上存在传入边缘,以此类推,直到算法达到映射的起点(例如,具有零的单元格)。

在使用全局对准的另一回溯算法中,算法从处于右下角的结束单元格(例如,图13中值为十的单元格)开始。传统算法仅将分数存储在单元格中。如所提到,本发明的系统记录最大分数和按分数排序的传入候选者的列表,以供稍后用于回溯。传统序列对准回溯选择最终候选者(全局对准从右下方候选者开始,局部对准从具有最大分数的单元格开始),且简单地跟随最佳分数返回到起点(对于全局对准意味着左上角,对于局部对准意味着当系统到达第一个0)。

由于我们有具有多个路径的DAG,因此本发明的系统的回溯算法可使用双端队列来保持候选者。开始条件相同,但当系统到达具有多个传入路径的单元格时,最佳分数之后的所有候选者都被添加到双端队列中。这确保了在系统完成跟随主映射回到起点之后,所述系统可选择次优候选者来映射替代路径。系统可仅映射尚未映射的节点,因此从双端队列的前面拉动的循环开始会丢弃已经映射其节点的候选者。这有点像筛子,队列将被候选者填满,但当系统跟随第一路径返回时,单元格将被锁定在适当位置且不会改变。队列将耗尽已映射的大多数候选者,但一些替代路径仍将开放,因此系统将能够跟随它们返回。最终,不会开放新的更改,因此候选者列表将保持为空并终止循环。

图12示出根据本公开的一些实例的确定指令封装的方法1200的流程图。在一些实例中,方法1200可在要在HTF或其它粗粒度可重配置阵列(CGRA)上执行的代码的编译时间期间进行。CGRA为由网状网络互连的大量处理元素(也称为平铺块)的阵列。混合线程网状架构(HTF)为一种粗粒度可重配置阵列(CGRA),其中平铺块以网格配置连接,其中每一平铺块连接到其水平和竖直相邻者。在操作1202处,系统针对操作代码的第一部分的第一分支生成第一DAG。操作代码可为要由HTF执行的代码。第一部分可为操作代码的条件语句的第一分支。在操作1204处,系统可针对操作代码的第一部分的第二分支生成第二DAG。举例来说,DAG可为由编译程序创建的抽象语法树(AST)的部分,其含有条件部分。第二部分可为操作代码的条件语句的第二分支。

在操作1206处,可初始化评分表。举例来说,所有单元格可设置为零值。在其它实例中,可基于空位罚分而设置第一行和列(例如,假设-2空位罚分,则第一行和列可为0、-2、-4、-6……等)。在操作1208处,系统针对评分表中对应于第一图中的第一节点和第二图中的第二节点的每一特定单元格计算分数。举例来说,可如先前所解释的那样计算分数,例如使用可利用空位罚分的评分函数、第一节点与第二节点的性质比较,以及使用评分表中一或多个先前评分单元格中的分数,所述单元格对应于第一图和第二图中由至少一个边缘分别连接到第一节点和第二节点的节点。举例来说,第一节点和第二节点的性质可为到那些节点中的传入边缘的数目。在一些实例中,可连同分数一起存储最高分数的源单元格以促进回溯。

在操作1210处,系统可确定用于回溯程序的开始单元格。在一些实例中,此可为位置[x][y]处的单元格,其中x为第一分支中的节点的数目,且y为第二分支中的节点的数目。在其它实例中,开始单元格可为具有最大分数的单元格。

在操作1212处,系统可执行回溯操作。如先前所描述,在一些实例中,例如双端队列等数据结构用于处理候选者列表(如先前所初始化)。当回溯映射单元格时,如果其具有用于多个前置节点的传入路径,那么将存储在评分表的单元格中的候选者的排序列表添加到候选者列表。一旦系统已完成回溯到开始位置,就拉动另一候选者以开始映射替代路径。如果已经映射候选者考虑的节点,那么丢弃此候选者。此过滤步骤保证了向前的进度且将首先选择最大分数。当候选者列表为空时,已考虑DAG中所有可能的开放路线。

在另一回溯算法中,算法从处于右下角的结束单元格(例如,图13中值为十的单元格)开始。系统接着转到下一个单元格,其由最高分数来源于存储于评分表中的单元格的单元格指示。存储有多个前置单元格的单元格指示相等分数的多个可能性。在一些实例中,系统可选择一个路径,或可考虑相等分数的所有路径且选择具有最高总分数的路径。如先前所提到,每一回溯路径需要确保遵守DAG中的每一个的结构。

在操作1214处,系统可基于在操作1212处生成的组合图而封装指令。在组合图中一起封装的节点可一起封装为加载到HTF处理元件的存储器中的指令。用“空操作”指令封装未与另一分支的节点一起封装的分支的节点。

图13示出根据本公开的一些实例的指令封装组件1302的示意图。DAG创建器1305基于要由HTF执行的代码(例如,源代码)创建一或多个有向非循环图(DAG)。评分表初始化器1310可创建评分表数据结构且将其初始化,如先前所描述。评分表可具有对应于第一DAG的节点数目的行数目和对应于由DAG创建器1305产生的第二DAG的节点数目的列数目。评分表评分器1315可使用由DAG创建器1305产生的DAG和由评分表初始化器产生的评分表,使用如先前所描述的评分函数填充评分表中。回溯组件1320可使用已填充评分表和DAG且通过如先前所描述的评分表回溯以产生组合图。指令封装器1325可基于由回溯组件1320创建的组合图将指令封装在一起。图13的组件可为硬件组件,或可为软件组件,例如个别过程、应用程序、功能、软件类别等。图13的结构为示范性的,且所属领域的技术人员将理解,由组件中的一或多者提供的功能可以不同于所示方式的方式组合、拆分或以其它方式提供。图13可由图14中的机器1400实施,可在图1到8的组件中的任一个中实施等。

本公开因此解决传统封装算法浪费指令循环的技术问题,所述传统封装算法封装条件指令以供CGRA的处理节点执行。这些浪费的指令循环会降低CGRA的性能。此技术问题通过使用修改的动态编程算法的技术解决方案得到解决,所述算法更有效地自动封装指令,以减少浪费循环。这样减少浪费循环提高了CGRA处理指令集的速度,且因此提高了CGRA硬件资源的性能。因此,本公开使用技术解决方案解决了技术问题,且因此改进了CGRA计算系统的功能。

图14示出实例机器1400的框图,可利用所述机器、在所述机器中或通过所述机器实施本文论述的任何一或多种技术(例如,方法)。如本文中所描述,实例可包含机器1400中的逻辑或数个组件或机构,或可由其操作。电路系统(例如,处理电路系统)是在机器1400的有形实体中实施的电路集合,其包含硬件(例如,简单电路、门、逻辑等)。电路系统成员资格可随时间推移而变得灵活。电路系统包含可在操作时单独或以组合形式执行指定操作的构件。在实例中,可将电路系统的硬件不变地设计成进行特定操作(例如,硬连线)。在实例中,电路系统的硬件可包含可变地连接的物理组件(例如,执行单元、晶体管、简单电路等),包含以物理方式修改(例如,不变集中式粒子的磁性、电气可移动放置等)以对特定操作的指令进行编码的机器可读媒体。在连接物理组件时,硬件构成的基础电性质例如从绝缘体变成导体,或反之亦然。指令使得嵌入式硬件(例如,执行单元或加载机构)能够经由可变连接以硬件创建电路系统的构件以在处于操作中时进行特定操作的部分。因此,在实例中,机器可读媒体元件是电路系统的一部分或在装置操作时以通信方式耦合到电路系统的其它组件。在实例中,物理组件中的任一个可用于多于一个电路系统中的多于一个构件中。举例来说,在操作下,执行单元可在一个时间点用于第一电路系统的第一电路,且在不同时间由第一电路系统中的第二电路或由第二电路系统中的第三电路重新使用。下面是关于机器1400的这些组件的额外实例。

在替代实施例中,机器1400可以充当独立装置或可以连接(例如,联网)到其它机器。在联网部署中,机器1400可在服务器-客户端网络环境中作为服务器机器、客户端机器或这两者操作。在实例中,机器1400可充当对等(P2P)(或其它分布式)网络环境中的对等机器。机器1400可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络器具、网络路由器、交换机或桥接器,或能够执行(依序或以其它方式)指定将由所述机器采取的动作的指令的任何机器。此外,虽然仅示出单个机器,但术语“机器”还应被视为包含个别地或共同地执行指令集(或多个指令集)以执行本文中所论述的任一或多种方法(例如,云计算、软件即服务(SaaS)、其它计算机集群配置)的任何机器集合。

机器1400(例如,计算机系统)可包含硬件处理器1402(例如,中央处理单元(CPU)、图形处理单元(GPU)、硬件处理器核心或其任何组合)、主存储器1404、静态存储器1406(例如,固件、微码的存储器或存储装置、基本输入输出(BIOS)、统一可扩展固件接口(UEFI)等),以及大容量存储装置1408(例如,硬盘驱动器、磁带机、快闪存储装置或其它块装置),其中的一些或全部可经由互连件1430(例如,总线)彼此通信。机器1400可进一步包含显示装置1410、字母数字输入装置1412(例如,键盘)和用户界面(UI)导航装置1414(例如,鼠标)。在实例中,显示装置1410、输入装置1412和UI导航装置1414可为触摸屏显示器。机器1400可另外包含大容量存储装置1408(例如,驱动单元)、信号生成装置1418(例如,扬声器)、网络接口装置1420和一或多个传感器1416,例如全球定位系统(GPS)传感器、指南针、加速度计或其它传感器。机器1400可包含输出控制器1428,例如串行(例如,通用串行总线(USB)、并行或其它有线或无线(例如,红外(IR)、近场通信(NFC)等)连接,以与一或多个外围装置(例如,打印机、读卡器等)通信或控制所述一或多个外围装置。

硬件处理器1402、主存储器1404、静态存储器1406或大容量存储装置1408的寄存器可为或包含机器可读媒体1422,所述机器可读媒体上存储体现或由本文中所描述的任何一或多种技术或功能使用的数据结构或指令1424(例如,软件)的一或多个集合。指令1424还可在其由机器1400执行期间完全或至少部分驻留在硬件处理器1402、主存储器1404、静态存储器1406或大容量存储装置1408的寄存器中的任一个内。在实例中,硬件处理器1402、主存储器1404、静态存储器1406或大容量存储装置1408中的一个或任何组合可构成机器可读媒体1422。虽然机器可读媒体1422示出为单个媒体,但术语“机器可读媒体”可包含被配置成存储一或多个指令1424的单个媒体或多个媒体(例如,集中式或分布式数据库,或相关联的高速缓存和服务器)。

术语“机器可读媒体”可包含能够存储、编码或承载供机器1400执行且使机器1400执行本公开的任何一或多种技术的指令的任何媒体,或能够存储、编码或承载由此类指令使用或与此类指令相关联的数据结构的任何媒体。非限制性机器可读媒体实例可包含固态存储器、光学媒体、磁性媒体和信号(例如,射频信号、其它基于光子的信号、声音信号等)。在实例中,非暂时性机器可读媒体包括具有多个粒子的机器可读媒体,所述粒子具有不变(例如,静止)质量,且因此为物质组成。因此,非暂时性机器可读媒体是不包含暂时性传播信号的机器可读媒体。非暂时性机器可读媒体的特定实例可包含:非易失性存储器,例如半导体存储器装置(例如,电可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM))和快闪存储器装置;磁盘,例如内部硬盘和可移动磁盘;磁光盘;以及CD-ROM和DVD-ROM盘。

在实例中,存储或以其它方式提供在机器可读媒体1422上的信息可表示指令1424,例如指令1424本身或可从中导出指令1424的格式。可从中导出指令1424的此格式可包含源代码、已编码指令(例如,呈压缩或加密形式)、已封装指令(例如,拆分成多个封装)等。表示机器可读媒体1422中的指令1424的信息可由处理电路系统处理到指令中以实施本文中所论述的操作中的任一个。举例来说,从信息(例如,由处理电路系统处理)导出指令1424可包含:编译(例如,从源代码、目标代码等)、解译、加载、组织(例如,动态地或静态地链接)、编码、解码、加密、解密、封装、解封装或以其它方式将信息操纵到指令1424中。

在实例中,指令1424的导出可包含对信息的汇编、编译或解译(例如,通过处理电路系统)以从由机器可读媒体1422提供的一些中间或预处理格式创建指令1424。当在多个部分中提供信息时,可组合、解封装和修改所述信息以创建指令1424。举例来说,信息可在一个或数个远程服务器上的多个压缩源代码封装(或目标代码,或二进制可执行代码等)中。源代码封装可在经由网络传输时被加密,并且在必要时被解密、解压缩、汇编(例如,链接),并且在本地机器处被编译或解译(例如,到可独立执行的库中等),并且由本地机器执行。

可进一步利用数个传送协议中的任一个(例如,帧中继、因特网协议(IP)、传输控制协议(TCP)、用户数据报协议(UDP)、超文本传送协议(HTTP)等)经由网络接口装置1420使用传输媒体在通信网络1426上传输或接收指令1424。实例通信网络可以包含局域网(LAN)、广域网(WAN)、分组数据网络(例如,因特网)、移动电话网络(例如,蜂窝网络)、普通传统电话(POTS)网络和无线数据网络(例如,称为

为了更好地示出本文中所描述的方法和设备,非限制性实例实施例集在下文阐述为带编号的实例。

实例1为一种装置,其包括:处理器;存储器,所述存储器存储指令,所述指令在由所述处理器执行时使得所述处理器执行包括以下各项的操作:从存储器装置读取操作代码;在所述存储器装置中从操作代码的一部分生成第一有向非循环图数据结构,所述第一有向非循环图对所述代码的条件语句的第一分支的程序流进行建模;在所述存储器装置中从操作代码的所述部分生成第二有向非循环图数据结构,所述第二有向非循环图对所述条件语句的第二分支的程序流进行建模;在所述存储器装置中初始化评分表数据结构,所述评分表数据结构包括多个单元格,所述多个单元格由对应于所述第一有向非循环图数据结构中的节点数目的列数目和对应于所述第二有向非循环图数据结构中的节点数目的行数目定义;对于所述评分表数据结构中对应于所述第一有向非循环图数据结构中的第一节点和所述第二有向非循环图数据结构中的第二节点的每一单元格,将基于评分函数而计算的分数写入到所述存储器装置,所述评分函数使用所述评分表数据结构中的一或多个先前评分单元格中的分数,所述单元格对应于所述第一有向非循环图数据结构和所述第二有向非循环图数据结构中由至少一个边缘分别连接到所述第一节点和所述第二节点的节点;对于所述评分表数据结构中的每一单元格,将所述第一节点和所述第二节点的每一传入边缘的最佳映射的标识符存储在所述存储器装置中;确定所述评分表数据结构中用于回溯程序的开始单元格;使用所述最佳映射的所述标识符从具有最高分数的单元格回溯以产生组合图;以及基于所述组合图将指令集封装在目标代码中,所述目标代码被配置成当在粗粒度可重配置阵列中执行时使得所述指令集中的指令在所述粗粒度可重配置阵列的处理单元处有条件地执行。

在实例2中,根据实例1所述的主题包含,其中初始化所述评分表数据结构的所述操作包括用零值初始化所述评分表数据结构的第一行和列。

在实例3中,根据实例1至2所述的主题包含,其中初始化所述评分表数据结构的所述操作包括用空位罚分初始化所述评分表数据结构的所述第一行和列。

在实例4中,根据实例1至3所述的主题包含,其中所述评分函数为以下各者之间的最大分数:表示在所述第一有向非循环图数据结构中连接到所述第一节点的先前节点的第一先前单元格和表示在所述第二有向非循环图数据结构中连接到所述第二节点的第二先前节点的第二先前单元格的分数与所述第一节点和所述第二节点的相似性分数的和;所述第一先前单元格的所述分数与空位罚分的和;以及所述第二先前单元格的所述分数与所述空位罚分的和。

在实例5中,根据实例4所述的主题包含,其中所述空位罚分针对每一连续空位增加。

在实例6中,根据实例1至5所述的主题包含,其中所述操作进一步包括在混合线程网状架构(HTF)上执行已封装指令。

在实例7中,根据实例1至6所述的主题包含,其中所述操作进一步包括确定所述组合图中的所述第一有向非循环图数据结构的未映射节点,以及响应于确定未映射节点,用具有空位的指令封装所述未映射节点。

实例8为一种方法,其包括:从存储器装置读取操作代码;在所述存储器装置中从操作代码的一部分生成第一有向非循环图数据结构,所述第一有向非循环图对所述代码的条件语句的第一分支的程序流进行建模;在所述存储器装置中从操作代码的所述部分生成第二有向非循环图数据结构,所述第二有向非循环图对所述条件语句的第二分支的程序流进行建模;在所述存储器装置中初始化评分表数据结构,所述评分表数据结构包括多个单元格,所述多个单元格由对应于所述第一有向非循环图数据结构中的节点数目的列数目和对应于所述第二有向非循环图数据结构中的节点数目的行数目定义;对于所述评分表数据结构中对应于所述第一有向非循环图数据结构中的第一节点和所述第二有向非循环图数据结构中的第二节点的每一单元格,将基于评分函数而计算的分数写入到所述存储器装置,所述评分函数使用所述评分表数据结构中的一或多个先前评分单元格中的分数,所述单元格对应于所述第一有向非循环图数据结构和所述第二有向非循环图数据结构中由至少一个边缘分别连接到所述第一节点和所述第二节点的节点;对于所述评分表数据结构中的每一单元格,将所述第一节点和所述第二节点的每一传入边缘的最佳映射的标识符存储在所述存储器装置中;确定所述评分表数据结构中用于回溯程序的开始单元格;使用所述最佳映射的所述标识符从具有最高分数的单元格回溯以产生组合图;以及基于所述组合图将指令集封装在目标代码中,所述目标代码被配置成当在粗粒度可重配置阵列中执行时使得所述指令集中的指令在所述粗粒度可重配置阵列的处理单元处有条件地执行。

在实例9中,根据实例8所述的主题包含,其中初始化所述评分表数据结构包括用零值初始化所述评分表数据结构的第一行和列。

在实例10中,根据实例8至9所述的主题包含,其中初始化所述评分表数据结构包括用空位罚分初始化所述评分表数据结构的所述第一行和列。

在实例11中,根据实例8至10所述的主题包含,其中所述评分函数为以下各者之间的最大分数:表示在所述第一有向非循环图数据结构中连接到所述第一节点的先前节点的第一先前单元格和表示在所述第二有向非循环图数据结构中连接到所述第二节点的第二先前节点的第二先前单元格的分数与所述第一节点和所述第二节点的相似性分数的和;所述第一先前单元格的所述分数与空位罚分的和;以及所述第二先前单元格的所述分数与所述空位罚分的和。

在实例12中,根据实例11所述的主题包含,其中所述空位罚分针对每一连续空位增加。

在实例13中,根据实例8至12所述的主题包含,在混合线程网状架构(HTF)上执行已封装指令。

在实例14中,根据实例8至13所述的主题包含,确定所述组合图中的所述第一有向非循环图数据结构的未映射节点,以及响应于确定未映射节点,用具有空位的指令封装所述未映射节点。

实例15为一种非暂时性机器可读媒体,其存储指令,所述指令在由机器执行时使得所述机器执行包括以下各项的操作:从存储器装置读取操作代码;在所述存储器装置中从操作代码的一部分生成第一有向非循环图数据结构,所述第一有向非循环图对所述代码的条件语句的第一分支的程序流进行建模;在所述存储器装置中从操作代码的所述部分生成第二有向非循环图数据结构,所述第二有向非循环图对所述条件语句的第二分支的程序流进行建模;在所述存储器装置中初始化评分表数据结构,所述评分表数据结构包括多个单元格,所述多个单元格由对应于所述第一有向非循环图数据结构中的节点数目的列数目和对应于所述第二有向非循环图数据结构中的节点数目的行数目定义;对于所述评分表数据结构中对应于所述第一有向非循环图数据结构中的第一节点和所述第二有向非循环图数据结构中的第二节点的每一单元格,将基于评分函数而计算的分数写入到所述存储器装置,所述评分函数使用所述评分表数据结构中的一或多个先前评分单元格中的分数,所述单元格对应于所述第一有向非循环图数据结构和所述第二有向非循环图数据结构中由至少一个边缘分别连接到所述第一节点和所述第二节点的节点;对于所述评分表数据结构中的每一单元格,将所述第一节点和所述第二节点的每一传入边缘的最佳映射的标识符存储在所述存储器装置中;确定所述评分表数据结构中用于回溯程序的开始单元格;使用所述最佳映射的所述标识符从具有最高分数的单元格回溯以产生组合图;以及基于所述组合图将指令集封装在目标代码中,所述目标代码被配置成当在粗粒度可重配置阵列中执行时使得所述指令集中的指令在所述粗粒度可重配置阵列的处理单元处有条件地执行。

在实例16中,根据实例15所述的主题包含,其中初始化所述评分表数据结构的所述操作包括用零值初始化所述评分表数据结构的第一行和列。

在实例17中,根据实例15至16的主题包含,其中初始化所述评分表数据结构的所述操作包括用空位罚分初始化所述评分表数据结构的所述第一行和列。

在实例18中,根据实例15至17所述的主题包含,其中所述评分函数为以下各者之间的最大分数:表示在所述第一有向非循环图数据结构中连接到所述第一节点的先前节点的第一先前单元格和表示在所述第二有向非循环图数据结构中连接到所述第二节点的第二先前节点的第二先前单元格的分数与所述第一节点和所述第二节点的相似性分数的和;所述第一先前单元格的所述分数与空位罚分的和;以及所述第二先前单元格的所述分数与所述空位罚分的和。

在实例19中,根据实例18所述的主题包含,其中所述空位罚分针对每一连续空位增加。

在实例20中,根据实例15至19所述的主题包含,其中所述操作进一步包括在混合线程网状架构(HTF)上执行已封装指令。

在实例21中,根据实例15至20所述的主题包含,其中所述操作进一步包括确定所述组合图中的所述第一有向非循环图数据结构的未映射节点,以及响应于确定未映射节点,用具有空位的指令封装所述未映射节点。

实例22为至少一个机器可读媒体,其包含指令,所述指令在由处理电路系统执行时使得所述处理电路系统执行操作以实施实例1至21中的任一项。

实例23为一种设备,其包括用于实施实例1至21中的任一项的装置。

实例24为一种系统,其用以实施实例1至21中的任一项。

实例25为一种方法,其用以实施实例1至21中的任一项。

以上详细描述包含对随图的参考,所述附图形成详细描述的部分。附图借助于说明示出可实践本发明的特定实施例。这些实施例在本文中也称为“实例”。此类实例可包含除了所示或描述的那些元件之外的元件。然而,本发明人还设想仅提供所示或所描述的那些元件的实例。此外,本发明人还设想使用关于特定实例(或其一或多个方面)或关于本文中所示或描述的其它实例(或其一或多个方面)而示出或描述的那些元件的任何组合或排列的实例(或其一或多个方面)。

在本文件中,如专利文件中常见的,使用术语“一”以包含一个或多于一个,这独立于“至少一个”或“一或多个”的任何其它例项或使用。在此文件中,除非另有指示,否则术语“或”用于指代非排他性的或,使得“A或B”可包含“A而非B”、“B而非A”以及“A和B”。在所附权利要求书中,术语“包含”和“其中(in which)”用作相应术语“包括”和“其中(wherein)”的通俗英语等效物。并且,在所附权利要求书中,术语“包含”和“包括”是开放的,也就是说,包含除了权利要求项中列在此类术语之后的那些要素之外的要素的系统、装置、物品或过程仍被认为属于所述权利要求项的范围内。此外,在所附权利要求书中,术语“第一”、“第二”和“第三”等仅用作标记,并且并不意图对其对象施加数字要求。

以上描述意图为说明性的而非限制性的。举例来说,上文所描述的实例(或其一或多个方面)可彼此组合使用。例如所属领域的技术人员在查阅以上描述后可使用其它实施例。应理解,所述实施例不会用于解释或限制权利要求书的范围或含义。另外,在以上具体实施方式中,可将各种特征分组在一起以简化本公开。不应将此解释为期望未要求的所公开特征对于任何权利要求来说是必需的。实际上,本发明主题可在于比特定所公开实施例的所有特征要少。因此,特此将所附权利要求书并入到具体实施方式中,其中每一权利要求作为单独实施例而独立存在,且经考虑此类实施例可以各种组合或排列彼此组合。本发明的范围应该通过参考所附权利要求书以及此类权利要求书所授予的等效物的完整范围来确定。

相关技术
  • 封装模块以及测试包括在封装模块中的芯片的操作的方法
  • 使用微分支目标缓冲器的高性能零气泡条件分支预测
  • 一种直井多分支缝压裂分支缝起裂条件及延伸规律物模试验方法
技术分类

06120115625269