用于在存储附近进行分级排序加速的系统和方法与流程

文档序号:24942048发布日期:2021-05-04 11:35阅读:109来源:国知局
本公开的一个或多个示例实施例的各方面涉及一种存储系统,并且更具体地,涉及用于在存储附近进行分级排序加速的系统和方法。
背景技术
::通常,排序操作用于根据元素的比较来重新排列数组或列表中的元素,并且计算复杂且具有非线性时序复杂度。排序操作广泛用于从数据库应用到制图算法的各种应用中。例如,数据库应用(例如,groupby,join等)通常将排序操作用作其构建操作(或基本操作),因此,排序操作通常是数据库应用的性能的关键因素。但是,不同的数据库应用可能具有各种不同的操作和规范,因此,在对不同的数据库应用实施排序操作时,可能需要支持不同的操作和要求。例如,为了对各种不同的数据库应用实施排序操作,可以根据用户需求和资源需求设计固定排序引擎,以使固定排序引擎适应不同的数据库应用。然而,在这种情况下,为了根据各种不同的需求设计(或调整)固定排序引擎,可能会花费大量的设计时间开销。在
背景技术
:部分中公开的以上信息是为了增强对本公开的背景的理解,因此,它可能包含不构成现有技术的信息。技术实现要素:本公开的一个或多个示例实施例涉及一种用于在存储附近进行分级排序加速的存储系统以及包括该存储系统的方法。根据本公开的示例实施例,一种存储系统包括:存储设备,被配置为存储与排序操作相关联的数据元素数组;存储接口,被配置为促进存储设备与主机计算机之间的通信;以及,可通信地连接到存储设备的可重构处理设备,该可重构处理设备包括:存储器,被配置为存储从存储设备读取的输入数据,该输入数据对应于存储在存储设备中的数据元素数组;包括一个或多个计算组件的内核,该内核被配置为根据从主机计算机接收的排序命令对存储在存储器中的输入数据执行排序操作。可重构处理设备被配置为动态实例化一个或多个计算组件以加速排序操作。在示例实施例中,可重构处理设备可以包括现场可编程门阵列(fieldprogrammablegatearray,fpga),并且存储设备可以包括固态驱动器(solidstatedrive,ssd)。在示例实施例中,输入数据可以由主机计算机从ssd读取,并加载到主机计算机的主存储器中,并且fpga的存储器可以被配置为从主机的主存储器接收输入数据。在示例实施例中,存储系统还可以包括存储器和ssd之间的直接互连,并且fpga可以被配置为经由直接互连直接访问ssd以将输入数据从ssd读取到存储器。在示例实施例中,fpga和ssd可以被实现在同一电路板上。在示例实施例中,fpga可以配置为在从ssd读取数据时,使用点对点(point-to-point,p2p)通信经由直接互连访问ssd,以绕过主机计算机。在示例实施例中,存储器可以包括动态随机存取存储器(dynamicrandom-accessmemory,dram)。在示例实施例中,一个或多个计算组件可以包括多个处理元件,并且多个处理元件中的每一个可以被配置为根据排序算法对与输入数据相对应的数据元件数组的片段进行排序。在示例实施例中,多个处理元件中的每一个可以包括局部比较器和局部合并器,并且局部比较器和局部合并器可以被配置为使用排序算法从片段中生成部分排序的数组。在示例实施例中,一个或多个计算组件还可以包括连接到多个处理元件中的每一个的输出的处理单元,并且处理单元可以被配置为根据排序算法对多个处理元件的输出进行排序。在示例实施例中,处理单元可以包括全局比较器和全局合并器,并且全局比较器和全局合并器可以被配置为使用排序算法从由多个处理元件输出的部分排序的数组生成输入数据的完全排序的数组。在示例实施例中,排序算法可以是双调排序算法。在示例实施例中,可重构处理设备可以被配置为根据数据元素数组的大小在运行时动态实例化多个处理元素和处理单元的数量。在示例实施例中,可重构处理设备可以被配置为识别数据元素数组的大小,将数据元素数组的大小与一个或多个阈值大小进行比较,并根据该比较实例化多个处理元件和处理单元的数量。根据本公开的示例实施例,一种用于针对存储系统动态缩放排序操作的方法,该存储系统包括用于存储与排序操作相关联的数据元素数组的存储设备,用于促进存储设备与主机计算机之间的通信的存储接口,以及可通信地连接到存储设备的可重构处理设备。该方法包括:由可重构处理设备识别与来自主机计算机的排序命令相关联的数据元素数组的大小;由可重构处理设备将所述大小与一个或多个阈值大小进行比较;以及,由可重构处理设备根据该比较实例化一个或多个计算组件以加速排序操作。在示例实施例中,可重构处理设备可以包括现场可编程门阵列(fpga),并且存储设备可以包括固态驱动器(ssd)。在示例实施例中,实例化一个或多个计算组件可以包括重新配置fpga的内核的一个或多个逻辑块和一个或多个互连。在示例实施例中,该方法还可以包括:由至少一个局部排序计算组件对数据元素数组的至少一个片段进行排序,并且由至少一个局部排序计算组件生成该至少一个片段的排序的数组,以及实例化一个或多个计算组件可以包括由可重构处理设备实例化至少一个局部排序计算组件。在示例实施例中,该方法还可以包括:由多个局部排序计算组件中的每一个对数据元素数组的不同片段进行排序;以及由多个局部排序计算组件中的每一个生成相应片段的部分排序的数组,并且实例化一个或多个计算组件可以包括由可重构处理设备实例化多个局部排序计算组件。在示例实施例中,该方法还可以包括:由全局排序计算组件对由多个局部排序计算组件中的每一个生成的部分排序的数组进行排序;以及由全局排序计算组件从部分排序的数组的排序生成与数据元素数组相对应的完全排序的数组,以及实例化一个或多个计算组件还可以包括由可重构处理设备实例化连接到多个局部排序计算组件中的每一个的输出的全局排序计算组件。附图说明通过以下参考附图对示例实施例的详细描述,对于本领域技术人员而言,本公开的上述以及其他方面和特征将变得更加显而易见,其中:图1是根据本公开的一个或多个示例实施例的存储系统的系统图;图2是根据本公开的一个或多个示例实施例的存储系统的框图;图3是根据本公开的一个或多个示例实施例的排序操作的说明性示例;图4是根据本公开的一个或多个示例实施例的存储系统的处理元件的框图;图5是根据本公开的一个或多个示例实施例的存储系统的处理单元的框图;图6是示出根据本公开的一个或多个示例实施例的动态缩放排序操作的方法的流程图;和图7是根据本公开的一个或多个示例实施例的存储系统的系统图。具体实施方式在下文中,将参考附图更详细地描述示例实施例,在附图中,相同的附图标记始终指代相同的元件。然而,本发明可以以各种不同的形式实施,并且不应被解释为仅限于本文中示出的实施例。相反,这些实施例作为示例提供,使得本公开将是透彻和完整的,并将向本领域技术人员充分传达本公开的方面和特征。因此,可以不描述对于本领域的普通技术人员来说对于完全理解本公开的方面和特征不必要的过程、元件和技术。除非另有说明,否则在整个附图和书面描述中,相同的附图标记表示相同的元件,因此,可以不重复其描述。此外,在附图中,为了清楚起见,可能放大和/或简化了元件、层和区域的相对大小。根据本公开的一个或多个示例实施例,可以提供用于排序加速的分级体系结构,其中设计灵活性和可扩展性可以根据各种需求、资源可用性等在利用可重构设计提供广泛的性能和面积权衡方面得到改善。例如,简要概述,可以提供基于模板的分级体系结构,其中可以高度优化一个或多个基于模板的计算组件。在一些实施例中,可以根据各种静态和/或动态需求(例如,用户需求、资源需求、数据大小等)来动态地实例化计算组件,以提高排序操作的效率。例如,在一些实施例中,可以根据输入数据数组的大小来增加和/或减少(例如,实时或接近实时)计算组件。在这种情况下,例如,可以减少或消除固定排序引擎对输入数据数组施加的固定大小限制。在一些实施例中,可以通过在可重构处理设备而不是主机计算机中执行排序步骤来改善或优化排序操作的性能。例如,不是利用主机计算机的资源(例如,cpu利用率)来执行排序操作,而是可以由可重构处理设备执行排序操作,使得主机计算机的资源可以用于其他操作和功能。因此,可以通过降低主机计算机的资源利用率(例如,cpu利用率)来降低能量消耗。此外,在一些实施例中,可重构处理设备可以被配置用于数据级并行,并且可重构处理设备可以使用合适的并行排序算法(双调排序)来并行地(例如,并发地)执行多个排序步骤。因此,可以减少排序操作的执行时间,并且可以减少排序操作的能耗。在一些实施例中,可以通过减少或消除由主机计算机施加的瓶颈(例如,cpu利用率、pci带宽等)来改善排序操作的可扩展性。例如,在一些实施例中,可以在可重构处理设备和存储设备之间提供直接互连,使得可以实现可重构处理设备和存储设备之间的直接数据传输,而无需主机计算机参与数据传输。在这种情况下,例如,可重构处理设备可以经由直接互连直接从存储设备访问输入数据数组,而不是让主机计算机将输入数据数组从存储设备传输到可重构处理设备进行排序。因此,可以减少或消除由主机计算机施加的瓶颈(例如,cpu利用率、pci带宽等),并且可以通过减少例如cpu利用率、运行时间等来减少主机计算机的能耗。图1是根据本公开的一个或多个示例实施例的存储系统的系统图。参照图1,存储系统100可以包括主机计算机102、存储设备104和可重构处理(reconfigurableprocessing,rp)设备(例如,可重构处理电路或嵌入式处理设备)106。主机计算机102可通信地连接到存储设备104和rp设备106,并向rp设备106提供命令以根据命令处理存储在存储设备104上的数据元素。例如,主机计算机102可以提供排序命令,使得rp设备106对存储在存储设备104中的数据元素数组进行排序。主机计算机102可以包括主机处理器108和主机存储器110。主机处理器108可以例如是主机计算机102的通用处理器,诸如中央处理器(centralprocessingunit,cpu)。主机存储器110可以被认为是主机计算机102的高性能主存储器(例如,主存储器)。例如,在一些实施例中,主机存储器110可以包括(或可以是)易失性存储器,例如,诸如动态随机存取存储器(dynamicrandom-accessmemory,dram)。然而,本公开不限于此,并且如本领域技术人员所知的,主机存储器110可以包括(或可以是)主机计算机102的任何合适的高性能主存储器(例如,主存储器)替代品。例如,在其他实施例中,主机存储器110可以是可以提供快速访问和低输入/输出(io)延迟的相对高性能的非易失性存储器,诸如z-nandtm(可从三星获得)、3dx-pointtm(可从英特尔和美光科技获得)、相变存储器、电阻式ram、sttram等。存储设备104可以被视为二级存储器,其可以持久存储要由主机计算机102访问和/或要由rp设备106根据命令(例如,排序)处理的数据元素。在这种情况下,与主机存储器110的高性能存储器相比,存储设备104可以包括(或者可以是)相对较慢的存储器。例如,在一些实施例中,存储设备104可以包括非易失性存储器(例如,nand闪存)以持久存储数据元素,并且例如可以包括(或可以是)固态驱动器(ssd)。然而,本公开不限于此,并且在其他实施例中,存储设备104可以包括(或可以是)任何合适的存储设备,包括本领域技术人员已知的任何合适的存储器,以持久地存储要由rp设备106根据来自主机计算机102的命令(例如,排序命令)处理(例如,排序)的数据元素数组。在其他实施例中,存储设备104可以包括可以将数据传输到可重构处理设备106进行排序的任何合适的设备。例如,在一些实施例中,存储设备104可以包括网卡、以太网ssd、波卡等。在各种实施例中,存储设备104可以符合大规格标准(例如,3.5英寸硬盘驱动器规格)、小规格标准(例如2.5英寸硬盘驱动器规格)、m.2规格等。在其他实施例中,存储设备104可以符合这些规格的任何合适或期望的派生形式。在一些实施例中,存储设备104可以包括存储接口112,以促进主机计算机102和存储设备104之间的通信(例如,使用连接器和协议)。在一些实施例中,存储接口112可以促进主机计算机102和存储设备104之间存储请求和响应的交换。在一些实施例中,存储接口112可以促进存储设备104向主机计算机102的主机存储器110进行数据传输和从主机计算机102的主机存储器110进行数据传输。例如,在一些实施例中,存储接口112(例如,连接器及其协议)可以包括(或可以符合)外围组件互连快速(peripheralcomponentinterconnectexpress,pcie)、通过以太网的远程直接存储器访问(remotedirectmemoryaccess,rdma)、串行高级技术附件(serialattachedscsi,sata)、光纤通道、串行连接scsi(sas)、非易失性存储器快速(nonvolatilememoryexpress,nvme)等。在其他实施例中,存储接口112(例如,连接器及其协议)可以包括(或可以符合)各种通用接口,例如,诸如以太网、通用串行总线(universalserialbus,usb)等。rp设备106可以根据来自主机计算机102的命令来处理存储在存储设备104上的数据元素。例如,在一些实施例中,rp设备106可以根据来自主机计算机102的排序命令对存储在存储设备104上的数据元素数组进行排序。因为rp设备106代替主机计算机102执行排序命令,所以可以减少主机计算机102的资源使用率(例如,cpu使用率等)。因此,rp设备106可以与存储设备104可通信地连接以访问存储在存储设备104上的数据元素。例如,在各个实施例中,rp设备106可以经由主机计算机102和/或经由直接(或专用)互连可通信地连接到存储设备104,这将在下面参考图6更详细地描述。在这种情况下,rp设备106可以被认为是存储设备104的存储处理器(或补充处理器),其与主机处理器108是分开的并且是有区别的。在各个实施例中,rp设备106可以被实现为集成电路(integratedcircuit,ic),并且可以被嵌入到与存储设备104相同的板(例如,相同的电路板)上,或者可以被实现在与存储设备104分开的板(例如,单独的电路板)上。在一些实施例中,rp设备106可以被配置用于数据元素的并行处理,使得可以并行地(例如,并发地)执行各种处理步骤。例如,在一些实施例中,rp设备106可以包括(或者可以是)现场可编程门阵列(fpga),其配置有合适的排序算法以并行地(例如,并发地)对数据元素数组的行和/或列进行排序,但是本公开不限于此。例如,在其他实施例中,rp设备106可以包括(或者可以是)可重构的专用集成电路(applicationspecificintegratedcircuit,asic)(例如,动态可编程asic),其配置有合适的排序算法以并行地(例如,并发地)对数据元素进行排序,或在顺序过程中对数据元素进行排序。更详细地,在一些实施例中,rp设备106可以包括rp存储器114和rp加速器116。在一些实施例中,rp存储器114可以被认为是rp设备106的内部存储器,其与主机存储器110和存储设备104的存储器不同(例如,有区别)。在一些实施例中,rp设备106可以使用rp存储器114来缓存(例如,存储或临时存储)从存储设备104取回的数据元素(例如,经由主机计算机102或经由直接互连取回的数据元素),并根据来自主机计算机102的排序命令对缓存在rp存储器114中的数据元素进行排序。在这种情况下,与主机存储器110和存储设备104的存储器相比时,rp存储器114可以被认为是容量较小的存储器。在各个实施例中,rp存储器114可以包括(或可以是)易失性存储器,例如,诸如dram,但是本公开不限于此,并且在其他实施例中,rp存储器114可以包括(或可以是)本领域技术人员已知的任何合适的易失性存储器或非易失性存储器。例如,在各种实施例中,rp存储器114可以包括(或可以是)z-nandtm、3dx-pointtm、紧密耦合存储器(tightly-coupledmemory,tcm)、相变存储器、电阻式ram、sttram等。在一些实施例中,rp加速器116可以被配置为促进(例如,加速)与命令(例如,排序命令)相关联的操作。例如,rp加速器116可以包括多个计算组件,多个计算组件被配置为实施任何合适的排序算法以对数据元素(例如,数据元素数组)进行排序。举例来说,计算组件可以包括一个或多个处理元件(processingelement,pe)和/或一个或多个处理单元(processingunit,pu),这将在下面更详细地讨论。在一些实施例中,计算组件(例如,pu和pe)可以是可组合的,并且可以根据用户需求、应用的类型(例如,数据库应用、制图应用等)、数据元素数组的大小、rp设备106的资源约束(例如,存储器、通道数量等)、rp设备106正在计算或等待计算(例如,并发处理或顺序处理)的其他操作的数量等动态地配置,这将在下面更详细地讨论。图2是根据本公开的一个或多个示例实施例的存储系统的框图。图2所示的存储系统200可以与图1所示的存储系统100相同或基本相同(或相似),因此可以简化或可以不重复其冗余描述。在下文中,为了方便起见,可以将ssd104a描述为存储设备104的代表性示例,可以将dram114a描述为rp存储器114的代表性示例,并且可以将fpga106a描述为rp设备106的代表性示例。然而,如上所述,本公开不限于这些代表性示例,并且存储设备104、rp存储器114和rp设备106中的每一个可以包括(或可以是)上面讨论的与之相关的示例中的任何合适的一个,和/或可以包括本领域技术人员已知的其他合适的示例。参考图2,在一些实施例中,存储系统200可以包括主机计算机102、ssd104a和fpga106a。主机计算机102可通信地连接到ssd104a和fpga106a,并向fpga106a提供命令以处理存储在ssd104a上的数据元素。例如,主机计算机102可以提供排序命令,使得fpga106a根据合适的排序算法对存储在ssd104a中的数据元素数组进行排序。在一些实施例中,fpga106a可以包括fpga板(例如,fpga电路板)202,fpga板202包括dram114a、fpga加速器116a以及促进dram114a与fpga加速器116a之间的通信的接口204。例如,在一些实施例中,dram114a可以被实现为fpga板202上的多个存储器单元,而fpga加速器116a可以被实现为fpga板202上的内核(例如,排序内核)。如本文所用,“存储器单元”是指存储器中能够存储数据的最小单元。例如,dram存储器单元可以存储一位数据,并且可以包括用于存储电荷的电容器,以及用于用这一位数据选择性地对电容器充电的晶体管。在一些实施例中,dram114a可以缓存输入数据(例如,ssd104a的要排序的数据元素),并且接口204可以用于将输入数据从dram114a读取到fpga加速器116a的块随机存取存储器(blockrandomaccessmemory,bram)206。例如,接口204可以包括(或可以是)512位高级可扩展接口(advancedextensibleinterface,axi接口),但是本公开不限于此,并且接口204可以包括(或可以是)使用合适的协议将输入数据从dram114a读取到bram206的任何合适的接口,如本领域技术人员所知的。fpga加速器116a可以包括bram206、bram缓冲器208、多个计算组件210和数据重新排序器212。fpga加速器116a可以使用任何合适的排序算法来对bram206中的输入数据进行排序,并且可以将排序后的输入数据存储到bram缓冲器208中。在一些实施例中,可以根据rp设备106的设备类型和/或rp设备106的处理能力和功能来确定(例如,可以预先确定)fpga加速器116a使用的排序算法,从而可以增强(例如,加速、改进和/或优化)排序操作。例如,在某些实施例中,当rp设备106是fpga106a时,所使用的排序算法可以是利用fpga106a的并行处理能力的并行排序算法,诸如双调排序。根据示例实施例,当与其他排序算法相比时,双调排序可以改善或优化并行处理实施方式的性能。在双调排序的每个步骤(例如,每个步骤)中,操作的次数可以保持不变,并且双调排序中的主要操作是比较和交换。例如,比较两个数字,并且基于排序方向,可以交换这两个数字。此外,在双调排序中,所有排序步骤可以彼此并行(例如,并发地)执行。因此,在双调排序的所有步骤中,可以使用所有分配的资源。因此,虽然与其他排序算法(例如,快速排序、合并排序等)相比,双调排序可能具有更高的时序复杂度,但是对于具有并行计算能力的处理器(例如,fpga、图形处理单元(gpu)等)来说,双调排序可能是期望的。同样地,因为fpga106a可以被配置用于数据级并行,所以与其他排序算法相比,fpga106a可以进一步改善或优化双调排序的加速。然而,本公开不限于此,并且可以使用任何合适的并行或顺序排序算法来对输入数据进行排序,例如,诸如快速排序、合并排序、插入排序、选择排序等,或它们的组合。简要地参考图3,图3是根据本公开的一个或多个示例实施例的排序操作的说明性示例。作为说明性示例,图3示出了针对8个随机输入的双调排序的示例。双调排序是使用双调序列生成排序的数组的并行排序算法。例如,双调排序将双调序列转换为单调排序的序列。双调序列可以被视为部分排序的数组,其包括两个排序的片段,一个升序,另一个降序。例如,可以将大小为n的两个排序的数组组合且合并,以创建大小为2n(其中,n是整数)的排序的数组。将第二个数组颠倒并衔接到第一个数组以创建双调序列。例如,双调序列1、2、2、4、5、6、8、5、4、3、2、1可以被视为部分排序的列表,其包括两个排序的单调子序列,一个升序,另一个下降。可以合并双调序列(例如,使用双调合并)以将双调序列转换成排序的数组。如图3所示,对于8个随机输入,双调排序可以包括3个步骤302、304和306,并且每个步骤可以包括由箭头指示的4个比较。实线箭头显示升序的比较,而虚线箭头显示降序的比较。对于每个比较,可以比较两个数字,并且可以根据排序方向交换这两个数字。在双调排序中,可以按预定义的顺序比较元素,并且比较的顺序不依赖于输入数据。因此,在双调排序的步骤(例如,所有步骤)302、304和306中的每一个中,可以使用所有分配的资源,并且每个步骤可以并行(例如,并发地)执行。在下文中,为了方便起见,可以将双调排序描述为fpga加速器116a使用的排序算法的代表性示例以加速排序操作。然而,如上所述,本公开不限于使用双调排序作为排序算法的代表性示例,并且fpga加速器116a使用的排序算法可以包括(或可以是)以上讨论的和/或本领域技术人员所知的其他示例排序算法中的任何合适的一个。返回参考图2,多个计算组件210可以被配置为使用双调排序算法(或任何其他合适的排序算法)对存储在bram206上的输入数据(例如,数据元素)进行排序。在一些实施例中,多个计算组件210可以包括一个或多个处理元件pe和/或一个或多个处理单元pu。例如,在一些实施例中,多个计算组件210可以包括一个或多个处理单元pu,并且每个处理单元pu可以根据需求(例如,用户需求、应用需求、数据大小需求等)包括多个处理元件pe。在另一示例中,计算组件210可以包括一个处理单元pu,并且这一个处理单元pu可以取决于需求包括任何合适或期望数量的处理元件pe。在又一个示例中,计算组件210可以根据需求包括单个处理元件pe,并且在这种情况下,可以不包括任何处理单元pu。换句话说,处理元件pe可以被认为是可以对从bram206读取的数据元素(例如,整数元素)进行排序的低阶排序计算组件(例如,作为局部排序计算组件),并且处理单元pu可以被认为是可以对处理元件pe的输出进行排序的高阶排序计算组件(例如,作为全局排序计算组件)。例如,处理单元pu可以包括多个处理元件pe,并且处理单元pu可以对多个处理元件pe的输出进行排序。此外,当存在多个处理单元pu时,数据重新排序器212可以对多个处理单元pu的输出进行排序(例如,排序和/或合并)。然而,本公开不限于此,并且可以省略数据重新排序器212。例如,当fpga106a仅包括一个处理元件pe,或者仅包括一个包括多个处理元件pe的处理单元pu时,可以省略数据重新排序器212。在一些实施例中,处理单元pu和处理元件pe中的每一个可以是动态可组合的和/或可配置的。例如,在一些实施例中,fpga106a可以根据需要或期望动态地实例化任何期望或合适的数量的处理元件pe和/或处理单元pu,例如,以便增加或提高排序操作的效率。例如,不同的数据库应用可以具有各种操作和规范,因此可以在fpga106a上实现不同的操作和内核,以便在fpga106a上加速不同的数据库应用。在这种情况下,fpga106a的可用资源可以分布在内核(例如,排序内核116a)之间,因此每个内核的可用资源量可以针对不同的应用而变化。因此,在一些实施例中,fpga106a可以根据各种用户需求、应用需求、用于支持其他操作(例如,读取、写入等)的需求、数据大小要求、资源需求等来增加或减少处理单元pu和/或处理元件pe的数量。例如,fpga106a包括可编程逻辑块的阵列以及以各种不同的配置连接逻辑块的多个可重构互连。可以使用合适的硬件描述语言(hardwaredescriptionlanguage,hdl)对逻辑块和互连进行编程(例如,重新编程或重新配置)。在这种情况下,fpga106a可以根据各种静态和/或变化的需求通过在运行时(例如,实时或接近实时)和/或在建立时间对逻辑块和/或互连进行动态地重新编程或重新配置,来实例化任何合适或期望数量的处理单元pu和/或处理元件pe。在一些实施例中,当使用并行处理排序算法时,fpga106a可以通过增加或减少并行执行排序步骤的处理元件pe和/或处理单元pu的数量来增加或减少排序操作的并行化。将参考图4和图5更详细地讨论处理单元pu和处理元件pe的示例结构和/或配置实现。图4是根据本公开的一个或多个示例实施例的存储系统的处理元件(例如,局部排序计算组件)的框图。图4所示的处理元件pe400可以与上面参考图3描述的处理元件pe相同或基本相同(或相似),因此,可以简化或可以不重复其冗余描述。参照图4,处理元件400可以包括控制器402、局部比较器(例如,数组比较器)404和局部合并器(例如,双调合并器)406。控制器402可以从bram缓冲器208读取要由处理元件400使用合适的排序算法(例如,如图4的450所示的双调排序)进行排序的输入数据。例如,局部比较器404可以比较从bram缓冲器208读取的输入数据,并且局部合并器406可以根据排序算法合并输入数据以生成输入数据的排序的数组。排序的数组可以存储在bram缓冲器208中。作为代表性示例,处理元件400可以通过对1024行(其中,每行具有64个元素,例如,如图4的450所示)进行排序(例如,使用局部比较器404和局部合并器406)来执行局部排序操作,从而对64k个整数元素进行局部排序。例如,在使用局部合并器406执行合并(例如,双调合并)之后,1024个单独排序的行可以成为64k元素(其中,k=1024)排序的数组。但是,本公开不限于图4所示的代表性示例,处理元件400可以为处理元件400分配的fpga106a的资源(例如,dram114a和/或bram206(例如,参见图2)的大小和/或容量)对任何合适或期望数量的整数元素进行排序。在一些实施例中,由处理元件400排序的输入数据可以是与来自主机计算机102(例如,参见图1)的排序命令相关联的数据元素的片段(例如,一部分或子集)。例如,在一些实施例中,与排序请求相关联的数据元素数组的大小可能超过使用单个处理元件400可以有效地排序的数据量。在这种情况下,fpga106a可以实例化一个或多个额外的处理元件400,并且每个处理元件400可以对与排序命令相关联的数据元素的不同片段(例如,不同部分或不同子集)进行排序,以生成部分排序的数据元素数组。在一些实施例中,处理元件400可以彼此并行(例如,并发地)生成它们相应的部分排序的数组。例如,在处理元件400使用的排序算法是双调排序的情况下,每个处理元件400可以彼此并行(例如,并发地)对输入数据执行比较。在一些实施例中,多个处理元件400可以彼此平行地对数据元素的一部分的片段进行排序,并且可以随后彼此平行地对数据元素的不同部分的额外的片段进行排序(例如,当输入数据太大而不能一次全部排序时)。在一些实施例中,如参考图5更详细地讨论的,fpga106a可以进一步实例化一个或多个处理单元pu以对多个处理元件400的输出进行排序,以生成数据元素的完全排序的数组。图5是根据本公开的一个或多个示例实施例的存储系统的处理单元(例如,全局排序计算组件)的框图。图5所示的处理单元500可以与上面参考图3描述的处理单元pu相同或基本相同(或相似),因此,可以简化或可以不重复其冗余描述。参照图5,处理单元500可以包括多个处理元件pe0至pe7、仲裁器502、控制器504、地址转换器506、全局比较器508和全局合并器510。处理元件pe0至pe7可以具有与上面参考图4讨论的处理元件400相同或基本相同的配置,因此,可以简化或可以不重复其冗余描述。如上所述,在一些实施例中,多个处理元件pe0至pe7中的每一个可以生成与排序命令相关联的数据元素的片段(例如,一部分或子集)的部分排序的数组,并且处理单元500可以对多个处理元件pe0至pe7的输出进行排序(例如,全局排序)以生成数据元素的完全排序的数组。尽管图5示出了八个处理元件pe0至pe7,但是本公开不限于此,并且处理单元500可以根据需求(例如,用户需求、应用需求、数据大小需求、资源需求等)包括任何合适数量的处理元件pe。更详细地,控制器504可以提供控制信号以操作排序(例如,双调排序)。仲裁器502可以处理部分排序(例如,由处理元件pe0至pe7中的每个输出的部分排序)的多次迭代。例如,仲裁器502可以向地址转换器506提供对存储在bram缓冲器208(例如,参见图4)上的处理元件pe0至pe7中的每一个的输出的访问,使得处理元件pe0至pe7的输出可以由处理单元500进一步排序。例如,地址转换器506可以将处理元件pe0至pe7的输出映射到处理单元pu500的缓冲器,以由处理单元pu500(例如,由全局比较器508和全局合并器510)进一步排序。例如,处理单元pu500可以包括统一随机存取存储器(unifiedrandomaccessmemory,uram)缓冲器,其存储处理元件pe0至pe7的输出以供处理单元500进行排序,并且存储从全局比较器508和全局合并器510输出的排序结果。在对所有片段进行排序(例如,通过处理元件pe0至pe7中的每一个)之后,由全局比较器508(例如,根据双调排序算法)对得到的部分数组进行全局排序,并且使用全局合并器510(例如,根据双调合并算法)对排序的片段进行合并,以对数组进行全局排序。如果输入数据数组包括要排序的另外的片段,则可以由处理元件pe对另外的片段进行部分排序,并且可以由处理单元500对由处理元件部分排序的数组进行进一步排序。因此,通过动态实例化处理元件pe和处理单元pu的任何合适组合以执行排序操作,可以提供用于加速(例如,改善和/或优化)排序操作的动态可扩展的分级体系结构。图6是示出根据本公开的一个或多个示例实施例的动态缩放排序操作的方法的流程图。然而,本公开不限于图6中所示的方法600的操作的顺序或数量,并且可以被改变为本领域普通技术人员公认的任何期望的操作的顺序或数量。例如,在一些实施例中,顺序可以变化,或者该方法可以包括更少或更多的操作。参照图6,方法600可以在操作605开始并且可以从主机计算机102接收排序命令。例如,排序命令可以指主机计算机102对存储在ssd104a中的输入数据数组进行排序的命令。可以在操作610识别输入数据数组的大小。例如,在一些实施例中,fpga106a可以分析排序命令以识别输入数据数组的大小。在一些实施例中,可以在操作615将输入数据数组的大小与阈值大小(例如,参考大小)进行比较。例如,在一些实施例中,fpga106a可以将输入数据数组的大小与一个或多个阈值大小(例如,一个或多个参考大小)进行比较,以便根据输入数据数组的大小确定要实例化的计算组件210(例如,参见图2、4和5)的合适配置。换句话说,一个或多个阈值大小可以对应于处理元件pe和/或处理单元pu的不同配置,处理元件pe和/或处理单元pu可以用于根据输入数据数组的大小和/或各种需求(例如,用户需求、应用类型、资源分配需求、支持其他操作的需求等)有效地对输入数据数组进行排序。例如,在一些实施例中,一个或多个阈值大小可以存储在查找表(look-uptable,lut)等中,并且一个或多个阈值大小中的每一个可以与处理元件pe和/或处理单元pu的合适或期望的组合(例如,预定组合)相关联,处理元件pe和/或处理单元pu可以被实例化以根据输入数据数组的大小有效地对输入数据数组进行排序。例如,小于第一阈值的输入数据数组的大小可以指示单个处理元件pe可能足以有效地对输入数据数组进行排序。在另一示例中,大于或等于第一阈值且小于第二阈值的输入数据数组的大小可以指示连接到单个处理单元pu的多个处理元件pe可能足以有效地对输入数据数组进行排序。在又一示例中,大于或等于第二阈值的输入数据数组的大小可以指示多个处理单元pu(每个包括多个处理元件pe)足以有效地对输入数据数组进行排序。然而,本公开不限于这些示例,并且应当理解,可以根据处理元件pe和/或处理单元pu的各种粒度组合并根据各种用户需求、资源分配需求、应用类型、要支持的其他操作等来划分阈值大小。返回参考图6,在一些实施例中,当在操作615输入数据数组的大小小于阈值大小(例如,否)时,如上所述,可以确定单个处理元件pe可能足以有效地对输入数据数组进行排序。因此,在操作620,可以实例化单个处理元件pe,并且在操作625,单个处理元件pe可以对输入数据数组的整体进行排序(例如,在并行过程或顺序过程中),以生成输入数据的完全排序的数组。在操作645,可以将完全排序的数组返回给主机计算机,并且该方法可以结束。另一方面,当在操作615输入数据数组的大小大于阈值大小(例如,是)时,如上所述,可以确定包括多个处理元件pe的至少一个处理单元pu可能足以有效地对输入数据数组进行排序。例如,在这种情况下,操作615可以包括输入数据数组的大小与一个或多个阈值的一个或多个比较,以确定要实例化的处理单元pu和处理元件pe的合适数量,使得可以有效地对输入数据数组进行排序。因此,在操作620,可以实例化包括多个处理元件pe的至少一个处理单元pu,并且在操作625,多个处理元件pe可以对输入数据数组的不同片段(例如,不同部分或不同子集)进行排序,以生成输入数据数组的部分排序的数组。例如,输入数据数组可以在多个处理元件pe之间进行分段,并且每个处理元件pe可以生成与其输入数据的片段相对应的部分排序的数组。在操作640,可以由处理单元pu对部分排序的数组进行排序,以生成输入数据数组的完全排序的数组。例如,可以由处理单元pu对由处理元件pe输出的部分排序的数组进行进一步排序(例如,全局排序),以生成输入数据数组的完全排序的数组。在操作645,可以将完全排序的数组提供给主机计算机102,并且该方法可以结束。图7是根据本公开的一个或多个示例实施例的存储系统的系统图。图7所示的存储系统700可以与图1所示的存储系统100相同或基本相同(或相似),因此,可以简化或可以不重复其冗余描述。然而,与图1所示的存储系统100不同,图7所示的存储系统700还可以包括rp设备106(例如,fpga106a)和存储设备104(例如,ssd104a)之间的直接(或专用)互连702。例如,在一些实施例中,fpga106a可以使用直接互连702直接访问存储在ssd104a中的输入数据数组,并将输入数据数组读取到fpgadram114a而不涉及主机计算机102。因此,可以减少由主机计算机102施加的延迟和吞吐量限制。更详细地,参考图1的实施例,主机计算机102从存储设备104(例如,ssd104a)读取输入数据数组,并将输入数据数组加载到主机存储器110中。然后,主机计算机102将输入数据数组从主机存储器110发送到rp存储器114(例如,fpgadram114a)以启动排序。在这种情况下,主机计算机102、存储设备104(例如,ssd104a)和rp设备106(例如,fpga106a)之间的通信成本可能增加,并且延迟和吞吐量限制可能增加。此外,由于cpu开销大以及跨多个ssd共享pci带宽,通用处理器(例如,主机计算机102)在与多个ssd通信时在可扩展性方面可能受到限制。相比之下,参考图7所示的实施例,fpga106a可以使用点对点(p2p)通信经由直接互连702直接访问一个或多个ssd(例如,ssd104a),而不涉及主机计算机102。例如,代替首先将数据加载到主机存储器110,然后将数据发送到fpgadram114a以启动排序,fpga106a可以直接访问ssd104a以读取数组元素。在排序之后,排序的片段存储在fpgadram114a上,并且下一个片段可以被加载和排序。经由直接互连702进行的fpga106a和ssd104a之间的p2p通信可以减少或消除对主机存储器110的写入和读取的开销,并且可以通过消除或减少与通过主机计算机110进行的通信相关联的开销来减少操作延迟。根据本公开的实施例,通过使计算更接近存储设备,可以减少输入/输出(io)成本,并且可以在管理更大的存储系统方面增加系统可扩展性。例如,用于管理具有多个ssd的大型存储系统的可扩展性通常可能受到大型主机存储器需求、读取数据的cpu开销以及在资源之间共享pci带宽的限制。通过使用直接互连702上的p2p通信,可以通过消除或减轻这种瓶颈来增加系统可扩展性。此外,直接互连702上的p2p通信对于外部排序可能特别有用,当正在排序的数据不适合计算设备(例如,主机计算机102)的主存储器(例如,通常是dram)时,可以使用p2p通信,以便将数据迁移到较慢的外部存储中,例如ssd104a。对于可能需要对ssd104a进行多次读取和写入的外部排序,减少的数据访问延迟可以提高fpga106a内计算资源的利用率。将理解的是,尽管术语“第一”、“第二”、“第三”等在本文中可用于描述各种元件、组件、区域、层和/或部分,但是这些元件、组件、区域、层和/或部分不应受到这些术语的限制。这些术语用于将一个元素、组件、区域、层或部分与另一元素、组件、区域、层或部分区分开。因此,在不脱离本公开的精神和范围的情况下,下面描述的第一元件、组件、区域、层或部分可以被称为第二元件、组件、区域、层或部分。将理解的是,当元件或层被称为在另一元件或层“上”、“连接到”或“耦合到”另一元件或层时,其可以直接在另一元件或层上、直接连接到或耦合到另一元件或层,或者可以存在一个或多个中间元件或层。本文中使用的术语是出于描述特定实施例的目的,并且不旨在限制本公开。如本文所使用的,单数形式“一”和“一个”也旨在包括复数形式,除非上下文另外明确指出。还将理解的是,当在本说明书中使用时,术语“包括”、“包含”、“包括有”和“包含有”、“具有”、“具备”、“具备有”指定存在所声明的特征、整数、步骤、操作、元件和/或组件,但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其分组的存在或添加。如本文所使用的,术语“和/或”包括一个或多个相关联的所列项目的任何和所有组合。当诸如“……中的至少一个”之类的表达在元素列表之前时,修饰整个元素列表并且不修饰列表中的单个元素。如本文所使用的,术语“基本上”、“大约”和类似术语被用作近似术语而不是程度术语,并且旨在解释本领域普通技术人员公认的测量或计算值的固有变化。此外,在描述本公开的实施例时,“可以”的使用是指“本公开的一个或多个实施例”。如本文所使用的,术语“使用”、“用于”、“被用于”可以被认为与术语“利用”、“利用于”、“被利用”同义。除非另有定义,否则本文中使用的所有术语(包括技术术语和科学术语)具有与本公开所属领域的普通技术人员通常所理解的含义相同的含义。还将理解的是,诸如在常用词典中定义的那些术语应被解释为具有与它们在相关领域和/或本说明书的上下文中的含义一致的含义,并且不应被解释为理想化或过于形式化的意义,除非本文中明确如此定义。前述内容是本公开的示例实施例的说明,并且不应解释为对本公开的限制。尽管出于说明性目的已经公开了本发明的一些示例实施例,但是本领域技术人员将理解,在不背离所附权利要求及其等同物中公开的本发明的精神和范围的情况下,可以对各种实施例进行各种修改、添加和/或替换。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1