CN114764407A - 加速器和词典解码的近存储加速的方法 - Google Patents

加速器和词典解码的近存储加速的方法 Download PDF

Info

Publication number
CN114764407A
CN114764407A CN202111622072.6A CN202111622072A CN114764407A CN 114764407 A CN114764407 A CN 114764407A CN 202111622072 A CN202111622072 A CN 202111622072A CN 114764407 A CN114764407 A CN 114764407A
Authority
CN
China
Prior art keywords
dictionary
accelerator
data
values
encoded
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111622072.6A
Other languages
English (en)
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 CN114764407A publication Critical patent/CN114764407A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3088Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Holo Graphy (AREA)
  • Error Detection And Correction (AREA)

Abstract

公开了加速器和词典解码的近存储加速的方法。所述加速器可包括可存储词典表的存储器。地址生成器可被配置为基于编码值来生成词典表中的地址,编码值可具有编码宽度。输出过滤器可被配置为基于编码值、编码宽度和解码后的数据的解码宽度来从词典表过滤出解码值。所述加速器可被配置为支持至少两种不同的编码宽度。

Description

加速器和词典解码的近存储加速的方法
本申请要求于2021年1月15日提交的第63/138,165号美国临时专利申 请和于2021年6月24日提交的第17/357,953号美国非临时专利申请的权益, 所述美国专利申请出于所有目的通过引用包含于此。
技术领域
公开总体上涉及存储装置,更具体地,涉及在存储装置附近执行词典解 码。
背景技术
数据库管理系统(和其它存储系统)可使用数据编码来将存储的数据压 缩到存储装置中。为了节省存储空间,数据可以以压缩的方式被存储。对数 据进行压缩通常涉及:以在某些方面与原始数据不同的格式存储数据,同时 仍然表示原始数据(用于无损压缩)或接近原始数据的某物(用于有损压缩)。 虽然一些操作可对编码的数据运行,但是运行不同的数据库操作可需要首先 将被解码的数据。在主机处理器中执行该解码可能降低主机处理器执行其它 命令的能力。
当数据被词典编码时,仍然需要提高主机处理器性能。
发明内容
公开的实施例包括与存储装置相关联的加速器。加速器可执行对以词典 编码格式存储的数据的解码。在解码之后,解码后的数据可被写回到存储装 置或动态随机存取存储器(DRAM)。
公开的实施例涉及一种加速器,所述加速器包括:存储器,被配置为存 储词典表;地址生成器,被配置为:至少部分地基于编码值来生成存储器中 的词典表中的地址,编码值具有编码宽度;以及输出过滤器,被配置为:至 少部分地基于所述地址来从词典表过滤出解码值,解码值具有解码宽度,其 中,加速器被配置为支持至少两种不同的编码宽度。
公开的实施例涉及一种方法,所述方法包括:将词典页从存储装置读取 到加速器中的存储器中,词典页将具有编码宽度的编码值映射到具有解码宽 度的解码值;从存储装置读取编码后的数据页;从编码后的数据页访问编码 值;使用加速器将编码值映射到解码值;以及用解码值替换编码后的数据页 中的编码值,以产生解码后的数据页,其中,加速器被配置为支持至少两种 不同的编码宽度。
公开的实施例涉及一种物品,所述物品包括非暂时性存储介质,所述非 暂时性存储介质具有存储在其上的指令,所述指令在由机器执行时使得:将 词典页从存储装置读取到加速器中的存储器中,词典页将具有编码宽度的编 码值映射到具有解码宽度的解码值;从存储装置读取编码后的数据页;从编 码后的数据页访问编码值;使用加速器将编码值映射到解码值;以及用解码 值替换编码后的数据页中的编码值,以产生解码后的数据页,其中,加速器 被配置为支持至少两种不同的编码宽度。
附图说明
以下描述的附图是公开的实施例可如何被实现的示例,并且不意在限制 公开的实施例。公开的各个实施例可包括在特定附图中未示出的元件和/或可 省略在特定附图中示出的元件。附图意在提供说明,并且可不按比例。
图1示出根据公开的实施例的包括用于支持词典解码的加速器的系统。
图2示出根据公开的实施例的图1的机器的细节。
图3示出根据公开的实施例的用于在图1的存储装置中使用图1的加速 器来支持词典解码的架构。
图4示出根据公开的实施例的支持词典解码的固态驱动器(SSD)。
图5示出根据公开的实施例的图1的存储装置上的未编码的/解码后的数 据可如何使用词典而被编码。
图6示出根据公开的实施例的将解码后的数据传送到图1和图4的其它 存储介质。
图7示出根据公开的实施例的图1的加速器的细节。
图8示出根据公开的实施例的图7的地址生成器的细节。
图9示出根据公开的实施例的图7的输出过滤器的细节。
图10A示出根据公开的实施例的数据可在图7的词典表中被存储和数据 可从图7的词典表被检索的一种方式。
图10B示出根据公开的实施例的数据可在图7的词典表中被存储和数据 可从图7的词典表被检索的第二方式。
图10C示出根据公开的实施例的数据可在图7的词典表中被存储和数据 可从图7的词典表被检索的第三方式。
图10D示出根据公开的实施例的数据可在图7的词典表中被存储和数据 可从图7的词典表被检索的第四方式。
图11示出根据公开的实施例的使用图1的加速器来执行词典解码以支持 存储在图1的存储装置上的数据的示例过程的流程图。
图12A示出根据公开的实施例的使用图1的加速器来执行词典解码以支 持存储在图1的存储装置上的数据的另一示例过程的流程图。
图12B继续根据公开的实施例的使用图1的加速器来执行词典解码以支 持存储在图1的存储装置上的数据的另一示例过程的图12A的流程图。
图13示出根据公开的实施例的用于将图5的词典页加载到图1的加速器 并且配置图1的加速器的示例过程的流程图。
图14示出根据公开的实施例的图1的加速器使用图7的词典表将编码值 映射到解码值的示例过程的流程图。
具体实施方式
现在将详细参照公开的实施例,在附图中示出公开的实施例的示例。在 下面的具体实施方式中,阐述了许多特定细节,以使公开能够的彻底理解。 然而,应理解,本领域普通技术人员可在没有这些特定细节的情况下实践公 开。在其它情况下,公知的方法、过程、组件、电路和网络未被详细描述, 以免不必要地模糊实施例的方面。
将理解,尽管在此可使用术语第一、第二等来描述不同的元件,但是这 些元件不应受这些术语限制。这些术语仅用于将一个元件与另一元件区分开。 例如,在不脱离公开的范围的情况下,第一模块可被称作第二模块,类似地, 第二模块可被称作第一模块。
在公开的描述中使用的术语在此仅出于描述特定实施例的目的,而不意 在限制公开。如在公开的描述和所附权利要求中使用的,除非上下文另外清 楚地指示,否则单数形式也意在包括复数形式。还将理解,如在此使用的术 语“和/或”表示并包含相关所列项中的一个或多个的任何和所有可能的组合。 还将理解,术语“包括”和/或“包含”在用在本说明书中时,说明存在叙述 的特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多 个其它特征、整体、步骤、操作、元件、组件和/或它们的组。附图的组件和 特征不必按比例绘制。
数据库管理系统(和其它存储系统)可使用数据编码来将存储的数据压 缩到存储装置中。词典编码(dictionary encoding)可以是用小数字替换来自 大域的属性的无损一对一压缩方法。为了对数据库进行排序(sort),如果数 据以编码格式被存储,则表应被解码随后被排序。
但是作为其它处理的准备步骤的将大量数据传送到主机处理器以执行词 典解码可能消耗可用于其它目的资源(诸如,总线带宽和处理时间)。计算存 储装置可支持存储在存储装置中的数据的通用词典解码。使用通用词典解码, 相同的加速器可用于对用两个或更多个不同的词典编码编码的数据进行解码。 词典可对固定或可变宽度数据进行编码。词典可被加载到加速器中,在这之 后,数据可被读取和解码,随后被传输到另一个处理单元以进行处理(诸如, 排序、过滤等)或者被写回到存储装置(用于之后的处理)。
图1示出根据公开的实施例的包括用于支持词典解码的加速器的系统。 在图1中,机器105(也可被称为主机)可包括处理器110、存储器115和存 储装置120。处理器110可以是任何种类的处理器。(为了便于说明,处理器 110以及以下讨论的其它组件被示出在机器外部:公开的实施例可将这些组 件包括在机器内。)虽然图1示出单个处理器110,但是机器105可包括任何 数量的处理器,每个处理器可以是单核处理器或多核处理器,每个处理器可 实现精简指令集计算机(RISC)架构或复杂指令集计算机(CISC)架构(以 及其它可能性),并且可以以任何期望的组合被混合。
处理器110可结合到存储器115。存储器115可以是任何种类的存储器(诸 如,闪存、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、 持久性随机存取存储器、铁电随机存取存储器(FRAM)或非易失性随机存 取存储器(NVRAM)(诸如,磁阻随机存取存储器(MRAM))等)。存储器 115还可以是不同存储器类型的任何期望的组合,并且可由存储器控制器125 管理。存储器115可用于存储可被称为“短期(short-term)”的数据(即,不 期望在延长的时间段内被存储的数据)。短期数据的示例可包括临时文件、由 应用本地使用的数据(可能已经从其它存储位置被复制)等。
处理器110和存储器115还可支持可运行各种应用的操作系统。这些应 用可发出从存储器115或存储装置120读取数据或者将数据写入存储器115 或存储装置120的请求(也可被称为命令)。存储装置120可用于例如存储用 于初始化模拟的初始参数(或初始参数的值的范围、以及值的范围表示什么 类型的行为)。可使用装置驱动器130来访问存储装置120。虽然图1使用通 用术语“存储装置”,但是公开的实施例可包括可受益于数据质量度量(metric) 的使用的任何存储装置格式,任何存储装置格式的示例可包括硬盘驱动器和固态驱动器(SSD)。以下对“SSD”的任何引用应被理解为包括公开的这样 的其它实施例。
机器105还可包括加速器135。加速器135可以是可执行词典解码以支 持对存储在存储装置120中的数据执行的操作的加速器。加速器135可以是 存储装置120的一部分,加速器135可直接连接到存储装置120(但仍然是 单独的元件),或者加速器135可跨例如总线(诸如,外围组件互连快速(PCIe) 总线)通信地结合到存储装置120。通过使加速器135更接近存储装置120, 传送到处理器110的数据量可被减少,这可增大发送到处理器110或从处理 器110发送的数据的可用带宽。以下参照图7进一步讨论加速器135。
图2示出根据公开的实施例的图1的机器105的细节。在图2中,通常, 机器105包括一个或多个处理器110,处理器110可包括存储器控制器125 和时钟205,处理器110可用于协调机器的组件的操作。处理器110还可结合 到存储器115,作为示例,存储器115可包括随机存取存储器(RAM)、只读 存储器(ROM)或其它状态保存介质。处理器110还可结合到存储装置120 和网络连接器210,网络连接器210可以是例如以太网连接器或无线连接器。 处理器110还可连接到总线215,用户接口220和可使用输入/输出(I/O)引 擎225管理的I/O接口端口以及其它组件可附接到总线215。
图3示出根据公开的实施例的用于在图1的存储装置中使用图1的加速 器来支持词典解码的架构。在图3中,处理器110可连接到多个存储装置, 每个存储装置具有其自己的加速器。因此,处理器110可连接到存储装置120-1、 120-2和120-3(可被统称为存储装置120)。每个存储装置120可包括相关联 的加速器135-1、135-2和135-3(可被统称为加速器135)。加速器135-1被 示出为结合在处理器110与存储装置120-1之间,存储装置120-2被示出为结 合在处理器110与加速器135-2之间,存储装置120-3被示出为包括加速器 135-3。虽然图3示出三个存储装置120和三个加速器135,但是公开的实施 例可支持任何数量(一个或多个)的存储装置120和加速器135。
图3示出跨总线305通信的处理器110、存储装置120和加速器135。总 线305可以是如图2的总线215的总线,或者总线305可以是与图2的总线 215不同的总线。另外,虽然图3示出支持处理器110、存储装置120和加速 器135之间的通信的一条总线,但是公开的实施例可包括支持处理器110、 存储装置120和加速器135中的任何之间的通信的任何数量(一条或多条) 的不同总线。
图4示出根据公开的实施例的支持词典解码的固态驱动器(SSD)。在图 4中,SSD120可包括接口405。接口405可以是用于将SSD 120连接到图1 的机器105(和/或在加速器135不是SSD 120的一部分时,将SSD 120连接 到加速器135)的接口。SSD 120可包括多于一个接口405:例如,一个接口 可用于基于块的读取和写入请求,并且另一接口可用于键值(key-value)读 取和写入请求。虽然图4建议接口405是图1的SSD 120与机器105之间的 物理连接,但是接口405还可表示可跨公共物理接口使用的协议差异。例如, SSD 120可使用U.2或M.2连接器连接到机器105,但是可支持基于块的请求 和键值请求:处理不同类型的请求可由不同的接口405执行。
SSD 120还可包括主机接口层410,主机接口层410可管理接口405。如 果SSD 120包括多于一个接口405,则单个主机接口层410可管理所有的接 口,SSD 120可包括用于每个接口的主机接口层,或者主机接口层的一些组 合可被使用。
SSD 120还可包括SSD控制器415、各种通道420-1、420-2、420-3和420-4, 可沿着这些通道布置各种闪存芯片425-1、425-2、425-3、425-4、425-3、425-6、 425-7和425-8。SSD控制器415可管理沿着通道420-1至420-4将读取请求 和写入请求发送到闪存芯片425-1至425-8。尽管图4示出四个通道和八个闪 存芯片,但是公开的实施例可包括任何数量(一个或多个,没有限制)的通 道,通道包括任何数量(一个或多个,没有限制)的闪存芯片。
在每个闪存芯片内,空间可被组织成块,块可被进一步细分为页,页可 被分组为超级块。页通常是可在SSD上被读取或写入的最小数据单元。页大 小可根据需要变化:例如,页可以是4KB的数据。如果小于整页将被写入, 则多余空间是“未使用的”。
虽然页可被写入和读取,但是SSD通常不允许数据被覆写(overwrite), 也就是说,现有数据可不被新数据“就地(in place)”替换。相比之下,当数 据将被更新时,新数据被写入SSD上的新页,并且原始页被无效(标记为准 备擦除)。因此,SSD页通常具有三种状态之一:空闲(准备好被写入)、有 效(包含有效数据)和无效(不再包含有效数据,但在擦除之前不可用)(这 些状态的确切名称可变化)。
但是,虽然页可被单独地写入和读取,但是块是可被擦除的基本数据单 元。也就是说,页不可被单独擦除:块中的所有页通常被同时擦除。例如, 如果块包含256个页,则块中的所有256个页被同时擦除。这种布置可能导 致SSD的一些管理问题:如果仍然包含一些有效数据的块被选择用于擦除, 则在块可被擦除之前,该有效数据可需要被复制到SSD上其它地方的空闲页。 (在公开的一些实施例中,擦除单元可与块不同:例如,擦除单元可以是超 级块,超级块可以是多个块的集。)
因为数据被写入的单元与数据被擦除的单元不同(页与块),所以如果 SSD等待直到仅包含无效数据的块,则即使有效数据量可小于SSD的通告容 量(advertisedcapacity),SSD实际上也可能耗尽可用存储空间。为了避免这 种情况,SSD控制器415可包括垃圾收集逻辑(图4中未示出)。垃圾收集的 功能可以是识别包含全部是无效页或大部分都是无效页的块,并且释放这些 块,使得有效数据可再次被写入其中。但是如果被选择用于垃圾收集的块包 括有效数据,则该有效数据将被垃圾收集逻辑擦除(因为擦除单元是块,而 不是页)。因此,为了避免这样的数据丢失,垃圾收集逻辑可将来自这样的块 的有效数据编程到其它块中。一旦数据已经被编程到新块中(并且将LBA映 射到PBA的表被更新以反映数据的新位置),则块可被擦除,从而将块中的 页的状态返回到空闲状态。
在单元可能不被信任以正确地保留数据之前,SSD还可使每个单元可被 写入有限次数。该次数通常被测量为单元经历的编程/擦除循环的次数的计数。 通常,单元可支持的编程/擦除循环的次数表示SSD将在合理的时间段内保持 可靠的功能:对于个人用户,用户可能由于不足的存储容量而不是因为编程/ 擦除循环的次数已经被超过界限而更可能替换SSD。但是在企业环境中,数 据可被更频繁地写入和擦除,单元超过其编程/擦除循环计数的界限的风险可 能更显著。
为了帮助抵消这种风险,SSD控制器415可采用耗损均衡逻辑(图4中 未示出)。损耗均衡可涉及基于块的编程/擦除循环计数来选择数据块以写入 数据。通过选择具有较低编程/擦除循环计数的块,SSD可能够避免增大一些 块的编程/擦除循环计数超过其可靠操作点。通过保持每个块的耗损水平尽可 能接近,SSD可在更长的时间段内保持可靠。
SSD控制器415可包括闪存转换层430(对于不使用闪存存储的存储装 置,闪存转换层430可更一般地被称为逻辑到物理转换层)和DRAM 435。 闪存转换层430可处理LBA或其它逻辑ID(如图1的处理器110所使用的) 和物理块地址(PBA)或其它物理地址的转换,其中,数据被存储在闪存芯 片425-1至425-8中。如在执行垃圾收集和/或损耗均衡时可能发生的,闪存 转换层430还可负责将数据从一个PBA重新定位到另一个PBA。DRAM 435 可以是SSD 120用于任何期望目的的本地存储器。在公开的一些实施例中, DRAM 435可以是约4GB至64GB的存储器,但是也可大于或小于该存储器 的范围。
虽然图4将SSD 120示出为包括一个加速器135,但是公开的实施例可 包括包含(或连接到)两个或更多个加速器135的存储装置120。
图5示出根据公开的实施例的图1的存储装置120上的未编码的/解码后 的数据可如何使用词典而被编码。在图5中,示出解码后的(或原始的)数 据505。虽然图5将解码后的数据505示出为整数列表,但是公开的实施例 可包括任何数据类型:例如,固定宽度数据类型(即,用于表示列表中的任 何值的位数/字节数相同的数据类型)。因此,解码后的数据505可包括浮点 数、无符号数、字符、字符串等。
词典(诸如,词典510)可用于存储解码后的数据的表示,潜在地使用 比原始数据少的位/字节。词典510的前提是,虽然存储每个值所需的位数/ 字节数可能很大,但是将被表示的唯一值的数量相对小。因此,通过建立从 “小”唯一键(unique key,或被称为唯一约束)到“大”值的映射并且仅存 储“小”唯一键可节省空间。
作为示例,考虑包含公民身份信息的数据库。世界各国的名称的长度从 4个字符(“Chad”)至56个字符(“The United Kingdom of Great Britain and NorthernIreland”)变化。假设国家名称中的每个字符需要一个字节,则将国 籍存储为字符串所需的字节数因此可在4至56之间变化。
另一方面,世界上仅存在约200个国家。数字“200”可仅使用两个有符 号字节(或一个无符号字节)而被表示。因此,如果词典表将各个键映射到 国家名称,则键(而不是较长的国家名称)可被存储在数据库中。
取决于数据库中的条目的数量,该映射可节省大量空间。继续该示例, 假设数据库包括100,000个条目。为了存储100,000个条目,每个条目包括 56个字节(因为在最坏的情况下,每个条目将使用最长的国家名称)将需要 5,600,000个字节。相比之下,存储词典表并在数据库中使用两个字节键将需 要为词典表存储约200×56=11,200个字节,并且在条目自身中存储200,000 个字节,对于211,200个字节的总空间需求:数据库的该部分节省约96.2%。 即使在条目中存储完整的国家名称所需的空间约为最坏情况的1/2,所需的空间仍将是2,800,000个字节,并且词典编码仍将节省约92.5%。
因此,图5示出使用整数值的词典编码的示例。给定解码后的数据505 和词典页510,编码后的数据515可被产生。例如,值520(是“25”)可作 为键“1”被存储在词典页510中,键“1”随后可作为键525被存储在编码 后的数据515中。
注意,解码后的数据505中示出的示例值将全部适合于两个字节整数。 如果两个字节整数也用于键,则通过使用词典页510将不会明显节省空间。 但是可能的是,虽然词典页510中示出的所有示例值将适合两个字节,但是 可存在未示出的可能需要多于两个字节来存储的其它值。即使键和值的宽度 (表示每个键和值所需的位数/字节数)相同,词典编码仍然可被使用。
词典页510可以以多种不同的方式而被构建。构建词典页510的一种方 式是一次一个值地扫描解码后的数据505。如果该值已经在词典页510中, 则对应的键可在编码后的数据515中被使用,否则,新值可被添加到词典页 510并被分配随后可在编码后的数据515中被使用的新键。可选地,可扫描 解码后的数据505以识别所有唯一值。然后可对唯一值进行排序并分配键。 然后可基于构建的词典页510将解码后的数据映射到编码后的数据。公开的 其它实施例可以以其它方式来构造词典页510。
图6示出根据公开的实施例的将解码后的数据传送到图1和图4的其它 存储介质。在图6中,存储装置120被示出为存储词典页510以及编码后的 数据页515-1(例如,编码后的数据页1)和515-2(例如,编码后的数据页2) (可被统称为编码后的数据页515)。加速器135随后可从存储装置120读取 词典页510和编码后的数据页515,对编码后的数据页515进行解码,并且 将解码后的数据页605-1(例如,解码后的数据页1)和605-2(例如,解码 后的数据页2)(可被统称为解码后的数据页605)写入DRAM 435(如图4 中所示,在存储装置120内)和/或存储器115(如图1中所示,在图1的主 机105内),这取决于数据接下来将被在何处使用。加速器135还可将解码后 的数据页605写回到存储装置120,以备解码后的数据页605可在将来的某 个时刻被使用。
图7示出根据公开的实施例的图1的加速器135的细节。在图7中,加 速器135被示出为包括输入缓冲器705、地址生成器710、存储器715、表读 取模块720、输出过滤器725和输出缓冲器730。输入缓冲器705可从图1的 存储装置120接收数据(诸如,图5的编码后的数据515)。输入缓冲器705 可通过加速器135上的端口(图7中未示出)经由接口(诸如,高级可扩展 接口(AXI))从图1的存储装置120接收数据。输入缓冲器705可一次接收 将由加速器135处理的大块数据,或者输入缓冲器705可接收流中的数据(即, 以多个小数据块(chunk)而不是作为单个大数据块发送)。输入缓冲器705 可临时存储接收的数据(例如,用于在由加速器135进一步处理之前填充输 入缓冲器705),或者可传输数据用于加速器135在接收到时进一步处理)。
一旦数据被输入缓冲器705接收,地址生成器710就可获取键(如存储 在图5的编码后的数据页515中),并且使用该信息来生成值被存储在词典表 735中哪处的地址。以下参照图8进一步讨论地址生成器710。词典表735可 存储键与值之间的映射(由图5的词典页510表示):表读取模块720随后可 使用由地址生成器710生成的地址从存储器715访问词典表735中的数据, 以从词典表735检索包含期望值(例如,解码值)的一个或多个条目(也可被称为一个或多个行)。表读取模块720可使用例如中央处理器(CPU)或某 个其它处理器(诸如,图形处理器(GPU)、通用GPU(GPGPU)、数据处理 单元(DPU)、张量处理器(TPU)、现场可编程门阵列(FPGA)或专用集成 电路(ASIC)以及其它可能性)来实现。另外,加速器135可包括多于一个 表读取模块720,每个表读取模块720可使用任何以上选项来单独地实现。(加 速器135还可包括可用于其它目的(诸如,处理解码后的数据)的其它这样 的处理元件。)以下参照图10A至图10D进一步讨论词典表735。
给定来自词典表735的一个或多个条目,输出过滤器725随后可过滤出 来自图5的编码后的数据页515的键被映射到的值。以下参照图9进一步讨 论输出过滤器。该信息可被传递到输出缓冲器730,输出缓冲器730随后可 输出解码后的数据页605。
注意,加速器135可处理图5的编码后的数据页515中的编码后的数据。 但是在公开的一些实施例中,编码后的数据页515可包括比仅使用词典510 编码的数据多的信息。例如,再次考虑存储关于某一组人的公民身份的信息 的数据库。虽然国籍可以是将受益于词典编码的数据,但是人的姓名或他们 的街道地址可能无法受益于词典编码:这样的唯一值的数量大致等于数据库 中的条目的数量。图5的编码后的数据页515可包括使用词典510编码的数 据和未被词典编码的数据二者。由于加速器135可执行编码后的数据的词典 解码,因此未编码的数据可在未由加速器135进行修改的情况下被返回。由 于加速器135可处理可能包括一些未编码的数据的整个数据页,因此来自输 入缓冲器705的数据(具体地,不经受加速器135的词典编码的数据)可被 提供给输出缓冲器730,如虚线740所示。当然,如果加速器135仅接收经 受词典编码的实际数据(例如,如果加速器135外部的过滤器识别哪些数据 经受词典编码以及哪些数据未经受词典编码),则该外部过滤器可仅将词典编 码后的数据提供给加速器135,在这种情况下,加速器135可简单地执行词 典解码,而不考虑未被词典编码的数据。
存储器715可以是图4的DRAM 435或某种等效类型的存储器。但是存 储器715还可以是片上存储器,片上存储器可比DRAM更快地进行操作。例 如,存储器715可以是块RAM(BRAM)或超RAM(URAM)或某种其它 形式的存储器。在公开的一些实施例中,存储器715可以是约10MB至100MB 的存储器,但是也可大于或小于该存储器的范围。
虽然图7将存储器715示出为包括一个词典表735,但是公开的实施例 可支持在存储器715中多于一个词典表735。在公开的这样的实施例中,加 速器135可支持对使用两个或更多个不同词典编码的数据执行词典解码。
图8示出根据公开的实施例的图7的地址生成器710的细节。在图8中, 地址生成器710可接收输入地址(可以是键)以及输出宽度(即,用于在词 典表中存储单个值的位数/字节数)作为输入。如以下参照图10A至图10D 所讨论的,图7的词典表735中的单个条目可存储一个值或多个不同值(或 一个值或多个不同值的部分)。如果输出宽度对于图7的词典表735中的所有 值是固定的,则给定图7的词典表735的宽度和图7的词典表735中的值的 宽度,词典表735中的每个条目中的值的数量可被确定。键中的最低有效位 随后可用于区分图7的词典表735中的条目中的可能值:为了识别条目自身, 输入值可被向右移位区分条目中的值所需的位数。移位模块805可执行输入 值的这样的移位。
一些示例可有助于使这变得清楚。考虑图7的词典表735中的单个条目 恰好存储两个条目的可能性:例如,图7的词典表735可以是八个字节宽度, 并且每个值可需要四个字节。由于在图7的词典表735中的每行中存在两个 值,因此可使用一位来区分这两个值。因此,移位模块805可将输入键向右 移位一位,以识别图7的词典表735中期望存储该值的行。因此,例如,如 果输入地址是键“6”(二进制的“00000110”),(因为地址可在零而不是一处 开始,所以实际是表中的第七值),则输入地址可被向右移位一位,得到行地 址“3”(二进制的“00000011”),因此第六值可在词典表735的第三行中被 找到。
另一方面,考虑图7的词典表735中的单个条目恰好存储四个条目的情 况:例如,图7的词典表735可以是八个字节宽度,并且每个值可需要两个 字节。由于在图7的词典表735中的每行中存在四个值,因此可使用两位来 区分四个值。因此,移位模块805可将输入键向右移位两位,以识别词典表 735中存储期望值的行。因此,例如,如果输入地址是键“6”(二进制的 “00000110”),则输入地址可被向右移位两位,得到地址“1”(二进制的“00000001”),因此第六值可在词典表735的第一行中被找到。
图9示出根据公开的实施例的图7的输出过滤器725的细节。在图9中, 给定来自图7的词典表735的(一个或多个)行和输入地址的最低有效位(在 图9中被标记为“条目过滤器”)作为输入,输出过滤器725可使用条目过滤 器来区分行中的值以过滤出期望值。可通过对值进行遮掩(mask)和移位以 去除不是期望值的一部分的任何位/字节来实现该过滤。例如,期望值左侧的 位/字节可被遮掩,并且期望值的右侧的位/字节可通过将期望值向右移位而被 去除。
再次考虑图7的词典表735中的行包括八个字节并且每个值是四个字节 宽度的示例。由于在图7的词典表735中的每行中存在两个值,因此可使用 一位来区分这两个值。如果条目过滤器是零,则条目中的行中的前四个字节 可被遮掩为零,否则,条目可被向右移位四个字节。
另一方面,再次考虑图7的词典表735中的行包括八个字节并且每个值 是两个字节宽度的示例。由于在图7的词典表735中的每行中存在四个值, 因此可使用两位来区分四个值。基于条目过滤器,在掩码/移位完成之后,行 中的八个字节中的两个字节可被留下。
在以上示例中,由于图7的词典表735的宽度是解码的数据的宽度的倍 数,因此该值可在图7的词典表735的单个行内被完整地找到。在公开的一 些实施例中,该关系可能不是正确的,并且单个解码的值可跨图7的词典表 735中的两行被拆分。以下图10C至图10D讨论了如何处理这种情况。
考虑到以上讨论,应清楚,图1的加速器135可支持词典解码。但是不 仅支持词典解码,图1的加速器135可支持具有图7的任何大小的词典表735、 编码数据宽度和任何解码数据宽度的词典解码。图1的加速器135可与具有 固定的解码数据宽度的任何词典一起使用,而不是专门针对词典进行定制。 因此,加速器135可在一个时间使用具有一个编码数据宽度的词典、并且在 另一时间使用具有另一编码数据宽度的词典而被使用,而不需要任何重新配 置(除了将新词典存储在词典表735中并指定将被使用的编码数据宽度和解 码数据宽度之外)。
在以上讨论中,图1的加速器135已经被描述为好像使用字节对齐的数 据类型。由于这对于许多数据类型都是正确的,因此字节对齐便于使用。但 是公开的实施例可使用以位而不是字节测量的数据宽度:例如,如果数据被 打包(pack)。如果数据的正常宽度大于所需宽度,则数据可被打包。例如, 可使用两个字节来存储高达32767的(带符号的)整数。但是如果值被限制 在0与15之间,则仅需要四位来表示可能的值。通过将四个四位数打包成两 个字节,数据可被更紧凑地存储,尽管不再是字节对齐的。图1的加速器135 可简单地通过以位而不是字节测量宽度来处理这样的打包的数据。例如,在 图7的词典表735的八个字节宽度的行中,可存储16个不同的四位值。如果 提供的键是值1(即,第二条目),则输出过滤器可从该行过滤出除第二个四 位之外的所有位。(当然,因为编码的宽度可能大于解码的宽度,所以词典编 码在描述的示例中可能没有太大价值,但是原理成立。)
图10A至图10D示出根据公开的实施例的数据可被存储在图7的词典表 735中和数据可从图7的词典表735被检索的不同方式。在图10A中,词典 表735被示出为八个字节宽度,并且存储八个字节数据。词典表735的第一 行可存储值1005-1,词典表735的第二行可存储值1005-2,词典表735的第 三行可存储值1005-3,以此类推(值1005-1至1005-3可被统称为值1005)。 因此,输入键可用作词典表735中的行标识符(例如,行号)而无需修改(或者,更准确地,通过使图8的移位模块805将输入键向右移位零位)。例如, 如果输入键是“0”,则词典表735的第一行可存储该值,如虚线区域1010所 示,该值包括字节零至七。
在图10B中,词典表735被示出为八个字节宽度,并且存储四个字节数 据。词典表735的第一行可存储值1015-1和值1015-2,词典表735的第二行 可存储值1015-3和值1015-4,词典表735的第三行可存储值1015-5和值 1015-6,以此类推(值1015-1至1015-6可被统称为值1015)。因此,通过将 输入键向右移位一位(因为一位足以区分行中的两个不同值),输入键可用作 词典表735中的行标识符。例如,如果输入键是“1”,则词典表735的第一 行可存储该值(因为二进制的“1”是“00000001”,并且在将“1”向右移位 一位之后,结果是“00000000”,指示词典表735中的第一行),如虚线区域 1020所示,该值包括字节四至七。
在图10C中,词典表735被示出为八个字节宽度,并且存储六个字节数 据。词典表735的第一行可存储值1025-1和值1025-2的开端,词典表735 的第二行可存储值1025-2的结尾和值1025-3的开端,词典表735的第三行可 存储值1025-3的结尾和值1025-4,以此类推(值1025-1至1025-4可被统称 为值1025)。在公开的实施例中,值的开端和值的结尾可构成整个值。因此, 根据以下讨论的预先说明,通过将输入键向右移位一位(因为一位足以区分 行中的两个不同值),输入键可用作词典表735中的行标识符。例如,如果输 入键是“1”,则词典表735的第一行可存储该值(因为二进制的“1”是 “00000001”,并且在将“1”向右移位一位之后,结果是“00000000”,指示 词典表735中的第一行),如虚线区域1030-1所示,包括字节六至七;由于 第一行仅包括该值的两个字节,因此如虚线区域1030-2所示,剩余的四个字 节可在第二行中被找到。
当单个行将精确地保持一定数量的值时,以上描述如所描述的那样进行 工作。但是当单个条目可能由于词典表735的宽度不是解码的数据的宽度的 恰好倍数而跨越多个行时,则可能需要一些修改。首先,因为值可跨多个行, 所以图1的加速器135可从词典表735中检索两个行以定位该值。图1的加 速器135可被修改以在每种情况下检索标识的行和随后的行:在最坏的情况 下,第二行中的数据可被图7的输出过滤器725丢弃。
其次,更重要的是,最终仅将键移位一定数量的位可能返回不正确的行 标识符。例如,键“4”(第五值)将以二进制被表示为“00000100”。在每行 中具有两个值的情况下,可使用一位来区分这些值:将“00000100”向右移 位一位将返回“00000010”,表明该值可在行2(词典表735中的第三行)中 被找到。但是实际上,第五值将在词典表735的第四行的字节零至五中被找 到。发生该错误是因为最终某个值将在词典表735中的行的最后字节中结束(这可能在存储值的倍数所需的字节数也是词典表735的宽度的倍数时发 生)。
存在可解决该问题的几种不同方式。一种解决方案是使用比仅移位操作 更复杂的公式来计算期望值可位于其中的行。如果词典宽度被表示为Wdict, 解码数据宽度被表示为Wdata,并且键被表示为k,则期望值开始的行可被计 算为
Figure BDA0003438419500000151
继续前面的示例,使用k=4,wdata=6和wdict=8,包括第五 值的行是
Figure BDA0003438419500000152
这是正确的行号(再次记住词典表735中的行可 从零开始)。该计算起作用是因为:如果词典表735中的字节从零开始被连续 地编号,则k×wdata是词典表735中期望值开始的字节;除以词典表735的宽度并取该结果的整数(或可选地地,丢弃任何余数)识别该字节位于其中的 行。
如图10D中所示,可使用该问题的另一种解决方案。在图10D中,不是 使用键、解码数据宽度和词典表735的宽度来计算存储期望值的行,而是图 1的加速器135可(例如,在图7的存储器715中)存储表1035,表1035可 将特定的键映射到存储数据的特定的行和偏移。因此,例如,条目1040-1示 出键“0”存储在开始于行零、偏移零的词典表735中,条目1040-2示出键 “1”被存储在开始于行零、偏移六的词典表735中,条目1040-3示出键“2” 被存储在开始于行一、偏移四的词典表735中,依此类推。然后,给定特定 的键,表1035中的查找(lookup)可识别存储该值的词典表740中的行和偏 移:识别的行(如果值被分成两行,则可能还有下一行)可被检索到,输出 过滤器随后可将该信息减少到仅如上所述的期望值。
除了或者可选地存储每个键的行和偏移,表1035可存储数据的字节地址 和/或宽度(在图10D中由虚线框示出为可选信息)。字节地址可用于确定期 望值在词典表735中开始的行和偏移,类似于以上关于确定来自键的行和偏 移的讨论。在数据具有固定宽度(即,词典表中的所有值具有相同宽度)并 且该值由图1的加速器135已知的情况下,每个单独的数据元素的宽度不需 要被存储在表1035中。即使对于可变宽度数据,任何单独的值的宽度也可通 过确定表1035中的相邻键之间的位数/字节数(即,通过对词典表740中的 一个值开始的位置与词典表740中的下一值开始的位置之间的位数/字节数进 行计数)而被确定。但是通过将值的宽度存储在表1035中,加速器135可提 取值的宽度及其位置,从而避免在对键进行解码时计算值的宽度的需要。
注意,存储每个数据值的各个长度还提供在词典表740中定位值的替代 方式:图1的加速器135可计算各个值的宽度的动态和(running sum),该和 除以词典表735的宽度来标识值开始的行,余数标识行内的偏移。在公开的 这样的实施例中,表1035可仅存储各个值的宽度,而不是它们的行/偏移。
表1035还可提供其它益处。首先,通过支持词典表735中的条目的数据 宽度可能不固定的可能性,表1035能够在词典表735中存储可变宽度数据。 另外,表1035可支持存储可超过词典表740的宽度的值。通过使用表1035 来识别各个值在词典表740中位于的位置,不需要键与在词典表740中存储 值的位置之间的关系。因此,虽然使用地址生成器710允许值所位于的行的 简单计算,但是使用表1035可提供更通用的解决方案。
因为所有所需要的是知道值的数量(即,可被使用的不同键)、解码后的 数据的宽度和词典表740的宽度(其余的是简单的算术),所以表1035可被 预先构造(例如,当词典表735被加载到图1的加速器135中时)。实际上, 因为最坏的情况(将等于词典表735中的行的数量乘以词典表735的宽度、 除以解码数据宽度(或者如果可变宽度数据被存储在词典表735中,则最窄 解码数据宽度))可被假设,所以甚至不需要知道不同值的数量。并且如果使用的键与表1035中的行号相同,则表1035也不需要存储键。
另外,通过将每个值的起始位/字节存储在词典表740中,表1035可允 许图1的加速器135存储可变宽度数据类型。例如,如上所述,当国家名称 用作字符串时,国家名称的宽度可从四个字节变化到56个字节。可通过适当 地(例如,用空格或空字符)填充各个值以使其与最长的字符串一样长来使 所有字符串名称具有相同的宽度,在这种情况下,可如上所述使用图1的加 速器135。但是通过存储每个值开始的行和偏移,图1的加速器135不仅可确定词典表740中的值的起始位置,而且可通过比较表1035中的相邻键的行 和偏移来确定其宽度。当使用可变宽度数据类型时,表1035可需要扫描图5 的词典页510以确定每个值的宽度(这可影响表1035中的其它值的行和偏移)。
图11示出根据公开的实施例的使用图1的加速器来执行词典解码以支持 存储在图1的存储装置上的数据的示例过程的流程图。在图11中,在框1105, 图1的加速器135可从图1的存储装置120读取图5的词典页510。图1的 加速器135还可将其自身配置为在将图5的词典页510读取到图7的词典表 735中之后从图7的词典表735适当地访问数据。在框1110,图1的加速器 135可读取图5的编码后的数据页515(或者可选地,来自图5的编码后的数 据页515的数据可被馈送到图1的加速器135)。
在框1115,图1的加速器135可访问图5的编码后的数据页515中的编 码值。在框1120,图1的加速器135可将来自图5的编码后的数据页515的 编码值映射到图7的词典表735中的期望值。最后,在框1125,图1的加速 器135可用来自图7的词典表735的期望值替换图5的编码后的数据页515 中的编码值,产生图6的解码后的数据页605。取决于图5的编码后的数据 页515中的编码值的数量,可根据需要频繁地重复框1110至1125。
图12A至图12B示出根据公开的实施例的使用图1的加速器135来执行 词典解码以支持存储在图1的存储装置120上的数据的另一示例过程的流程 图。图12A至图12B类似于图11,但是更通用并且具有一些附加框。在图 12A中,在框1105,图1的加速器135可从图1的存储装置120读取图5的 词典页510。图1的加速器135还可将其自身配置为在将图5的词典页510 读取到图7的词典表735中之后从图7的词典表735适当地访问数据。在框 1110,图1的加速器135可读取图5的编码后的数据页515(或者可选地,来 自图5的编码后的数据页515的数据可被馈送到图1的加速器135)。在框1115, 图1的加速器135可访问图5的编码后的数据页515中的编码值。
在框1120(图12B),图1的加速器135可将来自图5的编码后的数据页 515的编码值映射到图7的词典表735中的期望值。在框1125,图1的加速 器135可用来自图7的词典表735的期望值替换图5的编码后的数据页515 中的编码值,产生图6的解码后的数据页605。取决于图5的编码后的数据 页515中的编码值的数量,可根据需要频繁地重复框1110至1125。最后,存 在两个可能的步骤:图1的加速器135可将图6的解码后的数据页605存储 回图6的存储装置120(如框1205中所示),或者图1的加速器135可将图6 的解码后的数据页605发送到图4的DRAM 435或图1的存储器115(如框 1210中所示)。
图13示出根据公开的实施例的将图5的词典页510加载到图1的加速器 135中并且配置图1的加速器135的示例过程的流程图。在图13中,在框1305, 图1的加速器135可将图5的词典页510存储到图7的词典表735中。在框 1310,图1的加速器135可确定如在图5的词典页510中使用的编码值的宽 度(编码值的宽度可例如通过在图5的词典页510中用于存储最大键的位数/ 字节数而被确定)。在框1315,图1的加速器135可确定在图5的词典页510 中使用的解码值的宽度(解码值的宽度可例如通过在图5的词典页510中用 于存储值的位数/字节数而被确定)。最后,在框1320,图1的加速器135可 使用编码后的数据的宽度和解码后的数据的宽度来配置其自身。
图14示出根据公开的实施例的图1的加速器135使用图7的词典表735 将编码值映射到解码值的示例过程的流程图。在图14中,在框1405,图1 的加速器135可确定用于区分图7的词典表735的单个行中的值的位数。在 框1410,图7的地址生成器710可将编码值(键)移位用于区分图7的词典 表735的单个行中的值的位数,以产生行标识符。在框1415,图1的加速器 135可从图7的词典表735读取标识的行。在框1420,图1的加速器135还 可读取词典表735中的相邻行,如果解码值跨词典表735中的两行被拆分, 则该相邻行可被使用。如虚线1425所示,如果期望值可在图7的词典表735 中的单个行内被找到,则框1420可被省略。最后,在框1430,图7的输出 过滤器725可基于用于区分图7的词典表735的行中的值的位,从图7的词 典表735的行过滤出期望值。
在图12A至图14中,示出公开的一些实施例。但本领域技术人员将认 识到,通过改变框的次序、通过省略框、或者通过包括附图中未示出的链接, 公开的其它实施例也是可行的。无论是否明确地描述,流程图的所有这样的 变化都被认为是公开的实施例。
随着每天生成的数据的大小增大,存储装置中可能存在计算瓶颈。存储 装置与计算平台之间的接口可能是由于有限带宽而导致的限制,有限带宽可 能无法随着存储装置的数量增加而扩展。互连网络可能无法提供对所有存储 装置的同时访问,因此当在不同的存储装置上发生独立操作时,可能限制系 统的性能。
将计算卸载到存储装置可减少或消除来自互连的数据传送的负担。近存 储计算可将计算的一部分卸载到存储装置以加速大数据应用。用于数据库排 序(或其它数据库操作)的近存储加速器可利用计算存储装置(诸如,具有 原位(in-situ)处理数据的板载(on-board)现场可编程门阵列(FPGA)芯 片(或其它处理器)的非易失性存储器快速(NVMe)闪存驱动器)。近存储 加速器可支持词典解码操作、排序操作和混洗操作。近存储加速器可支持对 具有任何任意数据类型的列进行排序,同时考虑存储装置的规格以随着存储 装置的数量增加而增大计算机系统的可扩展性。随着存储装置的数量增加, 该系统可提高性能和能量效率二者。
随着数据的增长,处理大量数据已经成为许多大数据用例(诸如,数据 库应用)的基础。随着存储的数据的大小增大,加载和存储数据的成本可能 超过计算成本,这可能降低性能。在一些应用(诸如,数据库、图形处理、 机器学习和统计分析)中,超过一半的执行时间可能被花费在数据传送上, 这示出数据通信对整体性能的影响。固态驱动器(SSD)的快速发展已经将 与数据传送时间相关联的瓶颈从磁盘(即,查找和旋转延迟)转移到互连带 宽和操作系统开销。
外围组件互连快速(PCIe)接口提供对存储装置的有限的同时访问,当 在不同的存储装置中并行调用独立操作时,这可能限制系统的可扩展性。这 个问题以及互连总线的低性能可能增大存储装置的性能容量与互连总线之间 的差距。
近存储计算可使计算的一部分能够卸载到存储驱动器,以加速大数据应 用。因此,已经开发新装置,以将计算能力带入闪存装置。计算存储装置可 以是例如具有原位处理数据的板载FPGA芯片的NVMe闪存驱动器。作为计 算存储装置的计算节点的FPGA可提供具有可承受的功耗和可重新配置性的 高度并行性,以实现多功能的应用(versatileapplication)。与通用处理核(即, 主机处理器)相比,FPGA可以以更小的功率更快地运行可并行化应用。与 常规存储装置相比,通过使用计算存储装置实现的益处可包括:通过将任务 卸载到近存储节点以桥接互连差距来提高整体性能、以及通过使用FPGA降 低功耗二者。由于数据密集型应用(诸如,数据库管理)的性能可能受到系 统带宽的限制,因此这样的应用可通过将计算卸载到存储驱动器而被加速。 因此,近来的处理系统意在将查询处理卸载到存储驱动器,以最小化主机与 存储设备之间的数据传送。零外,与计算密集型应用不同,由于输入/输出限 制(I/O bound)应用的性能可能受到主机到存储设备带宽的限制,因此它们 可能无法受益于高性能主机处理器。因此,将I/O限制应用卸载到计算存储 装置释放了主机资源,以执行更多的计算密集型任务。
随着现实世界数据库的大小增长,存储数据库可涉及多个存储装置。数 据库管理系统可将数据库划分为多个分区(partition),并且将操作分解为分 区数据库上的多个独立操作。尽管独立操作可被并行执行,但是由于I/O限 制应用中的存储设备到主机的带宽限制,主机处理器可能无法完全利用该分 区的机会。但是,由于计算存储装置具有它们自己的计算资源,因此计算存 储装置可在不使用存储设备到主机的带宽的情况下原位执行独立操作。具体 地,排序操作通常可在数据库查询处理中作为独立运行的操作或作为更复杂 的数据库操作(诸如,合并-连接、区别(distinct)、按次序、按组等)的主 干而被使用。当对数据库进行排序时,所有表列(table column)可基于被称 为键列(key column)的单个列而被排序。由于排序字符串阵列的高复杂性, 基于FPGA的加速器可专注于加速数字阵列。然而,基于非数字列对表进行 排序可广泛地用于数据库系统中。由于列的数量,现实世界数据库可能很难 排序,因为在对键列进行排序之后,表的其余部分应被相应地混洗。
数据库管理系统可使用数据编码来将存储的数据压缩到存储装置中。词 典编码可以是用小数字替换来自大域的属性的无损一对一压缩方法。为了对 数据库进行排序,如果数据以编码格式被存储,则对表应被解码随后被排序。
计算存储装置可提供对存储在每个存储装置中的数据的独立操作。为了 对数据库表进行排序,近存储排序可使用包括具有特定内核的基于FPGA的 加速器的计算存储装置,以加速词典解码操作、排序操作和随后的混洗操作。 系统可支持对具有任何任意数据类型的列进行排序。如果表以编码格式被存 储,则词典解码内核可对键列进行解码。然后,排序内核可对键列进行排序, 并且混洗内核可根据排序后的键列对表进行重新排序。这样的系统不仅通过 在存储系统附近执行计算来内在地解决数据传送问题,而且还包含词典解码、 排序和混洗操作的FPGA友好实施方式。附加地,如果数据以词典编码格式 被存储,则系统可利用词典编码后的数据来对除整数和长数据类型之外的其 它数据类型进行排序。词典编码可将不同的数据类型映射到整数键值,并且 系统可首先对编码的数据进行排序,随后通过使用支持任何任意数据类型的 新颖的词典解码器内核将排序的列解码为原始数据类型。
公开的实施例可包括作为近存储加速器的图1的加速器135,近存储加 速器通过利用计算存储装置来使计算更接近存储装置。
公开的实施例可包括图1的加速器135,加速器135具有用于受益于 FPGA并行性的双调排序(bitonic sort)的FPGA友好架构(或一些其它可替 换架构)。该架构可以是可扩展的,以对各种数据大小进行排序、输出排序后 的索引、并且可基于FPGA的可用资源进行扩展。
数据库管理系统可使用词典编码对数据进行编码以压缩数据。该系统可 包括通用词典解码内核,以将数据解码为任何数据类型。该系统可使用词典 解码作为数据库排序的第一阶段,以将输入提供给排序内核。附加地,词典 解码可用于支持对具有非数字数据类型的列进行排序。可优化系统的词典解 码内核以最大化SSD到FPGA的带宽利用率。
混洗可以是数据库排序的步骤,并且可以是I/O限制的。该系统可使用 混洗内核来完成表排序,混洗内核完全利用SSD的带宽来最大化对数据库表 进行排序的性能。可修改表的存储模式,以受益于混洗内核和排序内核二者 中的常规存储器模式。
公开的实施例可包括图1的加速器135,加速器135可比包括独立FPGA 和存储装置的常规架构上的相同加速器更快并且更有能效,其中FPGA可通 过PCIe总线连接到系统。当与CPU基线相比时,该系统也可更快并且更有 能效。
因为对数据库的操作可涉及大量数据,所以数据库系统可能受到磁盘性 能的约束。数据库可包括一个或多个表,每个表具有行和列,其中每个条目 保持特定属性。数据编码可用于对存储在存储系统中的表进行压缩。词典编 码可以是数据库管理系统中广泛使用的常见编码方法。与可涉及作为查询执 行之前的分块步骤的解压缩的面向字节的压缩方法(例如,gzip、snappy、行 程编码)不同,词典编码可支持并行解码和原位查询处理。基于键列对数据 库表进行排序可涉及下面的三个步骤:如果数据库表以词典编码格式被存储, 则对键列进行解压缩;对键列进行排序;以及相应地对表的其余部分进行重 新排序。该系统可包括三种类型的内核:词典解码、排序和混洗,以执行每 个步骤。该系统可在计算存储装置上执行所有计算以消除主机-存储设备通信。
可包括图1的存储装置120和图1的加速器135作为单独的组件或组合 成单个装置的计算存储装置的通用架构可包括:通用SSD、SSD控制器和 NAND阵列的组件、以及附加的FPGA加速器、FPGA动态随机存取存储器 (DRAM)和PCIe交换机,以建立NAND阵列与FPGA之间的通信。FPGA 与SSD之间的链路可提供计算存储装置与主机之间的直接通信。计算存储装置使用的SSD可以是例如通过PCIe Gen3 x4总线接口连接到例如FPGA的约 4 TB SSD。
在这样的计算存储装置中,处理器可通过SSD驱动器向SSD控制器发出 公共SSD命令(诸如,SSD读取/写入请求)。此外,处理器还可能够经由FPGA 驱动器发出FPGA计算请求和FPGA DRAM读取/写入请求。除了主机驱动的 命令之外,计算存储装置可通过使用FPGADRAM和板载PCIe交换机来支 持NVMe SSD与FPGA之间的内部数据路径上的数据移动,这在此可被称为 对等(peer-to-peer,P2P)通信。FPGA DRAM可被公开于主机PCIe地址空 间,使得NVMe命令可经由P2P通信安全地将数据流式传输(stream)到FPGA。 P2P可使计算接近数据可能驻留的位置,从而减少或消除主机到存储设备和 主机到加速器的PCIe通信量,以及相关的往返延迟和性能下降。计算存储装 置可提供开发环境和运行时堆栈(诸如,运行时库、API、编译器和驱动器), 以实现基于FPGA的设计。
当前的数据库可涉及多个装置以存储数据。这样的数据库可比当前商品 硬件平台能够处理的数据库更大。因此,数据库管理系统可将数据分区成更 小的数据块,使得计算节点可以以时间上可承受的方式在每个分区上执行计 算。此后,管理系统组合每个分区的结果以生成最终结果。假设数据可被存 储在SSD中,则每个SSD的表可被划分为特定数量的分区。为了对整个数据 库进行排序,可通过合并树对每个SSD的所有分区进行排序和合并。对每个 分区本地地进行排序可独立于其它分区,因此,本地不同的分区可被并行地 排序。
在对数据库表进行排序时,该系统可利用存储带宽。因此,在单个SSD 上并行化多个分区可能不是有益的,因为它可能无法提高性能:因为FPGA 可能无法同时访问不同的分区,所以FPGA可在分区之间切换。因此,系统 可在SSD层级并行化计算。该系统可部署计算存储装置,每个计算存储装置 可直接连接到FPGA。每个计算存储装置可独立于计算存储装置对SSD层级 分区进行排序,这可随着存储装置的数量增长而显著加速整体系统性能。
由于图1的加速器135可包括排序内核、混洗内核和词典解码器内核, 因此该系统可处理将资源分配给内核之间的权衡(trade-off)。词典解码器内 核可能够使存储设备至FPGA带宽饱和,因此,实例化单个词典解码器内核 可足以提供最大性能。单混洗内核可能无法完全利用SSD到FPGA带宽,这 是由于以下事实:尽管在系统中新表存储格式能够以顺序模式读取一行,但 是读取下一行仍然可涉及具有高延迟的随机存储器访问。因此,目标可以是 将所有混洗内核的总输入消耗速率设置为SSD到FPGA的最大提供带宽,以 充分利用带宽。由于混洗操作可以是I/O密集的并且表的大小可显著大于键 列的大小的事实,混洗操作的性能可决定整体性能。因此,混洗内核的多个 实例可被实例化以完全利用存储设备到FPGA带宽和词典解码器内核的单个 实例,并且使用排序内核的其余资源。存储设备到FPGA带宽可在混洗内核 和词典解码器内核中被充分利用,同时仍然具有足够的资源来进行高吞吐量 排序。排序内核可使用FPGA块RAM(BRAM)的大部分来存储阵列,并且 可提供并行性。附加地,词典解码器内核可涉及片上存储器来本地地存储词 典表以提供高吞吐量。因此,该系统的词典解码器可主要使用FPGA超RAM (URAM)来平衡系统的整体资源利用。
双调排序可以是可并行运行的排序网络。在排序网络中,比较(comparison) 的数量和比较的次序可以是预定的并且与数据无关。给定比较的数量和比较 的次序,可通过利用比较器的固定网络在FPGA上高效地并行化双调排序。 双调排序可首先将任意数字序列转换为多个双调序列。通过合并两个双调序 列,双调排序可创建更长的双调序列,并且可继续直到整个输入序列被排序。 如果存在i(1≤i≤n),则长度为n的序列可以是双调序列,使得第i元素之前的 所有元素被升序排序,并且之后的所有元素被降序排序(即, x1≤x2≤...≤xi≥xi+1≥xi+2≥...≥xn)。
例如,为了对包括长度为2的n/2=4个双调序列的长度为n=8的示例输 入序列进行排序,初始未排序的序列可通过一系列比较器,比较器将两个元 素交换为增大的次序或减小的次序。第一步骤的输出可以是n/4个双调序列, 每个双调序列的长度为4。对n/4个序列应用双调合并创建n/2个双调序列。 在应用log2n次双调合并之后的输出序列可产生排序后的序列。
通常,在第i步骤(从i=1开始)的双调合并中,长度为2i的n/2i个双调 序列可被合并以创建长度为2(i+1)的n/2(i+1)个双调序列。第i双调合并步骤自身 可包括逐元素比较的i个顺序子步骤。在第i步骤的第一子步骤中,元素k与 元素k+2i-1可被比较,同时前2i个元素可按升序被排序,并且接下来的2i个元 素可按降序被排序(排序方向可在每2i个元素之后改变)。在上述示例中,在 最后/第三步骤的第一子步骤中,可将第一元素与第1+23-1=5元素(值为7) 进行比较。通常,在第i主步骤的第j子步骤(1≤j≤i)中,可将元素k与元 素k+2i-j进行比较。因此,在第三步骤的第二子步骤中,可将第一元素与第 1+23-2=2元素进行比较。
为了对数据库表进行排序,该系统可从对键列进行排序开始。如前所述, 双调排序中的操作的序列可以是预定义的、与数据无关的和可并行化的。因 此,该系统可利用FPGA特性来加速双调排序。输入序列可被存储在FPGA DRAM中,FPGA DRAM也被称为“片外存储器”。然后,该系统可通过端 口(诸如,高级可扩展接口(AXI)端口)将输入序列流式传输到FPGA中, 该端口具有512位(16个32位整数)的接口数据宽度。AXI端口可将数据 写入输入缓冲器,输入缓冲器可具有P=2m个整数的容量。为了具有规则的排 序网络,在不缺乏通用性的情况下,双调排序内核的大小P可以是2的幂的 数(如果总数据元素不是P的倍数,则填充可被使用)。如果P可大于16, 则可需要多个循环来填充输入缓冲器。每当输入缓冲器填充时,输入缓冲器 将缓冲的输入传递到P-排序器模块。
P-排序器可被并行地实现,并且可包括log2P个步骤。P-排序器模块可被 流水线化以满足FPGA的时序要求,并且可以能够提供每个周期一个排序后 的序列(大小为P)的吞吐量。P-排序器中的第一步骤可将偶数索引的元素 (2k索引元素)与后继元素进行比较。因此,第一步骤可涉及P/2个比较和交 换(Compare-and-Swap,CS)模块。在第二步骤期间,P-排序器可首先将具 有索引4k的元素与具有索引4k+2的元素进行比较和交换,并且将具有索引4k+1的元素与具有索引4k+3的元素进行比较和交换。之后,P-排序器可将2k个元素与更新后的阵列的2k+1个元素进行比较和交换。因此,P-排序器中 的第二步可涉及CS模块的P/2+P/2=P个实例。类似地,P-排序器中的第i步骤(其中1≤i≤log2P)应涉及ixP/2个CS模块。P-排序器应涉及的CS模块的总数可被估计为
Figure BDA0003438419500000251
该系统可通过利用FPGA的P-排序器模块和快速片上存储器来安排(orchestrate)对整个数据的排序操作。首先,当对每个P个元素进行排序时, P-排序器可在升序与降序之间切换。P-排序器模块的排序后的输出可被写入 序列存储器,序列存储器可包括由FPGA BRAM组成的两个子存储器块M1和M2。最初,可分别在M1和M2中写入升序和降序排序。M1和M2的每行可 包括P个元素,这些元素一起形成序列存储器中长度为2P的双调行(因为 第一半是上升的,并且第二半是下降的)。注意,按行表示项目在序列中的相 邻放置,而不一定是块RAM的可仅适合一个或两个整数的物理行。由于2P 序列可仅是单个双调阵列,因此使用合并过程,2P双调阵列可使用P×log2 2P 个比较和交换(CS)单元被排序。
对P-排序器的结果进行合并自身是类似双调的过程,但是是对排序后的 阵列而不是标量元素。也就是说,步骤1可类似于双调排序中的步骤1,合 并相邻阵列。步骤2可类似于简单双调排序的第二步骤,该第二步骤使用并 行比较和交换(PCS)单元将每个项i与项i+2进行比较和交换,随后将修改 后的阵列中的项i与项i+1进行比较。因此,整个排序可被认为是阵列内排序, 随后是阵列间双调排序。当该系统完成对整个序列存储器的排序时,该系统 可将序列写回到片外DRAM(或者写回到存储装置),并且使用相同的流程 来重复地对输入序列的另一个数据块进行获取和排序,随后合并这些数据块 以构建更大的排序后的数据块。
为了为并行化提供期望的带宽,M1存储器块和M2存储器块中的每个可 并行地使用P列BRAM,因此P个整数可一次被获取(FPGA BRAM的数据 宽度可以是32位或一个整数)。此外,在每个存储器块中,L行BRAM可垂 直放置,因此L个排序器的结果可被同时比较。BRAM的数量及其在32位 整数方面的容量可被公式化为nBRAM=2×P×L和CBRAM=1024×2×P×L。
注意,BRAM可具有1024位(深度)×32位(宽度)的配置。在每次 迭代中,CBRAM=2048PL个整数可被排序并写回到片外DRAM。
为了对数据库表进行排序,可基于排序后的键列的索引(在此被称为排 序后的索引)来对表行(table row)的其余部分进行重新排序。因此,排序 后的索引可被生成,之后可由混洗内核使用该排序后的索引来对整个表进行 排序。为此,当从DRAM读取输入序列时,索引可被分配给每个元素,并且 索引可被存储在具有与序列存储器相同容量的索引存储器中。当从序列存储 器读取并将输入馈送到P-排序器时,该系统可读取相应的索引并连结 (concatenate)或关联到值。P-排序器的比较和交换单元可仅基于连结的元素 的值部分来执行比较,但是整个连结的元素可被交换。因此,该系统也可将 排序后的索引存储在DRAM中。
P-排序器模块可对元素的数据块进行排序,并且可存储在下面的序列存 储器中。M1存储器组可存储升序排序,而M2存储器组可存储降序排序后的 元素。在M1(和M2)存储器的每行处存在P个BRAM,因此排序后的P个 元素可被逐元素地划分以用于后续并行操作。在PCS子步骤中,来自同一存 储器(M1或M2)的两个P-元素阵列可被获取,而在最后的子步骤(即,合 并)中,来自M1的P-元素阵列和来自M2的另一个P-元素阵列可被获取并被 排序/合并。连接到所有L个BRAM组的L对1复用器可被用于管理这些操 作,并且多达两个阵列可从M1和M2中的每个被选择。PCS以及合并模块的 输出可被写回到序列存储器中以完成接下来的步骤。
在对键列进行排序之后,该系统可使用混洗内核来对表行进行重新排序。 为了实现该操作,该系统可读取排序后的键列的第一元素的值以及其在原始 表中的索引(可连结到元素的值)。然后,该系统可读取索引指向的原始行的 所有条目,并且可将其写入作为新排序后的表的第一行。类似地,为了生成 排序后的表的第i行,该系统可读取排序后的索引序列的第i元素。索引表示 原始表中行的索引。因此,原始表与排序后的表之间的映射可被公式化为 SortedTable[i]=OriginalTable(SortedIndices[i])。
混洗内核不一定执行任何计算,因此,内核的性能可能受到存储器访问 时间的限制。因此,将表存储在存储设备中可直接影响内核的性能。通常, 表可按列或按行的格式被存储。在逐列格式中,每列的元素可被存储在连续 的存储器元件中。在逐行格式中,行的所有元素可被布置在连续的存储器元 件中。连续存储器元件可比分散(随机)存取显著更快地以突发模式从DRAM 被传送到FPGA。
以逐列格式存储表可导致排序内核中的顺序/突发存储器访问模式(因为 它涉及对键列的连续元素的访问,其可被表示为Ck)。然而,混洗内核可具有 随机访问模式(因为混洗内核使用对同一行的连续元素的访问,连续元素可 在逐列布置中被远离地布置)。类似地,以逐行格式存储表可使得顺序访问模 式能够读取单个行(适合于混洗内核),但是读取下一行(作为排序内核的一 部分)可涉及随机存储器访问。为了优化两个内核的访问模式,该系统可使 用混合技术来将表存储在存储设备中。键列(Ck)可逐列被存储,而表的其余部分可以以基于行的格式被存储。因此,两个内核可受益于顺序存储器访 问。
在数据库管理系统中,数据可被压缩存储在存储系统中,以减少用于存 储数据库的存储装置的数量。词典编码可用作独立的压缩技术或作为与其它 压缩技术组合的步骤。词典编码可以是将每个“值”映射到“键”的无损压 缩技术。当数字的范围可显著大于唯一值(U)的数量时,使用词典编码可 以是有益的。每个唯一值可由k位键表示,其中k=log2U。当编码后的数据的 大小显著小于元素的总大小时,词典编码可以是有益的。词典编码对于具有 较大大小的数据类型可以更有效。词典解码加速器可仅支持具有固定长度数 据类型的解码值。然而,词典编码在编码可变长度数据类型(诸如,字符串) 时可以更有效。该系统可包括用于词典解码的加速器,词典解码支持所有数 据类型(固定长度数据类型和可变长度数据类型)。
如果数据以编码格式被存储在存储装置中,即使一些数据库操作(例如, 过滤或混洗)可对词典编码后的数据运行以对表执行排序操作,数据也应被 首先解码。可使用图1的加速器135实现的系统的词典解码器可首先从存储 装置读取与编码后的数据一起存储的“词典页”。该系统可将词典页存储在 FPGA本地BRAM中,以提供快速访问来对输入进行解码。由于在可变长度 数据类型(诸如,字符串)中值的长度可以是不同的,因此该系统可不在片 上词典表的每行中存储单个值来充分利用有限的FPGA BRAM的容量。该系 统的词典表可包括R个行,其中每行可以是Lmax个字节。Lmax可以是词典中 最长值的字节数。该系统的词典解码器可连结词典值,并且可将它们连续地 写入词典表中。因此,词典值的字节可拆分到词典表的两个连续行。由于每 行的长度可等于或大于每个词典值的长度,因此每个值可被存储在单个行中, 或者拆分到两个连续行。为了找到与键对应的值的位置和长度,该系统的词 典解码器构造索引存储器,索引存储器可存储词典表中的每个词典值的字节 地址和长度。该系统的词典解码器可使用输入键来查找相应的值的索引和长 度。然后,该系统可使用索引和长度来从字节可寻址的词典表读取值。由于 在每个时钟周期中可存在对索引存储器和词典表二者的多次访问,因此该系 统可使用片上存储器来存储这两个表。
在构建索引存储器和词典表之后,可使用图1的加速器135实现的系统 的词典解码器可在数据页中流式传输、对数据页进行解码、并且将解码后的 数据写入FPGAD RAM。由于解码后的数据可在排序内核中被使用,因此该 系统可将解码后的数据保持在FPGA DRAM中以避免不必要的存储访问。输 入元素的宽度(k)可取决于词典中唯一元素的数量(U),并且解码后的元素 的宽度可取决于原始数据类型。该系统可提供支持可在运行时期间配置的各 种输入和输出位宽度的通用词典解码器。在加载词典之后,该系统的词典解 码器可使用AXI接口在数据页中进行流式传输。为了设计简单性和AXI兼容 性,该系统的词典解码器可将输入位宽度k限制为大于8的“2的幂的数”。 AXI接口可读取编码后的数据页元素,并且可将编码后的数据页元素存储在 输入缓冲器中。输入键可与具有不同位宽度的值相关联。因此,为了支持对 不同数据类型的解码,词典表可支持具有不同位宽度的读取和写入元素。
公开的实施例可包括图1的加速器135,加速器135可在输入键中流式 传输并且可将输入键存储在输入缓冲器中。该系统可从索引存储器查找词典 表中的相应值的位置和长度。索引存储器可输出词典表中的值的第一字节的 字节地址以及值的长度。字节地址可用于找到包含该值的词典存储器的行地 址。词典值可被完全存储在词典表行中,或者可被拆分到两个连续的行。因 此,对于每个键,地址生成器可输出包含该值的第一字节和下一行的行地址。 该系统可读取词典表的两行,并且可将它们写入输出过滤模块。输出过滤模块可使用字节地址和值的长度来找到并过滤与输入键对应的值。输出过滤模 块可输出词典值,并且可将其写入输出缓冲器模块中的并行缓冲器中。输出 缓冲器模块可聚合多个值,并且可将它们传送到FPGA片外DRAM。
作为示例,词典页可包括最大8字节宽度的值。因此,词典表的每行可 包括8个字节。可在运行时期间构造索引存储器的内容。第一值的第一字节 可在地址0处开始,并且该值可以是例如3字节长。下一值可在词典表中的 地址3处开始,并且可以是4字节长。对于每个值,指针可以是所有先前长 度的累加,并且长度表示以字节为单位的值的大小。地址生成器模块可使用 字节地址来找到包含该值的行地址。为了获得行地址,地址生成器可将字节 地址向右移位log2MS,其中MS可以是最大串长度。然后,其下一行的移位 值将是包含该值的行地址。字节地址的[MS-1:0]位可在输出过滤模块中被使 用,以从词典表读取的两行提取值。例如,对于某个值,字节地址参数和长 度参数可分别是14和6。该值的第一字节可在地址14处开始。地址生成器 可将字节地址向右移位三位(log2 8),这返回14>>3=1的行地址,换句话说, 期望值在行1和行2中。该系统可从词典表读取行1和行2,并且可将它们写入输出过滤模块。字节地址的位[2:0]可用作从读取行的第一字节的偏移。 该值可在字节偏移处开始,并且在长度字节之后结束。在该示例中,偏移量 可等于6并且长度可等于6,这表示该值在字节6至11之间。输出过滤模块 可从读取行提取值,并且可将其写入并行输出缓冲器中。该系统可使用多个 并行缓冲器来提高输出带宽利用率,因此通过在每个周期中写入多个字节来 提高性能。然而,因为值的长度变化,所以输出缓冲器模块可连结连续值并 且可将它们写入P个并行缓冲器中,并且每当所有P个缓冲器中具有元素时, 它可将P个字节传送到FPGAD RAM中。
数据库管理系统可经常使用词典编码以存储数据。该系统不仅可对整数 和长数据类型的列进行排序,而且如果列以词典编码格式被存储,则还可支 持对具有任何数据类型的列进行排序。词典编码可表示具有整数键的任何数 据类型的值。该系统可使用通过利用排序内核和词典解码内核来对词典编码 列进行排序的方法。表可被存储在存储系统中,并且列可被编码,将被排序 的表基于该列是词典。注意,其余列可以以词典编码或以普通格式被存储。 首先,该系统可读取主机服务器上的列的词典页:词典表的大小可显著小于原始列的大小。当唯一元素的数量(词典的大小)可显著小于列中的元素的 数量时,数据库管理系统可使用词典编码。因此,考虑到阵列的大小和排序 操作的非线性复杂性,对词典页进行排序可比对列进行排序花费显著更少的 时间。因此,由于对通用处理器上的小阵列进行排序的效率,该系统可利用 主机服务器来对词典表进行排序。主机机器可基于值对词典表进行排序,并 将新键(在此被称为映射键)分配给排序后的值。主机服务器还可生成键映 射表,键映射表可将原始词典编码的键映射到排序后的词典表的键。该系统 可在通用排序流程中使用排序后的词典表和键映射表。该系统可使用键映射 表将输入数据映射到映射键阵列。在该映射中,键的次序可与排序后的值的 次序相同。例如,如果列以升序被排序,则较大键对应于在排序后的次序中 较大的值。
主机程序可从存储系统读取词典页、对词典表进行排序、生成键映射表、 并且将排序后的词典表和键映射表二者传送到FPGA DRAM。FPGA可直接 从存储装置读取数据页,以消除通过主机服务器传送数据页的开销。该系统 的通用排序方法可以是利用排序内核和词典解码器内核对具有任何数据类型 的列进行排序的数据流,并且可使用混洗内核基于排序后的列对整个表进行 排序。首先,该系统可加载键映射表,随后可在数据页中流式传输。然后, 该系统可使用键映射表将输入键映射到映射键。该系统可启动该系统的排序内核以对映射键进行排序。因为映射键的次序可与排序后的阵列中的值的次 序相同,所以对映射键进行排序可等同于对原始数据进行排序。该系统排序 内核可对映射键阵列进行排序,并且可将其写入排序后的映射键阵列中。该 系统可使用词典解码器内核将排序后的映射键阵列解码为原始数据类型的排 序后的阵列。
作为示例,考虑一列字符串。字符串列可被词典编码,并且作为{0,2,4,1,3} 被存储在存储设备中,词典页可与数据页一起被存储。注意,在该示例中, 为了简单起见,小列被使用,然而,在现实世界应用中,数据页大小可显著 大于词典页。该系统可卸载对词典页的排序,并且可向主机服务器生成键映 射表。主机可传送两个表,并且可将它们发送到FPGA DRAM。在该示例中, 该系统可按升序对数据页进行排序。例如,原始词典编码后的数据可将字符 串“USA”映射到键0,但是在对词典表进行排序之后,字符串“USA”可 以是所有值的最后一个元素。键映射表可将键0映射到映射键4,这表示与 小于4的任何键对应的值可在以原始数据类型的排序后的数据中较早出现。 该系统可读取数据,并且可将数据映射到映射键阵列中。该系统随后可对映 射键阵列进行排序,并且可将数据存储到排序后的映射键阵列中。该系统可 使用排序后的词典表将排序后的映射键阵列解码为原始数据类型。例如,如 上所述,原始词典页中的键0可对应于词典值“USA”。由于当数据被排序时 “USA”可能最后出现,因此该系统可将键0映射到映射键4。然后,在排 序后的映射键阵列中,元素4成为最后一个元素。该系统可对排序后的映射 键阵列进行解码,并且最后一个元素可被解码为字符串“USA”。
公开的实施例提供了优于现有技术的技术优点。通过使用加速器,词典 解码可更接近数据来执行,这可减少主机处理器上的负载,并且减少将在存 储装置与主机处理器之间发送的数据量。此外,通过使加速器可配置为与任 何词典一起使用,加速器可简单地通过加载新词典页并调整编码值和解码值 的宽度而被重新使用。
下面的讨论意在提供对其中可实现公开的特定方面的一个或多个合适的 机器的简要、总体描述。一个或多个机器可至少部分地通过来自常规输入装 置(诸如,键盘、鼠标等)的输入以及通过从另外的机器接收的指令、与虚 拟现实(VR)环境的交互、生物特征反馈或其它输入信号而被控制。如在此 所使用的,术语“机器”意在广泛地包含单个机器、虚拟机或者通信地结合 的一起操作的机器、虚拟机或装置的系统。示例性机器包括计算装置(诸如, 个人计算机、工作站、服务器、便携式计算机、手持装置、电话、平板计算 机等)以及运输装置(诸如,私人或公共交通工具(例如,汽车、火车、出 租车等))。
一个或多个机器可包括嵌入式控制器(诸如,可编程或不可编程逻辑器 件或阵列、专用集成电路(ASIC)、嵌入式计算机、智能卡等)。一个或多个 机器可利用至一个或多个远程机器(诸如,通过网络接口、调制解调器或其 它通信结合)的一个或多个连接。机器可通过物理网络和/或逻辑网络(诸如, 内联网、互联网、局域网、广域网等)的方式来互连。本领域技术人员将理 解,网络通信可利用各种有线和/或无线短距离或长距离载波和协议,包括: 射频(RF)、卫星、微波、电气和电子工程师协会(IEEE)802.11、
Figure BDA0003438419500000311
光学、红外、电缆、激光等。
本公开的实施例可通过参照或结合相关联的数据来描述,该相关联的数 据包括函数、程序、数据结构、应用程序等,该相关联的数据在被机器访问 时使得机器执行任务或者定义抽象数据类型或低级硬件上下文。相关联的数 据可被存储在例如易失性存储器和/或非易失性存储器(例如,RAM、ROM 等)中,或者被存储在其它存储装置和它们相关联的存储介质中,其它存储 装置和它们相关联的存储介质包括硬盘驱动器、软盘、光学存储设备、磁带、 闪存、记忆棒、数字视频盘、生物存储设备等。相关联的数据可以以包、串 行数据、并行数据、传播信号等的形式在包括物理网络和/或逻辑网络的传输 环境上被传输,并且可以以压缩格式或加密格式被使用。相关联的数据可在 分布式环境中被使用,并且被本地地和/或远程地存储以用于机器访问。
公开的实施例可包括有形的非暂时性机器可读介质,有形的非暂时性机 器可读介质包括可由一个或多个处理器执行的指令,该指令包括用于执行如 在此所述的公开的元件的指令。
以上描述的方法的各种操作可由能够执行操作的任何合适的装置(诸如, 各种硬件和/或一个或多个软件组件、电路和/或一个或多个模块)来执行。软 件可包括用于实现逻辑功能的可执行指令的有序列表,并且可以以任何“处 理器可读介质”来实现,以被指令执行系统、设备或装置(诸如,单核或多 核处理器或包含处理器的系统)使用或者结合指令执行系统、设备或装置(诸 如,单核或多核处理器或包含处理器的系统)来使用。
结合在此公开的实施例描述的方法或算法和功能的块或步骤可直接以硬 件、以由处理器执行的软件模块、或以二者的组合来实现。如果以软件来实 现,则功能可作为一个或多个指令或代码被存储在有形的非暂时性计算机可 读介质上或通过有形的非暂时性计算机可读介质发送。软件模块可驻留在随 机存取存储器(RAM)、闪存、只读存储器(ROM)、电可编程ROM(EPROM)、 电可擦除可编程ROM(EEPROM)、寄存器、硬盘、可移动盘、CD ROM或本领域已知的任何其它形式的存储介质中。
已经参照示出的实施例描述和示出公开的原理,将认识到,示出的实施 例可在不脱离这样的原理的情况下在布置和细节上被修改,并且可以以任何 期望的方式进行组合。此外,尽管前述讨论已经集中在特定实施例上,但是 其它配置被预期。具体地,尽管在此使用了诸如“根据公开的实施例”等的 表述,但是这些短语意味着总体上涉及实施例可能性,而不意在将公开限制 为特定实施例配置。如在此所使用的,这些术语可涉及可组合到其它实施例 中的相同的或不同的实施例。
前述的说明性实施例不应被解释为限制其公开。尽管已经描述了一些实 施例,但本领域技术人员将容易理解,在实质上不脱离本公开的新颖教导和 优点的情况下,许多修改对那些实施例是可行的。因此,所有这样的修改意 在被包括在如在权利要求中限定的本公开的范围内。
因此,鉴于在此描述的对实施例的广泛的各种置换,本具体实施方式和 所附材料意在仅是说明性的,并且不应被视为限制公开的范围。因此,公开 所要求权利的是可落入所附权利要求及其等同物的范围和精神内的所有这样 的修改。

Claims (20)

1.一种加速器,包括:
存储器,被配置为存储词典表;
地址生成器,被配置为:至少部分地基于编码值来生成存储器中的词典表中的地址,编码值具有编码宽度;以及
输出过滤器,被配置为:至少部分地基于所述地址来从词典表过滤出解码值,解码值具有解码宽度,
其中,加速器被配置为支持至少两种不同的编码宽度。
2.根据权利要求1所述的加速器,还包括:词典解码器,被配置为:从存储装置读取词典页,并且将词典页存储在存储器中的词典表中。
3.根据权利要求1所述的加速器,还包括:词典解码器,被配置为:从存储装置读取编码后的数据页,对编码后的数据页进行解码以产生解码后的数据页,并且将解码后的数据页写入存储装置的第二存储器和主机机器的第三存储器中的至少一个。
4.根据权利要求1所述的加速器,其中,
地址生成器包括移位模块,移位模块被配置为至少部分地基于位数来对编码值进行移位以产生行号;
加速器还包括表读取模块,表读取模块被配置为至少部分地基于行号从词典表读取条目;并且
输出过滤器还被配置为对条目进行过滤以产生解码值。
5.根据权利要求1所述的加速器,其中,存储器还被配置为存储词典表和至少一个第二词典表。
6.根据权利要求3所述的加速器,其中,解码后的数据页中的解码后的数据是固定长度数据类型的。
7.根据权利要求1至权利要求6中的任一项所述的加速器,其中,词典表是字节可寻址的。
8.一种词典解码的近存储加速的方法,包括:
将词典页从存储装置读取到加速器中的存储器中,词典页将具有编码宽度的编码值映射到具有解码宽度的解码值;
从存储装置读取编码后的数据页;
从编码后的数据页访问编码值;
使用加速器将编码值映射到解码值;以及
用解码值替换编码后的数据页中的编码值,以产生解码后的数据页,
其中,加速器被配置为支持至少两种不同的编码宽度。
9.根据权利要求8所述的方法,还包括:将解码后的数据页存储在存储装置中的第二存储器中。
10.根据权利要求8所述的方法,还包括:将解码后的数据页发送到主机机器的第三存储器。
11.根据权利要求8至权利要求10中的任一项所述的方法,其中,从存储装置读取词典页的步骤包括:
将词典页存储在加速器中的存储器中的词典表中;
确定编码值的编码宽度;
确定解码值的解码宽度;以及
将加速器配置为至少部分地基于编码值、编码宽度和解码宽度来定位解码值。
12.根据权利要求11所述的方法,其中,将加速器配置为至少部分地基于编码值、编码宽度和解码宽度来定位解码值的步骤包括:
确定表示存储在词典表的条目中的唯一值的数量的位数;
至少部分地基于所述位数来对编码值进行移位,以产生行号;
从词典表读取与行号相关联的条目;以及
使用所述位数来从所述条目过滤出解码值。
13.根据权利要求12所述的方法,其中,从词典表读取与行号相关联的条目的步骤包括:从词典表读取与相邻行号相关联的第二条目。
14.根据权利要求13所述的方法,其中,使用所述位数来从所述条目过滤出解码值的步骤包括:使用所述位数来从所述条目和第二条目过滤出解码值。
15.一种物品,所述物品包括非暂时性存储介质,所述非暂时性存储介质具有存储在其上的指令,所述指令在由机器执行时使得:
将词典页从存储装置读取到加速器中的存储器中,词典页将具有编码宽度的编码值映射到具有解码宽度的解码值;
从存储装置读取编码后的数据页;
从编码后的数据页访问编码值;
使用加速器将编码值映射到解码值;以及
用解码值替换编码后的数据页中的编码值,以产生解码后的数据页,
其中,加速器被配置为支持至少两种不同的编码宽度。
16.根据权利要求15所述的物品,所述非暂时性存储介质具有存储在其上的进一步指令,所述进一步指令在由机器执行时使得:将解码后的数据页存储在存储装置中的第二存储器中。
17.根据权利要求15所述的物品,所述非暂时性存储介质具有存储在其上的进一步指令,所述进一步指令在由机器执行时使得:将解码后的数据页发送到主机机器的第三存储器。
18.根据权利要求15至权利要求17中的任一项所述的物品,其中,从存储装置读取词典页的处理包括:
将词典页存储在加速器中的存储器中的词典表中;
确定编码值的编码宽度;
确定解码值的解码宽度;以及
将加速器配置为至少部分地基于编码值、编码宽度和解码宽度来定位解码值。
19.根据权利要求18所述的物品,其中,将加速器配置为至少部分地基于编码值、编码宽度和解码宽度来定位解码值的处理包括:
确定表示存储在词典表的条目中的唯一值的数量的位数;
至少部分地基于所述位数来对编码值进行移位,以产生行号;
从词典表读取与行号相关联的条目;以及
使用所述位数来从所述条目过滤出解码值。
20.根据权利要求19所述的物品,其中,从词典表读取与行号相关联的条目的处理包括:从词典表读取与相邻行号相关联的第二条目。
CN202111622072.6A 2021-01-15 2021-12-28 加速器和词典解码的近存储加速的方法 Pending CN114764407A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163138165P 2021-01-15 2021-01-15
US63/138,165 2021-01-15
US17/357,953 US11791838B2 (en) 2021-01-15 2021-06-24 Near-storage acceleration of dictionary decoding
US17/357,953 2021-06-24

Publications (1)

Publication Number Publication Date
CN114764407A true CN114764407A (zh) 2022-07-19

Family

ID=78516520

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111622072.6A Pending CN114764407A (zh) 2021-01-15 2021-12-28 加速器和词典解码的近存储加速的方法

Country Status (4)

Country Link
US (1) US11791838B2 (zh)
EP (1) EP4030628A1 (zh)
CN (1) CN114764407A (zh)
TW (1) TW202230138A (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112737596A (zh) * 2021-01-07 2021-04-30 苏州浪潮智能科技有限公司 一种基于排序网络的动态霍夫曼编码方法、装置及设备
US20230112448A1 (en) * 2021-10-12 2023-04-13 Seagate Technology Llc Computational storage drive using fpga implemented interface
US11907588B2 (en) * 2021-11-15 2024-02-20 International Business Machines Corporation Accelerate memory decompression of a large physically scattered buffer on a multi-socket symmetric multiprocessing architecture
US11880568B2 (en) 2021-11-17 2024-01-23 Seagate Technology Llc On demand configuration of FPGA interfaces
US20240103727A1 (en) * 2022-09-22 2024-03-28 SK Hynix Inc. Out-of-order bit-flipping decoders for non-volatile memory devices

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5408234A (en) 1993-04-30 1995-04-18 Apple Computer, Inc. Multi-codebook coding process
US5635932A (en) 1994-10-17 1997-06-03 Fujitsu Limited Lempel-ziv compression with expulsion of dictionary buffer matches
US20030191876A1 (en) 2000-02-03 2003-10-09 Fallon James J. Data storewidth accelerator
US7071854B1 (en) 2002-05-13 2006-07-04 Unisys Corporation Hardware-implemented LZW data decompression
US7079054B2 (en) 2004-06-04 2006-07-18 Broadcom Corporation V.42bis standalone hardware accelerator and architecture of construction
US20060106870A1 (en) 2004-11-16 2006-05-18 International Business Machines Corporation Data compression using a nested hierarchy of fixed phrase length dictionaries
WO2009005758A2 (en) 2007-06-29 2009-01-08 Rmi Corporation System and method for compression processing within a compression engine
US20100223237A1 (en) 2007-11-05 2010-09-02 University Of Florida Research Foundation, Inc. Lossless data compression and real-time decompression
US8456331B2 (en) 2011-04-15 2013-06-04 Cavium, Inc. System and method of compression and decompression
US8838577B2 (en) * 2012-07-24 2014-09-16 International Business Machines Corporation Accelerated row decompression
US8847798B2 (en) 2012-12-17 2014-09-30 Maxeler Technologies, Ltd. Systems and methods for data compression and parallel, pipelined decompression
WO2016194401A1 (ja) 2015-06-05 2016-12-08 株式会社日立製作所 計算機、データベース処理方法、及び集積回路
US10177782B2 (en) 2015-12-26 2019-01-08 Intel Corporation Hardware apparatuses and methods for data decompression
US10367604B2 (en) 2016-11-18 2019-07-30 International Business Machines Corporation Encoding variable length symbols to enable parallel decoding
US10361715B1 (en) 2018-06-04 2019-07-23 Amazon Technologies, Inc. Decompression circuit
US20200159859A1 (en) 2018-11-19 2020-05-21 Fungible, Inc. History-based compression pipeline for data compression accelerator of a data processing unit
US10727865B2 (en) 2018-11-19 2020-07-28 Fungible, Inc. Data striping for matching techniques in data compression accelerator of a data processing unit
US10812630B2 (en) 2018-11-19 2020-10-20 Fungible, Inc. Merging techniques in data compression accelerator of a data processing unit
US20200192880A1 (en) 2018-12-14 2020-06-18 Samsung Electronics Co., Ltd. Optimal dynamic shard creation in storage for graph workloads
US10862513B2 (en) 2019-01-16 2020-12-08 Fungible, Inc. Data processing unit having hardware-based parallel variable-length codeword decoding
US10491240B1 (en) 2019-01-17 2019-11-26 Cyborg Inc. Systems and methods for variable length codeword based, hybrid data encoding and decoding using dynamic memory allocation
US10693493B1 (en) 2019-02-14 2020-06-23 International Business Machines Corporation Reducing latch count to save hardware area for dynamic Huffman table generation
US11075647B2 (en) 2019-02-27 2021-07-27 Movidius Limited Methods and apparatus to compress data

Also Published As

Publication number Publication date
EP4030628A1 (en) 2022-07-20
US11791838B2 (en) 2023-10-17
US20220231698A1 (en) 2022-07-21
KR20220103621A (ko) 2022-07-22
TW202230138A (zh) 2022-08-01

Similar Documents

Publication Publication Date Title
US11791838B2 (en) Near-storage acceleration of dictionary decoding
US10963393B1 (en) Storage system and a method for application aware processing
CA2132762C (en) Method and apparatus for data compression
Dandalis et al. Configuration compression for FPGA-based embedded systems
EP3661061A1 (en) Data compression and storage
CN103023509A (zh) 一种硬件lz77压缩实现系统及其实现方法
WO2008110633A1 (en) A circuit for compressing data and a processor employing same
Qiao et al. High-throughput lossless compression on tightly coupled CPU-FPGA platforms
CN101996139A (zh) 数据匹配方法和数据匹配装置
US9137336B1 (en) Data compression techniques
US20190123763A1 (en) Data compression engine for dictionary based lossless data compression
US10078646B2 (en) Hardware efficient fingerprinting
CN108141225B (zh) 使用simd引擎的通用数据压缩
Abali et al. Data compression accelerator on IBM POWER9 and z15 processors: Industrial product
Liu et al. GPU-accelerated BWT construction for large collection of short reads
Choi et al. Design of FPGA-based LZ77 compressor with runtime configurable compression ratio and throughput
CN110554886B (zh) 数据拆分结构、方法及其片上实现
KR102672617B1 (ko) 가속기 및 이를 이용한 데이터 디코딩 방법
US20050071151A1 (en) Compression-decompression mechanism
Abali et al. Data compression accelerator on ibm power9 and z15 processors
RU2450441C1 (ru) Способ и устройство сжатия данных
Edwards et al. Empirical speedup study of truly parallel data compression
US10108659B2 (en) Hardware efficient rabin fingerprints
Sun Scalable Scientific Computation Acceleration Using Hardware-Accelerated Compression
US7733122B2 (en) Semiconductor device

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination