一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

量子模拟器实现方法、装置、相关设备以及量子模拟方法与流程

2022-02-19 00:08:54 来源:中国专利 TAG:


1.本发明涉及量子计算模拟技术领域,尤其涉及的是一种量子模拟器实现方法、装置、相关设备以及量子模拟方法。


背景技术:

2.量子计算理论已显示出其在解决某些超越经典计算机计算能力的重要问题方面的强大潜力,例如在密码学、金融建模和机器学习场景中都有巨大的应用前景。近年来推出了部分量子计算机,但目前量子计算机还没有得到广泛地使用。
3.现有技术中,通常通过量子电路仿真来实现量子模拟。量子计算线路模拟本质上是用软件来模拟真实量子计算机的计算过程,实现量子线路模拟的软件包一般称为量子模拟器。现有技术的问题在于,已有的量子模拟器只能在cpu或gpu上运行,目前还没有可以在昇腾ai处理器上运行的量子模拟器。用户在配备了昇腾ai处理器的训练服务器上只能使用cpu资源运行传统量子模拟器,不利于充分利用昇腾处理器的计算能力。
4.因此,现有技术还有待改进和发展。


技术实现要素:

5.本发明的主要目的在于提供一种量子模拟器实现方法、装置、相关设备以及量子模拟方法,旨在解决现有技术中的量子模拟器不能在昇腾ai处理器上运行,不利于充分利用昇腾ai处理器的计算能力的问题。
6.为了实现上述目的,本发明第一方面提供一种量子模拟器实现方法,其中,上述方法包括:
7.构建量子比特门算子,其中,上述量子比特门算子用于基于量子模拟的操作位对目标设备中的数据进行搬运并进行态矢量更新;
8.构建量子模拟器,其中,上述量子模拟器中包括上述量子比特门算子,上述量子模拟器是实现量子线路模拟的软件包;
9.将上述量子模拟器部署到上述目标设备中,上述目标设备为昇腾ai处理器。
10.可选的,上述量子比特门算子用于对量子比特进行单量子比特门操作。
11.可选的,上述量子比特门算子基于以下步骤进行量子模拟:
12.获取待计算数据的类型以及上述昇腾ai处理器的核心数和缓冲区大小;
13.基于上述核心数启动多核处理并对上述待计算数据对应的态矢量进行划分;
14.将划分后的态矢量从全局存储器中搬运到输出缓冲区后进行量子比特门操作对应的矩阵向量乘操作,获得计算后的数据;
15.将上述计算后的数据从上述输出缓冲区搬运到上述全局存储器中。
16.可选的,上述量子比特门算子包括分别与不同操作位对应的分布式单量子比特门算子、低位单量子比特门算子以及高位单量子比特门算子。
17.可选的,上述构建量子比特门算子,包括:
18.基于上述量子线路和上述目标设备获取分布式高操作位范围、低操作位范围以及非分布式高操作位范围,其中,上述分布式高操作位范围内的操作位是需要进行分布式通信的操作位,上述低操作位范围内的操作位对应的地址距离小于上述昇腾ai处理器的数据搬运最小尺度,上述非分布式高操作位范围内的操作位对应的地址距离不小于上述昇腾ai处理器的数据搬运最小尺度且不存在分布式通信;
19.分别构建与上述分布式高操作位范围对应的分布式单量子比特门算子,与上述低操作位范围对应的低位单量子比特门算子,以及与上述非分布式高操作位范围对应的高位单量子比特门算子。
20.可选的,上述分布式单量子比特门算子基于以下步骤进行数据搬运:
21.获取待计算数据,其中,上述待计算数据包括本地态矢量以及配对态矢量,上述配对态矢量是通过分布式通信获得的与上述本地态矢量配对的态矢量,上述本地态矢量和上述配对态矢量位于不同的昇腾ai处理器中;
22.基于上述本地态矢量的长度以及预设的片段长度,循环搬运上述本地态矢量和上述配对态矢量,每次循环时,将上述本地态矢量和上述配对态矢量中相同位置和相同长度的数据片段从上述全局存储器中搬运到上述输出缓冲区中进行计算,计算完成后将上述计算后的数据从上述输出缓冲区搬运到上述全局存储器中。
23.可选的,上述高位单量子比特门算子基于以下步骤进行数据搬运:
24.获取待计算数据,其中,上述待计算数据为本地态矢量,上述本地态矢量包括位于同一昇腾ai处理器中且距离不小于上述昇腾ai处理器的数据搬运最小尺度的两个配对的态矢量;
25.获取连续传输数据片段长度和相邻连续数据片段间隔;
26.基于上述连续传输数据片段长度和上述相邻连续数据片段间隔从全局存储器中的上述本地态矢量的不同位置加载数据到上述输出缓冲区中进行计算,计算完成后将上述计算后的数据从上述输出缓冲区搬运到上述全局存储器中。
27.可选的,上述低位单量子比特门算子基于以下步骤进行数据搬运:
28.获取待计算数据,其中,上述待计算数据为本地态矢量,上述本地态矢量包括位于同一昇腾ai处理器中且距离小于上述昇腾ai处理器的数据搬运最小尺度的两个配对的态矢量;
29.从上述全局存储器中的上述本地态矢量的第0号元素开始加载数据到上述输出缓存区中,获得第零数组;
30.从上述全局存储器中的上述本地态矢量的第1号元素开始加载数据到上述输出缓存区中,获得第一数组;
31.从上述全局存储器中的上述本地态矢量的第

1号元素开始加载数据到上述输出缓存区中,获得第二数组;
32.在基于上述第零数组和上述第一数据进行酉矩阵上半部分的计算获得第三数组,并基于上述第二数组和上述第零数组进行酉矩阵下半部分的计算获得第四数组之后,对上述第三数组和第四数组进行按比特选取并获得第五数组,将上述第五数组内的数据从上述输出缓存区中搬运到上述全局存储器中。
33.可选的,上述构建量子模拟器,其中,上述量子模拟器中包括上述量子比特门算
子,上述量子模拟器是实现量子线路模拟的软件包,包括:
34.基于上述量子比特门算子打包生成能在上述昇腾ai处理器进行部署和编译执行的软件包,作为上述量子模拟器。
35.本发明第二方面提供一种量子模拟器实现装置,其中,上述装置包括:
36.算子构建模块,用于构建量子比特门算子,其中,上述量子比特门算子用于基于量子门计算的操作位对目标设备中的数据进行搬运并进行态矢量更新;
37.量子模拟器构建模块,用于构建量子模拟器,其中,上述量子模拟器中包括上述量子比特门算子,上述量子模拟器是实现量子线路模拟的软件包;
38.部署模块,用于将上述量子模拟器部署到上述目标设备中,上述目标设备为昇腾ai处理器。
39.本发明第三方面提供一种量子模拟方法量子模拟器实现方法,其中,上述方法包括:
40.获取待计算数据;
41.调用上述量子比特门算子对上述待计算数据进行搬运并进行态矢量更新。
42.本发明第四方面提供一种智能终端,上述智能终端包括存储器、处理器以及存储在上述存储器上并可在上述处理器上运行的量子模拟器实现程序,上述量子模拟器实现程序被上述处理器执行时实现任意一项上述量子模拟器实现方法的步骤。
43.本发明第五方面提供一种计算机可读存储介质,上述计算机可读存储介质上存储有量子模拟器实现程序,上述量子模拟器实现程序被处理器执行时实现任意一项上述量子模拟器实现方法的步骤。
44.由上可见,本发明方案中,构建量子比特门算子,其中,上述量子比特门算子用于基于量子门的操作位对目标设备中的数据进行搬运并进行态矢量更新;构建量子模拟器,其中,上述量子模拟器中包括上述量子比特门算子,上述量子模拟器是实现量子线路模拟的软件包;将上述量子模拟器部署到上述目标设备中,上述目标设备为昇腾ai处理器。与现有技术相比,本发明方案中获取可以对昇腾ai处理器中的数据进行搬运并进行态矢量更新的量子比特门算子,并根据量子比特门算子获取能部署到昇腾ai处理器中运行的量子模拟器,从而有利于充分利用昇腾ai处理器的计算能力实现量子模拟。
附图说明
45.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
46.图1是本发明实施例提供的华为达芬奇ai core架构示意图;
47.图2是本发明实施例提供的一种量子模拟器实现方法的流程示意图;
48.图3是本发明实施例提供的一种量子比特门算子的计算流程示意图;
49.图4是本发明实施例图1中步骤s100的具体流程示意图;
50.图5是本发明实施例提供的一种算子计算流程示意图;
51.图6是本发明实施例提供的一种cusonegatemulstatesdist算子中数据配对示意
图;
52.图7是本发明实施例提供的一种cusonegatemulstateshigh算子中数据配对示意图;
53.图8是本发明实施例提供的一种cusonegatemulstateslow算子中数据配对示意图;
54.图9是本发明实施例提供的一种输出缓冲区数据分块重用方法的具体流程示意图;
55.图10是本发明实施例提供的一种量子模拟器实现装置的结构示意图;
56.图11是本发明实施例提供的一种量子模拟方法的流程示意图;
57.图12是本发明实施例提供的一种智能终端的内部结构原理框图。
具体实施方式
58.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况下,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
59.还应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
60.如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当

时”或“一旦”或“响应于确定”或“响应于检测到”。类似的,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述的条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0061]
下面结合本发明实施例的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0062]
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其它不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
[0063]
量子计算理论已显示出其在解决某些超越经典计算机计算能力的重要问题方面的强大潜力,例如在密码学、金融建模和机器学习场景中都有巨大的应用前景。近年来推出了部分量子计算机,例如google的54量子比特计算机sycamore和72量子比特计算机bristlecone,中国科学技术大学的76量子比特计算机九章等。然而,量子计算机仍然是宝贵的资源,不能广泛和方便地使用。当前的量子计算机也存在非常大的错误率,无法用于验证复杂的量子算法。此外,量子态在测量后会产生坍缩,因此并非所有中间数据都可以在真正的量子系统上收集。因此,量子电路仿真对于推进量子计算理论是必要的。量子计算线路模拟本质上是用软件来模拟真实量子计算机的计算过程,实现量子线路模拟的软件包一般称为量子模拟器。
[0064]
昇腾ai处理器是为了满足当今飞速发展的神经网络对芯片算力的需求推出的ai处理器,可以对整型数或者浮点数提供强大高效的乘加计算力。与现有的cpu和gpu不同,昇腾ai处理器采用的是达芬奇结构。达芬奇架构,是华为自研的面向ai计算特征的全新计算架构。不同于传统的支持通用计算的cpu和gpu,也不同于专用于某种特定算法的专用芯片asic,达芬奇架构本质上是为了适应某个特定领域中的常见应用和算法,通常称为“特定域架构(dsa,domain specific architecture)”。昇腾ai处理器的计算核心主要由ai核心(ai core)构成,ai core采用了达芬奇架构,图1是本发明实施例提供的华为达芬奇ai core架构示意图。为了提升ai计算的完备性和不同场景的计算效率,达芬奇架构还集成矩阵计算单元(cube unit)、向量计算单元(vector unit)和标量计算单元(scalar unit)。同时支持多种精度计算,支撑训练和推理两种场景的数据精度要求,实现全场景需求覆盖。ai core中包含计算单元、存储单元、与控制单元。ai core中的计算单元主要包括矩阵计算单元(cube),向量计算单元(vector)和标量计算单元(scalar),完成ai core中不同类型的数据计算。ai core中存在内部存储,ai core需要把外部存储中的数据加载到内部存储中,才能完成相应的计算。ai core的内部存储包括l1 buffer,l0 buffer,unified buffer,通用寄存器(gpr,general

purpose register,专用寄存器(spr,special

purpose register和scalar buffer等。为了配合ai core中的数据传输和搬运,ai core中还包含总线接口单元(biu,bus interface unit),存储转换单元(mte,memory transfer engine)等。其中biu为ai core与总线交互的接口;mte为数据搬运单元,完成不同buffer之间的数据搬运。ai core中的控制单元主要包括系统控制模块(system control),指令发射模块(instr.dispatch),矩阵运算队列(cube queue),向量运算队列(vector queue),存储转换队列(mte queue)。系统控制模块负责指挥和协调ai core的整体运行模式,配置参数和实现功耗控制等。当指令通过指令发射模块顺次发射出去后,根据指令的不同类型,将会分别被发送到矩阵运算队列、向量运算队列和存储转换队列。
[0065]
cann(compute architecture for neural networks)是华为公司针对ai场景推出的异构计算架构,是芯片算子库和高度自动化算子开发工具。cann的核心是高度自动化算子开发工具tensor engine。通过统一的dsl接口,配合高层模板封装、自动性能调优等工具集合,用户可以方便地在昇腾芯片上开发自定义算子。同时,cann已经支持所有主要ai框架。ascendcl(ascend computing language)提供device管理、context管理、stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等c语言api库供用户开发深度神经网络应用,用于实现目标识别、图像分类等功能。用户可以通过第三方框架调用ascendcl接口,以便使用昇腾ai处理器的计算能力;用户还可以使用ascendcl封装实现第三方lib库,以便提供昇腾ai处理器的运行管理、资源管理能力。
[0066]
现有技术中,通常通过量子电路仿真来实现量子计算理论。量子计算线路模拟本质上是用软件来模拟真实量子计算机的计算过程,实现量子线路模拟的软件包一般称为量子模拟器。现有技术的问题在于,已有的量子模拟器只能在cpu或gpu上运行,目前还没有可以在昇腾ai处理器上运行的量子模拟器。用户在配备了昇腾ai处理器的训练服务器上只能使用cpu资源运行传统量子模拟器,不利于充分利用昇腾处理器的计算能力,且不利于降低模拟用时。
[0067]
构建量子电路仿真系统最常见的方法是将量子状态表示为向量,并将在量子电路
上运行的量子门视为小矩阵向量乘法。例如,n个量子比特组成的系统共有2
n
种可能的状态,在量子模拟器中,需要存储每个可能的状态包含的相应基态的复数(或者称之为幅度)。如果在量子模拟器中使用两个单精度浮点表示该复数,那么模拟一个30qubit的量子系统需要消耗8gb的内存。一个n量子比特系统,对第m个量子比特进行单量子比特门操作时,需要对2
n
个态进行操作,所有态两两配对,这些小的矩阵向量乘法没有数据依赖性,所以可以并行化,如下公式(1)所示:
[0068][0069]
其中,量子比特门可以表示成一个规模为2*2的酉矩阵,酉矩阵的每个元素都是一个复数,即a
00
、a
01
、a
10
和a
11
。n个量子比特组成的系统共有2
n
种可能的状态,称为态矢量,用一个长度为2
n
的复数数组表示,数组的元素分别为α
i
和α
j
分别代表该数组中的第i和第j个元素。公式(1)中,等式左边矩阵为量子比特门酉矩阵,等式左边的矢量是施加一个量子比特门之前的态矢量元素,等式右边是施加了量子比特门之后更新的态矢量元素。i和j满足如下公式(2):
[0070][0071]
公式(2)中给出了公式(1)中i和j在计算时需要满足的条件。m代表目前在操作第m号的量子比特,两个配对的态元素下标会相差2
m
,公式(2)的第一行给出了i的限定条件,i不超过数组的上下限而且i的二进制表示中,右移m位后得到的数除以2后获得的余数为0。例如,一个4量子比特系统,如果m=2,那么i=0的时候(二进制表示为0000),j=4(二进制表示为0100);i=1的时候(二进制表示为0001),j=5(二进制表示为0101)。
[0072]
为了解决现有技术的问题,本发明提供一种量子模拟器实现方法,在本发明实施例中,针对昇腾ai处理器的达芬奇架构的特征以及编程特性,结合量子模拟程序的特点,提出了一套系统可行的基于昇腾ai处理器的量子模拟器实现和优化方案,实现了ai core计算资源的充分利用。且本方法为针对昇腾ai处理器开发、移植或优化量子模拟器程序的开发人员提供了一个通用的实现和优化方法,对量子模拟器程序在其它高性能ai计算平台高效应用有一定指导意义。
[0073]
如图2所示,本发明实施例提供一种量子模拟器实现方法,具体的,上述方法包括如下步骤:
[0074]
步骤s100,构建量子比特门算子,其中,上述量子比特门算子用于基于量子门的操作位对目标设备中的数据进行搬运并进行态矢量更新。
[0075]
本实施例中,上述量子比特门算子是可以在目标设备中编译运行的函数。上述量子比特门算子用于对量子比特进行单量子门比特门操作。
[0076]
步骤s200,构建量子模拟器,其中,上述量子模拟器中包括上述量子比特门算子,上述量子模拟器是实现量子线路模拟的软件包。
[0077]
具体的,基于上述量子比特门算子打包生成能在上述目标设备中进行部署和编译执行的软件包,作为上述量子模拟器。上述量子模拟器中包括上述量子比特算子以及用于支持上述量子比特门算子在目标设备中正常使用的其它函数、指令等数据,具体的数据可
以根据实际需求进行设置和调整,在此不作具体限定。
[0078]
步骤s300,将上述量子模拟器部署到上述目标设备中,上述目标设备为昇腾ai处理器。
[0079]
具体的,将上述量子模拟器在目标设备中进行编译和运行,以使得目标设备能够调用上述量子比特门算子对数据进行搬运和态矢量更新,从而实现量子线路的模拟。本实施例中,上述目标设备为昇腾ai处理器。实际使用过程中,上述目标设备还可以为其它处理器或设备,在此不作具体限定。
[0080]
由上可见,本发明实施例提供的量子模拟器实现方法中,构建量子比特门算子,其中,上述量子比特门算子用于基于量子门的操作位对目标设备中的数据进行搬运并进行态矢量更新;构建量子模拟器,其中,上述量子模拟器中包括上述量子比特门算子,上述量子模拟器是实现量子线路模拟的软件包;将上述量子模拟器部署到上述目标设备中,上述目标设备为昇腾ai处理器。与现有技术相比,本发明方案中获取可以对昇腾ai处理器中的数据进行搬运并进行态矢量更新的量子比特门算子,并根据量子比特门算子获取能部署到昇腾ai处理器中运行的量子模拟器,从而有利于充分利用昇腾ai处理器的计算能力实现量子模拟。
[0081]
具体的,本实施例中,如图3所示,上述量子比特门算子基于以下步骤进行量子模拟:
[0082]
步骤a100,获取待计算数据的类型以及上述昇腾ai处理器的核心数和缓冲区大小。
[0083]
步骤a200,基于上述核心数启动多核处理并对上述待计算数据对应的态矢量进行划分。
[0084]
步骤a300,将划分后的态矢量从全局存储器中搬运到输出缓冲区后进行量子比特门操作对应的矩阵向量乘操作,获得计算后的数据。
[0085]
步骤a400,将上述计算后的数据从上述输出缓冲区搬运到上述全局存储器中。
[0086]
其中,上述待计算数据是需要进行量子模拟的数据,待计算数据的类型可以为版精度浮点数、单精度浮点数等。在昇腾ai处理器上,由于ai core内部的存储输出缓冲区(unitfied buffer)与ai core外部的存储全局存储器(global memory)是分隔的,数据在ai core中运算需要将数据从global memory先搬运到unitfied buffer中,然后在ai core中运算,最后将计算结果搬运回global memory。
[0087]
具体的,本实施例中,上述量子比特门算子包括分别与不同操作位对应的分布式单量子比特门算子、低位单量子比特门算子以及高位单量子比特门算子。本实施例中,如图4所示,上述步骤s100具体包括:
[0088]
步骤s101,基于上述量子线路和上述目标设备获取分布式高操作位范围、低操作位范围以及非分布式高操作位范围。
[0089]
其中,上述分布式高操作位范围内的操作位是需要进行分布式通信的操作位,上述低操作位范围内的操作位对应的地址距离小于上述昇腾ai处理器的数据搬运最小尺度,上述非分布式高操作位范围内的操作位对应的地址距离不小于上述昇腾ai处理器的数据搬运最小尺度且不存在分布式通信。
[0090]
步骤s102,分别构建与上述分布式高操作位范围对应的分布式单量子比特门算
子,与上述低操作位范围对应的低位单量子比特门算子,以及与上述非分布式高操作位范围对应的高位单量子比特门算子。
[0091]
根据量子门操作位的高低,上述量子比特门算子需要上述三种算子来进行具体的计算。
[0092]
具体的,如果分布式计算时,操作了一个需要通信的高位量子比特,通信后得到了两个态矢量片段(即本地的态矢量和配对的态矢量),调用上述分布式单量子比特门算子完成一次单门操作,上述分布式单量子比特门算子可以命名为cusonegatemulstatesdist。cusonegatemulstatesdist算子共有四项输入,一项输出,第一个输入张量是本地的态矢量(input_x),长度为2*2
n
,复数的实部和虚部分开存储(实部和虚部都是存储在昇腾ai处理器的全局内存上,分开存储的意思有是两个数组,第一个数组包含了所有本地元素的实部,第二个数组包含了所有本地元素的虚部),第二个输入张量是通信获得的与本地态矢量配对的态矢量片段(input_y),第三个输入张量是量子门矩阵数据(input_m),第四个张量是公式(1)中本地态矢量位于与门矩阵相乘时处在矢量第0号元素还是第1号元素的判断符,一项输出张量是计算结果(output)。其中input_x,input_y和output的数据类型和数据尺寸应保持一致。上述通信是指不同的昇腾ai处理器之间的通信,比如第一个昇腾ai处理器通过通信获得第三个昇腾ai处理器的数据,通信方式为hccl,即华为集合通信库。上述量子门矩阵数据(input_m)是以矩阵表示的量子门,具体取决于要对数据进行何种量子门计算,例如pauli

x门对应的矩阵数据是
[0093]
上述矢量指的是公式(1)等式左边的矢量。在一种应用场景中,第一个昇腾ai处理器的数据和第三个昇腾ai处理器数据依次配对。第一个昇腾ai处理器的数据下标比第三个昇腾ai处理器的数据下标要小,即公式2的j=i 2
m
,在计算的时候,第一个昇腾ai处理器的数据放在α
i
处,第三个昇腾ai处理器的数据放在α
j
处。上述判断符可以为布尔类型或整型。计算结果(output)是对上述数据进行如公式(1)所示的计算后获得的,把态矢量配对后跟量子门矩阵相乘,更新态矢量。
[0094]
其中,上述高位对应的具体位数(即分布式高操作位范围)可根据实际需求进行判断或设置,例如,假设一个有20量子比特的线路,态矢量的长度为2
20
。如果用8个昇腾ai处理器参与计算,那么每个昇腾ai处理器需要存储2
17
个复数。第一个昇腾ai处理器需要存储0,1,2,
……
,2
17

1号元素;第二个昇腾ai处理器需要存储2
17
,2
17
1,2
17
2,
……
,2
18

1号元素,后面依次类推。
[0095]
如果要操作18号量子比特(从0开始计数),即公式(2)中的m=18,那么公式(2)中i和j的关系为j=i 2
18
。i=0号元素需要和j=2
18
号元素配对,0号元素在第一个昇腾ai处理器里面,2
18
号元素在第三个昇腾ai处理器里面,所以第一个昇腾ai处理器和第三个昇腾ai处理器需要在计算之前交换数据(即分布式通信)。这时称m号量子比特是一个需要通信的操作位,调用分布式单量子比特门算子cusonegatemulstatesdist。即调用分布式单量子比特门算子的条件是需要进行操作的量子比特是一个需要通信的操作位。通信后得到两个态矢量片段是调用算子前需要准备的输入数据。在一种应用场景中,通信之后第一个昇腾ai处理器除了有自身存储的0,1,2,
……
,2
17

1号元素,还存储了从第三个昇腾ai处理器获得的2
18
,2
18
1,2
18
2,
……
,2
18
2
17

1号元素。因为复数的实部和虚部是分开存储的,从程序里
面看就是四个长度为2
17
的数组。第一个数组是0,1,2,
……
,2
17

1号元素的复数的实部,第二个数组是0,1,2,
……
,2
17

1号元素的复数的虚部,第三个数组是2
18
,2
18
1,2
18
2,
……
,2
18
2
17

1号元素的复数的实部,第四个数组是2
18
,2
18
1,2
18
2,
……
,2
18
2
17

1号元素的复数的虚部。计算的时候每个数组的相同下标的元素是配对的。
[0096]
昇腾ai处理器的数据搬运最小尺度是32字节,对应16个半精度浮点数。如果操作位等于0,1,2或者3,任意两个需要配对的元素间的距离都小于32字节,调用低位单量子比特门算子。其他的操作位调用高位单量子比特门算子。
[0097]
对于上述本地态的矢量(input_x),“本地”是分布式计算的一个概念,意思是如果一段数据存储在x(如第一个昇腾ai处理器)上时,那么这段数据对于x来说就是本地的。在上面的例子中,0,1,2,
……
,2
17

1号元素就是第一个昇腾ai处理器的本地数据,但这段数据对于第三个昇腾ai处理器就不是本地的。
[0098]
如果需要配对的态的地址距离大于等于32字节且不存在分布式通信,调用上述高位单量子比特门算子完成一次单门操作。上述高位单量子比特门算子可以命名为cusonegatemulstateshigh。cusonegatemulstateshigh算子共有三项输入,一项输出,第一个输入张量是态矢量(input_x),第二个输入张量是量子门矩阵数据(input_m),第三个张量是配对态的偏移量,一项输出张量是计算结果(output)。对于第m个操作位,偏移量等于2
m
,见公式(2)。其中input_x和output的数据类型和数据尺寸应保持一致。
[0099]
其中,态矢量是数组,态是态矢量里面的元素,是数。例如操作位是2的时候,0和4配,1和5配,2和6配,3和7配,8和12配等,这里的数字是元素下标。“地址”是计算机存储单元上的概念,地址可以用16进制数来表示,表示了这个数据在存储器上的位置。
[0100]
第m个操作位是量子线路里第m号量子比特,2
n
个态的二进制下标表示依次为00
……
00,00
……
01,00
……
10,00
……
11,
……
,11
……
11,下标xx

xx0xx

xx和xx

xx1xx

xx的态配对,即对m号操作位数字不同但其他操作位数字相同的态进行配对。偏移量2
m
等于xx

xx1xx

xx和xx

xx0xx

xx的差。
[0101]
如果需要配对的态的地址距离小于等于32字节,则可以调用上述低位单量子比特门算子(可命名为cusonegatemulstateslow)完成一次单门操作。cusonegatemulstateslow算子共有三项输入,一项输出,第一个输入张量是态矢量(input_x),第二个输入张量是量子门矩阵数据(input_m),第三个张量是配对态的偏移量,和组装分发数据时需要用到的sel符,一项输出张量是计算结果(output)。对于第m个操作位,偏移量等于2
m
,见公式(2)。其中input_x和output的数据类型和数据尺寸应保持一致。上述各算子中相同表示形式的参数对应的含义相同,在此不再赘述。
[0102]
上述三个算子具有相似的操作步骤(如上述步骤a100到a400),只有数据的搬运和组装方法不一样。图5是本发明实施例提供的一种算子计算流程示意图,其具体流程如下所示:
[0103]
第一步,获取输入数据的类型。一个半精度浮点数占据2个字节,一个单精度浮点数占据4个字节。本发明使用的数据搬运data_move指令,向量乘法vec_mul指令和向量加法vec_add指令中需要根据数据类型设置不同的参数。
[0104]
第二步,获取核心数和缓冲区大小。在for_range(tik的一个函数接口)的原型定义里,用户通过设置参数block_num来实现分核并行,用户可以通过get_soc_spec接口获取
ai core个数,以ascend 910处理器为例,芯片内含32个ai core。缓冲区unified buffer是向量和标量计算的输入和输出对应的目标存储空间,用户通过get_unified_buffer_size函数获得它的大小。
[0105]
第三步,根据获得的核心数,启动多核并对input_x进行划分。不同型号的昇腾ai处理器的ai core个数不同,对于昇腾910处理器,一个npu有32个ai core。具体的,对存储在缓冲区的数据进行划分,平均分配给各个核,每个核只处理分配给自己的数据。
[0106]
第四步,在昇腾ai处理器上,由于ai core内部的存储unitfied buffer与ai core外部的存储global memory是分隔的,数据在ai core中运算需要将数据从global memory先搬运到unitfied buffer中,然后在ai core中运算,最后将计算结果搬运回global memory。对于昇腾910处理器,unitfied buffer可用大小不超过256kb,因此global memory里的态矢量数组需要分段拷贝进unitfied buffer。根据获取的缓冲区大小,计算出每次拷贝的数据量,用data_move指令将数据从global memory搬运到unitfied buffer,unitfied buffer要求偏移地址32byte对齐。一个float16和float32在内存中所占空间大小分别为2byte和4byte,data_move的连续传输数据片段长度最短为16个float16或者8个float32。在一种应用场景中,一共有2
n
个浮点数存放在全局内存global memory里面,n=30的时候数据量有4gb。缓冲区unified buffer只有248kb,存不下,所以每次搬运一部分数据进去计算完搬出来再去搬下一个片段的数据。因此,每次拷贝的数据量小于缓冲区大小。
[0107]
第五步,达芬奇架构的向量计算单元vector负责执行向量运算,vector所有计算的源数据以及目标数据都要求存储在输出缓冲区(unitfied buffer)中,并要求32byte对齐。用vec_muls、vec_add和vec_sub指令如公式(1)所示,对第四步中搬运到unitfied buffer中的数据进行门操作的矩阵向量乘操作。
[0108]
第六步,用data_move指令将第五步的计算结果从unitfied buffer搬运到global memory。如果完成所有数据的计算,结束该算子的运行;否则回到第四步,对下一个数据片段进行操作。
[0109]
上述分布式单量子比特门算子、低位单量子比特门算子以及高位单量子比特门算子的主要区别在于数据的搬运和组装方法不一样。如公式(1)所示,不同量子比特门操作位的高低决定了两个配对态在内存上间隔的距离。
[0110]
本实施例中,上述分布式单量子比特门算子基于以下步骤进行数据搬运:获取待计算数据,其中,上述待计算数据包括本地态矢量以及配对态矢量,上述配对态矢量是通过分布式通信获得的与上述本地态矢量配对的态矢量,上述本地态矢量和上述配对态矢量位于不同的昇腾ai处理器中;基于上述本地态矢量的长度以及预设的片段长度,循环搬运上述本地态矢量和上述配对态矢量,每次循环时,将上述本地态矢量和上述配对态矢量中相同位置和相同长度的数据片段从上述全局存储器中搬运到上述输出缓冲区中进行计算,计算完成后将上述计算后的数据从上述输出缓冲区搬运到上述全局存储器中。
[0111]
其中,上述预设的片段长度可以根据实际需求进行设置和调整。具体的,分布式计算时,如果操作位在最高的几个位置,那么配对的态就会处在两个不同的昇腾ai处理器上,计算前需要让这两个昇腾ai处理器进行数据交换。例如对于一个30qubit的量子系统,30个量子比特编号从0~29,态矢量可表示为总长度2
30
的复数数组,使用四个(仅作为示例)昇腾ai处理器进行量子线路模拟,每个处理器在global memory上存储2
28
个复数,如果量子门的
操作位是29,那么0号和2号处理器、1号和3号处理器需要交换数据,将本地态矢量记作input_x,将通信获得的态矢量记作input_y,然后再调用cusonegatemulstatesdist算子。图6是本发明实施例提供的一种cusonegatemulstatesdist算子中数据配对示意图。input_x的n号元素和input_y的n号元素是配对的,每次循环时,将input_x和input_y相同位置、长度的数据片段从global memory拷贝进unitfied buffer,分别得到ub0和ub1两个unitfied buffer数组,对应公式(1)的α
i
和α
j
,计算完成后再把output从unitfied buffer拷贝到global memory的原地址。其中,上述原地址是input_x的原地址。在一种应用场景中,也可以将output拷贝到另一个预设的存档结果的地址,但会占用更多的内存空间,因此本实施例中拷贝回原地址,减少空间占用。
[0112]
上述高位单量子比特门算子基于以下步骤进行数据搬运:获取待计算数据,其中,上述待计算数据为本地态矢量,上述本地态矢量包括位于同一昇腾ai处理器中且距离不小于上述昇腾ai处理器的数据搬运最小尺度的两个配对的态矢量;获取连续传输数据片段长度和相邻连续数据片段间隔;基于上述连续传输数据片段长度和上述相邻连续数据片段间隔从全局存储器中的上述本地态矢量的不同位置加载数据到上述输出缓冲区中进行计算,计算完成后将上述计算后的数据从上述输出缓冲区搬运到上述全局存储器中。
[0113]
图7是本发明实施例提供的一种cusonegatemulstateshigh算子中数据配对示意图。如果模拟器使用单精度浮点,门的操作位大于等于3,那么两个配对的态在内存上的距离大于等于32字节,即data_move操作的最小尺寸(对于半精度浮点,门的操作位大于等于4)。设置好连续传输数据片段长度和相邻连续数据片段间隔,调用data_move从本地态矢量数组的不同位置加载数据到unitfied buffer,计算完成后再把output从unitfied buffer拷贝到global memory的原地址。连续传输数据片段长度即连续的数据的长度,相邻连续数据片段间隔即两个连续传输数据之间间隔的字节数。
[0114]
上述低位单量子比特门算子基于以下步骤进行数据搬运:获取待计算数据,其中,上述待计算数据为本地态矢量,上述本地态矢量包括位于同一昇腾ai处理器中且距离小于上述昇腾ai处理器的数据搬运最小尺度的两个配对的态矢量;从上述全局存储器中的上述本地态矢量的第0号元素开始加载数据到上述输出缓存区中,获得第零数组;从上述全局存储器中的上述本地态矢量的第1号元素开始加载数据到上述输出缓存区中,获得第一数组;从上述全局存储器中的上述本地态矢量的第

1号元素开始加载数据到上述输出缓存区中,获得第二数组;在基于上述第零数组和上述第一数据进行酉矩阵上半部分的计算获得第三数组,并基于上述第二数组和上述第零数组进行酉矩阵下半部分的计算获得第四数组之后,对上述第三数组和第四数组进行按比特选取并获得第五数组,将上述第五数组内的数据从上述输出缓存区中搬运到上述全局存储器中。
[0115]
如果操作位在最低的几个位置(例如半精度浮点的0,1,2,3位;单精度浮点的0,1,2位),那么配对的态在内存上的间隔的距离会小于32字节,即data_move操作的最小尺寸。以操作0号qubit为例,配对态的偏移量为1,如果使用单精度,配对态在内存上的距离为4个字节。本地态矢量的0号元素和1号元素配对,2号元素和3号元素配对,4号元素和5号元素配对,后面的元素依次配对。计算使用向量计算单元,0号、2号、4号
……
元素需要搬运到ub0数组,1号、3号、5号
……
元素需要搬运到ub1数组。由于data_move不支持有选择地搬运数据,一个数一个数地搬运数据又很不高效,如图8所示,本发明针对cusonegatemulstateslow算
子提出如下方法进行数据搬运:
[0116]
1)先从态矢量的0号元素开始加载数据到unitfied buffer,ub0(即第零数组)获得的数据包括:0号、1号、2号、3号、4号、5号
……
元素;
[0117]
2)从态矢量的1号元素开始加载数据到unitfied buffer,ub1(即第一数组)获得的数据包括:1号、2号、3号、4号、5号、6号
……
元素;
[0118]
3)从态矢量的

1号元素开始加载数据到unitfied buffer,ub2(即第二数组)获得的数据包括:xx、0号、1号、2号、3号、4号
……
元素(xx代表无用数据),因为global memory不支持负地址访存,所以创建global memory态矢量的时候需要在该数组前加上几个空白数据;
[0119]
4)将这三个ub数组代入公式(1)参与计算,ub0和ub1参与矩阵上半部分的计算,获得ub3(即第三数组),ub3内的数据为计算之后的0号、xx、2号、xx、4号、xx元素;ub2和ub0参与矩阵下半部分的计算,获得ub4(即第四数组),ub4内的数据为计算之后的xx、1号、xx、3号、xx、5号元素;
[0120]
5)调用vec_sel函数,使用sel符对ub3和ub4进行按比特选取(例如,当sel的比特位是1时从ub3中选取,比特位是0时从ub4选取),获得ub5(即第五数组),ub5包含的数据为计算之后的0号、1号、2号、3号、4号、5号
……
元素;
[0121]
6)把ub5内的数据拷贝回global memory原地址。
[0122]
需要说明的是,公式(1)中的门矩阵的数据不一定全是非零元素,对于含有零元素的矩阵,可以对这三个算子的计算流程进行简化,省去与零元素相关的数据搬运和浮点计算操作。对于一个单门量子随机线路,根据所有量子门操作位的高低,依次选择调用三个算子,即可实现量子线路模拟。
[0123]
在昇腾ai平台构建高性能量子电路模拟器具有挑战性。用于模拟各种量子门的大量小矩阵乘法导致数据局部性差,进一步导致计算资源利用率低。为了提高数据局部性,本发明提出输出缓冲区数据分块重用方法(ub blocking方法),重复利用高效的unified buffer存储单元,减少带宽较低的global memory数据搬运次数。
[0124]
unified buffer(简称ub)是用来保存向量和标量计算单元的输入输出的地方,对于昇腾910处理器,unitfied buffer可用大小不超过256kb,可以存放的单精度浮点不超过2
16
个。实际计算时,ub不仅要存储输入输出的态矢量片段,还要存储临时中间变量,因此每次搬运的态矢量长度为2
12
个单精度复数。
[0125]
图9是本发明实施例提供的一种输出缓冲区数据分块重用方法的具体流程示意图。具体的,考虑一个由n量子比特组成的量子线路和一个包含多个门的门组,在这个门组内,所有门仅操作不超过k(0<k<=n)个量子比特,可以从态矢量中抽出长度为2
k
的复数集合,这个复数集合在施加门组内的门操作时,计算结果只和该复数集合内的数据有关,整个态矢量可以被分割成2
(n

k)
个这样相互独立的复数集合。计算时将这个长度为2
k
的复数集合搬运进unitfied buffer,然后一次性施加完门组内的所有门,计算完后再搬运回global memory。跟常规的计算流程相比,ub blocking方法减少了global memory与unitfied buffer之间的数据搬运次数。例如,基于常规的方法,每个门都要搬运2
n
个复数,一个包含m个门的门组,总共搬运的数据量是m*2
n
个复数。采用本方法,按照复数集合搬运,总共搬运的数据量是2
n
个复数,减少为原来的1/m,可以降低计算时间。
[0126]
进一步的,由于unitfied buffer的尺寸限制,对于单精度浮点,一个门组内最多有12个量子操作位;由于data_move数据搬运指令的最小操作尺寸是32字节,因此门组必须包含0~3号量子操作位,另外8个量子操作位可以是任意的。一个量子线路可以转化成数个门组,某些情况下门的顺序是可以调换的,门的顺序调换有助于减少门组数量。
[0127]
需要说明的是,上述量子比特门算子的数据搬运和计算方法的思路仍然适用于实现受控单量子比特门和双量子比特门计算。
[0128]
本发明提出一种针对昇腾ai处理器的量子模拟器单门算子的通用实现和优化方法,通过底层tik开发方式并结合多核、unitfied buffer等优化方法,更好地发挥昇腾ai处理器的架构和性能优势。下表是昇腾量子模拟器与同类开源gpu模拟器的性能对比,表中除了qulacs模拟器均使用单精度浮点数进行计算模拟。第二列代表昇腾量子模拟器的算子运行时间和同类gpu模拟器的门操作核函数时间。模拟器运行了一个29量子比特、u1单门的量子随机线路,昇腾量子模拟器使用昇腾910机器,quest和qcgpu使用英伟达tesla v100gpu,各模拟器均使用单卡进行测试对比,测试性能数据结果如下:
[0129][0130]
可见,昇腾量子模拟器相对同类gpu模拟器性能均提升了数倍。本发明针对昇腾ai处理器的达芬奇架构的特征以及编程特性,结合量子模拟程序的特点,给出了可以在昇腾ai处理器上运行的量子模拟器的数据搬运与操作细节,并进一步提出ub blocking方法,利用了昇腾ai处理器的多核优化,实现了aicore计算资源的充分利用;为针对昇腾ai处理器开发、移植或优化量子模拟器程序的开发人员提供了一个通用的实现和优化方法,该方法不仅适用于本发明描述的单量子门的实现,同样适用于受控单量子比特门和双量子比特门的实现。本发明的针对昇腾ai处理器的量子模拟器经过充分的测试与使用,使用昇腾910处理器,通过mindspore添加自定义算子和ascendcl应用开发两种方式,对本发明提出的算子进行了封装。该量子模拟器已经完成了单量子比特门的实现和测试,并与其他同类型gpu量子模拟器进行了效率对比,根据上表可知发明可行且效果显著。
[0131]
需要说明的是,昇腾ai芯片有三种基础计算资源:矩阵计算单元(cube unit)、向量计算单元(vector unit)和标量计算单元(scalar unit)。本发明利用昇腾ai芯片的向量计算单元进行了量子线路模拟。矩阵计算单元可以进行两个尺寸为16*16的半精度浮点的矩阵乘法。如果一个门组仅操作不超过4个量子比特,那么这个门组可以融合成一个4量子比特门,用16*16的矩阵来表示,该矩阵和对应的16个态组成的向量相乘可以得到更新后的向量,这个矩阵向量乘操作有多组且没有数据依赖性,16组向量可以组成16*16的矩阵,之后使用矩阵计算单元同样可以完成量子线路的模拟。操作思路如下:
[0132]
1)对量子线路进行分析,重排量子门的顺序并分成若干个门组,每个门组包含多个量子门,一个门组仅操作不超过4个量子比特。每个门组都可以用一个16*16的矩阵表示。
[0133]
2)假设一个门组包含的操作位是i、j、k、l,那么态矢量中与0号元素配对的15个态分别为:2
i
、2
j
、2
i
2
j
、2
k
、2
k
2
i
、2
k
2
j
、2
k
2
i
2
j
……
以上16个态组成一个向量,需要和16*16的门矩阵相乘。
[0134]
3)矩阵计算单元计算单元只支持两个16*16的矩阵相乘,无法进行2)中表示的矩阵向量乘法。一次性打包16组配对的态,可以组成一个16*16的态矩阵,这个矩阵可以和门矩阵相乘。如果这个门组操作的量子比特位都大于等于4,可以采用类似cusonegatemulstateshigh算子的数据搬运方法,0、1、2
……
15号元素被放在态矩阵第一行,2
i
、2
i
1、2
i
2
……2i
15号元素放在态矩阵第二行
……
如果这个门组操作的量子比特有小于4的,可以采用类似cusonegatemulstateslow算子的数据搬运方法,用带偏移量的数据搬运指令,最后用选择指令进行结果提取。
[0135]
如图10所示,对应于上述量子模拟器实现方法,本发明实施例还提供一种量子模拟器实现装置,上述量子模拟器实现装置包括:
[0136]
算子构建模块410,用于构建量子比特门算子,其中,上述量子比特门算子用于基于量子门的操作位对目标设备中的数据进行搬运并进行态矢量更新。
[0137]
本实施例中,上述量子比特门算子是可以在目标设备中编译运行的函数。上述量子比特门算子用于对量子比特进行单量子门比特门操作。
[0138]
量子模拟器构建模块420,用于构建量子模拟器,其中,上述量子模拟器中包括上述量子比特门算子,上述量子模拟器是实现量子线路模拟的软件包。
[0139]
具体的,基于上述量子比特门算子打包生成能在上述目标设备中进行部署和编译执行的软件包,作为上述量子模拟器。上述量子模拟器中包括上述量子比特算子以及用于支持上述量子比特门算子在目标设备中正常使用的其它函数、指令等数据,具体的数据可以根据实际需求进行设置和调整,在此不作具体限定。
[0140]
部署模块430,用于将上述量子模拟器部署到上述目标设备中,上述目标设备为昇腾ai处理器。
[0141]
具体的,将上述量子模拟器在目标设备中进行编译和运行,以使得目标设备能够调用上述量子比特门算子对数据进行搬运和态矢量更新,从而实现量子线路的模拟。本实施例中,上述目标设备为昇腾ai处理器。实际使用过程中,上述目标设备还可以为其它处理器或设备,在此不作具体限定。
[0142]
需要说明的是,上述量子模拟器实现装置及其具体模块对应的具体功能可以参照上述量子模拟器实现方法进行设置和调整,在此不再赘述。
[0143]
如图11所示,对应于上述量子模拟器实现方法,本发明实施例还提供一种量子模拟方法,上述方法包括:
[0144]
步骤b100,获取待计算数据。
[0145]
步骤b200,调用上述量子比特门算子对上述待计算数据进行搬运并进行态矢量更新。
[0146]
需要说明的是,具体的量子模拟过程可以参照上述量子模拟器实现方法中的具体计算流程,在此不再赘述。
[0147]
基于上述实施例,本发明还提供了一种智能终端,其原理框图可以如图12所示。上述智能终端包括通过系统总线连接的处理器、存储器、网络接口以及显示屏。其中,该智能终端的处理器用于提供计算和控制能力。该智能终端的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和量子模拟器实现程序。该内存储器为非易失性存储介质中的操作系统和量子模拟器实现程序的运行提供环境。该智能终端的网络接口用于与外部的终端通过网络连接通信。该量子模拟器实现程序被处理器执行时实现上述任意一种量子模拟器实现方法的步骤。该智能终端的显示屏可以是液晶显示屏或者电子墨水显示屏。
[0148]
本领域技术人员可以理解,图12中示出的原理框图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的智能终端的限定,具体的智能终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0149]
在一个实施例中,提供了一种智能终端,上述智能终端包括存储器、处理器以及存储在上述存储器上并可在上述处理器上运行的量子模拟器实现程序,上述量子模拟器实现程序被上述处理器执行时进行以下操作指令:
[0150]
构建量子比特门算子,其中,上述量子比特门算子用于基于量子门的操作位对目标设备中的数据进行搬运并进行态矢量更新;
[0151]
构建量子模拟器,其中,上述量子模拟器中包括上述量子比特门算子,上述量子模拟器是实现量子线路模拟的软件包;
[0152]
将上述量子模拟器部署到上述目标设备中,上述目标设备为昇腾ai处理器。
[0153]
本发明实施例还提供一种计算机可读存储介质,上述计算机可读存储介质上存储有量子模拟器实现程序,上述量子模拟器实现程序被处理器执行时实现本发明实施例提供的任一种量子模拟器实现方法的步骤。
[0154]
可选的,上述智能终端和计算机可读存储介质中也可以存储量子模拟器实现程序,以实现上述量子模拟器实现方法的步骤。
[0155]
应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0156]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0157]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
[0158]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟是以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人
员可以对每个特定的应用来使用不同的方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0159]
在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,上述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以由另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
[0160]
上述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,上述计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读介质可以包括:能够携带上述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,上述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减。
[0161]
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不是相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献