CN112513817B - 一种主cpu与npu的数据交互方法及计算设备 - Google Patents
一种主cpu与npu的数据交互方法及计算设备 Download PDFInfo
- Publication number
- CN112513817B CN112513817B CN202080004250.6A CN202080004250A CN112513817B CN 112513817 B CN112513817 B CN 112513817B CN 202080004250 A CN202080004250 A CN 202080004250A CN 112513817 B CN112513817 B CN 112513817B
- Authority
- CN
- China
- Prior art keywords
- npu
- virtual
- main cpu
- memory
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Neurology (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Advance Control (AREA)
Abstract
本申请实施例公开了一种主CPU与NPU的数据交互方法及计算设备,可应用于人工智能领域中,该方法应用于计算设备,计算设备包括主CPU和NPU,主CPU上运行目标APP,主CPU包括AI Service和NPU驱动,NPU包括NPU控制器、运算逻辑单元和N个寄存器,该方法包括:主CPU将AI模型加载到NPU后,NPU为AI模型分配一个寄存器,主CPU在接收到NPU发送的寄存器的物理地址后,会将物理地址映射为目标APP上虚拟内存的虚拟地址,主CPU通过目标APP实际上可以直接读/写NPU上对应的寄存器,相当于目标APP与NPU之间有了直连通路。当主CPU通过目标APP向NPU下发AI模型的执行命令到获取AI模型的执行结果的整个流程中,计算通路旁路了AI Service和NPU驱动,只有寄存器读/写的开销,提高了AI模型推理的实时性。
Description
技术领域
本申请涉及人工智能(artificial intelligence,AI)技术领域,尤其涉及一种主CPU与NPU的数据交互方法及计算设备。
背景技术
随着AI的广泛应用,深度学习已成为当前AI研究和应用的主流方式,面对海量数据的并行运算,AI对于算力的要求不断提升,因此对硬件的运算速度及功耗提出了更高的要求。除了通用的中央处理器(central processing unit,CPU)外,作为硬件加速的图形处理器(graphics processing unit,GPU)、神经网络处理器(neural networks processunit,NPU)、现场可编程逻辑门阵列(field programmable gate array,FPGA)等一些芯片处理器也在深度学习的不同应用中发挥着各自的优势。其中,NPU尤其擅长处理视频、图像类的海量多媒体数据,在实际应用中,NPU需要CPU的协同处理才能完成特定的任务,也就是NPU作为协处理器挂载到主CPU(Host CPU),由主CPU分配任务(即发送任务相关的命令),NPU再执行相应任务,并向主CPU返回执行的处理结果。
目前,主CPU与NPU之间的数据交互流程是:先将AI模型加载至NPU,如图1所示,先对主CPU上的应用程序(application,APP)进行初始化,并调用主CPU上AI服务(AIService)的服务接口,将AI Service能够识别的AI模型文件,发给AI Service,AI Service对该AI模型进行解析,并将解析好的AI模型文件转换为NPU可处理的格式,之后,AIService再调用主CPU上NPU驱动(NPU driver)的用户态接口,NPU驱动进一步切换到内核态,配置NPU的相关寄存器和接口,将AI模型加载到NPU,由NPU保存该AI模型,并依次经过NPU驱动和AI Service向APP返回加载成功的结果。AI模型加载成功后,且在输入数据准备好之后(比如摄像头完成一帧图像输出),通过该APP下发命令(即AI模型的执行命令)调用AI Service的服务接口以及NPU驱动,进行AI模型推理,NPU执行完相关推理任务后,同样需要依次通过NPU驱动以及AI Service将得到的执行结果返回到APP,如图2所示。
由上述主CPU与NPU之间的数据交互流程可知,主CPU通过APP下发AI模型推理的命令,需要经过AI Service和NPU驱动才能到达NPU(即命令通路),同样地,AI模型的执行结果也需要经过NPU驱动和AI Service才能返回APP(即响应通路),使得命令通路和响应通路所花费的时间都很长,主要是由如下几点导致的:1)APP和AI Service之间是进程间的消息通讯;2)NPU驱动涉及驱动在用户态和内核态之间的切换;3)NPU驱动所在的主CPU和NPU是两个系统,是系统间的通讯。在一些实际应用场景中(如,自动驾驶对实时性就具有很高要求),这样的一次AI模型推理的命令通路和响应通路上的时间开销非常大
发明内容
本发明实施例提供一种主CPU与NPU的数据交互方法及计算设备,用于在进行AI推理时,减少主CPU上的APP与NPU之间计算通路上的时间开销,提高AI模型执行的效率。
本申请第一方面提供一种计算设备,该计算设备包括主CPU和NPU,主CPU上运行目标应用程序(APP),该主CPU包括AI服务(AI Service)和NPU驱动,该NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥1;其中,主CPU,用于通过AI Service和NPU驱动将目标APP对应的AI模型加载至NPU,以使得NPU保存该AI模型;NPU,用于通过NPU控制器为AI模型分配一个寄存器(可称为第一寄存器),这个寄存器属于NPU上N个寄存器中的一个,由于每个寄存器都有一个对应的物理地址,NPU通过NPU控制器给AI模型分配一个寄存器,同时也就可以得到该寄存器的物理地址;NPU还用于将该寄存器的物理地址向主CPU发送;主CPU,还用于接收NPU发送的该寄存器的物理地址,并将该寄存器的物理地址映射到目标APP上一个虚拟内存(可称为第一虚拟内存)的虚拟地址,这样,一个被加载至NPU的AI模型,就对应分配有一个寄存器,并且该寄存器的物理地址被映射为目标APP上虚拟内存的虚拟地址;有了寄存器对应的目标APP上的虚拟地址,主CPU就可以用于根据该虚拟地址,通过目标APP写该虚拟内存;NPU,还用于当主CPU根据第一虚拟地址通过目标APP写第一虚拟内存,通过NPU控制器控制运算逻辑单元执行该AI模型;NPU,还用于通过NPU控制器将AI模型的执行结果写入该第一寄存器;主CPU,还用于根据第一虚拟地址,通过目标APP轮询第一虚拟内存,从该第一寄存器中读取该AI模型的执行结果。
在本申请上述实施方式中,阐述了一种包括主CPU和NPU的计算设备,该NPU上设置有至少一个寄存器,主CPU将AI模型加载到NPU后,NPU会为该AI模型分配一个寄存器,并且,主CPU在接收到NPU发送的该寄存器的物理地址后,会进一步将该寄存器的物理地址映射到目标APP上虚拟内存的虚拟地址,主CPU通过目标APP实际上可以直接读/写AI模型在NPU上对应的寄存器,相当于目标APP与NPU之间有了直连通路。这样,当主CPU通过目标APP向NPU下发AI模型的执行命令(即直接通过写该虚拟内存触发NPU执行AI模型),到获取AI模型的执行结果(即通过读该虚拟内存获取AI模型的执行结果)的整个流程中,计算通路旁路了AIService和NPU驱动,只有寄存器读/写的开销,相对于已有方案的时间开销,完全可以忽略不计。本申请实施例AI模型推理的过程中只有寄存器读/写的开销,大大提高了AI模型的推理效率,也就是提高了AI模型推理的实时性。
在第一方面的一种可能实现方式中,由于每个寄存器都有一个对应的物理地址(physical address,PA),因此主CPU具体可以用于:通过NPU驱动接收该NPU控制器发送的该物理地址,并通过该NPU驱动将该物理地址映射到该AI Service的虚拟内存空间,得到该AI Service上第二虚拟内存的第二虚拟地址;通过该AI Service将该第二虚拟地址映射到该APP的虚拟内存空间,得到该APP上第一虚拟内存的第一虚拟地址。
在本申请上述实施方式中,具体阐述了NPU的另一作用,即为AI模型分配的一个寄存器的物理地址如何映射成目标APP上虚拟内存的虚拟地址,具备可实现性。
在第一方面的一种可能实现方式中,主CPU具体还用于:通过该APP接收该AIService发送的第二虚拟地址的内存句柄;通过该APP将该第二虚拟地址的内存句柄映射为该APP上第一虚拟内存的第一虚拟地址。
在本申请上述实施方式中,给出了AI Service上虚拟内存的虚拟地址映射为目标APP上虚拟内存的虚拟地址的具体实现方式,具备可选择性和灵活性。
在第一方面的一种可能实现方式中,主CPU具体用于:通过该NPU驱动接收该NPU控制器发送的该第一寄存器的物理地址;通过该NPU驱动将该第一寄存器的物理地址直接映射到该APP的虚拟内存空间,得到该APP上第一虚拟内存的第一虚拟地址。
在本申请上述实施方式中,具体阐述了另一种NPU为AI模型分配的一个寄存器的物理地址如何映射成目标APP上虚拟内存的虚拟地址,具备灵活性。
在第一方面的一种可能实现方式中,NPU具体用于:将该第一寄存器的物理地址向该主CPU的NPU驱动发送。
在本申请上述实施方式中,NPU将寄存器的物理地址向主CPU的NPU驱动发送的目的是需要先通过NPU驱动将该物理地址先映射到AI Service的虚拟内存空间,符合实际应用需求。
本申请第二方面还提供一种计算设备,该计算设备包括主CPU和NPU,该主CPU上运行目标应用程序(APP),该主CPU包括AI服务(AI Service)和NPU驱动,该NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥2;该主CPU,用于通过该AI Service和该NPU驱动将该目标APP对应的AI模型加载至该NPU;该NPU,用于通过该NPU控制器为该AI模型分配第一寄存器和第二寄存器,并将该第一寄存器的第一物理地址和该第二寄存器的第二物理地址向该主CPU发送,该第一寄存器和该第二寄存器属于该N个寄存器;该主CPU,还用于接收该NPU发送的该第一物理地址和该第二物理地址,并将该第一物理地址和该第二物理地址分别映射为该APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址;该主CPU,还用于根据该第一虚拟地址通过该目标APP写该第一虚拟内存;该NPU,还用于当该主CPU根据该第一虚拟地址通过该目标APP写该第一虚拟内存,通过该NPU控制器控制该运算逻辑单元执行该AI模型;该NPU,还用于通过该NPU控制器将该AI模型的执行结果写入该第二寄存器;该主CPU,还用于根据该第二虚拟地址,通过该目标APP轮询该第二虚拟内存,从该第二寄存器中读取该AI模型的执行结果。
在本申请上述实施方式中,阐述了一种包括主CPU和NPU的计算设备,该NPU上设置有至少两个寄存器,主CPU将AI模型加载到NPU后,NPU会为该AI模型分配2个寄存器,分别为第一寄存器和第二寄存器,并且,将这2个寄存器的物理地址映射到目标APP上2个虚拟内存的虚拟地址,目标APP实际上可以直接读其中一个寄存器、写另一个寄存器,相当于目标APP与NPU之间有了2个直连通路。这样,当主CPU通过目标APP向NPU下发AI模型的执行命令(即直接通过写第一虚拟内存触发NPU执行AI模型),到获取AI模型的执行结果(即通过读第二虚拟内存获取AI模型的执行结果)的整个流程中,计算通路旁路了AI Service和NPU驱动,只有寄存器读/写的开销,相对于已有方案的开销,完全可以忽略不计,提高了AI模型推理的实时性,并且不同的计算通路采用的是不同的寄存器,过程易于操作,信息不易混淆。
在第二方面的一种可能实现方式中,主CPU具体用于:通过该NPU驱动接收该NPU控制器发送的该第一物理地址和该第二物理地址,并通过该NPU驱动将该第一物理地址和该第二物理地址分别映射到该AI Service的虚拟内存空间,得到该AI Service上第三虚拟内存的第三虚拟地址和第四虚拟内存的第四虚拟地址;通过该AI Service将该第三虚拟地址和该第四虚拟地址分别映射到该APP的虚拟内存空间,得到该APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
在本申请上述实施方式中,具体阐述了NPU的另一作用,即为AI模型分配的2个寄存器的物理地址如何分别映射成目标APP上2个虚拟内存的虚拟地址,具备可实现性。
在第二方面的一种可能实现方式中,主CPU具体还用于:通过该APP接收该AIService发送的第三虚拟地址的内存句柄和第四虚拟地址的内存句柄;通过该APP将该第三虚拟地址的内存句柄和该第四虚拟地址的内存句柄分别映射为该APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
在本申请上述实施方式中,给出了AI Service上2个虚拟内存的虚拟地址映射为目标APP上2个虚拟内存的虚拟地址的具体实现方式,具备可选择性和灵活性。
在第二方面的一种可能实现方式中,主CPU具体用于:通过该NPU驱动接收该NPU控制器发送的该第一物理地址和该第二物理地址;通过该NPU驱动将该第一物理地址和该第二物理地址分别直接映射到该APP的虚拟内存空间,得到该APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
在本申请上述实施方式中,具体阐述了另一种NPU为AI模型分配的2个寄存器的物理地址如何映射成目标APP上2个虚拟内存的虚拟地址,具备灵活性。
在第二方面的一种可能实现方式中,NPU具体用于:将2个寄存器的物理地址向主CPU发送具体是将这2个寄存器的物理地址向主CPU的NPU驱动发送。
在本申请上述实施方式中,NPU将2个寄存器的物理地址向主CPU的NPU驱动发送的目的是需要先通过NPU驱动将这2个寄存器的物理地址先映射到AI Service的虚拟内存空间,符合实际应用需求。
本申请第三方面还提供一种计算设备,该计算设备包括主CPU和NPU,主CPU上运行目标应用程序(APP),主CPU包括AI服务(AI Service)和NPU驱动,该NPU包括NPU控制器和运算逻辑单元;该主CPU,用于通过该AI Service和该NPU驱动将该目标APP对应的AI模型加载至该NPU;该主CPU,还用于通过该NPU驱动为该AI模型分配第一内存,并将第一内存的地址映射为该目标APP上第一虚拟内存的第一虚拟地址,这样,一个被加载至NPU的AI模型,就对应分配有NPU驱动上的一个内存,该内存的地址进一步被映射为目标APP上虚拟内存的虚拟地址;有了NPU驱动上内存对应的目标APP上的虚拟地址,主CPU就可以用于根据该虚拟地址,通过目标APP写该虚拟内存,实质就是写对应的NPU驱动上的内存,NPU驱动上内存中的数据会被修改(即主CPU上通过目标APP写了该虚拟内存);该主CPU,还用于当该主CPU根据该第一虚拟地址通过该目标APP写该第一虚拟内存,通过该NPU驱动向该NPU控制器发送执行命令;该NPU,用于通过该NPU控制器根据该执行命令控制该运算逻辑单元执行该AI模型,并通过该NPU控制器将该AI模型的执行结果向该NPU驱动发送;该主CPU,还用于通过该NPU驱动将该AI模型的执行结果写入该第一内存;该主CPU,还用于根据该第一虚拟地址,通过该目标APP轮询该第一虚拟内存,从该第一内存中读取该AI模型的执行结果。
在本申请上述实施方式中,具体阐述了一种包括主CPU和NPU的计算设备,该主CPU上的NPU驱动上被开辟了至少一个内存,AI模型加载到NPU后,NPU驱动会为该AI模型分配一块位于NPU驱动上的内存,并且将该内存的地址映射为目标APP上虚拟内存的虚拟地址,主CPU可以通过目标APP直接读/写该内存,相当于目标APP与NPU驱动之间有了直连通路。相比于原有方案,在AI模型的推理过程中,节省了目标APP到AI Service进程间的时间开销以及NPU驱动用户态切换到内核态的时间开销。而相比于本申请第一方面或第一方面任意一种可能实现方式的方法,NPU驱动和NPU控制器之间的时间开销没有节省,但好处在于:不需对NPU的结构进行修改,即可以在不修改芯片结构的基础上,提高AI模型的执行效率。
本申请第四方面还提供一种计算设备,该计算设备包括主CPU和NPU,该主CPU上运行目标应用程序(APP),该主CPU包括AI服务(AI Service)和NPU驱动,该NPU包括NPU控制器和运算逻辑单元;该主CPU,用于通过该AI Service和该NPU驱动将该目标APP对应的AI模型加载至该NPU;该主CPU,还用于通过该NPU驱动为该AI模型分配第一内存和第二内存,并将第一内存的地址和第二内存的地址分别映射为该目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址,该第一内存和该第二内存为在该NPU驱动上开辟的内存,这样,一个被加载至NPU的AI模型,就对应分配有NPU驱动上的2个内存,这2个内存的地址进一步被映射为目标APP上2个虚拟内存的虚拟地址;有了NPU驱动上内存对应的目标APP上的虚拟地址,主CPU就可以用于根据其中一个虚拟地址(如,第一虚拟内存的虚拟地址),通过目标APP写该第一虚拟内存,实质就是写对应的NPU驱动上的第一内存,NPU驱动上第一内存中的数据会被修改(即主CPU上通过目标APP写了该第一虚拟内存);该主CPU,还用于当该主CPU根据该第一虚拟地址通过该目标APP写该第一虚拟内存,通过该NPU驱动向该NPU控制器发送执行命令;该NPU,用于通过该NPU控制器根据该执行命令控制该运算逻辑单元执行该AI模型,并通过该NPU控制器将该AI模型的执行结果向该NPU驱动发送;该主CPU,还用于通过该NPU驱动将该AI模型的执行结果写入该第二内存;该主CPU,还用于根据该第二虚拟地址,通过该目标APP轮询该第二虚拟内存,从该第二内存中读取该AI模型的执行结果。
在本申请上述实施方式中,具体阐述了一种包括主CPU和NPU的计算设备,该主CPU上的NPU驱动上被开辟了至少两个内存,AI模型加载到NPU后,NPU驱动会为该AI模型分配2块位于NPU驱动上的内存,分别为第一内存和第二内存,并且,将这2个内存的地址分别映射到目标APP上2个虚拟内存的虚拟地址,主CPU可以通过目标APP直接读其中一个内存、写另一个内存,相当于目标APP与NPU驱动之间有了2个直连通路。相比于原有方案,在AI模型的推理过程中,节省了目标APP到AI Service进程间的时间开销以及NPU驱动用户态切换到内核态的时间开销。而相比于本申请第三方面或第三方面任意一种可能实现方式的方法,NPU驱动和NPU控制器之间的时间开销没有节省,但好处在于:不需对NPU的结构进行修改,即可以在不修改芯片结构的基础上,提高AI模型的执行效率,并且不同的计算通路采用的是不同的寄存器,过程易于操作,信息不易混淆。
本申请第五方面还提供一种计算设备,该计算设备包括主CPU和NPU,其中,主CPU包括AI服务(AI Service)和NPU驱动;NPU包括NPU控制器、运算逻辑单元和至少一个寄存器,该至少一个寄存器中的第一寄存器用于存放加载到该NPU上的第一AI模型的执行结果;AI Service和该NPU驱动通信连接;NPU驱动和该NPU控制器通信连接。
在本申请上述实施方式中,提供了一种计算设备,该计算设备所包括的NPU上额外增加了至少一个寄存器,当有AI模型被加载到NPU,就可以为该第一AI模型分配1个或2个寄存器,这样在后续AI推理中,目标APP可直接通过读/写虚拟内存访问该寄存器,旁路了AIService和NPU驱动,节省计算通路的时间开销。
在第五方面的一种可能实现方式中,该至少一个寄存器设置在该NPU控制器上。
在本申请上述实施方式中,阐述了额外增加的这些寄存器可以设置在NPU控制器上,具备可实现性。
本申请第六方面提供一种主CPU与NPU的数据交互方法,该方法应用于计算设备中,该计算设备包括主CPU和NPU,其中,主CPU上运行目标APP,主CPU包括AI Service和NPU驱动,NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥1,该方法具体可以包括:首先,主CPU通过AI Service和NPU驱动将目标APP对应的AI模型加载至NPU,以使得NPU保存该AI模型,之后,主CPU接收NPU发送的一个寄存器(可称为第一寄存器)的物理地址,并将该寄存器的物理地址映射到目标APP上一个虚拟内存(可称为第一虚拟内存)的虚拟地址,该寄存器是由NPU获取到加载的AI模型后,通过NPU控制器给该AI模型分配的一个寄存器,这个寄存器属于NPU上N个寄存器中的一个,由于每个寄存器都有一个对应的物理地址,NPU通过NPU控制器给AI模型分配一个寄存器,同时也就得到了该寄存器的物理地址。这样,一个被加载至NPU的AI模型,就对应分配有一个寄存器,并且该寄存器的物理地址被映射为目标APP上虚拟内存的虚拟地址。有了寄存器对应的目标APP上的虚拟地址,主CPU就可以根据该虚拟地址,通过目标APP写该虚拟内存,通过目标APP写该虚拟内存,实质就是写对应的寄存器,NPU上寄存器内的数据会被修改(即主CPU上通过目标APP写了该虚拟内存),在输入数据已准备好的情况下,寄存器的修改会直接触发NPU通过NPU控制器控制运算逻辑单元执行对应的AI模型,AI模型的执行结果由NPU控制器写入该寄存器。由于主CPU是根据寻址来访问内存的,因此,主CPU根据虚拟地址,通过目标APP轮询读取该虚拟内存的数据,实质就是轮询读取对应的寄存器的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入寄存器,那么当前轮次的轮询就可读取到AI模型的执行结果。
在本申请上述实施方式中,主CPU将AI模型加载到NPU后,NPU会为该AI模型分配一个寄存器,并且,主CPU在接收到NPU发送的该寄存器的物理地址后,会进一步将该寄存器的物理地址映射到目标APP上虚拟内存的虚拟地址,主CPU通过目标APP实际上可以直接读/写AI模型在NPU上对应的寄存器,相当于目标APP与NPU之间有了直连通路。这样,当主CPU通过目标APP向NPU下发AI模型的执行命令(即直接通过写该虚拟内存触发NPU执行AI模型),到获取AI模型的执行结果(即通过读该虚拟内存获取AI模型的执行结果)的整个流程中,计算通路旁路了AI Service和NPU驱动,只有寄存器读/写的开销,相对于已有方案的时间开销,完全可以忽略不计。在本申请实施例AI模型推理的过程中只有寄存器读/写的开销,大大提高了AI模型的推理效率,也就是提高了AI模型推理的实时性。
在第六方面的一种可能实现方式中,由于每个寄存器都有一个对应的物理地址(physical address,PA),那么主CPU将该寄存器的物理地址映射到目标APP上一个虚拟内存的虚拟地址可以通过但不限于如下方式:首先,主CPU通过NPU驱动接收NPU控制器发送的该寄存器的物理地址(假设该物理地址为PA0),并进一步通过NPU驱动将该物理地址PA0映射到AI Service的虚拟内存空间,得到AI Service上一个虚拟内存(可称为第二虚拟内存)的虚拟地址(假设该虚拟地址为VA0’)。由于目标APP和AI Service属于不同的进程,APP与AI Service之间的数据交互属于进程间的数据交互,不同进程的虚拟内存不能互相访问,但是又需要目标APP和AI Service共享同一个寄存器,因此,主CPU还将通过AI Service将虚拟地址VA0’映射到目标APP的虚拟内存空间,得到虚拟地址VA0’在目标APP上虚拟内存的虚拟地址(假设该虚拟地址为VA0)。
在本申请上述实施方式中,具体阐述了NPU为AI模型分配的一个寄存器的物理地址如何映射成目标APP上虚拟内存的虚拟地址,具备可实现性。
在第六方面的一种可能实现方式中,主CPU通过AI Service将虚拟地址VA0’映射到目标APP的虚拟内存空间,得到目标APP上虚拟内存的虚拟地址VA0具体可以是通过但不限于如下方式:1)主CPU通过目标APP接收AI Service发送的虚拟地址VA0’的内存句柄(假设该内存句柄为FD0),并通过目标APP将内存句柄FD0映射为该目标APP上虚拟内存的虚拟地址VA0,实际上VA0就是NPU上对应的寄存器在目标APP上的虚拟地址。2)主CPU通过目标APP接收AI Service发送的虚拟地址VA0’,再通过目标APP直接将虚拟地址VA0’映射为目标APP上虚拟内存的虚拟地址VA0。
在本申请上述实施方式中,给出了几种AI Service上虚拟内存的虚拟地址映射为目标APP上虚拟内存的虚拟地址的具体实现方式,具备可选择性和灵活性。
在第六方面的一种可能实现方式中,假设目标APP集成了AI Service的相关功能,使得该目标APP能直接与NPU驱动交互,也就是说,不需要AI Service提供的服务接口就能与NPU驱动交互的话,那么这种情况下,主CPU通过NPU驱动接收到NPU发送的为目标APP分配的寄存器的物理地址PA0后,可以直接将物理地址PA0映射到目标APP的虚拟内存空间,得到目标APP上虚拟内存的虚拟地址VA0,此时不再需要得到AI Service上虚拟内存的虚拟地址VA0’。
在本申请上述实施方式中,具体阐述了另一种NPU为AI模型分配的一个寄存器的物理地址如何映射成目标APP上虚拟内存的虚拟地址,具备灵活性。
在第六方面的一种可能实现方式中,NPU将寄存器的物理地址向主CPU发送具体是将该寄存器的物理地址向主CPU的NPU驱动发送。
在本申请上述实施方式中,NPU将寄存器的物理地址向主CPU的NPU驱动发送的目的是需要先通过NPU驱动将该物理地址先映射到AI Service的虚拟内存空间,符合实际应用需求。
本申请第七方面提供一种主CPU与NPU的数据交互方法,该方法应用于计算设备中,该计算设备包括主CPU和NPU,其中,主CPU上运行目标APP,主CPU包括AI Service和NPU驱动,NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥2,该方法具体可以包括:首先,主CPU通过AI Service和NPU驱动将目标APP对应的AI模型加载至NPU,以使得NPU保存该AI模型,之后,主CPU接收NPU发送的2个寄存器(可称为第一寄存器和第二寄存器)的物理地址,并将第一寄存器的物理地址和第二寄存器的物理地址分别映射为目标APP上第一虚拟内存的虚拟地址和第二虚拟内存的虚拟地址,这2个寄存器是由NPU获取到加载的AI模型后,通过NPU控制器给该AI模型分配的2个寄存器,这2个寄存器属于NPU上N个寄存器,由于每个寄存器都有一个对应的物理地址,NPU通过NPU控制器给AI模型分配2个寄存器,同时也就得到了这2个寄存器的物理地址,分别为第一物理地址和第二物理地址。这样,一个被加载至NPU的AI模型,就对应分配有2个寄存器,并且这2个寄存器的2个物理地址均被映射为目标APP上2个虚拟内存的2个虚拟地址。有了寄存器对应的目标APP上的2个虚拟地址,主CPU就可以根据其中一个虚拟地址(如,第一虚拟内存的虚拟地址),通过目标APP写该第一虚拟内存,通过目标APP写该第一虚拟内存,实质就是写对应的第一寄存器,NPU上第一寄存器内的数据会被修改(即主CPU上通过目标APP写了该第一虚拟内存),在输入数据已准备好的情况下,第一寄存器的修改会直接触发NPU通过NPU控制器控制运算逻辑单元执行对应的AI模型,AI模型的执行结果由NPU控制器写入第二寄存器。由于主CPU是根据寻址来访问内存的,因此,主CPU根据第二虚拟地址,通过目标APP轮询读取第二虚拟内存的数据,实质就是轮询读取对应的第二寄存器的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入第二寄存器,那么当前轮次的轮询就可读取到AI模型的执行结果。
在本申请上述实施方式中,主CPU将AI模型加载到NPU后,NPU会为该AI模型分配2个寄存器,分别为第一寄存器和第二寄存器,并且,将这2个寄存器的物理地址映射到目标APP上2个虚拟内存的虚拟地址,目标APP实际上可以直接读其中一个寄存器、写另一个寄存器,相当于目标APP与NPU之间有了2个直连通路。这样,当主CPU通过目标APP向NPU下发AI模型的执行命令(即直接通过写第一虚拟内存触发NPU执行AI模型),到获取AI模型的执行结果(即通过读第二虚拟内存获取AI模型的执行结果)的整个流程中,计算通路旁路了AIService和NPU驱动,只有寄存器读/写的开销,相对于已有方案的开销,完全可以忽略不计,提高了AI模型推理的实时性,并且不同的计算通路采用的是不同的寄存器,过程易于操作,信息不易混淆。
在第七方面的一种可能实现方式中,由于每个寄存器都有一个对应的物理地址,那么主CPU将2个寄存器的物理地址映射到目标APP上2个虚拟内存的虚拟地址可以通过但不限于如下方式:首先,主CPU通过NPU驱动接收NPU控制器发送的第一寄存器的物理地址和第二寄存器的物理地址(假设这2个物理地址分别为PA1和PA2),并进一步通过NPU驱动将该物理地址PA1和物理地址PA2映射到AI Service的虚拟内存空间,得到AI Service上2个虚拟内存的虚拟地址(假设这2个虚拟地址分别为VA1’和VA2’)。由于目标APP和AI Service属于不同的进程,APP与AI Service之间的数据交互属于进程间的数据交互,不同进程的虚拟内存不能互相访问,但是又需要目标APP和AI Service共享这2个寄存器,因此,主CPU还将通过AI Service将虚拟地址VA1’和虚拟地址VA2’分别映射到目标APP的虚拟内存空间,得到虚拟地址VA1’和虚拟地址VA2’在目标APP上2个虚拟内存的虚拟地址(假设这2个虚拟地址分别为VA1和VA2)。
在本申请上述实施方式中,具体阐述了NPU为AI模型分配的2个寄存器的物理地址如何分别映射成目标APP上2个虚拟内存的虚拟地址,具备可实现性。
在第七方面的一种可能实现方式中,主CPU通过AI Service将虚拟地址VA1’和虚拟地址VA2’分别映射到目标APP的虚拟内存空间,得到目标APP上2个虚拟内存的虚拟地址VA1和虚拟地址VA2具体可以是通过但不限于如下方式:1)主CPU通过目标APP接收AIService发送的虚拟地址VA1’的内存句柄和虚拟地址VA2’的内存句柄(假设这2个内存句柄分别为FD1和FD2),并通过目标APP将内存句柄FD1和内存句柄FD2分别映射为该目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2,实际上VA1和VA2就是NPU上对应的第一寄存器和第二寄存器分别在目标APP上的虚拟地址。2)主CPU通过目标APP接收AI Service发送的虚拟地址VA1’和虚拟地址VA2’,再通过目标APP直接将虚拟地址VA1’和虚拟地址VA2’分别映射为目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2。
在本申请上述实施方式中,给出了几种AI Service上2个虚拟内存的虚拟地址映射为目标APP上2个虚拟内存的虚拟地址的具体实现方式,具备可选择性和灵活性。
在第七方面的一种可能实现方式中,假设目标APP集成了AI Service的相关功能,使得该目标APP能直接与NPU驱动交互,也就是说,不需要AI Service提供的服务接口就能与NPU驱动交互的话,那么这种情况下,主CPU通过NPU驱动接收到NPU发送的为目标APP分配的2个寄存器的物理地址PA1和PA2后,可以直接将物理地址PA1和PA2分别映射到目标APP的虚拟内存空间,得到目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2,此时不再需要得到AI Service上虚拟内存的虚拟地址VA1’和VA2’。
在本申请上述实施方式中,具体阐述了另一种NPU为AI模型分配的2个寄存器的物理地址如何映射成目标APP上2个虚拟内存的虚拟地址,具备灵活性。
在第七方面的一种可能实现方式中,NPU将2个寄存器的物理地址向主CPU发送具体是将这2个寄存器的物理地址向主CPU的NPU驱动发送。
在本申请上述实施方式中,NPU将2个寄存器的物理地址向主CPU的NPU驱动发送的目的是需要先通过NPU驱动将这2个寄存器的物理地址先映射到AI Service的虚拟内存空间,符合实际应用需求。
本申请第八方面提供一种主CPU与NPU的数据交互方法,该方法应用于计算设备中,该计算设备包括主CPU和NPU,其中,主CPU上运行目标APP,主CPU包括AI Service和NPU驱动,NPU包括NPU控制器和运算逻辑单元,该方法具体可以包括:首先,主CPU通过AIService和NPU驱动将目标APP对应的AI模型加载至NPU,以使得NPU保存该AI模型,之后,主CPU通过NPU驱动为AI模型分配一个内存(该内存为在NPU驱动上开辟的内存),并将该内存的地址映射为目标APP上一个虚拟内存的虚拟地址。这样,一个被加载至NPU的AI模型,就对应分配有NPU驱动上的一个内存,该内存的地址进一步被映射为目标APP上虚拟内存的虚拟地址。有了NPU驱动上内存对应的目标APP上的虚拟地址,主CPU就可以根据该虚拟地址,通过目标APP写该虚拟内存,实质就是写对应的NPU驱动上的内存,NPU驱动上内存中的数据会被修改(即主CPU上通过目标APP写了该虚拟内存),在输入数据已准备好的情况下,会直接触发NPU驱动向NPU发送执行命令,该执行命令用于指示NPU通过NPU控制器控制运算逻辑单元执行AI模型,以使得NPU在输入数据已准备好的情况下,通过NPU控制器控制运算逻辑单元执行对应的AI模型,得到该AI模型的执行结果,并将执行结果发送给主CPU,主CPU通过NPU驱动接收到NPU发送的执行结果,再通过NPU驱动将执行结果存入内存。最后,主CPU可以根据虚拟地址,通过目标APP轮询读取该虚拟内存的数据,实质就是轮询读取NPU驱动上对应内存的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入该内存,那么当前轮次的轮询就可读取到AI模型的执行结果。
在本申请上述实施方式中,AI模型加载到NPU后,NPU驱动会为该AI模型分配一块位于NPU驱动上的内存,并且将该内存的地址映射为目标APP上虚拟内存的虚拟地址,主CPU可以通过目标APP直接读/写该内存,相当于目标APP与NPU驱动之间有了直连通路。相比于原有方案,在AI模型的推理过程中,节省了目标APP到AI Service进程间的时间开销以及NPU驱动用户态切换到内核态的时间开销。而相比于本申请第一方面或第一方面任意一种可能实现方式的方法,NPU驱动和NPU控制器之间的时间开销没有节省,但好处在于:不需对NPU的结构进行修改,即可以在不修改芯片结构的基础上,提高AI模型的执行效率。
本申请第九方面提供一种主CPU与NPU的数据交互方法,该方法应用于计算设备中,该计算设备包括主CPU和NPU,其中,主CPU上运行目标APP,主CPU包括AI Service和NPU驱动,NPU包括NPU控制器和运算逻辑单元,该方法具体可以包括:首先,主CPU通过AIService和NPU驱动将目标APP对应的AI模型加载至NPU,以使得NPU保存该AI模型,之后,主CPU通过NPU驱动为AI模型分配2个内存(这2个内存为在NPU驱动上开辟的内存),并将这2个内存的地址分别映射为目标APP上第一虚拟内存的虚拟地址和第二虚拟内存的虚拟地址。这样,一个被加载至NPU的AI模型,就对应分配有NPU驱动上的2个内存,这2个内存的地址进一步被映射为目标APP上2个虚拟内存的虚拟地址。有了NPU驱动上内存对应的目标APP上的虚拟地址,主CPU就可以根据其中一个虚拟地址(如,第一虚拟内存的虚拟地址),通过目标APP写该第一虚拟内存,实质就是写对应的NPU驱动上的第一内存,NPU驱动上第一内存中的数据会被修改(即主CPU上通过目标APP写了该第一虚拟内存),在输入数据已准备好的情况下,会直接触发NPU驱动向NPU发送执行命令,该执行命令用于指示NPU通过NPU控制器控制运算逻辑单元执行AI模型,以使得NPU在输入数据已准备好的情况下,通过NPU控制器控制运算逻辑单元执行对应的AI模型,得到该AI模型的执行结果,并将执行结果发送给主CPU,主CPU通过NPU驱动接收到NPU发送的执行结果,再通过NPU驱动将执行结果写入第二内存。最后,主CPU可以根据另一个虚拟地址(即第二虚拟内存的虚拟地址),通过目标APP轮询读取该第二虚拟内存的数据,实质就是轮询读取NPU驱动上对应的第二内存的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入该第二内存,那么当前轮次的轮询就可读取到AI模型的执行结果。
在本申请上述实施方式中,AI模型加载到NPU后,NPU驱动会为该AI模型分配2块位于NPU驱动上的内存,分别为第一内存和第二内存,并且,将这2个内存的地址分别映射到目标APP上2个虚拟内存的虚拟地址,主CPU可以通过目标APP直接读其中一个内存、写另一个内存,相当于目标APP与NPU驱动之间有了2个直连通路。相比于原有方案,在AI模型的推理过程中,节省了目标APP到AI Service进程间的时间开销以及NPU驱动用户态切换到内核态的时间开销。而相比于本申请第三方面或第三方面任意一种可能实现方式的方法,NPU驱动和NPU控制器之间的时间开销没有节省,但好处在于:不需对NPU的结构进行修改,即可以在不修改芯片结构的基础上,提高AI模型的执行效率,并且不同的计算通路采用的是不同的寄存器,过程易于操作,信息不易混淆。
本申请实施例第十方面还提供一种计算设备,该计算设备可以包括:存储器、收发器、处理器以及总线系统,该存储器、该收发器和该处理器通过该总线系统连接;其中,存储器用于存储程序和指令;收发器用于在处理器的控制下接收或发送信息;处理器用于调用该存储器中存储的指令执行本申请实施例第六方面至第九方面以及第六方面至第九方面中任一可实现方式中的方法。
本申请实施例第十一方面提供了一种芯片,该芯片包括处理器和接口电路,该接口电路和该处理器耦合,该处理器用于运行计算机程序或指令,以实现如本申请实施例第六方面至第九方面以及第六方面至第九方面中任一可实现方式中的方法,该接口电路用于与该芯片之外的其它模块进行通信。
本申请实施例第十二方面提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机可以执行本申请实施例第六方面至第九方面以及第六方面至第九方面中任一可实现方式中的方法。
本申请实施例第十三方面提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机可以执行本申请实施例第六方面至第九方面以及第六方面至第九方面中任一可实现方式中的方法。
附图说明
图1为主CPU与NPU之间数据交互中主CPU向NPU加载AI模型的一个流程示意图;
图2为主CPU与NPU之间数据交互中执行AI模型的一个流程示意图;
图3为本申请实施例提供的计算设备的一个示意图;
图4为本申请实施例提供的AI模型在NPU上保存形式的一个示意图;
图5为本申请实施例提供的主CPU与NPU的数据交互方法的一个流程图;
图6为本申请实施例提供的寄存器的物理地址映射为目标APP上虚拟内存的虚拟地址的一个流程图;
图7为本申请实施例提供的AI模型推理的执行命令过程和执行结果响应过程的一个流程图;
图8为本申请实施例提供的寄存器的物理地址PA0通过AI Service映射到APP1上虚拟内存的虚拟地址VA0的一个示意图;
图9为本申请实施例提供的主CPU与NPU的数据交互方法的另一流程图;
图10为本申请实施例提供的AI模型对应的2个寄存器的物理地址映射为目标APP上2个虚拟内存的虚拟地址的一个流程图;
图11为本申请实施例提供的AI模型推理的执行命令过程和执行结果响应过程的另一流程图;
图12为本申请实施例提供的2个寄存器的物理地址PA1和PA2分别通过AI Service映射到APP1上2个虚拟内存的虚拟地址VA1和VA2的一个示意图;
图13为本申请实施例提供的计算设备的另一示意图;
图14为本申请实施例提供的主CPU与NPU的数据交互方法的另一流程图;
图15为本申请实施例提供的NPU驱动上内存的地址映射为目标APP上虚拟内存的虚拟地址的一个流程图;
图16为本申请实施例提供的AI模型推理的执行命令过程和执行结果响应过程的另一流程图;
图17为本申请实施例提供的NPU驱动上内存A0通过AI Service映射到APP1上虚拟内存的虚拟地址VA0的一个示意图;
图18为本申请实施例提供的主CPU与NPU的数据交互方法的另一流程图;
图19为本申请实施例提供的AI模型对应的NPU驱动上2个内存的地址映射为目标APP上2个虚拟内存的虚拟地址的一个流程图;
图20为本申请实施例提供的AI模型推理的执行命令过程和执行结果响应过程的另一流程图;
图21为本申请实施例提供的NPU驱动上2个内存的地址A1和A2分别通过AIService映射到APP1上2个虚拟内存的虚拟地址VA1和VA2的一个示意图;
图22为本申请实施例提供的一个应用场景示意图;
图23为本申请实施例提供的另一应用场景示意图;
图24为本申请实施例提供的另一应用场景示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。在本申请中出现的对步骤进行的命名或者编号,并不意味着必须按照命名或者编号所指示的时间/逻辑先后顺序执行方法流程中的步骤,已经命名或者编号的流程步骤可以根据要实现的技术目的变更执行次序,只要能达到相同或者相类似的技术效果即可。本申请中所出现的模块的划分,是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个模块可以结合成或集成在另一个系统中,或一些特征可以忽略,或不执行,另外,所显示的或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些端口,模块之间的间接耦合或通信连接可以是电性或其他类似的形式,本申请中均不作限定。并且,作为分离部件说明的模块或子模块可以是也可以不是物理上的分离,可以是也可以不是物理模块,或者可以分布到多个电路模块中,可以根据实际的需要选择其中的部分或全部模块来实现本申请方案的目的。
首先,本申请实施例提供一种新的计算设备,如图3所示,该计算设备包括主CPU和NPU,主CPU上运行有一个或多个APP(图3示意的是3个APP,分别为APP1、APP2、APP3),主CPU包括AI Service和NPU驱动,NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥1,下面对各个模块的功能以及主CPU上运行的APP分别进行介绍。
APP:主CPU上运行的应用程序,一个APP可对应一个或多个AI模型,APP在完成初始化后,主CPU可以将与APP对应的AI模型(假设对应有多个AI模型)一次性加载至NPU,也可以是在需要用到哪个AI模型,就向NPU加载哪个AI模型,具体此处不做限定。若NPU上某个已加载的AI模型长时间(如,超过预设阈值)未使用,也可通过该APP指示NPU删除该AI模型。
AI Service:用于向APP提供AI模型的服务接口,如:AI模型加载的接口,具体可参阅图1。具体地,AI Service还用于实现NPU相关的软件栈(对外则只提供AI模型的服务接口,从而屏蔽软件栈的复杂性),由于APP只需要使用AI Service提供的接口,不关注NPU软件栈,这里不予赘述。这里需要注意的是,APP侧的AI模型是一个计算图结构,AI Service还用于将计算图结构进行转换,转换成NPU的执行序列结构,一个AI模型对应一个或多个执行序列,每个执行序列有多个执行单元(也可称为执行任务),即图4中的每个SQE,就是一个执行单元。如图4所示,假设APP1的model1(即APP1对应的1个AI模型)有2个执行序列,APP2的model2(即APP2对应的1个AI模型)有1个执行序列,APP3的model3(即APP3对应的1个AI模型)有3个执行序列,各个AI模型加载后,NPU上保存的AI模型就如图4所示,在AI模型加载成功且APP在输入数据准备好之后(比如摄像头完成一帧图像输出),向NPU发送AI模型的执行命令,使得NPU进行AI模型推理,AI模型所有的执行序列中的执行单元都执行完成,则AI模型推理完成,得到AI模型的执行结果。AI模型是一次加载,多次推理。这里需要解释一下的是,输入数据准备好的意思是指用于进行AI模型推理的数据已获取到,例如,以智能车辆为例,摄像头拍摄的每帧图像都会自动存储在某个存储模块中,每次有图像存储进来,APP就会向NPU下发执行命令,指示NPU从该存储模块中调用该图像进行AI模型推理。
NPU驱动:用于向NPU提供驱动。
NPU控制器:用于接收主CPU发送的AI模型、调度AI模型基于准备好的输入数据进行执行、给主CPU上报AI模型的执行结果等。
运算逻辑单元:可以是一个或多个(图3示意的是1个运算逻辑单元),用于接收NPU控制器下发的执行命令,并根据该执行命令执行AI模型、给NPU控制器返回执行结果等。
N个寄存器:是在目前的NPU中额外增加的,具体增加多少个寄存器可根据需求设定,这N个寄存器可以作为独立的模块设置在NPU内部,也可以是设置在NPU控制器内部,具体对这N个寄存器处在NPU的什么位置不做限定(图3示意的是N个寄存器独立设置在NPU内部)。例如,假设NPU最多支持加载1024个AI模型,那么可在NPU中增加1024个寄存器,当有目标APP对应的AI模型被加载至NPU,则NPU控制器会给该AI模型分配1个寄存器,再通过寄存器的物理地址映射,最终映射到目标APP的虚拟内存空间,目标APP读/写本进程的虚拟地址对应的虚拟内存,就是读/写NPU控制器上该分配的寄存器,这个寄存器就用于目标APP下发AI模型的执行命令、NPU返回AI模型的执行结果等;又例如,假设NPU最多支持加载1024个AI模型,那么可在NPU中增加1024×2个寄存器,当有目标APP对应的AI模型被加载至NPU,则NPU控制器会给该AI模型分配2个寄存器(类似地,寄存器的物理地址也需先映射),分别用于目标APP下发AI模型的执行命令和NPU返回AI模型的执行结果。不管是给一个AI模型分配几个寄存器,都是相当于目标APP和NPU之间实现了直接通讯(即在模型执行过程旁路了AIService和NPU驱动),从而减少了主CPU上APP与NPU之间计算通路上的时间开销。
基于图3或图4对应的计算设备,NPU给每个加载好的AI模型分配的寄存器的数量不同,主CPU与NPU之间的数据交互方法也就不同,下面分别进行介绍。
一、一个AI模型被分配一个寄存器。
请参阅图5,为本申请实施例提供的主CPU与NPU的数据交互方法的一个流程图,可以包括以下步骤:
501、主CPU向NPU加载目标APP对应的AI模型。
首先,主CPU通过AI Service和NPU驱动将目标APP对应的AI模型加载至NPU,具体可参阅图1所示的AI模型加载过程,此处不予赘述。
502、NPU保存AI模型,并为AI模型分配一个寄存器。
AI模型被加载至NPU后,NPU会保存该AI模型,并通过NPU控制器给该AI模型分配一个寄存器,这个寄存器属于NPU上额外增加的N个寄存器中的一个。
503、NPU向主CPU发送寄存器的物理地址。
由于每个寄存器都有一个对应的物理地址,NPU通过NPU控制器给AI模型分配一个寄存器,同时也就得到了该寄存器的物理地址,NPU将该寄存器的物理地址向主CPU发送。具体地,在本申请的一些实施方式中,可以是向主CPU的NPU驱动发送该寄存器的物理地址。
504、主CPU将寄存器的物理地址映射为目标APP上虚拟内存的虚拟地址。
主CPU接收到NPU发送的寄存器的物理地址后,进一步将该寄存器的物理地址映射为目标APP上虚拟内存的虚拟地址。这样,一个被加载至NPU的AI模型,就对应分配有一个寄存器,并且该寄存器的物理地址被映射为目标APP上虚拟内存的虚拟地址。若有多个被加载至NPU的AI模型(如,3个,这3个AI模型可以是对应同一个APP,也可以是对应不同的APP),那么每个AI模型都分配有一个寄存器(如,共分配了3个寄存器),并且每个寄存器的物理地址都以同样的方式被映射为各自APP上不同虚拟内存的虚拟地址(如,共映射为3个不同的虚拟地址)。
505、根据虚拟地址,主CPU通过目标APP写虚拟内存。
有了寄存器对应的目标APP上的虚拟地址,主CPU就可以根据该虚拟地址,通过目标APP写该虚拟内存,通过目标APP写该虚拟内存,实质就是写对应的寄存器,NPU上寄存器内的数据会被修改。
506、NPU执行该AI模型。
NPU上的寄存器被修改(即主CPU上通过目标APP写了该虚拟内存),在输入数据已准备好的情况下,会直接触发NPU通过NPU控制器控制运算逻辑单元执行对应的AI模型。
507、NPU将AI模型的执行结果写入寄存器。
运算逻辑单元基于输入数据执行完AI模型后,NPU通过NPU控制器进一步将该AI模型的执行结果写入该寄存器。
508、主CPU根据虚拟地址通过目标APP轮询虚拟内存,读取执行结果。
由于主CPU是根据寻址来访问内存的,因此,主CPU就可以根据虚拟地址,通过目标APP轮询读取该虚拟内存的数据,实质就是轮询读取对应的寄存器的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入寄存器,那么当前轮次的轮询就可读取到AI模型的执行结果。
这里需要说明的是,由于主CPU写和轮询的都是同一个虚拟内存,该虚拟内存对应的又都是同一个寄存器。因此,就需要知道每次寄存器内数据的修改是由于目标APP写该虚拟内存导致的,还是由于NPU控制器将AI模型的执行结果写入寄存器导致的,在本申请的一些实施方式中,包括但不限于:可在寄存器内增加标志位数据,标志位数据的值不同,指示的就是哪种情况导致的,例如,当标志位数据为1,则指示当前寄存器内的数据是由目标APP写该虚拟内存得到的,当标志位数据为0,则指示当前寄存器内的数据是NPU控制器写入的AI模型的执行结果。
需要注意的是,在本申请的实施方式中,步骤508除了在步骤506和步骤507之后执行,步骤508也可以在步骤506和步骤507之前执行,也可以在步骤506和步骤507之间执行,具体此处不做限定。
为便于理解,下面将图5对应的实施方式分为两个部分,分别进行阐述,其中,第一部分对应步骤501至步骤504,具体描述寄存器的物理地址如何映射为目标APP上虚拟内存的虚拟地址,请参阅图6;第二部分对应步骤505至步骤508,具体描述AI模型推理的执行命令和执行结果响应的过程,请参阅图7。
图6示意的是寄存器的物理地址映射为目标APP上虚拟内存的虚拟地址的流程图,可以包括如下步骤:
601、目标APP初始化。
首先,主CPU上的目标APP需进行初始化,每个目标APP可对应有一个或多个AI模型,为便于理解,在本申请实施例中,以目标APP对应一个AI模型为例进行说明。
602、目标APP向AI Service发送AI模型。
目标APP在完成初始化后,调用主CPU上AI Service的服务接口,将AI Service能够识别的目标APP对应的AI模型文件发给AI Service。
603、AI Service解析AI模型文件。
AI Service对该AI模型的相关文件进行解析。
604、AI Service转换AI模型格式。
AI Service将解析好的AI模型文件转换为NPU可处理的格式。
605、AI Service向NPU驱动发送AI模型。
AI Service再调用主CPU上的NPU驱动的用户态接口,将转换了格式的AI模型发送给NPU驱动。
606、NPU驱动向NPU发送AI模型。
NPU驱动进一步由用户态切换到内核态,配置NPU的相关寄存器和接口,将AI模型加载到NPU。
607、NPU保存AI模型,并为AI模型分配一个寄存器。
AI模型被加载至NPU后,NPU会保存该AI模型,并通过NPU控制器给该AI模型分配一个寄存器,这个寄存器属于NPU上额外增加的N个寄存器中的一个,N≥1。
608、NPU向NPU驱动发送寄存器的物理地址PA0。
由于每个寄存器都有一个对应的物理地址(physical address,PA),NPU通过NPU控制器给AI模型分配一个寄存器,同时也就得到了该寄存器的物理地址,在本申请实施例中,假设给AI模型分配的寄存器的物理地址为PA0,那么NPU会将PA0向主CPU的NPU驱动发送。
609、NPU驱动将物理地址PA0映射为AI Service上虚拟内存的虚拟地址VA0’。
NPU驱动将物理地址PA0映射到AI Service的虚拟内存空间,得到AI Service上虚拟内存的虚拟地址(virtual address,VA),可记为VA0’。
610、NPU驱动将虚拟地址VA0’向AI Service发送。
611、AI Service获取虚拟地址VA0’的内存句柄FD0。
由于目标APP和AI Service属于不同的进程,APP与AI Service之间的数据交互属于进程间的数据交互,不同进程的虚拟内存不能互相访问,但是又需要目标APP和AIService共享同一个寄存器,因此,AI Service还需要将虚拟地址VA0’映射到目标APP的虚拟内存空间,以得到虚拟地址VA0’在目标APP上虚拟内存的虚拟地址VA0。具体地,AIService可以获取到虚拟地址VA0’的内存句柄FD0。
612、AI Service将内存句柄FD0向目标APP发送。
613、目标APP将内存句柄FD0映射为目标APP上虚拟内存的虚拟地址VA0。
主CPU可通过目标APP将内存句柄FD0映射为该目标APP上虚拟内存的虚拟地址VA0,实际上VA0就是NPU上对应的寄存器在目标APP上的虚拟地址。
需要说明的是,在本申请的一些实施方式中,得到虚拟地址VA0’在目标APP上虚拟内存的虚拟地址VA0除了可以通过上述AI Service发送内存句柄FD0的方式外,还可以有其他方式,例如,AI Service还可以是直接将虚拟地址VA0’向目标APP发送,再由目标APP直接将虚拟地址VA0’映射为目标APP上虚拟内存的虚拟地址VA0。具体此处对如何得到虚拟地址VA0’在目标APP上虚拟内存的虚拟地址VA0的方式不做限定。
还需要说明的是,在本申请的一些实施方式中,假设目标APP集成了AI Service的相关功能,使得该目标APP能直接与NPU驱动交互,也就是说,不需要AI Service提供的服务接口就能与NPU驱动交互的话,那么这种情况下,NPU驱动接收到NPU控制器发送的为目标APP分配的寄存器的物理地址PA0后,可以直接将物理地址PA0映射到目标APP的虚拟内存空间,得到目标APP上虚拟内存的虚拟地址VA0,此时不再需要得到AI Service上虚拟内存的虚拟地址VA0’。
综上所述,在图6对应的实施方式中,AI模型加载到NPU后,NPU会为该AI模型分配一个寄存器,并且,将该寄存器的物理地址映射到目标APP上虚拟内存的虚拟地址,目标APP实际上可以直接读/写AI模型在NPU上对应的寄存器,相当于目标APP与NPU之间有了直连通路。如图8所示,以N个寄存器位于NPU控制器内、目标APP为APP1为例,形象的展示了上述图6对应的实施例将该寄存器的物理地址PA0通过AI Service最终映射到APP1上虚拟内存的虚拟地址VA0的示意图,具体此处不予赘述。
接下来,图7示意的是AI模型推理的执行命令过程和执行结果响应过程的流程图,可以包括如下步骤:
701、目标APP确认输入数据已准备好。
首先,目标APP需要确认输入数据已经准备好,输入数据准备好的意思是指用于进行AI模型推理的数据已获取到,例如,以智能车辆为例,摄像头拍摄的每帧图像都会自动存储在某个存储模块中。
702、目标APP根据虚拟地址VA0写虚拟内存(即写VA0)。
当输入数据准备好后,对应的目标APP就会根据虚拟地址VA0写该目标APP上的虚拟内存(即写VA0),写VA0实质就是修改NPU上对应的寄存器,从而立即触发NPU控制器控制运算逻辑单元执行AI模型(寄存器发生修改可以触发NPU控制器工作)。
703、NPU调用输入数据,执行AI模型。
当目标APP写VA0,就会触发NPU控制器调用输入数据,并进一步控制运算逻辑单元执行相应的AI模型。
704、NPU将AI模型的执行结果写入对应寄存器。
运算逻辑单元基于输入数据执行完AI模型后,NPU通过NPU控制器进一步将该AI模型的执行结果写入该寄存器。
705、目标APP根据虚拟地址VA0轮询虚拟内存,读取执行结果(即读VA0)。
最后,目标APP就可以根据虚拟地址VA0轮询读取目标APP上虚拟内存的数据,实质就是轮询读取对应的物理地址为PA0的寄存器的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入寄存器,那么当前轮次的轮询就可读取到AI模型的执行结果。
需要注意的是,在本申请的实施方式中,步骤705除了在步骤703和步骤704之后执行,步骤705也可以在步骤703和步骤704之前执行,也可以在步骤703和步骤704之间执行,具体此处不做限定。
综上所述,从图7对应的实施方式中可以看出,目标APP下发AI模型的执行命令(即直接通过写VA0触发NPU执行AI模型),到获取AI模型的执行结果(即通过读VA0获取AI模型的执行结果)的整个流程中,计算通路旁路了AI Service和NPU驱动,只有寄存器读/写的开销,相对于已有方案的开销(如图2所示),完全可以忽略不计。这是因为已有方案中,命令通路和响应通路所花费的时间都很长,主要是由如下几点导致的:1)APP和AI Service之间是进程间的消息通讯;2)NPU驱动涉及驱动在用户态和内核态之间的切换;3)NPU驱动所在的主CPU和NPU是两个系统,是系统间的通讯。而这几点在本申请实施例AI模型推理的过程中都不存在,只有寄存器读/写的开销,大大提高了AI模型的推理效率,也就是提高了AI模型推理的实时性。
需要说明的是,在本申请上述实施方式中,目标APP是根据虚拟地址VA0轮询虚拟内存来读取执行结果,在本申请的一些实施方式中,还可以是通过目标APP接收NPU控制器发送的中断信号,并响应于该中断信号来读取AI模型的执行结果。这种方式相对于上述实施方式来说,好处在于:目标APP不需要反复去读VA0,节省功耗;不足之处则在于:NPU控制器向目标APP发送中断信号依然要通过NPU驱动和AI Service才能被目标APP所接收,响应通路的时间没有节省,只是节省了命令通路的时间,因为目标APP依然是直接通过写VA0触发NPU执行AI模型。总体来说,还是减少了计算通路的时间开销。
二、一个AI模型被分配两个寄存器。
请参阅图9,为本申请实施例提供的主CPU与NPU的数据交互方法的的另一个流程图,可以包括以下步骤:
901、主CPU向NPU加载目标APP对应的AI模型。
首先,主CPU通过AI Service和NPU驱动将目标APP对应的AI模型加载至NPU,具体可参阅图1所示的AI模型加载过程,此处不予赘述。
902、NPU保存AI模型,并为AI模型分配第一寄存器和第二寄存器。
AI模型被加载至NPU后,NPU会保存该AI模型,并通过NPU控制器给该AI模型分配2个寄存器,分别为第一寄存器和第二寄存器,这2个寄存器均属于NPU上额外增加的N个寄存器,N≥2。
903、NPU向主CPU发送第一寄存器的第一物理地址和第二寄存器的第二物理地址。
由于每个寄存器都有一个对应的物理地址,NPU通过NPU控制器给AI模型分配2个寄存器,同时也就得到了这2个寄存器的物理地址,分别为第一物理地址和第二物理地址,NPU将这2个寄存器的2个物理地址向主CPU发送。具体地,在本申请的一些实施方式中,可以是向主CPU的NPU驱动发送这2个寄存器的2个物理地址。
904、主CPU将第一物理地址和第二物理地址分别映射为目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
主CPU接收到NPU发送的第一物理地址和第二物理地址后,进一步将这2个物理地址映射为目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。这样,一个被加载至NPU的AI模型,就对应分配有2个寄存器,并且这2个寄存器的2个物理地址均被映射为目标APP上2个虚拟内存的2个虚拟地址。若有多个被加载至NPU的AI模型(如,3个,这3个AI模型可以是对应同一个APP,也可以是对应不同的APP),那么每个AI模型都分配有2个寄存器(如,共分配了6个寄存器),并且每个寄存器的物理地址都以同样的方式被映射为各自APP上虚拟内存的虚拟地址(如,共映射为6个不同的虚拟地址)。
905、根据第一虚拟地址,主CPU通过目标APP写第一虚拟内存。
有了寄存器对应的目标APP上的2个虚拟地址,主CPU就可以根据其中一个虚拟地址(如,第一虚拟地址),通过目标APP写该第一虚拟内存,通过目标APP写该第一虚拟内存,实质就是写对应的第一寄存器,NPU上第一寄存器内的数据会被修改。
906、NPU执行该AI模型。
NPU上的第一寄存器被修改(即主CPU上通过目标APP写了第一虚拟内存),在输入数据已准备好的情况下,会直接触发NPU通过NPU控制器控制运算逻辑单元执行对应的AI模型。
907、NPU将AI模型的执行结果写入第二寄存器。
运算逻辑单元基于输入数据执行完AI模型后,NPU通过NPU控制器进一步将该AI模型的执行结果写入第二寄存器。
908、主CPU根据第二虚拟地址通过目标APP轮询第二虚拟内存,读取执行结果。
由于主CPU是根据寻址来访问内存的,因此,主CPU就可以根据第二虚拟地址,通过目标APP轮询读取第二虚拟内存的数据,实质就是轮询读取对应的第二寄存器的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入第二寄存器,那么当前轮次的轮询就可读取到AI模型的执行结果。
需要注意的是,在本申请的实施方式中,步骤908除了在步骤906和步骤907之后执行,步骤908也可以在步骤906和步骤907之前执行,也可以在步骤906和步骤907之间执行,具体此处不做限定。
这里还需要说明的是,由于主CPU通过目标APP写的是第一虚拟内存,而轮询的是第二虚拟内存,第一虚拟内存对应的是第一寄存器,第二虚拟内存对应的是第二寄存器。也就是说,AI模型推理的执行命令(即命令通路)是基于一个寄存器完成的,AI模型的执行结果响应是通过另一个寄存器完成的,这样的好处在于:不同的计算通路采用的是不同的寄存器,过程易于操作,数据不易混淆。
类似地,为便于理解,下面将图9对应的实施方式分为两个部分,分别进行阐述,其中,第一部分对应步骤901至步骤904,具体描述一个目标APP对应的2个寄存器的物理地址如何映射为目标APP上2个虚拟内存的虚拟地址,请参阅图10;第二部分对应步骤905至步骤908,具体描述AI模型推理的执行命令和执行结果响应的过程,请参阅图11。
图10示意的是AI模型对应的2个寄存器的物理地址映射为目标APP上2个虚拟内存的虚拟地址的流程图,可以包括如下步骤:
1001、目标APP初始化。
1002、目标APP向AI Service发送AI模型。
1003、AI Service解析AI模型文件。
1004、AI Service转换AI模型格式。
1005、AI Service向NPU驱动发送AI模型。
1006、NPU驱动向NPU发送AI模型。
上述步骤1001至步骤1006与图6对应的实施例中的步骤601至步骤606类似,具体过程请参阅图6,此处不予赘述。
1007、NPU保存AI模型,并为AI模型分配第一寄存器和第二寄存器。
AI模型被加载至NPU后,NPU会保存该AI模型,并通过NPU控制器给该AI模型分配2个寄存器,分别用于命令和应答,这2个寄存器可称为第一寄存器和第二寄存,,这2个寄存器均属于NPU上额外增加的N个寄存器。
1008、NPU向NPU驱动发送第一寄存器的物理地址PA1和第二寄存器的物理地址PA2。
由于每个寄存器都对应有一个物理地址,NPU通过NPU控制器给AI模型分配2个寄存器,同时也就得到了这2个寄存器的物理地址,在本申请实施例中,假设给AI模型分配的第一寄存器的物理地址为PA1,给AI模型分配的第二寄存器的物理地址为PA2,那么NPU会将PA1和PA2向主CPU的NPU驱动发送。
1009、NPU驱动将PA1和PA2分别映射为AI Service上第三虚拟内存的虚拟地址VA1’和第四虚拟内存的虚拟地址VA2’。
NPU驱动将物理地址PA1和物理地址PA2映射到AI Service的虚拟内存空间,得到AI Service上第三虚拟内存的虚拟地址VA1’和第四虚拟内存的虚拟地址VA2’。
1010、NPU驱动将VA1’和VA2’向AI Service发送。
1011、AI Service获取VA1’的内存句柄FD1和VA2’的内存句柄FD2。
由于目标APP和AI Service属于不同的进程,APP与AI Service之间的数据交互属于进程间的数据交互,不同进程的虚拟内存不能互相访问,但是又需要目标APP和AIService共享这2个寄存器,因此,AI Service还需要将VA1’和VA2’映射到目标APP的虚拟内存空间,以得到VA1’和VA2’在目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2。具体地,AI Service可以获取到VA1’的内存句柄FD1和和VA2’的内存句柄FD2。
1012、AI Service将FD1和FD2向目标APP发送。
1013、目标APP将FD1和FD2分别映射为目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2。
主CPU可通过目标APP将内存句柄FD1和内存句柄FD2映射为该目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2,实际上VA1就是NPU上对应的第一寄存器在目标APP上的虚拟地址,VA2就是NPU上对应的第二寄存器在目标APP上的虚拟地址。
需要说明的是,在本申请的一些实施方式中,得到VA1’和VA2’在目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2除了可以通过上述AI Service发送内存句柄FD1和内存句柄FD2的方式外,还可以有其他方式,例如,AI Service还可以是直接将VA1’和VA2’向目标APP发送,再由目标APP将VA1’和VA2’分别映射为目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2。具体此处对如何得到VA1’和VA2’在目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2的方式不做限定。
还需要说明的是,在本申请的一些实施方式中,假设目标APP集成了AI Service的相关功能,使得该目标APP能直接与NPU驱动交互,也就是说,不需要AI Service提供的服务接口就能与NPU驱动交互的话,那么这种情况下,NPU驱动接收到NPU控制器发送的为目标APP分配的第一寄存器的物理地址PA1和第二寄存器的物理地址PA2后,可以直接将PA1和PA2分别映射到目标APP的虚拟内存空间,得到目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2,此时不再需要得到AI Service上第三虚拟内存的虚拟地址VA1’和第四虚拟内存的虚拟地址VA2’。
综上所述,在图10对应的实施方式中,AI模型加载到NPU后,NPU会为该AI模型分配2个寄存器,分别为第一寄存器和第二寄存器,并且,将这2个寄存器的物理地址映射到目标APP上2个虚拟内存的虚拟地址,目标APP实际上可以直接读其中一个寄存器、写另一个寄存器,相当于目标APP与NPU之间有了2个直连通路。如图12所示,以N个寄存器位于NPU控制器内、目标APP为APP1为例,形象的展示了上述图10对应的实施例将第一寄存器的物理地址PA1和第二寄存器的物理地址PA2通过AI Service最终映射到目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2的示意图,其中一组PA1和VA1用于实现AI模型推理的执行命令过程(即命令通路),另一组PA2和VA2用于实现AI模型推理的执行结果响应过程(即响应通路)。
接下来,图11示意的是AI模型推理的执行命令过程和执行结果响应过程的流程图,可以包括如下步骤:
1101、目标APP确认输入数据已准备好。
首先,目标APP需要确认输入数据已经准备好,输入数据准备好的意思是指用于进行AI模型推理的数据已获取到,例如,以智能车辆为例,摄像头拍摄的每帧图像都会自动存储在某个存储模块中。
1102、目标APP根据虚拟地址VA1写第一虚拟内存(即写VA1)。
当输入数据准备好后,对应的目标APP就会根据虚拟地址VA1写该目标APP上的第一虚拟内存(即写VA1),写VA1实质就是修改NPU上对应的第一寄存器(如,图12中的寄存器1),从而立即触发NPU控制器控制运算逻辑单元执行AI模型(第一寄存器发生修改可以触发NPU控制器工作)。
1103、NPU调用输入数据,执行AI模型。
当目标APP写VA1,就会触发NPU控制器调用输入数据,并进一步控制运算逻辑单元执行相应的AI模型。
1104、NPU将AI模型的执行结果写入第二寄存器。
运算逻辑单元基于输入数据执行完AI模型后,NPU通过NPU控制器进一步将该AI模型的执行结果写入第二寄存器(如,图12中的寄存器2)。
1105、目标APP根据虚拟地址VA2轮询第二虚拟内存,读取执行结果(即读VA2)。
最后,目标APP就可以根据虚拟地址VA2轮询读取目标APP上第二虚拟内存的数据,实质就是轮询读取对应的物理地址为PA2的第二寄存器的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入第二寄存器,那么当前轮次的轮询就可读取到AI模型的执行结果。
需要注意的是,在本申请的实施方式中,步骤1105除了在步骤1103和步骤1104之后执行,步骤1105也可以在步骤1103和步骤1104之前执行,也可以在步骤1103和步骤1104之间执行,具体此处不做限定。
综上所述,从图11对应的实施方式中可以看出,目标APP下发AI模型的执行命令(即直接通过写VA1触发NPU执行AI模型),到获取AI模型的执行结果(即通过读VA2获取AI模型的执行结果)的整个流程中,计算通路旁路了AI Service和NPU驱动,只有寄存器读/写的开销,相对于已有方案的开销(如图2所示),完全可以忽略不计,提高了AI模型推理的实时性。并且不同的计算通路采用的是不同的寄存器,过程易于操作,信息不易混淆。
需要说明的是,在本申请上述实施方式中,目标APP是根据虚拟地址VA2轮询虚拟内存来读取执行结果,在本申请的一些实施方式中,还可以是通过目标APP接收NPU控制器发送的中断信号,并响应于该中断信号来读取AI模型的执行结果。这种方式相对于上述实施方式来说,好处在于:目标APP不需要反复去读VA2,节省功耗;不足之处则在于:NPU控制器向目标APP发送中断信号依然要通过NPU驱动和AI Service才能被目标APP所接收,响应通路的时间没有节省,只是节省了命令通路的时间,因为目标APP依然是直接通过写VA0触发NPU执行AI模型。总体来说,还是减少了计算通路的时间开销。
上述实施例能实施的前提,是基于图3或图4对应的计算设备,也就是事先已在NPU内增加了N个寄存器(即对芯片NPU进行了修改),那么对于芯片不能修改的场景,如图13所示的就是没有对芯片NPU进行修改的计算设备,该计算设备包括主CPU和NPU,主CPU上运行有一个或多个APP(图13示意的是3个APP,分别为APP1、APP2、APP3),主CPU包括AI Service和NPU驱动,NPU包括NPU控制器和运算逻辑单元,N≥1,主CPU和NPU各个模块的功能以及主CPU上运行的APP与上述图3对应的实施例类似,此处不予赘述。
对于图13所示的NPU芯片不能修改的场景,无法在NPU侧事先增加N个寄存器,则可以在主CPU的NPU驱动上开辟一块内存用于模拟NPU侧的寄存器(也可称为软件寄存器),NPU驱动可通过轮询的方式,检查该内存是否有变化,从而触发NPU进行AI模型的推理,并且将AI模型的执行结果写入该内存,图14为本申请实施例提供的主CPU与NPU的数据交互方法的的另一个流程图,该流图基于图13所示的计算设备实现,可以包括以下步骤:
1401、主CPU向NPU加载目标APP对应的AI模型。
首先,主CPU通过AI Service和NPU驱动将目标APP对应的AI模型加载至NPU,具体可参阅图1所示的AI模型加载过程,此处不予赘述。
1402、NPU保存AI模型。
AI模型被加载至NPU后,NPU会保存该AI模型。
1403、主CPU通过NPU驱动为AI模型分配内存,并将内存的地址映射为目标APP上虚拟内存的虚拟地址。
主CPU将AI模型加载至NPU后,将进一步通过NPU驱动为AI模型分配一个内存(该内存为在NPU驱动上开辟的内存),并将该内存的地址映射为目标APP上一个虚拟内存的虚拟地址。这样,一个被加载至NPU的AI模型,就对应分配有NPU驱动上的一个内存,该内存的地址进一步被映射为目标APP上虚拟内存的虚拟地址。若有多个被加载至NPU的AI模型(如,4个,这4个AI模型可以是对应同一个APP,也可以是对应不同的APP),那么每个AI模型在NPU驱动上都分配有一块内存(如,共分配了4个内存),并且每个内存的地址都以同样的方式被映射为各自APP上不同虚拟内存的虚拟地址(如,共映射为4个不同的虚拟地址)。
1404、根据虚拟地址,主CPU通过目标APP写虚拟内存。
有了NPU驱动上内存对应的目标APP上的虚拟地址,主CPU就可以根据该虚拟地址,通过目标APP写该虚拟内存,通过目标APP写该虚拟内存,实质就是写对应的NPU驱动上的内存,NPU驱动上内存中的数据会被修改。
1405、主CPU通过NPU驱动向NPU方式执行命令。
NPU驱动上该内存被修改(即主CPU上通过目标APP写了该虚拟内存),在输入数据已准备好的情况下,会直接触发NPU驱动向NPU发送执行命令,该执行命令用于指示NPU通过NPU控制器控制运算逻辑单元执行AI模型。
1406、NPU执行该AI模型,得到AI模型的执行结果。
NPU通过NPU控制器接收到NPU驱动发送的执行命令后,在输入数据已准备好的情况下,会进一步通过NPU控制器控制运算逻辑单元执行对应的AI模型,得到该AI模型的执行结果。
1407、NPU将AI模型的执行结果向主CPU发送。
NPU执行完AI模型后,会将该AI模型的执行结果向主CPU上的NPU驱动发送。
1408、主CPU通过NPU驱动将执行结果存入内存。
主CPU通过NPU驱动接收到NPU发送的执行结果,再通过NPU驱动将执行结果存入内存。
1409、主CPU根据虚拟地址通过目标APP轮询虚拟内存,读取执行结果。
最后,主CPU可以根据虚拟地址,通过目标APP轮询读取该虚拟内存的数据,实质就是轮询读取NPU驱动上对应内存的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入该内存,那么当前轮次的轮询就可读取到AI模型的执行结果。
这里需要说明的是,由于主CPU写和轮询的都是同一个虚拟内存,该虚拟内存对应的又都是同一个NPU驱动上的内存。因此,就需要知道每次内存中数据的修改是由于目标APP写该虚拟内存导致的,还是由于NPU驱动将AI模型的执行结果写入该内存导致的,在本申请的一些实施方式中,包括但不限于:可在NPU驱动上的该内存增加标志位数据,标志位数据的值不同,指示的就是哪种情况导致的,例如,当标志位数据为1,则指示当前内存中的数据是由目标APP写该虚拟内存得到的,当标志位数据为0,则指示当前内存中的数据是NPU驱动写入的AI模型的执行结果。
需要注意的是,在本申请的实施方式中,步骤1409除了在步骤1406-1408之后执行,步骤1409也可以在步骤1406-1408之前执行,也可以在步骤1406-1408任意两个步骤之间执行,具体此处不做限定。
类似地,为便于理解,下面将图14对应的实施方式分为两个部分,分别进行阐述,其中,第一部分对应步骤1401至步骤1403,具体描述NPU驱动上内存的地址如何映射为目标APP上虚拟内存的虚拟地址,请参阅图15;第二部分对应步骤1404至步骤1409,具体描述AI模型推理的执行命令和执行结果响应的过程,请参阅图16。
图15示意的是NPU上内存的地址映射为目标APP上虚拟内存的虚拟地址的流程图,可以包括如下步骤:
1501、目标APP初始化。
1502、目标APP向AI Service发送AI模型。
1503、AI Service解析AI模型文件。
1504、AI Service转换AI模型格式。
1505、AI Service向NPU驱动发送AI模型。
1506、NPU驱动向NPU发送AI模型。
上述步骤1501至步骤1506与图6对应的实施例中的步骤601至步骤606类似,具体过程请参阅图6,此处不予赘述。
1507、NPU保存AI模型。
1508、NPU驱动为AI模型分配内存,并将内存的地址A0映射为AI Service上虚拟内存的虚拟地址VA0’。
AI模型被加载至NPU后,NPU驱动会为AI模型分配一个内存,该内存为在NPU驱动上开辟的内存,并将该内存的地址A0映射到AI Service的虚拟内存空间,得到AI Service上虚拟内存的虚拟地址VA0’。
1509、NPU驱动将虚拟地址VA0’向AI Service发送。
1510、AI Service获取虚拟地址VA0’的内存句柄FD0。
1511、AI Service将内存句柄FD0向目标APP发送。
1512、目标APP将内存句柄FD0映射为目标APP上虚拟内存的虚拟地址VA0。
上述步骤1509至步骤1512与图6对应的实施例中的步骤610至步骤613类似,具体过程请参阅图6,此处不予赘述。
综上所述,从图15对应的实施方式中可以看出,AI模型加载到NPU后,NPU驱动会为该AI模型分配一块位于NPU驱动上的内存,并且,将该内存的地址映射到目标APP上虚拟内存的虚拟地址,目标APP实际上可以直接读/写AI模型在NPU驱动上对应的该内存,相当于目标APP与NPU驱动之间有了直连通路。因此,在不修改芯片NPU的基础上,减小主CPU与NPU之间计算通路的时间开销。如图17所示,以目标APP为APP1为例,形象的展示了上述图15对应的实施例将NPU驱动上内存的地址A0映射到APP1上虚拟内存的虚拟地址VA0的示意图,具体此处不予赘述。
接下来,图16示意的是AI模型推理的执行命令过程和执行结果响应过程的流程图,可以包括如下步骤:
1601、目标APP确认输入数据已准备好。
1602、目标APP根据虚拟地址VA0写虚拟内存(即写VA0)。
上述步骤1601至步骤1602与图7对应的实施例中的步骤701至步骤702类似,具体过程请参阅图7,此处不予赘述。
1603、NPU驱动向NPU发送执行命令。
当目标APP写VA0,就会触发NPU驱动向NPU发送执行命令,该执行命令用于指示NPU执行已加载的AI模型。
1604、NPU调用输入数据,执行AI模型,得到AI模型的执行结果。
当NPU接收到NPU驱动发送的执行命令,就会触发NPU控制器调用输入数据,并进一步控制运算逻辑单元执行相应的AI模型,AI模型执行完成后,将得到AI模型的执行结果。
1605、NPU向NPU驱动发送执行结果。
1606、NPU驱动将执行结果存入内存中。
1607、目标APP根据虚拟地址VA0轮询虚拟内存,读取执行结果(即读VA0)。
最后,目标APP就可以根据虚拟地址VA0轮询读取目标APP上虚拟内存的数据,实质就是轮询读取对应的NPU驱动上内存地址为A0的内存中的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入该内存,那么当前轮次的轮询就可读取到AI模型的执行结果。
类似地,需要注意的是,在本申请的实施方式中,步骤1607除了在步骤1604-1606之后执行,步骤1607也可以在步骤1604-1606之前执行,也可以在步骤1604-1606任意两个步骤之间执行,具体此处不做限定。
综上所述,从图16对应的实施方式中可以看出,相比于原有方案,在AI模型的推理过程中,节省了目标APP到AI Service进程间的时间开销以及NPU驱动用户态切换到内核态的时间开销。而相比于本申请上述图7对应的实施例,NPU驱动和NPU控制器之间的时间开销没有节省,但好处在于:不需对NPU的结构进行修改,即可以在不修改芯片结构的基础上,提高AI模型的执行效率。
需要说明的是,上述图14至图16对应的实施例均是1个加载的AI模型分配1个NPU驱动上的内存,在本申请的一些实施方式中,还可以是1个加载的AI模型分配2个NPU驱动上的内存,其中一个内存用于命令通路,另一个内存用于应答通路,具体请参阅图18,为本申请实施例提供的主CPU与NPU的数据交互方法的的另一个流程图,可以包括以下步骤:
1801、主CPU向NPU加载目标APP对应的AI模型。
1802、NPU保存AI模型。
上述步骤1801至步骤1802与图14对应的实施例中的步骤1401至步骤1402类似,具体过程请参阅图14,此处不予赘述。
1803、主CPU通过NPU驱动为AI模型分配第一内存和第二内存,并将第一内存的地址和第二内存的地址分别映射为目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
主CPU将AI模型加载至NPU后,将进一步通过NPU驱动为AI模型分配2个内存(这2个内存均为在NPU驱动上开辟的内存),并将这2个内存的地址分别映射为目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。这样,一个被加载至NPU的AI模型,就对应分配有NPU驱动上的2个内存,这2个内存的地址进一步被映射为目标APP上2个虚拟内存的虚拟地址。若有多个被加载至NPU的AI模型(如,4个,这4个AI模型可以是对应同一个APP,也可以是对应不同的APP),那么每个AI模型在NPU驱动上都分配有2块内存(如,共分配了8个内存),并且每个内存的地址都以同样的方式被映射为各自APP上不同虚拟内存的虚拟地址(如,共映射为8个不同的虚拟地址)。
1804、根据第一虚拟地址,主CPU通过目标APP写第一虚拟内存。
有了NPU驱动上第一内存对应的目标APP上的第一虚拟地址,主CPU就可以根据该第一虚拟地址,通过目标APP写该第一虚拟内存,通过目标APP写该第一虚拟内存,实质就是写对应的NPU驱动上的第一内存,NPU驱动上第一内存中的数据会被修改。
1805、主CPU通过NPU驱动向NPU方式执行命令。
1806、NPU执行该AI模型,得到AI模型的执行结果。
1807、NPU将AI模型的执行结果向主CPU发送。
上述步骤1805至步骤1807与图14对应的实施例中的步骤1405至步骤1407类似,具体过程请参阅图14,此处不予赘述。
1808、主CPU通过NPU驱动将执行结果存入第二内存。
主CPU通过NPU驱动接收到NPU发送的执行结果,再通过NPU驱动将执行结果存入第二内存。
1809、主CPU根据第二虚拟地址通过目标APP轮询第二虚拟内存,读取执行结果。
最后,主CPU可以根据第二虚拟地址,通过目标APP轮询读取该第二虚拟内存的数据,实质就是轮询读取NPU驱动上对应的第二内存的数据,若在上一次轮次结束后和当前轮次开始前,AI模型的执行结果被写入该第二内存,那么当前轮次的轮询就可读取到AI模型的执行结果。
需要注意的是,在本申请的实施方式中,步骤1809除了在步骤1806-1808之后执行,步骤1809也可以在步骤1806-1808之前执行,也可以在步骤1806-1808任意两个步骤之间执行,具体此处不做限定。
类似地,为便于理解,下面将图18对应的实施方式分为两个部分,分别进行阐述,其中,第一部分对应步骤1801至步骤1803,具体描述NPU驱动上2个内存的地址如何映射为目标APP上2个虚拟内存的虚拟地址,请参阅图19;第二部分对应步骤1804至步骤1809,具体描述AI模型推理的执行命令和执行结果响应的过程,请参阅图20。
图19示意的是NPU上2个内存的地址映射为目标APP上2个虚拟内存的虚拟地址的流程图,可以包括如下步骤:
1901、目标APP初始化。
1902、目标APP向AI Service发送AI模型。
1903、AI Service解析AI模型文件。
1904、AI Service转换AI模型格式。
1905、AI Service向NPU驱动发送AI模型。
1906、NPU驱动向NPU发送AI模型。
1907、NPU保存AI模型。
上述步骤1901至步骤1907与图15对应的实施例中的步骤1501至步骤1507类似,具体过程请参阅图15,此处不予赘述。
1908、NPU驱动为AI模型分配第一内存和第二内存,并将第一内存的地址A1和第二内存的地址A2分别映射为AI Service上第三虚拟内存的虚拟地址VA1’和第四虚拟内存的虚拟地址VA2’。
AI模型被加载至NPU后,NPU驱动会为AI模型分配2个内存,分别为第一内存和第二内存,这2个内存均为在NPU驱动上开辟的内存,并将这2个内存的地址A1和A2分别映射到AIService的虚拟内存空间,得到AI Service上第三虚拟内存的虚拟地址VA1’和第四虚拟内存的虚拟地址VA2’。
1909、NPU驱动将VA1’和VA2’向AI Service发送。
1910、AI Service获取VA1’的内存句柄FD1和VA2’的内存句柄FD2。
1911、AI Service将FD1和FD2向目标APP发送。
1912、目标APP将FD1和FD2分别映射为目标APP上第一虚拟内存的虚拟地址VA1和第二虚拟内存的虚拟地址VA2。
上述步骤1909至步骤1912与图10对应的实施例中的步骤1010至步骤1013类似,具体过程请参阅图10,此处不予赘述。
综上所述,从图19对应的实施方式中可以看出,AI模型加载到NPU后,NPU驱动会为该AI模型分配2块位于NPU驱动上的内存,分别为第一内存和第二内存,并且,将这2个内存的地址分别映射到目标APP上2个虚拟内存的虚拟地址,目标APP实际上可以直接读其中一个内存、写另一个内存,相当于目标APP与NPU驱动之间有了2个直连通路。因此,在不修改芯片NPU的基础上,减小主CPU与NPU之间计算通路的时间开销。如图21所示,以目标APP为APP1为例,形象的展示了上述图19对应的实施例将NPU驱动上2个内存的地址A1和A2分别映射到APP1上2个虚拟内存的虚拟地址VA1和VA2的示意图,其中一组A1和VA1用于实现AI模型推理的执行命令过程(即命令通路),另一组A2和VA2用于实现AI模型推理的执行结果响应过程(即响应通路)。
接下来,图20示意的是AI模型推理的执行命令过程和执行结果响应过程的流程图,可以包括如下步骤:
2001、目标APP确认输入数据已准备好。
2002、目标APP根据虚拟地址VA1写虚拟内存(即写VA1)。
上述步骤2001至步骤2002与图11对应的实施例中的步骤1101至步骤1102类似,具体过程请参阅图11,此处不予赘述。
2003、NPU驱动向NPU发送执行命令。
2004、NPU调用输入数据,执行AI模型,得到AI模型的执行结果。
2005、NPU向NPU驱动发送执行结果。
上述步骤2003至步骤2005与图16对应的实施例中的步骤1603至步骤1605类似,具体过程请参阅图16,此处不予赘述。
2006、NPU驱动将执行结果存入第二内存中。
2007、目标APP根据虚拟地址VA2轮询虚拟内存,读取执行结果(即读VA2)。
上述步骤2007与图11对应的实施例中的步骤1105类似,具体过程请参阅图11,此处不予赘述。
类似地,需要注意的是,在本申请的实施方式中,步骤2007除了在步骤2004-2006之后执行,步骤2007也可以在步骤2004-2006之前执行,也可以在步骤2004-2006任意两个步骤之间执行,具体此处不做限定。
综上所述,从图20对应的实施方式中可以看出,相比于原有方案(如图2所示),在AI模型的推理过程中,节省了目标APP到AI Service进程间的时间开销以及NPU驱动用户态切换到内核态的时间开销。而相比于本申请上述图11对应的实施例,NPU驱动和NPU控制器之间的时间开销没有节省,但好处在于:不需对NPU的结构进行修改,即可以在不修改芯片结构的基础上,提高AI模型的执行效率,并且不同的计算通路采用的是不同的寄存器,过程易于操作,信息不易混淆。
需要说明的是,在本申请的一些实施方式中,在芯片不可修改的情况下,除了可以是像图14至图21对应的实施例那样,在NPU驱动上开辟内存用于模拟NPU上寄存器的功能外,还可以基于图13所示的计算设备,在NPU控制器上开辟内存用于模拟NPU上寄存器的功能,所达到的效果是类似的,具体实现过程与图14至图21类似,具体此处不予赘述。
由于智能安防、自动驾驶、智能终端等领域中都可以用到本申请实施例提供的计算设备或基于该计算设备实现的主CPU与NPU的数据交互方法,比如,在自动驾驶领域中,驾驶员监控、泊车、自动驾驶等应用场景常见的一些任务:障碍物识别、车道线检测、语义分割、目标检测等,下面将对多个落地到产品的多个应用场景进行介绍。
(1)自动驾驶
自动驾驶系统有大量的场景需要用到AI模型推理,AI模型基本上都是深度神经网络,神经网络是矩阵和矢量计算密集型,对算力要求很高(T级)。普通的CPU一般不能满足深度神经网络,也就是不能满足AI模型的海量计算的算力需求,因此需要用到专用的加速器(如,NPU)来执行AI模型)。因此,本申请实施例提供的计算设备可以应用于自动驾驶系统,这是因为自动驾驶场景对AI模型推理的执行实时性有很高的要求,比如每个摄像头每秒钟会拍摄30帧图像,每张图像可能需要处理多次,每台汽车有多个摄像头的图像需要处理,因此要求每次AI模型推理的时间尽可能短。除了要求NPU的算力满足要求,能够迅速的处理完图像,也要求主CPU上的APP到NPU计算通路上的往返时间足够短。本申请实施例提供的该计算设备实现了APP和NPU之间的AI推理执行命令和响应的直通,减少了在进行AI推理时,APP到NPU计算通路上的时间开销,可以提高AI模型推理的效率。下面举例进行示意,如图22所示,部署有本申请实施例提供的计算设备的汽车A在自车速度较快的前提下,摄像头拍摄到前面汽车B距离过近,由于AI模型推理的实时性高,汽车A能够及时获取到AI模型的推理结果,并基于该推理结果控制自车迅速转到右侧车道,避免撞上汽车B。
(2)移动终端的物体检测
例如,以终端为手机为例,手机端的物体检测是一个目标检测问题。当用户使用手机拍照时,自动抓取人脸、动物等目标,可以帮助手机自动对焦、美化等,而自动抓取人脸、动物的响应时间越短,用户体验则越好。如图23所示,本申请实施例提供的计算设备可部署在手机中,可使得手机在执行目标检测任务时更为流畅,而流畅可以给用户带来更好的用户体验,提升手机产品品质。
(3)人脸识别
本申请实施例提供的计算设备还可以部署在用于人脸识别的机器中,如,进行人脸验证的入口闸机,具体请参阅图24,人脸识别是一个图像相似度比对问题。在高铁、机场等入口的闸机上,乘客进行人脸认证时,摄像头会拍摄人脸图像,使用AI模型抽取特征,和存储在系统中的身份证件的图像特征进行相似度计算,如果相似度高就验证成功。部署有本申请实施例提供的计算设备的闸机可以高效进行人脸验证,提高识别效率。
需要说明的是,本申请所述的计算设备不仅可以应用于上述图22至图24所述的应用场景中,还可以应用在人工智能领域的各个细分领域中,只要能使用该计算设备的领域都可进行应用,此处不再举例示意。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等,包括若干指令用以使得一台计算设备(可以是个人计算机,训练设备,或者网络设备等)执行本申请各个实施例所述的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、训练设备或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、训练设备或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的训练设备、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(digitalvideo disc,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
Claims (29)
1.一种计算设备,所述计算设备包括主CPU和NPU,所述主CPU上运行目标应用程序APP,所述主CPU包括AI服务AI Service和NPU驱动,所述NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥1;
所述主CPU,用于通过所述AI Service和所述NPU驱动将所述目标APP对应的AI模型加载至所述NPU;
所述NPU,用于通过所述NPU控制器为所述AI模型分配第一寄存器,并将所述第一寄存器的物理地址向所述主CPU发送,所述第一寄存器属于所述N个寄存器;
所述主CPU,还用于接收所述NPU发送的所述物理地址,并将所述物理地址映射为所述目标APP上第一虚拟内存的第一虚拟地址;
所述主CPU,还用于根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存;
所述NPU,还用于当所述主CPU根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存,通过所述NPU控制器控制所述运算逻辑单元执行所述AI模型;
所述NPU,还用于通过所述NPU控制器将所述AI模型的执行结果写入所述第一寄存器;
所述主CPU,还用于根据所述第一虚拟地址,通过所述目标APP轮询所述第一虚拟内存,从所述第一寄存器中读取所述AI模型的执行结果。
2.根据权利要求1所述的设备,其特征在于,所述主CPU,具体用于:
通过所述NPU驱动接收所述NPU控制器发送的所述物理地址,并通过所述NPU驱动将所述物理地址映射到所述AI Service的虚拟内存空间,得到所述AI Service上第二虚拟内存的第二虚拟地址;
通过所述AI Service将所述第二虚拟地址映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址。
3.根据权利要求2所述的设备,其特征在于,所述主CPU,具体还用于:
通过所述目标APP接收所述AI Service发送的第二虚拟地址的内存句柄;
通过所述目标APP将所述第二虚拟地址的内存句柄映射为所述目标APP上第一虚拟内存的第一虚拟地址。
4.根据权利要求1所述的设备,其特征在于,所述主CPU,具体用于:
通过所述NPU驱动接收所述NPU控制器发送的所述第一寄存器的物理地址;
通过所述NPU驱动将所述第一寄存器的物理地址直接映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址。
5.根据权利要求1-4中任一项所述的设备,其特征在于,所述NPU,具体用于:
将所述第一寄存器的物理地址向所述主CPU的NPU驱动发送。
6.一种计算设备,所述计算设备包括主CPU和NPU,所述主CPU上运行目标应用程序APP,所述主CPU包括AI服务AI Service和NPU驱动,所述NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥2;
所述主CPU,用于通过所述AI Service和所述NPU驱动将所述目标APP对应的AI模型加载至所述NPU;
所述NPU,用于通过所述NPU控制器为所述AI模型分配第一寄存器和第二寄存器,并将所述第一寄存器的第一物理地址和所述第二寄存器的第二物理地址向所述主CPU发送,所述第一寄存器和所述第二寄存器属于所述N个寄存器;
所述主CPU,还用于接收所述NPU发送的所述第一物理地址和所述第二物理地址,并将所述第一物理地址和所述第二物理地址分别映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址;
所述主CPU,还用于根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存;
所述NPU,还用于当所述主CPU根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存,通过所述NPU控制器控制所述运算逻辑单元执行所述AI模型;
所述NPU,还用于通过所述NPU控制器将所述AI模型的执行结果写入所述第二寄存器;
所述主CPU,还用于根据所述第二虚拟地址,通过所述目标APP轮询所述第二虚拟内存,从所述第二寄存器中读取所述AI模型的执行结果。
7.根据权利要求6所述的设备,其特征在于,所述主CPU,具体用于:
通过所述NPU驱动接收所述NPU控制器发送的所述第一物理地址和所述第二物理地址,并通过所述NPU驱动将所述第一物理地址和所述第二物理地址分别映射到所述AI Service的虚拟内存空间,得到所述AI Service上第三虚拟内存的第三虚拟地址和第四虚拟内存的第四虚拟地址;
通过所述AI Service将所述第三虚拟地址和所述第四虚拟地址分别映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
8.根据权利要求7所述的设备,其特征在于,所述主CPU,具体还用于:
通过所述目标APP接收所述AI Service发送的第三虚拟地址的内存句柄和第四虚拟地址的内存句柄;
通过所述目标APP将所述第三虚拟地址的内存句柄和所述第四虚拟地址的内存句柄分别映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
9.根据权利要求6所述的设备,其特征在于,所述主CPU,具体用于:
通过所述NPU驱动接收所述NPU控制器发送的所述第一物理地址和所述第二物理地址;
通过所述NPU驱动将所述第一物理地址和所述第二物理地址分别直接映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
10.根据权利要求6-9中任一项所述的设备,其特征在于,所述NPU,具体用于:
将所述第一寄存器的第一物理地址和所述第二寄存器的第二物理地址向所述主CPU的NPU驱动发送。
11.一种计算设备,所述计算设备包括主CPU和NPU,所述主CPU上运行目标应用程序APP,所述主CPU包括AI服务AI Service和NPU驱动,所述NPU包括NPU控制器和运算逻辑单元;
所述主CPU,用于通过所述AI Service和所述NPU驱动将所述目标APP对应的AI模型加载至所述NPU;
所述主CPU,还用于通过所述NPU驱动为所述AI模型分配第一内存,并将第一内存的地址映射为所述目标APP上第一虚拟内存的第一虚拟地址,所述第一内存为在所述NPU驱动上开辟的内存;
所述主CPU,还用于根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存;
所述主CPU,还用于当所述主CPU根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存,通过所述NPU驱动向所述NPU控制器发送执行命令;
所述NPU,用于通过所述NPU控制器根据所述执行命令控制所述运算逻辑单元执行所述AI模型,并通过所述NPU控制器将所述AI模型的执行结果向所述NPU驱动发送;
所述主CPU,还用于通过所述NPU驱动将所述AI模型的执行结果写入所述第一内存;
所述主CPU,还用于根据所述第一虚拟地址,通过所述目标APP轮询所述第一虚拟内存,从所述第一内存中读取所述AI模型的执行结果。
12.一种计算设备,所述计算设备包括主CPU和NPU,所述主CPU上运行目标应用程序APP,所述主CPU包括AI服务AI Service和NPU驱动,所述NPU包括NPU控制器和运算逻辑单元;
所述主CPU,用于通过所述AI Service和所述NPU驱动将所述目标APP对应的AI模型加载至所述NPU;
所述主CPU,还用于通过所述NPU驱动为所述AI模型分配第一内存和第二内存,并将第一内存的地址和第二内存的地址分别映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址,所述第一内存和所述第二内存为在所述NPU驱动上开辟的内存;
所述主CPU,还用于根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存;
所述主CPU,还用于当所述主CPU根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存,通过所述NPU驱动向所述NPU控制器发送执行命令;
所述NPU,用于通过所述NPU控制器根据所述执行命令控制所述运算逻辑单元执行所述AI模型,并通过所述NPU控制器将所述AI模型的执行结果向所述NPU驱动发送;
所述主CPU,还用于通过所述NPU驱动将所述AI模型的执行结果写入所述第二内存;
所述主CPU,还用于根据所述第二虚拟地址,通过所述目标APP轮询所述第二虚拟内存,从所述第二内存中读取所述AI模型的执行结果。
13.一种计算设备,包括主CPU和NPU,其特征在于:
所述主CPU包括AI服务AI Service和NPU驱动;
所述NPU包括NPU控制器、运算逻辑单元和至少一个寄存器,所述至少一个寄存器中的第一寄存器用于存放加载到所述NPU上的第一AI模型的执行结果;
所述AI Service和所述NPU驱动通信连接;
所述NPU驱动和所述NPU控制器通信连接。
14.根据权利要求13所述的设备,其特征在于,所述至少一个寄存器设置在所述NPU控制器上。
15.一种主CPU与NPU的数据交互方法,其特征在于,所述方法应用于计算设备中,所述计算设备包括主CPU和NPU,所述主CPU上运行目标应用程序APP,所述主CPU包括AI服务AIService和NPU驱动,所述NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥1;所述方法包括:
所述主CPU通过所述AI Service和所述NPU驱动将所述目标APP对应的AI模型加载至所述NPU;
所述NPU通过所述NPU控制器为所述AI模型分配第一寄存器,并将所述第一寄存器的物理地址向所述主CPU发送,所述第一寄存器属于所述N个寄存器;
所述主CPU接收所述NPU发送的所述物理地址,并将所述物理地址映射为所述目标APP上第一虚拟内存的第一虚拟地址;
当所述主CPU根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存,触发所述NPU控制器控制所述运算逻辑单元执行所述AI模型,并由所述NPU控制器将所述AI模型的执行结果写入所述第一寄存器;
根据所述第一虚拟地址,所述主CPU通过所述目标APP轮询所述第一虚拟内存,从所述第一寄存器中读取所述AI模型的执行结果。
16.根据权利要求15所述的方法,其特征在于,所述将所述物理地址映射为所述目标APP上第一虚拟内存的第一虚拟地址包括:
所述主CPU通过所述NPU驱动接收所述NPU控制器发送的所述物理地址,并通过所述NPU驱动将所述物理地址映射到所述AI Service的虚拟内存空间,得到所述AI Service上第二虚拟内存的第二虚拟地址;
所述主CPU通过所述AI Service将所述第二虚拟地址映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址。
17.根据权利要求16所述的方法,其特征在于,所述主CPU通过所述AI Service将所述第二虚拟地址映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址包括:
所述主CPU通过所述目标APP接收所述AI Service发送的第二虚拟地址的内存句柄;
所述主CPU通过所述目标APP将所述第二虚拟地址的内存句柄映射为所述目标APP上第一虚拟内存的第一虚拟地址。
18.根据权利要求15所述的方法,其特征在于,所述将所述物理地址映射为所述目标APP上第一虚拟内存的虚拟地址包括:
所述主CPU通过所述NPU驱动接收所述NPU控制器发送的所述物理地址;
所述主CPU通过所述NPU驱动将所述物理地址直接映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址。
19.根据权利要求15-18中任一项所述的方法,其特征在于,所述将所述第一寄存器的物理地址向所述主CPU发送包括:
所述NPU将所述第一寄存器的物理地址向所述主CPU的NPU驱动发送。
20.一种主CPU与NPU的数据交互方法,其特征在于,所述方法应用于计算设备中,所述计算设备包括主CPU和NPU,所述主CPU上运行目标应用程序APP,所述主CPU包括AI服务AIService和NPU驱动,所述NPU包括NPU控制器、运算逻辑单元和N个寄存器,N≥2;所述方法包括:
所述主CPU通过所述AI Service和所述NPU驱动将所述目标APP对应的AI模型加载至所述NPU;
所述NPU通过所述NPU控制器为所述AI模型分配第一寄存器和第二寄存器,并将所述第一寄存器的第一物理地址和所述第二寄存器的第二物理地址向所述主CPU发送,以使得所述主CPU将所述第一物理地址和所述第二物理地址分别映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址,所述第一寄存器属于所述N个寄存器;
所述主CPU接收所述NPU发送的所述第一物理地址和所述第二物理地址,并将所述第一物理地址和所述第二物理地址分别映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址;
当所述主CPU根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存,触发所述NPU控制器控制所述运算逻辑单元执行所述AI模型,并由所述NPU控制器将所述AI模型的执行结果写入所述第二寄存器;
根据所述第二虚拟地址,所述主CPU通过所述目标APP轮询所述第二虚拟内存,从所述第二寄存器中读取所述AI模型的执行结果。
21.根据权利要求20所述的方法,其特征在于,所述将所述第一物理地址和所述第二物理地址分别映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址包括:
所述主CPU通过所述NPU驱动接收所述NPU控制器发送的所述第一物理地址和所述第二物理地址,并通过所述NPU驱动将所述第一物理地址和所述第二物理地址分别映射到所述AI Service的虚拟内存空间,得到所述AI Service上第三虚拟内存的第三虚拟地址和第四虚拟内存的第四虚拟地址;
所述主CPU通过所述AI Service将所述第三虚拟地址和所述第四虚拟地址分别映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
22.根据权利要求21所述的方法,其特征在于,所述主CPU通过所述AI Service将所述第三虚拟地址和所述第四虚拟地址分别映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址包括:
所述主CPU通过所述目标APP接收所述AI Service发送的第三虚拟地址的内存句柄和第四虚拟地址的内存句柄;
所述主CPU通过所述目标APP将所述第三虚拟地址的内存句柄和所述第四虚拟地址的内存句柄分别映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
23.根据权利要求20所述的方法,其特征在于,所述将所述第一物理地址和所述第二物理地址分别映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址包括:
所述主CPU通过所述NPU驱动接收所述NPU控制器发送的所述第一物理地址和所述第二物理地址;
所述主CPU通过所述NPU驱动将所述第一物理地址和所述第二物理地址分别直接映射到所述目标APP的虚拟内存空间,得到所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二虚拟地址。
24.根据权利要求20-23中任一项所述的方法,其特征在于,所述将所述第一寄存器的第一物理地址和所述第二寄存器的第二物理地址向所述主CPU发送包括:
所述NPU将所述第一寄存器的第一物理地址和所述第二寄存器的第二物理地址向所述主CPU的NPU驱动发送。
25.一种主CPU与NPU的数据交互方法,其特征在于,所述方法应用于计算设备中,所述计算设备包括主CPU和NPU,所述主CPU上运行目标应用程序APP,所述主CPU包括AI服务AIService和NPU驱动,所述NPU包括NPU控制器和运算逻辑单元;所述方法包括:
所述主CPU通过所述AI Service和所述NPU驱动将所述目标APP对应的AI模型加载至所述NPU;
所述主CPU通过所述NPU驱动为所述AI模型分配第一内存,并将第一内存的地址映射为所述目标APP上第一虚拟内存的第一虚拟地址,所述第一内存为在所述NPU驱动上开辟的内存;
当所述主CPU根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存,所述主CPU通过所述NPU驱动向所述NPU控制器发送执行命令;
所述NPU根据所述执行命令通过所述NPU控制器控制所述运算逻辑单元执行所述AI模型,并通过所述NPU控制器将所述AI模型的执行结果向所述NPU驱动发送,由所述NPU驱动将所述AI模型的执行结果写入所述第一内存;
根据所述第一虚拟地址,所述主CPU通过所述目标APP轮询所述第一虚拟内存,从所述第一内存中读取所述AI模型的执行结果。
26.一种主CPU与NPU的数据交互方法,其特征在于,所述方法应用于计算设备中,所述计算设备包括主CPU和NPU,所述主CPU上运行目标应用程序APP,所述主CPU包括AI服务AIService和NPU驱动,所述NPU包括NPU控制器和运算逻辑单元;所述方法包括:
所述主CPU通过所述AI Service和所述NPU驱动将所述目标APP对应的AI模型加载至所述NPU;
所述主CPU通过所述NPU驱动为所述AI模型分配第一内存和第二内存,并将第一内存的地址和第二内存的地址映射为所述目标APP上第一虚拟内存的第一虚拟地址和第二虚拟内存的第二地址,所述第一内存和所述第二内存为在所述NPU驱动上开辟的内存;
当所述主CPU根据所述第一虚拟地址通过所述目标APP写所述第一虚拟内存,所述主CPU通过所述NPU驱动向所述NPU控制器发送执行命令;
所述NPU根据所述执行命令通过所述NPU控制器控制所述运算逻辑单元执行所述AI模型,并通过所述NPU控制器将所述AI模型的执行结果向所述NPU驱动发送,由所述NPU驱动将所述AI模型的执行结果写入所述第二内存;
根据所述第二虚拟地址,所述主CPU通过所述目标APP轮询所述第二虚拟内存,从所述第二内存中读取所述AI模型的执行结果。
27.一种计算设备,其特征在于,包括处理器,所述处理器与存储器耦合,所述存储器用于存储计算机程序或指令,所述处理器用于执行存储器中的所述计算机程序或指令,使得权利要求15-26中任一项所述的方法被执行。
28.一种芯片系统,其特征在于,所述芯片系统包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行计算机程序或指令,使得权利要求15-26中任一项所述的方法被执行。
29.一种计算机可读存储介质,包括指令,当所述指令在计算机上运行时,使得计算机执行如权利要求15-26中任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/109133 WO2022032628A1 (zh) | 2020-08-14 | 2020-08-14 | 一种主cpu与npu的数据交互方法及计算设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112513817A CN112513817A (zh) | 2021-03-16 |
CN112513817B true CN112513817B (zh) | 2021-10-01 |
Family
ID=74953161
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080004250.6A Active CN112513817B (zh) | 2020-08-14 | 2020-08-14 | 一种主cpu与npu的数据交互方法及计算设备 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP4195045A4 (zh) |
CN (1) | CN112513817B (zh) |
WO (1) | WO2022032628A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022205224A1 (zh) * | 2021-03-31 | 2022-10-06 | 华为技术有限公司 | 一种同步方法及装置 |
WO2022267049A1 (zh) * | 2021-06-25 | 2022-12-29 | 华为技术有限公司 | 人工智能模型的处理方法、装置、设备及可读存储介质 |
CN113867817A (zh) * | 2021-09-24 | 2021-12-31 | 深圳Tcl新技术有限公司 | 一种数据处理方法、装置、电子设备和存储介质 |
CN116848509A (zh) * | 2021-12-31 | 2023-10-03 | 华为技术有限公司 | 一种计算任务处理装置、方法及电子设备 |
CN115829826A (zh) * | 2022-11-10 | 2023-03-21 | 深圳云天励飞技术股份有限公司 | 模型存储优化方法及电子设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108985451A (zh) * | 2018-06-29 | 2018-12-11 | 百度在线网络技术(北京)有限公司 | 基于ai芯片的数据处理方法及设备 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8531471B2 (en) * | 2008-11-13 | 2013-09-10 | Intel Corporation | Shared virtual memory |
CN102693210B (zh) * | 2011-03-21 | 2017-03-01 | 中兴通讯股份有限公司 | 一种处理器间传递参数的方法及装置 |
US9342384B1 (en) * | 2014-12-18 | 2016-05-17 | Intel Corporation | Function callback mechanism between a central processing unit (CPU) and an auxiliary processor |
US10489877B2 (en) * | 2017-04-24 | 2019-11-26 | Intel Corporation | Compute optimization mechanism |
CN107729159B (zh) * | 2017-09-29 | 2021-01-15 | 华为技术有限公司 | 一种共享内存的地址映射方法及装置 |
CN109710544B (zh) * | 2017-10-26 | 2021-02-09 | 华为技术有限公司 | 内存访问方法、计算机系统以及处理装置 |
CN110929856B (zh) * | 2018-09-20 | 2023-08-18 | 合肥君正科技有限公司 | 一种npu与主cpu的数据交互方法和装置 |
US20200242459A1 (en) * | 2019-01-30 | 2020-07-30 | Intel Corporation | Instruction set for hybrid cpu and analog in-memory artificial intelligence processor |
CN109948780A (zh) * | 2019-03-14 | 2019-06-28 | 江苏集萃有机光电技术研究所有限公司 | 基于人工智能的辅助决策方法、装置及设备 |
CN111104459A (zh) * | 2019-08-22 | 2020-05-05 | 华为技术有限公司 | 存储设备、分布式存储系统以及数据处理方法 |
CN110851285B (zh) * | 2020-01-14 | 2020-04-24 | 支付宝(杭州)信息技术有限公司 | 一种基于gpu虚拟化的资源复用方法、装置及设备 |
-
2020
- 2020-08-14 WO PCT/CN2020/109133 patent/WO2022032628A1/zh unknown
- 2020-08-14 EP EP20949126.5A patent/EP4195045A4/en active Pending
- 2020-08-14 CN CN202080004250.6A patent/CN112513817B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108985451A (zh) * | 2018-06-29 | 2018-12-11 | 百度在线网络技术(北京)有限公司 | 基于ai芯片的数据处理方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
EP4195045A1 (en) | 2023-06-14 |
CN112513817A (zh) | 2021-03-16 |
WO2022032628A1 (zh) | 2022-02-17 |
EP4195045A4 (en) | 2023-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112513817B (zh) | 一种主cpu与npu的数据交互方法及计算设备 | |
US10678479B1 (en) | Registers for restricted memory | |
KR20210119436A (ko) | 분할 네트워크 가속 아키텍처 | |
CN111490946B (zh) | 基于OpenCL框架的FPGA连接实现方法及装置 | |
CN108235759A (zh) | 基于多操作系统的输入处理方法、装置及电子设备 | |
CN113096201B (zh) | 嵌入式视频图像深度学习方法、设备及存储介质 | |
CN109933199B (zh) | 基于手势的控制方法、装置、电子设备及存储介质 | |
CN112925737B (zh) | Pci异构系统数据融合方法、系统、设备及存储介质 | |
US20240166201A1 (en) | Driving behavior determining method and related device thereof | |
CN112099882A (zh) | 一种业务处理方法、装置及设备 | |
US11494321B1 (en) | State buffer memloc reshaping | |
CN114090289A (zh) | 共享内存数据调用方法、装置、电子设备及存储介质 | |
CN116360925A (zh) | 一种半虚拟化实现方法、装置、设备及介质 | |
CN111199276A (zh) | 数据处理方法及相关产品 | |
CN113849277B (zh) | 网卡测试方法、装置、计算机设备及计算机可读存储介质 | |
CN116137563A (zh) | 感知处理模块的分时复用方法、装置、电子设备和介质 | |
CN105187793A (zh) | 一种智能网络摄像机 | |
US20210224632A1 (en) | Methods, devices, chips, electronic apparatuses, and storage media for processing data | |
US11868872B1 (en) | Direct memory access operation for neural network accelerator | |
WO2021035394A1 (zh) | 分布式人工智能应用数据加速方法、系统及计算机设备 | |
US11789859B1 (en) | Address generation for page collision prevention | |
US10877552B1 (en) | Dynamic power reduction through data transfer request limiting | |
US12008466B1 (en) | Processor with control flow | |
US12001352B1 (en) | Transaction ordering based on target address | |
WO2024087513A1 (zh) | 应用场景的数据处理方法、系统、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |