CN110825514B - 人工智能芯片以及用于人工智能芯片的指令执行方法 - Google Patents

人工智能芯片以及用于人工智能芯片的指令执行方法 Download PDF

Info

Publication number
CN110825514B
CN110825514B CN201810910206.6A CN201810910206A CN110825514B CN 110825514 B CN110825514 B CN 110825514B CN 201810910206 A CN201810910206 A CN 201810910206A CN 110825514 B CN110825514 B CN 110825514B
Authority
CN
China
Prior art keywords
instruction
execution
code block
execution unit
memory
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
Application number
CN201810910206.6A
Other languages
English (en)
Other versions
CN110825514A (zh
Inventor
徐宁仪
黄龑
韩金宸
吴鹏
施佳鑫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kunlun Core Beijing Technology Co ltd
Original Assignee
Kunlun Core Beijing Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Kunlun Core Beijing Technology Co ltd filed Critical Kunlun Core Beijing Technology Co ltd
Priority to CN201810910206.6A priority Critical patent/CN110825514B/zh
Priority to JP2019125661A priority patent/JP7011627B2/ja
Priority to US16/505,127 priority patent/US11372673B2/en
Priority to KR1020190082871A priority patent/KR102407220B1/ko
Publication of CN110825514A publication Critical patent/CN110825514A/zh
Application granted granted Critical
Publication of CN110825514B publication Critical patent/CN110825514B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/463Program control block organisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本申请实施例公开了人工智能芯片以及用于人工智能芯片的指令执行方法。该人工智能芯片的一具体实施方式包括:指令存储器、数据存储器、至少一个通用执行部件和至少一个专用执行部件;指令存储器被配置成:接收包括至少一个代码块的内核代码;通用执行部件被配置成:接收代码块,锁定与所接收的代码块相关联的专用执行部件,以及将所接收的代码块中的指令发送到所锁定的专用执行部件;专用执行部件被配置成:执行所接收的指令,以及将执行结果存储在数据存储器中;数据存储器被配置成存储专用执行部件发送的执行结果。该实施方式避免在内核代码执行期间与CPU频繁通信,并且避免频繁加锁/解锁专用执行部件,提高了人工智能芯片的性能。

Description

人工智能芯片以及用于人工智能芯片的指令执行方法
技术领域
本申请实施例涉及计算机技术领域,具体涉及人工智能芯片以及用于人工智能芯片的指令执行方法。
背景技术
随着人工智能技术的快速发展,神经网络模型的规模也越来越大、训练数据也越来越多,从而使得利用专用的神经网络加速器来进行神经网络的训练与预测计算成为主流趋势。并且因此开发出了各种神经网络加速器,诸如,GPU(Graphics Processing Unit,图形处理器)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuits,专用集成电路)等神经网络加速器。
这些神经网络加速器可以针对神经网络中典型的、高计算密集型的计算任务(例如矩阵计算(或矩阵计算中涉及到的乘累加)、激活运算、向量运算等)进行特殊的优化。一般而言,神经网络加速器可以内置若干不同的执行单元,每个执行单元可以执行不同的计算任务,并且由主机的CPU(Central Processing Unit,中央处理单元)负责调度执行。
现有技术中,可以由GPU负责神经网络模型中计算密集型的计算任务,而由CPU负责控制GPU的运行。作为示例,CPU负责解析用户定义的静态计算图描述的深度学习模型,获得运算任务序列,将一个运算任务发送到GPU,然后等待GPU执行完运算任务,再将下一个运算任务发送GPU,……,以此类推。
发明内容
本申请实施例提出了人工智能芯片以及用于人工智能芯片的指令执行方法。
第一方面,本申请实施例提供了一种人工智能芯片,该人工智能芯片包括:指令存储器、数据存储器、至少一个通用执行部件和至少一个专用执行部件;指令存储器被配置成:接收中央处理单元发送的内核代码,内核代码包括至少一个代码块,至少一个代码块中的代码块与通用执行部件和专用执行部件相关联;通用执行部件被配置成:接收代码块,锁定与所接收的代码块相关联的专用执行部件,以及将所接收的代码块中的指令发送到所锁定的专用执行部件;专用执行部件被配置成:接收通用执行部件发送的指令,执行所接收的指令,以及将执行结果存储在数据存储器中;数据存储器被配置成存储专用执行部件发送的执行结果。
在一些实施例中,至少一个代码块中的代码块包括第一指令和第二指令集合;以及通用执行部件具体被配置成:响应于接收到代码块,执行第一指令,以锁定与所接收的代码块相关联的专用执行部件;将第二指令集合中的第二指令依次发送到所锁定的专用执行部件。
在一些实施例中,至少一个代码块中的代码块包括第一指令和第二指令集合;以及通用执行部件具体被配置成:响应于接收到代码块,执行第一指令,以锁定与所接收的代码块相关联的至少一个专用执行部件;对于第二指令集合中的第二指令,从所锁定的专用执行部件中确定执行该第二指令的专用执行部件,将该第二指令发送到所确定的专用执行部件。
在一些实施例中,人工智能芯片还包括存储有至少一个局部变量的值的局部控制存储器,局部控制存储器被配置成:接收通用执行部件发送的局部变量更新请求,局部变量更新请求包括预定局部变量的目标值;将预定局部变量的值更新为目标值。
在一些实施例中,局部控制存储器还被配置成向至少一个通用执行部件发送预定局部变量更新的通知;以及等待预定局部变量更新的通用执行部件还被配置成响应于接收到通知,继续执行所接收的代码块中的指令。
在一些实施例中,通用执行部件还被配置成:以轮询方式检测目标局部变量的值是否更新;响应于检测到目标局部变量的值更新,继续执行所接收的代码块中的指令。
在一些实施例中,人工智能芯片还包括至少一个计算集群,至少一个计算集群中的计算集群包括数据存储器、至少一个通用执行部件和至少一个专用执行部件。
在一些实施例中,人工智能芯片还包括全局控制存储器,计算集群还包括局部控制存储器,全局控制存储器存储有至少一个全局变量的值,局部控制存储器存储有至少一个局部变量的值;以及全局控制存储器被配置成:接收计算集群发送的全局变量更新请求,全局变量更新请求包括预定全局变量的目标值;将预定全局变量的值更新为目标值。
在一些实施例中,全局控制存储器还被配置成向至少一个局部控制存储器发送预定全局变量更新的通知;以及等待预定全局变量更新的局部控制存储器还被配置成响应于接收到通知,更新与预定全局变量关联的局部变量的值。
在一些实施例中,局部控制存储器还被配置成:以轮询方式检测目标全局变量的值是否更新;响应于检测到目标全局变量的值更新,更新与预定全局变量关联的局部变量的值。
在一些实施例中,在内核代码被执行期间,被通用执行部件锁定的专用执行部件不被解锁。
在一些实施例中,通用执行部件还被配置成:在执行第一指令之后,循环执行第二指令集合。
在一些实施例中,内核代码由中央处理单元对输入的数据流图进行解析获得,数据流图通过对神经网络模型的静态图进行映射获得。
第二方面,本申请实施例提供了一种用于人工智能芯片的指令执行方法,人工智能芯片包括指令存储器、数据存储器、至少一个通用执行部件和至少一个专用执行部件,指令存储器与中央处理单元通信连接,该方法包括:接收来自指令存储器的代码块,代码块是指令存储器从中央处理单元发送的内核代码中获取的,代码块与专用执行部件相关联;锁定与代码块相关联的专用执行部件;将代码块中的指令发送到所锁定的专用执行部件,专用执行部件被配置成执行所接收的指令以及将执行结果存储在数据存储器中。
在一些实施例中,代码块包括第一指令和第二指令集合;以及锁定与代码块相关联的专用执行部件,包括:执行第一指令,以锁定与代码块相关联的专用执行部件;将代码块中的指令发送到所锁定的专用执行部件,包括:将第二指令集合中的第二指令依次发送到所锁定的专用执行部件。
在一些实施例中,代码块包括第一指令和第二指令集合;以及锁定与代码块相关联的专用执行部件,包括:执行第一指令,以锁定与代码块相关联的至少一个专用执行部件;将代码块中的指令发送到所锁定的专用执行部件,包括:对于第二指令集合中的第二指令,从所锁定的专用执行部件中确定执行该第二指令的专用执行部件,将该第二指令发送到所确定的专用执行部件。
在一些实施例中,人工智能芯片还包括存储有至少一个局部变量的值的局部控制存储器,局部控制存储器被配置成:接收通用执行部件发送的局部变量更新请求,局部变量更新请求包括预定局部变量的目标值;将预定局部变量的值更新为目标值。
在一些实施例中,人工智能芯片还包括存储有至少一个局部变量的值的局部控制存储器;以及该方法还包括:响应于接收到目标局部变量更新的通知,继续执行代码块中的指令。
在一些实施例中,人工智能芯片还包括存储有至少一个局部变量的值的局部控制存储器;以及该方法还包括:以轮询方式检测目标局部变量的值是否更新;响应于检测到目标局部变量的值更新,继续执行代码块中的指令。
在一些实施例中,人工智能芯片还包括至少一个计算集群,至少一个计算集群中的计算集群包括数据存储器、至少一个通用执行部件和至少一个专用执行部件。
在一些实施例中,人工智能芯片还包括全局控制存储器,计算集群还包括局部控制存储器,全局控制存储器存储有至少一个全局变量的值,局部控制存储器存储有至少一个局部变量的值;以及全局控制存储器被配置成:接收计算集群发送的全局变量更新请求,全局变量更新请求包括预定全局变量的目标值;将预定全局变量的值更新为目标值。
在一些实施例中,全局控制存储器还被配置成向至少一个局部控制存储器发送预定全局变量更新的通知;以及等待预定全局变量更新的局部控制存储器还被配置成响应于接收到通知,更新与预定全局变量关联的局部变量的值。
在一些实施例中,局部控制存储器还被配置成:以轮询方式检测目标全局变量的值是否更新;响应于检测到目标全局变量的值更新,更新与预定全局变量关联的局部变量的值。
在一些实施例中,在内核代码被执行期间,被通用执行部件锁定的专用执行部件不被解锁。
在一些实施例中,该方法还包括:在执行第一指令之后,循环执行第二指令集合。
在一些实施例中,内核代码由中央处理单元对输入的数据流图进行解析获得,数据流图通过对神经网络模型的静态图进行映射获得。
第三方面,本申请实施例提供了一种用于人工智能芯片的指令执行装置,人工智能芯片包括指令存储器、数据存储器、至少一个通用执行部件和至少一个专用执行部件,指令存储器与中央处理单元通信连接,该装置包括:代码接收单元,被配置成接收来自指令存储器的代码块,代码块是指令存储器从中央处理单元发送的内核代码中获取的,代码块与专用执行部件相关联;锁定单元,被配置成锁定与代码块相关联的专用执行部件;指令发送单元,被配置成将代码块中的指令发送到所锁定的专用执行部件,专用执行部件被配置成执行所接收的指令以及将执行结果存储在数据存储器中。
在一些实施例中,代码块包括第一指令和第二指令集合;以及锁定单元具体被配置成:执行第一指令,以锁定与代码块相关联的专用执行部件;指令发送单元具体被配置成:将第二指令集合中的第二指令依次发送到所锁定的专用执行部件。
在一些实施例中,代码块包括第一指令和第二指令集合;以及锁定单元具体被配置成:执行第一指令,以锁定与代码块相关联的至少一个专用执行部件;指令发送单元具体被配置成:对于第二指令集合中的第二指令,从所锁定的专用执行部件中确定执行该第二指令的专用执行部件,将该第二指令发送到所确定的专用执行部件。
在一些实施例中,人工智能芯片还包括存储有至少一个局部变量的值的局部控制存储器,局部控制存储器被配置成:接收通用执行部件发送的局部变量更新请求,局部变量更新请求包括预定局部变量的目标值;将预定局部变量的值更新为目标值。
在一些实施例中,人工智能芯片还包括存储有至少一个局部变量的值的局部控制存储器;以及该装置还包括继续执行单元,继续执行单元被配置成:响应于接收到目标局部变量更新的通知,继续执行代码块中的指令。
在一些实施例中,人工智能芯片还包括存储有至少一个局部变量的值的局部控制存储器;以及该装置还包括:检测单元,被配置成以轮询方式检测目标局部变量的值是否更新;继续执行单元,被配置成响应于检测到目标局部变量的值更新,继续执行代码块中的指令。
在一些实施例中,人工智能芯片还包括至少一个计算集群,至少一个计算集群中的计算集群包括数据存储器、至少一个通用执行部件和至少一个专用执行部件。
在一些实施例中,人工智能芯片还包括全局控制存储器,计算集群还包括局部控制存储器,全局控制存储器存储有至少一个全局变量的值,局部控制存储器存储有至少一个局部变量的值;以及全局控制存储器被配置成:接收计算集群发送的全局变量更新请求,全局变量更新请求包括预定全局变量的目标值;将预定全局变量的值更新为目标值。
在一些实施例中,全局控制存储器还被配置成向至少一个局部控制存储器发送预定全局变量更新的通知;以及等待预定全局变量更新的局部控制存储器还被配置成响应于接收到通知,更新与预定全局变量关联的局部变量的值。
在一些实施例中,局部控制存储器还被配置成:以轮询方式检测目标全局变量的值是否更新;响应于检测到目标全局变量的值更新,更新与预定全局变量关联的局部变量的值。
在一些实施例中,在内核代码被执行期间,被通用执行部件锁定的专用执行部件不被解锁。
在一些实施例中,该装置还包括:循环单元,被配置成在执行第一指令之后,循环执行第二指令集合。
在一些实施例中,内核代码由中央处理单元对输入的数据流图进行解析获得,数据流图通过对神经网络模型的静态图进行映射获得。
第四方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机程序,其中,计算机程序被执行部件执行时实现如上述第二方面中任一实现方式描述的方法。
第五方面,本申请实施例提供了一种电子设备,包括:中央处理单元、存储装置和至少一个如第一方面种任一实现方式描述的人工智能芯片。
本申请实施例提供的人工智能芯片以及用于人工智能芯片的指令执行方法,通过指令存储器从CPU接收包括至少一个代码块的内核代码,之后通用执行部件锁定与接收的代码块关联的专用执行部件以及将代码块中的指令发送到所锁定的专用执行部件,最后专用执行部件执行所接收的执行以及将执行结果发送到数据存储器进行存储,从而避免在内核代码执行期间与CPU频繁通信,并且避免频繁加锁/解锁专用执行部件,提高了人工智能芯片的性能。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是根据本申请的一个实施例可以应用于其中的示例性系统架构图;
图2是根据本申请的人工智能芯片的一个实施例的工作时序图;
图3是根据本申请的人工智能芯片的一个应用场景的示意图;
图4是根据本申请的人工智能芯片的另一实施例的工作时序图;
图5是根据本申请的用于人工智能芯片的指令执行方法的一个实施例的流程图;
图6是根据本申请的用于人工智能芯片的指令执行装置的一个实施例的结构示意图;
图7是适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的人工智能芯片、用于人工智能芯片的指令执行方法或用于人工智能芯片的指令执行装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括CPU 11、人工智能(Artificial Intelligence,AI)芯片12和总线13。总线13用以在CPU 11和人工智能芯片12之间提供通信链路的介质,例如,PCIE(Peripheral Component Interconnect Express,一种高速串行计算机扩展总线标准)总线等。
CPU 11可以通过总线13与人工智能芯片12进行交互,以发送和接收消息。CPU 11可以将内核代码发送到人工智能芯片12,以及接收人工智能芯片12返回的处理结果。
人工智能芯片12也被称为AI加速器或计算卡,专门用于处理人工智能应用中的大量计算密集型的计算任务。人工智能芯片12可以包括指令存储器、数据存储器、一个或多个通用执行部件和一个或多个专用执行部件。指令存储器可以接收CPU 11发送的内核代码。通用执行部件可以接收指令存储器分发的代码块或从指令存储器主动获取关联的代码块,然后将指令发送到预先显式指定的专用执行部件。专用执行部件可以执行所接收的指令并将执行结果发送到数据存储器进行存储。数据存储器可以存储专用执行部件的指令执行结果。
需要说明的是,本申请实施例所提供的用于人工智能芯片的指令执行方法一般由通用执行部件执行,相应地,用于人工智能芯片的指令执行装置一般设置于通用执行部件中。
应该理解,图1中的CPU、总线、人工智能芯片、指令存储器、数据存储器、通用执行部件和专用执行部件的数目仅仅是示意性的。根据实现需要,可以具有任意合适数目的CPU、总线、人工智能芯片、指令存储器、数据存储器、通用执行部件和专用执行部件。
继续参考图2,示出了根据本申请的人工智能芯片的一个实施例的工作时序200。
本实施例的人工智能芯片可以包括指令存储器、数据存储器、至少一个通用执行部件和至少一个专用执行部件。其中,指令存储器可以被配置成:接收中央处理单元发送的内核代码,内核代码包括至少一个代码块,至少一个代码块中的代码块与通用执行部件和专用执行部件相关联。通用执行部件可以被配置成:接收代码块,锁定与所接收的代码块相关联的专用执行部件,以及将所接收的代码块中的指令发送到所锁定的专用执行部件。专用执行部件可以被配置成:接收通用执行部件发送的指令,执行所接收的指令,以及将执行结果存储在数据存储器中。数据存储器可以被配置成存储专用执行部件发送的执行结果。
如图2所示,在步骤201中,指令存储器接收CPU发送的内核代码。
在本实施例中,指令存储器(例如,图1所示的指令存储器)可以接收主机的CPU(例如,图1所示的CPU)发送的内核代码。其中,内核代码包括至少一个代码块。上述至少一个代码块中的每个代码块与一个通用执行部件和一个或多个专用执行部件相关联。
在本实施例的一些可选实现方式中,通用执行部件可以包括可编程的通用计算图形处理器,例如,ARM(Advanced RISC Machine或Acorn RISC Machine,进阶精简指令集机器)核、51核等。专用执行部件可以包括专用于处理神经网络模型中的计算密集型的计算任务的执行部件,可以包括但不限于以下至少一种:卷积引擎、单数据处理器、平面数据处理器、通道数据处理器、专用内存和数据重构引擎。其中,卷积引擎用于神经网络模型的卷积层的数据处理,单数据处理器用于神经网络模型的激活函数层的数据处理,平面数据处理器用于神经网络模型的池化层的数据处理、通道数据处理器用于神经网络模型的标准化层的数据处理,而专用内存和数据重构引擎用于张量重塑和复制操作存储器到存储器的转换加速。
在本实施例的一些可选的实现方式中,内核代码可以由CPU对输入的数据流图进行解析而获得,例如,按照约定的编程协议将数据流图转化为特定编程语言(例如,C、C++、Java等)的内核代码。这里,数据流图可以通过对用户输入的神经网络模型的静态图进行映射而获得。
这里,神经网络模型可以是人工神经网络(Artificial Neural Network,ANN)。人工神经网络是人们基于对人脑神经网络的基本认识,以数学和物理方法以及从信息处理的角度对人脑神经网络进行抽象而建立的某种简单模型。例如,神经网络模型可以包括卷积神经网络(Convolutional Neural Network,CNN)模型和深度神经网络(Deep NeuralNetwork,DNN)模型等等。
在步骤202中,通用执行部件接收代码块。
在本实施例中,通用执行部件(例如,图1所示的通用执行部件)可以接收来自指令存储器的代码块。
这里,通用执行部件可以直接接收关联的代码块。例如,通用执行部件无需向指令存储器发送获取请求,直接接收指令存储器根据代码块与通用执行部件之间的关联关系下发的代码块。
另外,通用执行部件也可以直接接收内核代码,然后从内核代码中提取关联的代码块。此外,通用执行部件也可以通过向指令存储器发送请求来获取关联的代码块。
在本实施例的一些可选的实现方式中,上述至少一个代码块中的每个代码块可以包括第一指令和第二指令集合。其中,第一指令用于被通用执行部件执行时锁定与代码块关联的专用执行部件。第二指令集中的每条第二指令用于被专用执行部件执行时处理计算密集型的计算任务。第二指令集合中的第二指令在第一指令执行之后(即锁定专用执行部件之后)被通用执行部件发送到专用执行部件。
作为示例,对于包括如下代码“lock(dma);loadDataToL2();”的代码块,“lock(dma)”为该代码块的第一指令,“loadDataToL2()”为该代码块的第二指令。其中,第一指令用于锁定名称为“dma”的专用执行部件,第二指令用于将数据加载到二级缓存。
在本实施例的一些可选的实现方式中,代码块还可以包括循环片段。其中,循环片段可以包括第二指令集合。也就是说,第二指令集合中的各第二指令在第一指令被执行之后被循环执行。
作为示例,对于包括如下代码“lock(mac);while(1){convolution();}”的代码块,“lock(mac)”为该代码块的第一指令,“while(1){convolution();}”为该代码块的循环片段,“convolution()”为循环片段中的第二指令。其中,第一指令用于锁定名称为“mac”的专用执行部件,第二指令用于进行卷积运算,循环片段用于循环执行第二指令(即,循环执行卷积运算)。
在步骤203中,通用执行部件锁定专用执行部件。
在本实施例中,响应于接收到关联的代码块,通用执行部件可以锁定与所接收的代码块相关联的专用执行部件。作为示例,若通用执行部件接收到包括如下代码“lock(dma);loadDataToL2();”的代码块,则可以锁定名称为“dma”的专用执行部件。
由于专用执行部件可以被任一通用执行部件调用,因此,为了避免通用执行部件在调用专用执行部件时产生冲突,需要对专用执行部件进行锁定。通用执行部件可以通过各种适合的方式锁定专用执行部件。例如,采用锁的机制(即,每个专用执行部件可以具有一个可被调用的锁。这里,锁可以通过软件编程的方法来实现)。通过调用专用执行部件的锁的加锁方法可以实现锁定专用执行部件(即,被锁定的专用执行部件无法被其他通用执行部件调用)。
需要说明的是,通用执行部件可以锁定一个专用执行部件,也可以锁定一个以上的专用执行部件。本领域的技术人员可以根据实际应用场景的需要进行设置,本申请对此不作具体限定。
在步骤204中,通用执行部件将代码块中的指令发送到专用执行部件。
在本实施例中,在锁定与所接收的代码块关联的专用执行部件之后,通用执行部件可以将接收的代码块中用于处理计算密集型任务的指令发送到所锁定的专用执行部件。
在本实施例的一些可选的实现方式中,当锁定一个专用执行部件时,通用执行部件可以将第二指令集合中的各第二指令按照执行顺序依次发送到所锁定的专用执行部件。
在本实施例的一些可选的实现方式中,当锁定一个以上的专用执行部件时,对于第二指令集合中的每条第二指令,通用执行部件可以首先从锁定的专用执行部件中确定执行该第二指令的专用执行部件,然后将该第二指令发送到所确定的专用执行部件。
在步骤205中,专用执行部件执行所接收的指令。
在本实施例中,响应于接收到通用执行部件发送的指令,专用执行部件可以执行所接收的指令。
在步骤206中,专用执行部件将执行结果发送到数据存储器。
本实施例中,专用执行部件在指令执行完成之后,将执行结果发送到数据存储器。这里,数据存储器可以包括一级缓存、二级缓存、三级缓存等等。
在步骤207中,数据存储器存储执行结果。
本实施例中,数据存储器可以接收专用执行部件的执行结果,并将接收的执行结果进行存储。
从图2的工作时序中可以看出,与频繁加锁/解锁专用执行部件不同,本申请的人工智能芯片在内核代码的整个执行期间,专用执行部件一直处于被通用执行部件锁定的状态,从而避免了频繁加锁/解锁的过程,从而提高了人工智能芯片的性能。
如果人工智能芯片每完成一个计算任务就需要与主机的CPU上运行的应用程序进行通讯以接收下一个任务,那么在人工智能芯片性能非常高、计算任务执行时间非常短的情形下就会明显影响人工智能芯片的性能。举例来说,若人工智能芯片每次运算耗时5us,而人工智能芯片与CPU通讯耗时为10us数量级,则相当于人工智能芯片有约三分之二的时间是闲置的,等于浪费了人工智能芯片的大半性能。
而在本实施例中,人工智能芯片仅需要与CPU通讯一次以获取神经网络模型的内核代码,而在内核代码的整个执行期间,人工智能芯片并不需要与CPU进行通讯,也就是说,人工智能芯片基本不存在等待时间,从而可以显著提高人工智能芯片的性能。
继续参考图3,其示出了根据本申请的人工智能芯片的一个应用场景。图3图示的是对某神经网络模型(例如人脸识别模型)映射得到的数据流图。在该数据流图中,U1~U6分别指代不同的专用执行部件,箭头指示数据流的方向。实现该数据流图的内核代码如下:
Figure BDA0001761658060000131
其中,上述内核代码包括6个代码块(即,数字0~5之后的代码片段)。CPU将上述内核代码发送到人工智能芯片的指令存储器。指令存储器可以首先获取各通用执行部件的标识(通过指令“get_core_id()”来获取,这里,标识的取值分别为数字0到5),然后将代码块“lock(U1);loadDataToL2();”发送到标识为0的通用执行部件,将代码块“lock(U2);while(1){convolution();}”发送到标识为1的通用执行部件,……,将代码块“lock(U6);……;”发送到标识为5的通用执行部件。标识为0的通用执行部件接收到代码块之后,锁定专用执行部件U1,然后将指令“loadDataToL2()”发送到专用执行部件U1。标识为1的通用执行部件接收到代码块之后,锁定专用执行部件U2,然后将指令“convolution()”不断地发送到专用执行部件U2。以此类推。专用执行部件U1~U6将指令执行结果发送到数据存储器进行存储。
本申请的上述实施例提供的人工智能芯片,通过指令存储器从CPU接收包括至少一个代码块的内核代码,之后通用执行部件锁定与接收的代码块关联的专用执行部件以及将代码块中的指令发送到所锁定的专用执行部件,最后专用执行部件执行所接收的执行以及将执行结果发送到数据存储器进行存储,从而避免在内核代码执行期间与CPU频繁通信,并且避免频繁加锁/解锁专用执行部件,提高了人工智能芯片的性能。
进一步参考图4,其示出了根据本申请的人工智能芯片的另一实施例的工作时序400。
本实施例的人工智能芯片可以包括指令存储器、数据存储器、局部控制存储器、至少一个通用执行部件和至少一个专用执行部件。其中,指令存储器可以被配置成:接收中央处理单元发送的内核代码,内核代码包括至少一个代码块,至少一个代码块中的代码块与通用执行部件和专用执行部件相关联。通用执行部件可以被配置成:接收代码块,锁定与所接收的代码块相关联的专用执行部件,以及将所接收的代码块中的指令发送到所锁定的专用执行部件。专用执行部件可以被配置成:接收通用执行部件发送的指令,执行所接收的指令,以及将执行结果存储在数据存储器中。数据存储器可以被配置成存储专用执行部件发送的执行结果。局部控制存储器可以存储有至少一个局部变量的值。局部控制存储器可以被配置成:接收通用执行部件发送的局部变量更新请求,局部变量更新请求包括预定局部变量的目标值;将预定局部变量的值更新为目标值。
如图4所示,在步骤401中,指令存储器接收CPU发送的内核代码。
在本实施例中,指令存储器(例如,图1所示的指令存储器)可以接收主机的CPU(例如,图1所示的CPU)发送的内核代码。其中,内核代码包括至少一个代码块。上述至少一个代码块中的每个代码块与一个通用执行部件和一个或多个专用执行部件相关联。
在步骤402中,通用执行部件接收代码块。
在本实施例中,通用执行部件(例如,图1所示的通用执行部件)可以接收来自指令存储器的代码块。
在步骤403中,通用执行部件锁定专用执行部件。
在本实施例中,响应于接收到关联的代码块,通用执行部件可以锁定与所接收的代码块相关联的专用执行部件。作为示例,若通用执行部件接收到包括如下代码“lock(dma);loadDataToL2();”的代码块,则可以锁定名称为“dma”的专用执行部件。
然后,通用执行部件进入等待状态,等待局部控制存储器中预定局部变量的更新通知。
在步骤404中,局部控制存储器更新预定局部变量的值。
在本实施例中,局部控制存储器可以接收其他通用执行部件发送的局部变量更新请求,然后将预定局部变量的值更新为目标值。其中,局部更新请求中包括预定局部变量的目标值。这里,局部变量的取值可以为二进制数值,如0或1。局部变量的取值也可以是其他预设的数值,本申请对此不作具体限定。
在步骤405中,局部控制存储器向通用执行部件发送通知。
在本实施例中,局部控制存储器可以向各通用执行部件发送指示上述预定局部变量更新的通知。
在步骤406中,通用执行部件将代码块中的指令发送到专用执行部件。
在本实施例中,响应于接收到指示预定局部变量更新的通知,通用执行部件可以将接收的代码块中用于处理计算密集型任务的指令发送到所锁定的专用执行部件。
在步骤407中,专用执行部件执行所接收的指令。
在本实施例中,响应于接收到通用执行部件发送的指令,专用执行部件可以执行所接收的指令。
在步骤408中,专用执行部件将执行结果发送到数据存储器。
本实施例中,专用执行部件在指令执行完成之后,将执行结果发送到数据存储器。这里,数据存储器可以包括一级缓存、二级缓存、三级缓存等等。
在步骤409中,数据存储器存储执行结果。
本实施例中,数据存储器可以接收专用执行部件的执行结果,并将接收的执行结果进行存储。
从图4的工作时序中可以看出,通过设置局部控制存储器实现了任意两个通用执行部件之间的同步,从而保证内核代码的各个代码块按照期望的顺序执行,并且使得人工智能芯片的控制更加灵活。
尽管图4中图示了通用执行部件锁定专用执行部件之后进入等待状态以及局部控制存储器向通用执行部件发送通知,但本实施例并不限于此。
在本实施例的一些可选的实现方式中,通用执行部件还可以被配置成:以轮询方式检测目标局部变量的值是否更新;响应于检测到所述目标局部变量的值更新,继续执行所接收的代码块中的指令。
在本实施例的一些可选的实现方式中,人工智能芯片还可以包括至少一个计算集群,每个计算集群可以包括数据存储器、至少一个通用执行部件和至少一个专用执行部件。各计算集群可以共用一个指令存储器。
可选地,每个计算集群还可以包括指令存储器。每个计算集群中的指令存储器可以与中央处理单元通信连接。
可选地,人工智能芯片还可以包括全局控制存储器,每个计算集群还包括可以局部控制存储器。全局控制存储器可以存储有至少一个全局变量的值,局部控制存储器可以存储有至少一个局部变量的值。全局控制存储器可以被配置成:接收计算集群发送的全局变量更新请求,全局变量更新请求包括预定全局变量的目标值;将预定全局变量的值更新为目标值。
可选地,全局控制存储器还可以被配置成向至少一个局部控制存储器发送预定全局变量更新的通知;以及等待预定全局变量更新的局部控制存储器还被配置成响应于接收到通知,更新与预定全局变量关联的局部变量的值。
可选地,局部控制存储器还被配置成:以轮询方式检测目标全局变量的值是否更新;响应于检测到目标全局变量的值更新,更新与预定全局变量关联的局部变量的值(以及向各通用执行部件发送指示关联的局部变量更新的通知)。
通过设置多个计算集群,可以使得人工智能芯片能够处理复杂的神经网络模型,例如包括多个简单模型的复杂神经网络模型。并且,通过设置全局控制存储器可以实现不同的计算集群之间的同步,从而可以保证人工智能芯片在处理多个简单模型时能够按照期望的顺序执行,进一步使得人工智能芯片的控制更加灵活。
从图4中可以看出,与图2对应的实施例相比,本实施例中的人工智能芯片还包括局部控制存储器。由此,本实施例描述的方案可以实现了不同的通用执行部件之间的同步,从而保证内核代码的各个代码块按照期望的顺序执行,并且使得人工智能芯片的控制更加灵活。
进一步参考图5,示出了根据本申请的用于人工智能芯片的指令执行方法的一个实施例的流程500。该用于人工智能芯片的指令执行方法,可以包括以下步骤:
步骤501,接收来自指令存储器的代码块。
在本实施例中,人工智能芯片包括指令存储器、数据存储器、至少一个通用执行部件和至少一个专用执行部件。指令存储器与中央处理单元通信连接。用于人工智能芯片的指令执行方法的执行主体(例如,图1的人工智能芯片12的通用执行部件)可以接收来自指令存储器的代码块。其中,代码块是指令存储器从主机的CPU发送的内核代码中获取的,代码块与专用执行部件相关联。
在本实施例的一些可选的实现方式中,内核代码可以由CPU对输入的数据流图进行解析而获得,例如,按照约定的编程协议将数据流图转化为特定编程语言(例如,C、C++、Java等)的内核代码。这里,数据流图可以通过对用户输入的神经网络模型的静态图进行映射而获得。
在本实施例的一些可选的实现方式中,代码块可以包括第一指令和第二指令集合。其中,第一指令用于被通用执行部件执行时锁定与代码块关联的专用执行部件。第二指令集中的每条第二指令用于被专用执行部件执行时处理计算密集型的计算任务。第二指令集合中的第二指令在第一指令执行之后(即锁定专用执行部件之后)被通用执行部件发送到专用执行部件。
作为示例,对于包括如下代码“lock(dma);loadDataToL2();”的代码块,“lock(dma)”为该代码块的第一指令,“loadDataToL2()”为该代码块的第二指令。其中,第一指令用于锁定名称为“dma”的专用执行部件,第二指令用于将数据加载到二级缓存。
在本实施例的一些可选的实现方式中,代码块还可以包括循环片段。其中,循环片段可以包括第二指令集合。也就是说,第二指令集合中的各第二指令在第一指令被执行之后被循环执行。
作为示例,对于包括如下代码“lock(mac);while(){convolution();}”的代码块,“lock(mac)”为该代码块的第一指令,“while(1){convolution();}”为该代码块的循环片段,“convolution()”为循环片段中的第二指令。其中,第一指令用于锁定名称为“mac”的专用执行部件,第二指令用于进行卷积运算,循环片段用于循环执行第二指令(即,循环执行卷积运算)。
步骤502,锁定与代码块相关联的专用执行部件。
在本实施例中,上述执行主体可以锁定与代码块相关联的专用执行部件。作为示例,若通用执行部件接收到包括如下代码“lock(dma);loadDataToL2();”的代码块,则可以执行第一指令“lock(dma)”,以锁定名称为“dma”的专用执行部件。
需要说明的是,通用执行部件可以锁定一个专用执行部件,也可以锁定一个以上的专用执行部件。
步骤503,将代码块中的指令发送到所锁定的专用执行部件。
在本实施例中,在锁定与代码块关联的专用执行部件之后,上述执行主体可以将接收的代码块中用于处理计算密集型任务的指令发送到所锁定的专用执行部件。其中,专用执行部件被配置成执行所接收的指令以及将执行结果存储在数据存储器中。
作为一个示例,当锁定一个专用执行部件时,上述执行主体可以将代码块的第二指令集合中的第二指令按照执行顺序依次发送到所锁定的专用执行部件。
在另一示例中,当锁定一个以上的专用执行部件时,对于代码块中的第二指令集合中的每条第二指令,上述执行主体可以首先从所锁定的专用执行部件中确定执行该第二指令的专用执行部件,然后将该第二指令发送到所确定的专用执行部件。
在本实施例的一些可选的实现方式中,人工智能芯片还可以包括存储有至少一个局部变量的值的局部控制存储器。其中,局部控制存储器可以被配置成:接收通用执行部件发送的局部变量更新请求,局部变量更新请求包括预定局部变量的目标值;将预定局部变量的值更新为目标值。
可选地,该用于人工智能芯片的指令执行方法还可以包括:响应于接收到目标局部变量更新的通知,继续执行代码块中的指令。
作为示例,代码块中的指令在执行时需要其他通用执行部件的执行结果。在此情形下,上述执行主体可以在锁定专用执行部件之后处于等待状态。其他通用执行部件在操作执行完成之后,向局部控制存储器发送局部变量A的更新请求。局部控制存储器更新局部变量A之后,向上述执行主体发送局部变量A更新的通知。上述执行主体接收到该通知之后,继续执行代码块中的指令。
可选地,该用于人工智能芯片的指令执行方法还可以包括:以轮询方式检测目标局部变量的值是否更新;响应于检测到目标局部变量的值更新,继续执行代码块中的指令。
在本实施例的一些可选的实现方式中,人工智能芯片还可以包括至少一个计算集群,每个计算集群可以包括数据存储器、至少一个通用执行部件和至少一个专用执行部件。各计算集群可以共用一个指令存储器。
可选地,每个计算集群还可以包括指令存储器。每个计算集群中的指令存储器可以与中央处理单元通信连接。
可选地,人工智能芯片还可以包括全局控制存储器,每个计算集群还包括可以局部控制存储器。全局控制存储器可以存储有至少一个全局变量的值,局部控制存储器可以存储有至少一个局部变量的值。全局控制存储器可以被配置成:接收计算集群发送的全局变量更新请求,全局变量更新请求包括预定全局变量的目标值;将预定全局变量的值更新为目标值。
可选地,全局控制存储器还可以被配置成向至少一个局部控制存储器发送预定全局变量更新的通知。等待预定全局变量更新的局部控制存储器还可以被配置成响应于接收到通知,更新与预定全局变量关联的局部变量的值。
可选地,局部控制存储器还可以被配置成:以轮询方式检测目标全局变量的值是否更新;响应于检测到目标全局变量的值更新,更新与预定全局变量关联的局部变量的值(以及向各通用执行部件发送指示关联的局部变量更新的通知)。
通过设置多个计算集群,可以使得人工智能芯片能够处理复杂的神经网络模型,例如包括多个简单模型的复杂神经网络模型。并且,通过设置全局控制存储器可以实现不同的计算集群之间的同步,从而可以保证人工智能芯片在处理多个简单模型时能够按照期望的顺序执行,进一步使得人工智能芯片的控制更加灵活。
本申请的上述实施例提供的用于人工智能芯片的指令执行方法,通过接收来自指令存储器的代码块,之后锁定与代码块关联的专用执行部件,最后将代码块中的指令发送到所锁定的专用执行部件,从而避免在内核代码执行期间与CPU频繁通信,并且避免频繁加锁/解锁专用执行部件,提高了人工智能芯片的性能。
进一步参考图6,作为对图5所示方法的实现,本申请提供了一种用于人工智能芯片的指令执行装置的一个实施例,该装置实施例与图5所示的方法实施例相对应,该装置具体可以应用于人工智能芯片的通用执行部件中。
如图6所示,本实施例的用于人工智能芯片的指令执行装置600可以包括代码接收单元601、锁定单元602和指令发送单元603。其中,代码接收单元601被配置成接收来自指令存储器的代码块,代码块是指令存储器从中央处理单元发送的内核代码中获取的,代码块与专用执行部件相关联;锁定单元602被配置成锁定与代码块相关联的专用执行部件;而指令发送单元603被配置成将代码块中的指令发送到所锁定的专用执行部件,专用执行部件被配置成执行所接收的指令以及将执行结果存储在数据存储器中。
在本实施例中,人工智能芯片可以包括指令存储器、数据存储器、至少一个通用执行部件和至少一个专用执行部件。指令存储器与中央处理单元通信连接。用于人工智能芯片的指令执行装置600的上述代码接收单元601可以接收来自指令存储器的代码块。其中,代码块是指令存储器从主机的CPU发送的内核代码中获取的,代码块与专用执行部件相关联。
在本实施例的一些可选的实现方式中,内核代码可以由CPU对输入的数据流图进行解析而获得,例如,按照约定的编程协议将数据流图转化为特定编程语言(例如,C、C++、Java等)的内核代码。这里,数据流图可以通过对用户输入的神经网络模型的静态图进行映射而获得。
在本实施例中,上述锁定单元602可以锁定与代码块相关联的专用执行部件。作为示例,若通用执行部件接收到包括如下代码“lock(dma);loadDataToL2();”的代码块,则可以执行第一指令“lock(dma)”,以锁定名称为“dma”的专用执行部件。
在本实施例的一些可选的实现方式中,代码块可以包括第一指令和第二指令集合。锁定单元602具体可以被配置成:执行第一指令,以锁定与代码块相关联的专用执行部件。
在本实施例中,在锁定与代码块关联的专用执行部件之后,上述指令发送单元603可以将接收的代码块中用于处理计算密集型任务的指令发送到所锁定的专用执行部件。其中,专用执行部件被配置成执行所接收的指令以及将执行结果存储在数据存储器中。
在本实施例的一些可选的实现方式中,,指令发送单元603具体可以被配置成:将第二指令集合中的第二指令依次发送到所锁定的专用执行部件。
在本实施例的一些可选的实现方式中,,指令发送单元603具体可以被配置成:对于第二指令集合中的第二指令,从所锁定的专用执行部件中确定执行该第二指令的专用执行部件,将该第二指令发送到所确定的专用执行部件。
在本实施例的一些可选的实现方式中,人工智能芯片还可以包括存储有至少一个局部变量的值的局部控制存储器。局部控制存储器可以被配置成:接收通用执行部件发送的局部变量更新请求,局部变量更新请求包括预定局部变量的目标值;将预定局部变量的值更新为目标值。
在本实施例的一些可选的实现方式中,人工智能芯片还可以包括存储有至少一个局部变量的值的局部控制存储器。该装置600还可以包括继续执行单元。其中,继续执行单元可以被配置成:响应于接收到目标局部变量更新的通知,继续执行代码块中的指令。
在本实施例的一些可选的实现方式中,人工智能芯片还可以包括存储有至少一个局部变量的值的局部控制存储器。该装置600还可以包括检测单元和继续执行单元。其中,检测单元可以被配置成以轮询方式检测目标局部变量的值是否更新;继续执行单元可以被配置成响应于检测到目标局部变量的值更新,继续执行代码块中的指令。
在本实施例的一些可选的实现方式中,人工智能芯片还包括至少一个计算集群。每个计算集群可以包括数据存储器、至少一个通用执行部件和至少一个专用执行部件。
在本实施例的一些可选的实现方式中,人工智能芯片还可以包括全局控制存储器,每个计算集群还可以包括局部控制存储器。其中,全局控制存储器存储有至少一个全局变量的值,局部控制存储器存储有至少一个局部变量的值。全局控制存储器可以被配置成:接收计算集群发送的全局变量更新请求,全局变量更新请求包括预定全局变量的目标值;将预定全局变量的值更新为目标值。
在本实施例的一些可选的实现方式中,全局控制存储器还可以被配置成向至少一个局部控制存储器发送预定全局变量更新的通知。等待预定全局变量更新的局部控制存储器还可以被配置成响应于接收到通知,更新与预定全局变量关联的局部变量的值。
在本实施例的一些可选的实现方式中,局部控制存储器还可以被配置成:以轮询方式检测目标全局变量的值是否更新;响应于检测到目标全局变量的值更新,更新与预定全局变量关联的局部变量的值。
在本实施例的一些可选的实现方式中,在内核代码被执行期间,被通用执行部件锁定的专用执行部件不被解锁。
在本实施例的一些可选的实现方式中,该装置600还可以包括循环单元。其中,循环单元可以被配置成在执行第一指令之后,循环执行第二指令集合。
本申请的上述实施例提供的用于人工智能芯片的指令执行装置,通过接收来自指令存储器的代码块,之后锁定与代码块关联的专用执行部件,最后将代码块中的指令发送到所锁定的专用执行部件,从而避免在内核代码执行期间与CPU频繁通信,并且避免频繁加锁/解锁专用执行部件,提高了人工智能芯片的性能。
本申请实施例还提供了一种电子设备。该电子设备的结构可以参考图7,其示出了本申请的电子设备的一个实施例的计算机系统700的结构示意图。图7示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括一个或多个中央处理单元(CPU)701以及一个或多个人工智能芯片704。CPU 701可以根据存储在只读存储器(ROM)702中的程序或者从存储部分707加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。人工智能芯片704可以包括指令存储器、数据存储器、一个或多个通用执行部件以及一个或多个专用执行部件,人工智能芯片704可以根据从CPU701接收的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702、RAM703以及人工智能芯片704通过总线705彼此相连。输入/输出(I/O)接口706也连接至总线705。
以下部件连接至I/O接口706:包括硬盘等的存储部分707;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分708。通信部分708经由诸如因特网的网络执行通信处理。驱动器709也根据需要连接至I/O接口706。可拆卸介质710,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器709上,以便于从其上读出的计算机程序根据需要被安装入存储部分707。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分708从网络上被下载和安装,和/或从可拆卸介质710被安装。在该计算机程序被人工智能芯片704的通用执行部件执行时,执行本申请的方法中限定的上述功能。
需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在通用执行部件中,例如,可以描述为:一种通用执行部件包括代码接收单元、锁定单元和指令发送单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,代码接收单元还可以被描述为“接收来自指令存储器的代码块的单元”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的人工智能芯片中的通用执行部件中所包含的;也可以是单独存在,而未装配入该通用执行部件中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该通用执行部件执行时,使得该通用执行部件:接收来自指令存储器的代码块,代码块是指令存储器从中央处理单元发送的内核代码中获取的,代码块与专用执行部件相关联;锁定与代码块相关联的专用执行部件;将代码块中的指令发送到所锁定的专用执行部件,专用执行部件被配置成执行所接收的指令以及将执行结果存储在数据存储器中。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (16)

1.一种人工智能芯片,包括指令存储器、数据存储器、至少一个通用执行部件、至少一个专用执行部件和存储有至少一个局部变量的值的局部控制存储器;其中,专用执行部件包括专用于处理神经网络模型中的计算密集型的计算任务的执行部件,包括以下至少一种:卷积引擎、单数据处理器、平面数据处理器、通道数据处理器、专用内存和数据重构引擎;
指令存储器被配置成:接收中央处理单元发送的内核代码,所述内核代码包括至少一个代码块,所述至少一个代码块中的代码块与通用执行部件和专用执行部件相关联;
通用执行部件被配置成:接收来自所述指令存储器的代码块,锁定与所接收的代码块相关联的专用执行部件,以及将所接收的代码块中的指令发送到所锁定的专用执行部件,其中,被锁定的专用执行部件无法被其他通用执行部件调用;
专用执行部件被配置成:接收通用执行部件发送的指令,执行所接收的指令,以及将执行结果存储在数据存储器中;
数据存储器被配置成存储专用执行部件发送的执行结果;
局部控制存储器被配置成:接收通用执行部件发送的局部变量更新请求,所述局部变量更新请求包括预定局部变量的目标值;将所述预定局部变量的值更新为所述目标值,向所述至少一个通用执行部件发送所述预定局部变量更新的通知;
等待所述预定局部变量更新的通用执行部件还被配置成响应于接收到所述通知,继续执行所接收的代码块中的指令。
2.根据权利要求1所述的人工智能芯片,其中,所述至少一个代码块中的代码块包括第一指令和第二指令集合;以及
通用执行部件具体被配置成:
响应于接收到代码块,执行第一指令,以锁定与所接收的代码块相关联的专用执行部件;
将第二指令集合中的第二指令依次发送到所锁定的专用执行部件。
3.根据权利要求1所述的人工智能芯片,其中,所述至少一个代码块中的代码块包括第一指令和第二指令集合;以及
通用执行部件具体被配置成:
响应于接收到代码块,执行第一指令,以锁定与所接收的代码块相关联的至少一个专用执行部件;
对于第二指令集合中的第二指令,从所锁定的专用执行部件中确定执行该第二指令的专用执行部件,将该第二指令发送到所确定的专用执行部件。
4.根据权利要求1所述的人工智能芯片,其中,通用执行部件还被配置成:
以轮询方式检测目标局部变量的值是否更新;
响应于检测到所述目标局部变量的值更新,继续执行所接收的代码块中的指令。
5.根据权利要求1所述的人工智能芯片,其中,所述人工智能芯片还包括至少一个计算集群,所述至少一个计算集群中的计算集群包括数据存储器、至少一个通用执行部件和至少一个专用执行部件。
6.根据权利要求5所述的人工智能芯片,其中,所述人工智能芯片还包括全局控制存储器,计算集群还包括局部控制存储器,所述全局控制存储器存储有至少一个全局变量的值,局部控制存储器存储有至少一个局部变量的值;以及
所述全局控制存储器被配置成:
接收计算集群发送的全局变量更新请求,所述全局变量更新请求包括预定全局变量的目标值;
将所述预定全局变量的值更新为所述目标值。
7.根据权利要求6所述的人工智能芯片,其中,所述全局控制存储器还被配置成向所述至少一个局部控制存储器发送所述预定全局变量更新的通知;以及
等待所述预定全局变量更新的局部控制存储器还被配置成响应于接收到所述通知,更新与所述预定全局变量关联的局部变量的值。
8.根据权利要求6所述的人工智能芯片,其中,局部控制存储器还被配置成:
以轮询方式检测目标全局变量的值是否更新;
响应于检测到所述目标全局变量的值更新,更新与所述预定全局变量关联的局部变量的值。
9.根据权利要求1所述的人工智能芯片,其中,在所述内核代码被执行期间,被通用执行部件锁定的专用执行部件不被解锁。
10.根据权利要求2或3所述的人工智能芯片,其中,通用执行部件还被配置成:在执行第一指令之后,循环执行第二指令集合。
11.根据权利要求1所述的人工智能芯片,其中,所述内核代码由所述中央处理单元对输入的数据流图进行解析获得,所述数据流图通过对神经网络模型的静态图进行映射获得。
12.一种用于人工智能芯片的指令执行方法,所述人工智能芯片包括指令存储器、数据存储器、至少一个通用执行部件、至少一个专用执行部件和存储有至少一个局部变量的值的局部控制存储器,指令存储器与中央处理单元通信连接,其中,专用执行部件包括专用于处理神经网络模型中的计算密集型的计算任务的执行部件,包括以下至少一种:卷积引擎、单数据处理器、平面数据处理器、通道数据处理器、专用内存和数据重构引擎,所述方法包括:
接收来自所述指令存储器的代码块,所述代码块是所述指令存储器从所述中央处理单元发送的内核代码中获取的,所述代码块与专用执行部件相关联;
锁定与所述代码块相关联的专用执行部件,其中,被锁定的专用执行部件无法被其他通用执行部件调用;
将所述代码块中的指令发送到所锁定的专用执行部件,专用执行部件被配置成执行所接收的指令以及将执行结果存储在所述数据存储器中;
局部控制存储器被配置成接收通用执行部件发送的局部变量更新请求,所述局部变量更新请求包括预定局部变量的目标值;将所述预定局部变量的值更新为所述目标值,向所述至少一个通用执行部件发送所述预定局部变量更新的通知;
等待所述预定局部变量更新的通用执行部件还被配置成响应于接收到所述通知,继续执行所接收的代码块中的指令。
13.根据权利要求12所述的方法,其中,所述人工智能芯片还包括存储有至少一个局部变量的值的局部控制存储器;以及
所述方法还包括:
以轮询方式检测目标局部变量的值是否更新;
响应于检测到所述目标局部变量的值更新,继续执行所述代码块中的指令。
14.一种用于人工智能芯片的指令执行装置,所述人工智能芯片包括指令存储器、数据存储器、至少一个通用执行部件和至少一个专用执行部件,指令存储器与中央处理单元通信连接,其中,专用执行部件包括专用于处理神经网络模型中的计算密集型的计算任务的执行部件,包括以下至少一种:卷积引擎、单数据处理器、平面数据处理器、通道数据处理器、专用内存和数据重构引擎,所述装置包括:
代码接收单元,被配置成接收来自所述指令存储器的代码块,所述代码块是所述指令存储器从所述中央处理单元发送的内核代码中获取的,所述代码块与专用执行部件相关联;
锁定单元,被配置成锁定与所述代码块相关联的专用执行部件,其中,被锁定的专用执行部件无法被其他通用执行部件调用;
指令发送单元,被配置成将所述代码块中的指令发送到所锁定的专用执行部件,专用执行部件被配置成执行所接收的指令以及将执行结果存储在所述数据存储器中;
局部控制存储器被配置成接收通用执行部件发送的局部变量更新请求,所述局部变量更新请求包括预定局部变量的目标值;将所述预定局部变量的值更新为所述目标值,向所述至少一个通用执行部件发送所述预定局部变量更新的通知;
等待所述预定局部变量更新的通用执行部件还被配置成响应于接收到所述通知,继续执行所接收的代码块中的指令。
15.一种计算机可读介质,其上存储有计算机程序,其中,所述计算机程序被执行部件执行时实现如权利要求12-14中任一所述的方法。
16.一种电子设备,包括:中央处理单元、存储装置和至少一个如权利要求1-11之一所述的人工智能芯片。
CN201810910206.6A 2018-08-10 2018-08-10 人工智能芯片以及用于人工智能芯片的指令执行方法 Active CN110825514B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201810910206.6A CN110825514B (zh) 2018-08-10 2018-08-10 人工智能芯片以及用于人工智能芯片的指令执行方法
JP2019125661A JP7011627B2 (ja) 2018-08-10 2019-07-05 人工知能チップ及び人工知能チップに用いられる命令実行方法
US16/505,127 US11372673B2 (en) 2018-08-10 2019-07-08 Artificial intelligence chip and instruction execution method for artificial intelligence chip
KR1020190082871A KR102407220B1 (ko) 2018-08-10 2019-07-09 인공지능 칩 및 인공지능 칩에 사용되는 명령 실행 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810910206.6A CN110825514B (zh) 2018-08-10 2018-08-10 人工智能芯片以及用于人工智能芯片的指令执行方法

Publications (2)

Publication Number Publication Date
CN110825514A CN110825514A (zh) 2020-02-21
CN110825514B true CN110825514B (zh) 2023-05-23

Family

ID=69405892

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810910206.6A Active CN110825514B (zh) 2018-08-10 2018-08-10 人工智能芯片以及用于人工智能芯片的指令执行方法

Country Status (4)

Country Link
US (1) US11372673B2 (zh)
JP (1) JP7011627B2 (zh)
KR (1) KR102407220B1 (zh)
CN (1) CN110825514B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110825530B (zh) * 2018-08-10 2022-12-23 昆仑芯(北京)科技有限公司 用于人工智能芯片的指令执行方法和装置
US11860782B2 (en) * 2019-08-13 2024-01-02 Neuroblade Ltd. Compensating for DRAM activation penalties
US11055003B2 (en) * 2019-08-20 2021-07-06 Micron Technology, Inc. Supplemental AI processing in memory
CN111752887B (zh) * 2020-06-22 2024-03-15 深圳鲲云信息科技有限公司 人工智能芯片和基于人工智能芯片的数据处理方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073618A (zh) * 2010-12-07 2011-05-25 浪潮(北京)电子信息产业有限公司 一种异构计算系统及其处理方法
CN102708009A (zh) * 2012-04-19 2012-10-03 华为技术有限公司 一种基于cuda实现多任务共享gpu的方法
CN103905310A (zh) * 2014-03-24 2014-07-02 华为技术有限公司 报文处理的方法及转发设备
CN106325967A (zh) * 2015-06-30 2017-01-11 华为技术有限公司 一种硬件加速方法、编译器以及设备
US9772853B1 (en) * 2007-09-17 2017-09-26 Rocket Software, Inc Dispatching a unit of work to a specialty engine or a general processor and exception handling including continuing execution until reaching a defined exit point or restarting execution at a predefined retry point using a different engine or processor
CN107766079A (zh) * 2016-08-19 2018-03-06 北京百度网讯科技有限公司 处理器以及用于在处理器上执行指令的方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2962241B2 (ja) * 1996-09-10 1999-10-12 日本電気株式会社 階層型マルチプロセッサにおける並列処理方法
ATE467171T1 (de) * 1998-08-24 2010-05-15 Microunity Systems Eng System mit breiter operandenarchitektur und verfahren
JP2001167058A (ja) * 1999-12-07 2001-06-22 Matsushita Electric Ind Co Ltd 情報処理装置
US7516456B2 (en) * 2003-09-25 2009-04-07 International Business Machines Corporation Asymmetric heterogeneous multi-threaded operating system
JP2006260377A (ja) * 2005-03-18 2006-09-28 Seiko Epson Corp 並列処理装置および情報処理方法
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US8156275B2 (en) 2009-05-13 2012-04-10 Apple Inc. Power managed lock optimization
EP2579164B1 (en) * 2010-05-26 2021-01-06 Nec Corporation Multiprocessor system, execution control method, execution control program
US9135213B2 (en) 2011-01-13 2015-09-15 Xilinx, Inc. Extending a processor system within an integrated circuit and offloading processes to process-specific circuits
WO2015103374A1 (en) * 2014-01-06 2015-07-09 Johnson Controls Technology Company Vehicle with multiple user interface operating domains
JP6044691B2 (ja) 2015-10-01 2016-12-14 国立研究開発法人情報通信研究機構 論理推論システム、計算学習装置および論理推論方法
US11010338B2 (en) * 2017-04-06 2021-05-18 Shanghai Cambricon Information Technology Co., Ltd Data screening device and method

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9772853B1 (en) * 2007-09-17 2017-09-26 Rocket Software, Inc Dispatching a unit of work to a specialty engine or a general processor and exception handling including continuing execution until reaching a defined exit point or restarting execution at a predefined retry point using a different engine or processor
CN102073618A (zh) * 2010-12-07 2011-05-25 浪潮(北京)电子信息产业有限公司 一种异构计算系统及其处理方法
CN102708009A (zh) * 2012-04-19 2012-10-03 华为技术有限公司 一种基于cuda实现多任务共享gpu的方法
CN103905310A (zh) * 2014-03-24 2014-07-02 华为技术有限公司 报文处理的方法及转发设备
CN106325967A (zh) * 2015-06-30 2017-01-11 华为技术有限公司 一种硬件加速方法、编译器以及设备
CN107766079A (zh) * 2016-08-19 2018-03-06 北京百度网讯科技有限公司 处理器以及用于在处理器上执行指令的方法

Also Published As

Publication number Publication date
JP7011627B2 (ja) 2022-01-26
CN110825514A (zh) 2020-02-21
KR20200018234A (ko) 2020-02-19
US11372673B2 (en) 2022-06-28
KR102407220B1 (ko) 2022-06-08
US20200050476A1 (en) 2020-02-13
JP2020027613A (ja) 2020-02-20

Similar Documents

Publication Publication Date Title
CN110825514B (zh) 人工智能芯片以及用于人工智能芯片的指令执行方法
CN111310910B (zh) 一种计算装置及方法
US11422817B2 (en) Method and apparatus for executing instructions including a blocking instruction generated in response to determining that there is data dependence between instructions
US10133827B2 (en) Automatic generation of multi-source breadth-first search from high-level graph language
WO2017116926A1 (en) Loop code processor optimizations
US11880715B2 (en) Method and system for opportunistic load balancing in neural networks using metadata
CN111190741A (zh) 基于深度学习节点计算的调度方法、设备及存储介质
CN110825435B (zh) 用于处理数据的方法和装置
EP3857384B1 (en) Processing sequential inputs using neural network accelerators
CN111813721A (zh) 神经网络数据处理方法、装置、设备及存储介质
US10891134B2 (en) Method and apparatus for executing instruction for artificial intelligence chip
CN113741977B (zh) 数据操作方法、数据操作装置、数据处理器
KR20230043702A (ko) 셀룰러 모뎀에서 데이터 프로세싱을 동기화하기 위한 시스템들 및 방법들
CN115023685A (zh) 用于密集和稀疏矩阵计算的加速器
US11941383B1 (en) Compilation with caching of code analysis result
US20230259467A1 (en) Direct memory access (dma) engine processing data transfer tasks in parallel
US20220309315A1 (en) Extension of existing neural networks without affecting existing outputs
CN116710891A (zh) 子图的编译、执行方法及相关设备
KR20220077484A (ko) 능동적 스케줄링 방법과 컴퓨팅 장치
CN116663633A (zh) 一种数据处理方法及相关设备
CN116685964A (zh) 运算加速的处理方法、运算加速器的使用方法及运算加速器
CN116737864A (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
TA01 Transfer of patent application right

Effective date of registration: 20210928

Address after: Baidu building, No. 10, Shangdi 10th Street, Haidian District, Beijing 100086

Applicant after: Kunlun core (Beijing) Technology Co.,Ltd.

Address before: 2 / F, baidu building, 10 Shangdi 10th Street, Haidian District, Beijing 100085

Applicant before: BEIJING BAIDU NETCOM SCIENCE AND TECHNOLOGY Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant