CN118378675A - 神经网络处理 - Google Patents
神经网络处理 Download PDFInfo
- Publication number
- CN118378675A CN118378675A CN202410081330.1A CN202410081330A CN118378675A CN 118378675 A CN118378675 A CN 118378675A CN 202410081330 A CN202410081330 A CN 202410081330A CN 118378675 A CN118378675 A CN 118378675A
- Authority
- CN
- China
- Prior art keywords
- neural network
- processing
- processor
- perform
- program
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 815
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 661
- 238000000034 method Methods 0.000 claims abstract description 276
- 230000008569 process Effects 0.000 claims abstract description 230
- 230000004044 response Effects 0.000 claims abstract description 79
- 230000001537 neural effect Effects 0.000 claims description 321
- 230000015654 memory Effects 0.000 claims description 99
- 238000003860 storage Methods 0.000 claims description 91
- 230000036316 preload Effects 0.000 claims description 29
- 238000012546 transfer Methods 0.000 claims description 18
- 238000011112 process operation Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 6
- 239000000872 buffer Substances 0.000 description 171
- 230000006870 function Effects 0.000 description 39
- 238000004891 communication Methods 0.000 description 30
- 238000009826 distribution Methods 0.000 description 17
- 238000013507 mapping Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 230000001934 delay Effects 0.000 description 6
- 230000001960 triggered effect Effects 0.000 description 5
- 238000001914 filtration Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000009466 transformation Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004751 neurological system process Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013527 convolutional neural network Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Landscapes
- Advance Control (AREA)
Abstract
本发明公开了一种数据处理系统,该数据处理系统包括:被配置为执行神经网络处理的处理器(306),该处理器具有被配置为执行用于神经网络处理的处理运算的一个或多个执行单元(213,214)和被配置为向一个或多个执行单元分配处理任务的控制电路(217);和图形处理器(304),该图形处理器包括可操作为执行处理程序以执行处理运算的可编程执行单元(203)。被配置为执行神经网络处理的该处理器(306)的该控制电路(217)被配置为:响应于向该控制电路提供的要执行的特定神经网络处理的指示而使得该图形处理器的该可编程执行单元(203)执行程序以执行所指示的神经网络处理。
Description
本发明涉及神经网络处理,并且具体地涉及在数据处理系统中执行神经网络处理,该数据处理系统包括被专门配置为执行神经网络处理的处理器,诸如神经处理单元(NPU)。
一般来讲,神经网络处理需要各种特定算术运算。例如,当将过滤器应用于输入数据阵列时,处理可以包括执行加权和(“乘法-累加”(MAC)运算)。通常,用于表示要用于神经网络处理的数据的数据结构(例如,输入数据阵列、滤波器、输出数据阵列等)是张量。因此,算术运算通常包括张量算术,例如,张量乘法、加法等。
为了促进神经网络处理,在一些数据处理系统中,提供专用神经网络处理硬件加速器(例如,神经处理单元NPU)作为硬件加速器,该专用神经网络处理硬件加速器可操作为根据需要并且在需要时,例如响应于正在主机处理器(例如,中央处理单元(CPU))上执行的应用程序需要神经网络处理而执行此类神经网络处理。
此类神经网络处理硬件加速器通常包括被配置用于更有效地执行一种或多种特定类型的神经网络处理运算的硬件(例如,包括固定函数处理电路)。例如,神经加速器可以并且通常确实被配置为执行张量算术运算,诸如张量MAC运算,并且因此可以包括多个固定函数乘法器-累加器电路(“MAC单元”),其被布置为对张量数据结构执行此类MAC运算。
因此,提供神经加速器的益处是,随后可以与使用另一处理器(例如,CPU)以通用方式执行计算相比,以更优化的方式执行至少这些类型的算术运算,例如,使用专用固定函数硬件电路。这也释放了其他部件(例如,主机处理器(CPU))以根据需要执行其他处理任务,这可以提高整体处理效率。这对于CPU资源可能有限的资源受限设备(诸如移动设备)可能特别重要。
在此类数据处理系统中,例如主机处理器(CPU)将可操作为请求神经加速器执行一组神经网络处理运算,例如用于在主机处理器(CPU)上执行的应用程序。神经加速器的驱动器随后可以识别和确定要执行的神经网络处理,并且向神经加速器指示用于执行期望的神经网络处理的适当运算和数据。
申请人相信,对于数据处理系统中的神经网络处理的执行仍然存在改进的范围。
根据本发明的第一方面,提供了一种操作数据处理系统的方法,该数据处理系统包括:
处理器,该处理器被配置为执行神经网络处理,该处理器包括:
一个或多个执行单元,该一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和
控制电路,该控制电路被配置为响应于向该控制电路提供的要执行的神经网络处理的指示而向该一个或多个执行单元分配处理任务以使得该执行单元执行用于神经网络处理的处理运算;
该数据处理系统还包括图形处理器,该图形处理器包括可编程执行单元,该可编程执行单元可操作为执行处理程序以执行处理运算;
所述方法包括:
被配置为执行神经网络处理的该处理器的该控制电路响应于要执行的神经网络处理的指示而使得该图形处理器的该可编程执行单元执行程序以执行所指示的神经网络处理。
根据本发明的第二方面,提供一种数据处理系统,所述数据处理系统包括:
处理器,该处理器被配置为执行神经网络处理,该处理器包括:
一个或多个执行单元,该一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和
控制电路,该控制电路被配置为响应于向该控制电路提供的要执行的神经网络处理的指示而向该一个或多个执行单元分配处理任务以使得该执行单元执行用于神经网络处理的处理运算;
该数据处理系统还包括图形处理器,该图形处理器包括可编程执行单元,该可编程执行单元可操作为执行处理程序以执行处理运算;
其中:
被配置为执行神经网络处理的该处理器的该控制电路被配置为:
响应于要执行的特定神经网络处理的指示而使得该图形处理器的该可编程执行单元执行程序以执行所指示的神经网络处理。
本发明涉及在数据处理系统中执行神经网络处理,该数据处理系统包括被(专门)配置为执行神经网络处理的处理器(例如,神经网络处理硬件加速器(神经处理单元NPU))和图形处理器,该可编程执行单元包括可操作为执行程序以执行处理运算的可编程执行单元。
在本发明中,在正常运算中将向神经网络处理器的执行单元分配神经网络处理任务的神经网络处理器的控制单元还可操作为并且操作以:响应于特定神经网络处理的指示而使得由图形处理器的执行单元执行(着色器)程序以执行所讨论的神经网络处理运算(而不是正在由神经网络处理器的执行单元执行的神经网络处理),即,使得通过由图形处理器的可编程执行单元而不是由被配置为执行神经网络处理的处理器的执行单元对程序的执行来执行神经网络处理运算。
就这一点而言,申请人已经认识到,虽然专用神经网络处理器可以如上所述被配置为加速用于神经网络处理的某些处理运算(例如,算术运算),但是仍然存在神经网络处理器无法加速的一些神经网络处理运算,例如,因为它不包括用于那些运算的适当的固定函数硬件(电路)(例如,因为对于特定的(例如,相对稀少的)神经网络处理运算提供固定函数硬件不是高性价比的或有效的)。
就这一点而言,申请人还认识到,神经网络处理器在硬件中不支持的此类运算可以替代地能够由支持(着色器)程序的执行的图形处理器的可编程执行单元对(着色器)程序的适当执行来执行。因此,当神经网络处理所需的给定运算(例如,算术运算)不能使用神经网络处理器的固定函数执行单元来执行时,该运算可以替代地通过在图形处理器的一个或多个执行核心中适当着色器程序的执行来执行。
此外,在本发明中,神经网络处理器(的控制单元)被配置为当它识别出需要借助于图形处理器上的着色器程序执行来执行的神经网络处理时,能够直接地并且通过它自己触发图形处理器上的期望着色器程序执行。这于是可以避免例如要执行的神经网络处理必须例如被正在控制整个运算的主机处理器分解成例如用于在神经网络处理器和图形处理器上的运算的单独的命令集。相反,在本发明中,即使在存在将需要通过图形处理器上的着色器程序执行来执行的神经网络处理的情况下,也可以生成(单独地)向神经网络处理器提供的所需神经网络处理的指示并且向神经网络处理器提供该指示,随后如果并且当需要时,神经网络处理器本身控制图形处理器的运算。
这样做的效果是提供更有效的机制,用于在此类数据处理系统中执行神经网络处理,并且特别是用于执行神经网络处理,其中该处理中的至少一些处理可能不被数据处理系统的专用神经网络处理器在硬件中直接支持。
在本发明中被配置为执行神经网络处理的处理器可以是被配置为执行神经网络处理的任何合适且期望的处理器,例如并且优选地,其包括被专门配置为执行(更优地执行)神经网络处理将(例如更常见地)需要的一种或多种类型的处理运算的处理电路。在一个优选的实施方案中,被配置为执行神经网络处理的处理器是神经网络处理硬件加速器(引擎)。
被配置为执行神经网络处理的处理器包括一个或多个执行单元,每个执行单元被配置为执行用于神经网络处理的处理运算。处理器可以包括任何合适且期望数量的此类执行单元。
每个执行单元优选地被配置为执行在神经网络处理期间(例如,更常见地)遇到的特定的、优选地选定的、优选地确定的一种或多种类型的处理运算(并且优选地以有效的方式并且优选地更优的方式),诸如特定的(例如,张量)算术运算,并且优选地包括用于执行所讨论的一个或多个运算的适当、优选地固定函数的处理电路。例如,可以存在被配置为(并且包括被配置为)执行乘法-累加(MAC)运算的固定函数处理电路的执行单元。
神经网络处理器(其执行单元)被配置为执行的特定运算可以是用于(并且可用于)神经网络处理的任何合适且期望的处理运算。
被配置为执行神经网络处理的处理器优选地包括一个或多个(算术)执行单元,其被配置为(更优地)执行将在神经网络处理期间更常见地遇到的算术运算,诸如并且优选地例如某种类型的张量算术运算。
在一个优选的实施方案中,处理器尤其包括执行单元,该执行单元被配置为将过滤器应用于输入数据阵列,并且优选地使用输入数据和权重数据来执行加权和。在一个特别优选的实施方案中,执行单元被配置为执行加权和作为乘法-累加运算,并且因此处理器包括用于执行乘法-累加运算的一个或多个乘法-累加电路(或者称为乘法器-累加器或“MAC单元”)。
在一个特别优选的实施方案中,被配置为执行神经网络处理的处理器至少包括被配置为执行类似卷积的算术运算的执行单元(固定函数卷积单元),优选地与被配置为执行其他(算术)运算的一个或多个其他、优选地固定函数执行单元一起。
在一个优选的实施方案中,被配置为执行神经网络处理的处理器包括以下执行单元中的一个或多个、并且优选地多个:直接存储器访问单元(例如,以读取/写入张量)(并且其可以包括压缩和解压缩单元);权重解码,其获取权重,并且还可以包括解压缩单元;一个或多个变换单元,例如用于重新排列数据而不受数据中的各个元素的值的任何影响,诸如置换维度、复制/广播维度、插入/移除维度或重新排列数据次序;一个或多个逐元素运算单元,诸如以执行算术运算(诸如加法、乘法等)、逻辑运算(移位等)和/或逐位运算;执行单元,用于执行箝位(ReLU)、缩放和/或零点校正、查找表;一个或多个执行单元,用于执行归约运算,诸如sum、min/max、argmax、argmin等;一个或多个执行单元,用于执行调整大小运算,诸如缩放H/W维度、插入零、复制邻居或双线性过滤。
还可以具有能够执行上述运算中的多个运算的执行单元,例如,诸如能够实现逐元素缩减和调整大小的向量引擎。
当然,其他布置将是可能的。
被配置为执行神经网络处理的处理器还包括控制电路,该控制电路被配置为向神经处理器的一个或多个执行单元分配处理任务以使得执行单元执行用于神经网络处理的处理运算。
同样,该控制电路可以采用任何合适且期望的形式,并且应当并且优选地确实可操作为响应于向控制电路提供的要执行的神经网络处理的指示而为神经网络处理器的一个或多个执行单元调度对应的处理任务。例如,响应于要执行的神经网络处理的给定指示,控制电路可以为处理器的算术执行单元调度对应的处理任务,例如,以使得(算术)执行单元执行用于神经网络处理的张量算术运算。
在一个优选的实施方案中,控制电路还可操作为并且被配置为能够将要执行的整个神经网络处理任务细分成更小的子任务,诸如并且优选地,相应的神经网络处理块,用于分配给神经处理器的一个或多个执行单元(或者根据本发明,分配给图形处理器)。
例如,在一些实施方案中,神经网络处理涉及将初始输入数据阵列的处理细分成一个或多个、并且优选地多个块/子块。随后,被配置为执行神经网络处理的处理器的控制单元可以使得执行单元执行针对块/子块的神经网络处理运算,并且优选地一个接一个地执行,直到针对整个初始输入数据阵列已经完成运算序列为止。这可以按任何合适且所需的方式来完成。
在一个优选的实施方案中,被配置为执行神经网络处理的处理器的控制电路可操作为将处理工作所定义的第一(例如并且优选地,多维)迭代(运算)空间视情况变换为要执行所讨论的处理运算的神经处理器的执行单元或图形处理器的可编程执行单元的相应(不同)迭代空间。
就这一点而言,应当理解,神经网络处理通常是更高维度的,至少4D,但是神经执行单元可以执行各种维度的运算,例如从2D直到8D。给执行单元的工作使用它们的适当维度分发给执行单元,同时迭代通过整个更高维的运算空间。
在一个优选的实施方案中,就这一点而言,控制电路操作以便细分整个公共迭代/运算空间,以生成该空间的相应块,用于分配以供处理,随后执行每个单独块到用于执行单元的迭代/运算空间的相应变换(当需要时)。对应地,在神经网络处理任务需要使用多个运算(多个执行单元)的情况下,公共迭代/运算空间中的每个块将经历针对要处理块的每个执行单元(运算)的适当变换。随后,这将允许执行单元看到的每个块返回到来自(在)公共迭代/运算空间中的一致且公共的块集合。
除了一个或多个神经网络处理运算执行单元和控制电路之外,被配置为执行神经网络处理的处理器可包含例如并且优选地神经网络处理器通常可包括的任何其他合适且期望的部件、单元和元件等。
在一个优选的实施方案中,神经处理器可操作为并且包括一个或多个处理电路(单元),该一个或多个处理电路(单元)被配置为并且可操作为访问存储器系统和数据处理系统的(主)存储器,例如并且优选地,以便能够从数据处理系统的存储器读取数据以及向数据处理系统的存储器写入数据。此类存储器访问单元可采用任何合适且期望的、并且优选地包括与要执行神经网络处理的处理器相关联的一个或多个直接存储器访问(DMA)单元(电路)。
(对应地,数据处理系统优选地包括(例如,主)存储器,其可操作为并且用于存储用于神经网络处理的数据,并且在正在执行神经网络处理的处理器(例如,主存储器)的外部,并且优选地,从和由被配置为经由一个或多个适当的存储器访问单元、并且优选地经由一个或多个直接存储器访问(DMA)单元、例如并且优选地经由整个存储器系统的高速缓存分级结构(高速缓存系统)来执行神经网络处理的处理器访问。)
在一个特别优选的实施方案中,神经处理器包括本地存储,优选地是一个或多个缓冲器的形式,该本地存储在被配置为执行神经网络处理的处理器本地,并且旨在且用于在一个或多个执行单元正在执行神经网络处理时本地地存储数据。其可以并且优选地确实用于存储张量数据、权重数据等。
该本地存储应当并且优选地确实与数据处理系统的任何(主)存储器物理地(并且逻辑地)分开,并且应当并且优选地是在正在执行神经网络处理的处理器内部的和/或可以由神经处理器的执行单元直接访问(不需要存储器访问单元(例如,DMA)(与(主)存储器相反))的存储器。
在一个优选的实施方案中,神经处理器的本地存储被管理并且被配置为本地存储中的一组(系列)(优选地可编程地)可定义/可配置的数据结构,其中可以存储用于神经网络处理运算的输入和/或输出数据(该数据结构在本文中将被称为“管道”)。这些数据结构(管道)优选地存储一个或多个缓冲器,并且优选地是先入先出(FIFO)队列的形式(每个缓冲器是(FIFO)队列中的条目)。
本地存储中的每个此类管道(数据结构)(例如,FIFO队列)可以例如并且优选地充当给定神经网络处理运算的输入管道(队列)和/或充当神经网络处理运算的输出管道(队列)。因此,给定神经网络处理运算将优选地在本地存储(定义)中具有零个(并且优选地一个)或多个管道(例如,FIFO队列)作为其输入,并且优选地在本地存储(定义)中具有零个或单个管道(FIFO队列)作为其输出。就这一点而言,神经网络处理运算应当具有至少一个管道(无论是作为输入还是作为输出),但是可以不必同时具有输入和输出管道。例如,加载将具有输出管道但不具有输入管道,并且存储将具有输入管道但不具有输出管道。其他运算通常并且优选地具有至少一个输入管道和至少一个(并且优选地单个)输出管道。
给定管道(FIFO队列)可以并且优选地至少在一些情况下确实充当一个神经网络处理运算的输出和另一个神经网络处理运算的输入两者(例如并且优选地,其中这些处理运算在正被执行的神经网络处理运算的序列中一个接一个)。
优选地,用于给定“管道”(缓冲器/队列)的参数(诸如并且优选地,“管道”(FIFO队列)的宽度和高度)是可定义/可设置(可编程)的,例如并且优选地,通过定义(设置)用于一组给定神经网络处理的一个(并且每个)此类“管道”(FIFO队列)的适当参数,作为该处理的一部分并且经由该处理的定义和指示。
这些管道定义(其配置应当如何跨用于不同管道的不同缓冲器分配本地存储)优选地由编译器写入并且形成神经网络处理运算描述符的一部分。例如,它们可以存储在主存储器中或者作为状态存储在命令缓冲器中。
优选地,每个此类“管道”(例如,FIFO队列)可以包括一个或多个缓冲器,其中此类缓冲器的数量也是可设置(可定义)(可编程)的,作为神经网络处理定义过程的一部分。随后,这将允许选择性地定义和指示给定管道(FIFO队列)是否应当是例如双缓冲的或更高/更低缓冲的,例如以补偿延迟(诸如存储器访问延迟,或在再次需要缓冲器之前执行若干运算的流水线延迟)。就这一点而言,每个缓冲器将是FIFO队列中的条目(因此对队列中的先入或先出的引用是指缓冲器作为整体,并且双缓冲管道对应地意味着大小为2的FIFO)。
如上所述,在整个神经网络处理“任务”被细分成多个单独的工作块以用于处理目的的情况下,随后优选地,每个工作块将在神经处理器的本地存储中的给定管道(数据结构)(例如,FIFO队列)中具有其自己的一个或多个相应条目(一个或多个缓冲器)。
在一个优选的实施方案中,给定管道(FIFO队列)的缓冲器(优选地直接)与用于上述神经网络处理的工作块(块迭代)相关。最优选地,针对所讨论的块要经历的神经网络处理的序列,每个块具有与本地存储中的相应管道(FIFO队列)中的缓冲器的一对一映射。就这一点而言,块执行可以使用多个输入,在这种情况下,它将并且优选地确实消耗本地存储中的多个缓冲器,优选地每个缓冲器来自分开的管道(优选地,块不消耗来自同一管道的两个不同的缓冲器)。对应地,块可以并且优选地确实将单个缓冲器输出到其在本地存储中的目标管道中(尽管如果需要,也可以存在多个输出管道)。
对应地,向被配置为执行神经网络处理的处理器的控制单元提供的要执行的神经网络处理的指示可以并且优选地确实包括例如并且优选地当执行所讨论的神经网络处理时应当在神经处理器的本地存储中提供和使用的“管道”的数量和配置的适当指示。
本发明中的图形处理器可以是包括可编程执行单元的任何合适且期望的图形处理器,该可编程执行单元可操作为执行(着色器)程序以执行处理运算。图形处理器可根据需要以其他方式配置和操作,并且被配置为执行任何合适且期望形式的图形处理流水线(在其正常图形处理运算中)。
图形处理器的可编程执行单元可以是任何合适且期望的此类执行单元,并且优选地是图形处理器的执行核心的适当执行引擎。因此,图形处理器的可编程执行单元优选地是图形处理器的适当(着色器)执行(处理)核心的一部分并且被包括在其中。根据需要,图形处理器可包括单个可编程执行单元(和执行核心)或多个执行单元(和执行核心)。
图形处理器(其执行核心)可例如并且优选地包括执行(着色器)程序所必需的其他部件和单元,例如并且优选地,当执行单元正在执行(着色器)程序时用于存储供执行线程使用的数据的本地存储(优选地呈寄存器文件的形式),以及可操作为加载和存储供在执行程序时使用的数据(例如,从存储器到本地存储(寄存器文件)以及从本地存储到存储器)的加载/存储单元(电路)。
优选地,图形处理器还包括适当控制单元(电路),其可操作为并且被配置为控制由图形处理器的执行单元对程序的执行以执行处理运算。最优选地,该控制单元是适当的线程组(翘曲)管理器的形式,该线程组(翘曲)管理器可操作为创建(产生)执行线程组以供执行,并且调度和控制可编程执行单元通过此类线程组对(着色器)程序的执行。
通过由图形处理器对程序的执行来执行的处理运算可以是神经网络处理可能需要的任何合适且期望的处理运算。它们优选地是不被神经处理器(直接地和明确地)支持的运算,诸如并且优选地是不能被神经处理器的执行单元执行的运算。
在一个优选的实施方案中,通过由图形处理器对程序的执行来执行的处理运算包括使用与被神经处理器的执行单元支持的精度和/或数字格式不同的精度和/或数字格式的运算。例如,神经处理器可以仅支持基于整数的算术运算,使得要使用浮点值来执行的任何运算随后将替代地通过由图形处理器对一个或多个程序的执行来执行。
在一个优选的实施方案中,由图形处理器上的程序执行所执行的运算包括以下操作中的一个或多个、并且优选地多个:从压缩帧缓冲器加载并压缩数据值(并且相反地,压缩并存储数据值到压缩帧缓冲器)以用作神经网络的输入(或输出);执行颜色空间转换;图像滤波(例如,高质量图像滤波,例如,双三次滤波);沿一个或多个轴对张量内的元素进行排序;散列函数和散列表查找;很少使用的神经网络运算(诸如收集加载和分散存储、使用浮点数的三角/超越函数等)。
被配置为执行神经网络处理的处理器和图形处理器可以是不同且分开的处理单元,使得数据处理系统将包括独立图形处理单元(GPU)和独立神经处理单元(NPU)
然而,在一个特别优选的实施方案中,被配置为执行神经网络处理的处理器例如并且优选地以神经引擎的形式耦合到图形处理器并且与图形处理器集成,该神经引擎被提供为图形处理器的一部分并且与图形处理器集成。如下面将进一步讨论的,在一个特别优选的此类实施方案中,图形处理器执行(着色器)核心和一个或多个神经引擎位于同一组合控制电路/前端/主机接口后面,并且在同一内部互连器上连接在一起。
在这种情况下,实际上并且优选地,将存在另外包括被配置为执行本发明的神经网络处理的处理器的图形处理器,优选地是与图形处理器相关联并且被配置为图形处理器的一部分的适当神经引擎的形式。
对应地,图形处理器将包括一个或多个(着色器)执行核心以及一个或多个神经处理器(神经引擎)。最优选地,图形处理器的每个(着色器)执行核心具有(它自己的)相关联的和耦合的神经处理器(神经引擎)。
在这种情况下,图形处理器的(着色器)执行核心及其相关联的神经引擎(神经处理器)优选地共享至少一些、优选地特定的、优选地选定的部件和元件,使得那些部件和元件将被共同地提供给执行核心和神经处理器(引擎),而不是针对执行核心和神经处理器存在单独的此类部件/元件。
在一个优选的此类实施方案中,着色器执行核心和神经处理器(引擎)有权访问(共享)数据处理系统的整个存储器系统分级结构的共享高速缓存(例如,L1高速缓存),经由该共享高速缓存,着色器执行核心和神经处理器(引擎)可操作为从数据处理系统的存储器读取数据以及向数据处理系统的存储器写入数据。该共享(例如L1)高速缓存应当并且优选地确实与(如上所述的)神经处理器(引擎)(和图形处理器)的任何特定(专用)本地存储不同并且不相同。
执行核心和神经引擎还可以并且优选地确实还共享总线接口和到数据处理系统的其他部件(诸如数据处理系统的存储器系统)的互连器。
在一个优选的实施方案中,使用“命令”流来控制针对图形处理器和神经处理器的处理作业的提交,该“命令”流例如可以包括设置处理作业的参数的命令(指令)以及执行处理作业的命令(指令)。此类命令流可以由主机处理器生成并且被写入到适当的命令流存储(例如,(主)系统存储器中),并且随后从其中读取以供处理。
对应地,系统优选地包括一个或多个“命令流前端”,例如并且优选地,每个包括“命令流执行单元”,用于解释和实现命令流。
例如,命令流执行单元可以通过命令流工作,依次执行命令流中的命令(指令),并且使得由命令指示的运算被执行。
就这一点而言,可以存在分别用于图形处理器和神经处理器的独立的前端控制单元(命令流前端),但是在一个特别优选的实施方案中,存在公共(共享)前端控制单元(命令流前端),其可操作为从例如主机处理器接收命令,并且随后响应于那些命令相应地并且视情况将处理任务分别分配给图形处理器的(着色器)执行核心或神经处理器(例如,图形处理器的神经引擎)。
因此,在这种情况下,公共的、共享的前端控制单元(命令流前端)将识别与神经网络处理相关的命令,并且随后将此类命令(或那些命令所需的工作)分配给(神经引擎的)被配置为执行神经网络处理的处理器的控制单元,对于该控制单元,随后使得神经处理器(神经引擎)执行必要的神经网络处理,并且对应地,对于非神经网络相关的图形处理任务,对应地识别与图形处理任务相关的命令,并且将那些任务适当地分配给图形处理器的一个或多个执行核心的控制单元(例如,线程组管理器),以便由其执行那些任务。
这里应当注意,此类命令流前端(命令流执行单元)将相应地并且优选地与向神经处理器的执行单元(或向图形处理器)分配处理任务的神经处理器的控制单元不同并且分开,并且对应地与图形处理器的对应控制单元(例如,线程组(翘曲)管理器)分开。
最优选地,向命令流前端(命令流执行单元)提供指示要执行的处理任务的更高级命令,并且随后将那些任务适当地提供给神经引擎或图形处理器的控制单元,以便那些控制单元随后将必要的特定处理任务分配给适当的执行单元并且调度那些处理任务在执行单元上的执行。
因此,实际上并且优选地,将存在合适的控制单元,优选地是命令流前端的形式,其从例如主机处理器接收要执行的处理任务的指示,并且响应于那些命令而将处理任务视情况分配给各个处理器(图形处理器和神经处理器)的控制单元,其中各个处理器的那些控制单元(电路)随后使得处理任务被适当地执行(如上所述)。
在本发明中,神经处理器的控制电路可操作为响应于向控制电路提供的要执行的神经网络处理的处理运算的相应指示而将处理任务分配给神经处理器的一个或多个执行单元(或者另选地分配给图形处理器)。
向神经处理器的控制电路提供的要执行的神经网络处理的指示可以采取任何合适且期望的形式。它们应当并且优选地确实至少指示要执行的一个或多个(神经网络)处理运算、要用于相应处理运算的相关输入数据(输入数据阵列)(诸如相应输入特征图、权重集等)、处理运算的任何输出数据(输出数据阵列(输出特征图))要存储在何处、以及执行所讨论的一个或多个处理运算所必需的任何其他参数(例如,状态)。指示还可以指示例如以下中的一个或多个:与调试/检测/处理特征的控制相关的状态和/或应当如何管理故障;输入和输出张量在存储器中的格式和/或布局;压缩元数据;以及相似性掩码,用于指示作业应当被调度到哪个核心子集上。
该信息可以以任何合适且期望的形式被提供给神经处理器的控制电路。例如,传达该信息和要执行的运算的适当的命令集和其他(例如,状态)信息可以被传达给并提供给神经处理器的控制单元。
在一个特别优选的实施方案中,要执行的神经网络处理的指示是一组或多组神经网络处理信息的形式,优选地是一个或多个神经网络处理数据结构(描述符)(在存储器中)的形式,每一组此类信息(描述符)优选地指示要执行用于神经网络处理的一个或多个处理运算的序列、由该一组信息(描述符)指示的序列中的每个运算的数据输入和输出的指示(例如,并且优选地,数据要从哪里读取以及存储到何处)、以及运算序列的初始输入在存储器中的位置和/或来自运算序列的输出应当存储在何处(在存储器中)的指示。
要执行的运算的指示可以指示当使用神经处理器来执行神经网络处理时可能需要执行的任何合适且期望的运算。优选地,可以指示执行以下运算中的一个或多个、优选地多个并且优选地全部的要求:从存储器读取;向存储器写入;以及在神经处理器中存在特定(固定函数)执行单元时的任何运算,诸如卷积运算或上述任何其他神经网络处理运算。要执行的神经网络处理的指示还可以并且优选地确实还指示要在其上执行神经网络处理的空间(迭代空间)的大小。
指示要执行的运算的信息可以传达用于定义要执行的运算的任何合适且期望的信息。它们优选地至少指示要执行的运算的类型、该运算的任何必要属性或参数、该运算的任何输入和/或输出的位置、以及该运算要在其上执行的“迭代”空间。
指示用于神经网络处理的处理运算的输入和输出的位置的信息可以对应地采取任何合适且期望的形式。在输入或输出涉及数据处理系统的(主)存储器的情况下,信息优选地包括用于在存储器中定位数据的合适信息,诸如存储/要存储数据的存储器地址的指示、数据将在存储器中具有的布局的指示、数据在存储器中的大小的指示、和/或所讨论的数据的类型的指示。
在一个优选的实施方案中,特别是在如上所述的情况下,神经处理器包括其自己的本地存储,当执行神经网络处理时,该本地存储实际上可以独立于(主)系统存储器使用,处理运算的输入和输出数据的位置的指示可以指示该数据在神经处理器的本地存储内(而不是在(主)存储器中)的适当位置。
因此,在一个特别优选的实施方案中,要执行的神经网络处理的指示可以指示处理运算的输入数据应当从神经处理的本地存储检索(以及数据应当从神经处理器的本地存储的哪个位置检索),并且对应地来自处理运算的输出数据应当被存储在神经处理器的本地存储中(以及输出数据应当被存储在神经处理器的本地存储中的哪个位置)。此类“本地存储”指示优选地识别本地存储数据集,该数据集随后例如通过用于该数据集的适当描述符来另外定义。
如上所述,在一个特别优选的实施方案中,“本地存储”指示识别和定义要在本地存储中使用和配置的相应数据结构(管道)(以及优选地FIFO队列),诸如例如并且优选地,对于每个此类管道,提供管道的身份、管道中的缓冲器的数量以及管道在本地存储中的位置(地址),诸如并且优选地,管道在本地存储中的起始的基地址。
对应地,至少在这种情况下,要执行的处理运算的指示优选地为该处理运算指示本地存储中的哪个或哪些管道(数据结构)(FIFO队列)应当用作该运算的输入和/或哪个或哪些管道应当用作该运算的输出。
在一个优选的实施方案中,可以存在一组多个此类神经网络处理信息集合(描述符)(的序列),其例如并且优选地由神经处理器的控制单元依次作用以使得期望的神经网络处理运算被执行。
向神经处理器的控制单元提供的要执行的神经网络处理的指示可以以任何合适且期望的方式准备。在一个特别优选的实施方案中,要执行的神经网络处理的必要指示优选地借助于适当的编译过程从要执行的神经网络处理的更高级(例如,基于图形的)描述生成。因此,要执行的神经网络处理的更高级(例如,基于图形的)描述被编译成要执行的神经网络处理的适当的一组“更低级”指示(例如,如上所述的一个或多个神经网络处理描述符),其随后可以被神经处理器的控制单元适当地解释和使用以触发和控制必要的神经网络处理。
因此,要执行的神经网络处理的指示的准备优选地由用于神经处理器的编译器完成,该编译器例如并且在一个实施方案中可以在数据处理系统(例如,神经处理器是其一部分的数据处理系统,或者根据需要单独的数据处理系统)的适当处理器(例如,CPU)上执行。
可以并且优选地确实以“离线”方式在自身的神经网络处理的任何执行(execution)和执行(performing)之前执行编译过程。因此,编译过程(中的至少一些)优选地在运行时之前,而不是在所讨论的神经网络的运行时处完成。对应地,编译过程(中的至少一些)和编译器优选地单独地并且在运行驱动器(将执行神经网络处理的处理器的驱动器运算)之前执行。
因此,在一个优选的实施方案中,编译器运算将预先准备要执行的神经网络处理的指示,并且随后例如并且优选地存储那些指示(例如,神经处理描述符)以供将来使用。
随后,例如在运行时,例如驱动器将识别并确定要执行的神经网络处理(例如基于对神经网络处理的请求,例如来自需要神经网络处理的应用程序,例如在数据处理系统的主机处理器(CPU)上执行的),并且发布一个或多个适当的命令,其将使得神经处理器的控制单元访问要执行的神经网络处理的适当指示并且随后使得该神经网络处理被适当地执行。
因此,在一个优选的实施方案中,要执行的神经网络处理的指示通过将那些指示适当地存储在存储器中而被提供给神经处理器的控制单元,随后当期望的神经网络处理要被执行时,这些指示被神经处理器的控制单元从存储器适当地检索并相应地作用。
在一个优选的实施方案中,编译过程和编译器还被配置为并且操作以准备和存储神经网络处理所必需的任何相关联数据结构(并且在要执行的神经网络处理的指示中包括那些数据结构的适当指示)。
因此,在一个优选的实施方案中,例如包括要用于神经网络处理的期望输入特征图和/或权重阵列(滤波器)的任何适当数据结构也被准备好,并且例如并且优选地适当地存储在存储器中。对应地,优选地还生成所需数据结构的位置的适当指示。
取决于数据结构和数据的性质以及例如它是否可以以“离线”方式预先生成或者将仅在运行时已知/可用,此类数据结构可以视情况以“离线”方式预先生成和/或存储,或者它们可以例如并且优选地由驱动器在运行时生成和/或存储,例如作为即时过程。因此,例如并且优选地,除了要执行的神经网络处理的指示中的至少一些能够并且正在以“离线”方式预先生成,还可以存在要执行的神经网络处理的至少一些指示,其在运行时生成,例如并且优选地由用于神经处理器的驱动器生成。
当然,其他布置将是可能的。
当需要神经网络处理时,可以触发神经处理器的控制单元,以例如以任何合适且期望的方式从存储器读取需要的神经网络处理的必要指示(并且随后处理那些指示)。特别是在存在可操作为将处理任务分配给神经处理器的控制单元的前端控制单元(命令流前端)的情况下,这通过以下实现:在提供给前端控制单元(命令流前端)的命令序列中(命令流中)包括适当的命令,例如诸如“运行特定类型的神经网络”命令,响应于该命令,前端控制单元(命令流前端)将向神经处理器的控制单元指示要执行的特定神经网络处理(例如,它应当从其读取要执行的神经网络处理的相关指示,随后控制单元读取相关神经网络处理指示并相应地操作)。
因此,在这种情况下并且优选地,例如并且优选地,用于神经处理器的驱动器将识别对要执行的特定神经网络处理的请求,并且在提供给用于神经处理器的命令流前端的命令流中包括指示该所需神经网络处理的一个或多个适当的命令。
当然,其他布置将是可能的。
如上所述,在本发明中,神经处理器的控制电路可操作为响应于要执行的神经网络处理的指示而使得图形处理器的执行单元执行程序以执行所指示的神经网络处理。可以使得控制电路以任何合适且期望的方式以这种方式操作。例如,控制电路可以是可操作的并且被配置为确定所指示的神经网络处理是否可以由神经处理器执行,并且当其确定该处理不能由神经处理器执行时,替代地使得程序由图形处理器的可编程执行单元执行。
在一个特别优选的实施方案中,向控制电路提供的要执行的神经网络处理的指示可以并且在适当情况下确实指示神经网络处理运算应当由执行程序的图形处理器的可编程执行单元来执行以执行该神经网络处理运算。
因此,例如并且优选地,在向神经处理器的控制单元提供的指示包括指示要执行的处理运算的信息的情况下,要执行的处理运算的指示可以指示要通过由图形处理器的可编程执行单元(而不是由被配置为执行神经网络处理的处理器的执行单元)对程序的执行来执行处理运算。
因此,例如并且优选地,在要执行的神经网络处理的指示包括要执行的神经网络处理的一个或多个描述符的情况下,优选地,描述符可以关于给定指示的神经网络处理运算来指示该处理运算包括由图形处理器的可编程执行单元对(着色器)程序的执行(并且通过该程序执行来执行)。
随后,响应于此类指示,神经处理器的控制电路将使得图形处理器的可编程执行单元执行适当的程序以执行用于神经网络处理的处理运算。
因此,在一个特别优选的实施方案中,本发明的方法包括:被配置为执行神经网络处理的处理器的控制电路(并且神经处理器的控制电路对应地被配置为)响应于要通过由图形处理器的可编程执行单元对程序的执行来执行的神经网络处理的指示而使得图形处理器的可编程执行单元执行程序以执行神经网络处理。
在一个优选的实施方案中,除了指示处理运算应当由执行程序的图形处理器的可编程执行单元来执行的神经网络处理的指示(使得控制单元可以识别该指示),提供给神经处理器的控制电路的指示优选地还指示由图形处理器的可编程执行单元对程序的执行可能需要的任何另外的和附加的信息,诸如尤其并且优选地,以下中的一个或多个、并且优选地全部:要执行的(着色器)程序的指示;(着色器)程序执行所需的任何属性或参数的指示;以及应当执行该程序的迭代空间(例如,线程空间)的指示。
如上所述,在本发明的优选的实施方案中,向神经处理器的控制电路提供的要执行的神经网络处理的指示可以包括要通过由图形处理器的可编程执行单元对程序的执行来执行的处理运算的指示。因此,在必要的情况下,向控制电路提供的要执行的神经网络处理的指示将包括指示应当通过由图形处理器的可编程执行单元对程序的执行来执行的处理的特定指示,并且响应于此类指示,控制电路将使得相关程序执行被图形处理器的可编程执行单元执行。
此类指示可以以任何合适且期望的方式生成并提供给神经处理器的控制电路。如上所述,最优选地,这作为(整个)神经网络处理“编译”过程的一部分来完成,其中例如并且优选地,要执行的神经网络处理的更高级(例如,基于图形的)描述被转换成包括一组一个或多个指示(例如,一组一个或多个描述符)的更低级描述,该组一个或多个指示将被提供给神经处理器的控制电路以向控制电路指示要执行的神经网络处理。
因此,在一个优选的实施方案中,将存在准备要执行的神经网络处理的一组一个或多个指示以提供给神经网络处理器的控制电路的阶段,随后该组指示随后被提供给控制电路,并且控制电路响应于所提供的指示而使得期望的神经网络处理被执行(或者通过神经处理器本身,或者通过神经网络处理器和由图形处理器的可编程执行单元的一个或多个程序的执行的组合)。
最优选地,对于针对由神经网络处理的更高级描述指示的神经网络处理要执行的处理运算(并且优选地对于每个处理运算),这包括:确定所需运算是否可以由被配置为执行神经网络处理的处理器的执行单元来执行,并且当确定所需处理运算可以由被配置为执行神经网络处理的处理器的执行单元来执行时,在要执行的神经网络处理的一组指示中包括将使得控制电路使得该运算由被配置为执行神经网络处理的处理器的执行单元来执行的该运算的指示,并且当确定所需处理运算不能(无法)由被配置为执行神经网络处理的处理器的执行单元执行时,对于该处理运算,在要执行的神经网络处理的该组指示中包括指示处理运算应当通过由图形处理器的可编程执行单元对程序的执行来执行的指示。
对于由神经网络处理的更高级描述指示的每个运算,这可以并且优选地确实被重复,从而准备指示要执行的神经网络处理的一组指示(例如,一组一个或多个神经网络处理描述符),以提供给神经处理器的控制电路,其对应于由该处理的更高级描述定义的神经网络处理。
本发明扩展到神经网络处理的适当的一组指示的此类生成,以提供给神经处理器(其被配置为以本发明的方式操作)的控制单元。
因此,根据本发明的另一个方面,提供了一种从要执行的神经网络处理的更高级描述生成要执行的神经网络处理的一组指示以向被配置为执行神经网络处理的处理器的控制电路提供的方法,该处理器包括一个或多个执行单元,该一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和控制电路,该控制电路被配置为响应于向该控制电路提供的要执行的神经网络处理的指示而向该一个或多个执行单元分配处理任务以使得该执行单元执行用于神经网络处理的处理运算;
所述方法包括:
对于针对由该神经网络处理的该更高级描述指示的该神经网络处理要执行的处理运算:
确定该处理运算是否能够由被配置为执行神经网络处理的该处理器的执行单元执行,以及
当确定该处理运算能够由被配置为执行神经网络处理的该处理器的执行单元执行时,在要执行的神经网络处理的一组指示中包括将使得该控制电路使得该运算由被配置为执行神经网络处理的该处理器的执行单元执行的指示;以及
当确定该处理运算不能由被配置为执行神经网络处理的该处理器的执行单元执行时,对于该处理运算,在要执行的神经网络处理的该一组指示中包括将使得该控制电路通过由图形处理器的可编程执行单元对程序的执行来使得该处理运算被执行的指示。
根据本发明的另一个方面,提供了一种用于从要执行的神经网络处理的更高级描述生成要执行的神经网络处理的一组指示以向被配置为执行神经网络处理的处理器的控制电路提供的装置,该处理器包括一个或多个执行单元,该一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和控制电路,该控制电路被配置为响应于向该控制电路提供的要执行的神经网络处理的指示而向该一个或多个执行单元分配处理任务以使得该执行单元执行用于神经网络处理的处理运算;
该装置包括处理电路,该处理电路被配置为:
对于针对由该神经网络处理的该更高级描述指示的该神经网络处理要执行的处理运算:
确定该处理运算是否能够由被配置为执行神经网络处理的该处理器的执行单元执行,以及
当确定该处理运算可以由被配置为执行神经网络处理的处理器的执行单元执行时,在要执行的神经网络处理的一组指示中包括将使得被配置为执行神经网络处理的处理器的控制电路使得该运算由被配置为执行神经网络处理的处理器的执行单元执行的指示;以及
当确定该处理运算不能由被配置为执行神经网络处理的该处理器的执行单元执行时,对于该处理运算,在要执行的神经网络处理的该一组指示中包括将使得该控制电路通过由图形处理器的可编程执行单元对程序的执行来使得该处理运算被执行的指示。
如本领域的技术人员应当理解的那样,本发明的这些方面和实施方案视情况而定可以并且优选地确实包括本文所述的本发明的优选的和任选的特征中的任一个或多个或所有特征。
因此,例如,神经网络处理的更高级描述优选地包括神经网络处理的基于图形的描述。对应地,要执行的神经网络处理的该一组指示优选地包括一组神经网络描述符,如上所述。
相似地,神经网络处理的该一组指示优选地被提供给被配置为执行神经网络处理的处理器的控制单元,通过将该一组指示适当地存储在存储器中,随后可以由神经处理器的控制电路从存储器检索该一组指示。
在本发明的这些方面和实施方案中,可以确定用于神经网络处理的运算是否可以由神经处理器的执行单元以任何合适且期望的方式执行。例如,神经网络处理的更高级描述有可能使得更高级描述可以直接指示不能由神经处理器的执行单元执行的处理运算(使得该运算随后实际上将暴露于更高级神经网络定义过程)。
附加地或另选地,并且在一个优选的实施方案中,神经网络编译过程被配置为能够并且操作以自身识别不能被神经处理器的执行单元执行的处理运算,并且随后指示那些运算应当通过图形处理器的执行单元上的程序执行来执行。
当然,其他布置将是可能的。
在要通过由图形处理器的可编程执行单元对程序的执行来执行用于神经网络处理的处理运算的情况下,该过程优选地还包括确定(识别)要被执行以执行用于神经网络处理的所需处理运算的(着色器)程序(并且随后将该确定的(选定的)(着色器)程序的指示与要执行的神经网络处理的指示包括在一起)。
为了支持这一点,可以并且优选地确实存在用于执行用于神经网络处理的处理运算的(预先准备的)一组适当(着色器)程序(库),可以从其中选择要使用的(着色器)程序。
因此,在实施方案中,在要通过由图形处理器的可编程执行单元对程序的执行来执行用于神经网络处理的处理运算的情况下:
从用于执行用于神经网络处理的处理运算的一组程序中选择要被执行以执行用于该神经网络处理的所需处理运算的程序;以及
包括该所选择的程序的指示以及要执行的神经网络处理的该指示。
本发明还扩展到神经网络处理编译过程和随后以本发明的方式执行神经网络处理的组合运算。
因此,根据本发明的另外的方面,提供了一种操作数据处理系统的方法,该数据处理系统包括:
处理器,该处理器被配置为执行神经网络处理,该处理器包括:
一个或多个执行单元,该一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和
控制电路,该控制电路被配置为响应于向该控制电路提供的要执行的神经网络处理的指示而向该一个或多个执行单元分配处理任务以使得该执行单元执行用于神经网络处理的处理运算;
该数据处理系统还包括图形处理器,该图形处理器包括可编程执行单元,该可编程执行单元可操作为执行处理程序以执行处理运算;
所述方法包括:
在要执行的神经网络处理的一组指示中包括应当通过由图形处理器的可编程执行单元对程序的执行来执行用于神经网络处理的处理运算的指示,该一组指示向被配置为执行神经网络处理的处理器的控制电路提供;以及
被配置为执行神经网络处理的处理器的控制电路响应于该指示而使得图形处理器的可编程执行单元执行程序以执行所指示的神经网络处理运算。
根据本发明的另一方面,提供了一种数据处理系统,该数据处理系统包括:
处理器,该处理器被配置为执行神经网络处理,该处理器包括:
一个或多个执行单元,该一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和
控制电路,该控制电路被配置为响应于向该控制电路提供的要执行的神经网络处理的指示而向该一个或多个执行单元分配处理任务以使得该执行单元执行用于神经网络处理的处理运算;
该数据处理系统还包括图形处理器,该图形处理器包括可编程执行单元,该可编程执行单元可操作为执行处理程序以执行处理运算;
其中:
数据处理系统还包括一个或多个处理电路,该一个或多个处理电路被配置为向被配置为执行神经网络处理的处理器的控制电路提供要执行的神经网络处理的一组指示,该一组指示包括应当通过由图形处理器的可编程执行单元对程序的执行来执行用于神经网络处理的处理运算的指示;并且
被配置为执行神经网络处理的该处理器的该控制电路被配置为:
响应于该指示而使得图形处理器的可编程执行单元执行程序以执行所指示的神经网络处理。
如本领域的技术人员应当理解的那样,本发明的这些方面和实施方案视情况而定可以并且优选地确实包括本文所述的本发明的优选的和任选的特征中的任一个或多个或所有特征。
如上所述,在本发明中,神经处理器的控制单元将响应于要通过由图形处理器的可编程执行单元对程序的执行来执行的神经网络处理的指示而使得由图形处理器的执行单元执行适当的程序。
神经处理器的控制电路可以使得图形处理器的可编程执行单元执行所需程序,从而以任何合适且期望的方式执行用于神经网络处理的处理运算。在一个优选的实施方案中,控制电路使得适当的(控制)消息被发送到图形处理器,并且最优选地发送到图形处理器的控制单元(线程组(翘曲)管理器),从而使得必要的(着色器)程序执行被执行。
此类消息可例如通过数据处理系统(以及例如,图形处理器)的适当消息结构来发送。
在一个特别优选的实施方案中,为此目的,在神经处理器和图形处理器之间存在适当的控制接口,该控制接口促进并提供用于在神经处理器与图形处理器之间进行通信的机制。最优选地,神经处理器包括适当接口单元((着色器)程序分发单元),其与图形处理器的控制单元(线程组(翘曲)管理器)通信并且具有与该控制单元(线程组(翘曲)管理器)的接口,从而与图形处理器的线程组(翘曲)管理器通信并且使得图形处理器的控制单元(线程组(翘曲)管理器)在需要时触发用于神经网络处理的适当的(着色器)程序执行。在这种情况下,神经处理器的控制单元优选地与通信接口(程序分发)单元适当地通信,以使得该单元由此与图形处理器的控制单元(翘曲管理器)通信,从而使得适当的程序执行在图形处理器上被执行。
因此,在一个优选的实施方案中,神经处理器的控制电路可操作为并且被配置为向与图形处理器的控制单元(线程组(翘曲)管理器)通信的消息传送/接口单元(电路)指示用于图形处理器的处理工作,随后神经处理器的消息传送/接口单元适当地与图形处理器的控制单元(线程组(翘曲)管理器)通信,以使得期望的程序执行被执行。
在一个特别优选的实施方案中,神经处理器的控制电路将要由图形处理器执行的整个神经网络处理任务细分成在图形处理器的程序执行坐标系(空间)内的适当的工作块,诸如并且优选地细分成三维执行线程ID空间的相应块。优选地,随后向消息传送/接口单元发布此类工作的相应块,以便消息传送/接口单元随后向图形处理器“发送”那些工作块以用于程序执行。
如上所述,在一个优选的实施方案中,用于处理的块优选地在(通常更高维度的)整个迭代/运算空间中生成,但是随后在被分发用于处理之前,该总迭代/运算空间中的那些块将被变换到图形处理器的运算/迭代空间(三维执行线程ID空间)中。
神经处理器的控制单元优选地将用于(着色器)程序的执行的任何和所有所需信息适当地传送到神经处理器的消息传送/接口单元。
该信息可以并且优选地确实包括以下中的一个或多个、优选地多个、并且优选地全部:用于着色器程序正在被执行以执行的处理任务(处理块)的标识;应当在图形处理器的程序执行坐标系(空间)内执行着色器程序执行的迭代空间的指示;要执行的(着色器)程序的指示,例如并且优选地,是指向存储器中的程序的指针(例如,该程序的描述符)的形式;(着色器)程序执行所需的任何状态或其他信息的指示(这可以并且优选地确实作为存储在存储器中的(着色器)程序的描述符的一部分来提供);程序执行可能需要的任何其他信息(诸如资源信息)的指示,再次例如并且优选地是适于存储器中的该信息(例如,资源表)的指针的形式;以及描述用于所讨论的处理运算的任何输入和输出(输入源和输出源)的信息,例如并且优选地,根据这此类输入和输出被存储/要被存储在何处以及如何被存储。
响应于来自神经处理器的控制单元的适当指示,消息传送/接口单元随后将适当地与图形处理器的控制单元(线程组(翘曲)管理器)通信,以使得必要的着色器程序执行被执行。
在一个特别优选的实施方案中,从神经处理器到图形处理器的通信是关于并且触发相应线程组(翘曲)的发布,该线程组随后执行程序以执行神经网络处理。因此,优选地,对于要执行着色器程序的每个线程组(翘曲),向图形处理器发送单独的通信(消息)。
如上所述,至少在本发明的优选的实施方案中,将工作块分发给图形处理器用于程序执行,该工作块通常会包括许多线程组(翘曲)。在一个优选的实施方案中,神经处理器的控制单元向消息传送/接口单元发送工作块,随后优选地,该消息传送/接口单元向图形处理器执行核心的适当控制单元(翘曲管理器)迭代地发送创建线程组的通信(消息)。另选地,可以向图形处理器的适当控制单元(例如,翘曲管理器)发送描述多于单个线程组(诸如整个工作块)的通信(消息),随后该控制单元迭代地创建要执行程序以对整个工作块执行处理运算的各个线程组。
用于要执行着色器程序的线程组(翘曲)的到图形处理器的控制单元的任何通信应当并且优选地确实将执行(着色器)程序的任何和所有所需信息适当地传送到图形处理器(传送到图形处理器的控制单元(翘曲管理器))。
该信息可以并且优选地确实包括以下中的一个或多个、并且优选地多个、并且优选地全部:用于着色器程序正在被执行以执行的处理任务的标识;要执行的(着色器)程序的指示,例如并且优选地,是指向存储器中的程序的指针(例如,该程序的描述符)的形式;(着色器)程序执行所需的任何状态或其他信息的指示;程序执行可能需要的任何其他信息(诸如资源信息)的指示,再次例如并且优选地是存储器中的该信息(例如,资源表)的指针的形式;在图形处理器的线程空间中要针对线程组(翘曲)执行的线程的坐标(优选地是例如要针对线程组执行的第一线程的坐标的形式,并且在需要的情况下,应当运行所讨论的线程组中的哪些线程的指示,例如并且优选地是位掩码的形式。
响应于来自神经处理器(的消息传送/接口单元)的适当通信,图形处理器(图形处理器的控制单元(翘曲管理器))应当并且优选地确实产生适当的线程和线程组以执行用于执行神经网络处理的(着色器)程序。此类线程和线程组的产生以及执行用于神经网络处理的处理运算的程序的执行可以以任何合适且期望的方式来执行和进行,诸如并且优选地,根据用于所讨论的图形处理器和图形处理系统中的(着色器)程序执行的正常方式。因此,根据本发明的任何特定要求,由图形处理器的可编程执行单元执行的程序可以并且优选地确实以用于所讨论的图形处理器中的(着色器)程序执行的正常方式进行和操作。
用于执行神经网络处理的处理运算的程序执行应当并且优选地确实使用由来自神经处理器的通信指示的适当输入数据,并且对应地将由该程序执行生成的任何输出数据存储在由与该程序执行相关的神经处理器在通信中指示的位置。
还可以并且优选地确实在神经处理器(的控制单元)与图形处理器(的控制单元)之间存在适当的“握手”和控制通信,例如并且优选地,跟踪程序的执行来执行神经网络处理,例如并且优选地,确保该程序在其要被执行的整个迭代(线程)空间中被执行,并且确定在所需迭代空间(线程空间)上的执行何时已经完成。例如并且优选地,神经处理器的控制电路可以延迟由神经处理器的执行单元对另外的神经网络处理运算的执行,直到确定程序执行已经被适当地完成为止。
在一个优选的实施方案中,跟踪执行神经网络处理的程序的执行,优选地针对和关于要执行该程序的一个(和每个)线程组(翘曲)。因此,在一个优选的实施方案中,图形处理器(例如,图形处理器的线程组(翘曲)管理器)将向神经处理器指示相应线程组(翘曲)何时已经完成对程序的执行以执行所指示的神经网络处理。该“完成”指示优选地包括已经完成的线程组所涉及的任务的标识,以及该任务的哪个线程组已经完成。
附加地或另选地,可以存在返回到神经处理器的关于整个工作块的“完成”指示,例如在相应工作块被传送到图形处理器(而不是单独的线程组)的情况下。
申请人还认识到,当正在通过由图形处理器的可编程执行单元对程序的执行来执行用于神经网络处理的运算时,该程序执行可以并且通常将需要输入数据,该输入数据可以例如并且在一个实施方案中是已经由用于神经网络处理的其他处理运算生成的数据,该其他处理运算可以例如已经由神经处理器的一个或多个执行单元执行。
对应地,随后可以要求由图形处理器上的程序执行生成的输出作为用于神经网络处理的进一步处理运算的输入,该进一步处理运算例如可以由神经处理器的一个或多个执行单元执行。
因此,在一个优选的实施方案中,存在用于在神经处理器(的执行单元)与图形处理器(的可编程执行单元)之间传输数据的机制。
尽管此类数据传输将可以经由图形处理器和神经处理器是其一部分的数据处理系统的存储器系统来执行(例如,通过将数据适当地存储在存储器系统中,并且随后根据需要从其中检索数据),但是在一个特别优选的实施方案中,为了本发明的运算的目的,可以使用神经处理器(如上所述)的(专用)本地存储(缓冲器)在神经处理器与图形处理器之间传输数据。
具体地,在一个特别优选的实施方案中,图形处理器,并且最优选地,图形处理器的适当(着色器)执行核心,能够从神经处理器的本地存储加载数据以及将数据存储到神经处理器的本地存储,并且具体地、并且最优选地,直接经由神经处理器的本地存储来这样做(不需要对数据处理系统的存储器系统(例如,高速缓存分级结构)的任何访问或使用)。
在一个特别优选的实施方案中,数据可以从神经处理器的本地存储加载到图形处理器的可编程执行单元的适当本地存储,诸如图形处理器的可编程执行单元的一组寄存器(寄存器文件)。对应地,数据可以优选地(直接)从图形处理器的可编程执行单元的本地存储(例如寄存器)存储到神经网络处理器的本地存储。
因此,在一个特别优选的实施方案中:
被配置为执行神经网络处理的处理器包括用于在处理器的一个或多个执行单元正在执行神经网络处理时本地地存储数据(并且优选地在被配置为执行神经网络处理的处理器内部,并且可以由被配置为直接执行神经网络处理的处理器的执行单元访问,而不需要对数据处理系统的存储器系统的任何访问)的本地存储;并且
图形处理器包括用于存储由图形处理器的可编程执行单元在执行程序时使用的数据的本地存储,诸如并且优选地包括一组寄存器;
并且本发明所述的方法包括:
当该图形处理器的该可编程执行单元在被配置为执行神经网络处理的该处理器的该控制电路的控制下要执行或正在执行程序以执行用于神经网络处理的处理运算时:
将数据直接从被配置为执行神经网络处理的该处理器的该本地存储加载到该图形处理器的本地存储,以供在该图形处理器的该可编程执行单元正在执行该程序以执行用于神经网络处理的处理运算时使用;以及/或者
将通过由图形处理器的可编程执行单元对程序的执行以执行用于神经网络处理的处理运算来生成的数据直接从图形处理器的本地存储存储到被配置为执行神经网络处理的处理器的本地存储(优选地,随后由被配置为执行神经网络处理的处理器的执行单元使用)。
为了便于该运算,优选地在图形处理器与神经处理器之间存在适当的通信接口和控制单元。例如并且优选地,神经处理器可以包括“本地存储”访问单元,其便于数据在神经处理器的本地存储与图形处理器(可编程执行单元)的本地存储之间的传输。对应地,图形处理器的可编程执行单元是其一部分的处理核心(执行核心)优选地包括可操作为在图形处理器的本地存储与神经处理器的本地存储之间传输数据的一个或多个适当的单元(电路)。
为了进一步促进该运算,当要通过由图形处理器的可编程执行单元对程序的执行来执行用于神经网络处理的一个或多个处理运算时,优选地适当地定义要用作用于程序执行的输入和输出源的、在神经处理器的共享存储内的适当的输入和输出数据结构(管道)(缓冲器),并且优选地将指示那些输入和输出数据结构(管道)(缓冲器)的信息适当地传送到图形处理器(的控制单元(线程组(翘曲)管理器))。
该本地存储输入和输出存储器/缓冲器信息随后可以被传送到例如并且优选地用于神经处理器的本地存储的适当控制单元并且被其使用,以将用于输入和输出缓冲器的该信息记录在本地存储中,例如并且优选地,与用于它们所涉及的处理块(处理任务)的标识相关联地记录,使得该信息随后可以用于在需要时访问本地存储中的输入缓冲器中的期望数据,并且任何输出数据可以在需要时被写入本地存储中的适当输出缓冲器。
描述要用作用于图形处理器上的程序执行的输入和输出源的、在神经处理器的共享存储内的任何输入和输出缓冲器的信息可以例如并且优选地根据期望和需要指示缓冲器的偏移、步幅、布局等。
如上所述,在一个优选的实施方案中,神经处理器的共享存储被配置为相应数据结构(管道),并且优选地被配置为FIFO队列,其随后可以充当(用作)在神经处理器的共享存储内的输入和/或输出缓冲器,该输入和/或输出缓冲器将被用作用于图形处理器上的程序执行的输入和输出源。因此,在一个特别优选的实施方案中,描述将被用作用于图形处理器上的程序执行的输入和输出源的神经处理器的共享存储内的任何输入和输出缓冲器的信息尤其定义将被用作用于图形处理器上的程序执行的输入和输出源的神经处理器的共享存储内的相应输入和输出管道。
对应地,在一个特别优选的实施方案中,并且如上所述,针对整个处理运算(迭代)空间已被划分成的相应处理(工作)块执行图形处理器上的着色器程序执行,其中每个块具有将在执行着色器程序时被用作数据的输入或输出源的一或多个给定管道(一或多个FIFO队列)内的对应相关联的且特定的缓冲器(条目)。因此,在一个优选的实施方案中,着色器程序执行在相应工作块中并且针对相应工作块执行,其中每个此类块使用其在神经处理器的本地存储中的、将被用作用于程序执行的输入和/或输出源相关管道/FIFO中的相应的且特定的缓冲器。
对应地,针对在着色器程序执行中使用的数据的任何寻址优选地被配置为并且设定为相对于本地存储中的所讨论的管道(队列)中的相关块缓冲器,使得同一着色器程序可以被再用于每个块,并且寻址总是被包含/相对于相应块并且在相应块内(使得不需要改变针对各自执行所讨论的着色器程序的不同块的寻址)。例如并且优选地,在着色器程序执行期间对给定地址的读取(或写入)应当并且优选地确实总是涉及所讨论的缓冲器内的同一相对地址(尽管缓冲器将特定于所讨论的块)。因此,例如,从地址0的读取将总是与所讨论的管道(队列)中的所讨论的块的缓冲器的开始相关。
在此类实施方案中,在一个优选的实施方案中,当图形处理器(执行核心)需要向神经处理器的本地存储写入数据或从神经处理器的本地存储读取数据时,图形处理器(执行核心)可以并且优选地确实相应地进行通信,并且优选地向神经处理器适当地传送它想要访问的相对地址以及访问涉及(它正在执行)哪个工作块以及它想要访问本地存储中的哪个数据集(哪个管道/队列)。
如下面将进一步讨论的,神经处理器优选地包括用于其本地存储的适当控制单元(电路),其可操作为并且被配置为将来自图形处理器的“请求”中的该信息转换成例如用于神经处理器的本地存储的适当(真实)地址,并且优选地基于哪个神经网络处理运算(着色器程序)正被执行、程序正针对其被执行并且请求所涉及的工作块、正被访问的管道(队列)、以及访问所针对的工作块内的相对地址。随后,神经处理器上的适当控制单元可以操作以识别神经处理器的本地存储中要访问的相关缓冲器,并且随后进行相对寻址以找到要访问的神经处理器的本地存储中的实际(真实)地址。
当执行程序时,数据可以在神经处理器的本地存储与图形处理器的可编程执行单元的本地存储之间传输,以便以任何合适且期望的方式以本发明的方式执行用于神经网络处理的处理。
在一个优选的实施方案中,(输入)数据从神经引擎的本地存储到图形处理器的(本地存储)的传输通过以下实现:在开始程序的执行以执行用于神经网络处理的一个或多个运算之前(例如,对于相应线程组),将数据从神经处理器的本地存储(直接)加载到图形处理器的可编程执行单元的适当本地存储(诸如并且优选地,相关寄存器)。
这优选地借助于适当的“预加载”运算来完成,该“预加载”运算在例如针对线程组的程序执行开始之前将数据从神经处理器的本地存储加载到图形处理器的本地存储。
这优选地在逐线程组(翘曲)的基础上完成,即,使得对于要执行程序以执行用于神经网络处理的处理运算的每个线程组,在开始针对该线程组的程序执行之前,将适当的输入数据从神经处理器的本地存储加载到用于所讨论的线程组的适当的一组寄存器。
因此,在这种情况下,在线程组执行程序之前,线程组在执行程序时所需的数据实际上将从神经处理器的本地存储“预加载”到图形处理器的执行核心的本地存储(诸如寄存器文件)中。
在一个优选的此类实施方案中,给定线程组(翘曲)的程序执行所需的来自神经处理器的本地存储任何和所有数据(预先)被加载到图形处理器的可编程执行单元(执行核心)的本地存储(例如,寄存器文件)中,使得当针对所讨论的线程组执行(着色器)程序时,将不需要来自神经处理器的本地存储的另外的数据。
对应地,在一个优选的实施方案中,(输出)数据从图形处理器的本地存储到神经处理器的本地存储的传输通过以下实现:在已经完成程序的执行以执行用于神经网络处理的一个或多个运算(例如,对于相应线程组)之后,将数据从用于已经执行程序以执行用于神经网络处理的处理运算的图形处理器的可编程执行单元的本地存储(诸如并且优选地,相关寄存器)(直接地)写入到神经处理器的本地存储。
这优选地借助于适当的“后存储”运算来完成,该“后存储”运算在例如针对线程组的程序执行已经完成之后将数据从图形处理器的本地存储写入到神经处理器的本地存储。
这再次优选地在逐线程组(翘曲)的基础上完成,即,使得对于执行程序以执行用于神经网络处理的处理运算的每个线程组,在该线程组已经完成其执行之后,将适当的输出数据从用于所讨论的线程组的适当的一组寄存器写入到神经处理器的本地存储。
因此,在这种情况下,在线程组已经完成执行程序之后,由线程组在执行程序时生成的输出数据实际上将从图形处理器的可编程执行单元(执行核心)的本地存储(诸如寄存器文件)“后存储”到神经处理器的本地存储中。
在一个优选的此类实施方案中,在针对线程组的程序执行完成(结束)之后,由给定线程组(翘曲)的程序执行生成的要被存储到神经处理器的本地存储中的任何和所有(输出)数据被如此存储,使得在针对所讨论的线程组的(着色器)程序的执行期间没有(输出)数据将被写入到神经处理器的本地存储。
为了便于此类运算,图形处理器(的执行核心)优选地包括适当的寄存器预加载/后存储单元(电路),其可操作为并且被配置为在神经处理器的本地存储与图形处理器的本地存储(寄存器文件)之间(直接地)传输数据。优选地,该寄存器预加载/后存储单元具有到例如用于该目的的神经处理器的本地存储的控制单元(诸如并且优选地,本地存储访问单元)的适当(直接)接口。
为了便于针对线程组的此类(寄存器)预加载和后存储运算,优选地,例如从图形处理器的控制单元(线程组管理器)例如向寄存器预加载/后存储单元提供适当的信息,例如并且优选地,在预加载运算的情况下,该消息指示需要进行预加载的工作块的身份、正在针对哪个线程组(翘曲)执行预加载、数据应当从神经处理器的本地存储预加载到哪个寄存器、和/或指示神经处理器的本地存储中的哪些数据应当被加载到哪个寄存器的适当映射。
对应地,在“后存储”运算的情况下,优选地提供信息,例如并且优选地,该信息指示后存储所涉及的工作块的身份、正在针对哪个线程组(翘曲)执行后存储、数据应当从哪个寄存器被后存储在神经处理器的本地存储中、和/或指示给定寄存器中的数据应当被存储在神经处理器的本地存储中何处的适当映射。
在一个优选的实施方案中,(输入)数据从神经处理器的本地存储到图形处理器的(本地存储)的传输可以并且确实通过以下实现:在程序的执行以执行用于神经网络处理的一个或多个运算期间(对于相应线程组),将数据从神经处理器的本地存储(直接)加载到图形处理器的可编程执行单元的适当本地存储(诸如并且优选地,相关寄存器)。
这优选地通过在被执行以执行用于神经网络处理的一个或多个运算的程序中包括适当的“神经处理器本地存储”加载指令来完成,该指令在被执行时触发将数据从神经处理器的本地存储加载到图形处理器的本地存储。
因此,在一个特别优选的实施方案中,响应于正被执行以执行用于神经网络处理的处理运算的程序中的(特定)指令的执行,数据可以(并且确实)从神经处理器的本地存储(直接)被加载到本地存储(诸如并且优选地,一组寄存器),以供图形处理器的可编程执行单元在执行程序以执行用于神经网络处理的处理运算时使用。
因此,在一个特别优选的实施方案中,要被执行以执行用于神经网络处理的运算的程序可以包括在被执行时将执行以下操作的指令:使得数据从神经处理器的本地存储被加载到诸如并且优选地正在执行该程序的可编程执行单元的适当的一个或多个寄存器的本地存储。
随后这将允许使用程序执行本身来控制和触发将数据从神经处理器的本地存储加载到图形处理器的本地存储。
因此,在一个特别优选的实施方案中:
被配置为执行神经网络处理的处理器包括用于在处理器的一个或多个执行单元正在执行神经网络处理时本地地存储数据(并且优选地在被配置为执行神经网络处理的处理器内部,并且可以由被配置为直接执行神经网络处理的处理器的执行单元访问,而不需要对数据处理系统的存储器系统的任何访问)的本地存储;并且
图形处理器包括用于存储由图形处理器的可编程执行单元在执行程序时使用的数据的本地存储,诸如并且优选地包括一组寄存器;
并且本发明所述的方法包括:
当该图形处理器的该可编程执行单元正在执行程序以执行用于执行神经网络处理的处理运算时,该可编程执行单元响应于该程序中的指令正被执行,使得数据从被配置为执行神经网络处理的该处理器的该本地存储被加载到该可编程执行单元的本地存储,以供在执行该程序以执行用于神经网络处理的该处理运算时使用。
对应地,在一个优选的实施方案中,图形处理器的该可编程执行单元被配置为:响应于程序中的指令正在由该可编程执行单元执行,该指令指示数据应当从被配置为执行神经网络处理的处理器的本地存储被加载到该可编程执行单元的本地存储,使得数据从被配置为执行神经网络处理的该处理器的本地存储被加载到该可编程执行单元的该本地存储。
加载指令优选地被适当地识别为要将数据从神经处理器的本地存储加载的加载指令。例如,加载指令可以被显式地指示为此类加载指令,或者其可以被间接地识别为此类加载指令,例如通过指示在应用适当的地址映射时映射到神经处理器的本地存储(而不是到数据处理系统的存储器系统)要从其加载的地址。例如,可以为此类指令指示适当的寻址模式。
加载指令优选地还指示并提供从神经处理器的本地存储加载数据所需的任何另外的信息,诸如要访问哪个数据集(缓冲器)、要加载的缓冲器中的“条目”(位置)以及要存储所加载的数据的一个或多个寄存器。如上所述,在一个优选的实施方案中,优选地根据要访问的相关管道(队列)来指示要访问的数据集,并且优选地根据所讨论的缓冲器内的相对地址来指示该管道中的要加载的“条目”(位置)。
对应地,在一个优选的实施方案中,(输出)数据从图形处理器的本地存储到神经处理器的本地存储的传输可以并且确实通过以下实现:在程序的执行以执行用于神经网络处理的一个或多个运算(对于相应线程组)期间,将数据从用于正在执行程序以执行用于神经网络处理的处理运算的图形处理器的可编程执行单元的本地存储(诸如并且优选地,相关寄存器)(直接地)写入到神经处理器的本地存储。
这优选地通过在被执行以执行用于神经网络处理的一个或多个运算的程序中包括适当的“神经处理器本地存储”存储指令来完成,该指令在被执行时触发将数据从图形处理器的本地存储写入到神经处理器的本地存储。
因此,在一个特别优选的实施方案中,响应于正被执行以执行用于神经网络处理的处理运算的程序中的(特定)指令的执行,数据可以(并且确实)从图形处理器的可编程执行单元的本地存储(诸如并且优选地,一组寄存器)写入到神经处理器的本地存储中。
因此,在一个特别优选的实施方案中,要被执行以执行用于神经网络处理的运算的程序可以包括在被执行时将执行以下操作的指令:使得数据从诸如并且优选地正在执行该程序的可编程执行单元的适当的一个或多个寄存器的本地存储被存储到神经处理器的本地存储中。
随后这将允许使用程序执行本身来控制和触发将数据从图形处理器的本地存储存储到神经处理器的本地存储中。
因此,在一个特别优选的实施方案中:
被配置为执行神经网络处理的处理器包括用于在处理器的一个或多个执行单元正在执行神经网络处理时本地地存储数据(并且优选地在被配置为执行神经网络处理的处理器内部,并且可以由被配置为直接执行神经网络处理的处理器的执行单元访问,而不需要对数据处理系统的存储器系统的任何访问)的本地存储;并且
图形处理器包括用于存储由图形处理器的可编程执行单元在执行程序时使用的数据的本地存储,诸如并且优选地包括一组寄存器;
并且本发明所述的方法包括:
当该图形处理器的该可编程执行单元正在执行程序以执行用于执行神经网络处理的处理运算时,该可编程执行单元响应于该程序中的指令正被执行,使得数据从该可编程执行单元的该本地存储写入到被配置为执行神经网络处理的该处理器的该本地存储中,例如并且优选地,以供随后由被配置为执行神经网络处理的该处理器的执行单元使用。
对应地,在一个优选的实施方案中,图形处理器的该可编程执行单元被配置为:响应于程序中的指令正在由该可编程执行单元执行,该指令指示数据应当从该可编程执行单元的本地存储被存储到被配置为执行神经网络处理的处理器的本地存储中,使得数据从该可编程执行单元的该本地存储被存储到被配置为执行神经网络处理的该处理器的本地存储中。
存储指令优选地被适当地识别为要将数据存储到神经处理器的本地存储中的存储指令。例如,存储指令可以被显式地指示为此类存储指令,或者其可以被间接地识别为此类存储指令,例如通过指示在应用适当的地址映射时映射到神经处理器的本地存储(而不是到数据处理系统的存储器系统)的要被写入的地址。例如,可以为此类指令指示适当的寻址模式。
存储指令优选地还指示并提供将数据存储到神经处理器的本地存储中所需的任何另外的信息,诸如哪个数据集(缓冲器)要被写入、缓冲器中要被写入的“条目”(位置)以及其内容要被写入到神经处理器的本地存储的一个或多个寄存器。如上所述,在一个优选的实施方案中,优选地根据要访问的相关管道(队列)来指示要访问的数据集,并且优选地根据所讨论的缓冲器内的相对地址来指示该管道中的要被写入的“条目”(位置)。
在一个优选的实施方案中,此类加载和存储指令借助于图形处理器的执行核心的加载/存储单元来实现,该加载/存储单元在正常过程中将向数据处理系统的存储器系统加载和存储数据,但是相反该加载/存储单元被配置为响应于此类加载和存储指令而从神经处理器的本地存储加载数据或向神经处理器的本地存储存储数据。对应地,加载/存储单元因此优选地具有适当接口以访问神经处理器的本地存储,该本地存储例如并且优选地独立于并且不需要使用任何总线接口或以其他方式连接到数据处理系统的存储器系统。
因此,在这种情况下,加载/存储单元将具有到数据处理系统的存储器系统的接口以及访问神经处理器的本地存储的单独的、不同的接口。
因此,在一个特别优选的实施方案中,图形处理器还包括加载/存储电路,该加载/存储电路具有到数据处理系统的存储器系统的接口,通过该接口该加载/存储电路可以在图形处理器的可编程执行单元的本地存储与数据处理系统的存储器系统之间传输数据,并且具有与被配置为执行神经网络处理的处理器的单独接口,通过该单独接口该加载/存储电路可以在被配置为执行神经网络处理的处理器的本地存储与图形处理器的可编程执行单元的本地存储之间传输数据。
在访问神经处理器的本地存储的情况下,加载/存储单元优选地与被配置为执行神经网络处理的处理器的本地存储的适当控制电路(控制单元)(本地存储访问单元)通信并对接(如上所述),从而允许向神经处理器的本地存储的适当访问以及从神经处理器的本地存储的适当数据传输。
在此类布置中,当图形处理器的可编程执行单元执行神经处理器加载或存储指令时,该可编程执行单元优选地适当地发信号通知加载/存储单元,以触发并使得加载/存储单元从神经处理器的本地存储加载相关数据或向神经处理器的本地存储存储相关数据。因此,优选地存在从可编程执行单元到加载/存储单元的对应通信接口,经由该通信接口可以触发此类加载和存储运算。
当与被配置为执行神经处理的处理器的本地存储的适当控制单元(电路)通信时,图形处理器的执行核心的加载/存储单元优选地传送适当信息,以允许识别神经处理器的本地存储中的所需数据(在加载指令的情况下)和/或识别神经处理器的本地存储中的将存储数据的相关条目(在存储指令的情况下)。
因此,在加载指令的情况下,优选地,加载存储单元向神经处理器(并且优选地,向神经处理器的本地存储的控制电路)传送从神经处理器的本地存储加载数据所需的任何和所有信息,诸如并且优选地,正在为其发布加载的工作块的适当身份、要从其加载数据的用于该工作块的本地存储中的哪个数据集(管道)(缓冲器)、以及要被加载的缓冲器中的(相对)元素(位置)。
对应地,在存储指令的情况下,信息优选地包括正在为其发布存储的工作块的适当身份、数据要被存储在该工作块的本地存储中的哪个数据集(管道)(缓冲器)、要被写入的缓冲器中的(相对)元素(位置)、以及被存储到本地存储中的值。
据信在(着色器)程序中提供要由图形处理器的可编程执行单元执行的指令(其将使得数据从相关联的神经处理器的本地存储加载或存储到相关联的神经处理器的本地存储)本身可能是新的且有利的。
因此,根据本发明的另一个方面,提供了一种生成程序以供由图形处理器的可编程执行单元执行以执行用于神经网络处理的一个或多个处理运算的方法,该方法包括:
在要由该图形处理器的该可编程执行单元执行以执行用于神经网络处理的一个或多个处理运算的程序中包括以下中的至少一者:
在被执行时将执行以下操作的指令:触发供在执行该程序以执行用于神经网络处理的一个或多个处理运算时使用的数据从被配置为执行神经网络处理的处理器的本地存储加载到该图形处理器的该可编程执行单元的本地存储,以供在执行该程序以执行用于神经网络处理的一个或多个处理运算时使用;和
在被执行时将执行以下操作的指令:使得存储在该图形处理器的该可编程执行单元的本地存储中的数据被写入到被配置为执行神经网络处理的处理器的本地存储(并且优选地供由被配置为执行神经网络处理的该处理器的该执行单元在执行用于神经网络处理的处理运算时使用)。
根据本发明的另一方面,提供了一种用于生成程序以供由图形处理器的可编程执行单元执行以执行用于神经网络处理的一个或多个处理运算的装置,该装置包括一个或多个处理电路,该一个或多个处理电路被配置为:
在要由该图形处理器的该可编程执行单元执行以执行用于神经网络处理的一个或多个处理运算的程序中包括以下中的至少一者:
在被执行时将执行以下操作的指令:触发供在执行该程序以执行用于神经网络处理的一个或多个处理运算时使用的数据从被配置为执行神经网络处理的处理器的本地存储加载到该图形处理器的该可编程执行单元的本地存储,以供在执行该程序以执行用于神经网络处理的一个或多个处理运算时使用;和
在被执行时将执行以下操作的指令:使得存储在该图形处理器的该可编程执行单元的本地存储中的数据被写入到被配置为执行神经网络处理的处理器的本地存储(并且优选地供由被配置为执行神经网络处理的该处理器的该执行单元在执行用于神经网络处理的处理运算时使用)。
对应地,本发明还扩展到包括可编程执行单元的图形处理器,该可编程执行单元被配置为使用此类加载和存储指令。
因此,根据本发明的另一方面,提供了一种操作图形处理器的方法,该图形处理器包括:可编程执行单元,该可编程执行单元可操作为执行处理程序以执行处理运算;以及本地存储,该本地存储被配置为存储数据以供由该图形处理器的该可编程执行单元在执行程序时使用;
所述方法包括:
响应于程序中的指令正在由该可编程执行单元执行,将数据从被配置为执行神经网络处理的处理器的本地存储被加载到该图形处理器的该本地存储,以供由该图形处理器的该可编程执行单元在执行正被执行的该程序中的另外的指令时使用;以及/或者
响应于程序中的指令正在由图形处理器的该可编程执行单元执行,将存储在该图形处理器的该可编程执行单元的该本地存储中的数据在由该图形处理器的该可编程执行单元对该程序的执行期间写入到被配置为执行神经网络处理的处理器的本地存储(供被配置为执行神经网络处理的处理器的一个或多个执行单元使用)。
根据本发明的另外的方面,提供了一种图形处理器,该图形处理器包括:
可编程执行单元,该可编程执行单元可操作为执行处理程序以执行处理运算;和
本地存储,该本地存储被配置为存储数据以供由该图形处理器的该可编程执行单元在执行程序时使用;
其中:
所述可编程执行单元被配置为:
响应于程序中的指令正在由该可编程执行单元执行,使得数据从被配置为执行神经网络处理的处理器的本地存储被加载到该图形处理器的该本地存储,以供由该图形处理器的该可编程执行单元在执行正被执行的该程序中的另外的指令时使用;以及/或者
响应于程序中的指令正在由该可编程执行单元执行,使得存储在该图形处理器的该可编程执行单元的该本地存储中的数据在由该图形处理器的该可编程执行单元对该程序的执行期间被写入到被配置为执行神经网络处理的处理器的本地存储(供被配置为执行神经网络处理的处理器的一个或多个执行单元使用)。
本领域技术人员将了解,本发明的所有这些方面和实施方案可以并且优选地确实包括本文所述的本发明的优选和任选特征中的任何一个或多个或所有特征。因此,图形处理器和神经处理器的本地存储优选地如上所述,并且适当的加载和存储指令优选地如上所述。
此类加载和存储指令可被包括在(着色器)程序中以供由图形处理器的可编程执行单元以任何合适且期望的方式执行。最优选地,这作为(整个)神经网络处理(着色器)程序“编译”过程的一部分来完成,其中例如并且优选地,生成用于执行用于神经网络处理的一个或多个处理运算的更低级可执行程序指令序列。
因此,加载和存储指令可以并且优选地确实被包括在用于由图形处理器的可编程执行单元借助于合适的编译过程执行的程序中,该编译过程例如并且优选地从该程序要执行的运算的合适的更高级描述生成用于由图形处理器的可编程执行单元执行的程序指令。
因此,要通过(着色器)程序的执行来执行的神经网络处理运算的更高级描述优选地被编译成用于图形处理器的可编程执行单元的适当“更低级”可执行指令集,其随后可以由图形处理器适当地执行以执行神经网络处理所需的运算。
因此,准备要由图形处理器执行以执行用于神经网络处理的处理运算的程序优选地由用于图形处理器的编译器完成,该编译器可以例如并且在一个实施方案中确实在数据处理系统(例如,根据需要,图形处理器和神经处理器是其一部分的数据处理系统,或者是单独的数据处理系统)的适当处理器(例如,CPU)上执行。
可以并且优选地确实以“离线”方式在自身的神经网络处理的任何执行(execution)和执行(performing)之前执行编译过程。因此,编译过程(中的至少一些)优选地在运行时之前,而不是在所讨论的神经网络处理的运行时处完成。对应地,编译过程(中的至少一些)和编译器优选地单独地在运行驱动器(用于执行神经网络处理的驱动器运算)之前执行。
因此,在一个优选的实施方案中,编译器运算将预先准备用于由图形处理器执行的合适程序以执行用于神经网络处理的处理运算,包括根据需要以本实施方案的方式的任何加载和存储指令,并且随后例如并且优选地存储那些程序(指令集)以供将来使用。例如,如上所述,优选地预先生成并存储用于执行用于神经网络处理的处理运算的适当的一组(着色器)程序(库),随后可以从该组选择并使用要针对特定神经网络处理执行的一个或多个给定(着色器)程序。
在一个优选的实施方案中,当生成程序以供由图形处理器执行以执行用于神经网络处理的处理运算时,编译和编译过程包括:对于针对通过要由图形处理器的可编程执行单元执行的程序实现的神经网络处理要执行的(并且优选地对于每个)处理运算,确定该运算是否需要来自被配置为执行神经网络处理的相关联处理器的输入,并且当确定处理运算需要来自被配置为执行神经网络处理的相关联处理器的输入时,在要由图形处理器的可编程执行单元执行的程序中,在用于处理运算的指令之前包括在被执行时将执行以下操作的指令:使得数据从被配置为执行神经网络处理的处理器的本地存储加载到图形处理器的可编程执行单元的本地存储;以及/或者
确定被配置为执行神经网络处理的相关联处理器的执行单元是否将需要由处理运算生成的数据,该处理运算通过要由该图形处理器的该可编程执行单元执行的该程序中的指令的执行来执行;以及
当确定被配置为执行神经网络处理的该相关联处理器的执行单元将需要由通过该程序中的指令的执行来执行的处理运算生成的数据时,在执行该处理运算的该指令之后包括在被执行时将执行以下操作的指令:使得数据从该图形处理器的该可编程执行单元的本地存储被写入到被配置为执行神经网络处理的相关联处理器的本地存储。
对于通过执行所讨论的程序中的指令来执行的每个运算,这可以并且优选地确实重复。
本发明扩展到用于执行以执行用于神经网络的处理运算的程序的此类生成。
因此,根据本发明的另一个方面,提供了一种从要执行的神经网络处理运算的更高级描述生成一组程序指令的方法,该组程序指令在由图形处理器的可编程执行单元执行时将执行神经网络处理运算;
所述方法包括:
对于针对由要执行的神经网络处理运算的更高级描述指示的神经网络处理要执行的处理运算:
确定该运算是否需要来自被配置为执行神经网络处理的相关联处理器的输入;以及
当确定该处理运算需要来自被配置为执行神经网络处理的相关联处理器的输入时,在要由该图形处理器的该可编程执行单元执行的该程序中,在用于该处理运算的指令之前包括在被执行时将执行以下操作的指令:使得数据从被配置为执行神经网络处理的该处理器的本地存储加载到该图形处理器的该可编程执行单元的本地存储;
以及/或者
确定被配置为执行神经网络处理的相关联处理器的执行单元是否将需要由处理运算生成的数据,该处理运算通过要由该图形处理器的该可编程执行单元执行的该程序中的指令的执行来执行;以及
当确定被配置为执行神经网络处理的该相关联处理器的执行单元将需要由通过该程序中的指令的执行来执行的处理运算生成的数据时,在执行该处理运算的该指令之后包括在被执行时将执行以下操作的指令:使得数据从该图形处理器的该可编程执行单元的本地存储被写入到被配置为执行神经网络处理的相关联处理器的本地存储。
根据本发明的另一个方面,提供了一种用于从要执行的神经网络处理运算的更高级描述生成一组程序指令的装置,该组程序指令在由图形处理器的可编程执行单元执行时将执行神经网络处理运算;
该装置包括处理电路,该处理电路被配置为:
对于针对由要执行的神经网络处理运算的更高级描述指示的神经网络处理要执行的处理运算:
确定该运算是否需要来自被配置为执行神经网络处理的相关联处理器的输入;并且
当确定该处理运算需要来自被配置为执行神经网络处理的相关联处理器的输入时,在要由该图形处理器的该可编程执行单元执行的该程序中,在用于该处理运算的指令之前包括在被执行时将执行以下操作的指令:使得数据从被配置为执行神经网络处理的该处理器的本地存储加载到该图形处理器的该可编程执行单元的本地存储;
以及/或者
确定被配置为执行神经网络处理的相关联处理器的执行单元是否将需要由处理运算生成的数据,该处理运算通过要由该图形处理器的该可编程执行单元执行的该程序中的指令的执行来执行;并且
当确定被配置为执行神经网络处理的该相关联处理器的执行单元将需要由通过该程序中的指令的执行来执行的处理运算生成的数据时,在执行该处理运算的该指令之后包括在被执行时将执行以下操作的指令:使得数据从该图形处理器的该可编程执行单元的本地存储被写入到被配置为执行神经网络处理的相关联处理器的本地存储。
如本领域的技术人员应当理解的那样,本发明的这些方面和实施方案视情况而定可以并且优选地确实包括本文所述的本发明的优选的和任选的特征中的任一个或多个或所有特征。
在本发明的这些方面和实施方案中,可以确定用于要通过程序执行来执行的神经网络处理的运算是否将需要从被配置为以任何合适且期望的方式执行神经网络处理的相关联处理器的本地存储加载数据或向相关联处理器的本地存储存储数据。例如,要执行的处理的更高级(例如,程序员的)描述可以使得更高级描述可以直接指示要使用从相关联神经网络处理器的本地存储加载的数据的处理运算和/或其输出要被写入到相关联神经处理器的本地存储。
附加地或另选地,(着色器)程序编译过程可被配置为能够并且操作以自身识别需要来自被配置为执行神经网络处理的相关联处理器的数据的处理运算和/或其输出要被提供给被配置为执行神经网络处理的相关联处理器,并且随后将适当的加载和/或存储指令包括在要被相应地执行的编译程序中。
就这一点而言,应当理解,由图形处理器的可编程执行单元执行以在被配置为执行神经网络处理的相关联处理器的控制下执行用于神经网络处理的处理运算的给定程序可以包括例如零个、一个或多个此类加载指令以及对应地零个、一个或多个此类存储指令,并且优选地取决于特定处理运算和通过执行该程序来执行那些处理运算所需的输入数据以及由那些处理运算生成的输出数据。
当然,其他布置将是可能的。
以本发明的方式进行的运算可以包括如上所述的预加载/后存储运算,以及以所讨论的方式对程序指令的执行以从神经处理器的本地存储加载或向神经处理器的本地存储存储另外的数据(并且在一个优选的实施方案中就是这样做的)。
在一个优选的实施方案中,当执行程序以执行用于神经网络处理器的处理运算(即,也没有如上所述的任何预加载或后存储运算)时,仅通过适当指令的执行向和从神经处理器的本地存储传输数据。在这种情况下,响应于正被执行以执行用于神经网络处理的处理运算的程序中的指令并在这些指令的控制下,任何和所有数据将相应地在图形处理器的本地存储与神经处理器的本地存储之间传输。
应当理解,当以本发明的方式执行神经网络处理时,可能需要仅执行单个程序来执行用于神经网络处理的处理运算,或者可能存在多个程序执行实例来执行由图形处理器的可编程执行单元执行的用于神经网络处理的处理运算。对应地,可以相应地存在通过由图形处理器对程序的执行来执行的处理运算与使用神经处理器的执行单元来执行的用于神经网络处理的其他处理运算交织。
因此,例如并且优选地,由神经处理器的执行单元执行的处理运算之后可以执行程序以在图形处理器上执行用于神经网络处理的处理运算,之后是由神经处理器的执行单元执行的一个或多个另外的处理运算(等等,根据需要)。
响应于所提供的要执行的神经网络处理的指示,将在神经处理器的控制电路的控制下执行该处理以及在神经处理器或图形处理器上的处理的调度。
因此,就这一点而言,应当对应地注意,当以本发明的方式操作时,执行程序以执行用于神经网络处理的处理运算的图形处理器的运算(全部地和完全地)由神经处理器(以及神经处理器的控制电路/消息传送/接口电路)触发并且在其控制下。当需要以本发明的方式操作时,图形处理器的适当控制单元(例如,线程组(翘曲)管理器)应当不并且优选地确实不从除了神经处理器之外的源接收与神经网络处理相关的任何控制通信(消息传送)(即,使得通过触发神经处理器执行神经网络处理以及向神经处理器(的控制电路)提供要执行的神经网络处理的适当指示来完全控制以本发明的方式的运算)。
就这一点而言,应当注意,以本发明的方式执行用于神经网络处理的处理运算的着色器程序执行可与用于执行其他处理(诸如图形处理)的着色器程序执行交织。因此,例如,着色器执行核心可交织用于执行神经网络处理的处理运算的线程组的执行(在神经处理器的控制下)以及用于执行图形处理的线程组的执行(其将执行不同的着色器程序)。然而,用于以本发明的方式执行用于神经网络处理的处理运算的目的的任何着色器程序执行由神经处理器触发并控制。
除了被配置为执行神经网络处理的处理器和图形处理器之外,数据处理系统还可以包括数据处理系统可以包括的任何期望的部件和元件,诸如以下中的一者或多者或全部:显示处理单元(显示处理器)、一个或多个中央处理单元(CPU)、视频处理器、数字信号处理器、显示器和存储器。
这些处理器可被布置在片上系统内。
数据处理系统可被实现为可能需要执行神经网络处理的任何合适电子设备的一部分,例如台式计算机、便携式电子设备(例如平板电脑或移动电话)或其他电子设备。因此,本发明还扩展到一种电子设备,所述电子设备包括本发明的数据处理系统(并且数据处理系统以本发明的方式在所述电子设备上操作)。在一个实施方案中,本发明的数据处理系统可被实现为便携式电子设备(诸如移动电话、平板电脑或其他便携式设备)的一部分。
本发明可与以下结合使用并且用于以下:任何合适且所需的神经网络和神经网络处理。在优选的实施方案中,神经网络是卷积神经网络。
在实施方案中,神经网络处理可以涉及“推断”或“分类”过程。然而,根据需要,存在可用于执行不同运算的各种不同类型或布置的神经网络,并且本发明可在任何合适的此类应用中体现实用性。本发明还可以在训练过程中使用。
神经网络处理的输入可以对应于由数据处理系统接收的任何合适的数据(或从该数据导出),用于根据神经网络处理进行处理,以便生成有用的输出,例如图像、来自图像信号处理器(ISP)的图像、来自视频数据、声音数据或语音数据或其他输入数据的图像帧。对应地,要执行的神经网络处理可以有助于识别或分类由数据处理系统(最初)接收的数据内存在的特征,例如输入图像中的对象或输入声音数据中的声音特征。另选地,要执行的神经网络处理可以有助于训练神经网络。
例如,神经网络处理的输出可被写入到存储器,或者可直接被提供给处理器以用作输入。
数据处理系统可包括存储本文所述的数据和/或存储用于执行本文所述的过程的软件的一个或多个存储器(诸如上述存储器),并且/或者与所述一个或多个存储器通信。数据处理系统可包括主机微处理器并且/或者与主机微处理器通信,并且/或者与用于显示与神经网络处理相关联的输出数据的显示器通信。
本发明的数据处理系统可实施为任何合适的系统的部分,所述系统诸如适当配置的基于微处理器的系统。在一些实施方案中,本发明在基于计算机和/或微处理器的系统中实现。
可按照任何期望和合适的方式执行本发明的各种功能。例如,本发明的功能可在需要时实施在硬件或软件中。因此,例如,本发明的各种功能元件、单元等可以包括可操作为执行各种功能的合适的处理器、控制器、函数单元、电路、处理逻辑、微处理器布置等,诸如可被编程以按所需方式操作的适当专用硬件元件(处理电路)和/或可编程硬件元件(处理电路)。
在这里还应注意,如本领域技术人员将了解,可在给定的处理器上并行地重复和/或执行本发明的各种功能等。同样,如果需要,则各种处理电路可共享处理电路等。
本领域技术人员还将了解,本发明的所描述实施方案中的所有实施方案在适当时可包括本文中所描述的特征中的任何一个或多个或所有特征。
根据本发明的方法可以至少部分地使用软件例如计算机程序来实现。因此,将了解,当从其他实施方案考虑时,本发明包括:计算机软件,所述计算机软件在安装于数据处理器上时特别适于实施本文中所描述的方法;计算机程序元素,所述计算机程序元素包括当程序元素在数据处理器上运行时用于执行本文中所描述的方法的计算机软件代码部分;和计算机程序,所述计算机程序包括当程序在数据处理系统上运行时适于执行本文中所描述的方法的所有步骤的代码。
本发明还扩展到包括这种软件的计算机软件载体,当用以操作数据处理系统时,所述软件在处理器或系统中致使实施本发明的方法的步骤。此类计算机软件载体可以是物理存储介质,诸如ROM芯片、CD ROM、RAM、闪存存储器或磁盘,或者可以是信号,诸如通过导线的电子信号、光信号或无线电信号,诸如到卫星的信号等。
还将了解,并不是本发明的方法的所有步骤都需要由计算机软件执行,并且因此根据另一广泛实施方案,本发明包括计算机软件,并且这种软件安装在计算机软件载体上以用于实施本文中所阐明的方法的步骤中的至少一个步骤。
本发明因此可合适地体现为用于与计算机系统一起使用的计算机程序产品。此类具体实施可包括固定在有形非暂态介质上的一系列计算机可读指令,诸如计算机可读介质,例如磁盘、CD ROM、ROM、RAM、闪存存储器或硬盘。其还可包括一系列计算机可读指令,这些计算机可读指令能够经由调制解调器或其他接口设备通过有形介质(包括但不限于光通信线路或模拟通信线路)或者无源地使用无线技术(包括但不限于微波、红外或其他传输技术)传输到计算机系统。该系列计算机可读指令体现了本文先前所述的功能的全部或部分。
本领域的技术人员将会理解,此类计算机可读指令可以多种编程语言编写,以与许多计算机架构或操作系统一起使用。此外,此类指令可使用目前或将来的任何存储器技术(包括但不限于半导体、磁性或光学技术)来存储,或者使用目前或将来的任何通信技术(包括但不限于光学、红外或微波技术)来传输。可以设想的是,此类计算机程序产品可作为带有附随的印刷或电子文档(例如,收缩包装软件)的可移动介质进行分发,可与计算机系统一起预加载在例如系统ROM或固定磁盘上,或者可经由网络(例如,互联网或万维网)从服务器或电子公告板进行分发。
现在将仅借助于示例并且参考附图来描述本发明的多个优选实施方案,在所述附图中:
图1示出了可实现本发明的示例性数据处理系统;
图2示意性地示出了实施方案中的集成图形处理器和神经处理器;
图3示意性地示出了实施方案中的软件组件;
图4示出了示例性神经网络;
图5示出了实施方案中用于图4的神经网络的描述符;
图6和图7示出了实施方案中用于神经网络的描述符的生成;
图8和图9示出了实施方案中当执行神经网络处理时的运算;
图10示出了实施方案中的着色器程序的编译;并且
图11示出了实施方案中的示例性共享缓冲器布局。
类似的附图标号用于附图中的类似特征(在适当的情况下)。
图1示出了其中可以采用本发明的示例性片上系统(SoC)数据处理系统300。如图1所示,本实施方案中的数据处理系统300包括主机处理器,该主机处理器呈中央处理单元(CPU)305、显示处理器303、图形处理器(GPU)304的形式,具有相关联的集成神经网络处理硬件加速器(神经处理单元NPU)306和存储器控制器308。如图3所示,这些单元经由互连器307进行通信并且具有对片外存储器309的访问权限。
在此系统中,图形处理器304将例如渲染待显示的帧(图像),显示处理器303然后将提供帧以供输出,例如提供给显示面板以供显示。
对应地,神经网络处理硬件加速器(神经处理单元NPU)306将执行神经网络处理。神经网络处理硬件加速器(神经处理单元NPU)306包括被专门配置为更有效地执行神经网络处理的电路(硬件)(例如,诸如乘法-累加电路)。因此,神经网络处理硬件加速器(神经处理单元NPU)306被设计成以优化方式执行某些类型的神经网络处理运算。
数据处理系统300当然可以包括可能需要的任何其他部件或处理单元。例如,数据处理系统300可以还包括图像信号处理器(ISP)、视频解码器、音频编解码器等,或数据处理系统300可以期望地具有的任何其他部件。传感器可以为系统300提供输入数据(例如来自合适的相机或麦克风或其他传感器设备的视频数据和/或声音数据)。
同样,数据处理系统300不需要包含图3所示的所有部件或处理单元。
此外,尽管图3将神经网络处理硬件加速器(神经处理单元NPU)306示出为与图形处理器304集成(耦合到图形处理器)(并且将相应地关于图形处理器来描述实施方案),但是应当理解,如果需要,被配置为执行神经网络处理的处理器(NPU)可以替代地是独立单元。
如上所述,本实施方案特别涉及使用与图形处理器304相关联的神经处理器306来执行神经网络处理,但是其中神经处理器304还可以触发由图形处理器306对程序的执行以执行用于正在由神经处理器306执行的神经网络处理的处理运算。
图2更详细地示出了图形处理器304和神经处理器306的部件和元件,以及特别是当以这种方式执行神经网络处理时所使用的图形处理器304和神经处理器306内以及其间的通信路径(接口)。
(就这一点而言,应当理解,图2示出了与本实施方案和本发明的方式中的运算特别相关的那些元件、单元、通信路径等。可存在图2中未示出的其他部件、元件、通信路径等,例如其原本通常可存在于图形处理器和神经网络处理器中。)
图2示出了图形处理器304的示例性着色器执行核心201,其具有呈神经引擎202形式的相关联神经处理单元。着色器执行核心和神经引擎如图2所示并且如下文将进一步讨论的,彼此耦合并且集成,使得(例如)在着色器执行核心的单元与神经引擎202的单元之间存在多个直接通信路径(接口),其独立于例如经由互连器307的任何更一般通信。应当理解,图形处理器304可包含多个着色器执行核心,并且这些着色器执行核心中的任一个或多个或全部还可根据需要具有相关联神经引擎。
如图2所示,图形处理器的着色器执行核心201包括可编程执行单元(引擎)203,其可操作为执行(着色器)程序(中的指令)以执行处理运算。在本实施方案中,针对执行线程的相应组(线程)执行着色器程序执行。
着色器执行核心201对应地包括是翘曲(线程组)管理器形式的适当控制单元204,其可操作为创建(发布)执行线程组(翘曲)并管理由执行引擎203对其的执行。
着色器执行核心204还包括是一组寄存器(寄存器文件)形式的适当本地存储205,其用于将数据本地存储到执行引擎203以供由执行线程在执行程序时使用。寄存器文件保存由着色器代码引用的每线程工作寄存器。
还存在加载/存储单元206,其可操作为例如并且优选地响应于来自执行引擎203的命令(响应于程序执行)而将数据加载到寄存器文件205中并且从寄存器文件205写入数据。
如图2所示,加载存储单元206有权经由存储器系统高速缓存分级结构的L1高速缓存207(如图2所示,该L1高速缓存207与神经引擎202共享)访问数据处理系统的主片外存储器309。
加载/存储单元206还具有到神经引擎202(到神经引擎202的共享缓冲器着色器访问单元209)的直接通信路径(接口)208,通过该路径加载/存储单元可将数据从神经引擎202的本地存储(共享缓冲器)210直接加载到寄存器文件205以供在着色器执行核心正在执行程序以执行神经网络处理时使用,并且对应地可将数据从寄存器文件205直接写入到神经引擎的本地存储210,该数据是在执行程序以执行神经网络处理时生成的。下文将更详细地讨论该操作。
着色器执行核心201还包括寄存器预加载单元211,其如图2所示还具有到神经引擎202(同样到神经引擎202的共享缓冲器着色器访问单元209)的直接通信路径(接口)212,通过该路径同样可将数据从神经引擎的本地存储210直接加载到着色器执行核心的寄存器文件205,并且从寄存器文件205存储到神经引擎的本地存储210。同样,下文将更详细地讨论此操作。
如图2所示,神经引擎202包括被配置为执行用于神经网络处理的特定处理运算的多个固定函数执行单元,诸如特别是固定函数卷积单元213(其计算类似卷积的算术运算)以及一个或多个其他固定函数执行单元214(例如,其计算其他算术运算)。
神经引擎还包括适当的直接存储器访问单元215,经由该直接存储器访问单元,神经引擎可以在数据处理系统的存储器系统309与神经引擎的本地存储共享缓冲器210之间传输数据。这同样经由共享(公共)L1高速缓存207进行,如图2所示。
如上所述,神经引擎202还包括是“共享”缓冲器形式的本地存储210,其可操作为在执行用于神经网络处理的处理运算时将正由神经引擎202的固定函数单元213、214使用/生成的数据(输入和输出数据两者)本地存储到神经引擎202。经由是共享缓冲器单元216形式的适当控制单元来访问本地存储共享缓冲器210,该控制单元仲裁并控制对本地存储共享缓冲器210的访问。
神经引擎202包括是遍历定序单元(TSU)216形式的控制单元,其可操作为响应于提供给控制单元(TSU)217的要执行的神经网络处理的指示,将要由神经引擎202的执行单元执行的处理任务分配给那些执行单元。下面将更详细地讨论神经引擎202的控制单元(TSU)的运算。
如图2所示,神经引擎202还包括着色器分发单元218,其充当神经引擎202与着色器执行核心201的控制单元(翘曲管理器)204之间的(通信/消息传送)接口。
如下文将更详细地讨论的,神经引擎202的控制单元(TSU)217可使得着色器分发单元208与翘曲管理器204通信以使得着色器执行核心201对程序的执行以执行用于神经引擎202正在执行的神经网络处理的处理运算。同样,下文将更详细地讨论该运算。
为此,在神经引擎202的着色器分发单元218与着色器执行核心201的翘曲管理器204之间存在直接通信接口219。
如图2所示,还存在总线接口单元221,其仲裁对主互连器307的访问和到存储器的路径。
在本实施方案中,图形处理器304和神经处理器306(并且特别是适当的着色器执行核心和神经引擎)的运算借助于适当的命令流来触发和控制,该适当的命令流被生成并被提供给组合的图形处理器和神经处理单元以供执行。响应于CPU上的应用程序请求要由图形处理器和/或神经处理器执行的处理工作,将例如并且优选地由主机CPU 305上的驱动器生成此类命令流,随后例如优选地适当地存储这些命令流,使得它们随后可以由图形处理器和神经处理器检索和处理。
因此,如图2所示,存在共享命令流前端(控制单元)220,其将处理由主机305生成的命令流,并且响应于那些命令流而将适当处理作业分配给神经引擎(并且具体地分配给神经引擎202的控制单元(TSU)217),或分配给着色器执行核心的控制单元(翘曲管理器)204(视情况而定)。命令流前端220因此充当到软件驱动程序的接口并且视情况发起图形处理器304或神经处理器306上的工作。(在图形处理器具有多个着色器执行核心(其中的一些或全部还具有相关联的神经引擎)的情况下,命令流前端将根据需要对应地将处理分配给不同着色器核心、神经引擎等并且发起不同着色器核心、神经引擎等上的工作。)
随后,适当控制单元(TSU或翘曲管理器)将对应于由命令流前端传送的处理作业的处理任务分配给相关执行单元以执行那些处理任务。
在本实施方案中,为了触发神经引擎202执行用于所需神经网络处理的处理运算的适当序列,将所需神经网络处理的适当的一组指示提供给神经引擎202的控制单元(TSU)217,其中控制单元(TSU)217随后响应于将与该处理相关的处理任务适当地分配给神经引擎202的固定函数执行单元或图形处理器304的着色器执行核心201以用于程序执行所需的神经网络处理的指示而操作。
因此,对于需要执行的任何给定神经网络处理,生成用于提供给神经引擎202的控制单元(TSU)217的要执行的该处理的适当的一组或多组指示,并且例如并且优选地存储在存储器309中,随后控制单元(TSU)217可以在要执行所讨论的神经网络处理时从存储器读取这些指示。
对应地,要触发神经网络处理的给定命令流将包括执行神经网络处理的适当的命令,其将例如并且优选地识别要执行的神经网络处理(即,要读取的神经网络处理的指示的序列)。
随后,响应于此类“运行神经网络处理”命令,命令流前端220将向神经引擎202的控制单元(TSU)217发信号通知适当的神经网络处理作业,包括应当使用哪组神经网络处理指示来执行神经网络处理的指示。控制单元(TSU)217随后将从存储器309读取该组适当的神经网络处理指示,并且响应于那些指示而视情况触发神经引擎202的固定函数执行单元上的适当处理任务和/或着色器执行核心201上的适当程序执行。
对应地,在用于神经网络处理的一个或多个处理运算要通过执行着色器程序来执行以在图形处理器304的着色器执行核心201中执行那些运算的情况下,将需要为该目的定义和准备对应的可执行着色器程序。因此,数据处理系统还将包括一组适当的着色器程序(库),每个着色器程序被配置为执行用于神经网络处理的相应处理运算,使得用于执行期望的处理运算的适当着色器程序可以被识别和选择(否则不能由神经引擎202的固定函数执行单元执行),以在执行给定神经网络处理时使用。
图3示出了这一点,并且具体地示出了神经处理器(NPU)306的整个驱动器过程100将包括尤其图形编译器101,该图形编译器可操作为将(例如由应用程序使用的)神经网络的更高级(例如,基于图形的)描述102转换为用于提供给神经引擎202的控制单元(TSU)217的适当的一组神经网络处理指示。
图形编译器101可以例如在整个数据处理系统的CPU 305上执行(例如,作为用于神经网络处理硬件加速器(神经处理单元NPU)306的驱动器运算的一部分)。附加地或另选地,编译过程可“离线”执行,例如在与包括神经网络处理硬件加速器(神经处理单元NPU)306的系统分离的处理器和数据处理系统上执行,随后用于神经网络的编译的指示序列被适当地存储在存储器中,以供神经网络处理硬件加速器(神经处理单元NPU)306随后在需要神经网络处理时使用。
作为其运算的一部分,图形编译器101可从先前生成的此类着色器程序的库103查询并识别用于执行不被神经引擎202的固定函数执行单元支持的神经网络处理运算的适当着色器程序。
如图3所示,可存在单独(离线)着色器编译过程104,其从更高级着色器源105生成用于着色器库103的适当可执行着色器程序(着色器二进制),该着色器程序被写入以执行神经网络处理可能需要的不同形式的处理运算。
用于神经网络处理的任何相关联数据结构也可以被生成和存储,例如以离线方式,或者在运行时,视情况而定。
随后可以使得NPU 306针对在主机处理器(CPU)305上执行的应用程序按需执行神经网络处理。例如,在主机处理器(CPU)305上执行的应用程序可以请求神经网络处理。
整个驱动器100的“更低级”驱动器部分106(例如,在CPU 305上执行)随后将识别(和/或生成编译的一组神经网络处理指示(中的一些)以及被请求执行的神经网络的任何相关联数据结构,并且生成用于发送到图形处理器304和神经处理器306的命令流前端220的适当的命令流,指示需要神经网络处理并且识别要执行的神经网络,从而使得所需神经网络被执行。
随后,在运行时,响应于对神经网络处理的请求,NPU 306可以加载适当的一组指示以执行期望的神经网络处理,并且NPU 306随后将通过指示序列工作以使得NPU硬件和/或图形处理器执行神经网络处理。神经网络处理的结果随后可以被适当地返回,例如被写出到(外部,例如主)存储器,例如以供需要神经网络处理的应用程序使用。
本实施方案具体涉及这样的情况,其中要执行的神经网络包括不被神经引擎202的固定函数执行单元支持(不能被其执行)的处理运算。在这种情况下,不支持的处理运算改为通过着色器执行核心201中的着色器程序执行来执行。
图4示出了示例性更高级神经网络,其包括假设不能由神经引擎202的固定函数执行单元执行的运算(在这种情况下,逐元素平方运算)400。因此,对于图4所示的示例性神经网络,将借助于着色器执行核心201上的着色器程序执行来执行逐元素平方运算400。
图4还示出了2D卷积运算401,其可以由神经引擎202的固定函数卷积单元213执行,并且因此将由该固定函数卷积单元213执行,而不是由着色器程序执行。
应当理解,图4所示的神经网络仅仅是用于说明本实施方案中的运算的简单示例。各种其他布置当然也是可能的。此外,典型的神经网络模型当然将包含更多的处理运算,例如取决于所讨论的神经网络。
如上所述,图4所示的该示例性神经网络将借助于提供给TSU 217的适当的一组神经网络处理指示来表示,从而使得神经网络被执行。
在本实施方案中,要执行的神经网络处理的指示被提供为一个或多个“神经引擎”描述符(NED)的序列,每个描述符定义尤其要执行的处理运算的序列(称为“扇区”)。到运算的对应输入和/或来自运算的输出相对于存储在神经引擎202的共享缓冲器210中的相应数据集(缓冲器)来定义,并且在神经引擎描述符中被定义为链接运算“扇区”的“管道”(即,使得给定管道可以例如从一个运算(扇区)取得输出,该输出随后将充当到下一个运算(扇区)的输入)。
图5示出了用于图4所示的示例性高级神经网络的神经网络处理的神经引擎描述符510和对应的视觉表示511。
因此,如图5所示,图4所示的高级神经网络的神经引擎描述符将包括定义要针对图4所示的神经网络执行的运算序列的“区段”(运算)序列500,以及要用于链接那些运算并且要从中读取运算的相应输入数据或要向其写入运算的输出数据的一组管道501。
在本实施方案中,如上所述,神经处理器的本地存储被管理和配置为先入先出(FIFO)队列形式的一组(系列)可编程定义/可配置的数据结构(“管道”)。
本地存储中的每个此类管道可以充当给定神经网络处理运算的输入管道和/或充当神经网络处理运算的输出管道(队列)。因此,给定神经网络处理运算将优选地在本地存储中具有被定义为其输入的一个或多个管道,并且在本地存储中具有被定义为其输出的一个或多个、并且优选地单个管道。
“管道”(FIFO队列)的宽度和高度是可定义/可设定(可编程)的,管道中的缓冲器(条目)的数量也是如此。这允许有选择地定义和指示给定管道是否应当例如是双缓冲的还是更高/更低缓冲的,例如以补偿延迟(诸如存储器访问延迟,或在再次需要缓冲器之前执行若干运算的流水线延迟)。
如上所述,在整个神经网络处理“作业”被细分成多个单独的工作块以用于处理目的的情况下,每个工作块将在神经处理器的本地存储中的给定管道(FIFO队列)中具有其自己的一个或多个相应条目(一个或多个缓冲器)。
给定管道(FIFO队列)的缓冲器(优选地直接)与用于上述神经网络处理的工作块(块迭代)相关。针对所讨论的块要经历的神经网络处理的序列,每个块具有与本地存储中的相应管道(FIFO队列)中的缓冲器的一对一映射。就这一点而言,块执行可以使用多个输入,在这种情况下,它将并且优选地确实消耗本地存储中的多个缓冲器,每个缓冲器来自分开的管道。对应地,块可以将单个缓冲器输出到其在本地存储中的目标管道中。
(因此,如图5所示,向神经处理器的控制单元提供的要执行的神经网络处理的指示包括当执行所讨论的神经网络处理时应当在神经处理器的本地存储中提供和使用的“管道”的数量和配置的适当指示。)
图11示出了图5中的要执行的运算序列的示例性共享缓冲器1100布局。就这一点而言,对于存储在共享缓冲器中的管道,附图标记数字指示其所涉及的管道,并且字母指示缓冲器(因此3B是第三管道中的第二缓冲器)。一个FIFO队列条目是一个缓冲器,并且在图11所示的布置中,所有管道是双缓冲的(具有两个队列条目),但是单缓冲或更多缓冲是可能的。如图11所示,并非所有管道都必须存储在共享缓冲器1100中。
如图5所示,神经引擎描述符510还指示502由描述符510定义的运算序列的输入数据存在于存储器中何处,以及由描述符510定义的运算序列的输出数据应当存储在存储器中何处。
描述符510还定义“块大小”504,其列出要执行神经网络的整个运算(迭代)空间应当被细分成的块的大小,以用于在执行神经网络处理时分配给神经引擎202的执行单元或着色器执行核心201。
就这一点而言,对神经引擎202的控制单元(TSU)217的命令将指示要执行神经网络处理的整个运算(迭代)空间。TSU 217随后将该整个迭代运算空间划分成该空间的更小块的序列(如由神经引擎描述符定义),并且随后将那些块依次(以流水线方式)发送到神经引擎202的执行单元和/或着色器执行核心201以供处理。
尽管TSU 217将整个运算空间划分成该公共、初始、整个运算空间中的块,但是当将块分配给执行单元或着色器执行核心201时,它也将把块从例如多维、初始、公共运算空间变换到执行单元或着色器执行核心在其中操作的空间的所需维度。因此,在发送用于着色器执行的块的情况下,TSU 217将块从其初始定义的任何多维运算空间变换到着色器执行核心在其中操作的三维线程坐标ID空间。
如上所述,图4中示出的更高级神经网络的神经引擎描述符510将由适当的编译过程生成。
图6示出了这一点,并且示出了编译过程将接收更高级神经网络描述(例如,以图形形式)(步骤600),依次考虑用于更高级神经网络的每个处理运算,并且确定处理运算是否可以由神经引擎202的固定函数执行单元执行(步骤601)。
在处理运算可以由神经引擎202的固定函数执行单元执行的情况下,则该运算以及其应当由神经引擎202的固定函数执行单元执行的指示将被添加到神经引擎描述符(步骤602),但是在该运算不被神经引擎202的固定函数执行单元支持的情况下,相反,用于执行处理运算的适当着色器程序将被识别(步骤603),并且应当针对该处理运算执行着色器程序执行(以及要执行的着色器程序)的指示被添加到神经引擎描述符(步骤604)。
对于更高级神经网络所需的每个运算重复该过程(步骤605)。
图7更详细地示出了用于该运算的示例性图形编译器伪代码,其具体地示出了基于高级神经网络描述的神经引擎描述符的适当扇区和管道的生成。
图8示出了当神经引擎的控制单元(TSU)217基于诸如图5所示的NED 510的那些运算的指示来触发和控制神经网络处理运算的执行以执行神经网络处理时的运算。
因此,如图8所示,TSU 217将首先从存储器读取适当的神经网络处理指示(NED)(步骤800),并且将来自命令流前端220的整个分发处理任务细分成运算空间的相应固定大小块(如NED中的块大小所指示的)(步骤801)。随后,TSU 217将通过固定大小块进行迭代,将它们发布到由NED的“扇区”500所指示的函数单元(步骤802)。每个此类块将根据在NED中指示的运算(扇区)500以流水线方式依次被有效地发布到适当函数单元。TSU还跟踪和管理任何依赖性。
当向函数单元发布块时,TSU 217应用从例如8D TSU运算空间到函数单元的运算空间(其通常具有更少的维度)的变换。例如,着色器程序执行扇区将具有三个维度。
当块要经历处理运算时,如由神经引擎描述符510中的运算(扇区)所指示的,适当地将其发布到神经引擎202的相应执行单元,或者发布到着色器分发单元218(用于着色器程序执行)。
因此,例如,对于图5所示的示例性神经引擎描述符510,整个运算空间被划分成的一个(和每个)块将首先向神经引擎DMA单元215发布,以便输入数据和权重被读取并加载到共享缓冲器210中的适当缓冲器(管道)中。
一旦已经完成DMA读取,则块将被发布到神经引擎202的固定函数卷积单元213,以执行固定函数卷积运算。
一旦已经完成,则块将被发布到着色器分发单元218,用于着色器程序的执行,以执行逐元素平方运算。
最后,一旦着色器程序执行已经完成,则块将被发送到神经引擎DMA单元215以将逐元素平方运算的输出写入到存储器。
用于由神经引擎202的执行单元进行的处理运算的块的分发可以以正常方式针对所讨论的神经引擎进行。
在借助于着色器执行核心的着色器程序执行来执行处理运算(扇区)的情况下,运算如图9中所指示地进行。
如图9所示,当块要经历着色器程序执行时,TSU 217将块分发到着色器分发单元218(步骤900)。具体地,TSU使用SDU的本地坐标系(在这种情况下是3D线程ID空间)发布要处理的SDU工作块。为此,在本实施方案中,TSU向SDU 218发送以下形式的消息:
TSU-SDU:块发布消息:
uint tsu_block_id 正被发布的块的TSU ID
uint[3]block_start_coord 正被发布的块的第一元素的线程空间坐标
uint[3]block_size 线程空间中的块的大小
ptr shader_program_descriptor 指向存储器中可找到着色器程序描述符的位置的指针,其包含例如第一指令的地址
ptr shader_resource_table 指向NED资源表的指针,着色器将其用作着色器资源表,以防它需要像纹理资源等
uint reg_preload_base_offset 当正在使用寄存器预加载/后存储时,数据将开始被复制到该编号的寄存器以及以上的寄存器
uint[4]reg_preload_block_xform 控制来自4D缓冲器的哪些元素被加载到哪个线程ID的寄存器文件中
buffer_info[4]input_sbuffer_info 描述共享缓冲器中的4个输入缓冲器中的每一个的信息。信息包含如缓冲器的偏移、步幅、布局等内容。
buffer_info[2]output_sbuffer_info 描述共享缓冲器中的2个输出缓冲器中的每一个的信息。信息包含如缓冲器的偏移、步幅、布局等内容。
在从TSU 217接收到工作块时,着色器分发单元218向神经引擎的共享缓冲器着色器访问单元(SBSAU)209发信号通知新块的输入和输出缓冲器的相关信息(步骤901)。
共享缓冲器着色器访问单元209促进从着色器执行核心对共享缓冲器单元的访问。其主要保存允许从由着色器执行核心保存的状态计算SB地址的表。每活动着色器块在表中存在一个条目,每个条目包含用于每个输入和输出缓冲器的缓冲器信息。缓冲器信息包含从传递给它的4D线计算共享缓冲器地址所需的一切内容,并且包含如基地址、步幅和布局等内容。
SDU 218向SBSAU 209发送以下形式的消息,以在其活动块表中添加条目:
SDU-SBSAU:添加表条目
uint tsu_block_id 新条目的tsu块id
buffer_info[4]input_sbuffer_info 描述共享缓冲器中的4个输入缓冲器中的每一个的信息。信息包含如缓冲器的偏移、步幅、布局等内容。
buffer_info[2]output_sbuffer_info 描述共享缓冲器中的2个输出缓冲器中的每一个的信息。信息包含如缓冲器的偏移、步幅、布局等内容。
响应于此,SBSAU 209在其活动块表中找到空闲位(或等待直到空闲位可用为止)并且用该块的输入/输出缓冲器信息填充该空闲位,其由新条目的TSU块ID引用。
着色器调度单元218还将新的工作块添加到其维持的“活动”块的表中(以跟踪块的处理)(或等待直到表中存在用于新块的空闲条目)(步骤901)。对于每个“活动”块,着色器调度单元还维护“活动”线程组(翘曲)表,使得它可以跟踪所讨论的块的线程组(翘曲)的进度。
着色器分发单元218随后发信号通知着色器执行核心201的翘曲管理器204以使得对应于线程空间中的块的迭代空间的线程组(翘曲)序列被生成(步骤902)。因此,着色器调度单元取得着色器工作块并且经由其翘曲管理器将其调度到着色器执行核心。
在本实施方案中,对于线程空间中的块的每个翘曲(例如,在执行引擎支持16个线程宽线程组(翘曲)的情况下,16个线程的翘曲),适当的消息被发送到翘曲管理器204以产生此类线程并且由执行引擎203执行用于该翘曲的期望的着色器程序。
为此,在本实施方案中,对于要被发布以执行着色器程序以针对所讨论的块执行神经网络处理运算的每个线程组(翘曲),以下形式的翘曲发布消息从着色器分发单元218被发送到翘曲管理器204:
SDU-WM:翘曲发布消息
uint tsu_block_id 正为其发布翘曲的tsu块ID。这被添加到每翘曲状态向量并且提供用于通过SBSAU访问NE的共享缓冲器的上下文
ptr srt 指向NED的着色器资源表的指针,着色器指令可将其用于类似纹理采样等
ptr shader_program 指向着色器程序描述符的指针,其包含着色器程序执行所需的状态,诸如着色器的第一指令的地址等。
uint[3]warp_offset 翘曲中第一线程的线程空间中的坐标
uint thread_mask 指示翘曲中哪些线程应当运行的位掩码,主要在需要比固定翘曲大小更少的线程时使用
除此之外,将线程组(翘曲)添加到由用于该块的着色器分发单元维护的“活动”翘曲表(其用于跟踪已经发送了发布消息并且正在为所讨论的块执行神经网络处理的“活动”翘曲)。(如果当要发布新的翘曲时活动翘曲表已满,则着色器分发单元将等待翘曲完成,并且随后向活动翘曲表添加新的条目,并且随后向翘曲管理器发布翘曲。)
响应于来自着色器分发单元218的翘曲发布消息,翘曲管理器204将向执行引擎203发布翘曲以执行在翘曲发布消息中指示的着色器程序(步骤903)。对于所讨论的图形处理器中的程序执行,这可以并且确实以正常方式来完成。
一旦翘曲已经完成其着色器程序执行,翘曲管理器204就将以下形式的翘曲完成消息返回到着色器分发单元218(步骤904):
WM-SDU:翘曲完成消息
uint tsu_block_id 已经完成的翘曲的tsu块id
uint[3]warp_offset 哪个翘曲已经完成,由其第一线程的线程空间坐标识别
响应于翘曲完成消息,着色器分发单元218将针对所讨论的块在其活动块表中找到条目,并且针对该块在对应的活动翘曲表中找到并移除翘曲。
一旦给定工作块的所有翘曲已经完成其执行(即,所讨论的块的活动翘曲表是空的),着色器分发单元218就向TSU发送指示该块的着色器程序执行已经完成的消息(步骤905):
SDU-TSU:块完成消息
uint tsu_block_id 已经完成的块的ID
并从其“活动”块表移除该块。
以此方式,可以并且确实适当地追踪工作块的着色器程序执行的执行。
着色器调度单元218还向共享缓冲器着色器访问单元209发送以下形式的消息,其指示已经完成针对所讨论的块的着色器处理,使得可移除由共享缓冲器着色器访问单元209维持的块的条目:
SDUSBSAU:丢弃表条目
uint tsu_block_id 应当被丢弃的条目的tsu块id
响应于该消息,SBSAU 209将在其活动块表中找到并移除对应于所讨论的块的条目。
如将从例如图5所示的示例性神经网络处理了解,在该神经网络处理中,借助于着色器执行核心201中的着色器程序执行来执行的逐元素平方运算400将采用来自固定函数卷积运算401的输出作为其输入,并且还将需要将其输出返回到神经引擎202,使得其随后可以借助于以下DMA写入运算而被写出到存储器。因此,出于此目的,将需要用于在着色器执行核心201与神经引擎202之间传输数据的机制。
在本实施方案中,如图2所示,系统被配置为使得数据可直接在着色器执行核心201的本地存储(寄存器文件205)与神经引擎202的本地存储(共享缓冲器210)之间传输(必须经由例如L1高速缓存207和存储器系统传输数据)。
在第一实施方案中,直接在寄存器文件205与神经引擎202的共享缓冲器210之间的此类数据传输借助于寄存器预加载单元(RPU)211来实现。具体地,寄存器预加载单元可操作为在着色器程序开始执行(例如,针对翘曲)之前将数据直接加载到寄存器文件205中,并且在翘曲已经完成之后将数据复制(写入)出寄存器文件。
为了便于该运算,翘曲管理器204可操作为在发布用于执行的翘曲之前通过RPU发布寄存器“预加载”,并且在翘曲已经完成之后通过RPU发布寄存器“后存储”。
为了发布寄存器“预加载”,翘曲管理器向RPU发送以下形式的预加载消息:
WM-RPU从NE SB预加载寄存器
uint tsu_block_id 需要发生预加载的块的TSU ID
uint warp_id 寄存器文件的哪个翘曲部分需要被预加载
uint[4]reg_base_offset 每个输入缓冲器应当开始被预加载到哪个编号的寄存器中。预加载可以跨越多个寄存器。
uint[4]reg_count 对于4个输入缓冲器中的每一个,应当预加载多少个寄存器
xform[4]tid_to_buffer_xform 控制用于预加载的翘曲内的线程id的寄存器如何映射到要加载的4D缓冲器坐标(例如,xform可以是映射[ThreadID.x,ThreadID.y,ThreadID.z,register#]到4D缓冲器坐标的4x4矩阵)。
响应于来自翘曲管理器204的此类预加载请求,寄存器预加载单元211计算所指示的翘曲中的每个线程的寄存器文件位置,并且随后对于每个输入缓冲器,对于要预加载的每个寄存器,使用所指示的“xform”映射来计算缓冲器坐标以针对所讨论的寄存器进行加载。
寄存器预加载单元211随后在计算的缓冲器坐标处发布对输入缓冲器的SBSAU209的读取,如下所示:
RPU-SBSAU从共享缓冲器加载值(值在响应中返回)
uint tsu_block_id 其负载正被发布的块的TSU ID。这来自翘曲管理器状态。SBSAU将此用作进入其活动着色器块表中的密钥
uint input_id 4个输入缓冲器中的哪个缓冲器正被访问
uint[4]buffer_coords 正被加载的缓冲器内的元素的4D坐标
响应于该加载值请求,SBSAU 209在其活动块表中找到用于所指示的块的条目,并且从该活动块表条目确定用于所指示的输入缓冲器的相关buffer_info。随后,根据所指示的4D缓冲器坐标和对应的buffer_info来计算共享缓冲器210中要读取的地址,并且向共享缓冲器单元216发布针对所计算的共享缓冲器地址的读取。
来自共享缓冲器的读取数据随后返回到SBSAU 209作为响应,并且SBSAU 209将该数据返回到寄存器预加载单元211,该寄存器预加载单元随后将该数据写入到寄存器文件205中的对应寄存器。
对应地,为了发布寄存器“后存储”,翘曲管理器向RPU发送以下形式的后存储消息:
WM-RPU将寄存器后存储到NE SB
uint tsu_block_id 需要发生后存储的块的TSU ID
uint warp_id 寄存器文件的哪个翘曲部分需要被后存储
uint[2]reg_base_offset 对于输出缓冲器中的每一个,其是其中保持需要被存储的值的第一编号的寄存器。后存储可以跨越多个寄存器。
uint[2]reg_count 对于2个输出缓冲器中的每一个,应当后存储多少个寄存器
xform[4]tid_to_buffer_xform 控制用于后存储的翘曲内的线程id的寄存器如何映射到后存储到的4D缓冲器坐标(例如,xform可以是映射[ThreadID.x,ThreadID.y,ThreadID.z,register#]到4D缓冲器坐标的4x4矩阵)。
响应于来自翘曲管理器204的此类后存储请求,寄存器预加载单元211计算所指示的翘曲中的每个线程的寄存器文件位置,并且随后对于每个输出缓冲器,对于要后存储的每个寄存器,使用所指示的“xform”映射来计算缓冲器坐标以将所讨论的寄存器存储到该缓冲器坐标。
寄存器预加载单元211随后使用来自寄存器文件的值在计算的缓冲器坐标处向输出缓冲器的SBSAU 209发布存储,如下所示:
RPUSBSAU将值存储到共享缓冲器
uint tsu_block_id 其负载正被发布的块的TSU ID。这来自翘曲管理器状态。SBSAU将此用作进入其活动着色器块表中的密钥
uint output_id 2个输出缓冲器中的哪个输出缓冲器正被访问
uint[4]buffer_coords 正被存储的缓冲器内的元素的4D坐标
uint值 被存储到共享缓冲器中的值(的比特模式)
响应于该存储值请求,SBSAU 209在其活动块表中找到用于所指示的块的条目,并且从该活动块表条目确定用于所指示的输出缓冲器的相关buffer_info。随后,根据所指示的4D缓冲器坐标和对应的buffer_info来计算共享缓冲器210中要存储数据(值)的地址,并且向共享缓冲器单元216发布针对所计算的共享缓冲器地址的存储,从而传递所指示的数据(值)。随后将数据(值)写入到共享缓冲器中所指示的地址。
在该运算中,用于着色器程序执行的相关值将在针对线程组(翘曲)的程序执行开始之前从神经引擎的共享缓冲器210被预加载,并且对应地,一旦线程组(翘曲)已经完成着色器程序的执行,就被写回(后存储)到共享缓冲器。因此,用于在使用此类“预加载”和“后存储”运算时执行逐元素平方运算的示例性着色器程序可如下所示:
;假设r0-r3从输入0的正确部分被预加载
MUL r4,r0,r0 ;将第1元素的平方计算为r4
MOV r0,r4 ;复制为r0(第1元素的输出)
MUL r4,r1,r1 ;将第2元素的平方计算为r4
MOV r1,r4 ;复制为r1(第2元素的输出)
MUL r4,r2,r2 ;将第3元素的平方计算为r4
MOV r2,r4 ;复制为r2(第3元素的输出)
MUL r4,r3,r3 ;将第4元素的平方计算为r4
MOV r3,r4 ;复制为r3(第3元素的输出)
TERM ;线程完成、终止
;假设r0-r3被后存储到输出0的正确部分
在另一实施方案中,直接在寄存器文件205与神经引擎202的共享缓冲器210之间的数据传输通过以下实现:包括相应的加载和存储指令,这些加载和存储指令在被执行时使得在被执行以执行神经网络处理运算的着色器程序中进行此类数据传输。这可以与上述“预加载”和“后存储”运算一起使用或代替它们。
在这种情况下,要执行的着色器程序可以包括特殊类型的加载指令(“LOADSB”)和特殊类型的存储指令(“STORESB”),该加载指令在被执行时将触发从共享缓冲器210到寄存器文件205的一个或多个寄存器的加载,该存储指令将触发从寄存器文件205的一个或多个寄存器到神经引擎202的共享缓冲器210复制数据(一个或多个值)。
因此,在这种情况下,执行上述逐元素平方运算的着色器程序可以是以下形式:
(假设tid_[xyz]是保存3D线程id的特殊寄存器)
MOV r7,#4 ;初始化循环计数器,4次迭代
MUL r6,tid_x,#4 ;计算用于缓冲器加载/存储的基x-coord
top:
SUB r7,#1 ;将循环计数器递减
ADD r0,r7,r6 ;计算该迭代的缓冲器x-coord
LOADSB r1,#0,#0,#0,r0,tid_y ;从NE共享缓冲器加载r1
;输入0,缓冲器元素[0,0,r0,tid_y]
MUL r2,r1,r1 ;计算平方
STORESB r2,#0,#0,#0,r0,tid_y ;将r2存储到NE共享缓冲器中
;输出0,缓冲器元素[0,0,r0,tid_y]
CBNZ r7,top ;如果这不是最后一次迭代,则重复
TERM ;线程完成、终止
在这种情况下,着色器执行核心201的加载/存储单元206被配置为实现LOADSB/STORESB指令。这些指令通过将指令操作数与来自翘曲状态向量的tsu_block_id一起取出并且向SBSAU 209(直接从加载/存储单元206)发布加载或存储请求来实现。因此,加载/存储单元206实现LOADSB/STORESB指令,其在寄存器文件与NE的共享缓冲器之间复制数据。
因此,响应于LOADSB指令的执行,加载/存储单元206向SBSAU 209发布读取,如下所示:
LSU-SBSAU从共享缓冲器加载值(值在响应中返回)
uint tsu_block_id 其负载正被发布的块的TSU ID。这来自翘曲管理器状态。SBSAU将此用作进入其活动着色器块表中的密钥
uint input_id 4个输入缓冲器中的哪个缓冲器正被访问
uint[4]buffer_coords 正被加载的缓冲器内的元素的4D坐标
响应于该加载值请求,SBSAU 209在其活动块表中找到用于所指示的块的条目,并且从该活动块表条目确定用于所指示的输入缓冲器的相关buffer_info。随后,根据所指示的4D缓冲器坐标和对应的buffer_info来计算共享缓冲器210中要读取的地址,并且向共享缓冲器单元216发布针对所计算的共享缓冲器地址的读取。
来自共享缓冲器的读取数据随后返回到SBSAU 209作为响应,并且SBSAU 209将该数据返回到加载/储存单元206,该加载/储存单元随后将该数据写入到寄存器文件205中的对应寄存器。
对应地,响应于STORESB指令的执行,加载/存储单元206使用来自寄存器文件的值向SBSAU 209发布存储,如下所示:
LSU SBSAU将值存储到共享缓冲器
uint tsu_block_id 其负载正被发布的块的TSU ID。这来自翘曲管理器状态。SBSAU将此用作进入其活动着色器块表中的密钥
uint output_id 2个输出缓冲器中的哪个输出缓冲器正被访问
uint[4]buffer_coords 正被存储的缓冲器内的元素的4D坐标
uint值 被存储到共享缓冲器中的值(的比特模式)
响应于该存储值请求,SBSAU 209在其活动块表中找到用于所指示的块的条目,并且从该活动块表条目确定用于所指示的输出缓冲器的相关buffer_info。随后,根据所指示的4D缓冲器坐标和对应的buffer_info来计算共享缓冲器210中要存储数据(值)的地址,并且向共享缓冲器单元216发布针对所计算的共享缓冲器地址的存储,从而传递所指示的数据(值)。随后将数据(值)写入到共享缓冲器中所指示的地址。
应当理解,当使用此类LOADSB和STORESB指令时,它们将需要被包括在要执行以执行用于神经网络处理的处理运算的着色器程序中的适当点处。这优选地在着色器程序的编译过程时并且作为其一部分来完成。
图10示出了合适的此类编译过程的实施方案。
如图10所示,编译过程将要由着色器程序执行的运算进行更高级的描述(步骤1000),并且对于每个运算,考虑该运算是否将使用将被存储在神经引擎的共享缓冲器中的输入(步骤1001)。如果是,则LOADSB指令将在用于执行运算本身的指令之前被添加到着色器代码(步骤1002)。
随后,将考虑来自该运算的输出是否将是要由神经引擎执行的运算所需要的(步骤1003)。如果是,则STORESB指令在用于执行运算的指令之后被添加到着色器代码(步骤1004)。
对于要由着色器程序执行的每个运算重复该运算(步骤1005)。
与其他可能的方法相比,本实施方案可提供各种益处和改进。
上述具体实施方式是为了举例说明和描述的目的而呈现的。其并非旨在穷举或将本文所述的技术限制为所公开的精确形式。按照上述教导内容,许多修改形式和变型形式是可能的。选择所述实施方案以便最好地解释本文所述的技术及其实际应用的原理,从而使得本领域的其他技术人员能够在各种实施方案中并且通过适合于所设想的特定用途的各种修改最好地利用本文所述的技术。
Claims (23)
1.一种操作数据处理系统的方法,所述数据处理系统包括:
处理器,所述处理器被配置为执行神经网络处理,所述处理器包括:
一个或多个执行单元,所述一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和
控制电路,所述控制电路被配置为响应于向所述控制电路提供的要执行的神经网络处理的指示而向所述一个或多个执行单元分配处理任务以使得所述执行单元执行用于神经网络处理的处理运算;
所述数据处理系统还包括图形处理器,所述图形处理器包括可编程执行单元,所述可编程执行单元可操作为执行处理程序以执行处理运算;
所述方法包括:
被配置为执行神经网络处理的所述处理器的所述控制电路响应于要执行的神经网络处理的指示而使得所述图形处理器的所述可编程执行单元执行程序以执行所指示的神经网络处理。
2.根据权利要求1所述的方法,所述方法包括被配置为执行神经网络处理的所述处理器的所述控制电路,所述控制电路被配置为向所述神经处理器的所述一个或多个执行单元分配处理任务以使得所述执行单元执行用于神经网络处理的处理运算:
将要执行的整个神经网络处理任务细分成多个更小的神经网络处理块;以及
使得所述执行单元单独地执行针对所述块的所述神经网络处理运算。
3.根据权利要求1或2所述的方法,其中
要执行的所述神经网络处理的所述指示是一组或多组神经网络处理信息的形式,每一组此类信息指示要执行用于所述神经网络处理的一个或多个处理运算的序列、由所述一组信息指示的所述序列中的运算的数据输入和输出的指示、以及所述运算序列的初始输入在存储器中的位置和/或来自所述运算序列的所述输出应当存储在何处的指示。
4.根据权利要求1或2所述的方法,其中向被配置为执行神经网络处理的所述处理器的所述控制电路提供的要执行的神经网络处理的所述指示能够指示神经网络处理运算应当由执行程序以执行所述神经网络处理运算的所述图形处理器的所述可编程执行单元来执行;并且
所述方法包括:
被配置为执行神经网络处理的所述处理器的所述控制电路响应于要通过由所述图形处理器的所述可编程执行单元对程序的执行来执行的神经网络处理运算的指示而使得所述图形处理器的所述可编程执行单元执行程序以执行所述神经网络处理运算。
5.根据权利要求1或2所述的方法,其中所述图形处理器包括控制电路,所述控制电路可操作为控制由所述图形处理器的所述执行单元对程序的所述执行以执行处理运算,并且被配置为执行神经网络处理的所述处理器的所述控制电路使得所述图形处理器的所述可编程执行单元通过与所述图形处理器的所述控制电路通信来执行程序以执行用于神经网络处理的处理运算,从而使得所述程序执行被执行。
6.根据权利要求1或2所述的方法,其中:
被配置为执行神经网络处理的所述处理器包括用于在所述处理器的一个或多个执行单元正在执行神经网络处理时本地地存储数据的本地存储;并且
所述图形处理器包括用于存储由所述图形处理器的所述可编程执行单元在执行程序时使用的数据的本地存储;
并且所述方法包括:
当所述图形处理器的所述可编程执行单元在被配置为执行神经网络处理的所述处理器的所述控制电路的控制下要执行或正在执行程序以执行用于神经网络处理的处理运算时:
将数据直接从被配置为执行神经网络处理的所述处理器的所述本地存储加载到所述图形处理器的本地存储,以供在所述图形处理器的所述可编程执行单元正在执行所述程序以执行用于神经网络处理的处理运算时使用;以及/或者
将通过由所述图形处理器的所述可编程执行单元对程序的所述执行以执行用于神经网络处理的处理运算来生成的数据直接从所述图形处理器的所述本地存储存储到被配置为执行神经网络处理的所述处理器的所述本地存储。
7.根据权利要求6所述的方法,包括以下中的至少一者:
在开始程序的执行以执行用于神经网络处理的一个或多个运算之前,将数据从被配置为执行神经网络处理的所述处理器的所述本地存储加载到所述图形处理器的所述可编程执行单元的所述本地存储;以及
在已经完成程序的执行以执行用于神经网络处理的一个或多个运算之后,将数据从已经执行所述程序以执行用于所述神经网络处理的所述处理运算的所述图形处理器的所述可编程执行单元的所述本地存储写入到被配置为执行神经网络处理的所述处理器的所述本地存储。
8.根据权利要求1或2所述的方法,其中:
被配置为执行神经网络处理的所述处理器包括用于在所述处理器的一个或多个执行单元正在执行神经网络处理时本地地存储数据的本地存储;并且
所述图形处理器包括用于存储由所述图形处理器的所述可编程执行单元在执行程序时使用的数据的本地存储;
并且本发明所述的方法包括以下中的至少一者:
当所述图形处理器的所述可编程执行单元正在执行程序以执行用于执行神经网络处理的处理运算时,所述可编程执行单元响应于所述程序中的指令正被执行,使得数据从被配置为执行神经网络处理的所述处理器的所述本地存储被加载到所述可编程执行单元的本地存储,以供在执行所述程序以执行用于神经网络处理的所述处理运算时使用;并且
当所述图形处理器的所述可编程执行单元正在执行程序以执行用于执行神经网络处理的处理运算时,所述可编程执行单元响应于所述程序中的指令正被执行,使得数据从所述可编程执行单元的所述本地存储写入到被配置为执行神经网络处理的所述处理器的所述本地存储中。
9.一种从要执行的神经网络处理的更高级描述生成要执行的神经网络处理的一组指示以向被配置为执行神经网络处理的处理器的控制电路提供的方法,所述处理器包括一个或多个执行单元,所述一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和控制电路,所述控制电路被配置为响应于向所述控制电路提供的要执行的神经网络处理的指示而向所述一个或多个执行单元分配处理任务以使得所述执行单元执行用于神经网络处理的处理运算;
所述方法包括:
对于针对由所述神经网络处理的所述更高级描述指示的所述神经网络处理要执行的处理运算:
确定所述处理运算是否能够由被配置为执行神经网络处理的所述处理器的执行单元执行,以及
当确定所述处理运算能够由被配置为执行神经网络处理的所述处理器的执行单元执行时,在要执行的神经网络处理的一组指示中包括将使得所述控制电路使得所述运算由被配置为执行神经网络处理的所述处理器的执行单元执行的指示;以及
当确定所述处理运算不能由被配置为执行神经网络处理的所述处理器的执行单元执行时,对于所述处理运算,在要执行的神经网络处理的所述一组指示中包括将使得所述控制电路通过由图形处理器的可编程执行单元对程序的执行来使得所述处理运算被执行的指示。
10.根据权利要求9所述的方法,还包括:
在要通过由图形处理器的可编程执行单元对程序的执行来执行用于神经网络处理的处理运算的情况下:
从用于执行用于神经网络处理的处理运算的一组程序中选择要被执行以执行用于所述神经网络处理的所需处理运算的程序;以及
包括所述所选择的程序的指示以及要执行的神经网络处理的所述指示。
11.一种生成程序以供由图形处理器的可编程执行单元执行以执行用于神经网络处理的一个或多个处理运算的方法,所述方法包括:
在要由所述图形处理器的所述可编程执行单元执行以执行用于神经网络处理的一个或多个处理运算的程序中包括以下中的至少一者:
在被执行时将执行以下操作的指令:触发供在执行所述程序以执行用于神经网络处理的一个或多个处理运算时使用的数据从被配置为执行神经网络处理的处理器的本地存储加载到所述图形处理器的所述可编程执行单元的本地存储,以供在执行所述程序以执行用于神经网络处理的一个或多个处理运算时使用;以及
在被执行时将执行以下操作的指令:使得存储在所述图形处理器的所述可编程执行单元的本地存储中的数据被写入到被配置为执行神经网络处理的处理器的本地存储(并且优选地供由被配置为执行神经网络处理的所述处理器的执行单元在执行用于神经网络处理的处理运算时使用)。
12.根据权利要求11所述的方法,包括:
对于针对通过所述程序的执行的所述神经网络处理要执行的处理运算:
确定所述运算是否需要来自被配置为执行神经网络处理的相关联处理器的输入;以及
当确定所述处理运算需要来自被配置为执行神经网络处理的相关联处理器的输入时,在要由所述图形处理器的所述可编程执行单元执行的所述程序中,在用于所述处理运算的指令之前包括在被执行时将执行以下操作的指令:使得数据从被配置为执行神经网络处理的所述处理器的本地存储加载到所述图形处理器的所述可编程执行单元的本地存储;
以及/或者
确定被配置为执行神经网络处理的相关联处理器的执行单元是否将需要由处理运算生成的数据,所述处理运算通过要由所述图形处理器的所述可编程执行单元执行的所述程序中的指令的执行来执行;以及
当确定被配置为执行神经网络处理的所述相关联处理器的执行单元将需要由通过所述程序中的指令的执行来执行的处理运算生成的数据时,在执行所述处理运算的所述指令之后包括在被执行时将执行以下操作的指令:使得数据从所述图形处理器的所述可编程执行单元的本地存储被写入到被配置为执行神经网络处理的相关联处理器的本地存储。
13.一种数据处理系统,所述数据处理系统包括:
处理器,所述处理器被配置为执行神经网络处理,所述处理器包括:
一个或多个执行单元,所述一个或多个执行单元被配置为执行用于神经网络处理的处理运算;和
控制电路,所述控制电路被配置为响应于向所述控制电路提供的要执行的神经网络处理的指示而向所述一个或多个执行单元分配处理任务以使得所述执行单元执行用于神经网络处理的处理运算;
所述数据处理系统还包括图形处理器,所述图形处理器包括可编程执行单元,所述可编程执行单元可操作为执行处理程序以执行处理运算;
其中:
被配置为执行神经网络处理的所述处理器的所述控制电路被配置为:
响应于要执行的特定神经网络处理的指示而使得所述图形处理器的所述可编程执行单元执行程序以执行所指示的神经网络处理。
14.根据权利要求13所述的系统,所述控制电路被配置为向所述神经处理器的所述一个或多个执行单元分配处理任务以使得所述执行单元执行用于神经网络处理的处理运算,其中被配置为执行神经网络处理的所述处理器的所述控制电路被配置为:
将要执行的整个神经网络处理任务细分成多个更小的神经网络处理块;以及
使得所述执行单元单独地执行针对所述块的所述神经网络处理运算。
15.根据权利要求13或14所述的系统,其中向被配置为执行神经网络处理的所述处理器的所述控制电路提供的要执行的神经网络处理的所述指示能够指示神经网络处理运算应当由执行程序以执行所述神经网络处理运算的所述图形处理器的所述可编程执行单元来执行;并且
被配置为执行神经网络处理的所述处理器的所述控制电路被配置为:响应于要通过由所述图形处理器的所述可编程执行单元对程序的执行来执行的神经网络处理运算的指示而使得所述图形处理器的所述可编程执行单元执行程序以执行所述神经网络处理运算。
16.根据权利要求13或14所述的系统,其中所述图形处理器包括控制电路,所述控制电路可操作为控制由所述图形处理器的所述执行单元对程序的所述执行以执行处理运算;并且
被配置为执行神经网络处理的所述处理器的所述控制电路被配置为使得所述图形处理器的所述可编程执行单元通过与所述图形处理器的所述控制电路通信来执行程序以执行用于神经网络处理的处理运算,从而使得所述程序执行被执行。
17.根据权利要求13或14所述的系统,其中:
被配置为执行神经网络处理的所述处理器包括用于在所述处理器的一个或多个执行单元正在执行神经网络处理时本地地存储数据的本地存储;并且
所述图形处理器包括用于存储由所述图形处理器的所述可编程执行单元在执行程序时使用的数据的本地存储;
并且所述图形处理器包括:
本地存储预加载/后存储电路,所述本地存储预加载/后存储电路被配置为在被配置为执行神经网络处理的所述处理器的所述本地存储与所述图形处理器的所述本地存储之间直接传输数据。
18.根据权利要求13或14所述的系统,其中:
被配置为执行神经网络处理的所述处理器包括用于在所述处理器的一个或多个执行单元正在执行神经网络处理时本地地存储数据的本地存储;并且
所述图形处理器包括用于存储由所述图形处理器的所述可编程执行单元在执行程序时使用的数据的本地存储;并且
所述图形处理器的所述可编程执行单元被配置为:响应于程序中的指令正在由所述可编程执行单元执行,所述指令指示数据应当从被配置为执行神经网络处理的处理器的本地存储被加载到所述可编程执行单元的本地存储,使得数据从被配置为执行神经网络处理的所述处理器的本地存储被加载到所述可编程执行单元的所述本地存储;并且/或者
所述图形处理器的所述可编程执行单元被配置为:响应于程序中的指令正在由所述可编程执行单元执行,所述指令指示数据应当从所述可编程执行单元的本地存储被存储到被配置为执行神经网络处理的处理器的本地存储中,使得数据从所述可编程执行单元的所述本地存储被存储到被配置为执行神经网络处理的所述处理器的本地存储中。
19.根据权利要求13或14所述的系统,其中:
被配置为执行神经网络处理的所述处理器包括用于在所述处理器的一个或多个执行单元正在执行神经网络处理时本地地存储数据的本地存储;并且
所述图形处理器包括用于存储由所述图形处理器的所述可编程执行单元在执行程序时使用的数据的本地存储;并且
所述图形处理器还包括加载/存储电路,所述加载/存储电路具有:
到所述数据处理系统的存储器系统的接口,通过所述接口所述加载/存储电路能够在所述图形处理器的所述可编程执行单元的所述本地存储与所述数据处理系统的所述存储器系统之间传输数据;和
与被配置为执行所述神经网络处理的所述处理器的单独接口,通过所述单独接口所述加载/存储电路能够在被配置为执行神经网络处理的所述处理器的所述本地存储与所述图形处理器的所述可编程执行单元的所述本地存储之间传输数据。
20.根据权利要求13或14所述的系统,其中:
所述图形处理器包括执行核心,并且被配置为执行神经网络处理的所述处理器包括与所述执行核心相关联并且耦合到所述执行核心的神经处理器;并且
所述执行核心和所述神经处理器共享所述数据处理系统的存储器系统分级结构的高速缓存,经由所述高速缓存,所述执行核心和所述神经处理器可操作为从所述数据处理系统的存储器读取数据以及向所述数据处理系统的存储器写入数据。
21.根据权利要求13或14所述的系统,还包括:
控制单元,所述控制单元可操作为从处理器接收要执行的处理任务的指示,并且被配置为响应于此类指示而向被配置为执行神经网络处理的所述处理器的所述控制电路或所述图形处理器的控制电路任一者分配处理任务。
22.一种图形处理器,所述图形处理器包括:
可编程执行单元,所述可编程执行单元可操作为执行处理程序以执行处理运算;和
本地存储,所述本地存储被配置为存储数据以供由所述图形处理器的所述可编程执行单元在执行程序时使用;
其中:
所述可编程执行单元被配置为:
响应于程序中的指令正在由所述可编程执行单元执行,使得数据从被配置为执行神经网络处理的处理器的本地存储被加载到所述图形处理器的所述本地存储,以供由所述图形处理器的所述可编程执行单元在执行正被执行的所述程序中的另外的指令时使用;以及/或者
响应于程序中的指令正在由所述可编程执行单元执行,使得存储在所述图形处理器的所述可编程执行单元的所述本地存储中的数据在由所述图形处理器的所述可编程执行单元对所述程序的执行期间被写入到被配置为执行神经网络处理的处理器的本地存储。
23.一种包括计算机软件代码的计算机程序,所述计算机软件代码用于当所述程序在一个或多个数据处理器上运行时,执行根据权利要求1、9或11所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2300909.5 | 2023-01-20 | ||
US18/349,124 | 2023-07-08 | ||
US18/349,124 US20240249127A1 (en) | 2023-01-20 | 2023-07-08 | Neural network processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118378675A true CN118378675A (zh) | 2024-07-23 |
Family
ID=91906743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410081330.1A Pending CN118378675A (zh) | 2023-01-20 | 2024-01-19 | 神经网络处理 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118378675A (zh) |
-
2024
- 2024-01-19 CN CN202410081330.1A patent/CN118378675A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11604649B2 (en) | Techniques for efficiently transferring data to a processor | |
TWI498819B (zh) | 執行成型記憶體存取作業的系統和方法 | |
US10877757B2 (en) | Binding constants at runtime for improved resource utilization | |
US8766988B2 (en) | Providing pipeline state through constant buffers | |
TWI490782B (zh) | 來源運算元收集器快取的方法和裝置 | |
US20130036295A1 (en) | Gpu assisted garbage collection | |
CN110322390B (zh) | 用于控制处理的方法和系统 | |
US9798543B2 (en) | Fast mapping table register file allocation algorithm for SIMT processors | |
US9395997B2 (en) | Request coalescing for instruction streams | |
CN103885893A (zh) | 用于访问内容寻址存储器的技术 | |
CN110036375B (zh) | 无序高速缓存返回 | |
CN103886538A (zh) | 用于存储共享顶点的技术 | |
US11550586B2 (en) | Method and tensor traversal engine for strided memory access during execution of neural networks | |
CN112749120A (zh) | 将数据有效地传输至处理器的技术 | |
US20230185570A1 (en) | Techniques for efficiently transferring data to a processor | |
CN111445003A (zh) | 神经网络生成器 | |
TW202109286A (zh) | 純函數語言神經網路加速器系統及結構 | |
KR20240025019A (ko) | 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공 | |
CN114610394A (zh) | 指令调度的方法、处理电路和电子设备 | |
US20240249127A1 (en) | Neural network processing | |
CN118378675A (zh) | 神经网络处理 | |
EP1195718A2 (en) | Parallel pipelined image rendering system | |
US11822541B2 (en) | Techniques for storing sub-alignment data when accelerating Smith-Waterman sequence alignments | |
US11550584B1 (en) | Implementing specialized instructions for accelerating Smith-Waterman sequence alignments | |
US20230101085A1 (en) | Techniques for accelerating smith-waterman sequence alignments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |