CN105487812A - 用于支持存储器内处理的方法和存储器模块 - Google Patents

用于支持存储器内处理的方法和存储器模块 Download PDF

Info

Publication number
CN105487812A
CN105487812A CN201510646971.8A CN201510646971A CN105487812A CN 105487812 A CN105487812 A CN 105487812A CN 201510646971 A CN201510646971 A CN 201510646971A CN 105487812 A CN105487812 A CN 105487812A
Authority
CN
China
Prior art keywords
memory module
memory
bit
main frame
bit vector
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.)
Granted
Application number
CN201510646971.8A
Other languages
English (en)
Other versions
CN105487812B (zh
Inventor
古兹·兹维
尹亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of CN105487812A publication Critical patent/CN105487812A/zh
Application granted granted Critical
Publication of CN105487812B publication Critical patent/CN105487812B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Mathematical Physics (AREA)
  • Quality & Reliability (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Human Computer Interaction (AREA)
  • Complex Calculations (AREA)
  • Dram (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)

Abstract

公开了一种用于支持存储器内处理的方法和存储器模块。一种用于支持存储器内处理的方法,包括如下步骤:在存储器模块处从主机接收用于对在存储器模块中存储的位向量执行总数计数操作的指令;以及,在存储器模块内执行总数计数操作,而不将位向量传输到主机以执行总数计数操作。

Description

用于支持存储器内处理的方法和存储器模块
本申请要求于2014年10月1日提交的第62/058,568号美国临时申请以及2015年4月15日提交的第14/687,676号美国临时申请的优先权,所述美国临时申请的公开通过引用全部合并于此。
技术领域
本公开总体地涉及存储器。更具体地且不以限制的方式,在本公开中公开的各发明方面的具体实施例涉及在存储器模块自身内总数计数操作(POPCOUNToperation)和逻辑逐位运算的处理。
背景技术
延迟敏感处理和实时分析被预计占据超大规模数据中心中的处理周期的显著部分,该超大规模数据中心可包括基于云的计算中心。实时分析是一个正在成长的市场,据估计,到2018年将超过一百三十亿美金。位图(bitmap)操作是很多实时分析操作中的重要组成部分(buildingblock)。位图存储用户、事件、网页等的位阵列。此外,位图便于许多有效的查询,诸如,事件的跟踪,或者,唯一访问者的数量的跟踪,数据挖掘等。对于位图的常见的实时分析操作包括POPCOUNT操作(在下面讨论)和逻辑逐位运算,例如,OR(“或”)、AND(“与”)、XOR(“异或”)、NAND(“与非”)等。
实时分析中的常见的用例是通过大位图(largebitmap)维护网站使用的各种统计数据。POPCOUNT(或总数计数)操作对位序列中的一(1)的数量进行计数。它的使用传统上一直在密码学中,但近年来在实时数据分析域中越来越受到欢迎。例如,网站可通过位向量(其中,每一个“1”位对应于一个用户)来跟踪每个用户的网页访问。因此,对给定网页的唯一访问者的数量进行计数实际上是对位向量进行总数计数。作为示例,在具有4百万用户的网站的情况下,需要考虑到所有的用户的位向量的大小为512千字节(KB)的数量级上(=4MB(兆比特))。
这里请注意,为了便于讨论,大写术语“POPCOUNT(总数计数)”(它的非大写型式“popcount”)和术语“bitcount(位计数)”可以在本文中可互换地使用。类似地,为了便于讨论,术语“位图”和“位向量”可以在下面可互换地使用,其实际上指位序列。
发明内容
在一个实施例中,一种用于支持存储器内处理的方法可包括如下步骤:在存储器模块处从主机接收用于对在存储器模块中存储的位向量执行总数计数操作的指令;以及,在存储器模块内执行总数计数操作,而不将位向量传输到主机以执行总数计数操作。
所述方法还可包括如下步骤:在存储器模块内存储执行总数计数操作的结果;以及,将所述结果从存储器模块提供给主机。
执行总数计数操作的步骤可包括:将位向量中的位划分成多个非重叠段;针对所述多个非重叠段中的每一个非重叠段,计算段特定的位计数;以及,将所有的段特定的位计数相加来产生所述结果。
每一个非重叠段可包括8位。
计算段特定的位计数的步骤可包括如下方式中的一个:使用在存储器模块中存储的查找表(LUT)来获得段特定的位计数;以及,对所述多个非重叠段中的每一个非重叠段执行一系列的移位和逻辑逐位运算来产生段特定的位计数。
将所有的段特定的位计数相加的步骤可包括:使用每一个段特定的位计数作为对于存储器模块内的多个加法器中的对应一个加法器的输入;以及,累积所述多个加法器中的所有加法器的输出来产生所述结果。
所述方法还可包括如下步骤:从主机接收存储器模块中的存储有位向量的相应部分的存储器位置的物理地址;针对每一个接收到的物理地址,从存储器位置检索位向量的相应部分;对检索到的位向量的部分执行部分位计数;以及,组合所有的部分位计数的结果,来实现对位向量的总数计数操作的执行。
所述方法还可包括如下步骤:在存储器模块内的预定义的存储位置中存储每一个接收到的物理地址;访问预定义的存储位置,以获得用于检索位向量的相应部分的每一个接收到的物理地址;以及,将所有的部分位计数的组合结果存储在预定义的存储位置中以便提交给主机作为执行总数计数操作的最终结果。
存储器模块可以是三维堆栈存储器模块、高带宽存储器模块、混合存储器立方体存储器模块、固态驱动器、动态随机存取存储器模块、静态随机存取存储器、相变随机存取存储器、电阻随机存取存储器、导电桥接随机存取存储器、磁随机存取存储器以及自旋转移力矩磁随机存取存储器中的一个。
位向量可通过加密算法而被生成。
所述方法还可包括如下步骤:基于执行总数计数操作的结果,确定加密算法的加密质量。
位向量可被存储在存储器模块中。
所述方法还可包括如下步骤:在存储器模块内存储执行总数计数操作的结果;以及,将结果从存储器模块提供给主机。
在另一个实施例中,一种用于支持存储器内处理的方法可包括如下步骤:在存储器模块处从主机接收用于对在存储器模块中存储的两个或更多个位向量执行逻辑逐位运算的指令;以及,在存储器模块内执行逻辑逐位运算,而没有将位向量传输到主机以便执行。
所述方法还可包括如下步骤:在存储器模块内存储执行逻辑逐位运算的结果;以及,将所述结果从存储器模块提供给主机。
逻辑逐位运算可以是或运算、与运算、非运算、非与运算、或非运算、以及,异或运算中的一个。
执行逻辑逐位运算的步骤可包括:将每一个位向量划分成多个位向量特定的非重叠段;将来自所有的位向量的对应的位向量特定的非重叠段对齐成多组对齐的段;对每一组对齐的段执行逻辑逐位运算,从而产生多个部分结果;以及,组合所有的部分结果,来实现逻辑逐位操作的执行。
每一个位向量特定的非重叠段可包括8位。
所述方法还可包括在将每一个位向量划分成多个位向量特定的段之前执行如下:从主机接收存储器模块中的存储有相应的位向量的存储器位置的物理地址;以及,从对应的存储器位置检索位向量。
所述方法还可包括:在存储器模块内的预定义的存储位置中存储每一个接收到的物理地址;访问预定义的存储位置,以获得用于检索相应的位向量的每一个接收到的物理地址;以及,在预定义的存储位置中存储组合所有的部分结果的最终结果,以便将来提交给主机。
存储器模块可以是三维堆栈存储器模块、高带宽存储器模块、混合存储器立方体存储器模块、固态驱动器、动态随机存取存储器模块、静态随机存取存储器、相变随机存取存储器、电阻随机存取存储器、导电桥接随机存取存储器、磁随机存取存储器以及自旋转移力矩磁随机存取存储器中的一个。
在另一个实施例中,一种存储器模块可包括:存储器芯片;以及,逻辑裸片,与存储器芯片连接,并且控制存储器芯片和外部主机之间的数据传输,其中,逻辑裸片包括控制器,该控制器执行对在存储器芯片中存储的第一位向量的总数计数操作和对在存储器芯片中存储的两个或更多个第二位向量的逻辑逐位运算中的至少一个,其中,控制器响应于从主机接收用于执行总数计数操作的指令而执行总数计数操作,而没有将第一位向量传输到主机以便执行总数计数操作,以及,其中,控制器响应于从主机接收用于执行逻辑逐位运算的指令而执行逻辑逐位运算,而没有将第二位向量传输到主机以便执行逻辑逐位运算。
存储器模块可以是三维堆栈存储器模块、高带宽存储器模块、混合存储器立方体存储器模块、固态驱动器、动态随机存取存储器模块、静态随机存取存储器、相变随机存取存储器、电阻随机存取存储器、导电桥接随机存取存储器、磁随机存取存储器以及自旋转移力矩磁随机存取存储器中的一个。
逻辑裸片还可包括:寄存器,与控制器结合,其中,在总数计数操作的执行之后,寄存器由控制器操作以存储执行总数计数操作的第一结果,并且控制器将第一结果发送到存储器模块内的第一存储位置,以便由主机检索执行总数计数操作的第一结果,以及,其中,在逻辑逐位运算的执行之后,寄存器由控制器操作以存储执行逻辑逐位运算的第二结果,并且控制器将第二结果发送到存储器模块内的第二存储位置,以便由主机检索。
控制器可包括:处理逻辑单元,包括多个加法器,其中处理逻辑单元执行作为执行总数计数操作的部分的如下操作:从存储器芯片检索第一位向量;将第一位向量中的位划分成多个非重叠段;针对所述多个非重叠段中的每一个非重叠段,计算段特定的位计数;使用每一个段特定的位计数作为对于所述多个加法器中的对应一个的输入;在寄存器中累积来自所述多个加法器中的所有加法器的输出;将所有累积的输出相加来产生第一结果;以及,在寄存器中存储第一结果。
根据本公开的各方面,建议了一种存储器内处理(PIM)模型,其中,与总数计数操作和逻辑逐位运算有关的计算在存储器模块内而不是在主机中央处理单元(CPU)内实现。存储器内执行由此消除了贯穿整个系统将数据从大的位向量移动的需要。通过将这些操作的处理卸载到存储器,经由存储器-CPU接口的冗余数据传输被大大地减少,从而提高系统性能和能效。存储器模块的逻辑裸片中的控制器和专用寄存器操作用来与主机连接并提供由主机请求的总数计数操作和逻辑逐位运算的存储器内执行。本公开的PIM模型由此释放CPU用于其他任务,因为现在可以在PIM使能存储器自身内执行许多实时分析任务。存储器模块可以是三维堆栈(3DS)存储器或任何其他的半导体存储器。
附图说明
在下面的部分中,将参考在附图中图示的示例性实施例来描述本公开的各发明方面,在附图中:
图1A示出根据本公开的一个实施例的系统的高度简化的局部布局;
图1B示出作为示例的图1A中的系统的使用3DS存储器模块的另一个实施例;
图2示出表示根据本公开的一个实施例的可如何执行总数计数操作的示例性流程图;
图3描绘示出根据本公开的一个实施例的可如何执行逻辑逐位运算的示例性流程图;
图4是描绘根据本公开的一个实施例的在图1A至1B的存储器模块内可如何执行总数计数操作的示例性略图;
图5示出根据本公开的一个实施例的用于对8位向量段中的位进行计数的示例性伪代码;
图6示出根据本公开的一个实施例的用于对16字节数据进行总数计数的全约简树(fullreductiontree)的示例;
图7示出根据本公开的一个实施例的用于对16字节数据进行总数计数的紧凑约简树(compactreductiontree)的示例;
图8A至图8B示出根据本公开的具体实施例的在图1A的存储器模块内可如何执行逻辑逐位运算的两个示例性实施方式;
图9示出根据本公开的一个实施例的图1A中的存储器模块的逻辑部的示例性布局;以及
图10描绘根据本公开的一个实施例的图1A中的系统的整体布局。
具体实施方式
在下面的详细描述中,为了提供对本公开的彻底的理解,阐述了大量的具体细节。但是,本领域的技术人员将会理解,所公开的各发明方面可以在没有这些具体细节的情况下被实践。在其他示例中,公知的方法、过程、部件和电路未被详细地描述,以便不模糊本公开。此外,所描述的发明方面可被实现以在包括例如3DS以及非3DS存储器的任何的基于半导体的存储系统中执行内存储器操作。
贯穿本说明书中对“一个实施例”或“实施例”的提及是指,结合该实施例描述的特定的特征、结构或特性被包括在本公开的至少一个实施例中。因此,在贯穿本说明书的不同地方中短语“在一个实施例中”或“在实施例中”或“根据一个实施例”(或具有类似含义的其他短语)的出现未必都指同一实施例。此外,特定的特征、结构或特性可以在一个或更多个实施例中以任何合适的方式组合。另外,根据本文中讨论的情景,单数术语可包括其复数形式,并且,复数术语可包括其单数形式。类似地,带连号的术语(例如,“real-time(实时)”,“pre-defined(预定义)”,“CPU-based(基于CPU的)”等)可以偶尔与其不带连号的型式(例如,“realtime(实时)”,“predefined(预定义)”,“CPUbased(基于CPU的)”等)可互换地使用,并且,大写条目(例如,“POPCOUNT(总数计数)”、“LogicDie(逻辑裸片)”等)可与其非大写型式(例如,“popcount(总数计数)”、“logicdie(逻辑裸片)”)可互换地使用。这种偶尔可互换使用不应被视为相互不一致。
一开始就请注意,术语“结合”、“操作地结合”、“被连接”、“连接”、“被电连接”等在本文中可互换地使用,通常指的是以可操作的方式电气/电子连接的状态。类似地,当第一实体将信息信号(无论是否包含地址、数据或控制信息)电发送(无论通过有线还是无线方式)到(多个)第二实体并且/或者从第二实体接收该信息信号时,第一实体被认为是与第二实体“通信”,而不管这些信号的类型(模拟或数字)如何。进一步请注意,本文中示出和讨论了的各图(包括部件图)仅仅是出于示范性的目的,而不是按比例绘制。
如本文中使用的术语“第一”、“第二”等被用作它们之前的名词的标签,并不意指任何类型的排序(例如,空间,时间,逻辑等),除非明确定义为这样。
目前,所有的实时分析框架依赖于用于存储数据集的存储器,而POPCOUNT操作或逻辑逐位运算在中央处理单元(CPU)中被执行。结果,大量的数据需要从存储器(在这种存储器中保存有数据或位图)传输到CPU以便计算。因此,执行总数计数操作或逻辑逐位运算(诸如,早先提及的超大规模数据中心)的系统的性能受存储器和CPU之间的多次往返数据传输的约束。
在具有4百万用户的网站的前一示例的情况中,大量的数据需要从存储器传输到CPU以便计算。但是,总数计数操作的CPU生成的结果可以只是约3个字节长,因为222=512KB,并因此,CPU可输出log2(222)=22个二进制位(≈3字节)作为表示512KB位向量的总数计数值。这类似于使用三个二进制位来计数到八(8),或者使用四个二进制位来计数到十六(16),等等。因此,总数计数实质上是在大的位向量之上的缩位运算(reductionoperation)。但是,如上所述,传统的计算模型是低效的,因为计算时间和能量由大数据集贯穿系统从存储器到CPU并返回的冗余动作主导。这种低效被进一步加剧,因为通常只有最终总数计数结果总是被程序使用,并且所有的中间位向量或者数据集将被丢弃。
在一个实施例中,存储器模块可被配置为包括控制器,该控制器可包括硬件和/或软件以支持总数计数操作和逻辑逐位运算的存储器内实施。在一个实施例中,存储器模块可以是三维堆栈(3DS)存储器模块,其基片(base)或逻辑裸片(logicdie)可被配置为包括控制器。例如,在POPCOUNT操作的情况中,根据本公开的教导的处理内存储器(PIM:Processing-In-Memory)模型可向存储器模块(或者,3DS存储器的基片/逻辑裸片)提供如下的附加物。(i)每次可计算(最多)全动态随机存取存储器(DRAM)页的总数计数的基于硬件的约简树。(ii)可使能横横跨一个DRAM页不同的尺寸的向量的硬件逻辑。(iii)特殊寄存器(本文中被称为“PIM结果寄存器(PIMResultRegister)”),可存储最终结果(即,总数计数值)并可由存储器的主机用来检索最终的总数计数值。在特定的实施例中,在向量尺寸大于DRAM页时,该寄存器也可以用来保持中间结果。在这种情况中,该寄存器可累积所有的中间结果来最后存储最终结果以供主机后续检索。(iv)接口(诸如,应用编程接口(API)),主机可使用该接口来启动总数计数并从PIM结果寄存器读取结果。在一个实施例中,这种操作启动和结果检索可通过对存储器模块中的一个或更多个预定义的存储位置进行读写来进行。例如,在一个实施例中,API可暴露PIM结果寄存器作为存储有最终总数计数值的这样一个预定义的存储器位置。因此,对该特殊存储器位置的任何访问是对PIM结果寄存器的直接访问。
用于上述的总数计数的存储器内实施的硬件/软件配置可适当地与逻辑逐位运算的存储器内实施共享。此外,主机接口API可通过附加指令被适当地扩大,其中每一个附加指令对应于特定的逻辑功能(OR、AND、NAND等)。因此,在3DS存储器模块的情况中,根据本公开的教导,3DS存储器模块的逻辑裸片可被配置为使得存储器模块能够在存储器模块自身内完全处理总数计数操作和逻辑逐位运算。
在处理内存储器(PIM)模型中,与总数计数操作和其他的逻辑逐位运算有关的计算在存储器模块内实现/执行,而无需贯穿整个系统来移动数据。在具体实施例中,存储器模块可以是基于动态随机存取存储器(DRAM)的三维堆栈(3DS)存储器模块,诸如,高带宽存储器(HBM)模块,或混合存储器立方体(HMC)存储器模块。在具体实施例中,本公开的教导也可适用于固态驱动器(SSD)、非3DSDRAM模块和任何其他基于半导体的存储系统,例如,静态随机存取存储器(SRAM)、相变随机存取存储器(PRAM或PCRAM)、电阻随机存取存储器(RRAM或ReRAM)、导电桥接RAM(CBRAM)、磁RAM(MRAM)、自旋转移力矩MRAM(STT-MRAM)等。通过将总数计数操作和逻辑逐位运算的处理卸载到存储器,对于存储器-CPU接口(以及也对其他系统接口)的冗余数据传输被大大地减少,从而提高系统性能和能效。根据本公开的具体实施例的教导的PIM模型由此释放CPU以用于其它任务,减少整个存储器系统的高速缓冲存储器污染,并通过大大地减少对于存储器-CPU接口的事物来节省存储器带宽。
因此,本公开的具体实施例提供用于在存储器模块自身内进行总数计数操作和逻辑逐位运的实施方式,从而消除将大的位向量从存储器移动到CPU的需要。而且,存储器模块可对较大的向量并行地执行位计数约简树,由此与传统的CPU实施方式相比进一步提高性能。使用根据本公开的教导的PIM方法,可在PIM使能存储器自身内执行多个实时分析任务,从而提高整体系统性能并节省系统功耗/能耗。
图1A示出根据本公开的一个实施例的系统10的高度简化的局部布局。如图所示,系统10可包括存储器模块12,该存储器模块12通过一个或更多个高速链路16与处理器或主机14连接和通信。在这里的讨论中,附图标记“12”也指存储器模块的封装或壳体。封装12可包括一个或更多个存储器芯片(未示出),诸如,DRAM(或其他基于半导体的存储器)芯片。在本公开中,诸如每个存储器模块的裸片/芯片的数量、每个芯片的存储器组(memorybank)的数量和芯片中的存储器组的内部配置、或每个芯片的存储容量的细节是不相关的,因此,在本文中没有提供这样的细节。
在本公开的具体实施例中,PIM控制器(诸如,图9中的PIM控制器97)可被实现为存储器模块12的部分。PIM控制器可与主机14交互并管理/促进下面更详细地讨论的POPCOUNT操作和逻辑逐位运算的存储器内执行。在具体实施例中,用于POPCOUNT操作和逻辑逐位运算的PIM逻辑(或PIM控制器)可在存储器模块12内被实现,而不管“传统的”存储器控制器是否作为存储器模块的逻辑裸片的部分被集成。
在一个实施例中,主机14可以是CPU,该CPU可以是通用微处理器。在这里的讨论中,为了便于讨论,术语“处理器”和“CPU”可以可互换地使用。但是,这样理解,替代CPU或作为CPU的补充,处理器14可包含任何其他类型的处理器,诸如,微控制器、数字信号处理器(DSP)、图形处理单元(GPU)、专用集成电路(ASIC)处理器等。此外,在一个实施例中,处理器/主机14可包括多于一个的CPU,这些CPU可在分布式处理环境中操作。处理器14可被配置为根据特定的指令集架构(ISA)(诸如,x86指令集架构(32位或64位型式)、ISA或者依赖于RISC(精简指令集计算机)ISA的MIPS(无互锁流水阶段的微处理器)指令集架构)来执行指令和处理数据。在一个实施例中,除了处理器或CPU功能以外,外部主机还可为具有功能的片上系统(SoC)。
存储器模块12和外部主机14之间的高速链路16可提供宽的高速本地总线,用于存储器模块12和主机14之间的数据移动。如下面稍后更详细地讨论的,在一个实施例中,在存储器模块12最初被安装在系统10中时,可通过例如由存储器模块12提供给主机14的应用编程接口(API)来促进基于逻辑裸片的PIM控制器和主机14之间的交互。如图1A中象征性地示出的,API可通过连接链路16被提供给主机处理器14。如前面指出和稍后在下面更详细地讨论的,主机14可使用API来启动总数计数和读取总数计数的结果。此外,主机接口API可通过附加指令被适当地扩大,每一个附加指令对应于特定的逻辑功能(例如,OR、AND、NAND等),以便允许存储器模块12在存储器模块自身内执行逻辑逐位运算。
这里请注意,仅仅为了便于示出,在图1A中,只有单个存储器模块12作为系统10的部分被示出。在实际的实施中,系统10可包括多于一个的存储器模块——所有的存储器模块可以属于相同的类型或者可以属于不同的类型。在一个实施例中,在处理器14的操作控制下,系统10可包括3DS以及非3DS存储器模块。通常,存储器模块12可以是任何基于半导体的存储器或存储系统,早先提及了其一些示例(而且,为了简要起见,这里不再重复)。此外,这样理解,作为图1A中或图10中的系统10的部分示出的单元自身可包含其他复杂的组件。但是,这种组件由于缺乏与本公开的相关性而未在图1A或图10中示出。
图1B示出使用3DS存储器模块13作为示例的图1A中的系统10的另一个实施例。附图标记“13”也指存储器模块的3D封装或壳体。这样理解,3DS存储器配置可提供比相同尺寸的经典DRAM存储器高的带宽和单元密度。此外,与传统的DRAM存储器(比如双数据速率2、3或4(DDR2/DDR3/DDR4)存储器)相比,3DS存储器模块可消耗更少的功率并以更高的频率操作。在一个实施例中,3DS存储器模块13可以是HBM模块。在另一个实施例中,3DS存储器模块13可以是HMC存储器模块。
在图1B的示例性实施例中,3D封装13被示出为包括堆叠在彼此的顶部上的四个(4)DRAM裸片/芯片18以及在堆栈的DRAM芯片的底部上的基片/逻辑裸片20。虽然每一个DRAM芯片使用附图标记18-1至18-4被单独地标识,但是,它们可以由附图标记“18”统称。DRAM芯片18可以是同步DRAM(SDRAM)存储器,其可使用穿硅通孔(TSV)和/或微凸(未示出)相互连接并连接到逻辑基片20。在另一个实施例中,在存储器模块13中可存在多于或少于四个的DRAM的裸片。
在3DS存储器配置中,存储器控制器功能可作为单独的逻辑裸片(例如,图1B中的逻辑裸片20)被集成到存储器封装中。逻辑裸片20可提供外部主机/处理器14与DRAM芯片18之间的必要的接口。因此,存储器模块13和主机14之间的数据和控制信息的所有传输可通过逻辑裸片20并由其控制。在本公开的具体实施例中,PIM控制器(诸如,图9中的PIM控制器97)可被实施为逻辑裸片20的部分。如前所述,用于POPCOUNT操作和逻辑逐位运算的PIM逻辑(或PIM控制器)可在存储器模块13内被实施,而不管“传统的”存储器控制器是否作为存储器模块的逻辑裸片20的部分被集成。
逻辑裸片20和外部主机14之间的高速链路16可提供宽、高速本地总线以用于3DS存储器模块13和主机14之间的数据移动。如下面稍后更详细地讨论的,在一个实施例中,在存储器模块13最初被安装在系统10中时,可通过诸如由3DS存储器模块13的逻辑裸片20提供给主机14的API来促进基于逻辑裸片的PIM控制器和主机14之间的交互。
这里请注意,仅仅为了便于图示,在图1B中,只有单个存储器模块13作为系统10的部分被示出。在实际的实施方式中,系统10可包括多于一个的3DS存储器模块——所有的3DS存储器模块可以属于相同的类型或者可以属于不同的类型。在一个实施例中,在处理器14的操作控制下,系统10可包括3DS以及非3DS存储器模块和半导体存储器。此外,这样理解,作为图1B中的系统10的部分而被示出的单元自身可包含其他复杂的组件。但是,这种组件由于缺乏与本公开的相关性而未在图1B中示出。
尽管下面的讨论可经常参考图1B中的基于DRAM的存储器配置,但是,这种参考本质上纯粹是示例性的;图1B中的配置仅仅被用来便于讨论根据本公开的具体实施例的PIM模型。这样理解,本公开的教导仍然适用于任何基于半导体的存储器或存储系统,诸如,前述的SRAM、PRAM、RRAM、CBRAM等。为了简要起见,当在图1A至1B中示出的存储器模块的情景中解释本公开的教导时,没有提及所有的这样的基于半导体的存储系统/存储器。
在下面的讨论中,假设要执行总数计数操作的位向量或位图已经被存储在存储器模块12中的一个或更多个半导体存储器芯片(例如,存储器模块13中的DRAM芯片18)中。类似地,还假设要执行逻辑逐位运算的两个或更多个位向量也被存储在一个或更多个DRAM芯片18中。关于这些位图如何被存储在存储器芯片中或者这些位向量的源的信息与本公开无关,因此,不对此进行进一步的详述。
图2示出表示根据本公开的一个实施例可如何执行总数计数操作的示例性流程图25。流程图25中示出的处理可由存储器模块12执行。更具体地,在一个实施例中,图2中示出的步骤可由可实施在存储器模块12(诸如,如图9所示的逻辑部95中的PIM控制器97)中的控制器执行。最初,在框27处,存储器模块12可从主机14接收指令,以对在存储器模块12中的一个或更多个存储器中存储的位向量执行POPOCOUNT操作。如前所述,且如框28所示,存储器模块12可以是具有一个或更多个存储器18的3DS存储器模块13,或者,可以是任何其他的基于半导体的存储器(其一些示例在前面被给出)。3DS存储器模块13可以是HBM存储器模块或者HMC存储器模块。响应于在框27处的来自主机的指令,在框29处所指出的,存储器模块12可在存储器模块自身内执行POPCOUNT操作——而没有将位向量传输到主机以便执行总数计数操作。因此,与总数计数操作的传统的基于处理器/CPU的执行形成对照,图2中的实施例提供用于总数计数操作的基于存储器的执行,从而显著地消除了在主机/处理器14和存储器模块12之间传输大的数据集的需要。通过这种存储器内处理来消除冗余数据移动,改善了指令执行时间并减少了系统延迟和高速缓冲存储器污染(由于更少需要在高速缓存器中存储位向量),同时节省系统能量和功率。由此,本文中公开的PIM模型减少CPU负载并释放CPU/主机用于其它任务。稍后下面参考图4至7的讨论来提供存储器模块12可如何执行总数计数操作的一些示例性细节。
如在框30处所指出的,在执行总数计数操作之后,存储器模块12可在存储器模块12内存储处理的结果——即,在框27处输入的位向量的总数计数值。如稍后讨论的,在一个实施例中,这种结果可作为执行总数计数操作的最终结果被存储在存储器模块12内的预定义的存储位置中以便提交给主机。随后,在框31处,存储器模块12可在诸如主机14访问存储器模块12以检索结果时将总数计数操作的结果提供或发送给主机14。
图3描绘示出根据本公开的一个实施例可以如何执行逻辑逐位运算的示例性流程图33。除了其关注逻辑逐位运算以外,图3中的流程图33基本上类似于图2中的流程图25,因此,这里仅仅提供图3的简要描述。如图2中的情况一样,图3中的流程图33中图示的处理也可以由存储器模块12执行。更具体地讲、,在一个实施例中,图3中图示的步骤可以由逻辑裸片20中的控制器(例如,图9中的PIM控制器97)执行。最初,在框35处,存储器模块12可从主机14接收指令,以对在存储器模块12中的一个或更多个存储器(例如,3DS存储器模块13中的存储器18)中存储的两个或更多个位向量执行逻辑逐位操作。如前所述,且如在框36处所示,存储器模块12可以是3DS存储器模块,例如,HBM存储器模块或者HMC存储器模块,并且,逻辑逐位运算可以是,例如,OR、AND、NOT、NAND、XOR或NOR运算。稍后下面在图8A和8B的讨论的情景中讨论示例性的逻辑逐位AND运算。通常,如前所述,存储器模块12可以是任何基于半导体的存储系统,并且,逻辑逐位运算可以是任何逻辑运算,而不管它是否在这里被明确提到。响应于在框35处的来自主机的指令,如在框37处所指出的,存储器模块12可在存储器模块自身内执行指定的逻辑逐位运算——而没有将位向量传输到主机来执行。因此,基于存储器的执行显著地消除了系统中的冗余数据移动并提高系统性能,同时节省系统能量和功率。逻辑逐位运算的执行的PIM模型也减少CPU负载并释放CPU/主机用于其它任务。
如在框38处所指出的,在执行逻辑逐位运算之后,存储器模块12可在存储器模块12内存储处理的结果。如稍后讨论的,在一个实施例中,这种结果可被存储在存储器模块12内的预定义的存储位置中,以提交给主机。在框39处,存储器模块12可在诸如主机14访问存储器模块12以检索结果时将结果提供给主机14。
在下面的讨论中,参考图4至7提供总数计数操作的存储器内实施方式的细节,并且,参考图8A至8B提供逻辑逐位运算的存储器内实施方式的细节。在具体实施例中,对于逻辑逐位运算,可适当地修改或共享图4至7中图示的总数计数特定的实施昂视,也如下所述。
图4是描绘根据本公开的一个实施例在图1A的存储器模块12(或者图1B的3DS存储器模块13)内可如何执行总数计数操作的示例性略图42。如图2中的框27所指出的,在一个实施例中,存储器模块12可响应于来自主机14的指令来启动POPCOUNT操作,以执行总数计数。图4中的框44指示这种由存储器模块12进行的POPCOUNT操作的启动。在一个实施例中,总数计数操作可按两个步骤实施。最初,如在框45处所指出的,存储器模块12可对预定义的小数据类型(对特定的位向量)(诸如,对位向量的每一个8位部分)执行总数计数。此后,如在框46处所指出的,存储器模块12可使用约简树(稍后讨论)来累积中间结果并产生最终总数计数。因此,在一个实施例中,在框45处的结果可以是用于在框46处的约简树的输入。更具体地讲,如稍后参考图6至7所讨论的,在框45处的操作可形成在框46处的约简树的第一阶段。
作为在框45处的总数计数的一部分,在一个实施例中,存储器模块12(例如,3DS存储器模块13中的逻辑裸片20)可将位向量中的位划分成每一个为8位的多个非重叠段。然后,存储器模块12可针对每一段计算段特定的位计数。然后,可使用约简树来将所有的这种段特定的位计数相加来产生最终的总数计数值。这样理解,8位长度的段被选择仅是示例。在不同的实施例中,在框45处的预定义的数据类型可以小于或大于8位。
在图4中,列出两个示例性方法来执行在框45处的部分位计数——(i)基于查找表(LUT)的计数(框47)或者(ii)通过一系列的移位和逻辑逐位运算的计数(框48)。在要对其执行总数计数的位向量的8位段的情况中,LUT可能需要256个条目(28=256)——每一个条目保持与被表示为LUT的地址输入的8位向量段对应的位计数结果(未示出)。在一个实施例中,在框47处的基于LUT的总数计数可在单个时钟循环中被执行。
可替换地,如在框48处所指出的,针对8位向量段的位计数可通过一系列的移位和逻辑逐位运算来实施。图5示出根据本公开的一个实施例的用于对8位向量段中的位进行计数的示例性伪代码。为了便于关联,在图5中使用相同的附图标记“48”来指用于在图4中的框48处的计数操作的伪代码。在图5中,逻辑逐位运算AND用和(“&”)号指示,并且,使用不同的十六进制数(使用“0x”前缀(例如,在“0x33333333”中)表示)来实现移位。
参考图4中的框46,例如使用约简树,可以将对小数据尺寸的总数计数(框45)相加。在图4中指出约简树的两个示例性配置:(i)如图6所示的全约简树(框49)(下面讨论)或者(ii)紧凑约简树(框50),该紧凑约简树可重新使用加法器来缩小约简树的总尺寸,如图所示(下面讨论)。
图6示出根据本公开的一个实施例的用于对16字节数据进行总数计数的全约简树49的示例。在一个实施例中,全约简树49可以是在存储器模块12内实施的专用功能块。在另一个实施例中,全约简树49可被实施为专用功能块,该专用功能块被实现为3DS存储器模块13的逻辑裸片20中的逻辑单元。在另一个实施例中,如图9所示,这种逻辑单元可以被实施为PIM控制器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到更高级进行加法,加法器可变宽。
可使用来自第二级的对应加法器59将来自每一对的CNT8块的位计数相加,然后,可使用来自第三级的对应加法器61将来自第二级的一对加法器的输出相加,等等。最后,加法器65的输出可被存储在累积器单元(AccumulatorUnit)66中,在一个实施例中,累积器单元66可以是图9中示出且稍后下面讨论的PIM结果寄存器99。此后,与(对其正在执行POPCOUNT操作的)位向量相关联的另一个16字节块数据可从适当的存储器芯片(诸如,图1B中的存储器芯片18)中被检索并被应用于约简树49以进行总数计数。以这样的方式,每一个16字节块的向量数据的位计数可被累积并在单元66中被相加,以产生针对正在考虑的位向量的POPCOUNT操作的最终结果。然后,最终POPCOUNT值可由处理器14检索。
图7是根据本公开的一个实施例的用于对16字节数据进行总数计数的紧凑约简树50的示例。与图6中的全约简树49形成对照,图7中的紧凑约简树50对于与给定的总数计数操作相关联的每一次约减迭代(reductioniteration)重新使用相同组的加法器。结果,图7中的实施方式可减少加法器的数量,但是,可能会增加执行约简所需的时间的成本。由于需要使用一级中的加法器的输出作为下一级中的加法器的输入,所以也可能会增加路由矩阵的复杂性。在一种实施方式中,紧凑约简树50可包括一般的加法器单元70,该加法器单元可被存储器模块12中的其他组件(例如,存储器模块13中的基片逻辑裸片20中的组件)共享。在一个实施例中,紧凑约简树50可作为图9中示出的PIM控制器97的一部分而被包括。加法器单元70在图7中以虚线示出。到加法器单元70的输入可以是来自CNT8单元57的最初的总数计数(表示图4中的框45)。加法器单元70可包括多个复用器(被指示为“MUX”块并使用附图标记“72”统一标识),以从形成约简树的第一阶段的CNT8单元57接收对应的输入。复用器72也可以接收以加法器单元70中的“ADD”块的输出的形式的第二组输入。“ADD”或加法器块使用附图标记“74”统一标识。到MUX块72的第二组输入由具有样式“_____”的虚箭头75示出。另一方面,MUX单元72的输出由具有样式“─·─·─”的虚箭头76示出,以将它们与箭头75区分开以及指示在重新使用加法器74时的输出产生的迭代性。
虽然在图7中未示出,但是,在一个实施例中,由加法器单元70针对每16字节数据块产生的最终位计数可被存储在累积器中。在一个实施例中,加法器74之一可被配置为充当累积器。通过加法器单元70中的每一个循环,参数被减少一半。在最后一轮迭代中,只有两个参数保留,并且,这两个参数的总和将是总数计数操作的最终结果。在一个实施例中,这样的最终结果可被传输到存储器模块12内的存储位置,以供主机14检索。在图9的实施例中,这种存储位置是PIM结果寄存器99。在另一个实施例中,充当累积器的加法器74自身可充当PIM结果寄存器99。
在一个实施例中,可使用图6至7中的基于约简树的实施方式来计算针对大小至多为一个DRAM页的向量的总数计数。DRAM页尺寸可以被固定和预定义。例如,在一个实施例中,DRAM页尺寸可以是1KB。但是,DRAM页尺寸可在不同的系统中不同。如稍后讨论的,在一个实施例中,对于大于一个DRAM页的向量尺寸,可使用图9中示出的存储器内PIM控制器97。对于小于一个DRAM页的向量的位计数,存储器模块12中(或者在存储器模块13的情况中的逻辑裸片20中)的PIM控制器或其他合适的实体可通过禁用约简树中的最初的加法器(比如图6中的加法器59)的子集或者掩蔽出约简树中的一部分来只启用约简树49或50的子集。例如,“掩码(mask)”可与约简树49至50的第一阶段相加,使得“CNT8”块57的输出是零,除非与该块相关联的使能位被设置为“1”。在此方法中,每个CNT8模块57可以用控制结果是“0”还是实位计数值的使能位(enablebit)来扩大。这种选择性的启用切断对小于预定义的尺寸(这里,一个DRAM页)的向量的计数。如上所述,在一个实施例中,使能信号(或者“掩码向量”)可由PIM控制器97(图9)调节。
另一方面,对跨越多个DRAM页的向量的位计数操作可能需要多个步骤。在1KB的DRAM页尺寸的情况中,每一个步骤可计算向量的1KB子集的位计数,并且,可将部分结果累积在存储器模块12(或者,在存储器模块13的情况中的逻辑裸片20中)内的特殊寄存器中。在一个实施例中,特殊寄存器是图9中示出的PIM结果寄存器99。最终的总数计数值可通过将所有这样的部分结果相加而生成。
当针对跨越多个DRAM页的大向量执行总数计数时,存储器模块12可能需要知道该向量存储的所有的页地址。因此,在向量的第一DRAM页被处理之后,存储器模块12可能需要算出向量所在的后续页。在一个实施例中,在需要跨过多个页时,可以实现直接存储器存取(DMA)一样的机制。在这样的实施方式中,向量占据的DRAM页的物理地址可例如由主机14发送到存储器模块12。然后,这些页可由存储器模块内的内部控制器(例如,图9中的PIM控制器97)横跨。
与DRAM页尺寸有关的前述讨论本质上只是示例性的。在不是DRAM的半导体存储器的情况中,对于这种非DRAM存储器中的存储器页,可使用类似的方法。
这里讨论的基于PIM模型的总数计数方法可能在密码学中相当有用。例如,为了判断某一算法的加密质量,可能需要在该算法上运行多种不同的位模式(pattern)。良好的加密算法应该优选地产生相等数量的1和0,使得输出代码看起来完全随机。具有不平衡的1和0的加密输出可能是差算法的一个指标。总数计数由此成为这种检验过程的主导因素。根据本公开的教导的存储器内总数计数可显著地加速该检验过程。在密码学应用中,将被计数的数据(例如,由加密算法生成的输出代码)可以是没有任何空间局部性的数据流。因此,只在存储器内部对这种数据执行总数计数更有意义。(这种数据可能已经被主机存储在存储器中。)此外,根据本公开的教导的基于PIM模型的总数计数也可以用作几种不同的“攻击”(即,试图加密解密)的部分。
图8A至图8B示出根据本公开的具体实施例的在图1A的存储器模块12内可如何执行逻辑逐位运算的两个示例性实现方式。图8A示出基于单个缓冲器的PIM实施方式78,而图8B示出基于双缓冲器的PIM实施方式87。图8A或图8B中的配置可被实施为存储器模块12的一部分。在一个实施例中,这些配置中的任何一个可被实施为图9中示出的PIM控制器97的一部分。为了便于参考,图8A和图8B之间的共同组件已经使用相同的附图标记所标识。虽然图8A和图8B的实施例示出对两个8位向量的逻辑逐位运算,但是这种示出只是示例性的。实践中,图8A和图8B中示出的配置可被扩展到任何数量(>2)的位向量和任何长度(多于或少于8位)的位向量。
对于图8A的实施例中的两个8位操作数之间的逻辑逐位运算,这两个操作数中的一个的8位可由如不间断的箭头81指示的对应的感测放大器(senseamplifier)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接收操作数0(如箭头83所示)。
计算块85可包含执行例如由主机14所指示的适当的逻辑逐位运算所需的逻辑。在这一方面,在具体实施例中,计算块85可与实施POPCOUNT操作的存储器模块12的部分共享一些逻辑单元或逻辑电路。逻辑逐位运算可包括大量的不同的逻辑运算中的任何一种,例如,AND、OR、NOR、NAND、XOR等。在操作数0和操作数1之间的指定的逻辑逐位运算结束时,计算块85可产生输出,该输出可被传输到存储器模块12内的存储位置,或者存储器模块12内的其他逻辑块,或者,存储器模块12内的适当的输出单元,以用于最终传送到主机14。在一个实施例中,存储器模块12内的这种存储或输出单元可以是图9中示出的PIM结果寄存器99。在图8A的实施例中,这种输出由具有样式“─·─·─”的虚箭头86指示。作为示例,操作数0可以是位向量“11010010”,而操作数1可以是位向量“10001111”。在这两个位向量之间的逻辑逐位AND运算的情况中,计算块85将在箭头86处产生输出向量“10000010”。
在图8B的实施例中,如不间断的箭头88所示,感测放大器80将每一个操作数(操作数0和操作数1)传输到其自身的缓冲器。操作数0被存储在第一缓冲器82中(如图8A的实施例中一样),而操作数1被存储在第二缓冲器89中。因此,与图8A中的实施例形成对照,在图8B的实施例中,感测放大器80不会将第二操作数直接供应给计算块85。每一个操作数最初在其相应的缓冲器82或89中被缓冲。如具有样式“_____”的虚箭头90和具有样式“..............”的虚箭头91所示,缓冲的操作数然后被发送到计算块85以用于期望的逻辑运算。与如图8A中的实施例的情况中一样,计算块85可对接收到的操作数对进行操作并在箭头86处产生输出。
图9示出根据本公开的一个实施例的图1A中的存储器模块12的逻辑部95的示例性布局。逻辑部95中示出的组件可实施在存储器模块12内。为了简要起见,仅与本公开有关的部件在图9中被示出并在这里被讨论。在图1B中的3DS存储器模块13的情况中,逻辑裸片20可被配置为包括与逻辑部95中示出的组件类似的组件。因此,图9的讨论同样地也适用于图1B中的实施例。
如图9中所示,逻辑部95可实现与PIM结果寄存器99(在此也被称为“结果寄存器”)操作地连接的PIM控制器97(在此也被称为“控制器”)。在一个实施例中,控制器97可包括用于对在存储器模块12中的(多个)半导体存储器芯片(未示出)中存储的位向量实施总数计数操作和逻辑逐位运算的必要软件和硬件逻辑。在图1B的实施例中,这种存储器芯片是芯片18。如上所述,例如,控制器97可包括用于执行在图4中的框44至46处的步骤以及在图2至3中的流程图中示出的步骤的硬件(例如,图6至7中的约简树49或50和/或图8A至8B中的逻辑结构78或87)和软件(例如,图5中的伪代码48)。因此,使用控制器97,存储器模块12可实现总数计数操作和逻辑逐位运算的存储器内执行。PIM控制器97可执行多个任务来促进这里讨论的存储器内处理。这种任务可包括例如提供接口(API)以使得主机14能够启动命令和获取数据,与主机14交互,控制实施的约简树49或50,控制逻辑结构78或87的操作,处理针对跨越多个存储器页的向量的总数计数的计算,在PIM结果寄存器99中累积位计数的中间结果,以及产生用于存储在结果寄存器99中的最终总数计数值。
PIM控制器97可以通过主机链路接口和控制单元101(简单地说,“主机接口单元”)与主机14通信并通过存储器接口和控制单元103(简单地说,“存储器接口单元”)与存储器芯片(例如,图1B的实施例中的DRAM裸片18)通信。主机接口单元101可支持在高速链路16之上的数据传输,而存储器接口单元103可促进通过内部连接(例如,前述的穿硅通孔(TSV))的数据传输。这些接口101、103可操作地结合到控制器97,并且可以在控制器97的操作控制下,而控制器97也可以提供必要的时序和控制信令以协调这些单元的操作。控制器97可最初通过主机接口单元101从主机接收位向量并使用存储器接口单元103将它们存储在存储器模块12的(多个)存储器芯片中的一个或多个存储器位置(或存储器单元)中。在总数计数操作或逻辑逐位运算期间,存储器接口单元103可从其物理存储装置检索适当的(多个)位向量并将它们供应给PIM控制器97以在存储器内执行这些操作。在一些实施例中,存储器接口单元103的多个示例可被实现,其中,每一个示例被配置为控制存储器模块12中的相应的存储器芯片组。存储器组选择、行/列存取以及通过控制器97向/从(存储器模块12中)存储器芯片中的存储器组的数据传输的细节与本公开无关,因此,在这里不讨论。
逻辑部95还可包括与存储器接口单元103和主机接口101结合的自检和错误检测/校正单元105(简单地说,“错误控制单元”)。错误控制单元105可应用适当的纠错码(ECC)在将从主机14接收到的数据存储在存储器芯片(例如,图1B的实施例中的DRAM芯片18)之前对这些数据进行编码。在从存储器模块12中的存储器芯片读取这些数据时,可根据用来对初始数据进行编码的ECC方案来检测和/或校正这些数据中的一个或更多个错误。此外,错误控制单元105可常规地执行“自检”程序,以保存存储在存储器芯片中的数据的完整性。
现在主要参考POPCOUNT操作的实施方式来描述控制器97通过主机接口单元101与主机104的交互。在一个实施例中,主机14和控制器97之间的通信可通过对一组“PIM特定的地址”的读写来进行,所述PIM特定的地址可以是存储器模块12内的一个或更多个预定义的存储位置或者这种位置的配置地址。预定义的存储位置的一些示例包括逻辑部95中的现有的寄存器、存储器模块12中的存储器芯片之一中的存储器单元、或者在逻辑部95中实现的(新的)专用寄存器。在存储器模块12首次通过(多个)高速链路16与主机14连接时,诸如,在存储器模块12首次被安装在系统10中时,PIM控制器97可将API提供给主机14。当在由处理器14正执行的程序中遇到与POPCOUNT有关的指令时,API可将总数计数过程“划分”成促进总数计数操作的存储器内实施方式的一组功能。在一个实施例中,PIM特定的地址可以是主机14通过系统10的基本输入输出系统(BIOS)知道的系统配置的部分。API可向主机提供对这些PIM特定的地址的访问,以能够实现总数计数操作的存储器内执行。
API可向主机通知预定义的地址和对应的功能(下面讨论)之间的相关性,使得主机可针对给定的功能执行读取或写入操作。PIM控制器97也知道哪些存储位置要访问——例如,存储最终总数计数以便主机读取或者检索从主机接收到的任何信息。可通过API提供以使得PIM控制器97与主机14通信来促进总数计数操作的存储器内执行的一些示例性功能是:
(i)voidPOPCOUNT(*p_vector,size):该功能可通过主机转换成对预定义的PIM特定的地址的两个后续的写入操作。第一写入操作指示将对其执行总数计数的位向量的开始地址(即,物理存储器地址),并且第二写入操作指示向量的尺寸。例如,在向量尺寸小于一个存储器页时,或者,在向量跨越多个连续的存储器页时,该功能可被应用。物理存储器地址可能与存储器模块12中的存储器芯片之一相关联。
(ii)voidIsDone():该功能可指示最后一个操作是否完成。例如,最后一个操作可以是位向量的最后一个待决部分的总数计数。该功能可转换成(由主机)从预定义的PIM特定的地址的单个读取操作。作为该读取操作的一部分,存储器模块12可返回“1”以指示相关的PIM操作完成或者其他情况下返回“0”。当在存储器模块12中不存在对主机14的反馈机制的情况中,可使用该方法。在另一个实施例中,当存储器模块12具有对主机14的反馈机制的情况中,存储器模块12可以将消息发送到主机14以指示PIM操作完成。
(iii)data_tReadResult():该功能可返回最后一次总数计数的结果。该功能也可转换成(由主机)从预定义的PIM特定的地址的读取操作。如前所述,最终的总数计数值可最初被累积在PIM结果寄存器99中。该总数计数值然后可由控制器97传输到预定义的存储位置(或者PIM特定的地址)以由主机使用该功能读取。
在一个实施例中,当向量跨越多个存储器页(可以是连续的,或者可以不是连续的)时,主机14可明确地指定向量所处的所有的物理页或存储器地址。换句话说,主机14可提供其中存储位向量的相应部分的存储器模块12中的存储器位置的物理地址。主机14可通过对预定义的PIM特定的地址的指定的写入操作来完成这个操作。例如,主机14可使用API提供的功能“voidPhysicalPage(*p_page)”来向控制器97通知存储正对其操作的当前向量的下一页的物理地址。PIM控制器97可跟踪这些地址并对包含位向量的每一个存储器页启动部分总数计数。主机14可一次全部地或者以预定的间隔顺序地提供物理地址。接收到的物理地址可被存储在单个存储位置(或PIM特定的地址)处或者在多个存储位置处。更具体地讲,控制器97可最初将每一个接收到的物理地址存储在其对应的PIM特定的地址(或存储位置)中,并然后访问该存储位置以获得接收到的物理地址来从对应的存储器位置检索位向量的各个部分,以对接收到的部分执行部分位计数。PIM控制器97可组合所有的部分位计数的结果来实现对位向量的总数计数操作的执行。如前所述,部分位计数可被累积在PIM结果寄存器99中。通过组合所有的部分位计数产生的最终位计数可以最初被存储在结果寄存器99中并随后被传输到相关的PIM特定的地址,以作为执行总数计数操作的最终结果被提交给主机。如前所述,主机14可使用“data_tReadResult()”功能来读取该最终结果。
如前所述,本公开也涉及针对大的向量的存储器内逻辑逐位运算。用于在存储器内实施这种操作的一个原因是经常与实时分析工作负载中的总数计数操作一同使用逻辑逐位运算。例如,如果网站正使用位图来跟踪每一个网页的访问者,则与两个网页相关联的两个位图(或位向量)的“或”运算可指示多少数量的用户访问了这些网页中的至少一个。在基于CPU的实施方式中,两个向量从存储器(其中存储向量)被传输到CPU(其中执行逻辑运算)。存储器内实施方式可消除经由系统总线传输的一半数据,因为存储器内实施方式将只传输逻辑逐位运算的最终结果。尤其在位向量大时,这可在冗余数据移动方面提供显著的节省。此外,常见的用例可通常涉及许多向量而不是仅仅两个向量之间的逐位运算,例如,OR或AND运算。此外,在常见的用例中,逐位运算通常以从逻辑逐位运算所导致的最终向量的总数计数结束。在这种情景中,由总数计数操作和逻辑逐位运算的存储器内实施方式提供的数据传输中的减少可能会更剧烈,因为所有的中间结果被保存在存储器模块12内并不通过系统总线被发送给主机14。因此,在存储器模块12(或模块13)内实施逻辑逐位运算可提供用于能够通过PIM卸载实时分析工作负荷的必要的基础。
如图3中的框36所示,根据本公开的教导的PIM模型可被配置为在存储器模块12(或模块13)内实施任何逻辑逐位运算,例如,OR、AND、NOT、NAND、NOR和XOR运算。逻辑逐位运算的存储器内实施方式可与总数计数实施方式共享很多相似性。图8A至图8B提供示出逐位运算的存储器内实施方式的两个示例性实施例。此外,图4至图7和图9的前述讨论也仍适用于用于逻辑逐位运算的PIM模型的情景,尽管有如下面简要描述的适当的修改。
参考图8A至图8B观察到,逻辑逐位运算的存储器内实施方式可能比总数计数操作的实现更加简单。例如,在逐位运算的情况中,可能不需要如图6中的约简树49的全约简树。CNT8块57可以用适当的逻辑运算所替代。例如,在逻辑OR运算的情况中,在计算块85中可能需要只有单个阶段的加法器。例如,通过用逻辑运算加法器替代每一个CNT8块57,可以实现单个阶段。类似于用于总数计数的向量尺寸的前述讨论,在小于一个存储器页的向量尺寸的情况中,逻辑逐位运算可通过禁用不必要的加法器的掩码来实现。较大的向量尺寸可在多个步骤中计算,并且,临时结果可以与先前在总数计数操作的情景中讨论的方式类似的方式被累积在PIM结果寄存器99中。如之前,PIM控制器97可以协调和管理这些计算。PIM控制器97也可以用附加功能来扩大API支持的主机接口,每一个附加功能对应于特定的逻辑逐位运算。例如,对两个向量的逻辑逐位OR运算可使用下述语义:
data_tOR(*p_vec1,*p_vec2,size):该功能可转换成由主机14对预定义的PIM特定的地址(或存储位置)的三个写入操作。第一写入操作可指定第一向量的物理存储器地址,第二写入操作可指定第二向量的物理存储器地址,并且,第三写入操作可指定两个向量的尺寸。
因此,在图4至7和图9的情景中的总数计数的存储器内实施方式的前述讨论也仍然适用于逻辑逐位运算的存储器内实施方式。简要地说,例如,在对多个向量的逻辑逐位运算的情况中,PIM控制器97可最初从主机14接收存储器模块12中的存储了相应的位向量的存储器位置(比如图8A至8B中示出的存储器单元79)的物理地址,然后将每一个接收到的物理地址存储在存储器模块12内的PIM特定的地址(或存储位置)。控制器97可访问适当的存储位置以获得对应的物理地址并然后从指定的存储器位置检索相应的位向量。在一个实施例中,控制器97可将每一个位向量划分成多个位向量特定的非重叠段,并然后将来自全部位向量的对应的位向量特定的段对齐为多组对齐段。然后,控制器97可对每一组对齐段执行逐位运算,从而产生多个部分结果。如之前,部分结果可被存储在PIM结果寄存器99中。控制器97可随后在寄存器99中组合所有的部分结果,以实现逻辑逐位运算的执行。从组合得到的最终结果可在最终将它存储在预定义的存储位置(或者PIM特定的地址)处以供将来提交给主机14之前最初被存储在PIM结果寄存器99中。主机14可访问该存储位置以读取结果。
请注意,在存储器模块12的情景中的POPCOUNT操作和逻辑逐位运算在存储器内执行的上述原理可以适用于固态驱动器(SSD)或任何基于半导体的存储系统。例如,在SSD的情景中,可以在SSD控制器中实现位计数操作,从而节省从CPU的来回的冗余传输。但是,在一个实施例中,位计数操作也可以——与任何其他归约运算一同——更靠近SSD中的闪速存储器存储单元被实现,从而减少对于内部SSD总线的流量(traffic)和竞争。在这种情况下,归约运算可以在闪速裸片自身内而不是在SSD控制器内执行。此外,为了简要起见,由于图4至9中的示例性实施例的详细的讨论,这里不讨论这种实施方式的另外的细节。
图10示出根据本公开的一个实施例的图1A中的系统10(合并存储器单元12)的整体布局。这里,为了便于参考和讨论,在图1A和10中对于公共的系统部件/单元使用相同的附图标记。
在图10中,主机处理器单元14被示出为与系统存储器单元107以及外围存储单元109、一个或更多个输入装置111、一个或更多个输出装置112和网络接口单元114结合。在一些实施例中,系统10可包括示出的装置或单元的多于一个的示例。系统10的一些示例包括计算机系统(桌上型或膝上型)、平板计算机、移动装置、蜂窝电话、视频游戏单元或控制台、机器对机器(M2M)通信单元、无状态“瘦”客户端系统或任何其它类型的计算或数据处理装置。在各种实施例中,系统10可被配置为可机架安装(rack-mountable)的服务器系统、独立系统或者为任何其他合适的形式因素。在一些实施例中,系统10可被配置为客户端系统而不是服务器系统。
在具体实施例中,主机处理器单元14可包括多于一个的CPU,并且/或者,系统10可包括多于一个的处理器单元14(例如,在分布式处理配置中)。在系统10是多处理器系统时,可能存在CPU或处理器的多于一个的实例。如前所述,主机14可以是片上系统(SoC)。
存储器单元107可包括至少一个存储器模块,例如,图1中的存储器模块12。如前所述,存储器模块12可以是任何基于半导体的存储系统,例如,DRAM、SRAM、PRAM、RRAM、CBRAM、MRAM、STT-MRAM等。在一些实施例中,存储器单元107可包括与一个或更多个非3DS存储器模块结合的至少一个3DS存储器模块。非3DS存储器可包括DDR/DDR2/DDR3/DDR4SDRAM、DRAM、闪速存储器和各种类型的只读存储器(ROM)等。此外,在一些实施例中,系统存储器107可包括与单种类型的存储器相对的多种不同类型的半导体存储器。在任何情况中,根据本公开的教导,系统存储器单元107可包括至少一个逻辑基片(或逻辑裸片)—比如图9中的逻辑部95—其使得存储器单元107能够在存储器单元107内执行总数计数操作和逻辑逐位运算。
在各种实施例中,外围存储单元109可包括用于磁、光、磁光或固态存储介质(例如,硬驱动器、光盘(例如,CD或DVD)、非易失性RAM装置等)的支持。在一些实施例中,外围存储单元109可包括更复杂的存储装置/系统,例如,盘阵列(其可以是合适的RAID(独立盘的冗余阵列)配置)或存储区域网络(SAN),所述存储装置/系统可通过标准小计算机系统接口(SCSI)、光纤通道接口、(IEEE1394)接口或另一种合适的接口与处理器14结合。在一个实施例中,外围存储单元109可通过标准外围接口(例如,基于外围部件接口快速(PCIExpressTM)标准的接口,基于通用串行总线(USB)协议的接口,或基于IEEE1394()协议的接口)与处理器14结合。
在具体实施例中,输入装置111可包括标准输入装置,诸如,计算机键盘、鼠标或其他指向装置、触摸垫、操纵杆或任何其它类型的数据输入装置。输出装置112可包括图形/显示装置、计算机屏幕、音频扬声器、警报系统、CAD/CAM(计算机辅助设计/计算机辅助加工)系统、视频游戏台或任何其他类型的数据输出或处理控制装置。在一些实施例中,(多个)输入装置111和(多个)输出装置112可通过(多个)I/O或外围接口与主机处理器单元14耦合。
在一个实施例中,网络接口114可与主机处理器单元14通信,以使系统10能够与网络(未示出)结合。在另一个实施例中,网络接口114可以完全不存在。网络接口114可包括用于将系统10(无论有线还是无线)连接到网络的任何合适的装置、介质和/或协议内容。在各种实施例中,网络可包括局域网(LAN)、广域网(WAN)、有线或无线以太网、电信网络或其他合适类型的网络。
系统10可包括板上电源单元115,以对图10中图示的各种系统组件供电。电源单元115可接收电池,或者,可以是可连接到AC电源插座的。在一个实施例中,电源单元115可将太阳能转换为电力。
在之前的描述中,出于说明且非限制性的目的,阐述了特定的细节(诸如,特定结构、接口、技术等),以便提供对所公开的技术的彻底的理解。但是,本领域的技术人员将会认识到,所公开的技术可以在脱离这些特定的细节的其他实施例中被实践。也就是说,本领域的技术人员将能够设计实施所公开的技术的原理的各种布置,尽管这里没有明确地描述或示出。在一些示例中,为了不被不必要的细节模糊所公开的技术的描述,省略了对公知的装置、电路和方法的详细描述。本文中的记载所公开的技术的原理、方面和实施例以及其特定示例的所有陈述意图涵盖其结构和功能等同物。另外,这些等同物意图包括当前已知的等同物以及将来开发的等同物,例如,开发的执行相同功能的任何元件,而不管结构如何。
因此,例如,本领域的技术人员将会认识到,这里的框图(诸如,图1A至1B和6至10),可表示实施本技术的原理的示范性的电路系统或其他功能单元的概念图。类似地,将会认识到,这里的流程图(诸如,图2至4)可表示可基本上由控制器(诸如,图9中的PIM控制器97)执行的各种处理或创新方面,而无需将处理传输到主机单元14。在具体实施例中,控制器或主机处理器可包括例如通用处理器、专用处理器、常规处理器、数字信号处理器(DSP)、多个微处理器、与DSP核相关联的一个或更多个微处理器、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)电路、任何其他类型的集成电路(IC)和/或状态机。上面在图2至4的情景中描述的功能的中的一些或全部可以被设置在硬件中。
在某些发明方面需要基于软件的处理时,这种软件或程序代码可驻留在计算机可读的数据存储介质(未示出)中。在图10的实施例中这种数据存储介质可以是外围存储装置109的一部分,或者,可以是图9中的PIM控制器97的内部存储器的一部分。主机14或控制器97可执行在这种介质上存储的相关指令,以实施基于软件的处理。这种相关指令可包括例如图5中示出的伪代码和前面讨论的不同的API提供的功能,以及实施本文讨论的PIM功能可能所需的任何辅助程序代码。计算机可读数据存储介质可以是非暂态数据存储介质,其包含由上述的通用计算机或处理器执行的计算机程序、软件、固件或微代码。计算机可读存储介质的示例包括只读存储器(ROM)、随机存取存储器(RAM)、数字寄存器、高速缓冲存储器、半导体存储器装置,磁介质(例如,内部硬盘,磁带和可移动盘),磁-光介质和光学介质(例如,CD-ROM盘和数字多功能盘(DVD))。
根据本公开的各发明方面的PIM模型的替代实施例可包括负责提供附加功能(包括任何的上述功能和/或支持根据本公开的教导的方案所需的任何功能)的附加组件。尽管上面以具体的组合描述了特征和元件,但是,每一个特征或元件可单独地使用,而无需其他的特征和元件,或者,每一个特征或元件可在有无其他特征的各种组合中被使用。如前所述,系统10中的元件(例如,PIM控制器97和主机单元14)中的一些的功能可通过使用能够执行以在(上述的)计算机可读存储介质上存储的代码指令或微代码的形式的软件/固件的硬件(例如,逻辑电路)和/或硬件来提供。因此,这种功能和图示的功能块将被理解为硬件实现的和/或计算机实现的,并因此是机器实现的。
前面描述了PIM模型(其中,与总数计数操作和逻辑逐位运算有关的计算在存储器模块内而不是在CPU内实施),由此消除了贯穿整个系统将数据从大的位向量移位的需要。通过将这些操作的处理卸载到存储器,在存储器-CPU接口之上的冗余数据传输被大大地减少,从而提高系统性能和能效。例如,所公开的PIM方法可在密码学中和在实时分析中找到有益的应用。存储器模块可以是任何半导体存储器。存储器模块的逻辑裸片中的控制器和专用寄存器可操作用来与主机连接并提供由主机请求的总数计数操作和逻辑逐位运算的内存储器执行。根据本公开的具体实施例的教导的PIM模型由此释放CPU用于其他任务,因为现在可以在PIM使能存储器自身内执行许多实时分析任务。
如本领域的技术人员将会认识到的,可在广泛的应用范围内修改和改变在本申请中描述的创新的概念。因此,要求专利保护的主题的范围不应当局限于上面讨论的任何特定的示例性教导,而应当由下面的权利要求限定。

Claims (25)

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所述的存储器模块,其中,控制器包括:
处理逻辑单元,包括多个加法器,其中处理逻辑单元执行作为执行总数计数操作的部分的如下操作:
从存储器芯片检索第一位向量;
将第一位向量中的位划分成多个非重叠段;
针对所述多个非重叠段中的每一个非重叠段,计算段特定的位计数;
使用每一个段特定的位计数作为对于所述多个加法器中的对应一个的输入;
在寄存器中累积来自所述多个加法器中的所有加法器的输出;
将所有累积的输出相加来产生第一结果;以及
在寄存器中存储第一结果。
CN201510646971.8A 2014-10-01 2015-10-08 用于支持存储器内处理的方法和存储器模块 Active CN105487812B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201462058568P 2014-10-01 2014-10-01
US62/058,568 2014-10-01
US14/687,676 2015-04-15
US14/687,676 US9836277B2 (en) 2014-10-01 2015-04-15 In-memory popcount support for real time analytics

Publications (2)

Publication Number Publication Date
CN105487812A true CN105487812A (zh) 2016-04-13
CN105487812B CN105487812B (zh) 2019-12-24

Family

ID=55632840

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510646971.8A Active CN105487812B (zh) 2014-10-01 2015-10-08 用于支持存储器内处理的方法和存储器模块

Country Status (4)

Country Link
US (1) US9836277B2 (zh)
KR (1) KR102191229B1 (zh)
CN (1) CN105487812B (zh)
TW (1) TWI672631B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106294226A (zh) * 2016-07-27 2017-01-04 中电海康集团有限公司 基于嵌入式stt‑mram的ssd控制器芯片、固态硬盘
CN107315568A (zh) * 2016-04-26 2017-11-03 北京中科寒武纪科技有限公司 一种用于执行向量逻辑运算的装置
CN107767919A (zh) * 2016-08-17 2018-03-06 三星电子株式会社 半导体存储器设备、包括其的存储器系统及操作其的方法
CN108540126A (zh) * 2017-03-03 2018-09-14 成都海存艾匹科技有限公司 基于三维可写存储器的可编程门阵列
CN109298884A (zh) * 2018-08-29 2019-02-01 北京中科睿芯科技有限公司 一种通用字符操作加速处理硬件装置及控制方法
CN109560078A (zh) * 2017-09-27 2019-04-02 三星电子株式会社 堆叠式存储器装置、包括其的存储器系统及操作方法
CN110597740A (zh) * 2019-11-11 2019-12-20 北京中科寒武纪科技有限公司 共享存储空间的访问方法、装置以及系统和存储介质
CN111045979A (zh) * 2018-10-11 2020-04-21 力晶科技股份有限公司 基于存储器处理器的多处理架构及其操作方法
CN113064853A (zh) * 2017-08-31 2021-07-02 美光科技公司 存储器内处理

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10146537B2 (en) * 2015-03-13 2018-12-04 Micron Technology, Inc. Vector population count determination in memory
US11164033B2 (en) 2015-05-29 2021-11-02 Micron Technology, Inc. Histogram creation process for memory devices
KR102402672B1 (ko) * 2015-09-01 2022-05-26 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템에서 연산들을 처리하는 방법
KR102521654B1 (ko) * 2016-01-25 2023-04-13 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법
US10956439B2 (en) * 2016-02-19 2021-03-23 Micron Technology, Inc. Data transfer with a bit vector operation device
US10262721B2 (en) * 2016-03-10 2019-04-16 Micron Technology, Inc. Apparatuses and methods for cache invalidate
US9997232B2 (en) * 2016-03-10 2018-06-12 Micron Technology, Inc. Processing in memory (PIM) capable memory device having sensing circuitry performing logic operations
JP2018049387A (ja) * 2016-09-20 2018-03-29 東芝メモリ株式会社 メモリシステム及びプロセッサシステム
KR101867219B1 (ko) 2017-02-22 2018-06-12 연세대학교 산학협력단 동적 메모리 인터페이스에 기반하여 서로 다른 메모리 연산들을 처리하기 위한 장치 및 방법
US10741239B2 (en) 2017-08-31 2020-08-11 Micron Technology, Inc. Processing in memory device including a row address strobe manager
US10346092B2 (en) 2017-08-31 2019-07-09 Micron Technology, Inc. Apparatuses and methods for in-memory operations using timing circuitry
US10592121B2 (en) * 2017-09-14 2020-03-17 Samsung Electronics Co., Ltd. Quasi-synchronous protocol for large bandwidth memory systems
US10474600B2 (en) * 2017-09-14 2019-11-12 Samsung Electronics Co., Ltd. Heterogeneous accelerator for highly efficient learning systems
JP2019057053A (ja) * 2017-09-20 2019-04-11 東芝メモリ株式会社 半導体記憶装置
US10866900B2 (en) 2017-10-17 2020-12-15 Samsung Electronics Co., Ltd. ISA extension for high-bandwidth memory
CN107818591A (zh) * 2017-11-22 2018-03-20 深圳赛隆文化科技有限公司 一种虚拟现实三维模型的融合建模方法及系统
US11119677B2 (en) 2017-12-15 2021-09-14 Samsung Electronics Co., Ltd. HBM based memory lookup engine for deep learning accelerator
KR20190075363A (ko) * 2017-12-21 2019-07-01 삼성전자주식회사 반도체 메모리 장치, 이를 포함하는 메모리 시스템 및 메모리 모듈
US10628295B2 (en) 2017-12-26 2020-04-21 Samsung Electronics Co., Ltd. Computing mechanisms using lookup tables stored on memory
CN108388498B (zh) * 2018-02-12 2020-09-08 北京大学 内存中计算的功率建模方法及功率管理方法
KR102665410B1 (ko) 2018-07-30 2024-05-13 삼성전자주식회사 메모리 장치의 내부 프로세싱 동작 방법
US10802883B2 (en) * 2018-08-21 2020-10-13 Intel Corporation Method, system, and device for near-memory processing with cores of a plurality of sizes
KR102692017B1 (ko) 2018-08-29 2024-08-05 삼성전자주식회사 전자 장치 및 전자 장치의 동작 방법
US11443185B2 (en) 2018-10-11 2022-09-13 Powerchip Semiconductor Manufacturing Corporation Memory chip capable of performing artificial intelligence operation and method thereof
US11487699B2 (en) * 2019-06-04 2022-11-01 Micron Technology, Inc. Processing of universal number bit strings accumulated in memory array periphery
WO2020258197A1 (en) * 2019-06-28 2020-12-30 Yangtze Memory Technologies Co., Ltd. Computation-in-memory in three-dimensional memory device
WO2020258209A1 (en) 2019-06-28 2020-12-30 Yangtze Memory Technologies Co., Ltd. Computation-in-memory in three-dimensional memory device
KR102213258B1 (ko) 2019-07-29 2021-02-08 한국전자기술연구원 효율적인 명령어 처리를 위한 프로세싱-인-메모리 제어 방법 및 이를 적용한 연산장치
KR102425909B1 (ko) * 2019-07-30 2022-07-29 한국과학기술원 뉴럴 네트워크 가속기 시스템 및 그것의 동작 방법
US11860782B2 (en) * 2019-08-13 2024-01-02 Neuroblade Ltd. Compensating for DRAM activation penalties
US11436071B2 (en) 2019-08-28 2022-09-06 Micron Technology, Inc. Error control for content-addressable memory
TWI774985B (zh) * 2019-09-09 2022-08-21 新唐科技股份有限公司 記憶體裝置、寫入方法以及讀取方法
US11099788B2 (en) * 2019-10-21 2021-08-24 Advanced Micro Devices, Inc. Near-memory data reduction
KR20210060022A (ko) * 2019-11-18 2021-05-26 삼성전자주식회사 인공 지능 기능이 탑재된 스토리지 장치 및 이를 포함하는 스토리지 시스템
KR20210081663A (ko) 2019-12-24 2021-07-02 삼성전자주식회사 인터커넥트 장치, 인터커넥트 장치의 동작 방법 및 인터커넥트 장치를 포함하는 AI(Artificial Intelligence) 가속기 시스템
KR20210106226A (ko) 2020-02-20 2021-08-30 삼성전자주식회사 펑션-인-메모리 동작을 수행하는 적층형 메모리 장치 및 그 동작 방법
US11182159B2 (en) * 2020-02-26 2021-11-23 Google Llc Vector reductions using shared scratchpad memory
US11237907B2 (en) * 2020-05-29 2022-02-01 Taiwan Semiconductor Manufacturing Company, Ltd. Processing-in-memory instruction set with homomorphic error correction
US11216373B2 (en) 2020-05-29 2022-01-04 Advanced Micro Devices, Inc. Memory access commands with near-memory address generation
KR20220067961A (ko) * 2020-11-18 2022-05-25 삼성전자주식회사 프로세싱-인-메모리 및 프로세싱-인-메모리를 이용한 인스트럭션 출력 방법
US11893278B2 (en) * 2021-02-08 2024-02-06 Samsung Electronics Co., Ltd. Memory controller and memory control method for generating commands based on a memory request
US20230195618A1 (en) * 2021-12-21 2023-06-22 Advanced Micro Devices, Inc. Approach for performing efficient memory operations using near-memory compute elements
US20240004647A1 (en) * 2022-07-01 2024-01-04 Andes Technology Corporation Vector processor with vector and element reduction method
KR102482300B1 (ko) * 2022-07-06 2022-12-29 주식회사 스퀴즈비츠 변형된 할리-실 팝 카운트를 포함하는 비트 시리얼 연산 방법 및 장치
KR20240123185A (ko) * 2023-02-06 2024-08-13 삼성전자주식회사 메모리 장치 및 그 동작 방법

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101714403A (zh) * 2008-10-06 2010-05-26 三星电子株式会社 非易失性存储器的操作方法
CN1905068B (zh) * 2005-07-26 2010-10-13 三星电子株式会社 提高编程速度的非易失性存储器及相关编程方法
US20110302426A1 (en) * 2010-06-07 2011-12-08 Eberhard Boehl Method for generating a bit vector
US8387065B2 (en) * 2009-04-16 2013-02-26 International Business Machines Corporation Speculative popcount data creation
CN103314363A (zh) * 2010-08-17 2013-09-18 回忆系统公司 用于设计分级存储器系统的高速存储器系统和方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6633958B1 (en) * 1997-11-17 2003-10-14 Silicon Graphics, Inc. Multiprocessor computer system and method for maintaining cache coherence utilizing a multi-dimensional cache coherence directory structure
US6687861B1 (en) * 2000-10-31 2004-02-03 Agilent Technologies, Inc. Memory tester with enhanced post decode
GB2419006B (en) * 2002-04-22 2006-06-07 Micron Technology Inc Providing a register file memory with local addressing in a SIMD parallel processor
US7543119B2 (en) * 2005-02-10 2009-06-02 Richard Edward Hessel Vector processor
US7958173B2 (en) 2007-07-13 2011-06-07 Freescale Semiconductor, Inc. Population count approximation circuit and method thereof
US8661072B2 (en) 2008-08-19 2014-02-25 International Business Machines Corporation Shared parallel adder tree for executing multiple different population count operations
US9477636B2 (en) * 2009-10-21 2016-10-25 Micron Technology, Inc. Memory having internal processors and data communication methods in memory
KR102014834B1 (ko) * 2012-05-14 2019-08-27 삼성전자주식회사 메모리 장치, 메모리 시스템 및 그 동작방법
US9053018B2 (en) 2012-06-29 2015-06-09 International Business Machines Corporation Compressed memory page selection based on a population count of a dataset
US9449675B2 (en) * 2013-10-31 2016-09-20 Micron Technology, Inc. Apparatuses and methods for identifying an extremum value stored in an array of memory cells

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1905068B (zh) * 2005-07-26 2010-10-13 三星电子株式会社 提高编程速度的非易失性存储器及相关编程方法
CN101714403A (zh) * 2008-10-06 2010-05-26 三星电子株式会社 非易失性存储器的操作方法
US8387065B2 (en) * 2009-04-16 2013-02-26 International Business Machines Corporation Speculative popcount data creation
US20110302426A1 (en) * 2010-06-07 2011-12-08 Eberhard Boehl Method for generating a bit vector
CN103314363A (zh) * 2010-08-17 2013-09-18 回忆系统公司 用于设计分级存储器系统的高速存储器系统和方法

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111651202A (zh) * 2016-04-26 2020-09-11 中科寒武纪科技股份有限公司 一种用于执行向量逻辑运算的装置
CN107315568A (zh) * 2016-04-26 2017-11-03 北京中科寒武纪科技有限公司 一种用于执行向量逻辑运算的装置
CN111651202B (zh) * 2016-04-26 2023-09-22 中科寒武纪科技股份有限公司 一种用于执行向量逻辑运算的装置
US11126429B2 (en) 2016-04-26 2021-09-21 Cambricon Technologies Corporation Limited Apparatus and methods for bitwise vector operations
CN107315568B (zh) * 2016-04-26 2020-08-07 中科寒武纪科技股份有限公司 一种用于执行向量逻辑运算的装置
CN106294226A (zh) * 2016-07-27 2017-01-04 中电海康集团有限公司 基于嵌入式stt‑mram的ssd控制器芯片、固态硬盘
CN107767919A (zh) * 2016-08-17 2018-03-06 三星电子株式会社 半导体存储器设备、包括其的存储器系统及操作其的方法
CN107767919B (zh) * 2016-08-17 2021-02-19 三星电子株式会社 半导体存储器设备、包括其的存储器系统及操作其的方法
CN108540126A (zh) * 2017-03-03 2018-09-14 成都海存艾匹科技有限公司 基于三维可写存储器的可编程门阵列
CN113064853A (zh) * 2017-08-31 2021-07-02 美光科技公司 存储器内处理
CN109560078A (zh) * 2017-09-27 2019-04-02 三星电子株式会社 堆叠式存储器装置、包括其的存储器系统及操作方法
CN109560078B (zh) * 2017-09-27 2023-10-03 三星电子株式会社 堆叠式存储器装置、包括其的存储器系统及操作方法
CN109298884B (zh) * 2018-08-29 2021-05-25 北京中科睿芯科技集团有限公司 一种通用字符操作加速处理硬件装置及控制方法
CN109298884A (zh) * 2018-08-29 2019-02-01 北京中科睿芯科技有限公司 一种通用字符操作加速处理硬件装置及控制方法
CN111045979A (zh) * 2018-10-11 2020-04-21 力晶科技股份有限公司 基于存储器处理器的多处理架构及其操作方法
CN111045979B (zh) * 2018-10-11 2023-12-19 力晶积成电子制造股份有限公司 基于存储器处理器的多处理架构及其操作方法
CN110597740A (zh) * 2019-11-11 2019-12-20 北京中科寒武纪科技有限公司 共享存储空间的访问方法、装置以及系统和存储介质
US11449242B2 (en) 2019-11-11 2022-09-20 Cambricon Technologies Corporation Limited Shared storage space access method, device and system and storage medium

Also Published As

Publication number Publication date
KR20160039544A (ko) 2016-04-11
TW201626207A (zh) 2016-07-16
US9836277B2 (en) 2017-12-05
CN105487812B (zh) 2019-12-24
US20160098200A1 (en) 2016-04-07
KR102191229B1 (ko) 2020-12-15
TWI672631B (zh) 2019-09-21

Similar Documents

Publication Publication Date Title
CN105487812A (zh) 用于支持存储器内处理的方法和存储器模块
US11403044B2 (en) Method and apparatus for performing multi-object transformations on a storage device
CN104025060B (zh) 支持近存储器和远存储器访问的存储器通道
TWI594182B (zh) 用於在共用記憶體通道上實施多位準記憶體階層之裝置及方法
CN104115129B (zh) 用于从处理器到存储器子系统智能刷新数据的系统和方法
US10761779B2 (en) Storage compute offloads on sharded and erasure-coded data
CN103946811B (zh) 用于实现具有不同操作模式的多级存储器分级结构的设备和方法
KR101720676B1 (ko) 대용량 저장소 디바이스들을 관리하기 위한 장치 및 방법
US20120054468A1 (en) Processor, apparatus, and method for memory management
CN109196829A (zh) 远程存储器操作
TWI600015B (zh) 用於相變記憶體與開關(pcms)之元資料管理及支援技術
CN103988183A (zh) 2级存储器分级结构中的存储器侧高速缓存的动态部分断电
CN104699577B (zh) 用于在分布式码字存储系统中定位故障管芯的计数器
CN104115230B (zh) 基于高效pcms刷新机制的计算装置、方法和系统
US9477605B2 (en) Memory hierarchy using row-based compression
CN104126181A (zh) 作为随机存取存储器的非易失性半导体存储装置的系统存取的薄变换
CN109219797A (zh) 用于格式化持久性存储器文件的技术
CN105474183A (zh) 存储器管理
CN106372011A (zh) 用于pcie ssd控制器的高性能主机队列监控器
EP3798828A2 (en) Techniques for decoupled access-execute near-memory processing
KR20220129106A (ko) 비트 스트링 축적
JP2017117439A (ja) 科学計算用ストレージプロセッサアレイ
CN202167057U (zh) 一种高级图形存储器
CN114270311A (zh) 分级存储器系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant