通过近数据处理的内存数据库(IMDB)加速的制作方法

文档序号:33047735发布日期:2023-01-24 22:47阅读:49来源:国知局
通过近数据处理的内存数据库(IMDB)加速的制作方法
通过近数据处理的内存数据库(imdb)加速
1.相关申请的交叉引用
2.本技术要求于2021年7月19日提交的序号为63/223,543的美国临时专利申请和于2021年10月29日提交的序号为17/515,379的美国专利申请的权益,它们通过引用并入本文以用于所有目的。
技术领域
3.本公开一般涉及数据库,更具体地,涉及使用近数据处理来加速各种数据库查询。


背景技术:

4.一些数据库查询可能涉及存储在处理器高速缓存中的数据:也就是说,高速缓存中的数据可能已经被预先加载并在以后的数据库查询中被重用。但是一些数据库查询可能只考虑数据一次。对于这种查询,将数据加载到处理器高速缓存中,仅在此之后很快丢弃该数据,可能是对高速缓存的低效使用。此外,在可以将数据加载到处理器高速缓存之前,可能需要从处理器高速缓存中驱逐一些其他数据。如果选择驱逐的数据被用于以后的数据库查询,则该数据可能会再次被加载到处理器高速缓存中,从而导致该查询的更慢响应。
5.仍然需要在高效使用高速缓存的同时处理查询,并且不会对其他处理产生不利影响。


技术实现要素:

6.本公开的实施例包括支持内存数据库(in-memory database,imdb)处理的加速器。加速器可以从应用接收请求,从数据库加载数据,并并行地对数据执行命令,之后可以将结果返回给应用。
附图说明
7.下面描述的附图是如何实施本公开的实施例的示例,并且不旨在限制本公开的实施例。本公开的各个实施例可以包括在特定附图中未示出的元件和/或可以省略在特定附图中示出的元件。附图旨在提供说明,并且可能没有按比例绘制。
8.图1示出根据本公开的实施例的包括支持内存数据库(imdb)命令的加速器的系统。
9.图2示出根据本公开的实施例的图1的机器的细节。
10.图3示出根据本公开的实施例的由图1的应用、图1的加速器设备驱动器和图1的加速器执行的操作。
11.图4示出根据本公开的实施例的图3的片上存储器的细节。
12.图5示出根据本公开的实施例的可以存储在图4的存储器单元中的值的细节。
13.图6示出根据本公开的实施例的图1的加速器的细节。
14.图7示出根据本公开的实施例的使用图1的加速器来支持imdb处理的示例过程的
流程图。
15.图8a示出根据本公开的实施例的使用图1的加速器来支持imdb处理的示例过程的替代流程图。
16.图8b继续根据本公开的实施例的使用图1的加速器来支持imdb处理的示例过程的替代流程图。
17.图9a示出根据本公开的实施例的将数据从图1的数据库加载到图4的存储器中的示例过程的流程图。
18.图9b继续根据本公开的实施例的将数据从图1的数据库加载到图4的存储器中的示例过程的流程图。
具体实施方式
19.现在将详细参考本公开的实施例,其示例在附图中示出。在以下详细描述中,阐述了许多具体细节,以使得能够彻底理解本公开。然而,应当理解,本领域普通技术人员可以在没有这些具体细节的情况下实践本公开。在其他实例中,没有详细描述公知的方法、过程、组件、电路和网络,以免不必要地模糊实施例的各方面。
20.应当理解,尽管术语第一、第二等可以在本文中用来描述各种元件,但是这些元件不应被这些术语所限制。这些术语仅用于区分一个元件和另一个元件。例如,在不脱离本公开的范围的情况下,第一模块可以被称为第二模块,并且类似地,第二模块可以被称为第一模块。
21.本文公开的描述中使用的术语仅用于描述特定实施例的目的,并不旨在限制本公开。如在本公开的描述和所附权利要求中所使用的,单数形式的“一”、“一个”和“该”也旨在包括复数形式,除非上下文清楚地另有指出。还应理解,本文使用的术语“和/或”是指并且包含一个或多个相关列出项目的任何和所有可能组合。还将理解,术语“包括”和/或“包含”在本说明书中使用时,指定所陈述的特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其组的存在或添加。附图的组件和特征不一定按比例绘制。
22.数据库查询可以采取几种不同的形式。一些查询可能预期快速响应:例如,处理事务的查询。其他查询可能预期更长时间:例如,查询数据库以定位与搜索标准匹配的条目。搜索数据库的查询通常不会受益于高速缓存:数据可能会从存储器被移动到高速缓存中,被访问一次然后被丢弃。这种顺序导致低效的高速缓存使用,因为可能受益于高速缓存的其他数据可能会被丢弃。此外,将数据移入和移出高速缓存所涉及的处理可能会对预期快速响应的查询产生负面影响,从而影响涉及数据库的其他处理。
23.本公开的实施例通过将一些数据库查询的处理卸载到近数据处理来解决这些问题。通过在数据附近处理这种查询,可以避免主机处理器中高速缓存的低效使用。此外,通过在数据附近处理这种查询,主机处理器可以自由地处理其他数据库请求。此外,近数据处理能够提供对数据库的并行操作,这可以比主机处理器可以提供的更快地产生查询结果。作为结果,主机处理器能够更快地响应延迟敏感请求。
24.图1示出根据本公开的实施例的包括支持内存数据库(imdb)命令的加速器的系统。在图1中,机器105(也可以称为主机、主机机器、主机计算机、主机系统、计算机或系统)
可以包括处理器110(也可以称为主机处理器)、存储器115(也可以称为主机存储器)和存储设备120。处理器110可以是任何种类处理器。(为了便于说明,处理器110以及下面讨论的其他组件被示出在机器外部:本公开的实施例可以在机器内包括这些组件。)虽然图1示出单个处理器110,但是机器105可以包括任何数量的处理器,每个处理器可以是单核或多核处理器,每个处理器可以实施精简指令集计算机(risc)架构或复杂指令集计算机(cisc)架构(以及其他可能性),并且可以以任何期望的组合混合。
25.处理器110可以耦接到存储器115。存储器115可以是任何种类的存储器,诸如闪存、动态随机存取存储器(dram)、静态随机存取存储器(sram)、永久随机存取存储器、铁电随机存取存储器(fram)或非易失性随机存取存储器(nvram),诸如磁阻随机存取存储器(mram)等。存储器115也可以是不同存储器类型的任何期望的组合,并且可以由存储器控制器125管理。存储器115可以用于存储可被称为“短期”的数据:即,不预期被长时间段存储的数据。短期数据的示例可以包括临时文件、由应用在本地使用的数据(其可能已经从其他存储位置复制)等。
26.处理器110和存储器115还可以支持操作系统,诸如操作系统130,在该操作系统下可以运行各种应用。这些应用可以发出从存储器115或存储设备120读取数据或向其写入数据的请求(也可以称为命令)。例如,应用135可以是在数据库140上执行诸如更新和查询的操作的应用。可以使用设备驱动器145来访问存储设备120。虽然图1将存储器115示出为包括数据库140,但是本公开的实施例可以将数据库140存储在存储设备120上,或者甚至远离机器105。虽然图1使用通用术语“存储设备”,但是本公开的实施例可以包括可以受益于数据质量度量的使用的任何存储设备格式,其示例可以包括硬盘驱动器和固态驱动器(ssd)。下文中对“ssd”或任何其他特定形式的存储设备的任何引用应当被理解为包括本公开的这些其他实施例。此外,虽然图1示出一个存储设备120,但是本公开的实施例可以包括任何数量(一个或多个)的存储设备。
27.最后,机器105可以包括加速器150。加速器150可被设计成支持对内存数据库(imdb)(有时称为imdb系统(imdbs)或imdb管理系统(imdbms))(诸如数据库140)的操作。这样,加速器150可以被认为是近存储器加速器。加速器150可以被设计成使用任何期望的总线:例如,存储器总线或外围组件互连快速(pcie)总线。
28.为了支持加速器150内的操作,加速器145可以包括加速器存储器155和加速器存储器控制器160。加速器存储器155和加速器存储器控制器160可以分别类似于存储器115和存储器控制器125,但是可以被加速器150用于加速器150内的操作。因此,例如,加速器存储器155可以是dram,并且可以比存储器115更小、在大小上与存储器115相当、或者比存储器115更大。通过使用加速器存储器155,加速器150能够访问来自数据库140的数据,而不影响由处理器110或应用135发出的其他命令。应用设备驱动器165可以用于将数据(诸如数据库140中要存储在加速器150中的部分)加载到加速器存储器155中。
29.在本公开的一些实施例中,应用135可以在存储器115和加速器存储器155之间“划分”数据库140。该划分可以基于预期被加速器150使用的数据来确定。也就是说,数据库140中预期被加速器150使用的数据可以被存储在加速器存储器155中,而不预期被加速器150使用的数据可以被存储在存储器115中。处理器110可以使用传统的加载/存储命令来访问数据库140在存储器115中的部分。另一方面,加速器150中的数据库140的部分可以由处理
器110使用传统的加载/存储命令来访问,但是加速器150也可以在数据库140的部分上执行命令。在本公开的一些实施例中,不是在存储器115和加速器存储器155之间划分数据库140,而是存储在加速器存储器155中的数据库140的部分可以是存储器115中的数据的副本(尽管在本公开的这些实施例中,保持存储器115和加速器150中的数据同步可能是重要的)。
30.在本公开的其他实施例中,加速器150可以以适应在其中存储数据库140的格式来实施。如果数据库140存储在存储器115中,加速器150可以被实施为类似于存储器115的存储器模块(其可以将加速器150定位在数据库150附近)。例如,如果存储器115被实施为双列直插式存储器模块(dual in-line memory module,dimm),因为这是机器105支持的格式,那么加速器150也可以被实施为dimm。可替代地,如果数据库140存储在存储设备120中,那么加速器150可以被实施为连接到存储设备120的电路(例如,连接到与连接处理器110和存储设备120相同的总线,例如pcie)。或者,加速器150可以被实施为存储设备120的一部分。注意,取决于实施方式,加速器设备驱动器165可以与一个或多个其他设备驱动器(诸如设备驱动器145)组合。下面参考图3和图6进一步讨论加速器150。
31.在典型操作中,处理器110可以对数据库140执行操作。这些操作可以涉及将数据从数据库140加载到处理器110中的页面高速缓存中,之后可以在页面高速缓存上执行这些操作。但是,如果页面高速缓存中的数据不被再次需要,那么数据被加载到页面高速缓存中仅用于一次操作,这样并不高效。此外,因为将数据加载到页面高速缓存中可能涉及驱逐已经在页面高速缓存中的一些其他数据,所以最终结果可能是从页面高速缓存中驱逐可能被再次使用的数据,只是为了给可能不被再次需要的数据腾出空间。通过驱逐可能被再次使用的数据,使用该数据的请求可能必须等待数据被重新加载到页面高速缓存中,从而减慢此类请求。加速器150可以支持卸载请求,以避免对页面高速缓存和可以由处理器110处理的其他操作的这种影响。
32.图2示出根据本公开的实施例的图1的机器105的细节。在图2中,通常,机器105包括一个或多个处理器110,处理器110可以包括存储器控制器125和时钟205,它们可以用于协调机器的组件的操作。处理器110还可以耦接到存储器115,作为示例,存储器115可以包括随机存取存储器(ram)、只读存储器(rom)或其他状态保存介质。处理器110还可以耦接到存储设备120和网络连接器210,网络连接器210可以是例如以太网连接器或无线连接器。处理器110还可以连接到总线215,用户接口220和可以使用i/o引擎225管理的输入/输出(i/o)接口端口以及其他组件可以附接到总线215。
33.图3示出根据本公开的实施例的由图1的应用135、图1的加速器设备驱动器165和图1的加速器150执行的操作。在图3中,示出应用135、加速器存储器155、数据库140、加速器设备驱动器165和加速器150。这些元件与上面参考图1讨论的相同(尽管图3所示的数据库140可以是加速器存储器155中的数据库140的部分,而不是数据库140的全部)。
34.加速器150可以包括输入缓冲器305和/或输出缓冲器310、解压缩器315、计算引擎320和输出存储器325。加速器还可以包括图3中未示出的其他元件:例如,输入高速缓存或下面参考图6进一步讨论的元件。
35.在图1的机器105中,应用135可以发出请求(如图3中的圆圈1所示)。该请求可以是将处理从图1的处理器110卸载到加速器150的请求。该请求可以标识应用135希望加速器
150执行的命令:该命令可以被标识为请求的参数,或者由过程调用本身来标识。例如,该请求可以利用加速器设备驱动器165提供的应用编程接口(api)。该请求还可以指定要从数据库140访问的数据。
36.加速器设备驱动器165可以是支持加速器150的设备驱动器。加速器设备驱动器165可以不同于图1的设备驱动器145,因为前者可以支持加速器150,而后者可以支持图1的存储设备120。但是在本公开的一些实施例中,如果被设计成支持加速器150和诸如图1的存储设备120的一些其他设备两者,则加速器设备驱动器165可以与诸如图1的设备驱动器145的一些其他设备驱动器组合。在发出请求后,应用135可以进入睡眠,直到请求完成。
37.在接收到来自应用135的请求后,加速器设备驱动器165可以从图1的处理器110的高速缓存刷新可能被加速器150使用(作为输入或者作为输出)的数据(如图3中的圆圈2所示)。可以执行这些操作,以确保加速器150使用最新的数据(处理器110中的高速缓存可以比数据库140具有更新的数据),并防止处理器110读取将被来自加速器150的结果替换的数据。注意,在本公开的一些实施例中,当新数据被提供给这些元件时,输入缓冲器305、输出缓冲器310和/或输出存储器325可以被完全重写,从而消除擦除输入缓冲器305、输出缓冲器310或输出存储器325的需要;在本公开的其他实施例中,这些元件也可以被擦除以清除它们的过时数据。加速器设备驱动器165然后可以将请求分配给加速器150,将数据从数据库140加载到输入缓冲器310中,并且如果需要,可以将请求转换成可以由加速器150执行的命令(如图3中的圆圈3所示)。例如,加速器设备驱动器165可以支持指定应用135可以如何请求加速器150提供支持的api。所使用的特定api或api的特定参数可以标识要由加速器150执行的特定操作:加速器设备驱动器165然后可以将请求转换成要由加速器150执行的特定命令,并且可以以加速器150认识的形式指定该命令。
38.将数据加载到输入缓冲器310中还可以包括在需要这样的数据之前将数据从数据库140预取到输入缓冲器310中。通过预取数据,加速器150可以花费尽可能多的时间来处理命令,而不是等待数据被加载。还要注意,如下面参考图4所讨论的,加速器150可以以“乒乓”方式使用两个或更多个存储器组(memory bank)进行操作,使得可以在一个存储器组上执行命令,同时另一个存储器组可以加载用于处理的其他数据。
39.当数据从数据库140被加载到输入缓冲器305中时,可能只有数据库140的部分被加载到加速器150中。例如,数据库140可能包括兆字节(mb)或千兆字节(gb)的数据,但是输入缓冲器305和/或输出缓冲器310可能限于更小的容量,比如64字节、128字节或4千字节(kb)。(可以以任何期望的大小为单位从数据库140读取数据:64字节、128字节和4kb在这里仅用作示例大小。)由于输入缓冲器305和/或输出缓冲器310可能太小而无法存储整个数据库140,所以一次只能将数据库140的部分加载到加速器150中。一旦特定部分已经被处理,新的部分可以被加载到输入缓冲器305和/或输出缓冲器310中用于处理。加速器150然后可以以这种方式分别处理每个部分,然后在最后提供累积结果。
40.但是数据库数据可能是高度并行的。即使以小单位从数据库140读取数据,并行操作也是可能的。例如,如果数据库140中的值每个仅为四字节,则从数据库140读取的64字节的数据可以包含16个值,从数据库140读取的4kb的数据可以包含1024个值,每个值可以与特定的操作相关。
41.数据库140可以是压缩数据库。通过对数据库140进行压缩,可以减少数据所需的
存储量。例如,考虑这样的数据库,其中单个值用于数据库的大部分,其余部分由各种其他值使用。这种数据库可以受益于稀疏压缩。在稀疏压缩中,可以使用位向量来表示哪些值被压缩以及哪些值没有被压缩。对于稀疏压缩,可以使用单个位来表示最频繁值;然后,其余值可以被正常存储(或者使用一些其他压缩算法)加上一个附加位(该位指示该值没有被稀疏压缩)。作为这样有什么益处的粗略示例,考虑存储1,000,000个值的数据库,每个值需要四字节,这些值中的90%(即,900,000个值)都是单个值。未压缩地存储该数据库将需要4,000,000字节(1,000,000个值中的每个值需要四字节)。但是,压缩地存储该数据库将需要1,000,000个值的1位来存储位向量,加上4字节用于100,000个“不频繁”值:总共125,000字节(1,000,000位除以8位每字节)加上400,000字节,或525,000字节,大约减少了87%的存储需求。
42.但是如果数据库140被压缩,则可能需要解压缩来访问实际数据。输入缓冲器305可以用于存储来自数据库140的压缩数据330;解压缩器315然后可以用于解压缩压缩数据330,并将解压缩(或未压缩)数据335存储在输出缓冲器310中。解压缩器315如何工作的细节可以取决于用于压缩数据库140的特定压缩算法。
43.继续稀疏压缩的示例,解压缩数据库140可以涉及管理来自多个流的数据。稀疏压缩数据可以包括三个向量:位图向量(如上所述,其标识哪些条目使用压缩值以及哪些没有使用)、非零向量(其可以存储不是数据库140中最频繁值的值)、以及位置向量(其可以指示非零值存储在哪里)。非零向量和位置向量可以被解包以构造非零表,该表然后可以由稀疏查找单元基于位图向量进行使用:如果位图向量指示特定值被压缩,则可以使用最频繁值;否则,可以从非零表读取适当的值。
44.这三个向量可以根据需要从数据库140读取:不能保证提供这些向量的流是同步的。因此,确保向量保持同步可能是重要的,并且可以仅在需要时从流中读取数据,而不是以相同的速率或一有用于新数据的空间就读取所有三个流。
45.解压缩器315可以采用任何期望的形式。例如,解压缩器315可以是现场可编程门阵列(fpga)、专用集成电路(asic)、中央处理单元(cpu)、图形处理单元(gpu)、通用gpu(gpgpu)或张量处理单元(tpu),仅列举一些可能性。
46.除了注意加速器150可以支持任何数量(零个或更多个)的解压缩器315,并且因此能够解压缩使用各种不同的压缩算法压缩的数据库之外,这里不进一步讨论解压缩器315。
47.在其中数据库140未被压缩的本公开的实施例中,解压缩器315可以被旁路或省略,并且输入缓冲器305和输出缓冲器310可以是相同的缓冲器。在本文档的其余部分中,如果数据库140没有被压缩,对输出缓冲器310的引用可以理解为也引用输入缓冲器305。
48.一旦数据已经被解压缩(如果需要),则计算引擎320可以执行卸载操作(如图3中的圆圈4所示)。计算引擎320可以采取任何期望的形式:例如,计算引擎320可以是fpga、asic、cpu、gpu、gpgpu或tpu,仅列举一些可能性。计算引擎320可以是“硬连线的”(在某种意义上,计算引擎320可以不被重新配置)以执行特定命令,或者计算引擎320可以支持更通用的命令,并且能够从应用135下载“程序”(即,命令序列)。
49.计算引擎320可以包括片上存储器340,其可以是计算引擎320执行所请求的命令的地方。计算引擎可以将数据从输出缓冲器310加载到片上存储器340中以执行命令,之后可以将结果输出到输出存储器325。片上存储器340可以是用于计算引擎320的相对快速的
存储器(与加速器存储器155或输出缓冲器310相比)。作为结果,片上存储器340可能比用于加速器存储器155或输出缓冲器310的存储器更昂贵,并且可以以比加速器存储器155和/或输出缓冲器310更少的数量来实施。但是在本公开的一些实施例中,计算引擎320可以对输出缓冲器310或加速器存储器155中的数据进行操作。
50.正如所描述的,一旦计算引擎320已经执行了命令,结果可以被存储在输出存储器325中。加速器150然后可以向加速器设备驱动器165报告卸载完成(如图3中的圆圈5所示)。加速器设备驱动器165然后可以唤醒应用135(如图3中的圆圈6所示)。应用135然后可以尝试从页面高速缓存345访问结果(如图3中的圆圈7所示)。在尝试访问页面高速缓存345后,加速器150或加速器设备驱动器165可以通过例如使用来自加速器150的直接存储器访问,将数据从输出存储器325加载到页面高速缓存345中(如图3中的圆圈8所示),之后可以将结果从页面高速缓存345返回到应用135(如图3中的圆圈9所示)。
51.以上讨论将输出存储器325引用为“存储器”,但是本公开的实施例可以包括用于请求结果的任何形式的存储。使用术语“输出存储器”不应仅限于存储器:例如,输出存储器325可以是某种高速缓存或非易失性存储器。以上描述还暗示解压缩器315可以不同于计算引擎320,但是本公开的实施例可以让计算引擎320执行解压缩器315的功能,而不是包括解压缩器315作为单独的组件。
52.在图3中,可以存储在图1的存储器115中或者是图1的处理器110的一部分的页面高速缓存345被用作当不支持对输出存储器325或者加速器150的其他存储器的直接访问时向应用135提供对结果的访问的机制。也就是说,即使当应用135不能访问输出存储器325时,应用135也能够访问图1的存储器115或图1的处理器110,但是如果应用135可以直接访问输出存储器325,则访问来自页面高速缓存345的结果、将结果移动到页面高速缓存345、然后返回来自页面高速缓存345的结果的操作可以减少到仅仅是应用135对输出存储器325的直接访问。
53.如上所述,应用135可以涉及对数据库140的不同类型的操作。例如,在数据库140上执行的一些操作可以包括在线事务处理(online transaction processing,oltp)和在线分析处理(online analytical processing,olap)。例如,考虑商业网站。该网站可以允许用户搜索特定的物品,并购买所选物品。搜索满足特定标准的物品可以是olap的一个示例;购买所选物品可以是oltp的一个示例。oltp可以涉及数据库140中(相对)少量的条目。例如,继续商业网站的示例,oltp可能涉及减少数据库中几个物品的计数,以及处理付款。另一方面,olap可能需要检查数据库140中(相对)大量的条目(以及潜在的所有条目)来识别满足用户指定的搜索标准的条目。例如,如果用户对锤子感兴趣,可能有必要检查数据库140中的每个条目,以确定哪些条目是用于锤子的,并且哪些不是。使用数据库140中的各种关键字可以缩小该搜索的范围;但是即使这样,也可能需要考虑(相对)大量的条目来完成搜索。
54.虽然一般来说所有的操作都被预期快速完成,但是实践中一些操作被预期比其他操作更快地完成。例如,通过网站搜索满足特定搜索标准的产品(诸如搜索锤子产品)可能被预期比购买所选物品的操作花费更长的时间。毕竟,搜索数据库140以找到所有锤子可能被预期花费一些时间;当物品已经全部被选择并且已知有存货时,完成购买可以被预期快速完成。
55.oltp操作可能涉及对相同数据的多个操作。例如,在选择要购买的特定物品之前,用户可能已经在网站上查看了关于该物品的细节。因此,细节可能已经被加载到图1的处理器110的高速缓存中。另一方面,olap操作可能产生许多与用户无关的条目,因此不会被查看。这种数据可能已经被加载到处理器110的高速缓存中,但不是感兴趣的,并且可能在用户没有更仔细地查看的情况下被丢弃。更糟糕的是,如果被加载以执行数据库140的搜索的数据导致与oltp操作相关的数据从图1的处理器110中的高速缓存被驱逐,则那个数据可能被再次加载到图1的处理器110的高速缓存中,从而减慢oltp操作。因此,图1的处理器110中的高速缓存的低效使用可能不仅影响olap操作,还影响oltp操作。
56.oltp操作可以受益于由图1的处理器110处理。但是加速器150可以大约与图1的处理器110一样高效地执行olap操作。事实上,加速器150能够比图1的处理器110更高效地处理olap操作。例如,加速器150可以考虑并行性来设计,因此与图1的处理器110相比,能够在相同数量的周期内执行更多的操作。
57.从加速器150的角度来看,有两种形式的并行性可以考虑。第一种形式的并行性是时间并行性,其反映了可以管理数据以隐藏与从数据库140获取数据相关联的延迟的概念。例如,通过将片上存储器340组织成多个存储器组,可以将数据加载到一个存储器组中,同时在另一个存储器组中正在处理数据。第二种形式的并行性是空间并行性,其反映了当从数据库140读取数据时,该数据可以包括命令可以应用到的多个值的概念。空间并行性可以是数据库140可以被组织成将相关数据分组在一起的形式(诸如表格)并且因此从数据库140读取的数据中可能有许多感兴趣的值的事实的结果。
58.图4示出根据本公开的实施例的图3的片上存储器340的细节。在图4中,示出片上存储器340。片上存储器340被示出为包括两个存储器组405-1和405-2(它们可以统称为存储器组405)。虽然图4将片上存储器340示出为包括两个存储器组405,但是本公开的实施例可以支持片上存储器340中任意数量的存储器组。存储器组405可以各自存储多个存储器单元。图4将存储器组405-1示出为包括存储器单元410-1至410-8,并且将存储器组405-2示出为包括存储器单元410-9至410-16。存储器单元410-1至410-16(可以统称为存储器单元410)可以是任何类型的存储器单元。例如,图4将存储器单元410示出为块ram(bram),但本公开的实施例也可以使用其它存储器单元。
59.通过利用两个存储器组405,存储器310可以像“乒乓缓冲器”一样使用。也就是说,在数据正在被加载到存储器组405-2中时,可以在存储器组405-1上执行操作。但是此外,可以在每个存储器单元410上并行执行命令。例如,回想上面涉及在图1的数据库140中搜索作为锤子的条目的示例。每个存储器单元410可以存储来自数据库140的一部分(未压缩)数据,并且每个存储器单元410可以查看不同的条目(即,该部分(未压缩)数据内的不同值)以查看该条目是否包括锤子。因此,每个存储器单元410可以存储其自己的来自数据库140的(未压缩)数据的副本,但是可以处理来自该数据的不同条目。可替代地,存储器单元410-1至410-16可以同时全部加载有来自图1的数据库140的数据,并且可以并行处理数据。
60.暂时参看图5,图5示出根据本公开的实施例的可以存储在图4的存储器单元410中的值的细节。存储器单元410可以存储例如64字节的数据,示出为值505-1至505-4(可以统称为值505)。(存储器单元410可以存储比64字节更多或更少的数据量,并且每个值可以大于或小于一字节:这些大小仅仅是为了示例的目的。)该相同的64字节的数据可以存储在图
4中的每个存储器单元410中。但是图4中的每个存储器单元410可以对不同的值进行操作。例如,图4的存储器单元410-1可以对值505-1进行操作,图4的存储器单元410-2可以对值505-2进行操作,图4的存储器单元410-3可以对值505-3进行操作,等等。
61.回到图4,可以注意到,图4示出总共16个存储器单元410,而每个存储器单元被描述为潜在地存储64个不同的值。在这种情况下,可以在每个存储器单元上多次执行命令,以考虑每个存储器单元中的所有值。例如,在每个存储器单元410中具有总共64个图5的值505并且存储器310中具有16个存储器单元410的情况下,可以对每个存储器单元中的不同值执行命令四次(64
÷
16=4)。本公开的实施例可以包括任意数量的存储器单元和存储在每个存储器单元中的任意数量的值,这可以导致每存储器单元变化数量的命令来考虑所有值。
62.有许多不同的方法来确定使用各个存储器单元处理哪些值。继续其中每个存储器单元410在16个存储器单元410的每一个中存储64个图5的值505的示例,每个存储器单元410可以负责四个值的连续组。例如,存储器单元410-1可以负责处理图5的前四个值505,存储器单元410-2可以负责处理图5中的第二批四个值505,以此类推。或者,每个存储器单元410可以负责处理其数字具有模16的特定值的值。例如,存储器单元410-1可以负责处理值0、16、32和48(它们模16均具有余数零),存储器单元410-2可以负责处理值1、17、33和49(它们模16均具有余数一),以此类推。本公开的实施例还可以支持确定哪些存储器单元410负责处理来自数据的图5的特定值505的其他方式。
63.虽然图4将存储器310示出为包括组织成两个存储器组405的16个存储器单元410,但本公开的实施例可以包括任何数量(一个或多个)的存储器组405,其中每个可以包括任何数量(一个或多个)的存储器单元410。虽然存储器310可以以硬件配置,如上所述,数据可以保留在存储器单元410中,以支持命令对每个存储器单元410中的多个值执行。以这种方式,图1的加速器150可以被配置为以任何期望的粒度级别处理从图1的数据库140读取的数据,并且从每个存储器单元410处理任何数量的值,直到所有值都被处理。
64.虽然图4集中于片上存储器340,但是本公开的一些实施例可以使图3的计算引擎320在图1的加速器存储器155或图3的输出缓冲器310上操作。在本公开的这些实施例中,类似于片上存储器340的组织,图1的加速器存储器155或图3的输出缓冲器310也可以被组织成存储器组,以实现并行操作,并且可以对数据内的多个值执行操作。
65.图6示出根据本公开的实施例的图1的加速器150的细节。在图6中,加速器150被示出为包括接收器605、输入缓冲器305、输出缓冲器310、解压缩器315、计算引擎320、输出存储器325和发送器610。输入缓冲器305、输出缓冲器310、解压缩器315、计算引擎320和输出存储器325的功能已经在上面参考图3进行了讨论,这里不再重复。
66.接收器605可以从图1的加速器设备驱动器165接收对加速器150执行命令的请求。接收器605还可以包括输入高速缓存以存储从图1的数据库140接收的数据,其可以用于其中加速器150不具有图1的相关加速器存储器155的本公开的实施例中。发送器610可以向图1的加速器设备驱动器165发送信号,以报告所请求的命令已经完成执行。发送器610还可以负责将结果从输出存储器325传送到图3的页面高速缓存345。
67.加速器150还可以包括擦除器615。擦除器615可以刷新输入高速缓存、擦除输入缓冲器305和/或输出缓冲器310,并且可以刷新输出存储器325。在其中输入缓冲器305、输出缓冲器310和/或输出存储器325中的数据可以被重写的本公开的实施例中,擦除器610可以
被省略,如虚线所示。
68.在上述本公开的实施例中,加速器150可以包括其自己的输入缓冲器305和/或输出缓冲器310,其可以与图1的机器105的图1的存储器115或图1的加速器存储器155分离。但是本公开的一些实施例可以支持组合图1的存储器115、加速器存储器155、输入缓冲器305和/或输出缓冲器310的图1的机器105和加速器150,以便呈现图1的机器105和加速器150各自能够支持更大量的存储器的画面。本公开的这些实施例可以使用高速缓存一致互连协议,诸如计算快速链接(compute expresscxl)协议,来向应用呈现组合的存储器。(计算快速链接是计算快速链接联盟公司的注册商标)。在本公开的这些实施例中,图1的加速器150可以从图1的存储器115和/或图1的加速器存储器155访问数据,而不是必须从输入缓冲器305和/或输出缓冲器310访问数据。
69.图7示出根据本公开的实施例的使用图1的加速器150来支持imdb处理的示例过程的流程图。在图7中,在块705处,图1的加速器150可以将数据从图1的数据库140加载到图4的第一存储器组405中。在块710处,图1的加速器150可以对来自图1的数据库140的数据执行命令。可以并行地而不是顺序地对图4的存储器组405中的图5的多个值505执行命令。最后,在块715处,图1的加速器150可以将数据从图1的数据库140加载到图4的第二存储器组405中。图1的加速器150可以与如在块710中对图4的第一存储器组405中的值执行命令并行地将数据加载到图4的第二存储器组405中。
70.图8a-图8b示出根据本公开的实施例的使用图1的加速器150来支持imdb处理的示例过程的替代流程图。图8a-图8b类似于图7,但是更一般。在图8a中,在块805处,图1的加速器设备驱动器165可以从图1的应用135接收对图1的加速器150对来自图1的数据库140的数据执行命令的请求。在块810处,图3的加速器设备驱动器165可以将请求转换成将由图1的加速器150执行的命令,其中该命令可以被提供给图1的加速器150。
71.在块815处,图6的擦除器615可以从图1的加速器150中刷新信息,诸如在图3的片上存储器340中。在块820处,图6的擦除器615可以擦除图3的输入缓冲器305和/或图3的输出缓冲器310。在块825处,图6的擦除器615可以擦除图3的输出存储器325。如上所述,在其中图3的片上存储器340、图3的输入缓冲器305、图3的输出缓冲器310或图3的输出存储器325中的数据可以被完全重写的本公开的实施例中,可以省略其擦除这些存储器,如虚线830所示。在块705处,图1的加速器150可以将数据从图1的数据库140加载到图4的存储器单元410中:例如,图4的存储器组405-1中的图4的存储器单元410-1至410-8。在块710处,图3的计算引擎320可以对图4的存储器单元410中的数据执行命令。
72.在块715处(图8b),图1的加速器150可以将数据加载到图4的其他存储器单元410中:例如,图4的存储器组405-2中的图4的存储器单元410-9至410-16。以这种方式,图3的片上存储器340可以像“乒乓”缓冲器一样使用,使得图3的计算引擎320能够对图4的一个存储器组405中的数据执行命令,同时将数据加载到图4的另一个存储器组405中。在块835处,图1的加速器150可以产生结果。在块840处,图1的加速器150可以将该结果存储在图3的输出存储器325中。在块845处,图3的加速器设备驱动器165可以信令通知图1的应用135命令已经被执行。在块850处,图1的加速器150可以接收从图3的输出存储器325访问结果的请求,并且在块855处,图1的加速器150可以将结果从图1的输出存储器325复制到图3的页面高速缓存345中。
73.图9a-图9b示出根据本公开的实施例的将数据从图1的数据库140加载到图4的存储器340中的示例过程的流程图。在图9a中,在块905处,如果图1的数据库140存储在图1的加速器存储器155中,则图1的加速器150可以从图1的加速器存储器155中的图1的数据库140复制数据。可替代地,在块910处,如果图1的数据库140存储在图1的存储器115或图1的加速器存储器155中,则图1的加速器150可以从图1的存储器115或图1的加速器存储器155中的图1的数据库140复制数据。可替代地,如果数据库140存储在图1的存储设备120中,则在块915处,图1的加速器150可以从图1的存储设备120中的图1的数据库140复制数据。不管从哪个源复制数据,数据都可以被复制到任何期望的目的地,该目的地可以包括图3的片上存储器340、图3的输入缓冲器305或图3的输出缓冲器310,以及其他可能性。
74.如果数据被压缩(在这种情况下,例如,数据可以被复制到输入缓冲器305中以用于解压缩),则在块920处(图9b),图3的解压缩器315可以解压缩数据(其可以被存储在图3的存储器305中),并且在块925处,图1的加速器150可以将解压缩的数据存储在图3的输出缓冲器310中。如虚线930所示,可以省略块920和925。最后,在块935处,图1的加速器150可以将数据从图3的输出缓冲器310复制到图3的片上存储器340中。注意,如果数据已经被复制到图3的片上存储器340中(例如,在图9a的块905、910或915中),则块935可以被省略,如虚线940所示。
75.在图7-图9b中,示出本公开的一些实施例。但是本领域技术人员将认识到,通过改变块的顺序、省略块或包括附图中未示出的链接,本公开的其他实施例也是可能的。无论是否明确描述,流程图的所有这些变化都被认为是本公开的实施例。
76.本公开的实施例可以加速稀疏解压缩,并且可以以同步的方式处理多个数据流。本公开的一些实施例可以包括新的预取、同步和解压缩算法。在本公开的一些实施例中,为了具有数据分析表达式(data analysis expression,dax)支持,设备驱动器可以执行高速缓存无效和/或直接存储器地址(direct memory address,dma)转换,以便支持主机软件应用。
77.本公开的实施例可以产生更好的系统资源利用率,并导致在线事务处理(oltp)工作负载的更低延迟和更好的总拥有成本(total cost of ownership,tco)。
78.诸如图1的加速器150的内存数据库(imdb)加速器可以在处理数据库大小的增长和实时分析查询方面发挥作用。异构计算可以克服中央处理单元(cpu)的限制:例如,通过避免cpu中高速缓存的抖动。imdb加速器可以采用并行架构,可以使处理更接近数据,并且可以提高资源利用率和tco。
79.在本公开的实施例中,imdb可以具有表现良好的访问模式,这可以对现有的cpu高速缓存层次结构造成挑战。在本公开的一些实施例中,可以实现近数据流处理,并且可以产生非冯诺依曼流处理器。本公开的实施例可以包括图1的加速器150,其可以利用数据中的并行性,并且可以从cpu卸载输入/输出(i/o)密集型操作。本公开的实施例通过减少来自在线分析处理(olap)流工作负载的cpu高速缓存抖动行为,可以减少系统oltp查询延迟,并且可以提供更好的系统资源利用率。
80.在本公开的一些实施例中,图1的加速器150可以用于卸载数据密集型olap操作,这可以减少cpu高速缓存抖动,并且可以导致olap查询的更低延迟。
81.本公开的实施例可以利用图1的加速器150,通过更靠近存储地处理数据来减少不
必要的数据移动。本公开的实施例可以包括支持并行处理架构的图1的加速器150。本公开的实施例还可以使用软件卸载接口,诸如应用编程接口(api)。利用并行架构和适当的软件/硬件设计,图1的加速器150的实施例可以超越现有的cpu。
82.本公开的实施例可以在数据附近执行面向吞吐量的操作,这可以提供比传统cpu计算架构更好的资源利用率。这种提高的资源利用率可以转化为更好的tco。
83.本公开的一些实施例可以认识到,图1的数据库140可以使用稀疏压缩算法来减少存储器占用。为了避免数据密集型解压缩(“查找”)操作的瓶颈,图1的加速器150的本公开的实施例可以使用并行架构来加速稀疏查找操作。本公开的一些实施例可以预取多个数据流,并通过基于硬件的集群同步方案使它们保持同步。此外,本公开的一些实施例可以包括软件卸载接口。
84.本公开的实施例可以包括图1的加速器150,用于利用图1的数据库140的并行性和数据布局的imdb流处理。本公开的实施例可以探索数据并行性,并且可以对多个数据元素执行相同的操作。在本公开的一些实施例中,硬件架构可以用数据复制来扩展,以支持空间和时间并行性。
85.本公开的一些实施例可以包括用于稀疏查找操作的大规模并行计算架构。本公开的一些实施例可以包括多个处理流之间的基于硬件的预取同步。本文公开的一些实施例可以包括卸载api,该卸载api管理数据库加速器(dba)硬件功能,如应用和dba之间的数据重新对准、将结果传送到主机的分散-聚集dma。
86.本公开的实施例提供了优于现有技术的技术优势。本公开的实施例可以实现各种数据库请求(诸如可能导致处理器高速缓存的抖动的请求)的近数据处理。即使是简单的请求,主机处理器也可能经历存储器受限的工作负载的瓶颈,因为数据移动的成本可能很高(至少在时间方面)。加速器可以包括来自数据库的数据的并行处理,从而导致对请求的更快处理,甚至可能比主机处理器的响应更快。此外,通过将特定请求卸载到加速器,主机处理器可以更快地处理其他数据库请求。
87.以下讨论旨在提供其中可以实施本公开的特定方面的一个或多个合适机器的简要一般描述。一个或多个机器可以至少部分地通过来自传统输入设备(诸如键盘、鼠标等)的输入、以及通过从另一个机器接收的指令、与虚拟现实(vr)环境的交互、生物反馈或其他输入信号来控制。如本文所使用的,术语“机器”旨在广泛地涵盖单个机器、虚拟机或可通信地耦接的机器、虚拟机或一起操作的设备的系统。示例性机器包括计算设备,诸如个人计算机、工作站、服务器、便携式计算机、手持设备、电话、平板电脑等,以及运输设备,诸如私人或公共运输,例如汽车、火车、出租车等。
88.一个或多个机器可以包括嵌入式控制器,诸如可编程或不可编程逻辑器件或阵列、专用集成电路(asic)、嵌入式计算机、智能卡等。一个或多个机器可以利用到一个或多个远程机器的一个或多个连接,诸如通过网络接口、调制解调器或其他可通信耦接。机器可以通过物理和/或逻辑网络(诸如内联网、互联网、局域网、广域网等)互连。本领域技术人员将理解,网络通信可以利用各种有线和/或无线短程或远程载波和协议,包括射频(rf)、卫星、微波、电气和电子工程师协会(ieee)802.11、光学、红外、电缆、激光等。
89.本公开的实施例可以通过参考或结合包括功能、过程、数据结构、应用程序等的相关数据(其在被机器访问时导致机器执行任务或定义抽象数据类型或低级硬件上下文)来
描述。相关数据可以存储在例如易失性和/或非易失性存储器(例如ram、rom等)中,或者存储在其他存储设备及其相关联的存储介质中,包括硬盘驱动器、软盘、光存储装置、磁带、闪存、记忆棒、数字视频盘、生物存储装置等。相关数据可以以分组、串行数据、并行数据、传播信号等的形式在包括物理和/或逻辑网络的传输环境中传递,并且可以以压缩或加密格式使用。相关数据可以在分布式环境中使用,并且本地和/或远程存储以供机器访问。
90.本公开的实施例可以包括有形非暂时性机器可读介质,该介质包括可由一个或多个处理器执行的指令,该指令包括执行如本文所述的本公开的元素的指令。
91.上述方法的各种操作可以由能够执行操作的任何合适的装置(诸如各种(多个)硬件和/或软件组件、电路和/或(多个)模块)来执行。软件可以包括用于实施逻辑功能的可执行指令的有序列表,并且可以体现在任何“处理器可读介质”中,以供指令执行系统、装置或设备(诸如单核或多核处理器或包括处理器的系统)使用或与之结合。
92.结合本文公开的实施例描述的方法或算法和功能的块或步骤可以直接体现在硬件、由处理器执行的软件模块或两者的组合中。如果在软件中实施,这些功能可以作为有形非暂时性计算机可读介质上的一个或多个指令或代码来存储或通过其传输。软件模块可以驻留在随机存取存储器(ram)、闪存、只读存储器(rom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、寄存器、硬盘、可移动盘、cd rom或本领域已知的任何其他形式的存储介质中。
93.已经参考示出的实施例描述和示出本公开的原理,将认识到,示出的实施例可以在不背离这些原理的情况下在布置和细节上进行修改,并且可以以任何期望的方式进行组合。并且,尽管前面的讨论集中在特定实施例上,但是也可以考虑其他配置。具体地,尽管在本文中使用了诸如“根据本公开的实施例”等表述,但是这些短语意在泛指实施例的可能性,并不旨在将本公开限于特定的实施例配置。如本文所使用的,这些术语可以指可组合成其他实施例的相同或不同实施例。
94.前述说明性实施例不应被解释为限制其公开内容。尽管已经描述了几个实施例,但是本领域技术人员将容易理解,在本质上不脱离本公开的新颖教导和优点的情况下,对这些实施例的许多修改是可能的。因此,所有这样的修改旨在被包括在权利要求中定义的本公开的范围内。
95.本公开的实施例可以无限制地扩展到以下陈述:
96.陈述1.本公开的实施例包括一种加速器,包括:
97.片上存储器,包括第一存储器组和第二存储器组,所述第一存储器组被配置为存储来自数据库的数据,所述数据包括第一值和第二值;和
98.计算引擎,用于并行地对所述片上存储器中的所述数据的所述第一值执行命令和对所述片上存储器中的所述数据的所述第二值执行所述命令,
99.其中,所述片上存储器被配置为与所述计算引擎对所述数据中的所述第一值执行所述命令和对所述数据中的所述第二值执行所述命令并行地将第二数据从所述数据库加载到所述第二存储器组中。
100.陈述2.本公开的实施例包括根据陈述1所述的加速器,其中,所述数据库存储在系统的主机存储器中。
101.陈述3.本公开的实施例包括根据陈述1所述的加速器,其中,所述数据库存储在所
述加速器的加速器存储器中。
102.陈述4.本公开的实施例包括根据陈述3所述的加速器,其中,可以在不访问系统的主机存储器的情况下加载所述数据库。
103.陈述5.本公开的实施例包括根据陈述4所述的加速器,其中,所述加速器被实施为存储器模块。
104.陈述6.本公开的实施例包括根据陈述4所述的加速器,其中,加速器设备驱动器被配置为将所述数据加载到所述加速器存储器中。
105.陈述7.本公开的实施例包括根据陈述6所述的加速器,其中,所述加速器设备驱动器被配置为至少部分基于应用对所述数据库进行划分来将所述数据加载到所述加速器存储器中。
106.陈述8.本公开的实施例包括根据陈述1所述的加速器,其中,所述数据库存储在系统的存储设备中。
107.陈述9.本公开的实施例包括根据陈述1所述的加速器,其中,所述加速器经由总线耦接到系统。
108.陈述10.本公开的实施例包括根据陈述1所述的加速器,其中,所述片上存储器被配置为从输出缓冲器加载所述数据。
109.陈述11.本公开的实施例包括根据陈述10所述的加速器,其中:
110.所述片上存储器被配置为存储来自所述数据库的未压缩数据;并且
111.所述加速器还包括存储压缩数据的输入缓冲器。
112.陈述12.本公开的实施例包括根据陈述11所述的加速器,其中,所述加速器被配置为将数据从所述数据库预取到所述输入缓冲器中。
113.陈述13.本公开的实施例包括根据陈述12所述的加速器,其中,所述加速器被配置为同步至少两个数据流以预取数据。
114.陈述14.本公开的实施例包括根据陈述11所述的加速器,还包括解压缩器,用于从所述压缩数据生成所述未压缩数据。
115.陈述15.本公开的实施例包括根据陈述1所述的加速器,其中,所述第一存储器组包括第一存储器单元和第二存储器单元,所述第一存储器单元存储所述数据,并且所述第二存储器单元存储所述数据。
116.陈述16.本公开的实施例包括根据陈述15所述的加速器,其中,所述计算引擎被配置为对所述第一存储器单元中的所述第一值执行所述命令,并且对所述第二存储器单元中的所述第二值执行所述命令。
117.陈述17.本公开的实施例包括根据陈述15所述的加速器,其中:
118.所述第一存储器单元包括第一块随机存取存储器(bram);并且
119.所述第二存储器单元包括第二bram。
120.陈述18.本公开的实施例包括根据陈述1所述的加速器,其中,所述计算引擎从包括现场可以编程门阵列(fpga)、专用集成电路(asic)、中央处理单元(cpu)、图形处理单元(gpu)、通用gpu(gpgpu)或张量处理单元(tpu)的集合中抽取。
121.陈述19.本公开的实施例包括根据陈述1所述的加速器,还包括接收器,用于从运行在系统的主机处理器上的应用接收对所述数据执行所述命令的请求。
122.陈述20.本公开的实施例包括根据陈述19所述的加速器,其中,所述加速器被配置为将所述数据加载到所述片上存储器中。
123.陈述21.本公开的实施例包括根据陈述20所述的加速器,其中,所述加速器被配置为与存储所述数据的主机存储器、加速器存储器或存储设备中的至少一个接口,以将所述数据加载到所述存储器中。
124.陈述22.本公开的实施例包括根据陈述1所述的加速器,还包括发送器,用于通知运行在主机处理器上的应用所述命令已经被执行。
125.陈述23.本公开的实施例包括根据陈述1所述的加速器,还包括输出存储器,用于存储所述命令的结果。
126.陈述24.本公开的实施例包括根据陈述23所述的加速器,其中,所述加速器被配置为将所述命令的结果从所述输出存储器传送到主机处理器的页面高速缓存。
127.陈述25.本公开的实施例包括根据陈述1所述的加速器,还包括擦除器,用于擦除所述存储器。
128.陈述26.本公开的实施例包括一种系统,包括:
129.主机处理器;
130.耦接到所述主机处理器的主机存储器;和
131.加速器,包括:
132.片上存储器,包括第一存储器组和第二存储器组,所述第一存储器组被配置为存储来自数据库的数据,所述数据包括第一值和第二值;和
133.计算引擎,用于并行地对所述片上存储器中的所述数据的所述第一值执行命令和对所述片上存储器中的所述数据的所述第二值执行所述命令,
134.其中,所述片上存储器被配置为与所述计算引擎对所述数据中的所述第一值执行所述命令和对所述数据中的所述第二值执行所述命令并行地将第二数据从所述数据库加载到所述第二存储器组中。
135.陈述27.本公开的实施例包括根据陈述26所述的系统,其中,所述数据库存储在所述主机存储器中。
136.陈述28.本公开的实施例包括根据陈述26所述的系统,其中,所述数据库存储在所述加速器的加速器存储器中。
137.陈述29.本公开的实施例包括根据陈述28所述的系统,其中,可以在不访问所述主机存储器的情况下加载所述数据库。
138.陈述30.本公开的实施例包括根据陈述28所述的系统,其中,所述加速器被实施为所述系统中的存储器模块。
139.陈述31.本公开的实施例包括根据陈述28所述的系统,其中,加速器设备驱动器被配置为将所述数据加载到所述加速器存储器中。
140.陈述32.本公开的实施例包括根据陈述31所述的系统,其中,所述加速器设备驱动器被配置为至少部分基于应用对所述数据库进行划分来将所述数据加载到所述加速器存储器中。
141.陈述33.本公开的实施例包括根据陈述26所述的系统,还包括耦接到所述主机处理器的存储设备,所述存储设备存储所述数据库。
142.陈述34.本公开的实施例包括根据陈述26所述的系统,其中,所述加速器经由总线耦接到系统。
143.陈述35.本公开的实施例包括根据陈述26所述的系统,其中,所述片上存储器被配置为从输出缓冲器加载所述数据。
144.陈述36.本公开的实施例包括根据陈述35所述的系统,其中:
145.所述片上存储器被配置为存储来自所述数据库的未压缩数据;并且
146.所述加速器还包括存储压缩数据的输入缓冲器。
147.陈述37.本公开的实施例包括根据陈述36所述的系统,其中,所述加速器被配置为将数据从所述数据库预取到所述输入缓冲器中。
148.陈述38.本公开的实施例包括根据陈述37所述的系统,其中,所述加速器被配置为同步至少两个数据流以预取数据。
149.陈述39.本公开的实施例包括根据陈述36所述的系统,其中,所述加速器还包括解压缩器,用于从所述压缩数据生成所述未压缩数据。
150.陈述40.本公开的实施例包括根据陈述26所述的系统,其中,所述第一存储器组包括第一存储器单元和第二存储器单元,所述第一存储器单元存储所述数据,并且所述第二存储器单元存储所述数据。
151.陈述41.本公开的实施例包括根据陈述40所述的系统,其中,所述计算引擎被配置为对所述第一存储器单元中的所述第一值执行所述命令,并且对所述第二存储器单元中的所述第二值执行所述命令。
152.陈述42.本公开的实施例包括根据陈述40所述的系统,其中:
153.所述第一存储器单元包括第一块随机存取存储器(bram);并且
154.所述第二存储器单元包括第二bram。
155.陈述43.本公开的实施例包括根据陈述26所述的系统,其中,所述计算引擎从包括现场可以编程门阵列(fpga)、专用集成电路(asic)、中央处理单元(cpu)、图形处理单元(gpu)、通用gpu(gpgpu)或张量处理单元(tpu)的集合中抽取。
156.陈述44.本公开的实施例包括根据陈述26所述的系统,其中,所述加速器还包括接收器,用于从运行在所述主机处理器上的应用接收对所述数据执行所述命令的请求。
157.陈述45.本公开的实施例包括根据陈述44的系统,其中,所述加速器被配置为将所述数据加载到所述片上存储器中。
158.陈述46.本公开的实施例包括根据陈述45的系统,其中,所述加速器被配置为与存储所述数据的主机存储器、加速器存储器或存储设备中的至少一个接口,以将所述数据加载到所述存储器中。
159.陈述47.本公开的实施例包括根据陈述26所述的系统,其中,所述加速器还包括发送器,用于通知运行在所述主机处理器上的应用所述命令已经被执行。
160.陈述48.本公开的实施例包括根据陈述26所述的系统,其中,所述加速器还包括输出存储器,用于存储所述命令的结果。
161.陈述49.本公开的实施例包括根据陈述48所述的系统,其中:
162.所述处理器包括页面高速缓存;并且
163.所述加速器被配置为将来自所述输出存储器的所述命令的结果从所述输出存储
器传送到所述主机处理器的所述页面高速缓存。
164.陈述50.本公开的实施例包括根据陈述26所述的系统,其中,所述加速器还包括擦除器,用于擦除所述存储器。
165.陈述51.本公开的实施例包括一种方法,包括:
166.将数据从数据库加载到加速器的片上存储器的第一存储器组中;
167.并行地对所述第一存储器组中的所述数据中的第一值和所述第一存储器组的所述数据中的第二值执行命令以产生结果;以及
168.与对所述数据中的所述第一值和所述数据中的所述第二值执行所述命令并行地将第二数据从所述数据库加载到所述片上存储器的第二存储器组中。
169.陈述52.本公开的实施例包括根据陈述51所述的方法,还包括在所述加速器处从运行在主机处理器上的应用接收请求,所述请求标识来自所述数据库的所述数据和所述命令。
170.陈述53.本公开的实施例包括根据陈述52所述的方法,其中,在所述加速器处从运行在主机处理器上的应用接收请求包括:
171.在所述加速器处经由应用编程接口(api)从运行在所述主机处理器上的所述应用接收所述请求;以及
172.将所述请求转换成所述命令。
173.陈述54.本公开的实施例包括根据陈述51所述的方法,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括将所述数据从输出缓冲器复制到所述片上存储器中。
174.陈述55.本公开的实施例包括根据陈述51所述的方法,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括将所述数据从加速器存储器复制到所述片上存储器中。
175.陈述56.本公开的实施例包括根据陈述55所述的方法,其中,可以在不访问主机存储器的情况下复制所述数据库。
176.陈述57.本公开的实施例包括根据陈述51所述的方法,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括将所述数据从主机存储器复制到所述片上存储器中。
177.陈述58.本公开的实施例包括根据陈述51所述的方法,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括将所述数据从存储设备复制到所述片上存储器中。
178.陈述59.本公开的实施例包括根据陈述51所述的方法,还包括擦除所述片上存储器。
179.陈述60.本公开的实施例包括根据陈述59所述的方法,其中,擦除所述片上存储器还包括擦除所述加速器的输入缓冲器。
180.陈述61.本公开的实施例包括根据陈述59所述的方法,其中,擦除所述片上存储器还包括擦除所述加速器的输出缓冲器。
181.陈述62.本公开的实施例包括根据陈述59所述的方法,其中,擦除所述片上存储器还包括擦除所述加速器的输出存储器。
182.陈述63.本公开的实施例包括根据陈述51所述的方法,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括:
183.将压缩数据从所述数据库加载到所述加速器中;以及
184.对所述压缩数据进行解压缩以生成所述数据。
185.陈述64.本公开的实施例包括根据陈述63所述的方法,其中,从所述数据库加载所述压缩数据包括将所述压缩数据从所述数据库加载到所述加速器的输入缓冲器中。
186.陈述65.本公开的实施例包括根据陈述64所述的方法,其中,将所述压缩数据从所述数据库加载到所述加速器的输入缓冲器中包括将所述压缩数据从所述数据库预取到所述输入缓冲器中。
187.陈述66.本公开的实施例包括根据陈述65所述的方法,其中,将所述压缩数据从所述数据库预取到所述输入缓冲器中包括同步至少两个数据流。
188.陈述67.本公开的实施例包括根据陈述63所述的方法,其中,对所述压缩数据进行解压缩以生成所述数据包括将所述数据存储在所述加速器的输出缓冲器中。
189.陈述68.本公开的实施例包括根据陈述51所述的方法,还包括将所述结果存储在输出存储器中。
190.陈述69.本公开的实施例包括根据陈述68所述的方法,还包括将所述结果从所述输出存储器复制到主机处理器的页面高速缓存中。
191.陈述70.本公开的实施例包括根据陈述69所述的方法,其中,将所述结果从所述输出存储器复制到主机处理器的页面高速缓存中包括至少部分基于运行在请求所述结果的主机处理器上的应用将所述结果从所述输出存储器复制到所述主机处理器的所述页面高速缓存中。
192.陈述71.本公开的实施例包括根据陈述68所述的方法,其中,将所述结果存储在输出存储器中包括向运行在主机处理器上的应用信令通知所述命令已经被执行。
193.陈述72.本公开的实施例包括根据陈述51所述的方法,其中:
194.将数据从数据库加载到加速器的片上存储器的第一存储器组中包括:
195.将所述数据从所述数据库加载到所述加速器的所述第一存储器组的第一存储器单元中;以及
196.将所述数据从所述数据库加载到所述加速器的所述第一存储器组的第二存储器单元中;并且
197.并行地对所述第一存储器组中的所述数据中的第一值和所述第一存储器组的所述数据中的第二值执行命令以产生结果包括:
198.对所述第一存储器单元中的所述数据中的所述第一值执行所述命令;
199.对所述第二存储器单元中的所述数据中的所述第二值执行所述命令;以及
200.至少部分基于对所述第一存储器单元中的所述数据中的所述第一值执行所述命令和对所述第二存储器单元中的所述数据中的所述第二值执行所述命令来产生所述结果。
201.陈述73.本公开的实施例包括根据陈述72所述的方法,其中:
202.所述第一存储器单元包括第一块随机存取存储器(bram);并且
203.所述第二存储器单元包括第二bram。
204.陈述74.本公开的实施例包括一种制品,所述制品包括非暂时性存储介质,所述非
暂时性存储介质在其上存储有指令,当由机器执行时,所述指令导致:
205.将数据从数据库加载到加速器的片上存储器的第一存储器组中;
206.并行地对所述第一存储器组中的所述数据中的第一值和所述第一存储器组的所述数据中的第二值执行命令以产生结果;以及
207.与对所述数据中的所述第一值和所述数据中的所述第二值执行所述命令并行地将第二数据从所述数据库加载到所述片上存储器的第二存储器组中。
208.陈述75.本公开的实施例包括根据陈述74所述的制品,所述非暂时性存储介质在其上还存储有指令,当由所述机器执行时,所述指令导致包括在所述加速器处从运行在主机处理器上的应用接收请求,所述请求标识来自所述数据库的所述数据和所述命令。
209.陈述76.本公开的实施例包括根据陈述75所述的制品,其中,在所述加速器处从运行在主机处理器上的应用接收请求包括:
210.在所述加速器处经由应用编程接口(api)从运行在所述主机处理器上的所述应用接收所述请求;以及
211.将所述请求转换成所述命令。
212.陈述77.本公开的实施例包括根据陈述74所述的制品,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括将所述数据从输出缓冲器复制到所述片上存储器中。
213.陈述78.本公开的实施例包括根据陈述74所述的制品,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括将所述数据从加速器存储器复制到所述片上存储器中。
214.陈述79.本公开的实施例包括根据陈述74所述的制品,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括将所述数据从主机存储器复制到所述片上存储器中。
215.陈述80.本公开的实施例包括根据陈述74所述的制品,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括将所述数据从存储设备复制到所述片上存储器中。
216.陈述81.本公开的实施例包括根据陈述74所述的制品,所述非暂时性存储介质在其上还存储有指令,当由所述机器执行时,所述指令导致擦除所述片上存储器。
217.陈述82.本公开的实施例包括根据陈述81所述的制品,其中,擦除所述片上存储器还包括擦除所述加速器的输入缓冲器。
218.陈述83.本公开的实施例包括根据陈述81所述的制品,其中,擦除所述片上存储器还包括擦除所述加速器的输出缓冲器。
219.陈述84.本公开的实施例包括根据陈述81所述的制品,其中,擦除所述片上存储器包括擦除所述加速器的输出存储器。
220.陈述85.本公开的实施例包括根据陈述74所述的制品,其中,将数据从数据库加载到加速器的片上存储器的第一存储器组中包括:
221.将压缩数据从所述数据库加载到所述加速器中;以及
222.对所述压缩数据进行解压缩以生成所述数据。
223.陈述86.本公开的实施例包括根据陈述85所述的制品,其中,从所述数据库加载所
述压缩数据包括将所述压缩数据从所述数据库加载到所述加速器的输入缓冲器中。
224.陈述87.本公开的实施例包括根据陈述86所述的制品,其中,将所述压缩数据从所述数据库加载到所述加速器的输入缓冲器中包括将所述压缩数据从所述数据库预取到所述输入缓冲器中。
225.陈述88.本公开的实施例包括根据陈述87所述的制品,其中,将所述压缩数据从所述数据库预取到所述输入缓冲器中包括同步至少两个数据流。
226.陈述89.本公开的实施例包括根据陈述85所述的制品,其中,对所述压缩数据进行解压缩以生成所述数据包括将所述数据存储在所述加速器的输出缓冲器中。
227.陈述90.本公开的实施例包括根据陈述74所述的制品,所述非暂时性存储介质在其上还存储有指令,当由所述机器执行时,所述指令导致将所述结果存储在输出存储器中。
228.陈述91.本公开的实施例包括根据陈述90所述的制品,所述非暂时性存储介质在其上还存储有指令,当由所述机器执行时,所述指令导致将所述结果从所述输出存储器复制到主机处理器的页面高速缓存中。
229.陈述92.本公开的实施例包括根据陈述91所述的制品,其中,将所述结果从所述输出存储器复制到主机处理器的页面高速缓存中包括至少部分基于运行在请求所述结果的主机处理器上的应用将所述结果从所述输出存储器复制到所述主机处理器的所述页面高速缓存中。
230.陈述93.本公开的实施例包括根据陈述90所述的制品,其中,将所述结果存储在输出存储器中包括向运行在主机处理器上的应用信令通知所述命令已经被执行。
231.陈述94.本公开的实施例包括根据陈述74所述的制品,其中:
232.将数据从数据库加载到加速器的片上存储器的第一存储器组中包括:
233.将所述数据从所述数据库加载到所述加速器的所述第一存储器组的第一存储器单元中;以及
234.将所述数据从所述数据库加载到所述加速器的所述第一存储器组的第二存储器单元中;并且
235.并行地对所述第一存储器组中的所述数据中的第一值和所述第一存储器组的所述数据中的第二值执行命令以产生结果包括:
236.对所述第一存储器单元中的所述数据中的所述第一值执行所述命令;
237.对所述第二存储器单元中的所述数据中的所述第二值执行所述命令;以及
238.至少部分基于对所述第一存储器单元中的所述数据中的所述第一值执行所述命令和对所述第二存储器单元中的所述数据中的所述第二值执行所述命令来产生所述结果。
239.陈述95.本公开的实施例包括根据陈述94所述的制品,其中:
240.所述第一存储器单元包括第一块随机存取存储器(bram);并且
241.所述第二存储器单元包括第二bram。
242.因此,鉴于本文描述的实施例的各种排列,该详细描述和附随材料仅旨在说明,而不应被视为限制本公开的范围。因此,本公开所要求保护的是可以落入所附权利要求及其等同物的范围和精神内的所有这种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1