用于支持存储器内处理的方法和存储器模块的制作方法
【专利说明】
[0001] 本申请要求于2014年10月1日提交的第62/058, 568号美国临时申请以及2015 年4月15日提交的第14/687, 676号美国临时申请的优先权,所述美国临时申请的公开通 过引用全部合并于此。
技术领域
[0002] 本公开总体地涉及存储器。更具体地且不以限制的方式,在本公开中公开的各发 明方面的具体实施例涉及在存储器模块自身内总数计数操作(P0PC0UNT operation)和逻 辑逐位运算的处理。
【背景技术】
[0003] 延迟敏感处理和实时分析被预计占据超大规模数据中心中的处理周期的显著部 分,该超大规模数据中心可包括基于云的计算中心。实时分析是一个正在成长的市场,据估 计,到2018年将超过一百三十亿美金。位图(bitmap)操作是很多实时分析操作中的重要组 成部分(building block)。位图存储用户、事件、网页等的位阵列。此外,位图便于许多有 效的查询,诸如,事件的跟踪,或者,唯一访问者的数量的跟踪,数据挖掘等。对于位图的常 见的实时分析操作包括P0PC0UNT操作(在下面讨论)和逻辑逐位运算,例如,0R( "或")、 AND( "与")、X0R( "异或")、NAND( "与非")等。
[0004] 实时分析中的常见的用例是通过大位图(large bitmap)维护网站使用的各种统 计数据。P0PC0UNT(或总数计数)操作对位序列中的一(1)的数量进行计数。它的使用传 统上一直在密码学中,但近年来在实时数据分析域中越来越受到欢迎。例如,网站可通过位 向量(其中,每一个"1"位对应于一个用户)来跟踪每个用户的网页访问。因此,对给定 网页的唯一访问者的数量进行计数实际上是对位向量进行总数计数。作为示例,在具有4 百万用户的网站的情况下,需要考虑到所有的用户的位向量的大小为512千字节(KB)的数 量级上(=4MB(兆比特))。
[0005] 这里请注意,为了便于讨论,大写术语"P0PC0UNT(总数计数)"(它的非大写型式 "popcount")和术语"bitcount (位计数)"可以在本文中可互换地使用。类似地,为了便 于讨论,术语"位图"和"位向量"可以在下面可互换地使用,其实际上指位序列。
【发明内容】
[0006] 在一个实施例中,一种用于支持存储器内处理的方法可包括如下步骤:在存储器 模块处从主机接收用于对在存储器模块中存储的位向量执行总数计数操作的指令;以及, 在存储器模块内执行总数计数操作,而不将位向量传输到主机以执行总数计数操作。
[0007] 所述方法还可包括如下步骤:在存储器模块内存储执行总数计数操作的结果;以 及,将所述结果从存储器模块提供给主机。
[0008] 执行总数计数操作的步骤可包括:将位向量中的位划分成多个非重叠段;针对所 述多个非重叠段中的每一个非重叠段,计算段特定的位计数;以及,将所有的段特定的位计 数相加来产生所述结果。
[0009] 每一个非重叠段可包括8位。
[0010] 计算段特定的位计数的步骤可包括如下方式中的一个:使用在存储器模块中存储 的查找表(LUT)来获得段特定的位计数;以及,对所述多个非重叠段中的每一个非重叠段 执行一系列的移位和逻辑逐位运算来产生段特定的位计数。
[0011] 将所有的段特定的位计数相加的步骤可包括:使用每一个段特定的位计数作为对 于存储器模块内的多个加法器中的对应一个加法器的输入;以及,累积所述多个加法器中 的所有加法器的输出来产生所述结果。
[0012] 所述方法还可包括如下步骤:从主机接收存储器模块中的存储有位向量的相应部 分的存储器位置的物理地址;针对每一个接收到的物理地址,从存储器位置检索位向量的 相应部分;对检索到的位向量的部分执行部分位计数;以及,组合所有的部分位计数的结 果,来实现对位向量的总数计数操作的执行。
[0013] 所述方法还可包括如下步骤:在存储器模块内的预定义的存储位置中存储每一个 接收到的物理地址;访问预定义的存储位置,以获得用于检索位向量的相应部分的每一个 接收到的物理地址;以及,将所有的部分位计数的组合结果存储在预定义的存储位置中以 便提交给主机作为执行总数计数操作的最终结果。
[0014] 存储器模块可以是三维堆栈存储器模块、高带宽存储器模块、混合存储器立方体 存储器模块、固态驱动器、动态随机存取存储器模块、静态随机存取存储器、相变随机存取 存储器、电阻随机存取存储器、导电桥接随机存取存储器、磁随机存取存储器以及自旋转移 力矩磁随机存取存储器中的一个。
[0015] 位向量可通过加密算法而被生成。
[0016] 所述方法还可包括如下步骤:基于执行总数计数操作的结果,确定加密算法的加 密质量。
[0017] 位向量可被存储在存储器模块中。
[0018] 所述方法还可包括如下步骤:在存储器模块内存储执行总数计数操作的结果;以 及,将结果从存储器模块提供给主机。
[0019] 在另一个实施例中,一种用于支持存储器内处理的方法可包括如下步骤:在存储 器模块处从主机接收用于对在存储器模块中存储的两个或更多个位向量执行逻辑逐位运 算的指令;以及,在存储器模块内执行逻辑逐位运算,而没有将位向量传输到主机以便执 行。
[0020] 所述方法还可包括如下步骤:在存储器模块内存储执行逻辑逐位运算的结果;以 及,将所述结果从存储器模块提供给主机。
[0021] 逻辑逐位运算可以是或运算、与运算、非运算、非与运算、或非运算、以及,异或运 算中的一个。
[0022] 执行逻辑逐位运算的步骤可包括:将每一个位向量划分成多个位向量特定的非重 叠段;将来自所有的位向量的对应的位向量特定的非重叠段对齐成多组对齐的段;对每一 组对齐的段执行逻辑逐位运算,从而产生多个部分结果;以及,组合所有的部分结果,来实 现逻辑逐位操作的执行。
[0023] 每一个位向量特定的非重叠段可包括8位。
[0024] 所述方法还可包括在将每一个位向量划分成多个位向量特定的段之前执行如下: 从主机接收存储器模块中的存储有相应的位向量的存储器位置的物理地址;以及,从对应 的存储器位置检索位向量。
[0025] 所述方法还可包括:在存储器模块内的预定义的存储位置中存储每一个接收到的 物理地址;访问预定义的存储位置,以获得用于检索相应的位向量的每一个接收到的物理 地址;以及,在预定义的存储位置中存储组合所有的部分结果的最终结果,以便将来提交给 主机。
[0026] 存储器模块可以是三维堆栈存储器模块、高带宽存储器模块、混合存储器立方体 存储器模块、固态驱动器、动态随机存取存储器模块、静态随机存取存储器、相变随机存取 存储器、电阻随机存取存储器、导电桥接随机存取存储器、磁随机存取存储器以及自旋转移 力矩磁随机存取存储器中的一个。
[0027] 在另一个实施例中,一种存储器模块可包括:存储器芯片;以及,逻辑裸片,与存 储器芯片连接,并且控制存储器芯片和外部主机之间的数据传输,其中,逻辑裸片包括控制 器,该控制器执行对在存储器芯片中存储的第一位向量的总数计数操作和对在存储器芯片 中存储的两个或更多个第二位向量的逻辑逐位运算中的至少一个,其中,控制器响应于从 主机接收用于执行总数计数操作的指令而执行总数计数操作,而没有将第一位向量传输到 主机以便执行总数计数操作,以及,其中,控制器响应于从主机接收用于执行逻辑逐位运算 的指令而执行逻辑逐位运算,而没有将第二位向量传输到主机以便执行逻辑逐位运算。
[0028] 存储器模块可以是三维堆栈存储器模块、高带宽存储器模块、混合存储器立方体 存储器模块、固态驱动器、动态随机存取存储器模块、静态随机存取存储器、相变随机存取 存储器、电阻随机存取存储器、导电桥接随机存取存储器、磁随机存取存储器以及自旋转移 力矩磁随机存取存储器中的一个。
[0029] 逻辑裸片还可包括:寄存器,与控制器结合,其中,在总数计数操作的执行之后,寄 存器由控制器操作以存储执行总数计数操作的第一结果,并且控制器将第一结果发送到存 储器模块内的第一存储位置,以便由主机检索执行总数计数操作的第一结果,以及,其中, 在逻辑逐位运算的执行之后,寄存器由控制器操作以存储执行逻辑逐位运算的第二结果, 并且控制器将第二结果发送到存储器模块内的第二存储位置,以便由主机检索。
[0030] 控制器可包括:处理逻辑单元,包括多个加法器,其中处理逻辑单元执行作为执行 总数计数操作的部分的如下操作:从存储器芯片检索第一位向量;将第一位向量中的位划 分成多个非重叠段;针对所述多个非重叠段中的每一个非重叠段,计算段特定的位计数; 使用每一个段特定的位计数作为对于所述多个加法器中的对应一个的输入;在寄存器中累 积来自所述多个加法器中的所有加法器的输出;将所有累积的输出相加来产生第一结果; 以及,在寄存器中存储第一结果。
[0031] 根据本公开的各方面,建议了一种存储器内处理(P頂)模型,其中,与总数计数操 作和逻辑逐位运算有关的计算在存储器模块内而不是在主机中央处理单元(CPU)内实现。 存储器内执行由此消除了贯穿整个系统将数据从大的位向量移动的需要。通过将这些操作 的处理卸载到存储器,经由存储器-CPU接口的冗余数据传输被大大地减少,从而提高系统 性能和能效。存储器模块的逻辑裸片中的控制器和专用寄存器操作用来与主机连接并提供 由主机请求的总数计数操作和逻辑逐位运算的存储器内执行。本公开的PIM模型由此释放 CPU用于其他任务,因为现在可以在P頂使能存储器自身内执行许多实时分析任务。存储器 模块可以是三维堆栈(3DS)存储器或任何其他的半导体存储器。
【附图说明】
[0032] 在下面的部分中,将参考在附图中图示的示例性实施例来描述本公开的各发明方 面,在附图中:
[0033] 图1A示出根据本公开的一个实施例的系统的高度简化的局部布局;
[0034] 图1B示出作为示例的图1A中的系统的使用3DS存储器模块的另一个实施例;
[0035] 图2示出表示根据本公开的一个实施例的可如何执行总数计数操作的示例性流 程图;
[0036] 图3描绘示出根据本公开的一个实施例的可如何执行逻辑逐位运算的示例性流 程图;
[0037] 图4是描绘根据本公开的一个实施例的在图1A至1B的存储器模块内可如何执行 总数计数操作的示例性略图;
[0038] 图5示出根据本公开的一个实施例的用于对8位向量段中的位进行计数的示例性 伪代码;
[0039] 图6示出根据本公开的一个实施例的用于对16字节数据进行总数计数的全约简 树(full reduction tree)的不例;
[0040] 图7示出根据本公开的一个实施例的用于对16字节数据进行总数计数的紧凑约 简树(compact reduction tree)的不例;
[0041] 图8A至图8B示出根据本公开的具体实施例的在图1A的存储器模块内可如何执 行逻辑逐位运算的两个示例性实施方式;
[0042] 图9示出根据本公开的一个实施例的图1A中的存储器模块的逻辑部的示例性布 局;以及
[0043] 图10描绘根据本公开的一个实施例的图1A中的系统的整体布局。
【具体实施方式】
[0044] 在下面的详细描述中,为了提供对本公开的彻底的理解,阐述了大量的具体细节。 但是,本领域的技术人员将会理解,所公开的各发明方面可以在没有这些具体细节的情况 下被实践。在其他示例中,公知的方法、过程、部件和电路未被详细地描述,以便不模糊本公 开。此外,所描述的发明方面可被实现以在包括例如3DS以及非3DS存储器的任何的基于 半导体的存储系统中执行内存储器操作。
[0045] 贯穿本说明书中对"一个实施例"或"实施例"的提及是指,结合该实施例描述的 特定的特征、结构或特性被包括在本公开的至少一个实施例中。因此,在贯穿本说明书的不 同地方中短语"在一个实施例中"或"在实施例中"或"根据一个实施例"(或具有类似含义 的其他短语)的出现未必都指同一实施例。此外,特定的特征、结构或特性可以在一个或更 多个实施例中以任何合适的方式组合。另外,根据本文中讨论的情景,单数术语可包括其复 数形式,并且,复数术语可包括其单数形式。类
似地,带连号的术语(例如,"real-time (实 时)","pre_defined(预定义)","CPU-based(基于CPU的)"等)可以偶尔与其不带连号 的型式(例如,"real time (实时)'"predefined (预定义)","CPU based (基于 CPU 的)" 等)可互换地使用,并且,大写条目(例如," POPCOUNT(总数计数)"、"Logic Die(逻辑裸 片)"等)可与其非大写型式(例如,"popcount (总数计数)"、"logic die(逻辑裸片)") 可互换地使用。这种偶尔可互换使用不应被视为相互不一致。
[0046] -开始就请注意,术语"结合"、"操作地结合"、"被连接"、"连接"、"被电连接"等在 本文中可互换地使用,通常指的是以可操作的方式电气/电子连接的状态。类似地,当第一 实体将信息信号(无论是否包含地址、数据或控制信息)电发送(无论通过有线还是无线 方式)到(多个)第二实体并且/或者从第二实体接收该信息信号时,第一实体被认为是 与第二实体"通信",而不管这些信号的类型(模拟或数字)如何。进一步请注意,本文中示 出和讨论了的各图(包括部件图)仅仅是出于示范性的目的,而不是按比例绘制。
[0047] 如本文中使用的术语"第一"、"第二"等被用作它们之前的名词的标签,并不意指 任何类型的排序(例如,空间,时间,逻辑等),除非明确定义为这样。
[0048] 目前,所有的实时分析框架依赖于用于存储数据集的存储器,而POPCOUNT操作或 逻辑逐位运算在中央处理单元(CPU)中被执行。结果,大量的数据需要从存储器(在这种 存储器中保存有数据或位图)传输到CPU以便计算。因此,执行总数计数操作或逻辑逐位 运算(诸如,早先提及的超大规模数据中心)的系统的性能受存储器和CPU之间的多次往 返数据传输的约束。
[0049] 在具有4百万用户的网站的前一示例的情况中,大量的数据需要从存储器传输到 CPU以便计算。但是,总数计数操作的CPU生成的结果可以只是约3个字节长,因为222 = 512KB,并因此,CPU可输出log2(222) = 22个二进制位3字节)作为表示512KB位向 量的总数计数值。这类似于使用三个二进制位来计数到八(8),或者使用四个二进制位来计 数到十六(16),等等。因此,总数计数实质上是在大的位向量之上的缩位运算(reduction operation)。但是,如上所述,传统的计算模型是低效的,因为计算时间和能量由大数据集 贯穿系统从存储器到CPU并返回的冗余动作主导。这种低效被进一步加剧,因为通常只有 最终总数计数结果总是被程序使用,并且所有的中间位向量或者数据集将被丢弃。
[0050] 在一个实施例中,存储器模块可被配置为包括控制器,该控制器可包括硬件和/ 或软件以支持总数计数操作和逻辑逐位运算的存储器内实施。在一个实施例中,存储器 模块可以是三维堆栈(3DS)存储器模块,其基片(base)或逻辑裸片(logic die)可被配 置为包括控制器。例如,在POPCOUNT操作的情况中,根据本公开的教导的处理内存储器 (PIM:Processing-In-Memory)模型可向存储器模块(或者,3DS存储器的基片/逻辑裸片) 提供如下的附加物。(i)每次可计算(最多)全动态随机存取存储器(DRAM)页的总数计 数的基于硬件的约简树。(ii)可使能横横跨一个DRAM页不同的尺寸的向量的硬件逻辑。 (iii)特殊寄存器(本文中被称为"P頂结果寄存器(PMResultRegister)"),可存储最终 结果(即,总数计数值)并可由存储器的主机用来检索最终的总数计数值。在特定的实施 例中,在向量尺寸大于DRAM页时,该寄存器也可以用来保持中间结果。在这种情况中,该寄 存器可累积所有的中间结果来最后存储最终结果以供主机后续检索。(iv)接口(诸如,应 用编程接口(API)),主机可使用该接口来启动总数计数并从P頂结果寄存器读取结果。在 一个实施例中,这种操作启动和结果检索可通过对存储器模块中的一个或更多个预定义的 存储位置进行读写来进行。例如,在一个实施例中,API可暴露P頂结果寄存器作为存储有 最终总数计数值的这样一个预定义的存储器位置。因此,对该特殊存储器位置的任何访问 是对PM结果寄存器的直接访问。
[0051] 用于上述的总数计数的存储器内实施的硬件/软件配置可适当地与逻辑逐位运 算的存储器内实施共享。此外,主机接口 API可通过附加指令被适当地扩大,其中每一个附 加指令对应于特定的逻辑功能(OR、AND、NAND等)。因此,在3DS存储器模块的情况中,根 据本公开的教导,3DS存储器模块的逻辑裸片可被配置为使得存储器模块能够在存储器模 块自身内完全处理总数计数操作和逻辑逐位运算。
[0052] 在处理内存储器(P頂)模型中,与总数计数操作和其他的逻辑逐位运算有关的计 算在存储器模块内实现/执行,而无需贯穿整个系统来移动数据。在具体实施例中,存储器 模块可以是基于动态随机存取存储器(DRAM)的三维堆栈(3DS)存储器模块,诸如,高带宽 存储器(HBM)模块,或混合存储器立方体(HMC)存储器模块。在具体实施例中,本公开的教 导也可适用于固态驱动器(SSD)、非3DS DRAM模块和任何其他基于半导体的存储系统,例 如,静态随机存取存储器(SRAM)、相变随机存取存储器(PRAM或PCRAM)、电阻随机存取存储 器(RRAM 或 ReRAM)、导电桥接 RAM(CBRAM)、磁 RAM(MRAM)、自旋转移力矩 MRAM(STT-MRAM) 等。通过将总数计数操作和逻辑逐位运算的处理卸载到存储器,对于存储器-CPU接口(以 及也对其他系统接口)的冗余数据传输被大大地减少,从而提高系统性能和能效。根据本 公开的具体实施例的教导的PM模型由此释放CPU以用于其它任务,减少整个存储器系统 的高速缓冲存储器污染,并通过大大地减少对于存储器-CHJ接口的事物来节省存储器带 宽。
[0053] 因此,本公开的具体实施例提供用于在存储器模块自身内进行总数计数操作和逻 辑逐位运的实施方式,从而消除将大的位向量从存储器移动到CPU的需要。而且,存储器模 块可对较大的向量并行地执行位计数约简树,由此与传统的CPU实施方式相比进一步提高 性能。使用根据本公开的教导的PM方法,可在PM使能存储器自身内执行多个实时分析 任务,从而提高整体系统性能并节省系统功耗/能耗。
[0054] 图1A示出根据本公开的一个实施例的系统10的高度简化的局部布局。如图所 示,系统10可包括存储器模块12,该存储器模块12通过一个或更多个高速链路16与处理 器或主机14连接和通信。在这里的讨论中,附图标记"12"也指存储器模块的封装或壳体。 封装12可包括一个或更多个存储器芯片(未示出),诸如,DRAM(或其他基于半导体的存 储器)芯片。在本公开中,诸如每个存储器模块的裸片/芯片的数量、每个芯片的存储器组 (memory bank)的数量和芯片中的存储器组的内部配置、或每个芯片的存储容量的细节是 不相关的,因此,在本文中没有提供这样的细节。
[0055] 在本公开的具体实施例中,P頂控制器(诸如,图9中的P頂控制器97)可被实现 为存储器模块12的部分。P頂控制器可与主机14交互并管理/促进下面更详细地讨论的 P0PC0UNT操作和逻辑逐位运算的存储器内执行。在具体实施例中,用于P0PC0UNT操作和 逻辑逐位运算的PIM逻辑(或P頂控制器)可在存储器模块12内被实现,而不管"传统的" 存储器控制器是否作为存储器模块的逻辑裸片的部分被集成。
[0056] 在一个实施例中,主机14可以是CPU,该CPU可以是通用微处理器。在这里的讨 论中,为了便于讨论,术语"处理器"和"CPU"可以可互换地使用。但是,这样理解,替代CPU 或作为CPU的补充,处理器14可包含任何其他类型的处理器,诸如,微控制器、数字信号处 理器(DSP)、图形处理单元(GPU)、专用集成电路(ASIC)处理器等。此外,在一个实施例中, 处理器/主机14可包括多于一个的CPU,这些CPU可在分布式处理环境中操作。处理器 14可被配置为根据特定的指令集架构(ISA)(诸如,x86指令集架构(32位或64位型式)、 PowerPC? ISA或者依赖于RISC (精简指令集计算机)ISA的MIPS (无互锁流水阶段的微 处理器)指令集架构)来执行指令和处理数据。在一个实施例中,除了处理器或CPU功能 以外,外部主机还可为具有功能的片上系统(SoC)。
[0057] 存储器模块12和外部主机14之间的高速链路16可提供宽的高速本地总线,用于 存储器模块12和主机14之间的数据移动。如下面稍后更详细地讨论的,在一个实施例中, 在存储器模块12最初被安装在系统10中时,可通过例如由存储器模块12提供给主机14 的应用编程接口(API)来促进基于逻辑裸片的P頂控制器和主机14之间的交互。如图1A 中象征性地示出的,API可通过连接链路16被提供给主机处理器14。如前面指出和稍后在 下面更详细地讨论的,主机14可使用API来启动总数计数和读取总数计数的结果。此外, 主机接口 API可通过附加指令被适当地扩大,每一个附加指令对应于特定的逻辑功能(例 如,OR、AND、NAND等),以便允许存储器模块12在存储器模块自身内执行逻辑逐位运算。
[0058] 这里请注意,仅仅为了便于示出,在图1A中,只有单个存储器模块12作为系统10 的部分被示出。在实际的实施中,系统10可包括多于一个的存储器模块一一所有的存储器 模块可以属于相同的类型或者可以属于不同的类型。在一个实施例中,在处理器14的操作 控制下,系统10可包括3DS以及非3DS存储器模块。通常,存储器模块12可以是任何基 于半导体的存储器或存储系统,早先提及了其一些示例(而且,为了简要起见,这里不再重 复)。此外,这样理解,作为图1A中或图10中的系统10的部分示出的单元自身可包含其他 复杂的组件。但是,这种组件由于缺乏与本公开的相关性而未在图1A或图10中示出。
[0059] 图1B示出使用3DS存储器模块13作为示例的图1A中的系统10的另一个实施例。 附图标记" 13"也指存储器模块的3D封装或壳体。这样理解,3DS存储器配置可提供比相 同尺寸的经典DRAM存储器高的带宽和单元密度。此外,与传统的DRAM存储器(比如双数 据速率2、3或4(DDR2/DDR3/DDR4)存储器)相比,3DS存储器模块可消耗更少的功率并以 更高的频率操作。在一个实施例中,3DS存储器模块13可以是HBM模块。在另一个实施例 中,3DS存储器模块13可以是HMC存储器模块。
[0060] 在图1B的示例性实施例中,3D封装13被示出为包括堆叠在彼此的顶部上的四个 (4) DRAM裸片/芯片18以及在堆栈的DRAM芯片的底部上的基片/逻辑裸片20。虽然每一 个DRAM芯片使用附图标记18-1至18-4被单独地标识,但是,它们可以由附图标记"18"统 称。DRAM芯片18可以是同步DRAM (SDRAM)存储器,其可使用穿硅通孔(TSV)和/或微凸 (未示出)相互连接并连接到逻辑基片20。在另一个实施例中,在存储器模块13中可存在 多于或少于四个的DRAM的裸片。
[0061] 在3DS存储器配置中,存储器控制器功能可作为单独的逻辑裸片(例如,图1B中 的逻辑裸片20)被集成到存储器封装中。逻辑裸片20可提供外部主机/处理器14与DRAM 芯片18之间的必要的接口。因此,存储器模块13和主机14之间的数据和控制信息的所有 传输可通过逻辑裸片20并由其控制。在本公开的具体实施例中,P頂控制器(诸如,图9中 的P頂控制器97)可被实施为逻辑裸片20的部分。如前所述,用于P0PC0UNT操作和逻辑 逐位运算的PIM逻辑(或P頂控制器)可在存储器模块13内被实施,而不管"传统的"存 储器控制器是否作为存储器模块的逻辑裸片20的部分被集成。
[0062] 逻辑裸片20和外部主机14之间的高速链路16可提供宽、高速本地总线以用于 3DS存储器模块13和主机14之间的数据移动。如下面稍后更详细地讨论的,在一个实施例 中,在存储器模块13最初被安装在系统10中时,可通过诸如由3DS存储器模块13的逻辑 裸片20提供给主机14的API来促进基于逻辑裸片的P頂控制器和主机14之间的交互。
[0063] 这里请注意,仅仅为了便于图示,在图1B中,只有单个存储器模块13作为系统10 的部分被示出。在
实际的实施方式中,系统10可包括多于一个的3DS存储器模块--所有 的3DS存储器模块可以属于相同的类型或者可以属于不同的类型。在一个实施例中,在处 理器14的操作控制下,系统10可包括3DS以及非3DS存储器模块和半导体存储器。此外, 这样理解,作为图1B中的系统10的部分而被示出的单元自身可包含其他复杂的组件。但 是,这种组件由于缺乏与本公开的相关性而未在图1B中示出。
[0064] 尽管下面的讨论可经常参考图1B中的基于DRAM的存储器配置,但是,这种参考本 质上纯粹是示例性的;图1B中的配置仅仅被用来便于讨论根据本公开的具体实施例的pm 模型。这样理解,本公开的教导仍然适用于任何基于半导体的存储器或存储系统,诸如,前 述的SRAM、PRAM、RRAM、CBRAM等。为了简要起见,当在图1A至1B中示出的存储器模块的 情景中解释本公开的教导时,没有提及所有的这样的基于半导体的存储系统/存储器。 [0065] 在下面的讨论中,假设要执行总数计数操作的位向量或位图已经被存储在存储器 模块12中的一个或更多个半导体存储器芯片(例如,存储器模块13中的DRAM芯片18)中。 类似地,还假设要执行逻辑逐位运算的两个或更多个位向量也被存储在一个或更多个DRAM 芯片18中。关于这些位图如何被存储在存储器芯片中或者这些位向量的源的信息与本公 开无关,因此,不对此进行进一步的详述。
[0066] 图2示出表示根据本公开的一个实施例可如何执行总数计数操作的示例性流程 图25。流程图25中示出的处理可由存储器模块12执行。更具体地,在一个实施例中,图 2中示出的步骤可由可实施在存储器模块12 (诸如,如图9所示的逻辑部95中的P頂控制 器97)中的控制器执行。最初,在框27处,存储器模块12可从主机14接收指令,以对在存 储器模块12中的一个或更多个存储器中存储的位向量执行P0P0C0UNT操作。如前所述,且 如框28所示,存储器模块12可以是具有一个或更多个存储器18的3DS存储器模块13,或 者,可以是任何其他的基于半导体的存储器(其一些示例在前面被给出)。3DS存储器模块 13可以是HBM存储器模块或者HMC存储器模块。响应于在框27处的来自主机的指令,在 框29处所指出的,存储器模块12可在存储器模块自身内执行P0PC0UNT操作一一而没有将 位向量传输到主机以便执行总数计数操作。因此,与总数计数操作的传统的基于处理器/ CPU的执行形成对照,图2中的实施例提供用于总数计数操作的基于存储器的执行,从而显 著地消除了在主机/处理器14和存储器模块12之间传输大的数据集的需要。通过这种存 储器内处理来消除冗余数据移动,改善了指令执行时间并减少了系统延迟和高速缓冲存储 器污染(由于更少需要在高速缓存器中存储位向量),同时节省系统能量和功率。由此,本 文中公开的P頂模型减少CPU负载并释放CPU/主机用于其它任务。稍后下面参考图4至 7的讨论来提供存储器模块12可如何执行总数计数操作的一些示例性细节。
[0067] 如在框30处所指出的,在执行总数计数操作之后,存储器模块12可在存储器模块 12内存储处理的结果一一即,在框27处输入的位向量的总数计数值。如稍后讨论的,在一 个实施例中,这种结果可作为执行总数计数操作的最终结果被存储在存储器模块12内的 预定义的存储位置中以便提交给主机。随后,在框31处,存储器模块12可在诸如主机14 访问存储器模块12以检索结果时将总数计数操作的结果提供或发送给主机14。
[0068] 图3描绘示出根据本公开的一个实施例可以如何执行逻辑逐位运算的示例性流 程图33。除了其关注逻辑逐位运算以外,图3中的流程图33基本上类似于图2中的流程图 25,因此,这里仅仅提供图3的简要描述。如图2中的情况一样,图3中的流程图33中图示 的处理也可以由存储器模块12执行。更具体地讲、,在一个实施例中,图3中图示的步骤可 以由逻辑裸片20中的控制器(例如,图9中的P頂控制器97)执行。最初,在框35处,存储 器模块12可从主机14接收指令,以对在存储器模块12中的一个或更多个存储器(例如, 3DS存储器模块13中的存储器18)中存储的两个或更多个位向量执行逻辑逐位操作。如前 所述,且如在框36处所示,存储器模块12可以是3DS存储器模块,例如,HBM存储器模块或 者HMC存储器模块,并且,逻辑逐位运算可以是,例如,OR、AND、NOT、NAND、X0R或N0R运算。 稍后下面在图8A和8B的讨论的情景中讨论示例性的逻辑逐位AND运算。通常,如前所述, 存储器模块12可以是任何基于半导体的存储系统,并且,逻辑逐位运算可以是任何逻辑运 算,而不管它是否在这里被明确提到。响应于在框35处的来自主机的指令,如在框37处所 指出的,存储器模块12可在存储器模块自身内执行指定的逻辑逐位运算一一而没有将位向 量传输到主机来执行。因此,基于存储器的执行显著地消除了系统中的冗余数据移动并提 高系统性能,同时节省系统能量和功率。逻辑逐位运算的执行的P頂模型也减少CPU负载 并释放CPU/主机用于其它任务。
[0069] 如在框38处所指出的,在执行逻辑逐位运算之后,存储器模块12可在存储器模块 12内存储处理的结果。如稍后讨论的,在一个实施例中,这种结果可被存储在存储器模块 12内的预定义的存储位置中,以提交给主机。在框39处,存储器模块12可在诸如主机14 访问存储器模块12以检索结果时将结果提供给主机14。
[0070] 在下面的讨论中,参考图4至7提供总数计数操作的存储器内实施方式的细节,并 且,参考图8A至8B提供逻辑逐位运算的存储器内实施方式的细节。在具体实施例中,对于 逻辑逐位运算,可适当地修改或共享图4至7中图示的总数计数特定的实施昂视,也如下所 述。
[0071] 图4是描绘根据本公开的一个实施例在图1A的存储器模块12 (或者图1B的3DS 存储器模块13)内可如何执行总数计数操作的示例性略图42。如图2中的框27所指出的, 在一个实施例中,存储器模块12可响应于来自主机14的指令来启动P0PC0UNT操作,以执 行总数计数。图4中的框44指示这种由存储器模块12进行的P0PC0UNT操作的启动。在 一个实施例中,总数计数操作可按两个步骤实施。最初,如在框45处所指出的,存储器模块 12可对预定义的小数据类型(对特定的位向量)(诸如,对位向量的每一个8位部分)执行 总数计数。此后,如在框46处所指出的,存储器模块12可使用约简树(稍后讨论)来累积 中间结果并产生最终总数计数。因此,在一个实施例中,在框45处的结果可以是用于在框 46处的约简树的输入。更具体地讲,如稍后参考图6至7所讨论的,在框45处的操作可形 成在框46处的约简树的第一阶段。
[0072] 作为在框45处的总数计数的一部分,在一个实施例中,存储器模块12 (例如,3DS 存储器模块13中的逻辑裸片20)可将位向量中的位划分成每一个为8位的多个非重叠段。 然后,存储器模块12可针对每一段计算段特定的位计数。然后,可使用约简树来将所有的 这种段特定的位计数相加来产生最终的总数计数值。这样理解,8位长度的段被选择仅是示 例。在不同的实施例中,在框45处的预定义的数据类型可以小于或大于8位。
[0073] 在图4中,列出两个示例性方法来执行在框45处的部分位计数一一(i)基于查找 表(LUT)的计数(框47)或者(ii)通过一系列的移位和逻辑逐位运算的计数(框48)。在 要对其执行总数计数的位向量的8位段的情况中,LUT可能需要256个条目(28 = 256)-- 每一个条目保持与被表示为LUT的地址输入的8位向量段对应的位计数结果(未示出)。 在一个实施例中,在框47处的基于LUT的总数计数可在单个时钟循环中被执行。
[0074] 可替换地,如在框48处所指出的,针对8位向量段的位计数可通过一系列的移位 和逻辑逐位运算来实施。图5示出根据本公开的一个实施例的用于对8位向量段中的位进 行计数的示例性伪代码。为了便于关联,在图5中使用相同的附图标记"48"来指用于在图 4中的框48处的计数操作的伪代码。在图5中,逻辑逐位运算AND用和(号指示,并 且,使用不同的十六进制数(使用"〇x"前缀(例如,在"0x33333333"中)表示)来实现移 位。
[0075] 参考图4中的框46,例如使用约简树,可以将对小数据尺寸的总数计数(框45)相 加。在图4中指出约简树的两个示例性配置:(i)如图6所示的全约简树(框49)(下面讨 论)或者(ii)紧凑约简树(框50),该紧凑约简树可重新使用加法器来缩小约简树的总尺 寸,如图所示(下面讨论)。
[0076] 图6示出根据本公开的一个实施例的用于对16字节数据进行总数计数的全约简 树49的示例。在一个实施例中,全约简树49可以是在存储器模块12内实施的专用功能块。 在另一个实施例中,全约简树49可被实施为专用功能块,该专用功能块被实现为3DS存储 器模块13的逻辑裸片20中的逻辑单元。在另一个实施例中,如图9所示,这种逻辑单元可 以被实施为PM控制器97的一部分。在图6中,位向量的(要对其执行总数计数)16字节 部分由8位块B0至B15标识--使用附图标记"55"统一标识。每一个这样的8位块被输 入到对应的位计数单元。在图6中,所有这样的位计数单元被统一指示为"CNT8"块,并且, 为了便于图示,使用附图标记"57"被统一标识。CNT8块57构成约简树49的第一阶段,并 且实施在图4中的框45处所指出的总数计数操作。因此,在一个实施例中,图6中的每一 个CNT8块可使用图4中的框47的基于LUT的方法来执行8位总数计数。可选择地,在另 一个实施例中,每一个CNT8块可使用图5中的示例性伪代码48来对8位执行总数计数,该 伪代码表示图4中的移位和逻辑逐位计数步骤48。约简树49中的随后的级/阶段可以是 简单的加法器。例如,如图6所示,约简树49的第二级可包括被指示为"ADD0"块且使用附 图标记"59"统一标识的加法器,约简树49的第三级可包括被指示为"ADD1"块且使用附图 标记"61"统一标识的加法器,约简树49的第四级可包括被指示为"ADD2"块且使用附图标 记"63"统一标识的加法器,并且约简树49的第五级可包括被指示为"ADD3"块且使用附图 标记"65"统一标识的加法器。由图6可知,随着从约简树49中的第二级59到更高级进行 加法,加法器可变宽。
[0077] 可使用来自第二级的对应加法器59将来自每一对的CNT8块的位计数相加,然后, 可使用来自第三级的对应加法器61将来自第二级的一对加法器的输出相加,等等。最后, 加法器65的输出可被存储在累积器单元(Accumulator Unit) 66中,在一个实施例中,累积 器单元66可以是图9中示出且稍后下面讨论的P頂结果寄存器99。此后,与(对其正在 执行POPCOUNT操作的)位向量相关联的另一个16字节块数据可从适当的存储器芯片(诸 如,图1B中的存储器芯片18)中被检索并被应用于约简树49以进行总数计数。以这样的方 式,每一个16字节块的向量数据的位计数可被累积并在单元66中被相加,以产生针对正在 考虑的位向量的POPCOUNT操作的最终结果。然后,最终POPCOUNT值可由处理器14检索。
[0078] 图7是根据本公开的一个实施例的用于对16字节数据进行总数计数的紧凑约简 树50的示例。与图6中的全约简树49形成对照,图7中的紧凑约简树50对于与给定的总 数计数操作相关联的每一次约减迭代(reduction iteration)重新使用相同组的加法器。 结果,图7中的实施方式可减少加法器的数量,但是,可能会增加执行约简所需的时间的成 本。由于需要使用一级中的加法器的输出作为下一级中的加法器的输入,所以也可能会增 加路由矩阵的复杂性。在一种实施方式中,紧凑约简树50可包括一般的加法器单元70,该 加法器单元可被存储器模块12中的其他组件(例如,存储器模块13中的基片逻辑裸片20 中的组件)共享。在一个实施例中,紧凑约简树50可作为图9中示出的P頂控制器97的 一部分而被包括。加法器单元70在图7中以虚线示出。到加法器单元70的输入可以是来 自CNT8单元57的最初的总数计数(表示图4中的框45)。加法器单元70可包括多个复 用器(被指示为"MUX"块并使用附图标记"72"统一标识),以从形成约简树的第一阶段的 CNT8单元57接收对应的输入。复用器72也可以接收以加法器单元70中的"ADD"块的输 出的形式的第二组输入。"ADD"或加法器块使用附图标记"7
4"统一标识。到MUX块72的 第二组输入由具有样式"_"的虚箭头75示出。另一方面,MUX单元72的输出由具有 样式"一 · 一 · 一"的虚箭头76不出,以将它们与箭头75区分开以及指不在重新使用加法 器74时的输出产生的迭代性。
[0079] 虽然在图7中未示出,但是,在一个实施例中,由加法器单元70针对每16字节数 据块产生的最终位计数可被存储在累积器中。在一个实施例中,加法器74之一可被配置为 充当累积器。通过加法器单元70中的每一个循环,参数被减少一半。在最后一轮迭代中, 只有两个参数保留,并且,这两个参数的总和将是总数计数操作的最终结果。在一个实施例 中,这样的最终结果可被传输到存储器模块12内的存储位置,以供主机14检索。在图9的 实施例中,这种存储位置是PIM结果寄存器99。在另一个实施例中,充当累积器的加法器 74自身可充当P頂结果寄存器99。
[0080] 在一个实施例中,可使用图6至7中的基于约简树的实施方式来计算针对大小至 多为一个DRAM页的向量的总数计数。DRAM页尺寸可以被固定和预定义。例如,在一个实施 例中,DRAM页尺寸可以是1KB。但是,DRAM页尺寸可在不同的系统中不同。如稍后讨论的, 在一个实施例中,对于大于一个DRAM页的向量尺寸,可使用图9中示出的存储器内P頂控 制器97。对于小于一个DRAM页的向量的位计数,存储器模块12中(或者在存储器模块13 的情况中的逻辑裸片20中)的P頂控制器或其他合适的实体可通过禁用约简树中的最初 的加法器(比如图6中的加法器59)的子集或者掩蔽出约简树中的一部分来只启用约简树 49或50的子集。例如,"掩码(mask)"可与约简树49至50的第一阶段相加,使得"CNT8" 块57的输出是零,除非与该块相关联的使能位被设置为"1"。在此方法中,每个CNT8模块 57可以用控制结果是"0"还是实位计数值的使能位(enable bit)来扩大。这种选择性的 启用切断对小于预定义的尺寸(这里,一个DRAM页)的向量的计数。如上所述,在一个实 施例中,使能信号(或者"掩码向量")可由PIM控制器97(图9)调节。
[0081] 另一方面,对跨越多个DRAM页的向量的位计数操作可能需要多个步骤。在1KB的 DRAM页尺寸的情况中,每一个步骤可计算向量的1KB子集的位计数,并且,可将部分结果累 积在存储器模块12 (或者,在存储器模块13的情况中的逻辑裸片20中)内的特殊寄存器 中。在一个实施例中,特殊寄存器是图9中示出的P頂结果寄存器99。最终的总数计数值 可通过将所有这样的部分结果相加而生成。
[0082] 当针对跨越多个DRAM页的大向量执行总数计数时,存储器模块12可能需要知道 该向量存储的所有的页地址。因此,在向量的第一 DRAM页被处理之后,存储器模块12可能 需要算出向量所在的后续页。在一个实施例中,在需要跨过多个页时,可以实现直接存储器 存取(DMA) -样的机制。在这样的实施方式中,向量占据的DRAM页的物理地址可例如由主 机14发送到存储器模块12。然后,这些页可由存储器模块内的内部控制器(例如,图9中 的P頂控制器97)横跨。
[0083] 与DRAM页尺寸有关的前述讨论本质上只是示例性的。在不是DRAM的半导体存储 器的情况中,对于这种非DRAM存储器中的存储器页,可使用类似的方法。
[0084] 这里讨论的基于P頂模型的总数计数方法可能在密码学中相当有用。例如,为了 判断某一算法的加密质量,可能需要在该算法上运行多种不同的位模式(pattern)。良好的 加密算法应该优选地产生相等数量的1和0,使得输出代码看起来完全随机。具有不平衡 的1和0的加密输出可能是差算法的一个指标。总数计数由此成为这种检验过程的主导因 素。根据本公开的教导的存储器内总数计数可显著地加速该检验过程。在密码学应用中, 将被计数的数据(例如,由加密算法生成的输出代码)可以是没有任何空间局部性的数据 流。因此,只在存储器内部对这种数据执行总数计数更有意义。(这种数据可能已经被主机 存储在存储器中。)此外,根据本公开的教导的基于PIM模型的总数计数也可以用作几种不 同的"攻击"(即,试图加密解密)的部分。
[0085] 图8A至图8B示出根据本公开的具体实施例的在图1A的存储器模块12内可如何 执行逻辑逐位运算的两个示例性实现方式。图8A示出基于单个缓冲器的P頂实施方式78, 而图8B示出基于双缓冲器的P頂实施方式87。图8A或图8B中的配置可被实施为存储器 模块12的一部分。在一个实施例中,这些配置中的任何一个可被实施为图9中示出的P頂 控制器97的一部分。为了便于参考,图8A和图8B之间的共同组件已经使用相同的附图标 记所标识。虽然图8A和图8B的实施例示出对两个8位向量的逻辑逐位运算,但是这种示 出只是示例性的。实践中,图8A和图8B中示出的配置可被扩展到任何数量(>2)的位向量 和任何长度(多于或少于8位)的位向量。
[0086] 对于图8A的实施例中的两个8位操作数之间的逻辑逐位运算,这两个操作数中的 一个的8位可由如不间断的箭头81指示的对应的感测放大器(sense amplifier)80从适 当的存储器单元79传输或"读取"。存储器单元79可以是任何半导体存储器(例如,图1A 中的存储器模块12或者图1B中的3DS存储器模块13)的存储器单元。第一操作数(8位 向量)在这里可被称为"操作数0"。对于操作数0,感测放大器80可将接收到的内容传输 到缓冲器82,如不间断的箭头83所示。在图8A的实施例中,对于逻辑逐位运算的第二8位 操作数(这里被称为"操作数1")可由感测放大器80从相应的存储器单元79接收。如具 有样式"_"的虚箭头84所示,感测放大器80可将该操作数1直接传输到计算块85,该 计算块85从缓冲器82接收操作数Ο (如箭头83所示)。
[0087] 计算块85可包含执行例如由主机14所指示的适当的逻辑逐位运算所需的逻辑。 在这一方面,在具体实施例中,计算块85可与实施POPCOUNT操作的存储器模块12的部分 共享一些逻辑单元或逻辑电路。逻辑逐位运算可包括大量的不同的逻辑运算中的任何一 种,例如,4勵、01?、勵1?、嫩勵401?等。在操作数0和操作数1之间的指定的逻辑逐位运算结 束时,计算块85可产生输出,该输出可被传输到存储器模块12内的存储位置,或者存储器 模块12内的其他逻辑块,或者,存储器模块12内的适当的输出单元,以用于最终传送到主 机14。在一个实施例中,存储器模块12内的这种存储或输出单元可以是图9中示出的P頂 结果寄存器99。在图8A的实施例中,这种输出由具有样式"一 · 一 · 一"的虚箭头86指 示。作为示例,操作数〇可以是位向量"11010010",而操作数1可以是位向量"10001111"。 在这两个位向量之间的逻辑逐位AND运算的情况中,计算块85将在箭头86处产生输出向 量"10000010"。
[0088] 在图8B的实施例中,如不间断的箭头88所示,感测放大器80将每一个操作数(操 作数〇和操作数1)传输到其自身的缓冲器。操作数〇被存储在第一缓冲器82中(如图8A 的实施例中一样),而操作数1被存储在第二缓冲器89中。因此,与图8A中的实施例形成 对照,在图8B的实施例中,感测放大器80不会将第二操作数直接供应给计算块85。每一个 操作数最初在其相应的缓冲器82或89中被缓冲。如具有样式"_"的虚箭头90和具 有样式".............."的虚箭头91所示,缓冲的操作数然后被发送到计算块85以用于 期望的逻辑运算。与如图8A中的实施例的情况中一样,计算块85可对接收到的操作数对 进行操作并在箭头86处产生输出。
[0089] 图9示出根据本公开的一个实施例的图1A中的存储器模块12的逻辑部95的示例 性布局。逻辑部95中示出的组件可实施在存储器模块12内。为了简要起见,仅与本公开 有关的部件在图9中被示出并在这里被讨论。在图1B中的3DS存储器模块13的情况中, 逻辑裸片20可被配置为包括与逻辑部95中示出的组件类似的组件。因此,图9的讨论同 样地也适用于图1B中的实施例。
[0090] 如图9中所示,逻辑部95可实现与P頂结果寄存器99 (在此也被称为"结果寄存 器")操作地连接的PM控制器97 (在此也被称为"控制器")。在一个实施例中,控制器97 可包括用于对在存储器模块12中的(多个)半导体存储器芯片(未示出)中存储的位向 量实施总数计数操作和逻辑逐位运算的必要软件和硬件逻辑。在图1B的实施例中,这种存 储器芯片是芯片18。如上所述,例如,控制器97可包括用于执行在图4中的框44至46处 的步骤以及在图2至3中的流程图中示出的步骤的硬件(例如,图6至7中的约简树49或 50和/或图8A至8B中的逻辑结构78或87)和软件(例如,图5中的伪代码48)。因此, 使用控制器97,存储器模块12可实现总数计数操作和逻辑逐位运算的存储器内执行。PM 控制器97可执行多个任务来促进这里讨论的存储器内处理。这种任务可包括例如提供接 口(API)以使得主机14能够启动命令和获取数据,与主机14交互,控制实施的约简树49或 50,控制逻辑结构78或87的操作,处理针对跨越多个存储器页的向量的总数计数的计算, 在PM结果寄存器99中累积位计数的中间结果,以及产生用于存储在结果寄存器99中的 最终总数计数值。
[0091] P頂控制器97可以通过主机链路接口和控制单元101(简单地说,"主机接口单 元")与主机14通信并通过存储器接口和控制单元103(简单地说,"存储器接口单元")与 存储器芯片(例如,图1B的实施例中的DRAM裸片18)通信。主机接口单元101可支持在 高速链路16之上的数据传输,而存储器接口单元103可促进通过内部连接(例如,前述的 穿硅通孔(TSV))的数据传输。这些接口 10U103可操作地结合到控制器97,并且可以在控 制器97的操作控制下,而控制器97也可以提供必要的时序和控制信令以协调这些单元的 操作。控制器97可最初通过主机接口单元101从主机接收位向量并使用存储器接口单元 103将它们存储在存储器模块12的(多个)存储器芯片中的一个或多个存储器位置(或存 储器单元)中。在总数计数操作或逻辑逐位运算期间,存储器接口单元103可从其物理存 储装置检索适当的(多个)位向量并将它们供应给PM控制器97以在存储器内执行这些 操作。在一些实施例中,存储器接口单元103的多个示例可被实现,其中,每一个示例被配 置为控制存储器模块12中的相应的存储器芯片组。存储器组选择、行/列存取以及通过控 制器97向/从(存储器模块12中)存储器芯片中的存储器组的数据传输的细节与本公开 无关,因此,在这里不讨论。
[0092] 逻辑部95还可包括与存储器接口单元103和主机接口 101结合的自检和错误检 测/校正单元105 (简单地说,"错误控制单元")。错误控制单元105可应用适当的纠错码 (ECC)在将从主机14接收到的数据存储在存储器芯片(例如,图1B的实施例中的DRAM芯 片18)之前对这些数据进行编码。在从存储器模块12中的存储器芯片读取这些数据时,可 根据用来对初始数据进行编码的ECC方案来检测和/或校正这些数据中的一个或更多个错 误。此外,错误控制单元105可常规地执行"自检"程序,以保存存储在存储器芯片中的数 据的完整性。
[0093] 现在主要参考P0PC0UNT操作的实施方式来描述控制器97通过主机接口单元101 与主机104的交互。在一个实施例中,主机14和控制器97之间的通信可通过对一组"P頂 特定的地址"的读写来进行,所述PM特定的地址可以是存储器模块12内的一个或更多个 预定义的存储位置或者这种位置的配置地址。预定义的存储位置的一些示例包括逻辑部95 中的现有的寄存器、存储器模块12中的存储器芯片之一中的存储器单元、或者在逻辑部95 中实现的(新的)专用寄存器。在存储器模块12首次通过(多个)高速链路16与主机14 连接时,诸如,在存储器模块12首次被安装在系统10中时,P頂控制器97可将API提供给 主机14。当在由处理器14正执行的程序中遇到与P0PC0UNT有关的指令时,API可将总数 计数过程"划分"成促进总数计数操作的存储器内实施方式的一组功能。在一个实施例中, P頂特定的地址可以是主机14通过系统10的基本输入输出系统(BIOS)知道的系统配置的 部分。API可向主机提供对这些P頂特定的地址的访问,以能够实现总数计数操作的存储器 内执行。
[0094] API可向主机通知预定义的地址和对应的功能(下面讨论)之间的相关性,使得主 机可针对给定的功能执行读取或写入操作。PM控制器97也知道哪些存储位置要访问一一 例如,存储最终总数计数以便主机读取或者检索从主机接收到的任何信息。可通过API提 供以使得PM控制器97与主机14通信来促进总数计数操作的存储器内执行的一些示例性 功能是:
[0095] (i) void P0PC0UNT(*p_vector, size):该功能可通过主机转换成对预定义的PIM 特定的地址的两个后续的写入操作。第一写入操作指示将对其执行总数计数的位向量的开 始地址(即,物理存储器地址),并且第二写入操作指示向量的尺寸。例如,在向量尺寸小于 一个存储器页时,或者,在向量跨越多个连续的存储器页时,该功能可被应用。物理存储器 地址可能与存储器模块12中的存储器芯片之一相关联。
[0096] (ii)void IsDoneO :该功能可指示最后一个操作是否完成。例如,最后一个操作 可以是位向量的最后一个待决部分的总数计数。该功能可转换成(由主机)从预定义的 PM特定的地址的单个读取操作。作为该读取操作的一部分,存储器模块12可返回"1"以 指示相关的PM操作完成或者其他情况下返回"〇"。当在存储器模块12中不存在对主机 14的反馈机制的情况中,可使用该方法。在另一个实施例中,当存储器模块12具有对主机 14的反馈机制的情况中,存储器模块12可以将消息发送到主机14以指示P頂操作完成。
[0097] (iii)data_t ReadResultO :该功能可返回最后一次总数计数的结果。该功能也 可转换成(由主机)从预定义的PM特定的地址的读取操作。如前所述,最终的总数计数 值可最初被累积在PM结果寄存器99中。该总数计数值然后可由控制器97传输到预定义 的存储位置(或者PM特定的地址)以由主机使用该功能读取。
[0098] 在一个实施例中,当向量跨越多个存储器页(可以是连续的,或者可以不是连续 的)时,主机14可明确地指定向量所处的所有的物理页或存储器地址。换句话说,主机14 可提供其中存储位向量的相应部分的存储器模块12中的存储器位置的物理地址。主机14 可通过对预定义的PM特定的地址的指定的写入操作来完成这个操作。例如,主机14可使 用API提供的功能"void PhysicalPage (*p_page) "来向控制器97通知存储正对其操作的 当前向量的下一页的物理地址。PIM控制器97可跟踪这些地址并对包含位向量的每一个存 储器页启动部分总数计数。主机14可一次全部地或者以预定的间隔顺序地提供物理地址。 接收到的物理地址可被存储在单个存储位置(或PM特定的地址)处或者在多个存储位置 处。更具体地讲,控制器97可最初将每一个接收到的物理地址存储在其对应的PIM特定的 地址(或存储位置)中,并然后访问该存储位置以获得接收到的物理地址来从对应的存储 器位置检索位向量的各个部分,以对接收到的部分执行部分位计数。PM控制器97可组合 所有的部分位计数的结果来实现对位向量的总数计数操作的执行。如前所述,部分位计数 可被累积在PM结果寄存器99中。通过组合所有的部分位计数产生的最终位计数可以最 初被存储在结果寄存器99中并随后被传输到相关的P頂特定的地址,以作为执行总数计数 操作的最终结果被提交给主机。如前所述,主机14可使用"data_t ReadResultO"功能来 读取该最终结果。
[0099] 如前所述,本公开也涉及针对大的向量的存储器内逻辑逐位运算。用于在存储器 内实施这种操作的一个原因是经常与实时分析工作负载中的总数计数操作一同使用逻辑 逐位运算。例如,如果网站正使用位图来跟踪每一个网页的访问者,则与两个网页相关联的 两个位图(或位向量)的"或"运算可指示多少数量的用户访问了这些网页中的至少一个。 在基于CPU的实施方式中,两个向量从存储器(其中存储向量)被传输到CPU(其中执行逻 辑运算)。存储器内实施方式可消除经由系统总线传输的一半数据,因为存储器内实施方 式将只传输逻辑逐位运算的最终结果。尤其在位向量大时,这可在冗余数据移动方面提供 显著的节省。此外,常见的用例可通常涉及许多向量而不是仅仅两个向量之间的逐位运算, 例如,0R或AND运算。此外,在常见的用例中,逐位运算通常以从逻辑逐位运算所导致的最 终向量的总数计数结束。在这种情景中,由总数计数操作和逻辑逐位运算的存储器内实施 方式提供的数据传输中的减少可能会更剧烈,因为所有的中间结果被保存在存储器模块12 内并不通过系统总线被发送给主机14。因此,在存储器模块12 (或模块13)内实施逻辑逐 位运算可提供用于能够通过PM卸载实时分析工作负荷的必要的基础。
[0100] 如图3中的框36所示,根据本公开的教导的P頂模型可被配置为在存储器模块 12 (或模块13)内实施任何逻辑逐位运算,例如,OR、AND、NOT、NAND、N0R和X0R运算。逻辑 逐位运算的存储器内实施方式可与总数计数实施方式共享很多相似性。图8A至图8B提供 示出逐位运算的存储器内实施方式的两个示例性实施例。此外,图4至图7和图9的前述 讨论也仍适用于用于逻辑逐位运算的PIM模型的情景,尽管有如下面简要描述的适当的修 改。
[0101] 参考图8A至图8B观察到,逻辑逐位运算的存储器内实施方式可能比总数计数操 作的实现更加简单。例如,在逐位运算的情况中,可能不需要如图6中的约简树49的全约 简树。CNT8块57可以用适当的逻辑运算所替代。例如,在逻辑0R运算的情况中,在计算块 85中可能需要只有单个阶段的加法器。例如,通过用逻辑运算加法器替代每一个CNT8块 57,可以实现单个阶段。类似于用于总数计数的向量尺寸的前述讨论,在小于一个存储器页 的向量尺寸的情况中,逻辑逐位运算可通过禁用不必要的加法器的掩码来实现。较大的向 量尺寸可在多个步骤中计算,并且,临时结果可以与先前在总数计数操作的情景中讨论的 方式类似的方式被累积在PM结果寄存器99中。如之前,P頂控制器97可以协调和管理 这些计算。PM控制器97也可以用附加功能来扩大API支持的主机接口,每一个附加功能 对应于特定的逻辑逐位运算。例如,对两个向量的逻辑逐位0R运算可使用下述语义:
[0102] data_t 0R(*p_vecl, *p_vec2, size):该功能可转换成由主机14对预定义的PIM 特定的地址(或存储位置)的三个写入操作。第一写入操作可指定第一向量的物理存储器 地址,第二写入操作可指定第二向量的物理存储器地址,并且,第三写入操作可指定两个向 量的尺寸。
[0103] 因此,在图4至7和图9的情景中的总数计数的存储器内实施方式的前述讨论也 仍然适用于逻辑逐位运算的存储器内实施方式。简要地说,例如,在对多个向量的逻辑逐位 运算的情况中,PM控制器97可最初从主机14接收存储器模块12中的存储了相应的位向 量的存储器位置(比如图8A至8B中示出的存储器单元79)的物理地址,然后将每一个接收 到的物理地址存储在存储器模块12内的P頂特定的地址(或存储位置)。控制器97可访 问适当的存储位置以获得对应的物理地址并然后从指定的存储器位置检索相应的位向量。 在一个实施例中,控制器97可将每一个位向量划分成多个位向量特定的非重叠段,并然后 将来自全部位向量的对应的位向量特定的段对齐为多组对齐段。然后,控制器97可对每 一组对齐段执行逐位运算,从而产生多个部分结果。如之前,部分结果可被存储在PM结果 寄存器99中。控制器97可随后在寄存器99中组合所有的部分结果,以实现逻辑逐位运算 的执行。从组合得到的最终结果可在最终将它存储在预定义的存储位置(或者PIM特定的 地址)处以供将来提交给主机14之前最初被存储在P頂结果寄存器99中。主机14可访 问该存储位置以读取结果。
[0104] 请注意,在存储器模块12的情景中的P0PC0UNT操作和逻辑逐位运算在存储器内 执行的上述原理可以适用于固态驱动器(SSD)或任何基于半导体的存储系统。例如,在SSD 的情景中,可以在SSD控制器中实现位计数操作,从而节省从CPU的来回的冗余传输。但是, 在一个实施例中,位计数操作也可以一一与任何其他归约运算一同一一更靠近SSD中的闪 速存储器存储单元被实现,从而减少对于内部SSD总线的流量(traffic)和竞争。在这种情 况下,归约运算可以在闪速裸片自身内而不是在SSD控制器内执行。此外,为了简要起见, 由于图4至9中的示例性实施例的详细的讨论,这里不讨论这种实施方式的另外的细节。
[0105] 图10示出根据本公开的一个实施例的图1A中的系统10(合并存储器单元12)的 整体布局。这里,为了便于参考和讨论,在图1A和10中对于公共的系统部件/单元使用相 同的附图标记。
[0106] 在图10中,主机处理器单元14被示出为与系统存储器单元107以及外围存储单 元109、一个或更多个输入装置111、一个或更多个输出装置112和网络接口单元114结合。 在一些实施例中,系统10可包括示出的装置或单元的多于一个的示例。系统10的一些示 例包括计算机系统(桌上型或膝上型)、平板计算机、移动装置、蜂窝电话、视频游戏单元或 控制台、机器对机器(M2M)通信单元、无状态"瘦"客户端系统或任何其它类型的计算或数 据处理装置。在各种实施例中,系统10可被配置为可机架安装(rack-mountable)的服务 器系统、独立系统或者为任何其他合适的形式因素。在一些实施例中,系统10可被配置为 客户端系统而不是服务器系统。
[0107] 在具体实施例中,主机处理器单元14可包括多于一个的CPU,并且/或者,系统10 可包括多于一个的处理器单元14 (例如,在分布式处理配置中)。在系统10是多处理器系统 时,可能存在CPU或处理器的多于一个的实例。如前所述,主机14可以是片上系统(SoC)。
[0108] 存储器单元107可包括至少一个存储器模块,例如,图1中的存储器模块12。如 前所述,存储器模块12可以是任何基于半导体的存储系统,例如,DRAM、SRAM、PRAM、RRAM、 CBRAM、MRAM、STT-MRAM等。在一些实施例中,存储器单元107可包括与一个或更多个非 3DS存储器模块结合的至少一个3DS存储器模块。非3DS存储器可包括DDR/DDR2/DDR3/ DDR4SDRAM、Ra:mbus?DRAM、闪速存储器和各种类型的只读存储器(ROM)等。此外,在一些 实施例中,系统存储器107可包括与单种类型的存储器相对的多种不同类型的半导体存储 器。在任何情况中,根据本公开的教导,系统存储器单元107可包括至少一个逻辑基片(或 逻辑裸片)一比如图9中的逻辑部95-其使得存储器单元107能够在存储器单元107内执 行总数计数操作和逻辑逐位运算。
[0109] 在各种实施例中,外围存储单元109可包括用于磁、光、磁光或固态存储介质(例 如,硬驱动器、光盘(例如,CD或DVD)、非易失性RAM装置等)的支持。在一些实施例中,外 围存储单元109可包括更复杂的存储装置/系统,例如,盘阵列(其可以是合适的RAID (独 立盘的冗余阵列)配置)或存储区域网络(SAN),所述存储装置/系统可通过标准小计算机 系统接口(SCSI)、光纤通道接口、Firewire如(IEEE 1394)接口或另一种合适的接口与处 理器14结合。在一个实施例中,外围存储单元109可通过标准外围接口(例如,基于外围 部件接口快速(PCI Express?)标准的接口,基于通用串行总线(USB)协议的接口,或基于 IEEE 1394( Firewire? )协议的接口)与处理器14结合。
[0110] 在具体实施例中,输入装置111可包括标准输入装置,诸如,计算机键盘、鼠标或 其他指向装置、触摸垫、操纵杆或任何其它类型的数据输入装置。输出装置112可包括图形 /显示装置、计算机屏幕、音频扬声器、警报系统、CAD/CAM(计算机辅助设计/计算机辅助加 工)系统、视频游戏台或任何其他类型的数据输出或处理控制装置。在一些实施例中,(多 个)输入装置111和(多个)输出装置112可通过(多个)1/0或外围接口与主机处理器 单元14親合。
[0111] 在一个实施例中,网络接口 114可与主机处理器单元14通信,以使系统10能够与 网络(未示出)结合。在另一个实施例中,网络接口 114可以完全不存在。网络接口 114 可包括用于将系统10 (无论有线还是无线)连接到网络的任何合适的装置、介质和/或
协 议内容。在各种实施例中,网络可包括局域网(LAN)、广域网(WAN)、有线或无线以太网、电 信网络或其他合适类型的网络。
[0112] 系统10可包括板上电源单元115,以对图10中图示的各种系统组件供电。电源单 元115可接收电池,或者,可以是可连接到AC电源插座的。在一个实施例中,电源单元115 可将太阳能转换为电力。
[0113] 在之前的描述中,出于说明且非限制性的目的,阐述了特定的细节(诸如,特定结 构、接口、技术等),以便提供对所公开的技术的彻底的理解。但是,本领域的技术人员将会 认识到,所公开的技术可以在脱离这些特定的细节的其他实施例中被实践。也就是说,本领 域的技术人员将能够设计实施所公开的技术的原理的各种布置,尽管这里没有明确地描述 或示出。在一些示例中,为了不被不必要的细节模糊所公开的技术的描述,省略了对公知的 装置、电路和方法的详细描述。本文中的记载所公开的技术的原理、方面和实施例以及其特 定示例的所有陈述意图涵盖其结构和功能等同物。另外,这些等同物意图包括当前已知的 等同物以及将来开发的等同物,例如,开发的执行相同功能的任何元件,而不管结构如何。
[0114] 因此,例如,本领域的技术人员将会认识到,这里的框图(诸如,图1A至1B和6至 10),可表示实施本技术的原理的示范性的电路系统或其他功能单元的概念图。类似地,将 会认识到,这里的流程图(诸如,图2至4)可表示可基本上由控制器(诸如,图9中的PM 控制器97)执行的各种处理或创新方面,而无需将处理传输到主机单元14。在具体实施例 中,控制器或主机处理器可包括例如通用处理器、专用处理器、常规处理器、数字信号处理 器(DSP)、多个微处理器、与DSP核相关联的一个或更多个微处理器、微控制器、专用集成电 路(ASIC)、现场可编程门阵列(FPGA)电路、任何其他类型的集成电路(1C)和/或状态机。 上面在图2至4的情景中描述的功能的中的一些或全部可以被设置在硬件中。
[0115] 在某些发明方面需要基于软件的处理时,这种软件或程序代码可驻留在计算机可 读的数据存储介质(未示出)中。在图10的实施例中这种数据存储介质可以是外围存储 装置109的一部分,或者,可以是图9中的P頂控制器97的内部存储器的一部分。主机14 或控制器97可执行在这种介质上存储的相关指令,以实施基于软件的处理。这种相关指令 可包括例如图5中示出的伪代码和前面讨论的不同的API提供的功能,以及实施本文讨论 的PIM功能可能所需的任何辅助程序代码。计算机可读数据存储介质可以是非暂态数据存 储介质,其包含由上述的通用计算机或处理器执行的计算机程序、软件、固件或微代码。计 算机可读存储介质的示例包括只读存储器(R0M)、随机存取存储器(RAM)、数字寄存器、高 速缓冲存储器、半导体存储器装置,磁介质(例如,内部硬盘,磁带和可移动盘),磁-光介质 和光学介质(例如,⑶-ROM盘和数字多功能盘(DVD))。
[0116] 根据本公开的各发明方面的PIM模型的替代实施例可包括负责提供附加功能(包 括任何的上述功能和/或支持根据本公开的教导的方案所需的任何功能)的附加组件。尽 管上面以具体的组合描述了特征和元件,但是,每一个特征或元件可单独地使用,而无需其 他的特征和元件,或者,每一个特征或元件可在有无其他特征的各种组合中被使用。如前所 述,系统10中的元件(例如,PM控制器97和主机单元14)中的一些的功能可通过使用能 够执行以在(上述的)计算机可读存储介质上存储的代码指令或微代码的形式的软件/固 件的硬件(例如,逻辑电路)和/或硬件来提供。因此,这种功能和图示的功能块将被理解 为硬件实现的和/或计算机实现的,并因此是机器实现的。
[0117] 前面描述了 PIM模型(其中,与总数计数操作和逻辑逐位运算有关的计算在存储 器模块内而不是在CPU内实施),由此消除了贯穿整个系统将数据从大的位向量移位的需 要。通过将这些操作的处理卸载到存储器,在存储器-CPU接口之上的冗余数据传输被大大 地减少,从而提高系统性能和能效。例如,所公开的PIM方法可在密码学中和在实时分析中 找到有益的应用。存储器模块可以是任何半导体存储器。存储器模块的逻辑裸片中的控制 器和专用寄存器可操作用来与主机连接并提供由主机请求的总数计数操作和逻辑逐位运 算的内存储器执行。根据本公开的具体实施例的教导的PM模型由此释放CPU用于其他任 务,因为现在可以在PM使能存储器自身内执行许多实时分析任务。
[0118] 如本领域的技术人员将会认识到的,可在广泛的应用范围内修改和改变在本申请 中描述的创新的概念。因此,要求专利保护的主题的范围不应当局限于上面讨论的任何特 定的示例性教导,而应当由下面的权利要求限定。
【主权项】
1. 一种用于支持存储器内处理的方法,包括如下步骤: 在存储器模块处从主机接收用于对在存储器模块中存储的位向量执行总数计数操作 的指令;以及 在存储器模块内执行总数计数操作,而不将位向量传输到主机以执行总数计数操作。2. 根据权利要求1所述的方法,还包括如下步骤: 在存储器模块内存储执行总数计数操作的结果;以及 将所述结果从存储器模块提供给主机。3. 根据权利要求1所述的方法,其中,执行总数计数操作的步骤包括: 将位向量中的位划分成多个非重叠段; 针对所述多个非重叠段中的每一个非重叠段,计算段特定的位计数;以及 将所有的段特定的位计数相加来产生所述结果。4. 根据权利要求3所述的方法,其中,每一个非重叠段包括8位。5. 根据权利要求3所述的方法,其中,计算段特定的位计数的步骤包括如下方式中的 一个: 使用在存储器模块中存储的查找表(LUT)来获得段特定的位计数;以及 对所述多个非重叠段中的每一个非重叠段执行一系列的移位和逻辑逐位运算来产生 段特定的位计数。6. 根据权利要求3所述的方法,其中,将所有的段特定的位计数相加的步骤包括: 使用每一个段特定的位计数作为对于存储器模块内的多个加法器中的对应一个加法 器的输入;以及 累积所述多个加法器中的所有加法器的输出来产生所述结果。7. 根据权利要求1所述的方法,还包括如下步骤: 从主机接收存储器模块中的存储有位向量的相应部分的存储器位置的物理地址; 针对每一个接收到的物理地址,从存储器位置检索位向量的相应部分; 对检索到的位向量的部分执行部分位计数;以及 组合所有的部分位计数的结果,来实现对位向量的总数计数操作的执行。8. 根据权利要求7所述的方法,还包括: 在存储器模块内的预定义的存储位置中存储每一个接收到的物理地址; 访问预定义的存储位置,以获得用于检索位向量的相应部分的每一个接收到的物理地 址;以及 将所有的部分位计数的组合结果存储在预定义的存储位置中以便提交给主机作为执 行总数计数操作的最终结果。9. 根据权利要求1所述的方法,其中,存储器模块是如下中的一个: 三维堆栈存储器模块; 高带宽存储器模块; 混合存储器立方体存储器模块; 固态驱动器; 动态随机存取存储器模块; 静态随机存取存储器; 相变随机存取存储器; 电阻随机存取存储器; 导电桥接随机存取存储器; 磁随机存取存储器;以及 自旋转移力矩磁随机存取存储器。10. 根据权利要求1所述的方法,其中,位向量通过加密算法而被生成。11. 根据权利要求10所述的方法,还包括: 基于执行总数计数操作的结果,确定加密算法的加密质量。12. 根据权利要求10所述的方法,其中,位向量被存储在存储器模块中。13. 根据权利要求10所述的方法,还包括: 在存储器模块内存储执行总数计数操作的结果;以及 将结果从存储器模块提供给主机。14. 一种用于支持存储器内处理的方法,包括如下步骤: 在存储器模块处从主机接收用于对在存储器模块中存储的两个或更多个位向量执行 逻辑逐位运算的指令;以及 在存储器模块内执行逻辑逐位运算,而没有将位向量传输到主机以便执行。15. 根据权利要求14所述的方法,还包括: 在存储器模块内存储执行逻辑逐位运算的结果;以及 将所述结果从存储器模块提供给主机。16. 根据权利要求14所述的方法,其中,逻辑逐位运算是如下运算中的一个: 或运算; 与运算; 非运算; 非与运算; 或非运算;以及 异或运算。17. 根据权利要求14所述的方法,其中,执行逻辑逐位运算的步骤包括: 将每一个位向量划分成多个位向量特定的非重叠段; 将来自所有的位向量的对应的位向量特定的非重叠段对齐成多组对齐的段; 对每一组对齐的段执行逻辑逐位运算,从而产生多个部分结果;以及 组合所有的部分结果,来实现逻辑逐位操作的执行。18. 根据权利要求17所述的方法,其中,每一个位向量特定的非重叠段包括8位。19. 根据权利要求17所述的方法,还包括在将每一个位向量划分成多个位向量特定的 段之前执行如下操作: 从主机接收存储器模块中的存储有相应的位向量的存储器位置的物理地址;以及 从对应的存储器位置检索位向量。20. 根据权利要求19所述的方法,还包括: 在存储器模块内的预定义的存储位置中存储每一个接收到的物理地址; 访问预定义的存储位置,以获得用于检索相应的位向量的每一个接收到的物理地址; 以及 在预定义的存储位置中存储组合所有的部分结果的最终结果,以便将来提交给主机。21. 根据权利要求14所述的方法,其中,存储器模块是如下中的一个: 三维堆栈存储器模块; 高带宽存储器模块; 混合存储器立方体存储器模块; 固态驱动器; 动态随机存取存储器模块; 静态随机存取存储器; 相变随机存取存储器; 电阻随机存取存储器; 导电桥接随机存取存储器; 磁随机存取存储器;以及 自旋转移力矩磁随机存取存储器。22. -种存储器模块,包括: 存储器芯片;以及 逻辑裸片,与存储器芯片连接,并且控制存储器芯片和外部主机之间的数据传输, 其中,逻辑裸片包括控制器,该控制器执行对在存储器芯片中存储的第一位向量的总 数计数操作和对在存储器芯片中存储的两个或更多个第二位向量的逻辑逐位运算中的至 少一个, 其中,控制器响应于从主机接收用于执行总数计数操作的指令而执行总数计数操作, 而没有将第一位向量传输到主机以便执行总数计数操作,以及 其中,控制器响应于从主机接收用于执行逻辑逐位运算的指令而执行逻辑逐位运算, 而没有将第二位向量传输到主机以便执行逻辑逐位运算。23. 根据权利要求22所述的存储器模块,其中,存储器模块是如下中的一个: 三维堆栈存储器模块; 高带宽存储器模块; 混合存储器立方体存储器模块; 固态驱动器; 动态随机存取存储器模块; 静态随机存取存储器; 相变随机存取存储器; 电阻随机存取存储器; 导电桥接随机存取存储器; 磁随机存取存储器;以及 自旋转移力矩磁随机存取存储器。24. 根据权利要求22所述的存储器模块,其中,逻辑裸片还包括: 寄存器,与控制器结合, 其中,在总数计数操作的执行之后,寄存器由控制器操作以存储执行总数计数操作的 第一结果,并且控制器将第一结果发送到存储器模块内的第一存储位置,以便由主机检索 执行总数计数操作的第一结果,以及 其中,在逻辑逐位运算的执行之后,寄存器由控制器操作以存储执行逻辑逐位运算的 第二结果,并且控制器将第二结果发送到存储器模块内的第二存储位置,以便由主机检索。25.根据权利要求24所述的存储器模块,其中,控制器包括: 处理逻辑单元,包括多个加法器,其中处理逻辑单元执行作为执行总数计数操作的部 分的如下操作: 从存储器芯片检索第一位向量; 将第一位向量中的位划分成多个非重叠段; 针对所述多个非重叠段中的每一个非重叠段,计算段特定的位计数; 使用每一个段特定的位计数作为对于所述多个加法器中的对应一个的输入; 在寄存器中累积来自所述多个加法器中的所有加法器的输出; 将所有累积的输出相加来产生第一结果;以及 在寄存器中存储第一结果。
【专利摘要】公开了一种用于支持存储器内处理的方法和存储器模块。一种用于支持存储器内处理的方法,包括如下步骤:在存储器模块处从主机接收用于对在存储器模块中存储的位向量执行总数计数操作的指令;以及,在存储器模块内执行总数计数操作,而不将位向量传输到主机以执行总数计数操作。
【IPC分类】G06F3/06
【公开号】CN105487812
【申请号】CN201510646971
【发明人】古兹·兹维, 尹亮
【申请人】三星电子株式会社
【公开日】2016年4月13日
【申请日】2015年10月8日
【公告号】US20160098200