首页 / 专利库 / 软件 / 操作系统 / 进程 / 面向列的缓存方法、装置、设备及计算机可读存储介质

面向列的缓存方法、装置、设备及计算机可读存储介质

阅读:532发布:2020-05-08

专利汇可以提供面向列的缓存方法、装置、设备及计算机可读存储介质专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种面向列的缓存方法、装置、设备及计算机可读存储介质,所述方法包括:获取待缓存数据的列式格式信息;根据所述列式格式信息在内存资源中为所述待缓存数据分配内存 块 ;将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。本发明实现了跨 进程 计算时无需进行序列化和反序列化的操作,节省了计算资源,也提高了计算效率。,下面是面向列的缓存方法、装置、设备及计算机可读存储介质专利的具体信息内容。

1.一种面向列的缓存方法,其特征在于,所述面向列的缓存方法包括:
获取待缓存数据的列式格式信息;
根据所述列式格式信息在内存资源中为所述待缓存数据分配内存
将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
2.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理。
3.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
复制所述目标内存块中的内容至复制内存块中;
更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
4.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
5.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
检测所述元数据中是否有与所述目标虚拟块重叠的已经定的虚拟块;
若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
6.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
7.如权利要求1至6任一项所述的面向列的缓存方法,其特征在于,所述根据所述列信息在内存资源中为所述待缓存数据分配内存块的步骤包括:
当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
8.一种面向列的缓存装置,其特征在于,所述面向列的缓存装置包括:
获取模块,用于获取待缓存数据的列式格式信息;
分配模块,用于根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
生成模块,用于将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
9.一种面向列的缓存设备,其特征在于,所述面向列的缓存设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的面向列的缓存程序,所述面向列的缓存程序被所述处理器执行时实现如权利要求1至7中任一项所述的面向列的缓存方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有面向列的缓存程序,所述面向列的缓存程序被处理器执行时实现如权利要求1至7中任一项所述的面向列的缓存方法的步骤。

说明书全文

面向列的缓存方法、装置、设备及计算机可读存储介质

技术领域

[0001] 本发明涉及数据处理技术领域,尤其涉及一种面向列的缓存方法、装置、设备及计算机可读存储介质。

背景技术

[0002] 随着大数据人工智能等技术的发展,对计算机的数据处理效率要求也越来越高。现有的缓存系统在跨进程计算是需要序列化和反序列化操作,序列化是把对象转换为字节序列的过程称为对象的序列化,反序列化是把字节序列恢复为对象的过程称为对象的反序列化。而这两个过程均需要花费计算机的计算资源,从而导致计算机在跨进程计算时效率降低。

发明内容

[0003] 本发明的主要目的在于提供一种面向列的缓存方法、装置、设备及计算机可读存储介质,旨在解决现有缓存系统在跨进程计算是需要序列化和反序列化操作,浪费计算资源的技术问题。
[0004] 为实现上述目的,本发明提供一种面向列的缓存方法,所述面向列的缓存方法包括:
[0005] 获取待缓存数据的列式格式信息;
[0006] 根据所述列式格式信息在内存资源中为所述待缓存数据分配内存
[0007] 将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
[0008] 可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
[0009] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
[0010] 调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理。
[0011] 可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
[0012] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
[0013] 复制所述目标内存块中的内容至复制内存块中;
[0014] 更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
[0015] 可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
[0016] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
[0017] 将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
[0018] 可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
[0019] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
[0020] 检测所述元数据中是否有与所述目标虚拟块重叠的已经定的虚拟块;
[0021] 若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
[0022] 当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
[0023] 可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
[0024] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
[0025] 调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
[0026] 可选地,所述根据所述列信息在内存资源中为所述待缓存数据分配内存块的步骤包括:
[0027] 当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
[0028] 当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
[0029] 此外,为实现上述目的,本发明还提供一种面向列的缓存装置,所述面向列的缓存装置包括:
[0030] 获取模块,用于获取待缓存数据的列式格式信息;
[0031] 分配模块,用于根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
[0032] 生成模块,用于将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
[0033] 此外,为实现上述目的,本发明还提供一种面向列的缓存设备,所述面向列的缓存设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的面向列的缓存程序,所述面向列的缓存程序被所述处理器执行时实现如上所述的面向列的缓存方法的步骤。
[0034] 此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有面向列的缓存程序,所述面向列的缓存程序被处理器执行时实现如上所述的面向列的缓存方法的步骤。
[0035] 本发明中,通过根据列式格式信息为待缓存数据分配内存块,并将所述内存块添加至连续的虚拟内存中,生成待缓存数据的元数据,获得列式缓存数据。由于通过元数据来记录列式缓存数据的列式格式信息与虚拟内存之间的对应关系,以及虚拟内存与内存块之间的映射关系,使得对于上层列式缓存接口来说,数据缓存在一段完全连续的虚拟内存,并且在访问具体内容时,通过元数据能够映射到实际存放的内存块,从而实现了一种内存可感知的列式缓存方法,也即,通过元数据能够清晰地知道数据存放的内存地址。在跨进程计算时,按照传统的缓存方法,进程之间需要将数据序列化后传递,再通过反序列化还原,以保证数据的完整性,采用本发明中的缓存方法,使得进程之间可以直接通过传递元数据的方式来传递列式缓存数据,而无需将列式缓存数据进行序列化和反序列化的操作,也能够保证数据的完整性,因为元数据中记录了数据所存放的内存地址。由于不需要进行序列化和反序列化操作,使得跨进程计算时节省了计算资源,也提高了计算效率。附图说明
[0036] 图1是本发明实施例方案涉及的硬件运行环境的结构示意图;
[0037] 图2为本发明面向列的缓存方法第一实施例的流程示意图;
[0038] 图3为本发明实施例涉及的一种元数据记录映射关系的示意图;
[0039] 图4为本发明面向列的缓存装置较佳实施例的功能示意图模块图。
[0040] 本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0041] 应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0042] 本发明实施例提供了一种面向列的缓存设备,参照图1,图1是本发明实施例方案涉及的硬件运行环境的结构示意图。
[0043] 需要说明的是,图1即可为面向列的缓存设备的硬件运行环境的结构示意图。本发明实施例面向列的缓存设备可以是PC,也可以是智能手机、智能电视机、平板电脑、便携计算机等具有显示功能的终端设备。
[0044] 如图1所示,该面向列的缓存设备可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
[0045] 可选地,面向列的缓存设备还可以包括摄像头、RF(Radio Frequency,射频)电路传感器、音频电路、WiFi模块等等。本领域技术人员可以理解,图1中示出的面向列的缓存设备结构并不构成对面向列的缓存设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0046] 如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及面向列的缓存程序。
[0047] 在图1所示的面向列的缓存设备中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的面向列的缓存程序,并执行以下操作:
[0048] 获取待缓存数据的列式格式信息;
[0049] 根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
[0050] 将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
[0051] 进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的缓存程序,执行以下操作:
[0052] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
[0053] 调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理。
[0054] 进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的缓存程序,执行以下操作:
[0055] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
[0056] 复制所述目标内存块中的内容至复制内存块中;
[0057] 更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
[0058] 进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的缓存程序,执行以下操作:
[0059] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
[0060] 将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
[0061] 进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的缓存程序,执行以下操作:
[0062] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
[0063] 检测所述元数据中是否有与所述目标虚拟块重叠的已经锁定的虚拟块;
[0064] 若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
[0065] 当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
[0066] 进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的缓存程序,执行以下操作:
[0067] 当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
[0068] 调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
[0069] 进一步地,所述根据所述列信息在内存资源中为所述待缓存数据分配内存块的步骤包括:
[0070] 当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
[0071] 当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
[0072] 基于上述的硬件结构,提出本发明面向列的缓存方法的各个实施例。
[0073] 参照图2,本发明面向列的缓存方法第一实施例提供一种面向列的缓存方法,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。本发明面向列的缓存方法的各个实施例的执行主体可以是PC、智能手机、智能电视机、平板电脑和便携计算机等终端设备,为便于描述,在以下各实施例以缓存系统执行主体进行阐述。所述面向列的缓存方法包括:
[0074] 步骤S10,获取待缓存数据的列式格式信息;
[0075] 缓存系统可以是安装在终端设备中的系统程序,在操作系统基础上运行,可以与其他应用程序进行数据交互。列式数据格式是一种将数据以列的形式组织,每一列的数据类型相同的数据格式。待缓存数据可以是存储在外部存储中的数据,在外部存储中的存储格式可以是列式数据格式,也可以是其他格式。缓存系统可以获取待缓存数据的列式格式信息,当待缓存数据本身是列式数据格式的数据时,缓存系统可直接获取待缓存数据对应的列式格式信息;当待缓存数据本身是其他格式的数据时,缓存系统可将待缓存数据转化为列式数据格式的数据,生成待缓存数据的列式格式信息;也可以是由其他程序来执行格式转换,再将获得的列式格式信息传递给缓存系统。其中,列式格式信息可以是用于描述待缓存数据以列式格式组织的信息,例如,包括多少列、每列的索引、列与子列的嵌套信息、每个列的单元格数、每个列的数据类型、包括多少个存储批或每个存储批包括哪几个列等等信息。将待缓存数据以列式数据格式缓存,使用连续的内存保存相同数据类型的单元格数据,能够提供比行式数据格式缓存更高的读写和计算效率。
[0076] 步骤S20,根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
[0077] 缓存系统根据列式格式信息在内存资源中为待缓存数据分配内存块。其中,缓存系统可以在进程空间中分配和管理内存,对于支持GC(Garbage Collection,垃圾回收)的编程语言(如java python),可以在托管堆对外分配和管理内存,减少GC造成的计算资源浪费,也可以在共享内存、显存中分配和管理内存。对于支持GC的编程语言,内存资源为数组结构;NPU(neural-network processing units,网络处理器)内存、显存和共享内存等为通过类似malloc函数分配的内存资源,记录其起始地址和长度,例如,缓存系统在起始地址为0,长度为100的内存资源中为待缓存数据分配内存块。
[0078] 具体地,缓存系统根据列式格式信息为待缓存数据分配内存块的方式有多中,例如可以根据列式格式信息,将待缓存数据按存储批或按列进行划分为数据块,为每个数据块分配一个内存块。内存块之间不一定是连续的,各个内存块的大小也不一定相同。各个内存块形成内存池,通过树、图或链表的方式对内存池中的内存块进行组织,提高内存分配的效率,同时也可以灵活地增加或减少内存。
[0079] 进一步地,步骤S20包括:
[0080] 步骤S201,当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
[0081] 在本实施例中,一种可行的内存块分配方法是:当列式格式信息中的列是元素大小固定的列时,缓存系统可根据该列中元素的个数和数据类型计算该列的实际大小,在内存资源中为该列分配该实际大小的内存块。也即一列数据分配一个内存块,一个内存块是连续的,用于缓存数据类型相同的一列数据,从而使得数据存取效率提高。其中,元素的大小固定是指元素的数据类型属于固定长度的类型,例如整型。如某列中元素的数据类型是整型,整型占用4个字节长度,该列一共有100个元素,则该列的实际大小S=4*100=400个字节,则缓存系统在内存资源中划分400字节的内存块,用于缓存该列数据。
[0082] 步骤S202,当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
[0083] 当列式格式信息中的列是元素大小不固定的列时,缓存系统可先为该列分配默认大小的内存块,可以预先根据需求设置默认大小。若在缓存该列数据时,默认大小小于该列的实际大小时,即默认大小的内存块存放不下该列的数据时,再为该列分配一个或多个默认大小的内存块,以使得分配的多个内存块能够存放该列数据。其中,元素的大小不固定是指元素的数据类型属于不固定长度的类型,例如,字符串型类型。
[0084] 步骤S30,将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
[0085] 缓存系统将内存块添加至连续的虚拟内存中,并生成待缓存数据的元数据。具体地,虚拟内存是一段连续的内存,并不占用实际的内存,由一段虚拟地址构成。虚拟内存中的虚拟内存块之间是连续的。缓存系统从虚拟内存中分配一个与该内存块大小相同的虚拟内存块,并且该新分配的虚拟内存块与虚拟内存中已有的虚拟内存块相连,并采用元数据记录内存块与虚拟内存块之间的映射关系,从而将内存块添加至虚拟内存中。例如,内存块1在内存资源中的首地址是11,长度是10,缓存系统在虚拟内存中分配一段长度为10的虚拟内存块1,由于虚拟内存中还没有虚拟内存块,所以该新分配的虚拟内存块1的首地址是0;
内存块2在内存资源中的首地址是50,长度是12,缓存系统在虚拟内存中分配一段长度为12的虚拟内存块2,虚拟内存已有长度为10、首地址为0的虚拟内存块1,所以该新分配的虚拟内存块2的首地址是10;元数据中记录了虚拟内存与内存块之间的映射关系,例如:内存资源中的11~20对应虚拟内存中的0~9,内存资源中的50~61对应虚拟内存中的10~21。元数据中还包括列式格式信息与虚拟内存之间的对应关系,例如虚拟内存中的虚拟内存块对应存放的是哪一列或哪几列,各个列的数据类型等信息。如图3所示,为一种元数据记录映射关系的示意图,图中各个mem-block是内存块,在虚拟内存中是连续的,在内存资源中是分散的。
[0086] 缓存系统为待缓存数据分配内存块,并将待缓存数据缓存在对应的内存块中,从而获得列式缓存数据。由于缓存系统通过元数据来记录列式缓存数据的列式格式信息与虚拟内存之间的对应关系,以及虚拟内存与内存块之间的映射关系,使得对于上层列式缓存接口来说,数据缓存在一段完全连续的虚拟内存,并且在访问具体内容时,通过元数据能够映射到实际存放的内存块,从而实现了一种内存可感知的列式缓存方法,也即,通过元数据能够清晰地知道数据存放的内存地址。在跨进程计算时,按照传统的缓存方法,进程之间需要将数据序列化后传递,再通过反序列化还原,以保证数据的完整性,采用本实施例中的缓存方法,使得进程之间可以直接通过传递元数据的方式来传递列式缓存数据,而无需将列式缓存数据进行序列化和反序列化的操作,也能够保证数据的完整性,因为元数据中记录了数据所存放的内存地址。由于不需要进行序列化和反序列化操作,使得跨进程计算时节省了计算资源,也提高了计算效率。
[0087] 进一步地,进一步的,基于上述第一实施例,本发明第二实施例提供一种面向列的缓存方法。在本实施例中,所述步骤S30之后,还包括:
[0088] 步骤A10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
[0089] A20,调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理。
[0090] 缓存系统在将待缓存数据按照上述实施例中的缓存方式进行列式缓存,获得列式缓存数据后,可对列式缓存数据进行读、写或计算等各种操作。
[0091] 缓存系统可以指定列索引的范围,或者索引集合,创建列式缓存数据的列级视图;还可以在列式缓存数据上支持虚拟行,指定行索引的范围或者索引集合,创建列式缓存数据的行级视图。综合这两种方式,可灵活地组合成行+列拆分的视图,在使用行或列索引访问列式缓存数据时,通过创建视图的参数映射真实索引。
[0092] 当有并行计算任务时,缓存系统可为并行进程或并行线程指定列式缓存数据中的目标虚拟行或目标列。调用并行进程或并行线程来对目标虚拟行或目标列的数据进行并行计算。具体地,并行进程或并行线程通过元数据中列式格式信息与虚拟内存之间的对应关系,确定目标虚拟行或目标列对应的虚拟内存块,然后对虚拟内存块中的数据进行并行处理。由于进程或线程可以通过元数据中的映射信息直接确定目标虚拟行或目标列所在的内存块,使得进程或线程可以直接对内存块中的数据进行读取,写入时,也可以通过缓存系统为并行进程或并行线程指定不重叠的虚拟行或列,使得并行进程或线程可以同时对内存中的列式缓存数据进行写操作。从而克服了目前的缓存系统无法支持多进程或多线程并行计算的问题,充分发挥了芯片计算能
[0093] 进一步地,基于上述第一和第二实施例,本发明第三实施例提供一种面向列的缓存方法。在本实施例中,所述步骤S30之后,还包括:
[0094] 步骤B10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
[0095] 步骤B20,复制所述目标内存块中的内容至复制内存块中;
[0096] 步骤B30,更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
[0097] 在本实施例中,缓存系统在基于上述实施例中的缓存方法对待缓存数据进行列式缓存,获得列式缓存数据后,基于列式缓存数据的特点,可以支持多种并发读写或计算策略,并且能够提高处理效率,并发策略包括但不限于写时复制、并发写入、细粒度锁和指令优化。
[0098] 具体地,写时复制是指在创建新进程时,并不会把所有的资源复制给新创建的进程,而是在需要写入数据时,才会复制需要写入数据的页,从而避免复制操作浪费资源。
[0099] 缓存系统在读取数据时,无需复制内存块中的数据,直接根据元数据映射到内存块中,从内存块中读取数据。在写入时,缓存系统可以根据元数据中的映射关系,确定列式缓存数据中的待写入数据对应的目标内存块。例如,待写入数据是列式缓存数据中的列1,则缓存系统查找元数据,确定列1对应的内存块。然后缓存系统将目标内存块中的内容复制到复制内存块中,其中,复制内存块是在内存资源中再分配的一块内存块,大小与目标内存块相同。缓存系统在复制目标内存块的内容后,更新元数据,将原元数据中待写入数据与目标内存块之间的对应关系,更新为待写入数据与复制内存块对应关联。能够直接根据元数据来索引待写入数据对应的复制内存块,进而直接对复制内存块中的数据进行写入操作。
[0100] 进一步地,步骤S30之后,还包括:
[0101] 步骤C10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
[0102] 步骤C20,将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
[0103] 并发写入时,缓存系统可以将根据元数据中的映射关系确定列式缓存数据中的待修改数据对应的目标内存块。缓存系统从目标内存块中读取到待修改数据,将待修改数据和修改后的值传入并发写入的汇编指令,并执行所述并发写入的汇编指令,以将目标内存块中的待修改数据更新为该修改后的值。需要说明的是,并发写入的汇编指令可以是cmpxchg指令,cmpxchg指令是一种汇编指令,用于解决并发写入的问题。cmpxchg指令支持向量化地更新多个值,cmpxchg会依次将一个或一批值(若芯片支持)写入内存,背后被编译成芯片级指令,远比利用线程或进程锁性能高。
[0104] 进一步地,步骤S30之后,还包括:
[0105] 步骤D10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
[0106] 步骤D20,检测所述元数据中是否有与所述目标虚拟块重叠的已经锁定的虚拟块;
[0107] 步骤D30,若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
[0108] 步骤D40,当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
[0109] 在本实施例中,缓存系统可以为并发操作列式缓存数据的进程锁定一块虚拟块,虚拟块是列式缓存数据中的一部分。具体地,缓存系统先确定进程要操作的虚拟行或列,由确定的虚拟行或列构成一个目标虚拟块。元数据中记录了已经锁定的虚拟块的信息,缓存系统检测元数据中是否有与该目标虚拟块重叠的已经锁定的虚拟块。目标虚拟块与已经锁定的虚拟块之间有重叠的虚拟行或列,则确定目标虚拟块与已经锁定的虚拟块重叠。若没有检测到与目标虚拟块重叠的已锁定虚拟块,则缓存系统可以将该目标虚拟块对应的虚拟行信息或列信息添加至元数据中,以锁定目标虚拟块。当进程对目标虚拟块写入完成后,就解除目标虚拟块的锁定,可以是将元数据中目标虚拟块的信息删除。若缓存系统检测到与目标虚拟块重叠的已锁定虚拟块,则等待,等到元数据中没有与目标虚拟块重叠的已锁定虚拟块时,再锁定目标虚拟块;或者直接返回失败的信息给进程。
[0110] 在本实施例中,由于元数据中记录了列式缓存数据的列式格式信息与虚拟内存的对应关系,还记录了虚拟内存与内存块之间的映射关系,因此,能够根据元数据确定数据缓存在实际内存中的位置,从而对内存中的数据进行直接读写,并且能够根据元数据中记录的细粒度的列式格式信息,对列式缓存数据添加细粒度锁,进而提高并发进程的读写效率。
[0111] 进一步地,所述步骤S30之后,还包括:
[0112] 步骤E10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
[0113] 步骤E20,调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
[0114] 进一步地,在本实施例中,缓存系统可根据元数据的映射关系确定列式缓存数据中的待处理数据对应的目标内存块。并根据操作任务调用单指令多数据流(Single Instruction Multiple Data,SIMD)指令集对目标内存块中的待处理数据进行处理。其中,SIMD是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据矢量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。由于列式缓存数据是按列缓存的数据,因此能够采用SIMD指令集来对一列数据进行处理,提高处理效率。
[0115] 本实施例通用覆盖了GPU/NPU等不同的芯片的需求,连续的可随意调度和映射的小块内存,利于本地化、指令流线或寄存器优化。
[0116] 此外本发明实施例还提出一种面向列的缓存装置,参照图4,所述面向列的缓存装置包括:
[0117] 获取模块10,用于获取待缓存数据的列式格式信息;
[0118] 分配模块20,用于根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
[0119] 生成模块30,用于将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
[0120] 进一步地,所述面向列的缓存装置还包括:
[0121] 指定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
[0122] 并行处理模块,用于调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理。
[0123] 进一步地,所述面向列的缓存装置还包括:
[0124] 第一确定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
[0125] 复制模块,用于复制所述目标内存块中的内容至复制内存块中;
[0126] 更新模块,用于更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
[0127] 进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
[0128] 第二确定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
[0129] 执行模块,用于将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
[0130] 进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
[0131] 第三确定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
[0132] 检测模块,用于检测所述元数据中是否有与所述目标虚拟块重叠的已经锁定的虚拟块;
[0133] 锁定模块,用于若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
[0134] 解除模块,用于当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
[0135] 进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
[0136] 第四确定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
[0137] 调用模块,用于调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
[0138] 进一步地,所述步骤S20包括:
[0139] 第一分配单元,用于当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
[0140] 第二分配单元,用于当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
[0141] 本发明面向列的缓存装置的具体实施方式的拓展内容与上述面向列的缓存方法各实施例基本相同,在此不做赘述。
[0142] 此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有面向列的缓存程序,所述面向列的缓存程序被处理器执行时实现如上所述面向列的缓存方法的步骤。
[0143] 本发明面向列的缓存设备和计算机可读存储介质的具体实施方式的拓展内容与上述面向列的缓存方法各实施例基本相同,在此不做赘述。
[0144] 需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
[0145] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0146] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0147] 以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈