数据处理的方法和计算平台与流程

未命名 07-14 阅读:98 评论:0


1.本技术涉及数据处理领域,更具体地,涉及一种数据处理的方法和计算平台。


背景技术:

2.数据的全生命周期中,存储中的数据和传输中的数据,基于传统的密码学可以进行较好地保护。但是使用中的数据则无法进行有效地保护:传统加密方式加密以后的数据无法参与运算,必须解密才能使用。在云计算等场景中,因为对云服务商的信任不够,客户的敏感数据不敢交给云服务商进行存储和处理:担心云上的数据会因为内部攻击或者安全漏洞导致泄露。
3.在这种情况下,密态计算相关技术提供了相应解决思路,其中之一为:基于密码学的方式,让数据可以在加密的状态下进行计算,计算的执行方并不知道自己计算的是什么数据,起到对明文的逻辑隔离作用。在基于密码学的各种方案中,由于全同态加密依赖于数学困难问题,有严格的安全证明,因此安全性较高。但是全同态加密的计算速度较慢,因此,在实际使用过程中可能需要通过并行加速或异构加速的方式进行加速。
4.然而,现有的基于同态加密的算法架构中,当密码算法库的用户调用同态加密算法库的高阶算子描述计算任务进行计算时,硬件平台的接口会直接调用代数库的基础算子的代码实现计算。然而,一方面,代数库中的基础算子一般是基于特定硬件平台编写的,无法支持其他硬件平台对基础算子进行优化或加速;另一方面,密码算法库中的高阶算子与代数库中基础算子之间的函数调用逻辑由密码学家自行编写,这就需要密码学家在编写函数调用逻辑时要充分了解基础算子的具体代码实现以及硬件平台的特点。因此,若想通过当前同态加密算法架构实现多硬件平台的异构加速,不仅需要软硬件工程师基于新的硬件平台重新编写特定的基础算子,还要求密码学专家了解新的基础算子的具体代码实现和新的硬件平台的特点。
5.此外,囿于当前同态加密算法架构下高阶算子与基础算子之间的调用逻辑关系,计算引擎无法获知整体计算任务,只能需要依照函数调用关系和算子出现的顺序执行计算任务,无法将同一计算任务中相同类型的算子合并执行,有可能造成算力浪费。


技术实现要素:

6.本技术提供一种数据处理的方法和计算平台,基于能够提供描述整体计算任务的计算图的算法架构,使得计算引擎能够获知整体计算任务,从而能够实现基于高阶算子的计算任务的构建和计算任务的执行的解耦。进一步地,可以实现相同类型算子的合并执行,以及多硬件平台异构加速,进一步提高数据处理的计算速度。
7.第一方面,提供了一种数据处理的方法,具体地,该方法可以包括:计算平台获取数据和计算任务描述,该计算任务描述包括需要对该数据执行的计算;该计算平台根据该计算任务描述选择第一算子集合,该第一算子集合中包含多个基础算子;该计算平台根据该第一算子集合中的各个基础算子的依赖关系,执行该第一算子集合对该数据进行计算,
得到该数据的计算结果,其中存在依赖关系的两个基础算子中的一个基础算子的输入操作数的占位符与另一个基础算子的输出操作数的占位符相交。
8.具体地,计算平台可以包括一个或多个计算机设备。
9.在一些可能的实现方式中,上述方法中的步骤均由一个计算机设备执行。
10.在一些可能的实现方式中,计算平台包括多个计算机设备,上述方法中的步骤由多个计算机设备执行。示例性地,第一计算机设备获取数据和计算任务描述后,将上述计算任务描述输入第二计算机设备,将数据输入第三计算机设备,第二计算机设备选择第一算子集合后,将该第一算子集合输入第三计算机设备,进而第三计算机设备执行第一算子集合计算上述数据。示例性地,第三计算机设备可以具有一个或多个硬件平台,第一算子集合中的多个基础算子可以由一个硬件平台执行,也可以分别由多个硬件平台执行。示例性地,第一计算机设备获取的数据和第二计算机设备选择的第一算子集合也可以输入到多个计算机设备中,该多个计算机设备可以具有一个或多个硬件平台,上述执行第一算子集合对数据进行计算,也可以为多个计算机设备执行第一算子集合对数据进行计算,具体地,多个计算机设备中的每个计算机设备可以使用一个硬件平台执行相应的基础算子,也可以使用多个硬件平台执行相应的基础算子,本技术对此不作具体限定。
11.应理解,当多个硬件平台或多个计算机设备同时执行第一算子集合时,可以加快数据处理的速度。
12.在一些可能的实现方式中,上述计算平台中的一个或多个计算机设备可以为云端的计算机设备。示例性地,计算平台中的所有计算机设备均为云端的计算机设备,该所有计算机设备用于云端的数据处理模块,以对密文和/或明文数据进行处理。示例性地,计算平台中的用于执行第一算子集合对数据进行计算的上述第三计算机设备或多个计算机设备为云端的计算机设备,则上述计算机设备用于云端的数据处理模块,以对密文和/或明文数据进行处理。
13.示例性地,在一些需要数据处理的场景中,计算平台获取需要处理的数据及计算任务描述后,执行上述步骤以获得计算结果。一示例,计算平台可以获取密文的电子病历数据以及需要对该电子病历数据进行处理的计算任务描述,并执行上述步骤以获得计算结果;另一示例,在联邦学习中,多个参与方可在保证各自数据隐私的同时实现联合机器学习建模,即计算平台获取参与方的密文数据,并利用该密文数据提升自身模型的效果。应理解,上述实例仅为示例性说明,本技术对提供的数据处理的方法的应用场景不作具体限定。
14.更具体地,执行第一算子集合对数据进行计算可以由计算机设备中的计算引擎执行。
15.示例性地,计算引擎根据第一算子集合中多个基础算子及其之间的依赖关系对数据进行相关计算,应理解,第一算子集合中多个基础算子之间的依赖关系等价于计算任务描述。上述数据可以为密文数据,或者也可以为明文数据,或者也可以为明文与密文混杂的数据,本技术对此不作具体限定。
16.需要说明的是,本技术中操作数的占位符可以为一个占位符,也可以为多个占位符组成的集合,本技术对此不作具体限定。
17.在一些可能的实现方式中,算子a与算子b存在依赖关系可以指算子a执行完毕才能执行算子b,即算子a的输出占位符与算子b的输入占位符相交。需要说明的是,算子a也可
以称为算子b的依赖算子,或称算子b为算子a的通知算子。示例性地,存在依赖关系的两个基础算子中的一个基础算子的输入操作数的占位符与另一个基础算子的输出操作数的占位符相交,具体可以为:一个算子的输入操作数包括另一个基础算子的输出操作数;或者,一个算子的输出操作数的一部分为另一个算子的一个输入操作数,也就是说,算子的输出操作数可以拆分为多个操作数,这多个操作数可以分别作为其他算子的一个输入操作数;或者,一个算子的输出操作数为另一个算子的一个输入操作数的一部分,也就是说,一个算子的输出操作数可以与其他算子的输出操作数合并为新的操作数,该新的操作数可以作为上述另一个算子的一个输入操作数;或者,一个算子的输出操作数的一部分为另一个算子的一个输入操作数的一部分,也就是说,算子的输出操作数可以拆分为多个操作数,该多个操作数中的一个可以与其他操作数合并为新的操作数,该新的操作数可以作为上述另一个算子的一个输入操作数。
18.在上述技术方案中,由于计算平台执行计算任务时,可以通过第一算子集合构成的计算图获知整体计算任务,进一步地,计算平台可以基于计算图从没有依赖算子的基础算子开始执行计算,直到计算图所有基础算子均执行完毕即完成计算,无需依赖上层的高阶算子,因而能够实现基于高阶算子的计算任务的构建和计算任务的执行的解耦。进而,软硬件工程师对基础算子进行优化时无需考虑高阶算子与基础算子之间的调用关系。此外,由于计算图表示的是计算任务基础算子之间的依赖关系,与具体实现的硬件平台无关,因此可以实现算法架构的跨硬件平台迁移,进而能够支持多硬件平台异构加速,进一步提高密文数据数据处理的计算速度。
19.结合第一方面,在第一方面的某些实现方式中,该方法还包括:该计算平台根据该第一算子集合中各个基础算子的依赖关系,确定该第一算子集合中的第一基础算子,该第一基础算子为输入占位符与该第一算子集合中的任一个基础算子的输出占位符的交集为空的基础算子;该计算平台将该数据存储在该第一基础算子的输入占位符集合对应的存储空间;该计算平台对该数据执行该第一基础算子并根据该第一算子集合中各个基础算子的依赖关系执行该第一算子集合中除该第一基础算子以外的其他基础算子。
20.应理解,上述计算平台可以包括一个计算机设备,也可以包括多个计算机设备。
21.需要说明的是,算子的输入占位符代表算子的所有输入操作数的占位符的并集,输入占位符集合代表多个算子输入占位符构成的集合;算子的输出占位符代表算子的输出操作数的占位符的并集,输出占位符集合代表多个算子的输出占位符构成的集合。
22.在一些可能的实现方式中,第一基础算子集合中可能有多个第一基础算子,则计算引擎根据多个第一基础算子的输入操作数确定将数据存储在输入占位符集合中哪些输入占位符对应的存储空间中。
23.结合第一方面,在第一方面的某些实现方式中,该第一算子集合和该第一算子集合中的各个基础算子的依赖关系是根据n个基础算子集合确定的,该n个基础算子集合与n个高阶算子一一对应,对该数据执行该计算能够通过该n个高阶算子实现,第一基础算子集合是通过对第一高阶算子展开得到的,该第一高阶算子是该n个高阶算子中的任一个高阶算子,该第一基础算子集合是该n个基础算子集合中对应于该第一高阶算子的基础算子集合;该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符相同。
24.在一些可能的实现方式中,一个计算任务需要有多个高阶算子描述,该多个高阶
算子之间存在依赖关系。则在本技术中,预先根据自定义的算子展开函数将每个高阶算子分别展开为对应的基础算子集合。在一些可能的实现方式中,上述展开过程为“逐级展开”,即先将高阶算子展开为多个次阶算子,再将多个次阶算子进一步展开,直至将次阶算子展开为自定义的基础算子为止。
25.应理解,为保证算子展开后表示的计算任务与多个高阶算子表示的计算任务相同,要求高阶算子展开得到的基础算子集合的输出占位符与高阶算子的输出占位符一致。
26.需要说明的是,n个基础算子集合中每个基础算子集合均包含一个或多个基础算子,也就是说,n个基础算子集合包含的基础算子总数大于或等于展开前的高阶算子的总数n。
27.结合第一方面,在第一方面的某些实现方式中,该n个基础算子集合与n个依赖关系信息一一对应,n个依赖关系信息用于指示该对应的基础算子集合中的各个基础算子的依赖关系,该第一算子集合和该第一算子集合中的各个基础算子的依赖关系是通过以下方式得到的:根据该n个依赖关系信息,确定目标依赖关系信息,该目标依赖关系信息用于指示多个基础算子中各个基础算子的依赖关系;根据该目标依赖关系信息和该n个基础算子集合包括的基础算子,确定该第一算子集合,该目标依赖关系信息为该第一算子集合中的各个基础算子的依赖关系。
28.应理解,每个高阶算子展开为对应的基础算子集合后,该基础算子集合中各个基础算子之间是存在依赖关系的。在一些可能的实现方式中,当n个基础算子集合对应的n个依赖关系信息确定后,根据该n个基础算子集合中各基础算子集合的输入占位符集合和输出占位符集合确定n个基础算子集合之间的依赖关系。在一些可能的实现方式中,还可以对n个基础算子集合及其之间的依赖关系进行优化,即将n个基础算子集合中重复的基础算子或依赖关系进行合并或去除。
29.结合第一方面,在第一方面的某些实现方式中,该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符相同是通过吸收操作实现的,该吸收操作,包括:根据第一依赖关系信息,确定该第一基础算子集合的输出占位符,该第一依赖关系信息用于指示该第一基础算子集合中的各个基础算子的依赖关系;确定该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符是否相同;若该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符不相同,将该第一基础算子集合的输出操作数的指针指向该第一高阶算子的输出占位符,并将第二标识信息更新为第一标识信息,该第一标识信息为该第一基础算子集合的输出操作数的标识信息,该第二标识信息为该第一高阶算子的输出操作数的标识信息。
30.需要说明的是,上述标识信息为输出操作数的“唯一”标识,可以根据该输出操作数的定义唯一确定。在一些可能的实现方式中,该标识信息可以为hash值,或者也可以为其他唯一标识信息,本技术对此不作具体限定。
31.在上述技术方案中,通过上述吸收操作,保证算子展开过程中生成的新的输出操作数的占位符与原算子的输出操作数的占位符一致,从而保证高阶算子展开前后表示的计算任务的一致性。
32.结合第一方面,在第一方面的某些实现方式中,该吸收操作,还包括:在该更新第二标识信息为第一标识信息后,在该第一高阶算子的输出操作数的指针被指针同步器访问
时,判断该指针同步器的标识信息是否等于该第二标识信息,当该指针同步器的该标识信息不等于该第二标识信息时,将该指针同步器的指针更新为该第一基础算子集合的输出操作数的指针,将该指针同步器的标识信息更新为该第二标识信息。
33.在上述技术方案中,在局部将新的输出操作数指针指向原算子的输出操作数的占位符,同时更新原算子的输出操作数的标识信息为新的输出操作数的标识信息,并在原算子的输出操作数下一次访问指针时,将其指针刷新为新的输出操作数的指针,从而保证全局引用的一致性。
34.结合第一方面,在第一方面的某些实现方式中,该第一基础算子集合中的各个基础算子的依赖关系是通过以下方式确定的:确定第二基础算子的输入占位符是否与第一输出占位符集合中的至少一个输出占位符相交,该第一输出占位符集合包括该第一基础算子集合中所有基础算子的输出占位符,其中该第二基础算子为该第一基础算子集合中的任一个基础算子;若该第二基础算子的输入占位符与该第一输出占位符集合中的至少一个输出占位符相交,则确定该至少一个输出占位符对应的基础算子与该第二基础算子存在依赖关系。
35.需要说明的是,一个算子的输入或输出占位符可能为一个占位符,也可能为多个占位符组成的集合,本技术对此不作具体限定。
36.结合第一方面,在第一方面的某些实现方式中,第一算子的输出占位符是根据该第一算子的输入操作数和该第一算子的类型确定的,该第一算子是该第一高阶算子展开过程中得到的任一个算子,该第一算子的输出占位符与已分配的输出占位符的交集为空。
37.在一些可能的实现方式中,该第一算子由自定义的算子组装函数生成,该第一算子的输出占位符是调用占位符/操作数分配模块分配的占位符确定的。
38.第二方面,提供了一种计算平台,该计算平台可以包括一个或多个计算机设备,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该计算平台可以通过硬件实现,也可以通过硬件执行相应的软件实现。具体地,该装置包括:收发单元,用于获取数据和计算任务描述,计算任务描述包括需要对该数据执行的计算;第一处理单元,用于根据计算任务描述选择第一算子集合,该第一算子集合中包含多个基础算子;第二处理单元,根据该第一算子集合中的各个基础算子的依赖关系,执行该第一算子集合对该数据进行计算,得到该数据的计算结果,其中存在依赖关系的两个基础算子中的一个基础算子的输入操作数的占位符与另一个基础算子的输出操作数的占位符相交。
39.在一些可能的实现方式中,收发单元、第一处理单元和第二处理单元可以为一个计算机设备,或者收发单元、第一处理单元和第二处理单元也可以为不同的计算机设备。示例性地,第二处理单元可以为一个或多个计算机设备,示例性地,当第二处理单元为一个计算机设备时,该计算机设备可以具有一个或多个硬件平台,第一算子集合中的多个基础算子可以由一个硬件平台执行,也可以分别由多个硬件平台执行。示例性地,当第二处理单元为多个计算机设备时,收发单元获取的数据和第一处理单元选择的第一算子集合也可以输入到多个计算机设备中,该多个计算机设备可以具有一个或多个硬件平台,上述执行第一算子集合对数据进行计算,也可以为多个计算机设备执行第一算子集合对数据进行计算,具体地,多个计算机设备中的每个计算机设备可以使用一个硬件平台执行相应的基础算子,也可以使用多个硬件平台执行相应的基础算子,本技术对此不作具体限定。
40.在一些可能的实现方式中,该计算平台可以为云端的计算平台,或者该计算平台中的第二处理单元为云端的处理单元,本技术对此不作具体限定。
41.结合第二方面,在第二方面的某些实现方式中,该第二处理单元还用于:根据该第一算子集合中各个基础算子的依赖关系,确定该第一算子集合中的第一基础算子,该第一基础算子为输入占位符与该第一算子集合中的任一个基础算子的输出占位符集合的交集为空的基础算子;将数据存储在第一基础算子的输入占位符集合对应的存储空间;对数据执行该第一基础算子并根据该第一算子集合中各个基础算子的依赖关系执行该第一算子集合中除该第一基础算子以外的其他基础算子。
42.结合第二方面,在第二方面的某些实现方式中,该第一算子集合和该第一算子集合中的各个基础算子的依赖关系是根据n个基础算子集合确定的,该n个基础算子集合与n个高阶算子一一对应,对该数据执行计算能够通过该n个高阶算子实现,该第一基础算子集合是通过对第一高阶算子展开得到的,该第一高阶算子是该n个高阶算子中的任一个高阶算子,该第一基础算子集合是该n个基础算子集合中对应于该第一高阶算子的基础算子集合;该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符相同。
43.结合第二方面,在第二方面的某些实现方式中,该n个基础算子集合与n个依赖关系信息一一对应,该n个依赖关系信息用于指示对应的基础算子集合中的各个基础算子的依赖关系,该第一算子集合和该第一算子集合中的各个基础算子的依赖关系是通过以下方式得到的:根据该n个依赖关系信息,确定目标依赖关系信息,该目标依赖关系信息用于指示多个基础算子中各个基础算子的依赖关系;根据该目标依赖关系信息和该n个基础算子集合包括的基础算子,确定该第一算子集合,目标依赖关系信息为该第一算子集合中的各个基础算子的依赖关系。
44.结合第二方面,在第二方面的某些实现方式中,该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符相同是通过吸收操作实现的,该吸收操作,包括:根据第一依赖关系信息,确定该第一基础算子集合的输出占位符,该第一依赖关系信息用于指示第一基础算子集合中的各个基础算子的依赖关系;确定该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符是否相同;若该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符不相同,将该第一基础算子集合的输出操作数的指针指向该第一高阶算子的输出占位符,并将第二标识信息更新为第一标识信息,该第一标识信息为该第一基础算子集合的输出操作数的标识信息,该第二标识信息为该第一高阶算子的输出操作数的标识信息。
45.结合第二方面,在第二方面的某些实现方式中,该吸收操作,还包括:在更新该第二标识信息为该第一标识信息后,在该第一高阶算子的输出操作数的指针被指针同步器访问时,判断该指针同步器的标识信息是否等于该第二标识信息,当该指针同步器的标识信息不等于该第二标识信息时,将该指针同步器的指针更新为该第一基础算子集合的输出操作数的指针,将该指针同步器的标识信息更新为该第二标识信息。
46.结合第二方面,在第二方面的某些实现方式中,该第一基础算子集合中的各个基础算子的依赖关系是通过以下方式确定的:确定第二基础算子的输入占位符是否与第一输出占位符集合中的至少一个输出占位符相交,该第一输出占位符集合包括该第一基础算子集合中所有基础算子的输出占位符,其中该第二基础算子为该第一基础算子集合中的任一
个基础算子;若该第二基础算子的输入占位符与该第一输出占位符集合中的至少一个输出占位符相交,则确定该至少一个输出占位符对应的基础算子与该第二基础算子存在依赖关系。
47.结合第二方面,在第二方面的某些实现方式中,第一算子的输出占位符是根据该第一算子的输入操作数和该第一算子的类型确定的,该第一算子是该第一高阶算子展开过程中得到的任一个算子,该第一算子的输出占位符与已分配的输出占位符的交集为空。
48.第三方面,提供了一种数据处理的装置,该装置可以是芯片或电路,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该装置可以通过硬件实现,也可以通过硬件执行相应的软件实现。
49.在一些可能的实现方式中,该装置包括用于执行上述第一方面或第一方面的任意可能的实现方式中的方法的模块。
50.在一些可能的实现方式中,该装置包括:处理器和存储器;该存储器用于存储指令,当该通信装置运行时,该处理器执行该存储器存储的该指令,以使该通信装置执行上述第一方面或第一方面的任一实现方法中的数据传输的方法。需要说明的是,该存储器可以集成于处理器中,也可以是独立于处理器之外。
51.在一些可能的实现方式中,该装置包括处理器,该处理器用于与存储器耦合,并读取存储器中的指令并根据所述指令执行上述第一方面或第一方面的任一实现方法中的数据传输的方法。
52.第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有程序,该程序使得通信装置执行上述任一方面,及其各种实现方式中的任一种数据传输的方法。
53.第五方面,本技术还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面中的任意数据传输的方法。
54.第六方面,提供了一种芯片系统,包括处理器,该处理器与存储器相连,所述处理器用于从存储器中调用并运行计算机程序,使得安装有所述芯片系统的通信设备执行上述任一方面及其可能的实施方式中的任一方法。该存储器可以位于该芯片系统内部,也可以位于该芯片系统外部。
附图说明
55.图1是本技术提供的一种数据处理的方法的一种应用场景示意图;
56.图2是本技术提供的一种数据处理的方法涉及的一种算子的示意图;。
57.图3是本技术提供的一种计算图表示的示意图;
58.图4是本技术提供的一种数据处理的方法的应用架构的示意图;
59.图5是本技术提供的一种数据处理的方法的应用框架的示意图;
60.图6是本技术提供的一种数据处理的方法的示意性流程图;
61.图7是本技术提供的一种数据处理的方法的示意性流程图;
62.图8是本技术提供的一种数据处理的方法的示意性流程图;
63.图9是本技术提供的一种数据处理的方法的不同阶段状态的示意图;
64.图10是本技术提供的一种数据处理的方法的算子依赖关系的示意图;
65.图11是本技术提供的又一种数据处理的方法的示意性流程图;
66.图12是本技术提供的又一种数据处理的方法的示意性流程图;
67.图13是本技术提供的再一种数据处理的方法的示意性流程图;
68.图14是本技术提供的再一种数据处理的方法的示意性流程图;
69.图15是本技术提供的一种计算平台的示意图;
70.图16是本技术提供的一种数据处理的装置的示意图。
具体实施方式
71.下面将结合附图,对本技术中的技术方案进行描述。为了便于理解,下文结合图1,介绍本技术实施例适用的场景。
72.图1是本技术提供的一种数据处理的方法的一种应用场景示意图。具体地,云端100由应用管理模块101、数据处理模块102、数据存储模块103和密钥管理与认证模块104构成。其中,应用管理模块101负责统筹处理用户请求;数据处理模块102用于对数据进行运算的任务;数据存储模块103用于存储数据,以及根据记录的用户数据位置存储和提取用户数据,并负责用户之间的信息交互;密钥管理与认证模块104用于申请密钥或进行用户认证。用户在用户端200上通过云计算系统登录程序与云端进行信息交互,负责完成提交用户请求给云端100、对用户隐私数据进行加密和解密以及数据的上传和下载等工作。为了保证云计算中数据的安全性,可以在云计算中使用全同态加密算法对数据进行处理。具体地,全同态加密机制可使用户或可信第三方对数据直接进行处理操作,而不用暴露原始数据,用户得到运算结果进行解密即可得到处理好的数据。例如,在医疗信息系统中,电子病历均以密文形式存储在云端的服务器上,当卫生部门需要知道某地区某种病的病人地理位置和年龄分布以应对可能引发的公共卫生安全问题时,就可将密文的电子病历数据交给专业的数据处理服务商处理,得到处理结果后解密即可得到需要的正确数据。
73.应理解,图1所示的应用场景仅为示例性说明,本技术实施例提供的数据处理的方法及装置还可以应用于其他基于同态加密算法的数据处理场景中,或者也可以应用于其他非基于密态算法的数据处理中,本技术实施例提供的数据处理的方法可以用于处理密文数据,也可以用于处理明文数据或明文密文混杂数据,本技术实施例对此不作具体限定。
74.为了便于理解本技术实施例,以下结合图2和图3对本技术实施例涉及的相关概念进行简要介绍:
75.1.全同态加密(fully homomorphic encryption,fhe):可以支持在密文上进行计算的一类加密算法,等价于在对应的明文上进行计算。密文上的计算过程可以在不可信的环境中完成而不用担心泄露数据隐私。
76.2.异构计算(heterogeneous computing,hc):使用超过一种硬件平台的混合计算方案。例如同时使用中央处理器(central processing unit,cpu)+图形处理器(graphics processing unit,gpu),或者同时使用cpu+现场可编程门阵列(field-programmable gate array,fpga)的计算方案。
77.3.格代数(lattice algebra,la):高维线性空间上定义的代数结构。当前所有同态加密算法底层依赖的数学困难问题都是基于格代数的。常用的数学困难问题包括格上的最短向量问题(shortest vector problem,svp)或者是带错误的学习问题(learning with error,lwe)等。
78.4.上层:指同态加密算法库,包括可用于表示计算任务的高阶算子,高阶算子表示的计算任务通过调用代数库的基础算子实现。
79.5.底层:指代数库,为计算引擎执行计算任务提供基础算子。底层接口是指代数库与硬件平台之间的接口。
80.6.占位符:若干特定单位尺寸数据块的集合,表示不带类型的裸数据。描述计算图的过程中,不涉及到具体的数值,但是需要有一个抽象的表示来区分不同的数据以及数据的尺寸。在一些可能的实现方式中,假设所有数据都可以表示成特定单位尺寸(如64比特)的数据块,则占位符的尺寸就是其包含的单位尺寸数据块的个数,占位符的交集和并集就是数据块的集合的交集和并集。
81.7.操作数:一个或者多个占位符组成的集合,集合中的占位符无交叉,即操作数中的占位符交集为空。一个操作数可以看作一个整体数据,一个操作数可以带有一些额外信息,如数据类型。操作数的尺寸就是其包含的占位符的尺寸的总和。
82.应理解,操作数可以看作“穿了衣服”的占位符。同一个占位符可以“穿上不同的衣服”,这意味着同一个占位符(裸数据)在不同的场合下可以看作不同类型的操作数;不同的操作数之间也可能会包含同一个占位符。
83.在一些可能的实现方式中,可以把一个操作数看作一个占位符,此时,占位符代表的数据是集合中所有占位符的并集。
84.应理解,操作数的交集就是其代表的数据占位符的交集,操作数的并集就是其代表的数据占位符的并集。
85.8.算子:表示一个基本计算单元,一个算子包括算子类型,以及若干(》=0)个输入操作数和一个输出操作数,如图2所示。也就是说,算子的输入和输出是操作数,而不是占位符。
86.在一些可能的实现方式中,算子的输入/输出操作数可以等同于算子的输入/输出占位符,此时算子的输入/输出占位符代表算子的所有输入/输出操作数的所有占位符的并集。
87.9.算子之间的依赖关系:如果算子a的输入占位符和算子b的输出占位符有交叉,即交集非空,则算子a依赖于算子b。这意味着计算过程中,算子b必须在算子a之前执行。
88.10.计算图(computing graph):有先后依赖的算子的集合,形成一个有向无环图(directed acyclic graph,dag),表示一个完整的计算任务,即需要对数据进行何种计算,具体如图3所示,其中a、b、c、d代表算子,a、b、c、d、x、y、z代表操作数。应理解,算子之间不会出现循环依赖。在本技术实施例中,计算图描述的计算任务由代数的数据结构和算子组成,和具体实现的硬件平台以及计算引擎无关,因此可以实现前后端解耦。
89.应理解,算子的先后依赖关系可以从算子集合中分析得到,因此计算图中可以显式保存这个依赖关系,也可以不保存。
90.如上所述,在当前已有技术框架下,当密码算法库的用户调用上层同态加密算法的高阶算子描述计算任务后,高阶算子会根据函数调用逻辑直接调用基础算子的代码实现完成计算,这些基础算子的具体实现代码一般是基于特定硬件平台编写的,因此难以通过其他硬件平台对这些基础算子进行优化或加速,这使得目前同态加密的开源库均无法有效支持异构计算。并且,由于计算引擎无法获知整体计算任务,只能需要依照调用关系和算子
出现的顺序执行计算任务,容易造成算力的浪费。此外,计算引擎必须依赖上层提供的算子调用关系才能实现计算,使得前端基于高阶算子的计算任务表示和后端计算任务执行之间的耦合性较强,进而导致软硬件工程师在对基础算子进行优化时,需要考虑上层高阶算子与基础算子之间的逻辑关系,优化难度和成本较高。为了更加直观,下面以同态加密算法库(homomorphic encryption library,helib)、格密码开源库palisade、简单加密函数库(simple encrypted arithmetic library,seal)这几个开源库为例,介绍同态加密开源库在进行数据处理时的特点。
91.helib和palisade都是基于开源的快速数论算法库(number theory algorithm library,ntl),其底层是开源的高精度整数库gnu多精度算术库(the gnu multiple precision arithmetic library,gmp)。当用户调用上层的同态加密算法的高阶算子的时候,底层接口会根据高阶算子与基础算子之间的调用关系直接调用底层的基础算子的代码实现计算。也就是说,计算引擎只能根据算子的调用顺序执行计算任务,而无法掌握整体计算任务。进而无法将在调用函数中不同位置出现的相同类型的算子合并执行,有可能造成算力浪费。此外,ntl和gmp目前都不支持gpu加速。即便后续这两个库扩展了对gpu和其它硬件平台的支持,受到现有架构的限制,也只能在支持gpu的算子内部调用gpu来实现针对gpu设计的单个算子的优化,无法进行支持不同硬件平台的算子之间的整体优化,如多个算子合并并行加速。因此ntl和gmp要支持异构计算,每迁移到一个新的硬件平台,可能需要基于该硬件平台的特点更改基础算子的实现代码。此外,由于高阶算子和基础算子之间的调用关系需要由密码学家自己编写,所以基础算子具体实现代码的改变后,高阶算子和基础算子之间的调用关系可能也需要更改。因此,不光底层实现需要大量人力进行调整,上层的应用接口也很难保持不变。因此迁移代价很高。
92.seal库的架构与helib和palisade类似,区别在于底层并没有调用其它代数库,而是自己专门基于cpu开发了全同态加密底层需要的格代数的算子。seal库虽然自己开发了基础算子,计算引擎执行计算任务也是依赖高阶算子和基础算子之间的调用关系,其无法获知整体计算任务。这使其架构与helib、palisade存在类似的缺点:跨硬件平台迁移代价高、上层计算任务的构建和计算引擎的计算任务执行之间的耦合性较强。
93.鉴于此,本技术实施例提供了一种数据处理的方法和计算平台,基于能为计算引擎提供能够描述整体计算任务的计算图的全同态加密算法架构对密文进行处理,计算引擎在执行计算任务时,可以通过计算图获知整体计算任务,因而可以根据计算图实现同类型算子的合并处理,从而在保证计算任务正确执行的前提下提升计算速度。此外,在该算法架构中,由于对于确定的计算任务,其由基础算子构成的计算图表示即基础算子之间的依赖关系也是确定,因而计算引擎可以基于计算图从没有依赖算子的基础算子开始执行计算,直到计算图所有基础算子均执行完毕即完成计算,无需依赖上层的高阶算子,因而能够实现基于高阶算子的计算任务的构建和计算任务的执行的解耦。进而,软硬件工程师对基础算子进行优化时无需考虑高阶算子与基础算子之间的调用关系。此外,由于计算图表示的是基础算子之间的依赖关系,与具体实现的硬件平台无关,因此可以实现算法架构的跨硬件平台迁移,进而能够支持多硬件平台异构加速,进一步提高数据处理的计算速度。
94.图4所示为本技术实施例提供的一种数据处理的方法实现所需的应用架构的示意图,可以应用于图1所示的应用场景中。如图4所示为支持异构计算的格代数计算图
(heterogeneous lattice graph,hlg)架构,示例性地,hlg架构能够支持bgv算法(zvika brakerski,craig gentry and vinod vaikuntanathan,bgv)、bfv算法(zvika brakerski,junfeng fan and frederik vercauteren,bfv)、ckks算法(jung hee cheon,andrey kim,miran kim and yongsoo song,ckks)等同态加密算法。应理解,基于全同态加密算法的计算任务不存在逻辑分支,也不需要支持条件判断和循环等,即不存在控制流,因此计算任务可以表示成dag。因此,在本技术实施例提供的hlg架构中,在上层高阶算子和底层基础算子之间增加一个抽象的计算图表达层,该计算图表达层通过dag来描述整体计算任务,在该计算图的基础上,计算引擎获知基础算子之间的依赖关系,能够基于基础算子及其之间的关系完成计算。也就是说,能够实现前端基于高阶算子的计算图表示和后端基于基础算子的计算任务执行之间的解耦。进而,硬件工程师针对整体计算图的特点,以及硬件平台本身的特性,可以对基础算子进行专门的优化,以提升整体计算的性能,而无需了解同态加密算法库中高阶算子相关的代数或密码学知识。此外,通过自定义基础算子调控高阶算子的展开粒度,由于对于同一个计算任务,算子之间的依赖关系是清楚的,因此在不同硬件平台,只需要改变相应基础算子的具体实现代码,因此可以实现同态加密算法库的跨硬件平台迁移。这样,可以实现上层同态加密算法库中算法代码的一次编写即可在多种硬件平台运行,因此,密码学家设计新的算法后,可以在多种硬件平台开展实验,对密码学专家设计新的算法非常友好。
95.图5所示为本技术实施例提供的一种数据处理的方法实现所需的hlg基础框架的示意图。如图5所示,hlg框架包括操作数/占位符分配模块、算子组装模块、算子展开模块、算子依赖关系判断模块,在一些可能的实现方式中,hlg框架还可以包括图优化模块和/或计算引擎。需要说明的是,由于使用rns(residue number system)系统进行加速是一种常规手段,因此为了使hlg框架能够通过rns算法进行加速,需要其支持数据的任意拆分和组合。因此,在hlg基础框架中,对于每个算子可以定义算子组装函数、算子展开函数,其中,算子组装函数用于根据输入操作数和算子类型生成算子,算子展开函数用于将高阶算子展开为基础算子集合。在一些可能的实现方式中,还可以定义计算引擎专用的算子具体实现。应理解,图5所示的hlg框架仅为示例性说明,其中的功能模块不应简单的理解为功能实体。
96.下面结合图6至图14对各模块的功能进行详细阐述:
97.1)操作数/占位符分配模块:用于分配虚拟的数据占位符,以在计算图中代表特定长度的数据。对于该模块,给定操作数类型和想要的占位符尺寸(单元数据块数量),返回一个新的操作数,其内部包括一个符合尺寸要求的新占位符,而且和现有的占位符无交集。
98.在一些可能的实现方式中,可以将占位符描述为左闭右开区间[x,y),其中x,y为整数。例如,[0,4096)和[4096,8192)表示两个尺寸为4096个单元尺寸数据块的不同占位符。在一些可能的实现方式中,一个单元尺寸的数据块大小可以可以根据需要自行定义,例如,常用尺寸可以为1比特、2比特、4比特、8比特、16比特或者64比特等,本技术实施例对此不作具体限定。进一步地,操作数/占位符分配模块保存一个计数器counter,初始为0。当输入操作数类型t和占位符尺寸size时,返回一个t类型的操作数,只包括一个占位符[counter,counter+size),同时计数器counter增加size,即counter=counter+size。
[0099]
应理解,对于非空的占位符ph1=[x1,y1),ph2=[x2,y2),当且仅当x1《=x2《y1或x1《y2《=y1时,占位符ph1和ph2有交叉。
[0100]
在一些可能的方式中,可以将占位符描述为整数组成的集合,每一个整数代表一个不同的抽象单元数据块,例如:{0,1,2,

,4095},{4096,4097,

,8191}。进一步地,操作数/占位符分配模块保存一个计数器counter,初始为0。当输入操作数类型t和占位符尺寸size时,返回一个t类型的操作数,只包括一个占位符{counter,counter+1,

,counter+size-1},同时计数器counter增加size,即counter=counter+size。
[0101]
2)算子组装模块:在一些可能的实现方式中,该算子组装模块通过算子组装函数来实现。对于该模块,给定若干输入操作数x0,x1,

,xn和算子类型t,输出一个全新的算子op。在一些可能的实现方式中,输入操作数的个数也可能为零,即给定算子类型,输出一个全新算子。需要说明的是,算子组装函数可以由代数库用户,即密码学家自行定义。
[0102]
进一步地。算子组装模块定义描述计算任务的候选算子集合。
[0103]
在一些可能的实现方式中,op的算子类型为t,输入操作数为x0,x1,

,xn,输出操作数为全新的操作数y。其中,操作数y的占位符是调用操作数/占位符分配模块新分配的占位符,该占位符和已经存在的所有占位符没有交集,即输出占位符之间不交叉。
[0104]
3)算子展开模块:用于将目标算子展开为次阶算子集合,其中,次阶算子集合表示的计算任务与原目标算子表示的计算任务相同。。在一些可能的实现方式中,该算子展开模块通过算子展开函数来实现。需要说明的是,算子展开函数可以由代数库用户,即密码学家自行定义。在一些可能的实现方式中,高阶算子的展开过程为“逐级展开”,即通过算子展开模块先将高阶算子展开为多个次阶算子。具体地,该模块调用算子组装模块的高阶算子集合,即输入单个高阶算子a,输出一个等价的算子集合{ai},即,将算子a展开为若干次阶算子ai。其中,i=0,1,2

[0105]
在一些可能的实现中,可以在算子展开函数中引入随机的保护机制,如无用代码、冗余计算分支、算子拆分、等价变换等,本技术实施例对此不作限定。
[0106]
需要说明的是,基于算子展开函数将上述候选算子集合中的所有高阶算子都展开,直至候选算子集合中只剩下不需要继续展开的基础算子为止。由于基础算子不需继续展开,因此需要提供基础算子的具体实现代码。在一些可能的实现方式中,基础算子为支持格代数的算子。在一些可能的实现方式中,用户可以自定义哪些算子为基础算子。进一步地,通过自定义基础算子可以调控高阶算子展开的粒度。
[0107]
还需说明的是,为了保证计算图描述的计算任务的一致性,展开后的算子集合和展开前的算子表示的计算任务需等价;并且,为了不破坏算子展开前后与其他算子之间的依赖关系,展开后的算子集合的整体输入占位符集合需要与算子展开前的整体输入占位符一致,展开后的算子集合的整体输出占位符需要与算子展开前的输出占位符需保持一致。
[0108]
在一些可能的实现方式中,在算子展开函数执行过程中会产生新的输出操作数,这个新的输出操作数与原算子的输出操作数的占位符不同。为了保持计算图前后依赖关系不变,本技术实施例提供一个“吸收操作”,以使算子展开后,保证展开的算子集合的新的输出操作数和原算子的输出操作数的占位符一致。进一步地,由于新的输出操作数和原算子的输出操作数还可以被其他场合引用,因此,为了保证全局一致性,还需刷新所有引用到新的输出操作数。
[0109]
以下结合图6至图9说明“吸收操作”的具体实现方式。
[0110]
图6所示为进行“吸收操作”前后局部和全局信息发生的变化。从局部看:算子d展
开为算子d1、d2和d3,算子展开后生成新的操作数a,操作数a的占位符为占位符a,不同于算子d展开前的操作数b的占位符b,这将导致算子展开前后的计算图依赖关系发生改变。进行“吸收操作”后,操作数a放弃自己的占位符a,转而指向操作数b的占位符b。同时,操作数b仍然是算子d的输出操作数,操作数a仍然是算子d3的输出操作数。另外,从全局来看,进行“吸收操作”后,所有原本指向操作数b的引用,现在需要指向操作数a。
[0111]
更具体地,为了使所有原本指向操作数b的引用均指向操作数a,需要将所有对操作数的指针或引用改为通过一个指针同步器ptrsyncer来完成。需要说明的是,该指针同步器除了存储一个操作数的指针以外,还会保存一个hash值。此外,对于所有操作数对象增加一个hash值字段,该hash值用于唯一标识这个操作数对象。更进一步地,还需要定义一个所有hash函数到所有操作数对象的映射表objmap,用于表示hash值与操作对象之间的映射关系。
[0112]
在一些可能的实现方式中,可以通过图7所示的方法600完成上述的“吸收”及同步操作。具体地,方法600包括:
[0113]
s601,使第一操作数指向第二操作数的第二占位符。
[0114]
示例性地,该第一操作数可以为上述操作数a,该第二操作数可以为上述操作数b,该第二占位符可以为上述占位符b。应理解,该第二占位符可以为一个占位符,或者,也可以为多个占位符组成的集合,本技术实施例对此不作具体限定。
[0115]
s602,更新第二操作数的hash值为第一操作数的hash值。
[0116]
s603,在下次访问时,将指向第二操作数的指针刷新为指向第一操作数的指针。
[0117]
具体地,第二操作数的指针同步器在下一次访问指针时,将原来指向第二操作数的指针刷新为指向第一操作数的指针。在一些可能的实现方式中,更新第二操作数的指针同步器中的hash值为第一操作数的hash值。
[0118]
在一些可能的实现方式中,通过指针同步器访问指针的方法可参见图8中所示的方法700,该方法700包括:
[0119]
s701,调用指针同步器的指针访问接口。
[0120]
在一些可能的实现方式中,调用指针同步器ptrsyncer的指针访问接口ptrsyncer.ptr()。
[0121]
s702,判断指针同步器的hash值是否等于目标hash值,如果等于,则执行s704;否则继续执行s703。
[0122]
示例性地,该指针同步器的hash值为上述第二操作数的hash值,该目标hash值为上述第一操作数的hash值。在一些可能的实现方式中,指针同步器的hash值可以表示为ptrsyncer.hash,目标hash值可以表示为ptrsyncer.ptr.obj.hash。
[0123]
当ptrsyncer.hash!=ptrsyncer.ptr.obj.hash时,继续执行s703。
[0124]
s703,将指针同步器的指针更新为目标指针,将指针同步器的hash值更新为目标hash值。
[0125]
示例性地,该目标指针为上述第一操作数的指针。
[0126]
在一些可能的实现方式中,根据映射表objmap完成目标指针的更新。具体地,令p=objmap[ptrsyncer.ptr.obj.hash],令ptrsyncer.ptr=p;更进一步地,令ptrsyncer.hash=p.obj.hash。至此,完成指针同步器的指针更新。
[0127]
s704,返回指针同步器的指针。
[0128]
应理解,返回的指针同步器的指针为目标指针,示例性地,为上述第一操作数的指针。在一些可能的实现方式中,返回值中还包含目标指针对应的hash值。在一些可能的实现方式中,该返回值可以为ptrsyncer.ptr。
[0129]
应理解,在未进行“吸收操作”之前,也即算子展开模块处于图9所示的初始状态时,指针ptr_b和指针ptr_a分别指向不同的操作符和占位符,同时操作数a和操作数b都有多个不同的引用,从指针ptr_b和指针ptr_a的局部无法得知除自身以外的其他指针有多少个引用,更无法得知全局总共有多少个引用。在经过s601和s602的“吸收”后,操作数a指向占位符b,操作数b的hash值变为操作数a的hash值hash_a。进一步地,在指针同步过程中,通过指针同步器ptrsyncer_b访问指针后,将原来的操作数b的指针ptr_b刷新为指针ptr_a,完成s703的全局指针同步过程。
[0130]
本技术实施例提供的数据处理的方法,通过指针延迟同步,保证算子展开过程中生成的新的输出操作数的占位符与原算子的输出操作数的占位符一致。更具体地,在局部将新的输出操作数指针指向原算子的输出操作数的占位符,同时更新原算子的输出操作数的hash值为新的输出操作数的hash值,并在原算子的输出操作数下一次访问指针时,将其指针刷新为新的输出操作数的指针,从而保证全局引用的一致性。
[0131]
4)算子依赖关系判断模块:给定一个基础算子集合s,确定算子之间的先后依赖关系,形成计算图。
[0132]
在一些可能的实现方式中,对算子b,其依赖集合和通知集合分别定义如下:
[0133]
算子b的依赖集合:表示所有b依赖的算子集合。集合中的所有算子的输出占位符和算子b的输入占位符交集非空,同时不存在其他算子为b的依赖。也就是说,算子b必须等到其依赖集合中的所有算子都执行完毕,才能开始执行。
[0134]
算子b的通知集合:表示所有依赖b的算子集合。集合中的所有算子的输入占位符和算子b的输出占位符交集非空,同时不存在其他算子依赖算子b。也就是说,算子b执行完以后,可以通知其通知集合中的算子开始检查自己是否满足执行条件(也就是依赖集合是否为空)。
[0135]
假设每一个算子有唯一标识符,用整数表示。则具体如图10所示,有算子7的箭头指向算子5,代表算子7依赖算子5。图10所示的算子的依赖集合和通知集合定义如表1:
[0136]
表1:依赖集合和通知集合实例
[0137]
所有算子的依赖集合所有算子的通知集合1-》{}1-》{5}2-》{}2-》{5}3-》{}3-》{5}4-》{}4-》{6}5-》{1,2,3,6}5-》{7}6-》{4}6-》{5}7-》{5}7-》{}
[0138]
需要说明的是,对于任一占位符a都可以找到对应的生成算子op(a),使得a是op(a)的输出占位符之一。应理解,根据所有算子的输出占位符不交叉的设定,op(a)可以有唯
一的定义。
[0139]
在上述前提下,算子依赖关系判断模块的工作流程具体如下:
[0140]

把算子集合s中所有算子的输出占位符组合为一个集合s
out
={phi};
[0141]

对于算子集合s中的每个算子a的输入占位符pha,找到s
out
中和pha交叉的占位符集合sa。应理解,sa为s
out
的子集。然后获得sa中所有占位符对应的生成算子集合op(sa)。则确定算子a依赖于算子集合op(sa)中的所有算子。
[0142]

当算子集合中的所有算子都确定了其依赖关系以后,s集合加上这个依赖关系,就可以完全表示一个计算图。
[0143]
需要说明的是,从计算图中还可以分析出整个计算图的输入操作数集合和输出操作数集合,因此计算图中可以显式保存整体输入和输出操作数集合,也可以不保存。应理解,上述输入操作数集合为不依赖其它操作数的操作数,是整个计算图的输入数据;上述输出操作数集合为不被其它任何算子引用为输入的操作数集合,是整个计算图的输出数据。
[0144]
下面结合图11和图12说明确定占位符集合sa的方法。
[0145]
在一些可能的实现方式中,定义算子a的输入占位符为目标占位符ph=[ph.x,ph.y),对比占位符集合s
out
={phi},其中,phi=[phi.x,phi.y),i=0,

,n-1;n为算子集合s中算子的个数。对比占位符集合{phi}的内的占位符按照phi.x从小到大排序;另外,根据所有算子的输出占位符无交叉的假设,占位符集合s
out
内的占位符phi之间没有交叉。具体地,对比占位符集合{phi}满足两个条件:1)对任意i,有phi.x《phi.y;2)对任意的i,j,满足0≤i《j《n时,有phi.y《=phj.x。
[0146]
基于上述条件,可以参照图11所示的方法1000确定算子a的依赖集合。具体地,方法1000包括:
[0147]
s1010,输入目标占位符ph=[ph.x,ph.y)和对比占位符集合s
out
={phi},其中,phi=[phi.x,phi.y),i=0,

,n-1。
[0148]
s1020,确定满足ph
l
.y》ph.x的最小的下标l。
[0149]
s1030,确定满足phr.x≥ph.y的最小的下标r。
[0150]
s1040,确定第一输出占位符集合{phj,j∈[l,r)}。
[0151]
应理解,第一输出占位符集合{phj,j∈[l,r)}包括了集合{phi}中与ph交集非空的所有占位符,换句话说,该第一输出占位符集合即为与算子a的输入占位符ph=[ph.x,ph.y)有交集的输出占位符集合sa。进一步地,算子集合op(sa)即为算子a的依赖集合。应理解,当l≥r时,sa为空集,即算子a无依赖集合。
[0152]
在一些可能的实现方式中,s1020和s1030可以通过“二分查找”算法实现,复杂度为o(log(n))。
[0153]
在一些可能的实现方式中,还可以参照图12所示的方法1100确定算子a的依赖集合。
[0154]
具体地,方法1100包括:
[0155]
s1110,输入目标占位符ph和对比占位符集合s
out
={phi},其中,i=0,

,n-1。
[0156]
s1120,对于j=0,

n-1,确定与ph交集非空的phj。
[0157]
在一些可能的实现方式中,定义集合ret=空集,对于j=0,

n-1,如果ph和phj的交集非空,则将phj加入集合ret。应理解,该查找方法的复杂度为o(n)。
[0158]
s1130,确定第一输出占位符集合{phj}。
[0159]
应理解,s1120中确定的集合ret即为第一输出占位符集合,也就是与算子a的输入占位符有交集的输出占位符集合sa。当集合ret为空集时,sa为空集,即算子a无依赖集合,则此时算子a的输入占位符用于存储计算任务的实际输入数据。
[0160]
本技术实施例提供的数据处理的方法,通过确定基础算子集合以及它们之间的依赖关系,构造整体计算任务,使得计算引擎能够执行只包含基础算子的整体计算任务,从而实现计算任务构建和计算任务执行的解耦。进一步地,不同硬件平台的计算引擎均可以基于本技术实施例确定的同一份计算任务进行具体实现,因此可以实现异构计算。
[0161]
5)图优化模块:用于对计算图进行优化,具体地,可以对计算图进行等价变换,减少重复计算,提高执行性能等。在一些可能的实现方式中,可以使用裁剪无用计算分支、算子去重、自动预计算、自动simd优化等图优化算法,本技术实施例对此不作具体限定。
[0162]
6)计算引擎:用于具体执行计算图描述的计算任务,把整体计算任务的输入数据处理为输出数据。
[0163]
在一些可能的实现方式中,计算引擎在实际执行的流程如下:
[0164]

为所有数据占位符分配实际存储空间;
[0165]

接收整体计算任务的输入数据,存入输入占位符对应的实际存储空间;
[0166]

根据计算图依赖关系,从没有依赖的算子开始执行计算,将算子计算的中间结果保存在对应算子的输出占位符的实际存储空间中。直到所有算子都计算完成为止。
[0167]

从计算图的整体输出占位符对应的实际存储空间中取出数据,作为整体计算任务的输出数据。
[0168]
需要说明的是,计算引擎的工作流程仅为示例性说明,本技术实施例对其具体实施不作具体限定。
[0169]
图13示出了本技术实施例提供的一种数据处理的方法1300的示意性流程图,该方法1300可以应用于图4所示的hlg架构中,也可以应用于图5所示的hlg框架中,本技术实施例对此不作限定。在一些可能的实现方式中,该方法1300可以由图5所示的hlg框架执行,具体地,方法1300包括:
[0170]
s1310,定义计算任务所有输入数据的操作数。
[0171]
示例性地,定义输入数据的操作数可以由上述实施例中的“操作数/占位符分配模块”执行。应理解,后续的所有算子的全部或部分输入操作数均来自本步骤定义的操作数。
[0172]
s1320,确定构建计算任务的高阶算子集合。
[0173]
示例性地,构建计算任务的高阶算子集合中的高阶算子可以由上述实施例中的“算子组装模块”确定。具体地,算子组装模块使用算子组装函数将从s1310中选择的操作数作为算子的输入操作数,结合算子类型生成相应的高阶算子。在一些可能的实现方式中,高阶算子b为高阶算子a的依赖算子,则调用算子组装模块生成高阶算子a后,将高阶算子a的输出操作数作为高阶算子b的输入操作数之一组装高阶算子b。应理解,高阶算子的输出操作数是“操作数/占位符分配模块”新分配的操作数,该输出操作数的占位符与s1310中定义的所有输入数据的操作数的占位符均无交集,与已经分配的其他高阶算子的输出占位符也无交集。
[0174]
s1330,根据算子展开函数将高阶算子集合展开为基础算子集合。
[0175]
示例性地,将高阶算子集合展开为基础算子集合可以由上述实施例中的“算子展开模块”执行。具体地,算子展开模块使用算子展开函数将每个高阶算子展开为对应的基础算子集合。现以将高阶算子集合中的第一高阶算子展开为第一基础算子集合为例详细说明展开过程涉及的模块调用:在一些可能的实现方式中,先将第一高阶算子展开为第一次阶算子集合,进而将第一次阶算子集合中的每个次阶算子展开,直至所有次阶算子均展开为基础算子为止。需要说明的是,展开过程中,调用算子组装函数进行次阶算子和基础算子的组装,即,确定次阶算子和基础算子的输入操作数和输出操作数。根据上述定义,算子的输出操作数的占位符与已存在的操作数的占位符均不相交,即每个算子的输出操作数为新的输出操作数。
[0176]
需要说明的是,在将算子展开为下一阶算子的过程中,下一阶算子的依赖关系已经被定义在算子展开函数中。例如,将算子a展开为算子a1,a2,a3和a4,展开过程中即可根据算子展开函数确定a3依赖于a1和a2,则展开过程中调用算子组装函数先分别生成a1和a2,再调用算子组装模块根据a1和a2的输出操作数以及s1310中定义的输入数据的操作数生成a3。示例性地,算子组装模块也可以将算子a1和a2的输出操作数合并为一个新的操作数作为算子a3的一个输入操作数。在一些可能的实现方式中,在算子a展开为算子a1-a4的过程中,算子a1除了是算子a3的通知算子,也是a4的通知算子,则在算子组装模块生成算子a3和a4的过程中,可能将算子a1的输出操作数拆分为输出操作数1和输出操作数2。进一步地,将a1的输出操作数1作为算子a3的一个输入操作数,将a1的输出操作数2作为算子a4的一个输入操作数。应理解,根据上述实施例中的描述,操作数的拆分和合并,可以理解为操作数的占位符集合的拆分和合并。在一些可能的实现方式中,还需说明的是,上述算子a1,a2和a3之间的依赖关系在算子a1,a2和a3继续展开过程中可能会被破坏,因此需要通过s1340确定最终展开得到的基础算子集合的依赖关系信息。
[0177]
s1340,确定基础算子集合的依赖关系信息。
[0178]
具体地,基础算子集合的依赖关系信息是指基础算子集合中各基础算子的依赖关系。示例性地,确定基础算子集合的依赖关系信息由上述实施例中的“算子依赖关系判断模块”执行。
[0179]
在一些可能的实现方式中,某个计算任务是由n个高阶算子表示的,则基础算子集合是由该n个高阶算子展开确定的。具体地,n个高阶算子展开为对应的n个基础算子集合,为保证高阶算子展开为基础算子集合后,基础算子集合表示的计算任务不变,需使高阶算子的输出占位符与其展开的基础算子集合的输出占位符一致。以第一高阶算子展开为第一基础算子集合为例,使用上述实施例中的方法1000或方法1100确定第一基础算子集合的依赖关系信息,进而确定第一基础算子集合的输出占位符。当第一基础算子集合的输出占位符与第一高阶算子的输出占位符不一致时,通过上述实施例中的“吸收”操作将第一基础算子集合的输出占位符更新为第一高阶算子的输出占位符。进一步地,根据n个基础算子集合和n个基础算子集合的依赖关系信息确定基础算子集合的依赖关系信息。
[0180]
进一步地,计算引擎在对数据进行计算时,只需执行上述基础算子集合构成的计算图即可获得计算结果,而无需了解代数库中高阶算子与基础算子之间的调用关系。
[0181]
本技术实施例提供一种数据处理的方法,使用基础算子及其之间的依赖关系表示计算任务,使得计算引擎在进行计算时无需依赖上层高阶算子表示的计算任务,可以直接
执行基础算子完成计算,因而能够实现基于高阶算子的计算任务的构建和计算任务的执行的解耦。进而,软硬件工程师在对基础算子进行优化时,无需考虑高阶算子与基础算子之间的调用关系。此外,由于计算图表示的是基础算子之间的依赖关系,与具体实现的硬件平台无关,因此可以实现算法架构的跨硬件平台迁移,进而能够支持多硬件平台异构加速,进一步提高数据处理的计算速度。
[0182]
图14示出了本技术实施例提供的一种数据处理的方法1400的示意性流程图,该方法1400可以应用于图4所示的hlg架构中,也可以应用于图5所示的hlg框架中,本技术实施例对此不作限定。在一些可能的实现方式中,该方法1400可以由图5所示的hlg框架中的计算引擎执行,具体地,方法1400包括:
[0183]
s1410,计算平台获取数据和计算任务描述,计算任务描述包括需要对数据执行的计算。
[0184]
具体地,上述数据可以为密文数据,或者也可以为明文数据,或者也可以为明文与密文混杂的数据,本技术对此不作具体限定。
[0185]
s1420,计算平台根据计算任务描述选择第一算子集合,第一算子集合包含多个基础算子。
[0186]
示例性地,该第一算子集合可以为根据高阶算子展开获得的,高阶算子展开得到第一算子集合的具体流程可以参考上述实施例中的描述,在此不再赘述。
[0187]
应理解,第一算子集合表示的计算任务与其展开前的高阶算子表示的计算任务一致。
[0188]
s1430,计算平台根据第一算子集合中的各个基础算子的依赖关系,执行第一算子集合对数据进行计算,得到该数据的计算结果,其中存在依赖关系的两个基础算子中的一个基础算子的输入操作数包括另一个基础算子的输出操作数。
[0189]
示例性地,计算引擎根据第一算子集合中多个基础算子及其之间的依赖关系对数据进行相关计算,应理解,第一算子集合中多个基础算子之间的依赖关系等价于计算任务描述。
[0190]
需要说明的是,本技术中操作数的占位符可以为一个占位符,也可以为多个占位符组成的集合,本技术对此不作具体限定。
[0191]
应理解,算子a与算子b存在依赖关系可以指算子a执行完毕才能执行算子b,即算子a的输出占位符与算子b的输入占位符相交。需要说明的是,算子a也可以称为算子b的依赖算子,或称算子b为算子a的通知算子。
[0192]
进一步地,计算引擎从第一算子集合中没有依赖算子的基础算子开始执行计算,直至第一算子集合中所有基础算子执行完毕,获得上述数据的计算结果。
[0193]
更具体地,第一算子集合中各个基础算子的依赖关系的确定流程可以参考上述实施例中的描述,在此不再赘述。
[0194]
本技术实施例提供的一种数据处理的方法中,由于计算引擎执行计算任务时,可以通过第一算子集合构成的计算图获知整体计算任务,进一步地,计算引擎可以基于计算图从没有依赖算子的基础算子开始执行计算,直到计算图所有基础算子均执行完毕即完成计算,无需依赖上层的高阶算子,因而能够实现基于高阶算子的计算任务的构建和计算任务的执行的解耦。进而,软硬件工程师对基础算子进行优化时无需考虑高阶算子与基础算
子之间的调用关系。此外,由于计算图表示的是计算任务基础算子之间的依赖关系,与具体实现的硬件平台无关,因此可以实现算法架构的跨硬件平台迁移,进而能够支持多硬件平台异构加速,进一步提高密文数据数据处理的计算速度。
[0195]
需要说明的是,本技术实施例提供的基于hlg框架数据处理的方法和计算平台,可以用于全同态加密算法,也可以用于其他密码算法,或者也可以用于其他场景,本技术实施例对此不作具体限定。只要计算任务能够支持数据任意的拆分组合、支持从高阶算子展开为低阶算子、支持自定义算子展开的粒度,并且不需要考虑控制逻辑,即可使用本技术实施例的数据处理的方法和计算平台。在一些可能的实现方式中,在使用本技术实施例的数据处理的方法和计算平台时,需要验证密码算法实现的正确性,即需要验证:原始计算图的逻辑正确,以及具体硬件平台上的单个算子的实现是正确的。在一些可能的实现方式中,本技术实施例提供的hlg框架还可以作为随机的白盒密码、代码混淆方案的生成框架,或者用于描述aes等对称密码算法的计算图,本技术实施例对此不作限定。
[0196]
图15是本技术实施例提供的计算平台的示意性框图。该计算平台2000包括收发单元2010、第一处理单元2020和第二处理单元2030。收发单元2010可以实现相应的通信功能,第一处理单元2020和第二处理单元2030用于进行数据处理。
[0197]
可选地,该计算平台2000还可以包括存储单元,该存储单元可以用于存储指令和/或数据,处理单元2020可以读取存储单元中的指令和/或数据,以使得装置实现前述方法实施例。
[0198]
该计算平台2000可以包括用于执行图14中的方法的单元。并且,该计算平台2000中的各单元和上述其他操作和/或功能分别为了实现图14的方法实施例的相应流程。
[0199]
当该计算平台2000用于执行图14中的方法1400时,收发单元2010可用于执行方法700中的s1410,第一处理单元2020可用于执行方法1400中的s1420,第二处理单元2030可用于执行方法1400中的s1430。
[0200]
具体地,该装置包括:收发单元2010,用于获取数据和计算任务描述,计算任务描述包括需要对该数据执行的计算;第一处理单元2020,用于根据计算任务描述选择第一算子集合,该第一算子集合中包含多个基础算子;第二处理单元2030,用于根据该第一算子集合中的各个基础算子的依赖关系,执行该第一算子集合对该数据进行计算,得到该数据的计算结果,其中存在依赖关系的两个基础算子中的一个基础算子的输入操作数的占位符与另一个基础算子的输出操作数的占位符相交。
[0201]
在一些可能的实现方式中,该第二处理单元2030还用于:根据该第一算子集合中各个基础算子的依赖关系,确定该第一算子集合中的第一基础算子,该第一基础算子为输入占位符与该第一算子集合中的任一个基础算子的输出占位符集合的交集为空的基础算子;将数据存储在第一基础算子的输入占位符集合对应的存储空间;对数据执行该第一基础算子并根据该第一算子集合中各个基础算子的依赖关系执行该第一算子集合中除该第一基础算子以外的其他基础算子。
[0202]
在一些可能的实现方式中,该第一算子集合和该第一算子集合中的各个基础算子的依赖关系是根据n个基础算子集合确定的,该n个基础算子集合与n个高阶算子一一对应,对该数据执行计算能够通过该n个高阶算子实现,该第一基础算子集合是通过对第一高阶算子展开得到的,该第一高阶算子是该n个高阶算子中的任一个高阶算子,该第一基础算子
集合是该n个基础算子集合中对应于该第一高阶算子的基础算子集合;该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符相同。
[0203]
在一些可能的实现方式中,该n个基础算子集合与n个依赖关系信息一一对应,该n个依赖关系信息用于指示对应的基础算子集合中的各个基础算子的依赖关系,该第一算子集合和该第一算子集合中的各个基础算子的依赖关系是通过以下方式得到的:根据该n个依赖关系信息,确定目标依赖关系信息,该目标依赖关系信息用于指示多个基础算子中各个基础算子的依赖关系;根据该目标依赖关系信息和该n个基础算子集合包括的基础算子,确定该第一算子集合,目标依赖关系信息为该第一算子集合中的各个基础算子的依赖关系。
[0204]
在一些可能的实现方式中,该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符相同是通过吸收操作实现的,该吸收操作,包括:根据第一依赖关系信息,确定该第一基础算子集合的输出占位符,该第一依赖关系信息用于指示第一基础算子集合中的各个基础算子的依赖关系;确定该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符是否相同;若该第一基础算子集合的输出占位符与该第一高阶算子的输出占位符不相同,将该第一基础算子集合的输出操作数的指针指向该第一高阶算子的输出占位符,并将第二标识信息更新为第一标识信息,该第一标识信息为该第一基础算子集合的输出操作数的标识信息,该第二标识信息为该第一高阶算子的输出操作数的标识信息。
[0205]
在一些可能的实现方式中,该吸收操作,还包括:在更新该第二标识信息为该第一标识信息后,在该第一高阶算子的输出操作数的指针被指针同步器访问时,判断该指针同步器的标识信息是否等于该第二标识信息,当该指针同步器的标识信息不等于该第二标识信息时,将该指针同步器的指针更新为该第一基础算子集合的输出操作数的指针,将该指针同步器的标识信息更新为该第二标识信息。
[0206]
在一些可能的实现方式中,该第一基础算子集合中的各个基础算子的依赖关系是通过以下方式确定的:确定第二基础算子的输入占位符是否与第一输出占位符集合中的至少一个输出占位符相交,该第一输出占位符集合包括该第一基础算子集合中所有基础算子的输出占位符,其中该第二基础算子为该第一基础算子集合中的任一个基础算子;若该第二基础算子的输入占位符与该第一输出占位符集合中的至少一个输出占位符相交,则确定该至少一个输出占位符对应的基础算子与该第二基础算子存在依赖关系。
[0207]
在一些可能的实现方式中,第一算子的输出占位符是根据该第一算子的输入操作数和该第一算子的类型确定的,该第一算子是该第一高阶算子展开过程中得到的任一个算子,该第一算子的输出占位符与已分配的输出占位符的交集为空。
[0208]
图15中的收发单元2010、第一处理单元2020和第二处理单元2030可以由一个计算机设备实现,也可以由多个计算机设备实现。更具体地,处理单元可以由至少一个处理器或处理器相关电路实现,收发单元可以由收发器或收发器相关电路实现,存储单元可以通过至少一个存储器实现。
[0209]
图16是本技术实施例的一种数据处理的装置的示意性框图。图16所示的数据处理的装置2100可以包括:处理器2110、收发器2120以及存储器2130。其中,处理器2110、收发器2120以及存储器2130通过内部连接通路相连,该存储器2130用于存储指令,该处理器2110用于执行该存储器2130存储的指令,以收发器2130接收/发送部分参数。可选地,存储器
2130既可以和处理器2110通过接口耦合,也可以和处理器2110集成在一起。
[0210]
需要说明的是,上述收发器2120可以包括但不限于输入/输出接口(input/output interface)一类的收发装置,来实现通信设备2100与其他设备或通信网络之间的通信。
[0211]
在实现过程中,上述方法的各步骤可以通过处理器2110中的硬件的集成逻辑电路或者软件形式的指令完成。结合本技术实施例所公开的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器2130,处理器2110读取存储器2130中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
[0212]
还应理解,本技术实施例中,该存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。处理器的一部分还可以包括非易失性随机存取存储器。例如,处理器还可以存储设备类型的信息。
[0213]
本技术实施例还提供一种计算机可读存储介质,所述计算机可读介质存储有程序代码,当所述计算机程序代码在计算机上运行时,使得所述计算机执行上述图14中的方法。
[0214]
本技术实施例还提供一种芯片,包括:至少一个处理器和存储器,所述至少一个处理器与所述存储器耦合,用于读取并执行所述存储器中的指令,以执行上述图14中的方法。
[0215]
本技术将围绕包括多个设备、组件、模块等的系统来呈现各个方面、实施例或特征。应当理解和明白的是,各个系统可以包括另外的设备、组件、模块等,并且/或者可以并不包括结合附图讨论的所有设备、组件、模块等。此外,还可以使用这些方案的组合。
[0216]
另外,在本技术实施例中,“示例的”、“例如”等词用于表示作例子、例证或说明。本技术中被描述为“示例”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用示例的一词旨在以具体方式呈现概念。
[0217]
本技术实施例中,“相应的(corresponding,relevant)”和“对应的(corresponding)”有时可以混用,应当指出的是,在不强调其区别时,其所要表达的含义是一致的。
[0218]
本技术实施例描述的网络架构以及业务场景是为了更加清楚地说明本技术实施例的技术方案,并不构成对于本技术实施例提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
[0219]
在本说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
[0220]
本技术中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:包括单独存在a,同时存在a和b,以及单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中
的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
[0221]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0222]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0223]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0224]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0225]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0226]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0227]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。

技术特征:
1.一种数据处理的方法,其特征在于,包括:计算平台获取数据和计算任务描述,所述计算任务描述包括需要对所述数据执行的计算;所述计算平台根据所述计算任务描述选择第一算子集合,所述第一算子集合中包含多个基础算子;所述计算平台根据所述第一算子集合中的各个基础算子的依赖关系,执行所述第一算子集合对所述数据进行计算,得到所述数据的计算结果,其中存在依赖关系的两个基础算子中的一个基础算子的输入操作数的占位符与另一个基础算子的输出操作数的占位符相交。2.根据权利要求1所述的方法,其特征在于,所述计算平台根据所述第一算子集合中各个基础算子的依赖关系,执行所述第一算子集合对所述数据进行计算,包括:所述计算平台根据所述第一算子集合中各个基础算子的依赖关系,确定所述第一算子集合中的第一基础算子,所述第一基础算子为输入占位符与所述第一算子集合中的任一个基础算子的输出占位符的交集为空的基础算子;所述计算平台将所述数据存储在所述第一基础算子的输入占位符集合对应的存储空间;所述计算平台对所述数据执行所述第一基础算子并根据所述第一算子集合中各个基础算子的依赖关系执行所述第一算子集合中除所述第一基础算子以外的其他基础算子。3.根据权利要求1或2所述的方法,其特征在于,所述第一算子集合和所述第一算子集合中的各个基础算子的依赖关系是根据n个基础算子集合确定的,所述n个基础算子集合与n个高阶算子一一对应,对所述数据执行所述计算能够通过所述n个高阶算子实现,第一基础算子集合是通过对第一高阶算子展开得到的,所述第一高阶算子是所述n个高阶算子中的任一个高阶算子,所述第一基础算子集合是所述n个基础算子集合中对应于所述第一高阶算子的基础算子集合;所述第一基础算子集合的输出占位符与所述第一高阶算子的输出占位符相同。4.根据权利要求3所述的方法,其特征在于,所述n个基础算子集合与n个依赖关系信息一一对应,n个依赖关系信息用于指示所述对应的基础算子集合中的各个基础算子的依赖关系,所述第一算子集合和所述第一算子集合中的各个基础算子的依赖关系是通过以下方式得到的:根据所述n个依赖关系信息,确定目标依赖关系信息,所述目标依赖关系信息用于指示多个基础算子中各个基础算子的依赖关系;根据所述目标依赖关系信息和所述n个基础算子集合包括的基础算子,确定所述第一算子集合,所述目标依赖关系信息为所述第一算子集合中的各个基础算子的依赖关系。5.根据权利要求3或4所述的方法,其特征在于,所述第一基础算子集合的输出占位符与所述第一高阶算子的输出占位符相同是通过吸收操作实现的,所述吸收操作,包括:根据第一依赖关系信息,确定所述第一基础算子集合的输出占位符,所述第一依赖关系信息用于指示所述第一基础算子集合中的各个基础算子的依赖关系;确定所述第一基础算子集合的输出占位符与所述第一高阶算子的输出占位符是否相
同;若所述第一基础算子集合的输出占位符与所述第一高阶算子的输出占位符不相同,将所述第一基础算子集合的输出操作数的指针指向所述第一高阶算子的输出占位符,并将第二标识信息更新为第一标识信息,所述第一标识信息为所述第一基础算子集合的输出操作数的标识信息,所述第二标识信息为所述第一高阶算子的输出操作数的标识信息。6.根据权利要求5所述的方法,其特征在于,所述吸收操作,还包括:在所述更新第二标识信息为第一标识信息后,在所述第一高阶算子的输出操作数的指针被指针同步器访问时,判断所述指针同步器的标识信息是否等于所述第二标识信息,当所述指针同步器的所述标识信息不等于所述第二标识信息时,将所述指针同步器的指针更新为所述第一基础算子集合的输出操作数的指针,将所述指针同步器的标识信息更新为所述第二标识信息。7.根据权利要求3至6中任一项所述的方法,其特征在于,所述第一基础算子集合中的各个基础算子的依赖关系是通过以下方式确定的:确定第二基础算子的输入占位符是否与第一输出占位符集合中的至少一个输出占位符相交,所述第一输出占位符集合包括所述第一基础算子集合中所有基础算子的输出占位符,其中所述第二基础算子为所述第一基础算子集合中的任一个基础算子;若所述第二基础算子的输入占位符与所述第一输出占位符集合中的至少一个输出占位符相交,则确定所述至少一个输出占位符对应的基础算子与所述第二基础算子存在依赖关系。8.根据权利要求3至7中任一项所述的方法,其特征在于,第一算子的输出占位符是根据所述第一算子的输入操作数和所述第一算子的类型确定的,所述第一算子是所述第一高阶算子展开过程中得到的任一个算子,所述第一算子的输出占位符与已分配的输出占位符的交集为空。9.一种计算平台,其特征在于,包括:收发单元,用于获取数据和计算任务描述,所述计算任务描述包括需要对所述数据执行的计算;第一处理单元,用于根据所述计算任务描述选择第一算子集合,所述第一算子集合中包含多个基础算子;第二处理单元,用于根据所述第一算子集合中的各个基础算子的依赖关系,执行所述第一算子集合对所述数据进行计算,得到所述数据的计算结果,其中存在依赖关系的两个基础算子中的一个基础算子的输入操作数的占位符与另一个基础算子的输出操作数的占位符相交。10.根据权利要求9所述的计算平台,其特征在于,所述第二处理单元根据所述第一算子集合中各个基础算子的依赖关系,执行所述第一算子集合对所述数据进行计算,具体为:根据所述第一算子集合中各个基础算子的依赖关系,确定所述第一算子集合中的第一基础算子,所述第一基础算子为输入占位符与所述第一算子集合中的任一个基础算子的输出占位符的交集为空的基础算子;将所述数据存储在所述第一基础算子的输入占位符集合对应的存储空间;对所述数据执行所述第一基础算子并根据所述第一算子集合中各个基础算子的依赖
关系执行所述第一算子集合中除所述第一基础算子以外的其他基础算子。11.根据权利要求9或10所述的计算平台,其特征在于,所述第一算子集合和所述第一算子集合中的各个基础算子的依赖关系是根据n个基础算子集合确定的,所述n个基础算子集合与n个高阶算子一一对应,对所述数据执行所述计算能够通过所述n个高阶算子实现,第一基础算子集合是通过对第一高阶算子展开得到的,所述第一高阶算子是所述n个高阶算子中的任一个高阶算子,所述第一基础算子集合是所述n个基础算子集合中对应于所述第一高阶算子的基础算子集合;所述第一基础算子集合的输出占位符与所述第一高阶算子的输出占位符相同。12.根据权利要求11所述的计算平台,其特征在于,所述n个基础算子集合与n个依赖关系信息一一对应,n个依赖关系信息用于指示所述对应的基础算子集合中的各个基础算子的依赖关系,所述第一算子集合和所述第一算子集合中的各个基础算子的依赖关系是通过以下方式得到的:根据所述n个依赖关系信息,确定目标依赖关系信息,所述目标依赖关系信息用于指示多个基础算子中各个基础算子的依赖关系;根据所述目标依赖关系信息和所述n个基础算子集合包括的基础算子,确定所述第一算子集合,所述目标依赖关系信息为所述第一算子集合中的各个基础算子的依赖关系。13.根据权利要求11或12所述的计算平台,其特征在于,所述第一基础算子集合的输出占位符与所述第一高阶算子的输出占位符相同是通过吸收操作实现的,所述吸收操作,包括:根据第一依赖关系信息,确定所述第一基础算子集合的输出占位符,所述第一依赖关系信息用于指示所述第一基础算子集合中的各个基础算子的依赖关系;确定所述第一基础算子集合的输出占位符与所述第一高阶算子的输出占位符是否相同;若所述第一基础算子集合的输出占位符与所述第一高阶算子的输出占位符不相同,将所述第一基础算子集合的输出操作数的指针指向所述第一高阶算子的输出占位符,并将第二标识信息更新为第一标识信息,所述第一标识信息为所述第一基础算子集合的输出操作数的标识信息,所述第二标识信息为所述第一高阶算子的输出操作数的标识信息。14.根据权利要求13所述的计算平台,其特征在于,所述吸收操作,还包括:在所述更新第二标识信息为第一标识信息后,在所述第一高阶算子的输出操作数的指针被指针同步器访问时,判断所述指针同步器的标识信息是否等于所述第二标识信息,当所述指针同步器的所述标识信息不等于所述第二标识信息时,将所述指针同步器的指针更新为所述第一基础算子集合的输出操作数的指针,将所述指针同步器的标识信息更新为所述第二标识信息。15.根据权利要求11至14中任一项所述的计算平台,其特征在于,所述第一基础算子集合中的各个基础算子的依赖关系是通过以下方式确定的:确定第二基础算子的输入占位符是否与第一输出占位符集合中的至少一个输出占位符相交,所述第一输出占位符集合包括所述第一基础算子集合中所有基础算子的输出占位符,其中所述第二基础算子为所述第一基础算子集合中的任一个基础算子;
若所述第二基础算子的输入占位符与所述第一输出占位符集合中的至少一个输出占位符相交,则确定所述至少一个输出占位符对应的基础算子与所述第二基础算子存在依赖关系。16.根据权利要求11至15中任一项所述的计算平台,其特征在于,第一算子的输出占位符是根据所述第一算子的输入操作数和所述第一算子的类型确定的,所述第一算子是所述第一高阶算子展开过程中得到的任一个算子,所述第一算子的输出占位符与已分配的输出占位符的交集为空。17.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被计算机执行时,以使得实现如权利要求1至8中任一项所述的方法。

技术总结
本申请提供了一种数据处理的方法和计算平台,该方法包括:计算平台获取数据和计算任务描述,计算任务描述包括需要对数据执行的计算;计算平台根据计算任务描述选择第一算子集合,第一算子集合中包含多个基础算子;计算平台根据第一算子集合中的各个基础算子的依赖关系,执行第一算子集合对数据进行计算,得到数据的计算结果,其中存在依赖关系的两个基础算子中的一个基础算子的输入操作数的占位符与另一个基础算子的输出操作数的占位符相交。本申请提供的数据处理的方法,能够实现基于高阶算子的计算任务的构建和计算任务执行之间的解耦,还能够提高数据处理的计算速度。还能够提高数据处理的计算速度。还能够提高数据处理的计算速度。


技术研发人员:吴双
受保护的技术使用者:华为技术有限公司
技术研发日:2021.12.30
技术公布日:2023/7/13
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐