加速器和词典解码的近存储加速的方法与流程

文档序号:30810876发布日期:2022-07-19 23:47阅读:74来源:国知局
加速器和词典解码的近存储加速的方法1.本技术要求于2021年1月15日提交的第63/138,165号美国临时专利申请和于2021年6月24日提交的第17/357,953号美国非临时专利申请的权益,所述美国专利申请出于所有目的通过引用包含于此。
技术领域
:2.公开总体上涉及存储装置,更具体地,涉及在存储装置附近执行词典解码。
背景技术
::3.数据库管理系统(和其它存储系统)可使用数据编码来将存储的数据压缩到存储装置中。为了节省存储空间,数据可以以压缩的方式被存储。对数据进行压缩通常涉及:以在某些方面与原始数据不同的格式存储数据,同时仍然表示原始数据(用于无损压缩)或接近原始数据的某物(用于有损压缩)。虽然一些操作可对编码的数据运行,但是运行不同的数据库操作可需要首先将被解码的数据。在主机处理器中执行该解码可能降低主机处理器执行其它命令的能力。4.当数据被词典编码时,仍然需要提高主机处理器性能。技术实现要素:5.公开的实施例包括与存储装置相关联的加速器。加速器可执行对以词典编码格式存储的数据的解码。在解码之后,解码后的数据可被写回到存储装置或动态随机存取存储器(dram)。6.公开的实施例涉及一种加速器,所述加速器包括:存储器,被配置为存储词典表;地址生成器,被配置为:至少部分地基于编码值来生成存储器中的词典表中的地址,编码值具有编码宽度;以及输出过滤器,被配置为:至少部分地基于所述地址来从词典表过滤出解码值,解码值具有解码宽度,其中,加速器被配置为支持至少两种不同的编码宽度。7.公开的实施例涉及一种方法,所述方法包括:将词典页从存储装置读取到加速器中的存储器中,词典页将具有编码宽度的编码值映射到具有解码宽度的解码值;从存储装置读取编码后的数据页;从编码后的数据页访问编码值;使用加速器将编码值映射到解码值;以及用解码值替换编码后的数据页中的编码值,以产生解码后的数据页,其中,加速器被配置为支持至少两种不同的编码宽度。8.公开的实施例涉及一种物品,所述物品包括非暂时性存储介质,所述非暂时性存储介质具有存储在其上的指令,所述指令在由机器执行时使得:将词典页从存储装置读取到加速器中的存储器中,词典页将具有编码宽度的编码值映射到具有解码宽度的解码值;从存储装置读取编码后的数据页;从编码后的数据页访问编码值;使用加速器将编码值映射到解码值;以及用解码值替换编码后的数据页中的编码值,以产生解码后的数据页,其中,加速器被配置为支持至少两种不同的编码宽度。附图说明9.以下描述的附图是公开的实施例可如何被实现的示例,并且不意在限制公开的实施例。公开的各个实施例可包括在特定附图中未示出的元件和/或可省略在特定附图中示出的元件。附图意在提供说明,并且可不按比例。10.图1示出根据公开的实施例的包括用于支持词典解码的加速器的系统。11.图2示出根据公开的实施例的图1的机器的细节。12.图3示出根据公开的实施例的用于在图1的存储装置中使用图1的加速器来支持词典解码的架构。13.图4示出根据公开的实施例的支持词典解码的固态驱动器(ssd)。14.图5示出根据公开的实施例的图1的存储装置上的未编码的/解码后的数据可如何使用词典而被编码。15.图6示出根据公开的实施例的将解码后的数据传送到图1和图4的其它存储介质。16.图7示出根据公开的实施例的图1的加速器的细节。17.图8示出根据公开的实施例的图7的地址生成器的细节。18.图9示出根据公开的实施例的图7的输出过滤器的细节。19.图10a示出根据公开的实施例的数据可在图7的词典表中被存储和数据可从图7的词典表被检索的一种方式。20.图10b示出根据公开的实施例的数据可在图7的词典表中被存储和数据可从图7的词典表被检索的第二方式。21.图10c示出根据公开的实施例的数据可在图7的词典表中被存储和数据可从图7的词典表被检索的第三方式。22.图10d示出根据公开的实施例的数据可在图7的词典表中被存储和数据可从图7的词典表被检索的第四方式。23.图11示出根据公开的实施例的使用图1的加速器来执行词典解码以支持存储在图1的存储装置上的数据的示例过程的流程图。24.图12a示出根据公开的实施例的使用图1的加速器来执行词典解码以支持存储在图1的存储装置上的数据的另一示例过程的流程图。25.图12b继续根据公开的实施例的使用图1的加速器来执行词典解码以支持存储在图1的存储装置上的数据的另一示例过程的图12a的流程图。26.图13示出根据公开的实施例的用于将图5的词典页加载到图1的加速器并且配置图1的加速器的示例过程的流程图。27.图14示出根据公开的实施例的图1的加速器使用图7的词典表将编码值映射到解码值的示例过程的流程图。具体实施方式28.现在将详细参照公开的实施例,在附图中示出公开的实施例的示例。在下面的具体实施方式中,阐述了许多特定细节,以使公开能够的彻底理解。然而,应理解,本领域普通技术人员可在没有这些特定细节的情况下实践公开。在其它情况下,公知的方法、过程、组件、电路和网络未被详细描述,以免不必要地模糊实施例的方面。29.将理解,尽管在此可使用术语第一、第二等来描述不同的元件,但是这些元件不应受这些术语限制。这些术语仅用于将一个元件与另一元件区分开。例如,在不脱离公开的范围的情况下,第一模块可被称作第二模块,类似地,第二模块可被称作第一模块。30.在公开的描述中使用的术语在此仅出于描述特定实施例的目的,而不意在限制公开。如在公开的描述和所附权利要求中使用的,除非上下文另外清楚地指示,否则单数形式也意在包括复数形式。还将理解,如在此使用的术语“和/或”表示并包含相关所列项中的一个或多个的任何和所有可能的组合。还将理解,术语“包括”和/或“包含”在用在本说明书中时,说明存在叙述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其它特征、整体、步骤、操作、元件、组件和/或它们的组。附图的组件和特征不必按比例绘制。31.数据库管理系统(和其它存储系统)可使用数据编码来将存储的数据压缩到存储装置中。词典编码(dictionaryencoding)可以是用小数字替换来自大域的属性的无损一对一压缩方法。为了对数据库进行排序(sort),如果数据以编码格式被存储,则表应被解码随后被排序。32.但是作为其它处理的准备步骤的将大量数据传送到主机处理器以执行词典解码可能消耗可用于其它目的资源(诸如,总线带宽和处理时间)。计算存储装置可支持存储在存储装置中的数据的通用词典解码。使用通用词典解码,相同的加速器可用于对用两个或更多个不同的词典编码编码的数据进行解码。词典可对固定或可变宽度数据进行编码。词典可被加载到加速器中,在这之后,数据可被读取和解码,随后被传输到另一个处理单元以进行处理(诸如,排序、过滤等)或者被写回到存储装置(用于之后的处理)。33.图1示出根据公开的实施例的包括用于支持词典解码的加速器的系统。在图1中,机器105(也可被称为主机)可包括处理器110、存储器115和存储装置120。处理器110可以是任何种类的处理器。(为了便于说明,处理器110以及以下讨论的其它组件被示出在机器外部:公开的实施例可将这些组件包括在机器内。)虽然图1示出单个处理器110,但是机器105可包括任何数量的处理器,每个处理器可以是单核处理器或多核处理器,每个处理器可实现精简指令集计算机(risc)架构或复杂指令集计算机(cisc)架构(以及其它可能性),并且可以以任何期望的组合被混合。34.处理器110可结合到存储器115。存储器115可以是任何种类的存储器(诸如,闪存、动态随机存取存储器(dram)、静态随机存取存储器(sram)、持久性随机存取存储器、铁电随机存取存储器(fram)或非易失性随机存取存储器(nvram)(诸如,磁阻随机存取存储器(mram))等)。存储器115还可以是不同存储器类型的任何期望的组合,并且可由存储器控制器125管理。存储器115可用于存储可被称为“短期(short-term)”的数据(即,不期望在延长的时间段内被存储的数据)。短期数据的示例可包括临时文件、由应用本地使用的数据(可能已经从其它存储位置被复制)等。35.处理器110和存储器115还可支持可运行各种应用的操作系统。这些应用可发出从存储器115或存储装置120读取数据或者将数据写入存储器115或存储装置120的请求(也可被称为命令)。存储装置120可用于例如存储用于初始化模拟的初始参数(或初始参数的值的范围、以及值的范围表示什么类型的行为)。可使用装置驱动器130来访问存储装置120。虽然图1使用通用术语“存储装置”,但是公开的实施例可包括可受益于数据质量度量(metric)的使用的任何存储装置格式,任何存储装置格式的示例可包括硬盘驱动器和固态驱动器(ssd)。以下对“ssd”的任何引用应被理解为包括公开的这样的其它实施例。36.机器105还可包括加速器135。加速器135可以是可执行词典解码以支持对存储在存储装置120中的数据执行的操作的加速器。加速器135可以是存储装置120的一部分,加速器135可直接连接到存储装置120(但仍然是单独的元件),或者加速器135可跨例如总线(诸如,外围组件互连快速(pcie)总线)通信地结合到存储装置120。通过使加速器135更接近存储装置120,传送到处理器110的数据量可被减少,这可增大发送到处理器110或从处理器110发送的数据的可用带宽。以下参照图7进一步讨论加速器135。37.图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。38.图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。39.图3示出跨总线305通信的处理器110、存储装置120和加速器135。总线305可以是如图2的总线215的总线,或者总线305可以是与图2的总线215不同的总线。另外,虽然图3示出支持处理器110、存储装置120和加速器135之间的通信的一条总线,但是公开的实施例可包括支持处理器110、存储装置120和加速器135中的任何之间的通信的任何数量(一条或多条)的不同总线。40.图4示出根据公开的实施例的支持词典解码的固态驱动器(ssd)。在图4中,ssd120可包括接口405。接口405可以是用于将ssd120连接到图1的机器105(和/或在加速器135不是ssd120的一部分时,将ssd120连接到加速器135)的接口。ssd120可包括多于一个接口405:例如,一个接口可用于基于块的读取和写入请求,并且另一接口可用于键值(key-value)读取和写入请求。虽然图4建议接口405是图1的ssd120与机器105之间的物理连接,但是接口405还可表示可跨公共物理接口使用的协议差异。例如,ssd120可使用u.2或m.2连接器连接到机器105,但是可支持基于块的请求和键值请求:处理不同类型的请求可由不同的接口405执行。41.ssd120还可包括主机接口层410,主机接口层410可管理接口405。如果ssd120包括多于一个接口405,则单个主机接口层410可管理所有的接口,ssd120可包括用于每个接口的主机接口层,或者主机接口层的一些组合可被使用。42.ssd120还可包括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示出四个通道和八个闪存芯片,但是公开的实施例可包括任何数量(一个或多个,没有限制)的通道,通道包括任何数量(一个或多个,没有限制)的闪存芯片。43.在每个闪存芯片内,空间可被组织成块,块可被进一步细分为页,页可被分组为超级块。页通常是可在ssd上被读取或写入的最小数据单元。页大小可根据需要变化:例如,页可以是4kb的数据。如果小于整页将被写入,则多余空间是“未使用的”。44.虽然页可被写入和读取,但是ssd通常不允许数据被覆写(overwrite),也就是说,现有数据可不被新数据“就地(inplace)”替换。相比之下,当数据将被更新时,新数据被写入ssd上的新页,并且原始页被无效(标记为准备擦除)。因此,ssd页通常具有三种状态之一:空闲(准备好被写入)、有效(包含有效数据)和无效(不再包含有效数据,但在擦除之前不可用)(这些状态的确切名称可变化)。45.但是,虽然页可被单独地写入和读取,但是块是可被擦除的基本数据单元。也就是说,页不可被单独擦除:块中的所有页通常被同时擦除。例如,如果块包含256个页,则块中的所有256个页被同时擦除。这种布置可能导致ssd的一些管理问题:如果仍然包含一些有效数据的块被选择用于擦除,则在块可被擦除之前,该有效数据可需要被复制到ssd上其它地方的空闲页。(在公开的一些实施例中,擦除单元可与块不同:例如,擦除单元可以是超级块,超级块可以是多个块的集。)46.因为数据被写入的单元与数据被擦除的单元不同(页与块),所以如果ssd等待直到仅包含无效数据的块,则即使有效数据量可小于ssd的通告容量(advertisedcapacity),ssd实际上也可能耗尽可用存储空间。为了避免这种情况,ssd控制器415可包括垃圾收集逻辑(图4中未示出)。垃圾收集的功能可以是识别包含全部是无效页或大部分都是无效页的块,并且释放这些块,使得有效数据可再次被写入其中。但是如果被选择用于垃圾收集的块包括有效数据,则该有效数据将被垃圾收集逻辑擦除(因为擦除单元是块,而不是页)。因此,为了避免这样的数据丢失,垃圾收集逻辑可将来自这样的块的有效数据编程到其它块中。一旦数据已经被编程到新块中(并且将lba映射到pba的表被更新以反映数据的新位置),则块可被擦除,从而将块中的页的状态返回到空闲状态。47.在单元可能不被信任以正确地保留数据之前,ssd还可使每个单元可被写入有限次数。该次数通常被测量为单元经历的编程/擦除循环的次数的计数。通常,单元可支持的编程/擦除循环的次数表示ssd将在合理的时间段内保持可靠的功能:对于个人用户,用户可能由于不足的存储容量而不是因为编程/擦除循环的次数已经被超过界限而更可能替换ssd。但是在企业环境中,数据可被更频繁地写入和擦除,单元超过其编程/擦除循环计数的界限的风险可能更显著。48.为了帮助抵消这种风险,ssd控制器415可采用耗损均衡逻辑(图4中未示出)。损耗均衡可涉及基于块的编程/擦除循环计数来选择数据块以写入数据。通过选择具有较低编程/擦除循环计数的块,ssd可能够避免增大一些块的编程/擦除循环计数超过其可靠操作点。通过保持每个块的耗损水平尽可能接近,ssd可在更长的时间段内保持可靠。49.ssd控制器415可包括闪存转换层430(对于不使用闪存存储的存储装置,闪存转换层430可更一般地被称为逻辑到物理转换层)和dram435。闪存转换层430可处理lba或其它逻辑id(如图1的处理器110所使用的)和物理块地址(pba)或其它物理地址的转换,其中,数据被存储在闪存芯片425-1至425-8中。如在执行垃圾收集和/或损耗均衡时可能发生的,闪存转换层430还可负责将数据从一个pba重新定位到另一个pba。dram435可以是ssd120用于任何期望目的的本地存储器。在公开的一些实施例中,dram435可以是约4gb至64gb的存储器,但是也可大于或小于该存储器的范围。50.虽然图4将ssd120示出为包括一个加速器135,但是公开的实施例可包括包含(或连接到)两个或更多个加速器135的存储装置120。51.图5示出根据公开的实施例的图1的存储装置120上的未编码的/解码后的数据可如何使用词典而被编码。在图5中,示出解码后的(或原始的)数据505。虽然图5将解码后的数据505示出为整数列表,但是公开的实施例可包括任何数据类型:例如,固定宽度数据类型(即,用于表示列表中的任何值的位数/字节数相同的数据类型)。因此,解码后的数据505可包括浮点数、无符号数、字符、字符串等。52.词典(诸如,词典510)可用于存储解码后的数据的表示,潜在地使用比原始数据少的位/字节。词典510的前提是,虽然存储每个值所需的位数/字节数可能很大,但是将被表示的唯一值的数量相对小。因此,通过建立从“小”唯一键(uniquekey,或被称为唯一约束)到“大”值的映射并且仅存储“小”唯一键可节省空间。53.作为示例,考虑包含公民身份信息的数据库。世界各国的名称的长度从4个字符(“chad”)至56个字符(“theunitedkingdomofgreatbritainandnorthernireland”)变化。假设国家名称中的每个字符需要一个字节,则将国籍存储为字符串所需的字节数因此可在4至56之间变化。54.另一方面,世界上仅存在约200个国家。数字“200”可仅使用两个有符号字节(或一个无符号字节)而被表示。因此,如果词典表将各个键映射到国家名称,则键(而不是较长的国家名称)可被存储在数据库中。55.取决于数据库中的条目的数量,该映射可节省大量空间。继续该示例,假设数据库包括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%。56.因此,图5示出使用整数值的词典编码的示例。给定解码后的数据505和词典页510,编码后的数据515可被产生。例如,值520(是“25”)可作为键“1”被存储在词典页510中,键“1”随后可作为键525被存储在编码后的数据515中。57.注意,解码后的数据505中示出的示例值将全部适合于两个字节整数。如果两个字节整数也用于键,则通过使用词典页510将不会明显节省空间。但是可能的是,虽然词典页510中示出的所有示例值将适合两个字节,但是可存在未示出的可能需要多于两个字节来存储的其它值。即使键和值的宽度(表示每个键和值所需的位数/字节数)相同,词典编码仍然可被使用。58.词典页510可以以多种不同的方式而被构建。构建词典页510的一种方式是一次一个值地扫描解码后的数据505。如果该值已经在词典页510中,则对应的键可在编码后的数据515中被使用,否则,新值可被添加到词典页510并被分配随后可在编码后的数据515中被使用的新键。可选地,可扫描解码后的数据505以识别所有唯一值。然后可对唯一值进行排序并分配键。然后可基于构建的词典页510将解码后的数据映射到编码后的数据。公开的其它实施例可以以其它方式来构造词典页510。59.图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)写入dram435(如图4中所示,在存储装置120内)和/或存储器115(如图1中所示,在图1的主机105内),这取决于数据接下来将被在何处使用。加速器135还可将解码后的数据页605写回到存储装置120,以备解码后的数据页605可在将来的某个时刻被使用。60.图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在接收到时进一步处理)。61.一旦数据被输入缓冲器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。62.给定来自词典表735的一个或多个条目,输出过滤器725随后可过滤出来自图5的编码后的数据页515的键被映射到的值。以下参照图9进一步讨论输出过滤器。该信息可被传递到输出缓冲器730,输出缓冲器730随后可输出解码后的数据页605。63.注意,加速器135可处理图5的编码后的数据页515中的编码后的数据。但是在公“00000001”),因此第六值可在词典表735的第一行中被找到。69.图9示出根据公开的实施例的图7的输出过滤器725的细节。在图9中,给定来自图7的词典表735的(一个或多个)行和输入地址的最低有效位(在图9中被标记为“条目过滤器”)作为输入,输出过滤器725可使用条目过滤器来区分行中的值以过滤出期望值。可通过对值进行遮掩(mask)和移位以去除不是期望值的一部分的任何位/字节来实现该过滤。例如,期望值左侧的位/字节可被遮掩,并且期望值的右侧的位/字节可通过将期望值向右移位而被去除。70.再次考虑图7的词典表735中的行包括八个字节并且每个值是四个字节宽度的示例。由于在图7的词典表735中的每行中存在两个值,因此可使用一位来区分这两个值。如果条目过滤器是零,则条目中的行中的前四个字节可被遮掩为零,否则,条目可被向右移位四个字节。71.另一方面,再次考虑图7的词典表735中的行包括八个字节并且每个值是两个字节宽度的示例。由于在图7的词典表735中的每行中存在四个值,因此可使用两位来区分四个值。基于条目过滤器,在掩码/移位完成之后,行中的八个字节中的两个字节可被留下。72.在以上示例中,由于图7的词典表735的宽度是解码的数据的宽度的倍数,因此该值可在图7的词典表735的单个行内被完整地找到。在公开的一些实施例中,该关系可能不是正确的,并且单个解码的值可跨图7的词典表735中的两行被拆分。以下图10c至图10d讨论了如何处理这种情况。73.考虑到以上讨论,应清楚,图1的加速器135可支持词典解码。但是不仅支持词典解码,图1的加速器135可支持具有图7的任何大小的词典表735、编码数据宽度和任何解码数据宽度的词典解码。图1的加速器135可与具有固定的解码数据宽度的任何词典一起使用,而不是专门针对词典进行定制。因此,加速器135可在一个时间使用具有一个编码数据宽度的词典、并且在另一时间使用具有另一编码数据宽度的词典而被使用,而不需要任何重新配置(除了将新词典存储在词典表735中并指定将被使用的编码数据宽度和解码数据宽度之外)。74.在以上讨论中,图1的加速器135已经被描述为好像使用字节对齐的数据类型。由于这对于许多数据类型都是正确的,因此字节对齐便于使用。但是公开的实施例可使用以位而不是字节测量的数据宽度:例如,如果数据被打包(pack)。如果数据的正常宽度大于所需宽度,则数据可被打包。例如,可使用两个字节来存储高达32767的(带符号的)整数。但是如果值被限制在0与15之间,则仅需要四位来表示可能的值。通过将四个四位数打包成两个字节,数据可被更紧凑地存储,尽管不再是字节对齐的。图1的加速器135可简单地通过以位而不是字节测量宽度来处理这样的打包的数据。例如,在图7的词典表735的八个字节宽度的行中,可存储16个不同的四位值。如果提供的键是值1(即,第二条目),则输出过滤器可从该行过滤出除第二个四位之外的所有位。(当然,因为编码的宽度可能大于解码的宽度,所以词典编码在描述的示例中可能没有太大价值,但是原理成立。)75.图10a至图10d示出根据公开的实施例的数据可被存储在图7的词典表735中和数据可从图7的词典表735被检索的不同方式。在图10a中,词典表735被示出为八个字节宽度,并且存储八个字节数据。词典表735的第一行可存储值1005-1,词典表735的第二行可存储值1005-2,词典表735的第三行可存储值1005-3,以此类推(值1005-1至1005-3可被统度并取该结果的整数(或可选地地,丢弃任何余数)识别该字节位于其中的行。81.如图10d中所示,可使用该问题的另一种解决方案。在图10d中,不是使用键、解码数据宽度和词典表735的宽度来计算存储期望值的行,而是图1的加速器135可(例如,在图7的存储器715中)存储表1035,表1035可将特定的键映射到存储数据的特定的行和偏移。因此,例如,条目1040-1示出键“0”存储在开始于行零、偏移零的词典表735中,条目1040-2示出键ꢀ“1”被存储在开始于行零、偏移六的词典表735中,条目1040-3示出键“2”ꢀ被存储在开始于行一、偏移四的词典表735中,依此类推。然后,给定特定的键,表1035中的查找(lookup)可识别存储该值的词典表740中的行和偏移:识别的行(如果值被分成两行,则可能还有下一行)可被检索到,输出过滤器随后可将该信息减少到仅如上所述的期望值。82.除了或者可选地存储每个键的行和偏移,表1035可存储数据的字节地址和/或宽度(在图10d中由虚线框示出为可选信息)。字节地址可用于确定期望值在词典表735中开始的行和偏移,类似于以上关于确定来自键的行和偏移的讨论。在数据具有固定宽度(即,词典表中的所有值具有相同宽度)并且该值由图1的加速器135已知的情况下,每个单独的数据元素的宽度不需要被存储在表1035中。即使对于可变宽度数据,任何单独的值的宽度也可通过确定表1035中的相邻键之间的位数/字节数(即,通过对词典表740中的一个值开始的位置与词典表740中的下一值开始的位置之间的位数/字节数进行计数)而被确定。但是通过将值的宽度存储在表1035中,加速器135可提取值的宽度及其位置,从而避免在对键进行解码时计算值的宽度的需要。83.注意,存储每个数据值的各个长度还提供在词典表740中定位值的替代方式:图1的加速器135可计算各个值的宽度的动态和(runningsum),该和除以词典表735的宽度来标识值开始的行,余数标识行内的偏移。在公开的这样的实施例中,表1035可仅存储各个值的宽度,而不是它们的行/偏移。84.表1035还可提供其它益处。首先,通过支持词典表735中的条目的数据宽度可能不固定的可能性,表1035能够在词典表735中存储可变宽度数据。另外,表1035可支持存储可超过词典表740的宽度的值。通过使用表1035来识别各个值在词典表740中位于的位置,不需要键与在词典表740中存储值的位置之间的关系。因此,虽然使用地址生成器710允许值所位于的行的简单计算,但是使用表1035可提供更通用的解决方案。85.因为所有所需要的是知道值的数量(即,可被使用的不同键)、解码后的数据的宽度和词典表740的宽度(其余的是简单的算术),所以表1035可被预先构造(例如,当词典表735被加载到图1的加速器135中时)。实际上,因为最坏的情况(将等于词典表735中的行的数量乘以词典表735的宽度、除以解码数据宽度(或者如果可变宽度数据被存储在词典表735中,则最窄解码数据宽度))可被假设,所以甚至不需要知道不同值的数量。并且如果使用的键与表1035中的行号相同,则表1035也不需要存储键。86.另外,通过将每个值的起始位/字节存储在词典表740中,表1035可允许图1的加速器135存储可变宽度数据类型。例如,如上所述,当国家名称用作字符串时,国家名称的宽度可从四个字节变化到56个字节。可通过适当地(例如,用空格或空字符)填充各个值以使其与最长的字符串一样长来使所有字符串名称具有相同的宽度,在这种情况下,可如上所述使用图1的加速器135。但是通过存储每个值开始的行和偏移,图1的加速器135不仅可确定词典表740中的值的起始位置,而且可通过比较表1035中的相邻键的行和偏移来确定其宽度。当使用可变宽度数据类型时,表1035可需要扫描图5的词典页510以确定每个值的宽度(这可影响表1035中的其它值的行和偏移)。87.图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)。88.在框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。89.图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中的编码值。90.在框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的dram435或图1的存储器115(如框1210中所示)。91.图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可使用编码后的数据的宽度和解码后的数据的宽度来配置其自身。92.图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的行过滤出期望值。93.在图12a至图14中,示出公开的一些实施例。但本领域技术人员将认识到,通过改变框的次序、通过省略框、或者通过包括附图中未示出的链接,公开的其它实施例也是可行的。无论是否明确地描述,流程图的所有这样的变化都被认为是公开的实施例。94.随着每天生成的数据的大小增大,存储装置中可能存在计算瓶颈。存储装置与计算平台之间的接口可能是由于有限带宽而导致的限制,有限带宽可能无法随着存储装置的数量增加而扩展。互连网络可能无法提供对所有存储装置的同时访问,因此当在不同的存储装置上发生独立操作时,可能限制系统的性能。95.将计算卸载到存储装置可减少或消除来自互连的数据传送的负担。近存储计算可将计算的一部分卸载到存储装置以加速大数据应用。用于数据库排序(或其它数据库操作)的近存储加速器可利用计算存储装置(诸如,具有原位(in-situ)处理数据的板载(on-board)现场可编程门阵列(fpga)芯片(或其它处理器)的非易失性存储器快速(nvme)闪存驱动器)。近存储加速器可支持词典解码操作、排序操作和混洗操作。近存储加速器可支持对具有任何任意数据类型的列进行排序,同时考虑存储装置的规格以随着存储装置的数量增加而增大计算机系统的可扩展性。随着存储装置的数量增加,该系统可提高性能和能量效率二者。96.随着数据的增长,处理大量数据已经成为许多大数据用例(诸如,数据库应用)的基础。随着存储的数据的大小增大,加载和存储数据的成本可能超过计算成本,这可能降低性能。在一些应用(诸如,数据库、图形处理、机器学习和统计分析)中,超过一半的执行时间可能被花费在数据传送上,这示出数据通信对整体性能的影响。固态驱动器(ssd)的快速发展已经将与数据传送时间相关联的瓶颈从磁盘(即,查找和旋转延迟)转移到互连带宽和操作系统开销。97.外围组件互连快速(pcie)接口提供对存储装置的有限的同时访问,当在不同的存储装置中并行调用独立操作时,这可能限制系统的可扩展性。这个问题以及互连总线的低性能可能增大存储装置的性能容量与互连总线之间的差距。98.近存储计算可使计算的一部分能够卸载到存储驱动器,以加速大数据应用。因此,已经开发新装置,以将计算能力带入闪存装置。计算存储装置可以是例如具有原位处理数据的板载fpga芯片的nvme闪存驱动器。作为计算存储装置的计算节点的fpga可提供具有可承受的功耗和可重新配置性的高度并行性,以实现多功能的应用(versatileapplication)。与通用处理核(即,主机处理器)相比,fpga可以以更小的功率更快地运行可并行化应用。与常规存储装置相比,通过使用计算存储装置实现的益处可包括:通过将任务卸载到近存储节点以桥接互连差距来提高整体性能、以及通过使用fpga降低功耗二者。由于数据密集型应用(诸如,数据库管理)的性能可能受到系统带宽的限制,因此这样的应用可通过将计算卸载到存储驱动器而被加速。因此,近来的处理系统意在将查询处理卸载到存储驱动器,以最小化主机与存储设备之间的数据传送。零外,与计算密集型应用不同,由于输入/输出限制(i/obound)应用的性能可能受到主机到存储设备带宽的限制,因此它们可能无法受益于高性能主机处理器。因此,将i/o限制应用卸载到计算存储装置释放了主机资源,以执行更多的计算密集型任务。99.随着现实世界数据库的大小增长,存储数据库可涉及多个存储装置。数据库管理系统可将数据库划分为多个分区(partition),并且将操作分解为分区数据库上的多个独立操作。尽管独立操作可被并行执行,但是由于i/o限制应用中的存储设备到主机的带宽限制,主机处理器可能无法完全利用该分区的机会。但是,由于计算存储装置具有它们自己的计算资源,因此计算存储装置可在不使用存储设备到主机的带宽的情况下原位执行独立操作。具体地,排序操作通常可在数据库查询处理中作为独立运行的操作或作为更复杂的数据库操作(诸如,合并-连接、区别(distinct)、按次序、按组等)的主干而被使用。当对数据库进行排序时,所有表列(tablecolumn)可基于被称为键列(keycolumn)的单个列而被排序。由于排序字符串阵列的高复杂性,基于fpga的加速器可专注于加速数字阵列。然而,基于非数字列对表进行排序可广泛地用于数据库系统中。由于列的数量,现实世界数据库可能很难排序,因为在对键列进行排序之后,表的其余部分应被相应地混洗。100.数据库管理系统可使用数据编码来将存储的数据压缩到存储装置中。词典编码可以是用小数字替换来自大域的属性的无损一对一压缩方法。为了对数据库进行排序,如果数据以编码格式被存储,则对表应被解码随后被排序。101.计算存储装置可提供对存储在每个存储装置中的数据的独立操作。为了对数据库表进行排序,近存储排序可使用包括具有特定内核的基于fpga的加速器的计算存储装置,以加速词典解码操作、排序操作和随后的混洗操作。系统可支持对具有任何任意数据类型的列进行排序。如果表以编码格式被存储,则词典解码内核可对键列进行解码。然后,排序内核可对键列进行排序,并且混洗内核可根据排序后的键列对表进行重新排序。这样的系统不仅通过在存储系统附近执行计算来内在地解决数据传送问题,而且还包含词典解码、排序和混洗操作的fpga友好实施方式。附加地,如果数据以词典编码格式被存储,则系统可利用词典编码后的数据来对除整数和长数据类型之外的其它数据类型进行排序。词典编码可将不同的数据类型映射到整数键值,并且系统可首先对编码的数据进行排序,随后通过使用支持任何任意数据类型的新颖的词典解码器内核将排序的列解码为原始数据类型。102.公开的实施例可包括作为近存储加速器的图1的加速器135,近存储加速器通过利用计算存储装置来使计算更接近存储装置。103.公开的实施例可包括图1的加速器135,加速器135具有用于受益于fpga并行性的双调排序(bitonicsort)的fpga友好架构(或一些其它可替换架构)。该架构可以是可扩展的,以对各种数据大小进行排序、输出排序后的索引、并且可基于fpga的可用资源进行扩展。104.数据库管理系统可使用词典编码对数据进行编码以压缩数据。该系统可包括通用词典解码内核,以将数据解码为任何数据类型。该系统可使用词典解码作为数据库排序的第一阶段,以将输入提供给排序内核。附加地,词典解码可用于支持对具有非数字数据类型的列进行排序。可优化系统的词典解码内核以最大化ssd到fpga的带宽利用率。105.混洗可以是数据库排序的步骤,并且可以是i/o限制的。该系统可使用混洗内核来完成表排序,混洗内核完全利用ssd的带宽来最大化对数据库表进行排序的性能。可修改表的存储模式,以受益于混洗内核和排序内核二者中的常规存储器模式。106.公开的实施例可包括图1的加速器135,加速器135可比包括独立fpga和存储装置的常规架构上的相同加速器更快并且更有能效,其中fpga可通过pcie总线连接到系统。当与cpu基线相比时,该系统也可更快并且更有能效。107.因为对数据库的操作可涉及大量数据,所以数据库系统可能受到磁盘性能的约束。数据库可包括一个或多个表,每个表具有行和列,其中每个条目保持特定属性。数据编码可用于对存储在存储系统中的表进行压缩。词典编码可以是数据库管理系统中广泛使用的常见编码方法。与可涉及作为查询执行之前的分块步骤的解压缩的面向字节的压缩方法(例如,gzip、snappy、行程编码)不同,词典编码可支持并行解码和原位查询处理。基于键列对数据库表进行排序可涉及下面的三个步骤:如果数据库表以词典编码格式被存储,则对键列进行解压缩;对键列进行排序;以及相应地对表的其余部分进行重新排序。该系统可包括三种类型的内核:词典解码、排序和混洗,以执行每个步骤。该系统可在计算存储装置上执行所有计算以消除主机-存储设备通信。108.可包括图1的存储装置120和图1的加速器135作为单独的组件或组合成单个装置的计算存储装置的通用架构可包括:通用ssd、ssd控制器和nand阵列的组件、以及附加的fpga加速器、fpga动态随机存取存储器(dram)和pcie交换机,以建立nand阵列与fpga之间的通信。fpga与ssd之间的链路可提供计算存储装置与主机之间的直接通信。计算存储装置使用的ssd可以是例如通过pciegen3x4总线接口连接到例如fpga的约4tbssd。109.在这样的计算存储装置中,处理器可通过ssd驱动器向ssd控制器发出公共ssd命令(诸如,ssd读取/写入请求)。此外,处理器还可能够经由fpga驱动器发出fpga计算请求和fpgadram读取/写入请求。除了主机驱动的命令之外,计算存储装置可通过使用fpgadram和板载pcie交换机来支持nvmessd与fpga之间的内部数据路径上的数据移动,这在此可被称为对等(peer-to-peer,p2p)通信。fpgadram可被公开于主机pcie地址空间,使得nvme命令可经由p2p通信安全地将数据流式传输(stream)到fpga。p2p可使计算接近数据可能驻留的位置,从而减少或消除主机到存储设备和主机到加速器的pcie通信量,以及相关的往返延迟和性能下降。计算存储装置可提供开发环境和运行时堆栈(诸如,运行时库、api、编译器和驱动器),以实现基于fpga的设计。110.当前的数据库可涉及多个装置以存储数据。这样的数据库可比当前商品硬件平台能够处理的数据库更大。因此,数据库管理系统可将数据分区成更小的数据块,使得计算节点可以以时间上可承受的方式在每个分区上执行计算。此后,管理系统组合每个分区的结果以生成最终结果。假设数据可被存储在ssd中,则每个ssd的表可被划分为特定数量的分区。为了对整个数据库进行排序,可通过合并树对每个ssd的所有分区进行排序和合并。对每个分区本地地进行排序可独立于其它分区,因此,本地不同的分区可被并行地排序。111.在对数据库表进行排序时,该系统可利用存储带宽。因此,在单个ssd上并行化多个分区可能不是有益的,因为它可能无法提高性能:因为fpga可能无法同时访问不同的分区,所以fpga可在分区之间切换。因此,系统可在ssd层级并行化计算。该系统可部署计算存储装置,每个计算存储装置可直接连接到fpga。每个计算存储装置可独立于计算存储装置对ssd层级分区进行排序,这可随着存储装置的数量增长而显著加速整体系统性能。112.由于图1的加速器135可包括排序内核、混洗内核和词典解码器内核,因此该系统可处理将资源分配给内核之间的权衡(trade-off)。词典解码器内核可能够使存储设备至fpga带宽饱和,因此,实例化单个词典解码器内核可足以提供最大性能。单混洗内核可能无法完全利用ssd到fpga带宽,这是由于以下事实:尽管在系统中新表存储格式能够以顺序模式读取一行,但是读取下一行仍然可涉及具有高延迟的随机存储器访问。因此,目标可以是将所有混洗内核的总输入消耗速率设置为ssd到fpga的最大提供带宽,以充分利用带宽。由于混洗操作可以是i/o密集的并且表的大小可显著大于键列的大小的事实,混洗操作的性能可决定整体性能。因此,混洗内核的多个实例可被实例化以完全利用存储设备到fpga带宽和词典解码器内核的单个实例,并且使用排序内核的其余资源。存储设备到fpga带宽可在混洗内核和词典解码器内核中被充分利用,同时仍然具有足够的资源来进行高吞吐量排序。排序内核可使用fpga块ram(bram)的大部分来存储阵列,并且可提供并行性。附加地,词典解码器内核可涉及片上存储器来本地地存储词典表以提供高吞吐量。因此,该系统的词典解码器可主要使用fpga超ram(uram)来平衡系统的整体资源利用。113.双调排序可以是可并行运行的排序网络。在排序网络中,比较(comparison)的数量和比较的次序可以是预定的并且与数据无关。给定比较的数量和比较的次序,可通过利用比较器的固定网络在fpga上高效地并行化双调排序。双调排序可首先将任意数字序列转换为多个双调序列。通过合并两个双调序列,双调排序可创建更长的双调序列,并且可继续直到整个输入序列被排序。如果存在i(1≤i≤n),则长度为n的序列可以是双调序列,使得第i元素之前的所有元素被升序排序,并且之后的所有元素被降序排序(即,x1≤x2≤...≤xi≥xi+1≥xi+2≥...≥xn)。114.例如,为了对包括长度为2的n/2=4个双调序列的长度为n=8的示例输入序列进行排序,初始未排序的序列可通过一系列比较器,比较器将两个元素交换为增大的次序或减小的次序。第一步骤的输出可以是n/4个双调序列,每个双调序列的长度为4。对n/4个序列应用双调合并创建n/2个双调序列。在应用log2n次双调合并之后的输出序列可产生排序后的序列。115.通常,在第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元素进行比较。116.为了对数据库表进行排序,该系统可从对键列进行排序开始。如前所述,双调排序中的操作的序列可以是预定义的、与数据无关的和可并行化的。因此,该系统可利用fpga特性来加速双调排序。输入序列可被存储在fpgadram中,fpgadram也被称为“片外存储器”。然后,该系统可通过端口(诸如,高级可扩展接口(axi)端口)将输入序列流式传输到fpga中,该端口具有512位(16个32位整数)的接口数据宽度。axi端口可将数据写入输入缓冲器,输入缓冲器可具有p=2m个整数的容量。为了具有规则的排序网络,在不缺乏通用性的情况下,双调排序内核的大小p可以是2的幂的数(如果总数据元素不是p的倍数,则填充可被使用)。如果p可大于16,则可需要多个循环来填充输入缓冲器。每当输入缓冲器填充时,输入缓冲器将缓冲的输入传递到p-排序器模块。117.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模块的总数可被估计为118.该系统可通过利用fpga的p-排序器模块和快速片上存储器来安排(orchestrate)对整个数据的排序操作。首先,当对每个p个元素进行排序时,p-排序器可在升序与降序之间切换。p-排序器模块的排序后的输出可被写入序列存储器,序列存储器可包括由fpgabram组成的两个子存储器块m1和m2。最初,可分别在m1和m2中写入升序和降序排序。m1和m2的每行可包括p个元素,这些元素一起形成序列存储器中长度为2p的双调行(因为第一半是上升的,并且第二半是下降的)。注意,按行表示项目在序列中的相邻放置,而不一定是块ram的可仅适合一个或两个整数的物理行。由于2p序列可仅是单个双调阵列,因此使用合并过程,2p双调阵列可使用p×log22p个比较和交换(cs)单元被排序。119.对p-排序器的结果进行合并自身是类似双调的过程,但是是对排序后的阵列而不是标量元素。也就是说,步骤1可类似于双调排序中的步骤1,合并相邻阵列。步骤2可类似于简单双调排序的第二步骤,该第二步骤使用并行比较和交换(pcs)单元将每个项i与项i+2进行比较和交换,随后将修改后的阵列中的项i与项i+1进行比较。因此,整个排序可被认为是阵列内排序,随后是阵列间双调排序。当该系统完成对整个序列存储器的排序时,该系统可将序列写回到片外dram(或者写回到存储装置),并且使用相同的流程来重复地对输入序列的另一个数据块进行获取和排序,随后合并这些数据块以构建更大的排序后的数据块。120.为了为并行化提供期望的带宽,m1存储器块和m2存储器块中的每个可并行地使用p列bram,因此p个整数可一次被获取(fpgabram的数据宽度可以是32位或一个整数)。此外,在每个存储器块中,l行bram可垂直放置,因此l个排序器的结果可被同时比较。bram的数量及其在32位整数方面的容量可被公式化为nbram=2×p×l和cbram=1024×2×p×l。121.注意,bram可具有1024位(深度)×32位(宽度)的配置。在每次迭代中,cbram=2048pl个整数可被排序并写回到片外dram。122.为了对数据库表进行排序,可基于排序后的键列的索引(在此被称为排序后的索引)来对表行(tablerow)的其余部分进行重新排序。因此,排序后的索引可被生成,之后可由混洗内核使用该排序后的索引来对整个表进行排序。为此,当从dram读取输入序列时,索引可被分配给每个元素,并且索引可被存储在具有与序列存储器相同容量的索引存储器中。当从序列存储器读取并将输入馈送到p-排序器时,该系统可读取相应的索引并连结(concatenate)或关联到值。p-排序器的比较和交换单元可仅基于连结的元素的值部分来执行比较,但是整个连结的元素可被交换。因此,该系统也可将排序后的索引存储在dram中。123.p-排序器模块可对元素的数据块进行排序,并且可存储在下面的序列存储器中。m1存储器组可存储升序排序,而m2存储器组可存储降序排序后的元素。在m1(和m2)存储器的每行处存在p个bram,因此排序后的p个元素可被逐元素地划分以用于后续并行操作。在pcs子步骤中,来自同一存储器(m1或m2)的两个p-元素阵列可被获取,而在最后的子步骤(即,合并)中,来自m1的p-元素阵列和来自m2的另一个p-元素阵列可被获取并被排序/合并。连接到所有l个bram组的l对1复用器可被用于管理这些操作,并且多达两个阵列可从m1和m2中的每个被选择。pcs以及合并模块的输出可被写回到序列存储器中以完成接下来的步骤。124.在对键列进行排序之后,该系统可使用混洗内核来对表行进行重新排序。为了实现该操作,该系统可读取排序后的键列的第一元素的值以及其在原始表中的索引(可连结到元素的值)。然后,该系统可读取索引指向的原始行的所有条目,并且可将其写入作为新排序后的表的第一行。类似地,为了生成排序后的表的第i行,该系统可读取排序后的索引序列的第i元素。索引表示原始表中行的索引。因此,原始表与排序后的表之间的映射可被公式化为sortedtable[i]=originaltable(sortedindices[i])。[0125]混洗内核不一定执行任何计算,因此,内核的性能可能受到存储器访问时间的限制。因此,将表存储在存储设备中可直接影响内核的性能。通常,表可按列或按行的格式被存储。在逐列格式中,每列的元素可被存储在连续的存储器元件中。在逐行格式中,行的所有元素可被布置在连续的存储器元件中。连续存储器元件可比分散(随机)存取显著更快地以突发模式从dram被传送到fpga。[0126]以逐列格式存储表可导致排序内核中的顺序/突发存储器访问模式(因为它涉及对键列的连续元素的访问,其可被表示为ck)。然而,混洗内核可具有随机访问模式(因为混洗内核使用对同一行的连续元素的访问,连续元素可在逐列布置中被远离地布置)。类似地,以逐行格式存储表可使得顺序访问模式能够读取单个行(适合于混洗内核),但是读取下一行(作为排序内核的一部分)可涉及随机存储器访问。为了优化两个内核的访问模式,该系统可使用混合技术来将表存储在存储设备中。键列(ck)可逐列被存储,而表的其余部分可以以基于行的格式被存储。因此,两个内核可受益于顺序存储器访问。[0127]在数据库管理系统中,数据可被压缩存储在存储系统中,以减少用于存储数据库的存储装置的数量。词典编码可用作独立的压缩技术或作为与其它压缩技术组合的步骤。词典编码可以是将每个“值”映射到“键”的无损压缩技术。当数字的范围可显著大于唯一值(u)的数量时,使用词典编码可以是有益的。每个唯一值可由k位键表示,其中k=log2u。当编码后的数据的大小显著小于元素的总大小时,词典编码可以是有益的。词典编码对于具有较大大小的数据类型可以更有效。词典解码加速器可仅支持具有固定长度数据类型的解码值。然而,词典编码在编码可变长度数据类型(诸如,字符串)时可以更有效。该系统可包括用于词典解码的加速器,词典解码支持所有数据类型(固定长度数据类型和可变长度数据类型)。[0128]如果数据以编码格式被存储在存储装置中,即使一些数据库操作(例如,过滤或混洗)可对词典编码后的数据运行以对表执行排序操作,数据也应被首先解码。可使用图1的加速器135实现的系统的词典解码器可首先从存储装置读取与编码后的数据一起存储的“词典页”。该系统可将词典页存储在fpga本地bram中,以提供快速访问来对输入进行解码。由于在可变长度数据类型(诸如,字符串)中值的长度可以是不同的,因此该系统可不在片上词典表的每行中存储单个值来充分利用有限的fpgabram的容量。该系统的词典表可包括r个行,其中每行可以是lmax个字节。lmax可以是词典中最长值的字节数。该系统的词典解码器可连结词典值,并且可将它们连续地写入词典表中。因此,词典值的字节可拆分到词典表的两个连续行。由于每行的长度可等于或大于每个词典值的长度,因此每个值可被存储在单个行中,或者拆分到两个连续行。为了找到与键对应的值的位置和长度,该系统的词典解码器构造索引存储器,索引存储器可存储词典表中的每个词典值的字节地址和长度。该系统的词典解码器可使用输入键来查找相应的值的索引和长度。然后,该系统可使用索引和长度来从字节可寻址的词典表读取值。由于在每个时钟周期中可存在对索引存储器和词典表二者的多次访问,因此该系统可使用片上存储器来存储这两个表。[0129]在构建索引存储器和词典表之后,可使用图1的加速器135实现的系统的词典解码器可在数据页中流式传输、对数据页进行解码、并且将解码后的数据写入fpgadram。由于解码后的数据可在排序内核中被使用,因此该系统可将解码后的数据保持在fpgadram中以避免不必要的存储访问。输入元素的宽度(k)可取决于词典中唯一元素的数量(u),并且解码后的元素的宽度可取决于原始数据类型。该系统可提供支持可在运行时期间配置的各种输入和输出位宽度的通用词典解码器。在加载词典之后,该系统的词典解码器可使用axi接口在数据页中进行流式传输。为了设计简单性和axi兼容性,该系统的词典解码器可将输入位宽度k限制为大于8的“2的幂的数”。axi接口可读取编码后的数据页元素,并且可将编码后的数据页元素存储在输入缓冲器中。输入键可与具有不同位宽度的值相关联。因此,为了支持对不同数据类型的解码,词典表可支持具有不同位宽度的读取和写入元素。[0130]公开的实施例可包括图1的加速器135,加速器135可在输入键中流式传输并且可将输入键存储在输入缓冲器中。该系统可从索引存储器查找词典表中的相应值的位置和长度。索引存储器可输出词典表中的值的第一字节的字节地址以及值的长度。字节地址可用于找到包含该值的词典存储器的行地址。词典值可被完全存储在词典表行中,或者可被拆分到两个连续的行。因此,对于每个键,地址生成器可输出包含该值的第一字节和下一行的行地址。该系统可读取词典表的两行,并且可将它们写入输出过滤模块。输出过滤模块可使用字节地址和值的长度来找到并过滤与输入键对应的值。输出过滤模块可输出词典值,并且可将其写入输出缓冲器模块中的并行缓冲器中。输出缓冲器模块可聚合多个值,并且可将它们传送到fpga片外dram。[0131]作为示例,词典页可包括最大8字节宽度的值。因此,词典表的每行可包括8个字节。可在运行时期间构造索引存储器的内容。第一值的第一字节可在地址0处开始,并且该值可以是例如3字节长。下一值可在词典表中的地址3处开始,并且可以是4字节长。对于每个值,指针可以是所有先前长度的累加,并且长度表示以字节为单位的值的大小。地址生成器模块可使用字节地址来找到包含该值的行地址。为了获得行地址,地址生成器可将字节地址向右移位log2ms,其中ms可以是最大串长度。然后,其下一行的移位值将是包含该值的行地址。字节地址的[ms-1:0]位可在输出过滤模块中被使用,以从词典表读取的两行提取值。例如,对于某个值,字节地址参数和长度参数可分别是14和6。该值的第一字节可在地址14处开始。地址生成器可将字节地址向右移位三位(log28),这返回14>>3=1的行地址,换句话说,期望值在行1和行2中。该系统可从词典表读取行1和行2,并且可将它们写入输出过滤模块。字节地址的位[2:0]可用作从读取行的第一字节的偏移。该值可在字节偏移处开始,并且在长度字节之后结束。在该示例中,偏移量可等于6并且长度可等于6,这表示该值在字节6至11之间。输出过滤模块可从读取行提取值,并且可将其写入并行输出缓冲器中。该系统可使用多个并行缓冲器来提高输出带宽利用率,因此通过在每个周期中写入多个字节来提高性能。然而,因为值的长度变化,所以输出缓冲器模块可连结连续值并且可将它们写入p个并行缓冲器中,并且每当所有p个缓冲器中具有元素时,它可将p个字节传送到fpgadram中。[0132]数据库管理系统可经常使用词典编码以存储数据。该系统不仅可对整数和长数据类型的列进行排序,而且如果列以词典编码格式被存储,则还可支持对具有任何数据类型的列进行排序。词典编码可表示具有整数键的任何数据类型的值。该系统可使用通过利用排序内核和词典解码内核来对词典编码列进行排序的方法。表可被存储在存储系统中,并且列可被编码,将被排序的表基于该列是词典。注意,其余列可以以词典编码或以普通格式被存储。首先,该系统可读取主机服务器上的列的词典页:词典表的大小可显著小于原始列的大小。当唯一元素的数量(词典的大小)可显著小于列中的元素的数量时,数据库管理系统可使用词典编码。因此,考虑到阵列的大小和排序操作的非线性复杂性,对词典页进行排序可比对列进行排序花费显著更少的时间。因此,由于对通用处理器上的小阵列进行排序的效率,该系统可利用主机服务器来对词典表进行排序。主机机器可基于值对词典表进行排序,并将新键(在此被称为映射键)分配给排序后的值。主机服务器还可生成键映射表,键映射表可将原始词典编码的键映射到排序后的词典表的键。该系统可在通用排序流程中使用排序后的词典表和键映射表。该系统可使用键映射表将输入数据映射到映射键阵列。在该映射中,键的次序可与排序后的值的次序相同。例如,如果列以升序被排序,则较大键对应于在排序后的次序中较大的值。[0133]主机程序可从存储系统读取词典页、对词典表进行排序、生成键映射表、并且将排序后的词典表和键映射表二者传送到fpgadram。fpga可直接从存储装置读取数据页,以消除通过主机服务器传送数据页的开销。该系统的通用排序方法可以是利用排序内核和词典解码器内核对具有任何数据类型的列进行排序的数据流,并且可使用混洗内核基于排序后的列对整个表进行排序。首先,该系统可加载键映射表,随后可在数据页中流式传输。然后,该系统可使用键映射表将输入键映射到映射键。该系统可启动该系统的排序内核以对映射键进行排序。因为映射键的次序可与排序后的阵列中的值的次序相同,所以对映射键进行排序可等同于对原始数据进行排序。该系统排序内核可对映射键阵列进行排序,并且可将其写入排序后的映射键阵列中。该系统可使用词典解码器内核将排序后的映射键阵列解码为原始数据类型的排序后的阵列。[0134]作为示例,考虑一列字符串。字符串列可被词典编码,并且作为{0,2,4,1,3}被存储在存储设备中,词典页可与数据页一起被存储。注意,在该示例中,为了简单起见,小列被使用,然而,在现实世界应用中,数据页大小可显著大于词典页。该系统可卸载对词典页的排序,并且可向主机服务器生成键映射表。主机可传送两个表,并且可将它们发送到fpgadram。在该示例中,该系统可按升序对数据页进行排序。例如,原始词典编码后的数据可将字符串“usa”映射到键0,但是在对词典表进行排序之后,字符串“usa”可以是所有值的最后一个元素。键映射表可将键0映射到映射键4,这表示与小于4的任何键对应的值可在以原始数据类型的排序后的数据中较早出现。该系统可读取数据,并且可将数据映射到映射键阵列中。该系统随后可对映射键阵列进行排序,并且可将数据存储到排序后的映射键阵列中。该系统可使用排序后的词典表将排序后的映射键阵列解码为原始数据类型。例如,如上所述,原始词典页中的键0可对应于词典值“usa”。由于当数据被排序时ꢀ“usa”可能最后出现,因此该系统可将键0映射到映射键4。然后,在排序后的映射键阵列中,元素4成为最后一个元素。该系统可对排序后的映射键阵列进行解码,并且最后一个元素可被解码为字符串“usa”。[0135]公开的实施例提供了优于现有技术的技术优点。通过使用加速器,词典解码可更接近数据来执行,这可减少主机处理器上的负载,并且减少将在存储装置与主机处理器之间发送的数据量。此外,通过使加速器可配置为与任何词典一起使用,加速器可简单地通过加载新词典页并调整编码值和解码值的宽度而被重新使用。[0136]下面的讨论意在提供对其中可实现公开的特定方面的一个或多个合适的机器的简要、总体描述。一个或多个机器可至少部分地通过来自常规输入装置(诸如,键盘、鼠标等)的输入以及通过从另外的机器接收的指令、与虚拟现实(vr)环境的交互、生物特征反馈或其它输入信号而被控制。如在此所使用的,术语“机器”意在广泛地包含单个机器、虚拟机或者通信地结合的一起操作的机器、虚拟机或装置的系统。示例性机器包括计算装置(诸如,个人计算机、工作站、服务器、便携式计算机、手持装置、电话、平板计算机等)以及运输装置(诸如,私人或公共交通工具(例如,汽车、火车、出租车等))。[0137]一个或多个机器可包括嵌入式控制器(诸如,可编程或不可编程逻辑器件或阵列、专用集成电路(asic)、嵌入式计算机、智能卡等)。一个或多个机器可利用至一个或多个远程机器(诸如,通过网络接口、调制解调器或其它通信结合)的一个或多个连接。机器可通过物理网络和/或逻辑网络(诸如,内联网、互联网、局域网、广域网等)的方式来互连。本领域技术人员将理解,网络通信可利用各种有线和/或无线短距离或长距离载波和协议,包括:射频(rf)、卫星、微波、电气和电子工程师协会(ieee)802.11、光学、红外、电缆、激光等。[0138]本公开的实施例可通过参照或结合相关联的数据来描述,该相关联的数据包括函数、程序、数据结构、应用程序等,该相关联的数据在被机器访问时使得机器执行任务或者定义抽象数据类型或低级硬件上下文。相关联的数据可被存储在例如易失性存储器和/或非易失性存储器(例如,ram、rom等)中,或者被存储在其它存储装置和它们相关联的存储介质中,其它存储装置和它们相关联的存储介质包括硬盘驱动器、软盘、光学存储设备、磁带、闪存、记忆棒、数字视频盘、生物存储设备等。相关联的数据可以以包、串行数据、并行数据、传播信号等的形式在包括物理网络和/或逻辑网络的传输环境上被传输,并且可以以压缩格式或加密格式被使用。相关联的数据可在分布式环境中被使用,并且被本地地和/或远程地存储以用于机器访问。[0139]公开的实施例可包括有形的非暂时性机器可读介质,有形的非暂时性机器可读介质包括可由一个或多个处理器执行的指令,该指令包括用于执行如在此所述的公开的元件的指令。[0140]以上描述的方法的各种操作可由能够执行操作的任何合适的装置(诸如,各种硬件和/或一个或多个软件组件、电路和/或一个或多个模块)来执行。软件可包括用于实现逻辑功能的可执行指令的有序列表,并且可以以任何“处理器可读介质”来实现,以被指令执行系统、设备或装置(诸如,单核或多核处理器或包含处理器的系统)使用或者结合指令执行系统、设备或装置(诸如,单核或多核处理器或包含处理器的系统)来使用。[0141]结合在此公开的实施例描述的方法或算法和功能的块或步骤可直接以硬件、以由处理器执行的软件模块、或以二者的组合来实现。如果以软件来实现,则功能可作为一个或多个指令或代码被存储在有形的非暂时性计算机可读介质上或通过有形的非暂时性计算机可读介质发送。软件模块可驻留在随机存取存储器(ram)、闪存、只读存储器(rom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、寄存器、硬盘、可移动盘、cdrom或本领域已知的任何其它形式的存储介质中。[0142]已经参照示出的实施例描述和示出公开的原理,将认识到,示出的实施例可在不脱离这样的原理的情况下在布置和细节上被修改,并且可以以任何期望的方式进行组合。此外,尽管前述讨论已经集中在特定实施例上,但是其它配置被预期。具体地,尽管在此使用了诸如“根据公开的实施例”等的表述,但是这些短语意味着总体上涉及实施例可能性,而不意在将公开限制为特定实施例配置。如在此所使用的,这些术语可涉及可组合到其它实施例中的相同的或不同的实施例。[0143]前述的说明性实施例不应被解释为限制其公开。尽管已经描述了一些实施例,但本领域技术人员将容易理解,在实质上不脱离本公开的新颖教导和优点的情况下,许多修改对那些实施例是可行的。因此,所有这样的修改意在被包括在如在权利要求中限定的本公开的范围内。[0144]因此,鉴于在此描述的对实施例的广泛的各种置换,本具体实施方式和所附材料意在仅是说明性的,并且不应被视为限制公开的范围。因此,公开所要求权利的是可落入所附权利要求及其等同物的范围和精神内的所有这样的修改。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1