首页> 中国专利> 使用加速器处理读(Get)/Put(写)请求的方法及其信息处理系统

使用加速器处理读(Get)/Put(写)请求的方法及其信息处理系统

摘要

本申请提供了信息处理系统及方法,该系统包括主机、加速器、映射管理器、处理器和固态硬盘,主机向处理器发送第一请求,第一请求为读请求或写请求;处理器根据第一请求生成一个或多个第二请求,第二请求包括聚类请求、搜索请求、地址分配请求、地址获取请求或存储设备的访问请求;控制加速器、映射管理器或固态硬盘对一个或多个第二请求的处理;若至少一个或多个第二请求包括聚类请求或搜索请求,处理器根据聚类请求控制加速器进行聚类计算确定出与关键字距离最近的第一索引值或获取与关键字距离最近的M个特征值。本申请中的加速器、映射管理器和固态硬盘的管理及驱动由处理器实施,从而减少了主机与处理器之间的交互,进而提高处理效率。

著录项

  • 公开/公告号CN113138724A

    专利类型发明专利

  • 公开/公告日2021-07-20

    原文格式PDF

  • 申请/专利权人 上海忆芯实业有限公司;

    申请/专利号CN202110565253.3

  • 发明设计人 孙唐;谈笑;周鹏飞;何振;徐晓画;

    申请日2019-09-17

  • 分类号G06F3/06(20060101);

  • 代理机构11572 北京卓特专利代理事务所(普通合伙);

  • 代理人段旺

  • 地址 200120 上海市浦东新区南汇新城镇环湖西二路888号C楼

  • 入库时间 2023-06-19 11:54:11

说明书

技术领域

本申请涉及存储技术,特别地,涉及使用加速器处理读(Get)与Put(写)请求的方法及其信息处理系统。

背景技术

图1A展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机系统接口)、SAS(Serial AttachedSCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component InterconnectExpress,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。

NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(MagneticRandom Access Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器)、XPoint存储器等是常见的NVM。

接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。

控制部件104用于控制在接口103、NVM芯片105以及DRAM 110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application SpecificIntegrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output)命令。控制部件104还可以耦合到DRAM 110,并可访问DRAM 110的数据。在DRAM可存储FTL表和/或缓存的IO命令的数据。

控制部件104包括闪存接口控制器(或称为介质接口控制器、闪存通道控制器),闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。已知的NVM芯片接口协议包括“Toggle”、“ONFI”等。

在存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储模块的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。这些情况下,存储设备所接收的读/写命令指示逻辑地址。

存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的条目记录了存储设备中以数据页为单位的地址映射关系。

一些存储设备的FTL由存储设备所耦合的主机提供,由主机的存储器存储FTL表,主机的CPU执行软件提供FTL。还有一些被设置在主机与存储设备之间的存储管理装置提供FTL。这些情况下,存储设备所接收的读/写命令指示物理地址。

支持Key-Value(键-数据,也简称为“KV”)存储模型的存储设备,提供基于键(Key)的读操作(Get(Key))与写操作(Put(Key,Value))。为执行写操作,主机向存储设备提供键(Key)与数据(Value),以将数据写入存储设备,并将键作为所写入的数据的索引。为执行读操作,主机向存储设备提供键,存储设备根据键找到数据,并将数据提供给主机。因而在KV存储系统中,键是用来访问数据的索引,而数据(Value)是被访问的数据。一般地,键与数据的长度均不是定长。以及可选地,为了降低复杂性,键和/或数据的长度可具有指定范围。

在申请号为201711392529.2、201711474660.3、201810332295.0、201810286955.6与201810286986.1的中国专利申请中提供了KV存储设备或利用KV存储设备的分布式存储系统。

图1B展示了现有技术的KV存储设备的地址转换系统的示意图。KV存储设备的地址转换系统(也称为FTL表)提供从关键字(K,也称为键)到逻辑地址或物理地址(例如,PPA,Physical Page Address,物理页地址)的映射。响应于获取关键字(K),用关键字(K)作为索引查询FTL表,得到对应的逻辑地址或物理地址。

由于信息处理系统要存储大量的数据,每次根据关键字查询FTL表都需要进行大量的计算,从而导致搜索数据速度慢。

发明内容

根据本申请的第一方面,提供了根据本申请的第一方面的第一用于聚类计算的加速器,包括仲裁模块、数据搬运模块和距离计算模块,其中,所述仲裁模块根据收到的第一请求向所述数据搬运模块发送第二请求,所述第一请求携带关键字、或所述第一请求携带所述关键字和与所述关键字对应的第一索引值,所述第一请求为读请求或写请求,所述第二请求为数据搬移请求;所述第一请求携带所述关键字时,所述数据搬运模块根据所述第二请求从DDR中将所述关键字和X个索引值搬移到距离计算模块,所述X为大于等于2的整数;所述距离计算模块根据所述X个索引值对所述关键字进行距离计算,获取所述第一索引值,所述第一索引值为所述X个索引值中与所述关键字距离最小的索引值。

根据本申请的第一方面的第一用于聚类计算的加速器,提供了根据本申请的第一方面的第二用于聚类计算的加速器,其中,所述第一请求携带所述关键字和所述第一索引值时,所述数据搬运模块根据所述第二请求从所述DDR将所述关键字和与所述第一索引值对应的N个特征值搬移到所述距离计算模块;所述距离计算模块根据所述N个特征值对所述关键字进行距离计算,以从所述N个特征值中获取与所述关键字距离最小的M个第一特征值,所述N和所述M均为大于等于1的整数,且所述M小于等于所述N。

根据本申请的第一方面的第一或第二用于聚类计算的加速器,提供了根据本申请的第一方面的第三用于聚类计算的加速器,其中,所述加速器还包括归一化模块,在所述距离计算模块接收所述关键字和所述X个索引值之前,所述归一化模块对所述关键字和所述X个索引值进行归一化运算,并向所述距离计算模块发送归一化后的所述关键字和所述X个索引值。

根据本申请的第一方面的第二或第三用于聚类计算的加速器,提供了根据本申请的第一方面的第四用于聚类计算的加速器,其中,所述第一请求携带所述关键字和所述第一索引值时,所述距离计算模块计算所述N个特征值中每个特征值与所述关键字的距离,以获取N个第一距离;所述距离计算模块对所述N个第一距离按照取值从小到大进行排序,获取排序后的距离队列;所述距离计算模块从所述距离队列中选取所述M个第一特征值。

根据本申请的第一方面的第二至第四用于聚类计算的加速器之一,提供了根据本申请的第一方面的第五用于聚类计算的加速器,其中,所述M小于等于256。

根据本申请的第一方面的第四用于聚类计算的加速器,提供了根据本申请的第一方面的第六用于聚类计算的加速器,其中,所述距离计算模块采用插入排序的方式对所述N个第一距离进行排序,所述距离队列的队列长度在排序过程中保持256项。

根据本申请的第一方面的第一至第六用于聚类计算的加速器之一,提供了根据本申请的第一方面的第七用于聚类计算的加速器,其中,所述距离计算模块对所述关键字进行距离计算时,所述距离计算模块计算所述X个索引值中每个索引值与所述关键字的距离,以获取X个第二距离;所述距离计算模块比较所述X个第二距离中的任意两个第二距离的大小,确定所述X个索引值中最小的第二距离的索引值为所述第一索引值。

根据本申请的第一方面的第一至第七用于聚类计算的加速器之一,提供了根据本申请的第一方面的第八用于聚类计算的加速器,其中,所述距离计算模块包括Y个计算单元,所述关键字包括Z组数值,所述Y和所述Z均为大于等于1的整数,且所述Z小于等于所述Y,所述距离计算模块利用所述Y个计算单元,根据所述X个索引值同时对所述Z组数值进行距离计算,获取所述Z组数值中每个数值对应的索引值。

根据本申请的第一方面的第一至第八用于聚类计算的加速器之一,提供了根据本申请的第一方面的第九用于聚类计算的加速器,其中,所述加速器还包括结果处理模块,在所述距离计算模块获得计算结果之后,所述结果处理模块向所述DDR发送所述计算结果。

根据本申请的第一方面的第一至第九用于聚类计算的加速器之一,提供了根据本申请的第一方面的第十用于聚类计算的加速器,其中,所述X个索引值为预先配置的。

根据本申请的第一方面的第一至第十用于聚类计算的加速器之一,提供了根据本申请的第一方面的第十一用于聚类计算的加速器,其中,所述仲裁模块向固件提供多个通道,所述仲裁模块采用轮询调度的仲裁方式接收所述固件向所述多个通道发送的请求。

根据本申请的第一方面的第十一用于聚类计算的加速器,提供了根据本申请的第一方面的第十二用于聚类计算的加速器,其中,所述仲裁模块采用加权轮询调度的仲裁方式处理所述固件向所述多个通道发送的请求。

根据本申请的第一方面的第一至第十一用于聚类计算的加速器之一,提供了根据本申请的第一方面的第十三用于聚类计算的加速器,其中,所述第一请求还指示所述加速器处理所述第一请求所使用的通道,所述仲裁模块根据所述第一请求所指示的通道,指示所述距离计算模块的至少一个计算单元处理所述第一请求。

根据本申请的第一方面的第十二用于聚类计算的加速器,提供了根据本申请的第一方面的第十四用于聚类计算的加速器,其中,所述仲裁模块为所述多个第一消息中的每个第一消息分配计算单元标识,所述计算单元标识用于指示所述距离计算模块中的第一计算单元处理携带所述第一计算单元标识的第一消息,所述第一计算单元标识与所述第一计算单元对应。

根据本申请的第一方面的第十四用于聚类计算的加速器之一,提供了根据本申请的第一方面的第十五用于聚类计算的加速器,其中,所述仲裁模块在所述距离计算模块完成对所述多个第一消息的处理之后,指示所述距离计算模块处理所述多个通道中等待的第一消息。

根据本申请的第一方面的第十四或第十五用于聚类计算的加速器,提供了根据本申请的第一方面的第十六用于聚类计算的加速器,其中,若所述距离计算模块未处理完所述多个第一消息,即使所述多个第一消息的数量小于所述距离计算模块中的计算单元的数量且所述距离计算模块中有空闲的计算单元,所述仲裁模块也不指示所述距离计算模块处理所述多个通道中的消息。

根据本申请的第一方面的第一至第十六用于聚类计算的加速器之一,提供了根据本申请的第一方面的第十七用于聚类计算的加速器,其中,所述仲裁模块聚合多个第一消息,并指示所述距离计算模块的至少一个计算单元并行处理聚合后的多个第一消息。

根据本申请的第一方面的第一至第十七用于聚类计算的加速器之一,提供了根据本申请的第一方面的第十八用于聚类计算的加速器,其中,所述距离计算模块还包括Y个管理单元,每个管理单元同Y个计算单元中的一个计算单元耦合,所述仲裁模块在发送所述第二请求时为所述Z组数值分配计算单元标识,每个管理单元从所述Z组数值中获取计算单元标识与自身相同的数值,每个管理单元将获取到的数值发送给与自身耦合的计算单元。

根据本申请的第二方面,提供了根据本申请的第二方面的第一信息处理系统,包括主机、加速器、映射管理器、处理器和固态硬盘,其中,所述主机根据接口函数,生成及向所述处理器发送第一请求,所述第一请求包括读请求和写请求,所述第一请求携带关键字、或所述第一请求携带所述关键字和与所述关键字对应的第一索引值;所述处理器根据所述第一请求生成第二请求,所述第二请求包括聚类请求、搜索请求、地址分配请求、地址获取请求和存储设备的访问请求中的一项或多项;所述处理器使用所述第二请求操作所述加速器、所述映射管理器和所述固态硬盘中的至少一者,以完成一项或多项所述第二请求的处理,以得到所述第一请求的处理结果并返回给所述主机。

根据本申请的第二方面的第一信息处理系统,提供了根据本申请的第二方面的第二信息处理系统,其中,所述第一请求为写请求且所述第一请求携带所述关键字和所述第一索引值时,所述处理器生成所述地址分配请求和所述存储设备的访问请求;或者,所述第一请求为写请求且所述第一请求携带所述关键字时,所述处理器生成所述聚类请求、所述地址分配请求和所述存储设备的访问请求。

根据本申请的第二方面的第一或第二信息处理系统,提供了根据本申请的第二方面的第三信息处理系统,其中,所述第一请求为读请求且所述第一请求携带所述关键字和所述第一索引值时,所述处理器生成所述地址获取请求、所述存储设备的访问请求和所述搜索请求;或者,所述第一请求为读请求且所述第一请求携带所述关键字时,所述处理器生成所述聚类请求、所述地址获取请求、所述存储设备的访问请求和所述搜索请求;或者,所述第一请求为读索引请求(Get_Index)且所述第一请求携带所述关键字时,所述处理器仅生成所述聚类请求。

根据本申请的第二方面的第一或第二信息处理系统,提供了根据本申请的第二方面的第四信息处理系统,其中,若所述处理器生成的所述第二请求包括所述地址分配请求和所述存储设备的访问请求,所述处理器向所述映射管理器发送所述地址分配请求,并获取所述映射管理器提供的所述存储地址;所述处理器向所述固态硬盘发送携带了所述存储地址的所述存储设备的访问请求,以指示所述固态硬盘根据所述存储地址保存同所述关键字关联的数据。

根据本申请的第二方面的第一或第二信息处理系统,提供了根据本申请的第二方面的第五信息处理系统,其中,若所述处理器生成的所述第二请求包括所述聚类请求、所述地址分配请求和所述访问请求,所述处理器向所述加速器发送所述聚类请求,并获取所述加速器返回的第一索引值;所述处理器向所述映射管理器发送携带了所获取的第一索引值和/或所述关键字的所述地址分配请求,并获取所述映射管理器根据所述第一索引值为所述关键字分配的存储地址;所述处理器向所述固态硬盘发送携带了所述存储地址的所述存储设备的访问请求,以指示所述固态硬盘根据所述存储地址保存同所述关键字关联的数据。

根据本申请的第二方面的第一或第三信息处理系统,提供了根据本申请的第二方面的第六信息处理系统,其中,若所述处理器生成的所述第二请求仅包括所述聚类请求,所述处理器向所述加速器发送所述聚类请求,并获取所述加速器返回的第一索引值;以及所述处理器向所述主机返回所述第一索引值作为所述第一请求的处理结果。

根据本申请的第二方面的第一或第三信息处理系统,提供了根据本申请的第二方面的第七信息处理系统,其中,若所述处理器生成的所述第二请求包括所述地址获取请求、所述访问请求和所述搜索请求,所述处理器向所述映射管理器发送携带了所获取的第一索引值的所述地址获取请求,并获取所述映射管理器返回的与所述第一索引值对应的至少一个特征值的至少一个存储地址;所述处理器用所述至少一个存储地址访问向所述固态硬盘,并获取所述固态硬盘返回的所述至少一个特征值;所述处理器向所述加速器发送指示了所述关键字与所述至少一个特征值的所述搜索请求,以获取所述加速器从所述至少一个特征值中筛选与所述关键字对应的至少一个第一特征值,并向所述处理器返回所述至少一个第一特征值,所述第一特征值为与所述关键字的距离小于预设阈值的特征值或所述至少一个第一特征值为所述至少一个特征值中同所述关键字的距离最小的M个特征值,所述M大于等于1;所述处理器向所述主机返回所述至少一个第一特征值作为所述第一请求的处理结果。

根据本申请的第二方面的第一或第三信息处理系统,提供了根据本申请的第二方面的第八信息处理系统,其中,若所述处理器生成的所述第二请求包括所述聚类请求、所述地址获取请求、所述访问请求和所述搜索请求,所述处理器向所述加速器发送所述聚类请求,并获取所述加速器返回的第一索引值;所述处理器向所述映射管理器发送携带了所获取的第一索引值的所述地址获取请求,并获取所述映射管理器返回的与所述第一索引值对应的至少一个特征值的所述至少一个存储地址;所述处理器用所述至少一个存储地址访问所述固态硬盘以获取所述固态硬盘返回的所述至少一个特征值;所述处理器向所述加速器发送指示了所述关键字和所述至少一个特征值的所述搜索请求,并获取所述加速器返回的所述至少一个第一特征值,所述第一特征值为与所述关键字的距离小于预设阈值的特征值或所述至少一个第一特征值为所述至少一个特征值中同所述关键字的距离最小的M个特征值,所述M大于等于1;所述处理器向所述主机返回所述至少一个第一特征值,作为所述第一请求的处理结果。

根据本申请的第二方面的第一至第二信息和第四至第五信息处理系统之一,提供了根据本申请的第二方面的第九信息处理系统,其中,所述处理器响应于从所述固态硬盘接收用于表征完成所述关键字的存储的完成信息,向所述主机指示所述第一请求的处理完成。

根据本申请的第二方面的第一至第九信息处理系统之一,提供了根据本申请的第二方面的第十信息处理系统,其中,所述接口函数携带请求的类型、所述关键字和所述第一索引值中的至少一者。

根据本申请的第二方面的第一至第十信息处理系统之一,提供了根据本申请的第二方面的第十一信息处理系统,其中,若所述处理器生成的所述第二请求包括所述聚类请求、所述搜索请求、所述地址分配请求、所述地址获取请求和所述访问请求中的至少两项请求,所述处理器根据所述第一请求一次性生成所述至少两项请求;或者,所述处理器根据所述第一请求分成多次生成所述至少两项请求。

根据本申请的第二方面的第十一信息处理系统,提供了根据本申请的第二方面的第十二信息处理系统,其中,若所述处理器生成的所述第二请求包括所述聚类请求、所述地址分配请求和所述访问请求,所述处理器根据所述第一请求生成所述聚类请求,并向所述加速器发送所述聚类请求;响应于所述聚类请求,所述加速器确定与所述关键字对应的第一索引值,并向所述处理器返回所述第一索引值;所述处理器接收到所述第一索引值之后,根据所述第一请求和所述第一索引值生成所述地址分配请求,并向所述映射管理器发送所述地址分配请求;响应于所述地址分配请求,所述映射管理器根据所述第一索引值为所述关键字分配存储地址,并向所述处理返回所述存储地址,所述存储地址用于访问所述固态硬盘;所述处理器接收到所述存储地址之后,根据所述第一请求和所述存储地址生成所述固态硬盘的访问请求,并向所述固态硬盘发送所述固态硬盘的访问请求;响应于所述固态硬盘的访问请求,所述固态硬盘根据所述存储地址保存所述关键字。

根据本申请的第三方面,提供了根据本申请的第三方面的第一主机,包括应用程序模块、API接口模块、管理模块、加速驱动模块、映射驱动模块和硬盘驱动模块,其中,所述应用程序模块调用所述API接口模块提供的API;所述管理模块根据被调用API,向所述加速驱动模块、映射驱动模块和硬盘驱动模块中的至少一个发送驱动请求;若接收到所述驱动请求,所述加速驱动模块操作与自身耦合的加速器,并向所述管理模块返回的第一操作结果;若接收到所述驱动请求,所述映射驱动模块操作与自身耦合的映射管理器,并向所述管理模块返回的第二操作结果;若接收到所述驱动请求,所述硬盘驱动模块操作与自身耦合的固态硬盘,并向所述管理模块返回的第三操作结果;所述管理模块接收到第一操作结果、第二操作结果或第三操作结果之后,通过所述API接口模块向所述应用程序模块返回用于指示所述被调用API调用完成的信息。

根据本申请的第三方面的第一主机,提供了根据本申请的第三方面的第二主机,其中,所述第一操作结果指示同关键字对应的第一索引值,所述关键字是所述应用程序调用API提供的关键字;所述第二操作结果指示访问所述固态硬盘的一个或多个存储地址;所述第三操作结果指示所述固态硬盘处理完成对所述一个或多个地址的写入操作,或者从所述固态硬盘读出的第一特征值,所述第一特征值为与所述关键字的距离小于预设阈值的特征值或所述至少一个第一特征值为所述至少一个特征值中同所述关键字的距离最小的M个特征值,所述M大于等于1。

根据本申请的第四方面,提供了根据本申请的第四方面的第一信息处理方法,包括:响应于收到指示了关键字(Key)的第一请求,生成一个或多个第二请求,第二请求包括聚类请求、搜索请求、地址分配请求、地址获取请求和存储设备的访问请求中的一项或多项;根据一个或多个第二请求的处理结果,生成第一请求的处理结果。

根据本申请的第四方面的第一信息处理方法,提供了根据本申请的第四方面的第二信息处理方法,还包括:所述聚类请求指示获取X个索引值中同所述关键字最接近的索引值,其中X是正整数;所述搜索请求指示获取N个特征值中同所述关键字最接近的M个特征值,其中M与N是正整数;所述地址分配请求指示获取同所述关键字和/或第一索引值对应的一个或多个存储地址;所述地址获取请求指示获取同所述关键字对应的存储了所述X个索引值的一个或多个存储地址;所述存储设备的访问请求指示存储设备访问所述一个或多个存储地址。

根据本申请的第四方面的第一或第二信息处理方法,提供了根据本申请的第四方面的第三信息处理方法,还包括:若所述第一请求是调用Get(Key)API产生的指示了关键字的请求,根据所述关键字生成聚类请求,使用所述聚类请求返回的索引值生成地址获取请求,根据所述地址获取请求返回的存储地址生成所述存储设备的访问请求,根据所述存储设备的访问请求返回的X个索引值生成搜索请求,根据搜索请求返回的M个特征值作为所述第一请求的处理结果。

根据本申请的第四方面的第一至第三信息处理方法之一,提供了根据本申请的第四方面的第四信息处理方法,还包括:若所述第一请求是调用Get_With_Index(Key,Index)API产生的指示了关键字与索引值的请求,根据所述索引值生成地址获取请求,根据所述地址获取请求返回的存储地址生成所述存储设备的访问请求,根据所述存储设备的访问请求返回的X个索引值生成搜索请求,根据搜索请求返回的M个特征值作为所述第一请求的处理结果。

根据本申请的第四方面的第一至第四信息处理方法之一,提供了根据本申请的第四方面的第五信息处理方法,还包括:若所述第一请求是调用Get_Index(Key)API产生的指示了关键字的请求,根据所述关键字生成聚类请求,使用所述聚类请求返回的索引值作为所述第一请求的处理结果。

根据本申请的第四方面的第一至第五信息处理方法之一,提供了根据本申请的第四方面的第六信息处理方法,还包括:若所述第一请求是调用Put(Key)API产生的指示了关键字的请求,根据所述关键字生成聚类请求,使用所述聚类请求返回的索引值与所述关键字生成地址分配请求,根据所述地址分配请求返回的存储地址生成所述存储设备的访问请求以将同所述关键字对应的数据写入所述存储设备。

根据本申请的第四方面的第一至第五信息处理方法之一,提供了根据本申请的第四方面的第七信息处理方法,还包括:若所述第一请求是调用Put_With_Index(Key,Index)API产生的指示了关键字与索引值的请求,根据所述索引值与所述关键字生成地址分配请求,根据所述地址分配请求返回的存储地址生成所述存储设备的访问请求以将同所述关键字对应的数据写入所述存储设备。

根据本申请的第五方面,提供了根据本申请的第五方面的第一信息处理系统,包括:第一模块,用于响应于收到指示了关键字(Key)的第一请求,生成一个或多个第二请求,第二请求包括聚类请求、搜索请求、地址分配请求、地址获取请求和存储设备的访问请求中的一项或多项;第二模块,用于根据一个或多个第二请求的处理结果,生成第一请求的处理结果。

根据本申请的第六方面,提供了根据本申请的第六方面的第一信息处理系统,包括处理器、存储器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:响应于收到指示了关键字(Key)的第一请求,生成一个或多个第二请求,第二请求包括聚类请求、搜索请求、地址分配请求、地址获取请求和存储设备的访问请求中的一项或多项;根据一个或多个第二请求的处理结果,生成第一请求的处理结果。

根据本申请的第七方面,提供了根据本申请的第七方面的第一信息处理系统,包括主机、加速器、映射管理器和存储设备,其中,所述加速器、所述映射管理器和所述存储设备各自耦合到所述主机;所述主机根据第一请求生成第二请求,所述第二请求包括聚类请求、搜索请求、地址分配请求、地址获取请求和存储设备的访问请求中的一项或多项;所述主机使用所述第二请求操作所述加速器、所述映射管理器和所述固态硬盘中的至少一者,以完成一项或多项所述第二请求的处理,以得到所述第一请求的处理结果。

根据本申请的第七方面的第一信息处理系统,提供了根据本申请的第七方面的第二信息处理系统,其中,所述主机的应用程序产生第一请求;所述主机的管理程序根据所述第一请求生成第二请求;所述第一请求包括读请求或写请求,所述第一请求携带关键字、或所述第一请求携带所述关键字和与所述关键字对应的索引值。

根据本申请的第七方面的第一或第二信息处理系统,提供了本申请的第七方面的第三信息处理系统,其中,若所述第一请求为调用Put_With_Index(Key,Index)API产生的携带了关键字和第一索引值的请求,所述主机生成所述地址分配请求和所述存储设备的访问请求;或者,若所述第一请求为调用Put(Key)API产生的携带了关键的写请求,所述主机生成所述聚类请求、所述地址分配请求和所述存储设备的访问请求。

根据本申请的第七方面的第一至第三信息处理系统之一,提供了本申请的第七方面的第四信息处理系统,其中,若所述第一请求为调用Get_With_Index(Key,Index)API产生的携带了关键字与索引值的读请求,所述主机生成所述地址获取请求、所述存储设备的访问请求和所述搜索请求;或者,若所述第一请求为调用Get(Key)API产生的携带了关键字的读请求,所述主机生成所述聚类请求、所述地址获取请求、所述存储设备的访问请求和所述搜索请求;或者,所述第一请求为调用Get_Index()API产生的读请求,所述处理器仅生成所述聚类请求。

根据本申请的第七方面的第一至第三信息处理系统之一,提供了本申请的第七方面的第五信息处理系统,其中,若所述主机生成的所述第二请求包括所述地址分配请求和所述存储设备的访问请求,所述主机向所述映射管理器发送所述地址分配请求,并获取所述映射管理器提供的所述存储地址;所述主机向所述固态硬盘发送携带了所述存储地址的所述存储设备的访问请求,以指示所述固态硬盘根据所述存储地址保存同所述关键字关联的数据。

根据本申请的第七方面的第一至第三信息处理系统之一,提供了本申请的第七方面的第六信息处理系统,其中,若所述主机生成的所述第二请求包括所述聚类请求、所述地址分配请求和所述访问请求,所述主机向所述加速器发送所述聚类请求,并获取所述加速器返回的第一索引值;所述主机向所述映射管理器发送携带了所获取的第一索引值和/或所述关键字的所述地址分配请求,并获取所述映射管理器根据所述第一索引值为所述关键字分配的存储地址;所述主机向所述固态硬盘发送携带了所述存储地址的所述存储设备的访问请求,以指示所述固态硬盘根据所述存储地址保存同所述关键字关联的数据。

根据本申请的第七方面的第一或第四信息处理系统,提供了本申请的第七方面的第七信息处理系统,其中,若所述主机生成的所述第二请求仅包括所述聚类请求,所述主机向所述加速器发送所述聚类请求,并获取所述加速器返回的第一索引值;以及所述主机将所述第一索引值作为所述第一请求的处理结果。

根据本申请的第七方面的第一或第四信息处理系统,提供了本申请的第七方面的第八信息处理系统,其中,若所述主机生成的所述第二请求包括所述地址获取请求、所述访问请求和所述搜索请求,所述主机向所述映射管理器发送携带了所获取的第一索引值的所述地址获取请求,并获取所述映射管理器返回的与所述第一索引值对应的至少一个特征值的至少一个存储地址;所述主机用所述至少一个存储地址访问向所述固态硬盘,并获取所述固态硬盘返回的所述至少一个特征值;所述主机向所述加速器发送指示了所述关键字与所述至少一个特征值的所述搜索请求,以获取所述加速器从所述至少一个特征值中筛选与所述关键字对应的至少一个第一特征值,并向所述处理器返回所述至少一个第一特征值,所述第一特征值为与所述关键字的距离小于预设阈值的特征值或所述至少一个第一特征值为所述至少一个特征值中同所述关键字的距离最小的M个特征值,所述M大于等于1;所述主机将所述至少一个第一特征值作为所述第一请求的处理结果。

根据本申请的第七方面的第一或第四信息处理系统,提供了本申请的第七方面的第九信息处理系统,其中,若所述主机生成的所述第二请求包括所述聚类请求、所述地址获取请求、所述访问请求和所述搜索请求,所述主机向所述加速器发送所述聚类请求,并获取所述加速器返回的第一索引值;所述主机向所述映射管理器发送携带了所获取的第一索引值的所述地址获取请求,并获取所述映射管理器返回的与所述第一索引值对应的至少一个特征值的所述至少一个存储地址;所述主机用所述至少一个存储地址访问所述固态硬盘以获取所述固态硬盘返回的所述至少一个特征值;所述主机向所述加速器发送指示了所述关键字和所述至少一个特征值的所述搜索请求,并获取所述加速器返回的所述至少一个第一特征值,所述第一特征值为与所述关键字的距离小于预设阈值的特征值或所述至少一个第一特征值为所述至少一个特征值中同所述关键字的距离最小的M个特征值,所述M大于等于1;所述主机将所述至少一个第一特征值作为所述第一请求的处理结果。

根据本申请的第七方面的第一至第三和第五至第六信息处理系统之一,提供了本申请的第七方面的第十信息处理系统,其中,所述主机响应于从所述固态硬盘接收用于表征完成所述关键字的存储的完成信息,识别出所述第一请求的处理完成。

根据本申请的第七方面的第一至第十信息处理系统之一,提供了本申请的第七方面的第十一信息处理系统,其中,所述接口函数携带请求的类型、所述关键字和所述第一索引值中的至少一者。

根据本申请的第七方面的第一至第十一信息处理系统之一,提供了本申请的第七方面的第十二信息处理系统,其中,若所述主机生成的所述第二请求包括所述聚类请求、所述搜索请求、所述地址分配请求、所述地址获取请求和所述访问请求中的至少两项请求,所述主机根据所述第一请求一次性生成所述至少两项请求;或者,所述主机根据所述第一请求分成多次生成所述至少两项请求。

根据本申请的第七方面的第十二信息处理系统,提供了本申请的第七方面的第十三信息处理系统,其中,若所述主机生成的所述第二请求包括所述聚类请求、所述地址分配请求和所述访问请求,所述主机根据所述第一请求生成所述聚类请求,并向所述加速器发送所述聚类请求;响应于所述聚类请求,所述加速器确定与所述关键字对应的第一索引值,并向所述主机返回所述第一索引值;所述主机接收到所述第一索引值之后,根据所述第一请求和所述第一索引值生成所述地址分配请求,并向所述映射管理器发送所述地址分配请求;响应于所述地址分配请求,所述映射管理器根据所述第一索引值为所述关键字分配存储地址,并向所述主机返回所述存储地址,所述存储地址用于访问所述固态硬盘;所述主机接收到所述存储地址之后,根据所述第一请求和所述存储地址生成所述固态硬盘的访问请求,并向所述固态硬盘发送所述固态硬盘的访问请求;响应于所述固态硬盘的访问请求,所述固态硬盘根据所述存储地址保存所述关键字。

根据本申请第八方面,提供了根据本申请第八方面的第一信息处理方法,包括:根据第一请求生成第二请求,所述第二请求包括聚类请求、搜索请求、地址分配请求、地址获取请求和存储设备的访问请求中的一项或多项;使用所述第二请求操作所述加速器、所述映射管理器和所述固态硬盘中的至少一者,以完成一项或多项所述第二请求的处理,以得到所述第一请求的处理结果。

根据本申请第九方面,提供了根据本申请第九方面的第一信息处理系统,包括处理器、存储器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:根据第一请求生成第二请求,所述第二请求包括聚类请求、搜索请求、地址分配请求、地址获取请求和存储设备的访问请求中的一项或多项;使用所述第二请求操作所述加速器、所述映射管理器和所述固态硬盘中的至少一者,以完成一项或多项所述第二请求的处理,以得到所述第一请求的处理结果。

本申请中的加速器、映射管理器和固态硬盘的管理及驱动由处理器实施,从而减少了主机与处理器之间的交互,进而提高处理效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1A为现有技术中的存储设备的框图;

图1B有现有技术中FTL表的示意图;

图2为本申请实施例提供的用于聚类计算的加速器的结构示意图;

图3为本申请实施例提供的距离计算模块的结构示意图;

图4为本申请实施例提供的结果处理模块合并计算结果的示意图;

图5A为本申请实施例提供的一种信息处理系统的结构示意图;

图5B-5F为本申请实施例提供的信息处理系统处理的流程示意图;

图6展示了根据本申请又一实施例提供了主机600。

具体实施方式

下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

如图2所示,本申请实施例一提供了一种用于聚类计算的加速器200。加速器200是提供例如聚类与搜索等功能的硬件加速器。在聚类功能中,加速器获取键值(Key)与指定数量的索引值(Index),并给出同获取的键值最接近的索引值。索引值代表了已经存在的多种(例如X种,X为正整数)类别,而加速器输出的同获取的键值最接近的索引值,是比较键值与X个索引值的每个索引值得到的X个距离中,具有最小距离的索引值。

在搜索功能中,加速器获取键值与指定数量(例如N个,N为正整数)的特征值(Vector),并给出同获取的键值最接近的M个(M为正整数,M

加速器200包括仲裁模块201、数据搬运模块202和距离计算模块203。

使用加速器200的外部单元(例如,主机、运行软件或固件的处理器、通过网络访问加速器的用户等)向加速器200发送加速请求,并获取加速器200提供的处理加速请求的结果。加速器200的仲裁模块201根据收到的加速请求向数据搬运模块202发送数据搬移请求。作为举例,指示聚类功能的加速请求携带键值。在聚类功能中,还需要获取X个索引值。例如加速器的仲裁模块201知晓X个索引值的存储位置。可选地,外部单元配置加速器200,以向加速器200指示X个索引值或其存储位置。依然可选地,外部单元还指示加速器200索引值的存储位置和/或数量被更新,从而仲裁模块201得以获取更新后的多个或全部索引值。

作为又一个例子,指示搜索功能的加速请求携带键值和与键值对应的索引值。在搜索功能中,除了键值和与键值对应的索引值之外,还需要N个与该索引值对应的特征值。例如,仲裁模块201知晓N个特征值的存储位置。又如,外部单元配置加速器200,以向加速器200指示N个特征值或其存储位置。再如,外部单元还向加速器200指示N个特征值的存储位置和/或数量被更新,从而仲裁模块201得以获取更新后的多个或全部特征值。

根据一个实施例,第一请求携带所述键值时,数据搬运模块202根据第二请求从双倍速率同步动态随机存储器(double data rate synchronous dynamic random accessmemory,DDRSDRAM)中将键值和X个索引值搬移到距离计算模块203,X为大于等于2的整数;距离计算模块203根据X个索引值对键值进行距离计算,获取第一索引值,第一索引值为X个索引值中与键值距离最小的索引值。

需要说明的是,本申请实施例中的第一请求是主机发送的,第一请求是读请求或写请求。仲裁模块201接收到的不是主机发送的第一请求,而是固件收到第一请求后,对第一请求进行处理或根据第一请求生成的新的请求,如聚类请求或搜索请求。写请求是例如调用Put(Key)或Put_With_Index(Key_Index)API(Application programming Interface,应用编程接口)函数而对加速器产生的访问。读请求包括例如调用Get(Key)、GetIndex(Key)和Get_With_Index(Key_Index)API而对加速器产生的访问。其中,API函数的参数Key是键值,而参数Index代表索引值。

作为举例,第一请求携带键值和第一索引值时,第一请求是通过Put_With_Index(Key_Index)或Get_With_Iindex(Key_Index)产生的对加速器的访问请求;而第一请求携带键值未携带第一索引值时,第一请求是通过Put(Key)、Get(Key)或GetIndex(Key)产生的对加速器的访问请求。第一请求由主机发出并到达位于硬件层的加速器200。作为举例,加速器200接收到经过固件层处理的第一请求,例如聚类请求或搜索请求,例如,加速器200接收到的是没有携带键值和/或第一索引值的请求,但该请求指示了键值和/或第一索引值在存储器(例如,在加速器200外部并耦合到加速器200的存储器)中的地址。

本申请实施例中,加速器200中的仲裁模块201与固件连接,接受固件的访问。可选地,仲裁模块201向固件层提供多个通道,各通道逻辑上独立和/或并行地处理加速请求。从而在固件看来,加速器200提供了多个逻辑上的加速器(每通道对应一个加速器),固件向加速器200提供的加速请求指示所使用的通道。

仲裁模块201可以采取以下方式接收固件层向通道发送的请求,包括:

方式1,仲裁模块201采用轮询调度的仲裁方式从各个通道接收请求;

方式2,仲裁模块201采用加权轮询调度的仲裁方式从各个通道接收请求;

方式3,仲裁模块201采用按照预设顺序的仲裁方式从各个通道接收请求。

下面以多个通道为4个通道为例对仲裁模块201的仲裁方式进行解释,其中,4个通道分别是1号通道、2号通道、3号通道和4号通道。

对于方式1,轮询调度采用RoundRobin算法实现,仲裁模块201从1号通道开始接收请求,如果本次在1号通道接收到了请求则处理该请求,并且下一次从2号通道接收请求,第3次在3号通道接收请求,第4次在4号通道接收请求,第5次则回到1号通道。

对于方式2,加权轮询调度采用WeightedRoundRobin算法实现,此时仲裁模块201轮询4个通道,计算4个通道中每个通道当前的权值和4个通道总共的权值,之后选择4个通道中当前权值最大的通道来接收请求,比如4个通道当前的权值分别为:1号通道权值为1、2号通道权值为3、3号通道权值为2和4号通道权值为4,选中权值4的4号通道,选中4号通道之后,4个通道的权值变化为:1号通道权值为1、2号通道权值为3、3号通道权值为2和4号通道权值为-6,而下一次轮询前4个通道的权值变化为:1号通道权值为2、2号通道权值为6、3号通道权值为4和4号通道权值为-2。

对于方式3,仲裁模块201按照预设的顺序来接收请求,例如,预设的顺序为3号通道→1号通道→4号通道→2号通道,仲裁模块201先访问3号通道,如果3号通道中没有等待处理的请求,则仲裁模块201继续访问1号通道。需要注意的是,仲裁模块201每次都是从3号通道开始访问。

仲裁模块201从多个通道中接收到聚类请求或搜索请求之后,向数据搬运模块202发送数据搬移请求。数据搬移请求指示数据搬运模块202从外部存储器中搬运数据到距离计算模块203。

由于第一请求是Put(Key)、Put_With_Index(Key,Index)、GetIndex(Key)、Get(Key)或Get_With-Iindex(Key_Index)等,根据第一请求的不同,仲裁模块201接收到搜索请求或聚类请求。从而根据搜索请求或聚类请求仲裁模块201发出的第二请求也包括多种情况,也就是根据第一请求的不同指示搬运的数据不同。

表1

如表1所示,在第一请求是Put(Key)或Get(Key)时,数据搬运模块202需要从DDR中搬运键值和X个索引值,而第一请求是Get(Key)或GetWithIndex时,数据搬运模块202需要从DDR中搬运键值和多个特征值。需要说明的是,在第一请求是Get(Key)时,仲裁模块201是分两次接收到聚类请求和搜索请求,而不是一次接收两个请求。可以理解地,请求中未指示X个索引值,也未指示其存储位置。而是仲裁模块或数据搬移模块知晓X个索引值或其存储位置。

这里对键值key、索引值(Index)和特征值(Vector)进行解释。信息处理系统要处理多种数据。例如视频、图片、文本文件等是非结构化数据。非结构化不便于检索和使用。为了便于检索或使用,对非结构化数据进行结构化处理。例如,对原始数据添加标签,以指示原始数据的来源、格式、存储位置、所需的访问权限等结构化信息。作为又一个例子,对原始数据的内容进行分析,例如从视频或图片中提取、缩略图、摘要,提取诸如人像、汽车等物体,提取人面部特征、身高、性别、年龄等特征,提取汽车品牌、车牌照等特征。与原始数据关联的标签、特征等都作为结构化处理生成的结构化信息。结构化信息是便于检索的,通过现有技术的数据库或搜索引擎技术,或者现有或将来出现的其他搜索技术对结构化信息进行检索。

将结构化信息中的一种或多种标签和/或特征作为键,将结构化信息所关联的数据和/或结构化信息本身作为值,通过KV存储设备得以记录、访问和检索非结构化数据。申请号为2018102074169、发明名称为KV存储的键与值的生成方法与装置的中国专利申请提供了利用机器学习部件生成键的方法。

使用机器学习部件处理例如人脸图片的数据,将得到关联于特定人脸图片的特征值(也称为向量)。对多幅图片的每个通过机器学习部件生成特征值。相比于数据,特征值具有较小的尺寸,例如,64字节~4KB。

在KV存储系统中,都是采用输入键值(key)来检索数据(value)。为了便于检索及便于获取数据,本申请实施例中,键值、索引值和特征值本质上都是用于数据的索引,即键值、索引值和特征值本质上都可以叫做特征值,区别在于,索引值是预先配置的,键值是由用户输入主机的且在第一请求中携带的,而特征值是根据数据计算的。具体来讲,根据信息处理系统要存储的数据种类不同,特征值的形式也不同。例如,要存储的数据为图像数据,特征值为对图像处理后得到的向量(vector)。对图像数据处理以获取特征值的方式可参见现有技术,在此不做限定。

而对多个特征值实施聚类,会得到特征值的多个组。每个组包括1个或多个特征值。用索引值代表特征值的每个组。例如,将属于相同组的多个特征值求平均值后得到的中心值(也就是平均值)作为代表该组的索引值。相反,与索引值的距离小于预设阈值的特征值则可看做是属于索引值所代表的组的特征值。

特征值之间的距离是特征值所代表的向量间的距离,这一距离包括欧式距离或余弦距离等。在一个例子中,索引值是基于多个特征值而产生的;在又一个例子中,在使用加速器200的信息处理系统中完全没有数据时,可以预先配置多个索引值。

第二请求携带以下信息:

在加速请求是聚类请求时,第二请求携带键值和X个索引值的第一物理地址,或者键值和用于指向第一物理地址的指针;在加速请求是搜索请求时,第二请求携带键值和N个特征值、键值和N个索引值的第二物理地址,或者键值和用于指向第二物理地址的指针;

在加速请求是聚类请求或搜索请求事,第二请求还携带用于存放加速器输出的结果的物理地址。

需要说明的是,本申请实施例中涉及的键值可以是一组数值,并不代表仅仅是一个数值。第一物理地址和第二物理地址都是外部存储器中的地址,从而数据搬运模块202就能够将在外部存储器中的数据搬运给距离计算模块203。

距离计算模块203接收到的数据不同,距离计算模块203实现两种功能,包括聚类功能和搜索功能。

具体来讲,在第一请求携带键值和第一索引值时,数据搬运模块202将键值和N个特征值搬运到距离计算模块203,则距离计算模块203实现搜索功能。此时,距离计算模块203根据N个特征值对键值进行距离计算,以从N个特征值中获取与键值距离最小的M个特征值,N和M均为大于等于1的整数,且M小于等于N。需要说明的是,这N个特征值是属于第一索引值对应的类别中的所有特征值。

可选的,为了得到最小的M个第一特征值,距离计算模块203计算N个特征值中每个特征值与所述键值的距离,以获取N个第一距离;距离计算模块对N个第一距离按照取值从小到大进行排序,获取排序后的距离队列;距离计算模块从排序结果中选取前M个第一特征值。

以N等于1000为例,距离计算模块203对键值进行1000次距离计算,得到1000个距离,然后将这1000个距离从小到大进行排序得到一个长度为1000的距离队列,然后从距离队列中选择取值最小的M个距离,并获取这M个距离对应的M个第一特征值。

在可选地实施例中,为了减少加速器200所需的缓存资源,在获取M个第一特征值时,预先设置距离队列的长度为M,也就是说改距离队列只能缓存M个第一距离,距离计算模块203在计算第一距离时,每次计算出一个第一距离后,通过插入排序的方式将其插入队列长度为M的距离队列中,从而在N个距离均计算完后能够直接得到取值最小的M个第一距离。本申请实施例中的插入排序是在每次计算出一个第一距离后,通过比较该第一距离和距离队列中的第一距离的大小来确定该第一距离在距离队列中的位置。例如,当前计算出的第一距离为0.8,排在距离队列中第3位的第一距离的取值为0.5,排在距离队列中第4位的第一距离的取值为0.82,从而确定当前计算出的第一距离在距离队列中的位置为第4位,而取值为0.82的第一距离在距离队列中的位置则需要顺延为第5位。又如,当前计算出的第一距离为10,而排在距离队列第M位的第一距离的取值为8.7,则当前计算出的第一距离取值太大不会被放入距离队列。

本申请实施例中的M小于等于256,而在可选的实施方式中M的取值可根据需求进行调整,例如1024、50、128等。可选地,在采用插入排序的方式对N个第一距离进行排序时,距离队列的队列长度始终保持256项。需要注意的是,由于N可以小于256或者还没有计算出256个第一距离,此时的距离队列中存在空项。

而在第一请求携带键值但未携带第一索引值时,数据搬运模块202将键值和X个索引值搬运到距离计算模块203,则距离计算模块203实现聚类功能,其中,此时的仲裁模块201接收到的加速请求是聚类请求,从而数据搬运模块202从DDR中获取X个索引值,这X个索引值为预先存储在外部存储器中的。此时,距离计算模块203根据X个索引值对键值进行距离计算,获取第一索引值,第一索引值为X个索引值中与键值距离最小的索引值,X为大于等于2的整数。

可选的,距离计算模块203对键值进行距离计算时,距离计算模块203计算X个索引值中每个索引值与键值的距离,以获取X个第二距离;

距离计算模块203比较X个第二距离中的任意两个第二距离的大小,确定X个索引值中最小的第二距离的索引值为第一索引值。

具体来讲,距离计算模块203先将X个第二距离都计算出来之后,对X个第二距离中的任意两个进行比较,最后得到第一索引值。距离计算模块203还在计算第二距离的同时进行比较,例如,在计算出2个第二距离后,先比较这2个第二距离的大小,保留较小的第二距离,然后再计算第3个第二距离和之前保留的第二距离比较,依次类推,每次比较后保留取值小的第二距离,直至X个第二距离都计算且比较完成,最后留下的第二距离对应的索引值就是第一索引值。

需要说明的是,本申请实施例中的距离计算采用欧式距离计算或余弦距离计算,其中,欧式距离计算采用公式(1)实现,余弦夹角值计算采用公式(2)实现,如下:

其中,d为欧式距离,cosθ为代表余弦距离,向量{x1,x2,…,xn}为键值,向量{y1,y2,…,yn}为索引值或特征值。需要说明的是,公式中的向量为n维(n为大等于1的整数)的向量,本申请中的键值、索引值或特征值采用但不限于n维向量的形式,例如,数字、字符等。

本实施例中的第一距离和第二距离均采用上述公式(1)或公式(2)计算,可根据需求选择,也采用现有技术中的方法计算,在此不做限定。

可选地,加速器200还包括归一化模块204,在距离计算模块203接收键值和X个索引值之前,归一化模块204对键值和X个索引值进行归一化运算,并向距离计算模块203发送归一化后的键值和X个索引值;或者,

在距离计算模块203接收键值和N个特征值之前,所述归一化模块204对键值和N个特征值进行归一化运算,并向距离计算模块203发送归一化后的键值和N个特征值。

归一化模块204在进行归一化运算时采用以下公式(3):

其中,A表示输入的向量,Len(A)为向量A的长度(即向量A的模值)。

需要注意的是,归一化模块204对键值和X个索引值、或者键值和N个特征值进行归一化运算,是将键值进行归一化、将X个索引值中的每个索引值、或者N个特征值中的每个特征值分别进行归一化。在距离计算采用余弦夹角值的方式时,提前进行归一化可以简化余弦夹角值的计算,从而能够降低对计算能力的要求。这是由于如公式(2)之类的夹角计算时,分母部分的

cosθ=x

其中,cosθ为夹角θ的余弦值,向量{x1,x2,…,xn}为归一化后的键值,向量{y1,y2,…,yn}为归一化后的索引值或特征值。

在一个例子中,距离计算模块203采用的是余弦距离计算,从而在距离计算模块203接收键值和X个索引值之前,归一化模块204对键值和X个索引值进行归一化运算,并向距离计算模块203发送归一化后的键值和归一化后的X个索引值。

在有一个例子中,距离计算模块203采用的是欧式距离计算,从而无须进行归一化计算,向距离计算模块203发送键值和X个索引值。

可以理解地,距离计算与可选的归一化计算,产生了大量计算任务。对于聚类功能,要对键值与X个索引值的每个进行距离计算,还需要实施排序操作以得到同键值最接近的索引值。对于搜索功能,要对键值与N个特征值的每个进行距离计算,还要实施排序操作以得到M个特征值。这些计算任务如果由处理器通过执行程序计算,将给处理器带来巨大的计算负担,并增大了处理读/写请求的处理延迟。在本申请的实施例中,通过提供加速器200,承担了用于聚类功能与搜索功能的计算操作,减少了处理器的负担,并通过硬件而非执行程序来完成计算,降低了处理延迟并增大了数据吞吐量。可选地,仲裁模块201从所述多个通道中的一个通道中获取请求时,仲裁模块201一次获取多个与所述第一请求对应的第一消息,仲裁模块201指示距离计算模块203中的多个计算单元处理所述多个第一消息。

参见图3,图3中给出了距离计算模块203的一种可能的结构,距离计算模块203包括多个计算单元(processingelement,PE)2031,每个计算单元均进行如上述公式(1)、公式(2)或公式(4)的计算。

需要说明的是,本申请实施例中的第一请求仅表示主机发送的请求,并不限制第一请求的数量,也就是说,主机可能发送了多个请求,固件对主机发送的请求处理,并将处理后的多个请求通过多个通道发送给仲裁模块201,从而仲裁模块201在多个通道中的每个通道内都有可能接收到多个请求,因此,仲裁模块201会在一个通道获取到多个第一消息,每个第一消息对应于一个第一请求。由于存在多个第一消息,仲裁模块201会为每个第一消息指定一个计算单元,从而距离计算模块203能够同时处理多个第一消息,即多个计算单元并行处理多个第一消息,这里的每个第一消息对应于一组键值。

具体的,由于主机发送的第一请求本身携带有键值,第一请求携带的键值可能是一个或多个,也就是说仲裁模块201在接收到一条加速请求时,这条加速请求包括键值中有一个键值的数值或一组键值的数值。进一步,多个计算单元并行处理多个第一消息,从而多个计算单元处理的键值包括以下情况:

情况1,每个计算单元处理一个键值的数值;

情况2,每个计算单元处理一组键值的数值;

情况3,多个计算单元中的一部分计算单元中的每个处理一个键值的数值,多个计算单元中的另一部分计算单元中的每个处理一组键值的数值。

对于情况1,例如,仲裁模块201从一个通道中获取了7个第一消息,每个第一消息只携带一个键值的数值,从而距离计算模块203利用7个计算单元分别计算7个第一消息中携带的一个数值。

作为一个例子,对于情况2,仲裁模块201从一个通道中获取了5个第一消息,每个第一消息携带一组键值的数值,从而距离计算模块203利用5个计算单元分别计算5个第一消息中携带的一组数值。

作为又一个例子,对于情况3,仲裁模块201从一个通道中获取了8个第一消息,有3个第一消息均携带一个键值的数值,有5个第一消息均携带一组键值的数值,从而距离计算模块203利用3个计算单元分别计算3个第一消息中携带的一个数值,利用5个计算单元分别计算5个第一消息中携带的一组数值。

可选的,所述距离计算模块203包括Y个计算单元,所述键值包括Z组数值,所述Y和所述Z均为大于等于1的整数,且Z小于等于Y。

所述距离计算模块203利用所述Y个计算单元,根据所述X个索引值同时对所述Z组数值进行距离计算,获取所述Z组数值中每个数值对应的索引值。

具体的,由于距离计算模块203包括Y个计算单元,每个计算单元处理一组键值,距离计算模块203最多同时处理Y组键值,因此,仲裁模块201一次最多获取Y个第一消息,例如,Y等于8,1号通道中等待有12个第一消息,仲裁模块201从1号通道中只会获取8个第一消息,剩余的4个需要等待仲裁模块201后续来处理。

可选地,仲裁模块201将获取的多个加速消息指派给多个计算单元。例如,指派计算单元之一来处理加快消息之一。作为举例,计算单元各自具有计算单元标识,计算单元标识用于唯一的确定计算单元。参看图3,各计算单元分别具有计算单元标识(2031-1、2031-2……2031-Y)。仲裁模块210为获取的每个加速消息分配计算单元标识,以指示由具有该计算单元标识的计算单元来处理该加速消息。

可选地,仲裁模块201为所述多个第一消息中的每个第一消息分配计算单元标识,其中,计算单元标识指示所述距离计算模块203中的对应计算单元来处理携带该计算单元标识的第一消息,所述第一计算单元标识与所述第一计算单元对应。

可选的,继续参见图3,所述距离计算模块203还包括Y个管理单元2032,每个管理单元同Y个计算单元中的一个计算单元耦合。每个管理单元具有同其耦合的计算单元所对应的计算单元标识。

Y个管理单元都耦合到数据搬移模块202。数据搬移模块提供给计算单元的附加了计算单元标识的加速消息的每个被同时提供所有Y个管理单元。管理单元响应于接收到加速消息,识别其中携带的计算单元标识同自己所具有的计算单元标识是否一致,并且仅获取同自身所具有的计算单元标识一致的加速消息并提供给同自身对应的计算单元。

管理单元还监视同自身对应的计算单元的工作状态,以知晓计算单元是否空闲并能处理加速消息。管理单元仅为能处理加速消息的计算单元获取并转发加速消息。

可选地,仲裁单元201同时将Z个加速消息提供给Y个管理单元。Z个加速消息的每个被附加了计算单元标识。Y个管理单元的每个从Z个加速消息中识别同自己所具有的计算单元标识一致的加速消息,并且将获取的加速消息提供给同自身对应的计算单元。

依然可选地,仲裁单元201将从相同通道(记为通道C)上获取的Z个加速消息提供给Y个管理单元。Z个加速消息的每个被附加了计算单元标识以及相同的通道号。Y个管理单元的每个从Z个加速消息中识别同自己所具有的计算单元标识一致的加速消息,并且将获取的加速消息提供给同自身对应的计算单元。进一步可选地,在这Z个加速消息被处理完成前,仅将来自通道C的后续加速消息提供给Y个管理单元,而不再处理来自其他通道的加速消息。

所述仲裁模块201在发送所述第二请求时,为所述Z组数值分配计算单元标识,每个管理单元从所述Z组数值中获取计算单元标识与自身相同的一组数值,每个管理单元将获取到的一组数值发送给与自身耦合的计算单元。

具体的,仲裁模块201为每个第一消息分配计算单元标识,以保证第一消息对应的数据进入指定的计算单元进行处理,从而保证距离计算模块203在处理多个第一消息时数据的顺序不会错乱。例如,共有3个第一消息,编号分别是1号、2号和3号,距离计算模块203中有6个计算单元,编号分别是1号、2号、……、6号,仲裁模块201为1号第一消息分配1号计算单元标识、为2号第一消息分配2号计算单元标识、为3号第一消息分配3号计算单元标识,从而距离计算模块203就知道是由1号计算单元处理1号第一消息对应的数据,不会由5号计算单元处理1号第一消息对应的数据。

可选的,若所述距离计算模块203未处理完所述多个第一消息,即使所述多个第一消息的数量小于所述距离计算模块203的计算单元的数量且所述距离计算模块203中有空闲的计算单元,所述仲裁模块201也不指示所述距离计算模块203处理所述多个通道中的消息。

具体来讲,为了保证处理多个通道内的请求的顺序,仲裁模块201即使获取到少于距离计算模块203中的计算单元的数量的第一消息,也不会继续获取其他通道内的第一消息来让空闲的计算单元进行处理。

可选地,仲裁模块201在获取所述多个第一消息后,聚合所述多个第一消息,并指示所述距离计算模块203中的至少一个计算单元处理聚合后的多个第一消息。

需要说明的是,距离计算模块203中的每个计算单元都具备处理一组键值的计算能力,如果每个第一消息都仅对应于一个键值,那么会造成计算单元的计算能力的浪费,因此,仲裁模块201获取每个第一消息对应的键值数量,并根据计算单元的计算能力对多个第一消息进行合并,从而充分利用距离计算模块203的计算能力。

可选的,参见图2,加速器200还包括结果处理模块205,在距离计算模块203获得计算结果之后,结果处理模块205合并每个计算单元的计算结果,并向DDR发送合并后的计算结果。

图4是本申请实施例中的结果处理模块合并计算结果的一个示意图。如图4所示,距离计算模块203包括8个计算单元,结果处理模块205将8个计算结果401~408按照计算单元的位置合并成一个结果队列409,并将结果队列409中的数据按照结果队列409的格式发送给外部存储器。

参见图5A,本申请实施例二提供了一种信息处理系统500,包括主机501、固态硬盘502、加速器503、映射管理器504和处理器505。其中,加速器503是例如上述实施例的用于聚类计算的加速器;固态硬盘502是例如NVMeSSD、OCSSD、KVSSD等固态硬盘;主机501是计算机,处理器505是FPGA芯片。主机501同处理器505直接耦合或通过网络耦合。

主机耦合到例如摄像头、交换机、服务器等电子设备。

例如,主机上运行应用程序,应用程序产生请求,请求类型包括读请求(Get、Get_Index或Get_With_Index)和写请求(Put或Put_With_Index),从而该应用程序生成第一请求。作为举例,应用程序为实施对关键字(Key)的查询而调用Get(Key)API来产生读请求,并期待得到同关键字(Key)关联的一组特征值或者进一步地同这组特征值关联地的数据。具体地,关键字(Key)来自根据用户输入的图片生成的特征值,应用程序调用Get(Key)API希望得到同用户输入的图片相似的一组图片。

作为又一个例子,应用程序实施对关键字(Key)与索引(Index)的查询而调用Get(Key,Index)API来产生读请求。关键字(Key)来自根据用户输入的图片生成的特征值,而索引(Index)指示了用户指定的搜索图片的类别(例如,人脸或车牌)。应用程序调用Get(Key,Index)API以在由索引(Index)指定的类别中得到同用户输入的图片相似的一组图片。

作为再一个例子,应用程序实施对对关键字(Key)的查询而调用Get_Index(Key)API来产生读请求。应用程序调用Get_Index(Key)API希望得到同用户输入的图片关联的图片类别。

可选地,第一请求包括多个键值和多个第一索引值。

在一种实施方式中,主机501上运行的应用程序调用Get/PutAPI产生第一请求,第一请求被发送给处理器505处理。处理器505根据第一请求产生聚类请求、搜索请求、地址分配请求、获取地址请求访问存储设备的请求中的一项或多项,并操作加速器503、固态硬盘502与映射管理器504的一个或多个,以完成对第一请求的处理,并向主机501返回结果。

在又一个例子中,主机501上运行的应用程序调用Get/PutAPI产生第一请求,主机501上运行的驱动程序或管理程序根据第一请求产生聚类请求、搜索请求和/或访问存储设备的请求,并通过处理器505来操作加速器503、固态硬盘502与映射管理器504的一个或多个。加速器503、固态硬盘502与映射管理器504处理请求所得到的结果都被提供给主机501的驱动程序,驱动程序或管理程序在得到第一请求的处理结果后才将处理结果提供给应用程序。

参见图5B,图5B中给出了信息处理系统500处理Get_Index(Key)请求的流程示意图。主机501上运行的应用程序通过调用API发送Get_Index(Key)请求,主机501上运行的驱动程序或管理程序响应于对Get_Index(Key)的调用而生成聚类请求发送处理器505。从而处理器505接收聚类请求。聚类请求中携带了关键字(Key)。可选地,主机501还向提供给处理器505的请求添加X个索引值或者指示了X个索引值的地址。

处理器505聚类请求后,向加速器503发送聚类请求。聚类请求指示了关键字(Key)与X个索引值。可选地,处理器505为聚类请求附加X个索引值或者指示了X个索引值的地址。加速器503根据上述实施例中描述的方式工作,比较关键字(Key)与X个索引值的距离,并输出同关键字(Key)具有最小距离的索引值(第一索引值)给处理器505。

可选地,加速器503将第一索引值写入外部存储器(未示出)之后,加速器503还会向处理器505发送用于表征计算完成的第一完成信息。

处理器505在接收到第一完成信息后,将第一完成信息和第一索引值发送给主机501。主机501的驱动程序或管理程序将第一索引值作为Get_Index(Key)请求的处理结果提供了调用该API的应用程序。

可选地,若主机501的应用程序调用Get(Key)或Put(Key)API(未示出),主机501的驱动程序或管理程序作为响应也生成聚类请求并发给处理器505。聚类请求携带了关键字(Key)与X个索引值。处理器505获取聚类请求所指示的关键字(Key)。处理器505还获取X个索引值,并向加速器503发送聚类请求,聚类请求指示了输入的键值(Key)与X个索引值。

响应于聚类请求,加速器503向处理器505提供的计算结果指示了同键值对应的第一索引值。接下来,处理器505再将键值与同第一索引值对应的N个特征值提供给加速器503,以指示加速器503执行搜索相似数据的功能。加速器503提供的计算结果指示了同键值与第一索引值对应的M个特征值。处理器505将从加速器503获取的M个特征值提供给主机501,作为对聚类请求的响应。

在可选的实施方式中,图5B中展示的主机501的驱动程序或管理程序的操作由处理器505实施。从而减少了在处理器505与主机501之间的交互,提高了处理效率。

图5C给出了信息处理系统500根据索引值获取特征值的流程示意图。在处理Get(Key)、Get_With_Index(Key,Index)、Put(Key)或Put_With_Index(Key,Index)请求时,需要获取同索引(Index)对应的N个特征值。在主机501的驱动程序或管理程序的指示下,处理器505访问映射管理器504来根据索引(Index)获取存储了N个特征值的地址,并根据获取的地址访问固态硬盘502获得N个特征值。

在主机501发出了Get(Key)或Put(Key)请求后,处理器505要先向加速器503(参看图5B)发送聚类请求,以得到同关键字(Key)对应的索引值(Index)。而若主机501发出的是Get_With_Index(Key,Index)或Put_With_Index(Key,Index)请求,则从Get_With_Index(Key,Index)或Put_With_Index(Key,Index)请求的参数中获得索引值(Index)。

参看图5C,主机501的驱动程序或管理程序将索引值(Index)发送给处理器505。根据主机501的应用程序之前发出的是读请求还是写请求,主机501的驱动程序或管理程序将索引值(Index)发送给处理器505时还指示处理器505要通过映射管理器504执行的操作。处理器505将索引值发送给映射管理器504。

映射管理504接收到索引值后,若主机的应用程序之前发出的请求是写请求,如Put(Key)或Put_With_Index(Key,Index),则根据索引值(Index)为输入的键值分配存储地址,该存储地址用于访问固态硬盘502。映射管理504将分配的存储地址提供给处理器505。若主机发出的请求是读请求,如Get(Key)或Get_With_Index(Key,Index),则映射管理模块504接收索引值(Index)之后,获取同索引值(Index)对应的所有特征值的存储地址,例如获取索引值(Index)所代表的分类中的N个特征值的N个存储地址,并将索引值(Index)对应的所有特征值的存储地址发送给处理器505。N个特征地址的N个存储地址为N个分立的存储地址或者N个连续在一起的存储地址。在N个存储地址连续时,N个特征值的存储地址可用一个存储地址表示,此时只需要获取这一个存储地址。

处理器505将映射管理器504返回的存储地址发送给主机501。主机501的驱动程序或管理程序,根据接收的存储地址,生成访问固态硬盘502的请求连同存储地址发送给处理器505。若主机501的应用程序之前发出的是读请求,如Get(Key)或Get_With_Index(Key,Index),此时主机501生成从固态硬盘502读出数据的请求。

处理器505用存储地址与对读请求或写请求的指示访问固态硬盘502。

固态硬盘502根据收到的请求,向收到的存储地址写入数据或从存储地址读出数据。作为举例,从固态硬盘读出的数据是同索引值(Index)对应的N个特征值;向固态硬盘写入的数据是应用程序通过调用Put(Key)或Put_With_Index(Key,Index)要写入的特征值。

对于读出数据的请求,固态硬盘502向处理器505发送读出的数据(N个特征值)。处理器505将读出的数据发送给主机501。主机501的驱动程序根据收到的指示读出数据完成的消息向调用Get(Key)或Get_With_Index(Key,Index)API的应用程序提供读出的数据并指示API调用完成。至此,对主机之前发出的Get(Key)或Get_With_Index(Key,Index)的处理完成。

对于写入数据的请求,固态硬盘502向处理器505发送指示写入数据处理完成的消息。处理器505将指示写入数据完成的消息发送给主机501(未示出)。主机501的驱动程序根据收到的指示写入数据完成的消息向调用Put(Key)或Put_With_Index(Key,Index)API的应用程序指示调用完成。至此,对主机之前发出的Put(Key)或Put_With_Index(Key,Index)的处理完成。

在可选的例子中,若主机501的应用程序调用Put(Key)或Get(Key)时,首先执行图5B中的流程以获得索引值(Index),在主机501在接收到索引值之后,继续图5C的流程。

在可选的实施方式中,图5C中展示的主机501的驱动程序或管理程序的操作由处理器505实施。从而减少了在处理器505与主机501之间的交互,提高了处理效率。

参见图5D,主机501将搜索请求发送给处理器505。

若主机发出的请求是读请求,如Get(Key),主机501通过处理器505先向加速器503发出聚类请求,加速器503返回同关键字(Key)对应的索引值(Index)(也参看图5B),主机501再通过处理器505向映射管理器504与固态硬盘502获取同索引值(Index)对应的N个特征值(Vector)(也参看图5C),接下来,如在图5D中展示的,主机501通过处理器505向加速器503发出搜索请求。搜索请求中携带了关键字(Key)与N个特征值。主机501期待处理器505就搜索请求返回N个特征值中同关键字(Key)最接近的M个索引值。若主机是通过调用Get_With_Index(Key,Index)发出的读请求,主机501先通过处理器505向映射管理器504与固态硬盘502获取同索引值(Index)对应的N个特征值(Vector)(也参看图5C),接下来,如在图5D中展示的,主机501通过处理器505向加速器503发出搜索请求。

参看图5D,主机501后,向处理器505发送携带了关键字(Key)和N个特征值的搜索请求。

处理器505接收到搜索请求后,向加速器503发送搜索请求,以使加速器503按照上述实施例中描述的方式工作,搜索出N个特征值中同关键字(Key)更接近的M个特征值。

加速器503将M个特征值的计算结果写入外部存储器,加速器503向处理器505发送用于表征搜索处理完成的完成信息。

处理器505在接收到完成信息后,将完成信息和计算结果发送给主机501。至此主机501的应用程序调用Get(Key)或Get_With_Index(Key,Index)被处理完成,得到M个特征值作为结果。

在可选的实施方式中,图5D中展示的主机501的驱动程序或管理程序的操作由处理器505实施。从而减少了在处理器505与主机501之间的交互,提高了处理效率。

作为一个例子,图5E给出了信息处理系统500处理Put(Key)请求的流程示意图。

如图5E所示,响应于主机501的应用程序调用Put(Key)API,主机501运行的驱动程序或管理程序生成聚类请求发送给处理器处理器505。聚类请求中携带了关键字(Key)与X个索引值。

处理器505接收聚类请求后,向加速器503发送聚类请求,以使加速器503按照上述实施例中描述的方式工作,并得到同聚类请求的关键字(Key)对应的索引值。

加速器503将索引值存储到外部存储器中,并会向处理器505发送用于表征聚类操作完成的第一完成信息。

处理器505在接收到第一完成信息后,将第一完成信息和同聚类请求的关键字(Key)对应的索引值发送给主机501。可以理解地,处理器505可以将携带了第一完成信息和/或索引值的数据包发送给主机501,也可以向主机501指示中断,并由主机501主动获取第一完成信息和/或索引值。

主机501的驱动程序或管理程序在接收到第一完成信息和同聚类请求的关键字(Key)对应的索引值后,根据要处理的Put(Key)请求,向处理器505发送地址分配请求,地址分配请求携带关键字(Key)与同聚类请求的关键字(Key)对应的索引值。

处理器505向映射管理模块504发送分配地址请求。

映射管理模块504根据接收的索引值为输入的关键字(Key)分配存储地址,该存储地址是固态硬盘502中的地址。然后,映射管理模块504向处理器505发送存储地址和第二完成信息。

处理器505向主机501发送存储地址和第二完成信息。

主机501的驱动程序或管理程序接收到第二完成信息和存储地址之后,根据要处理的Put(Key)请求,向处理器505发送存储地址和待写入的数据。写入数据是例如调用Put(Key)API时指示的关键字(Key)和/或同关键字(Key)对应的数据。

处理器505向固态硬盘502发送存储地址和待写入的数据。

固态硬盘502根据存储地址,固态硬盘502将待写入的数据和/或关键字(Key)写入该存储地址指示的存储空间,并通过处理器505向主机501发送第三完成信息。

主机501的驱动程序或管理程序响应于收到第三完成信息,通知应用程序其调用的Put(Key)API处理完成。

在可选的实施方式中,图5E中展示的主机501的驱动程序或管理程序的操作由处理器505实施。从而减少了在处理器505与主机501之间的交互,提高了处理效率。

作为又一个例子,图5F给出了信息处理系统500处理Get(Key)请求的流程示意图。如图5F所示,主机501的应用程序调用Get(Key)API。主机501的驱动程序响应于Get(Key)API被调用而向处理器505发送的聚类请求。聚类请求指示了关键字(Key)与X个索引值。

处理器505接收到聚类请求后,向加速器503发送聚类请求,以使加速器503按照上述实施例中描述的方式完成聚类操作,并得到同聚类请求的关键字(Key)对应的索引值。

加速器503将索引值写入外部存储设备,加速器503还会向处理器505发送用于表征聚类操作完成的第一完成信息。

处理器505在接收到第一完成信息后,将第一完成信息和索引值发送给主机501。

主机501的驱动程序或管理程序响应于接收到第一完成信息后和索引值,根据应用程序调用的Get(Key)API向处理器505发送地址获取请求。地址获取请求指示了关键字(Key)与索引值。

处理器505向映射管理模块504发送地址获取请求。

映射管理模块504根据接收的地址获取请求指示的索引值获取与索引值对应的N个特征值的一个或多个存储地址,该存储地址是固态硬盘502中的地址。然后,映射管理模块504向处理器505发送一个或多个存储地址和第二完成信息。

处理器505向主机501发送一个或多个存储地址和第二完成信息。

主机501的驱动程序响应于接收到第二完成信息和一个或多个存储地址,根据应用程序调用的Get(Key)API,向处理器505发送一个或多个存储地址,以指示处理器505从固态硬盘502读出N个特征值。

处理器505向固态硬盘502发送数据读取请求和一个或多个存储地址。

固态硬盘502作为响应根据一个或多个存储地址,从自身读取与一个或多存储地址对应的N个特征值,并通过处理器505向主机501发送第三完成信息及N个特征值。

主机501的驱动程序响应于接收到第三完成信息和N个特征值,根据调用的Get(Key)API向处理器505发送搜索请求。搜索请求指示了关键字(Key)与N个特征值。

处理器505接收到搜索请求之后,向加速器503发送搜索请求。

加速器503接收到搜索请求之后,按照本申请的实施例中描述的方式工作,从N个特征值中搜索得到同关键字(Key)最接近的M个特征值。

加速器503将M个特征值写入外部存储器,以及加速器503向处理器505发送用于表征搜索操作完成的第四完成信息。

处理器505在接收到第四完成信息后,将第四完成信息和/或M个特征值发送给主机501。主机501的驱动程序或管理程序响应于接收到第四完成信息和/或M个特征值,通知应用程序其调用的Get(Key)API处理完成。

在可选的实施方式中,图5F中展示的主机501的驱动程序或管理程序的操作由处理器505实施。从而减少了在处理器505与主机501之间的交互,提高了处理效率。

参见图6,本申请又一实施例提供了一种主机600。

主机600包括应用程序模块601、API接口模块605、管理模块610、加速驱动模块620、映射驱动模块630、硬盘驱动模块640。

主机600中运行的应用程序模块601调用API接口模块605提供的API。API接口模块605提供的API包括例如Get(Key)、Get_Index(Key)、Get_With_Index(Key,Index)、Put(Key)、Put_With_Index(Key,Index)等。API接口605响应于API被调用,通过管理模块610来处理被调用的API。

管理模块610根据被调用的API向加速驱动模块620、映射驱动模块630与硬盘驱动模块640的一个或多个发出请求,并根据加速驱动模块620、映射驱动模块630和/或硬盘驱动模块640针对请求给出的结果,得到用于响应被调用API的结果并提供给API接口模块605。API接口模块605将结果提供给调用API的应用程序模块601。

加速驱动模块620作为驱动程序管理并操作根据本申请实施例的加速器(例如,图5A展示的加速器503);映射驱动模块630作为驱动程序管理并操作根据本申请实施例的映射管理器504;硬盘驱动模块640作为驱动程序管理并操作根据本申请实施例的固态硬盘502。

作为举例,若应用程序模块601调用Put(Key)API,管理模块610首先向加速驱动模块620发送聚类请求。聚类请求指示了Put(Key)API的关键字(Key)。响应于加速驱动模块620提供了聚类请求的结果(指示了同关键字(Key)对应的索引值),管理模块610还向映射驱动模块630发送地址获取请求(指示了索引值与关键字(Key))。响应于映射驱动模块630提供了地址获取请求的结果(一个或多个地址),管理模块610向硬盘驱动模块640发送存储地址和要写入的数据。硬盘驱动模块640将管理模块610提供数据写入固态硬盘的指定存储地址,并向管理模块610指示数据写入完成,以及管理模块610通过API接口605向应用程序模块601指示对Put(Key)API的调用完成。

作为又一个例子,应用程序模块601调用Get(Key)API,管理模块610首先向加速驱动模块620发送聚类请求。聚类请求指示了Get(Key)API的关键字(Key)。响应于加速驱动模块620提供了聚类请求的结果(指示了同关键字(Key)对应的索引值),管理模块610还向映射驱动模块630发送地址获取请求(指示了索引值与关键字(Key))。响应于映射驱动模块630提供了地址获取请求的结果(一个或多个地址),管理模块610向硬盘驱动模块640发送存储地址。硬盘驱动模块640从固态硬盘的存储地址读出数据,读出的数据是同索引值对应的N个特征值。硬盘驱动模块640将读出的N个特征值提供给管理模块610。管理模块作为响应,将搜索请求(指示了关键字(Key)与N个特征值)发送给加速驱动模块620。加速驱动模块620操作加速器向管理模块610提供该N个特征值中同关键字(Key)最接近的M个特征值。管理模块610通过API接口605向应用程序模块601提供M个特征值并指示对Get(Key)API的调用完成。

作为再一个例子,应用程序模块601调用Put_With_Index(Key,Index)API。管理模块610向映射驱动模块630发送地址获取请求(指示了索引值与关键字(Key))。响应于映射驱动模块630提供了地址获取请求的结果(一个或多个地址),管理模块610向硬盘驱动模块640发送存储地址。硬盘驱动模块640从固态硬盘的存储地址读出数据,读出的数据是同索引值对应的N个特征值。硬盘驱动模块640将读出的N个特征值提供给管理模块610。管理模块作为响应,将搜索请求(指示了关键字(Key)与N个特征值)发送给加速驱动模块620。加速驱动模块620操作加速器向管理模块610提供该N个特征值中同关键字(Key)最接近的M个特征值。管理模块610通过API接口605向应用程序模块601提供M个特征值并指示对Get_With_Index(Key,Index)API的调用完成。

作为依然又一个例子,若应用程序模块601调用Put_With_Index(Key,Index)API,管理模块610向映射驱动模块630发送地址获取请求(指示了索引值与关键字(Key))。响应于映射驱动模块630提供了地址获取请求的结果(一个或多个地址),管理模块610向硬盘驱动模块640发送存储地址和要写入的数据。硬盘驱动模块640将管理模块610提供数据写入固态硬盘的指定存储地址,并向管理模块610指示数据写入完成,以及管理模块610通过API接口605向应用程序模块601指示对Put_With_Index(Key)API的调用完成。

作为依然再一个例子,应用程序模块601调用Get_Index(Key)API。管理模块610首先向加速驱动模块620发送聚类请求。聚类请求指示了Get_Index(Key)API的关键字(Key)。响应于加速驱动模块620提供了聚类请求的结果(指示了同关键字(Key)对应的索引值),管理模块610通过API接口605向应用程序模块601提供该索引值并指示对Get_Index(Key)API的调用完成。

虽然当前申请参考的示例被描述,其只是为了解释的目的而不是对本申请的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本申请的范围。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号