CN110692038A - 多功能矢量处理器电路 - Google Patents
多功能矢量处理器电路 Download PDFInfo
- Publication number
- CN110692038A CN110692038A CN201880033692.6A CN201880033692A CN110692038A CN 110692038 A CN110692038 A CN 110692038A CN 201880033692 A CN201880033692 A CN 201880033692A CN 110692038 A CN110692038 A CN 110692038A
- Authority
- CN
- China
- Prior art keywords
- vector
- vector processing
- circuit
- processor
- input
- 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.)
- Granted
Links
- 239000013598 vector Substances 0.000 title claims abstract description 734
- 238000000034 method Methods 0.000 claims description 55
- 238000010801 machine learning Methods 0.000 claims description 21
- 230000008569 process Effects 0.000 description 43
- 230000006870 function Effects 0.000 description 26
- 101100169313 Viola odorata Voc2 gene Proteins 0.000 description 16
- 101100497923 Viola odorata Voc1 gene Proteins 0.000 description 14
- 238000010586 diagram Methods 0.000 description 10
- 101100169314 Viola odorata Voc3 gene Proteins 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 239000004744 fabric Substances 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 239000000047 product Substances 0.000 description 3
- 101000822695 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C1 Proteins 0.000 description 2
- 101000655262 Clostridium perfringens (strain 13 / Type A) Small, acid-soluble spore protein C2 Proteins 0.000 description 2
- 101100184723 Homo sapiens PMPCA gene Proteins 0.000 description 2
- 102100025321 Mitochondrial-processing peptidase subunit alpha Human genes 0.000 description 2
- 101000655256 Paraclostridium bifermentans Small, acid-soluble spore protein alpha Proteins 0.000 description 2
- 101000655264 Paraclostridium bifermentans Small, acid-soluble spore protein beta Proteins 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 238000012886 linear function Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004378 air conditioning Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 239000013256 coordination polymer Substances 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8061—Details on data memory access
- G06F15/8069—Details on data memory access using a cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
Abstract
提供了一种处理器电路,该处理器电路包括:输入端子和输出端子;多个矢量处理器操作电路;耦合到输入端子、输出端子和每个矢量处理器操作电路的选择器电路;以及调度器电路,适于控制选择器电路以在输入端子与输出端子之间配置以任何顺序包括零个、一个或多个矢量处理器操作电路的矢量处理流水线。
Description
背景技术
诸如深度神经网络的机器学习算法正在越来越多地用于很多人工智能应用,诸如计算机视觉、语音识别和机器人技术。实现机器学习算法通常需要很高的计算复杂度。实际上,在通用中央处理单元(CPU)上运行机器学习算法可能非常昂贵,并且在某些情况下非常不切实际。因此,非常需要能够有效地处理机器学习算法以提高能量效率和吞吐量的技术。
诸如现场可编程门阵列的硬件加速组件已经被用来补充用于实现机器学习算法的通用CPU的处理性能。
发明内容
根据第一方面,提供了一种处理器电路,该处理器电路包括:输入端子和输出端子;多个矢量处理器操作电路;耦合到输入端子、输出端子和每个矢量处理器操作电路的选择器电路;以及调度器电路,适于控制选择器电路以在输入端子与输出端子之间配置以任何顺序包括零个、一个或多个矢量处理器操作电路的矢量处理流水线。
根据第二方面,提供了一种包括硬件加速器的计算设备,该硬件加速器包括被配置为对输入矢量执行多个矢量处理操作的硬件逻辑电路系统。硬件加速器包括:矢量处理器,矢量处理器包括被配置为提供多个矢量处理器操作电路的硬件逻辑电路系统;以及调度器,调度器包括被配置为选择性地配置以任何顺序包括零个、一个或多个矢量处理器操作电路的多个矢量处理流水线的硬件逻辑电路系统,每个矢量处理流水线与输入矢量中的对应输入矢量相关联。
根据第三方面,提供了一种方法,该方法包括使用硬件逻辑电路系统对输入矢量执行多个矢量处理操作。硬件逻辑电路系统包括:矢量处理器,矢量处理器包括被配置为提供多个矢量处理器操作电路的硬件逻辑电路系统;以及调度器,调度器包括被配置为选择性地配置以任何顺序包括零个、一个或多个矢量处理器操作电路的多个矢量处理流水线的硬件逻辑电路系统,每个矢量处理流水线与输入矢量中的对应输入矢量相关联。
上面概述的功能可以在各种类型的系统、设备、组件、方法、计算机可读存储介质、数据结构、图形用户界面表示、制造品等中得到体现。
提供本“发明内容”以便以简化的形式介绍一些概念;这些概念将在下面的“具体实施方式”中进一步描述。本“发明内容”既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
附图说明
图1-图3是描述本文中描述的技术可以在其中实现的示例环境的框图。
图4A-图4C是示例矢量处理器电路的框图。
图5A是用于图4A-图4C的示例矢量处理器电路的示例输入队列。
图5B是用于图4A-图4C的示例矢量处理器电路的示例命令队列。
图5C是用于图4A-图4C的示例矢量处理器电路的示例输出队列。
图6A1-图6P2是用于图4A-图4C的示例矢量处理器电路的示例矢量处理命令链和对应矢量处理流水线。
图7是示出图4A-图4C的示例矢量处理器电路的一种操作方式的流程图。
图8是用于图5B的示例矢量处理命令链的示例链延迟等待时间的图。
图9是用于图4A-图4C的示例矢量处理器电路的示例繁忙计数器的图。
在整个公开和附图中使用相同的数字来引用相似的组件和特征。系列100编号指代最初在图1中发现的特征,系列200编号指代最初在图2中发现的特征,系列300编号指代最初在图3中发现的特征,以此类推。
具体实施方式
机器学习算法通常执行很多矢量操作,诸如逐元素乘法、两个矢量的加法或减法、以及矢量的非线性处理(例如,非线性函数的应用,诸如S形、双曲正切和整流线性单位(ReLU))。尽管这样的矢量处理操作可以由通用CPU执行,但是用于机器学习算法的计算速度通常甚至超过最快的通用CPU的能力。
机器学习算法通常实现矢量处理操作的很多序列,其中特定矢量处理操作和矢量处理操作的特定顺序在序列之间改变。例如,机器学习算法可以实现以下三个矢量处理操作序列:(1)第一矢量处理操作序列,其中将第一输入矢量(例如,矢量A)与第二矢量(例如,矢量B)相乘,将结果与第三矢量(例如,矢量C)相加,并且通过非线性函数(例如,双曲正切)对所得到的总和进行处理;(2)第二矢量处理操作序列,其中将第二输入矢量(例如,矢量D)与第四矢量(例如,矢量E)相加,并且将所得到的总和与第五矢量(例如,矢量F)相乘;以及(3)第三矢量处理操作序列,其中通过非线性函数(例如,S形)对第三输入矢量(例如,矢量G)进行处理。
如下面更详细描述的,描述了一种用于硬件实现的矢量处理器电路的技术,该技术可以用于动态地配置矢量处理流水线,每个矢量处理流水线被配置为对相关联的相应输入矢量执行矢量处理操作序列。
在一种实现中,矢量处理器电路接收指令,这些指令指定特定矢量处理操作和要对相关联的相应输入矢量执行的这种矢量处理操作的顺序。
在一种实现中,矢量处理器电路根据这些指令动态地配置矢量处理流水线,并且使用相关联的对应的动态配置的矢量处理流水线来处理输入矢量。
在一种实现中,所接收的指令不包括指定用于动态地配置矢量处理流水线以处理相关联的对应输入矢量的定时的调度信息。
在一种实现中,在实现动态地配置的矢量处理流水线的同时,矢量处理器电路基于在所接收的指令中指定的矢量处理操作来实时地确定这样的调度信息。
作为初步事项,一些附图在一个或多个结构组件的上下文中描述了概念,这些结构组件被不同地称为功能、模块、特征、元件等。图中所示的各种组件可以通过任何物理和有形机制以任何形式实现,例如通过在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合。
在一种情况下,图示的将图中的各个组件分离为不同的单元可以反映对应的不同的物理和有形组件在实际实现中的使用。备选地或附加地,附图中示出的任何单个组件可以由一个以上的实际物理组件来实现。备选地或附加地,图中的任何两个或更多个单独的组件的描绘可以反映由单个实际物理组件执行的不同功能。
其他附图以流程图形式描述了概念。以这种形式,某些操作被描述为构成以一定顺序执行的不同块。这样的顺序是说明性的而非限制性的。本文中描述的某些框可以组合在一起并且在单个操作中执行,某些框可以分解为多个组成框,并且某些框可以按照与本文所示顺序不同的顺序执行(包括执行框的并行方式)。流程图中示出的框可以通过任何物理和有形机制以任何方式实现,例如通过在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合。
关于术语,短语“被配置为”涵盖可以用于将任何种类的物理和有形功能构造为执行所标识的操作的任何方式。该功能可以被配置为使用例如在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来执行操作。
术语“逻辑”涵盖用于执行任务的任何物理和有形功能。例如,流程图中示出的每个操作对应于用于执行该操作的逻辑组件。操作可以使用例如在计算机设备上运行的软件、硬件(例如,芯片实现的逻辑功能)等和/或其任何组合来执行。当由计算设备实现时,逻辑组件表示作为计算系统的物理部分但是已经实现的电气组件。
以下说明可以将一个或多个特征标识为“可选”。这种类型的陈述不应当被解释为对可以被认为是可选的特征的详尽说明。也就是说,尽管在本文中未明确标识,但是其他特征也可以被认为是可选的。此外,对单个实体的任何描述都不旨在排除对多个这样的实体的使用。类似地,对多个实体的描述并不旨在排除对单个实体的使用。此外,尽管描述可以将某些特征解释为执行标识的功能或实现标识的机制的备选方式,但是特征也可以以任何组合方式组合在一起。最后,术语“示例性”或“说明性”是指潜在的很多实现中的实现。
图1示出了本文中描述的诸如用于与机器学习算法一起使用的示例矢量处理器电路可以在其中操作的示例环境100。在一些示例中,环境100的各种设备和/或组件包括各种计算设备102。作为示例而非限制,计算设备102可以包括设备102a-102e。尽管示出为多种设备类型,但是计算设备102可以是其他设备类型,并且不限于所示出的设备类型。在一些实现中,多个计算设备102中的任何一个可以经由网络104互连。
网络104可以包括但不限于蜂窝网络(例如,无线电话)、点对点拨号连接、卫星网络、因特网、局域网、广域网、WiFi网络、自组织网络、内部网、外部网或其组合。网络104可以包括一个或多个连接的网络(例如,多网络环境)。网络104可以包括存储和/或处理从计算设备102接收和/或向计算设备102传输的信息(例如,数据)的一个或多个数据中心。
在一种实现中,计算设备102可以包括具有例如经由总线114可操作地连接到输入/输出接口108、硬件加速器110和存储器112的一个或多个处理器106的任何类型的设备。计算设备102可以包括个人计算机,例如台式计算机102a、膝上型计算机102b、平板计算机102c、数据中心服务器102d(或服务器是任何其他环境)、智能电话102e、电子书阅读器、可穿戴计算机、汽车计算机、游戏设备等。在一种实现中,计算设备102不需要包括处理器106,并且可以是硬件设备。
计算设备102还可以包括其他计算设备,例如服务器计算机、瘦客户机、终端和/或工作站。在一些示例中,计算设备102可以包括例如用于集成在计算设备、电器或其他种类的设备中的组件。
在一些示例中,被描述为由计算设备102执行的某些或全部功能可以由一个或多个远程对等计算设备、一个或多个远程服务器、或云计算资源来实现。在一些示例中,计算设备102可以包括用于接收输入数据序列的输入端口。例如,计算设备102还可以包括用于执行机器学习处理的一个或多个处理器106。
在一些示例中,如关于设备102d所示,存储器112可以存储由包括操作系统116的(多个)处理器106可执行的指令、以及由(多个)处理器106可加载和可执行的程序或应用118。应用118可以包括可以被执行以例如操作硬件加速器110的机器学习处理器应用120。一个或多个处理器106可以包括一个或多个中央处理单元(CPU)、图形处理单元(GPU)、视频缓冲处理器等。
在一些实现中,机器学习处理器应用120包括可执行代码,该可执行代码存储在存储器112中,并且由(多个)处理器106可执行,以通过计算设备102经由输入/输出接口108本地或远程地接收和实现包括数据序列(例如,流数据或数据文件)的机器学习算法。在一些示例中,数据序列可以与一个或多个应用118相关联。机器学习处理器应用120可以与硬件加速器110结合操作,以应用用于处理存储在存储器112中或经由输入/输出接口108接收的数据的很多过程中的任何过程(诸如矢量处理运算符)。
尽管已经将某些框描述为执行各种操作,但是这些模块仅是示例,并且相同或相似的功能可以由更多或更少数目的模块来执行。此外,由所示模块执行的功能不一定由单个设备本地执行。而是,某些操作可以由远程设备(例如,对等方、服务器、云等)执行。
备选地或附加地,本文中描述的某些或全部功能可以至少部分由一个或多个硬件逻辑电路执行。例如而非限制,可以使用的说明性类型的硬件逻辑电路包括现场可编程门阵列(FPGA)设备、专用集成电路(ASIC)设备、GPU、大规模并行处理器阵列(MPPA)设备、专用标准产品(ASSP)设备、片上系统设备(SOC)设备、复杂可编程逻辑设备(CPLD)、定制集成电路等。
例如,硬件加速器110的全部或一部分可以在一个或多个FPGA、ASIC、GPU、MPPA、ASSP、SOC、CPLD和/或定制集成电路上实现。术语“硬件”加速器广泛地包括利用硬件设备执行功能的不同方式,例如至少包括:a)至少一些任务在硬ASIC逻辑等中实现的情况;b)至少一些任务在软(可配置)FPGA逻辑等中实现的情况;c)至少一些任务作为软件在FPGA软件处理器覆盖层等上运行的情况;d)至少一些任务在软处理器的MPPA等上运行的情况;e)至少一些任务作为软件在硬ASIC处理器等上运行的情况等;或其任何组合。
以下说明将给出一个主要示例,其中硬件加速器(诸如硬件加速器110)对应于一个或多个FPGA设备,但是如上所述,硬件加速器可以使用其他类型的硬件逻辑电路来构造。
计算机可读介质可以包括计算机存储介质和/或通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于相变存储器(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、闪存或其他存储技术、光盘只读存储器(CD-ROM)、数字多功能磁盘(DVD)或其他光学存储器、磁带盒、磁带、磁盘存储或其他磁性存储设备、或者可以用于存储信息以供计算设备访问的任何其他非传输介质。
相反,通信介质在诸如载波的调制数据信号或其他传输机制中实现计算机可读指令、数据结构、程序模块或其他数据。如本文中定义的,计算机存储介质不包括通信介质。在各种示例中,存储器112是存储计算机可执行指令的计算机存储介质的示例。
在各种示例中,输入/输出接口108的输入设备可以是直接触摸输入设备(例如,触摸屏)、间接触摸设备(例如,触摸板)、间接输入设备(例如,鼠标、键盘、相机或相机阵列等)或其他类型的非触觉设备(诸如音频输入设备)。
计算设备102还可以包括一个或多个输入/输出接口108以允许计算设备102与其他设备通信。输入/输出接口108可以包括一个或多个网络接口以实现计算设备102和诸如(多个)其他设备102的其他联网设备之间的通信。输入/输出接口108可以允许计算设备102与其他设备通信,诸如用户输入外围设备(例如,键盘、鼠标、笔、游戏控制器、语音输入设备、触摸输入设备、手势输入设备等)和/或输出外围设备(例如,显示器、打印机、音频扬声器、触觉输出等)。
图2是描绘示例系统200的框图,该示例系统200包括与网络206通信的任何数目的服务器202和计算设备204。服务器202和/或计算设备204的至少一部分位于一个或多个数据中心208中,如虚线箭头所示。例如,这种通信可以涉及以相对快速的网络速率经由网络206在服务器202、计算设备204和数据中心208之间传输和/或接收数据。例如,在数据中心208中接收的数据可以包括例如经由因特网(例如,网络206)的网络数据业务。例如,这样的数据可以由数据中心以超过10Gb/秒的网络速度接收。
例如,个体服务器202和计算设备204可以与上面描述的并且在图1中示出的计算设备102相同或相似。网络206可以与例如图1中描述的网络104相同或相似。在一些示例中,数据中心208是用于容纳计算机系统和相关组件(诸如电信和存储系统)的设施。这样的数据中心尤其可以包括冗余或备用电源、冗余数据通信连接、环境控件(例如,空调、灭火)和各种安全设备。数据中心可以涉及工业规模的操作以及用于支持操作的相对大量的电力。
图3是描绘包括任何数目的处理器302和FPGA 304的示例系统300的框图。例如,可以并入数据中心(例如,图2的数据中心208)中的系统300可以与上面描述的并且在图1中示出的计算设备102相似或相同。系统300可以被配置为实现被接收到数据中心或从数据中心传输的机器学习算法。在一些实现中,例如,这样的数据可以通过FPGA 304来传输。FPGA304可以直接与存储器306通信,存储器306可以在用FPGA 304执行的机器学习处理期间存储数据。
在一些示例中,FPGA 304可以与上面描述的并且在图1中示出的硬件加速器110相同或相似。在各种实现中,除了或代替FPGA304,系统300可以包括任何数目的ASIC、GPU、MPPA、ASSP、SOC、CPLD、定制集成电路或其组合。换言之,例如,执行本文中描述的执行矢量处理操作的机器学习处理器应用可以使用多种硬件配置中的任何一种来实现,诸如上面列出的那些。
图4A是矢量处理器电路400的实现的框图。在一种实现中,矢量处理器电路400在诸如图1的硬件加速器110的硬件加速器中实现,并且包括耦合到输入队列402的输入端子IN、耦合到输出队列404的输出端子OUT和耦合到命令队列406的命令端子CMD。
如下面更详细描述的,矢量处理器电路400从命令队列406接收矢量处理命令链,其中每个矢量处理命令链与来自输入队列402的对应输入矢量相关联。在一种实现中,每个矢量处理命令链指定要由矢量处理器电路400对对应输入矢量执行的矢量处理操作。在一种实现中,矢量处理器电路400在输入队列402与输出队列404之间动态地配置矢量处理流水线,以实现在所接收的矢量处理命令链中指定的矢量处理操作,其中每个矢量处理流水线与输入矢量中的对应输入矢量相关联。在一种实现中,矢量处理器电路400使用对应矢量处理流水线处理每个接收的输入矢量,并且将对应输出矢量提供给输出队列404。
图5A示出了示例输入队列402,图5B示出了示例命令队列406,并且图5C示出了示例输出队列404。在一种实现中,输入队列402包括三个输入矢量VAi、VBi和VCi,并且命令队列406包括分别与输入矢量VAi、VBi和VCi相对应的三个矢量处理命令链C1、C2和C3。在一种实现中,输出队列404包括分别与输入矢量VAi、VBi和VCi相对应并且分别与矢量处理命令链C1、C2和C3相对应的三个输出矢量VAo、VBo和VCo。本领域普通技术人员将理解,输入队列402、命令队列406和输出队列404每个可以包括多于或少于三个元素。
矢量处理命令链C1指定要对对应输入矢量VAi执行以产生对应输出矢量VAo的矢量处理操作。在一种实现中,矢量处理命令链C1指定要从输入队列402中取回输入矢量VAi并且然后将其与矢量w相乘,要将乘法结果与矢量x相加,并且要将加法结果存储在输出队列404中作为对应输出矢量VAo。
矢量处理命令链C2指定要对对应输入矢量VBi执行以产生对应输出矢量VBo的矢量处理操作。在一种实现中,矢量处理命令链C2指定要从输入队列402中取回输入矢量VBi并且然后将其与矢量y相加,要将加法结果将与矢量z相乘,并且要将乘法结果存储在输出队列404中作为对应输出矢量VBo。
矢量处理命令链C3指定要对对应输入矢量VCi执行以产生对应输出矢量VCo的矢量处理操作。在一种实现中,矢量处理命令链C3指定要从输入队列402中取回输入矢量VCi并且用双曲正切函数对其进行处理,并且要将处理后的结果存储在输出队列404中作为对应输出矢量VCo。
在上述示例中,矢量处理命令链C1和矢量处理命令链C2每个包括两个矢量处理操作,并且矢量处理命令链C3包括单个矢量处理操作。本领域普通技术人员将理解,矢量处理命令链可以包括零个、一个、二个、三个或更多个矢量处理操作。
再次参考图4A,矢量处理器电路400从输入队列402接收输入矢量(例如,图5A中的VAi、VBi和VCi),并且从命令队列406接收矢量处理命令链(例如,图5B中的C1、C2和C3),其中每个矢量处理命令链与输入矢量中的对应输入矢量(例如,分别为VAi、VBi和VCi)相关联。矢量处理器电路400在输入队列402与输出队列404之间动态地配置矢量处理流水线,以实现在所接收的矢量处理命令链中指定的矢量处理操作,其中每个矢量处理流水线与所接收的对应输入矢量相关联。矢量处理器电路400使用对应矢量处理流水线处理每个接收的输入矢量,并且将对应输出矢量(例如,分别为VAo、VBo和VCo)提供给输出队列404。
在一种实现中,矢量处理器电路400包括矢量处理操作电路408(1)、408(2)、……、408(N),每个矢量处理操作电路被配置为执行对应矢量处理操作。如下面更详细描述的,矢量处理器电路400在输入队列402与输出队列404之间动态地配置包括矢量处理操作电路408(1)、408(2)、……、408(N)中的一些、全部或没有任何一个的矢量处理流水线。
在实现中,矢量处理操作电路408(1)、408(2)、……、408(N)中的一个或多个被配置为执行矢量矢量操作(例如,逐元素矢量-矢量乘法、加法、减法或任何其他矢量-矢量操作)或矢量操作(例如,S形、双曲正切、ReLU或其他非线性操作)。在一种实现中,矢量处理操作电路408(1)、408(2)、……、408(N)中的每个被配置为浮点处理器电路。在其他实现中,矢量处理操作电路408(1)、408(2)、……、408(N)中的每个可以被配置为浮点、块浮点、整数定点和任何其他数字格式处理器电路中的任何一种。
图4B描绘了N=3的矢量处理器电路400的实现。在一种实现中,矢量处理操作电路408(1)被配置为执行非线性矢量处理操作(例如,S形、双曲正切、ReLU等),矢量处理操作电路408(2)被配置为执行逐元素矢量-矢量乘法,并且矢量处理操作电路408(2)被配置为执行加法/减法。在其他实现中,N可以小于或大于3。在其他实现中,矢量处理操作电路408(1)、408(2)、……、408(N)可以被配置为执行其他矢量处理操作,并且矢量处理操作电路408(1)、408(2)、……、408(N)中的多于一个量处理操作电路可以被配置为执行相同的矢量处理操作。
再次参考图4A,矢量处理器电路400在输入队列402与输出队列404之间动态地配置包括矢量处理操作电路408(1)、408(2)、……、408(N)中的一些、全部或没有任何一个的矢量处理流水线,以实现在从命令队列406接收的矢量处理命令链(例如,图5B中的C1、C2和C3)中指定的矢量处理操作,其中每个矢量处理命令链与对应输入矢量(例如,分别为VAi、VBi和VCi)相关联。矢量处理器电路400使用对应矢量处理流水线来处理每个接收的输入矢量(例如,图5A中的VAi、VBi和VCi),并且将对应输出矢量(例如,分别为VAo、VBo和VCo)提供给输出队列404。
在一种实现中,矢量处理操作电路408(1)、408(2)、……、408(N)中的每个包括输入端子和输出端子。在实现中,矢量处理操作电路408(1)、408(2)、……、408(N)中的一些或全部包括两个输入端子。在其他实现中,矢量处理操作电路408(1)、408(2)、……、408(N)中的一些或全部可以包括多于两个输入端子和/或多于一个输出端子。
在一种实现中,矢量处理器电路400包括选择器电路410,该选择器电路410耦合到输入队列402、输出队列404、以及矢量处理操作电路408(1)、408(2)、……、408(N)中的每个的输入端子和输出端子。在一种实现中,选择器电路410还被耦合以从调度器电路412接收控制信号CTRL,该调度器电路412经由命令译码器电路414耦合到命令队列406。
在一种实现中,矢量处理器电路400还包括矢量寄存器文件416(1)、……、416(K),每个矢量寄存器文件耦合到矢量处理操作电路408(1)、408(2)、……、408(N)中的对应矢量处理操作电路的第二输入端子。如下面更详细描述的,在来自调度器电路412的控制信号CTRL的控制下,选择器电路410在输入队列402与输出队列404之间动态地配置包括矢量处理操作电路408(1)、408(2)、……、408(N)中的一些、全部或没有任何一个的矢量处理流水线,以实现在从命令队列406接收的矢量处理命令链(例如,图5B中的C1、C2和C3)中指定的矢量处理操作,其中每个矢量处理命令链与对应输入矢量(例如,分别为VAi、VBi和VCi)相关联。矢量处理器电路400使用对应矢量处理流水线来处理每个接收的输入矢量(例如,VAi、VBi和VCi),并且将对应输出矢量(例如,分别为VAo、VBo和VCo)提供给输出队列404。
在一种实现中,矢量处理操作电路408(1)包括耦合到选择器电路410的输入端子VOC1(i)和耦合到选择器电路410的输出端子VOC1(o),并且被配置为在输入端子VOC1(i)处接收矢量,对所接收的矢量执行矢量处理操作,并且在输出端子VOC1(o)处提供输出矢量。例如,参考图4B,在一种实现中,矢量处理操作电路408(1)在输入端子VOC1(i)处对所接收矢量执行非线性矢量处理操作(例如,S形、双曲正切、ReLU等),并且在输出端子VOC1(o)处提供结果。
再次参考图4A,在一种实现中,矢量处理操作电路408(2)包括耦合到选择器电路410的第一输入端子VOC2(i)、耦合到矢量寄存器文件416(1)的第二输入端子VOC2(ri)、和耦合到选择器电路410的输出端子VOC2(o),并且被配置为在第一输入端子VOC2(i)处接收第一矢量,在第二输入端子VOC2(ri)处接收第二矢量,对所接收的第一矢量和第二矢量执行矢量处理操作,并且在输出端子VOC2(o)处提供输出矢量。例如,参考图4B,在一种实现中,矢量处理操作电路408(2)对所接收的第一矢量和第二矢量执行逐元素矢量-矢量乘法,并且在输出端子VOC2(O)处提供乘法结果。在其他实现中,第二输入端子VOC2(ri)可以耦合到外部矢量寄存器文件、存储器、处理器电路或其他矢量数据源。
再次参考图4A,在一种实现中,矢量处理操作电路408(N)包括耦合到选择器电路410的第一输入端子VOCN(i)、耦合到矢量寄存器文件416(K)的第二输入端子VOCN(ri)、和耦合到选择器电路410的输出端子VOCN(o),并且被配置为在第一输入端子VOCN(i)处接收第一矢量,在第二输入端子VOCN(ri)处接收第二矢量,对所接收的第一矢量和第二矢量执行矢量处理操作,并且在输出端子VOCN(o)处提供输出矢量。例如,参考图4B,在一种实现中,矢量处理操作电路408(3)将所接收的第一矢量和第二矢量相加,并且在输出端子VOC3(O)处提供加法结果。在其他实现中,第二输入端子VOCN(ri)可以耦合到外部矢量寄存器文件、存储器、处理器电路或其他矢量数据源。
再次参考图4A,在其他实现中,矢量处理操作电路408(1)、408(2)、……、408(N)可以执行其他或不同的矢量处理操作。在实现中,矢量处理操作电路408(1)、408(2)、……、408(N)可以包括每种类型的矢量处理操作中的一种或多种。例如,矢量处理操作电路408(1)、408(2)、……、408(N)可以包括执行逐元素矢量-矢量乘法的单个矢量处理操作电路、每个执行加法/减法的两个矢量处理操作电路、每个执行非线性操作的四个矢量处理操作电路等。
调度器电路412将控制信号CTRL提供给选择器电路410,以在输入队列402与输出队列404之间动态地配置包括矢量处理操作电路408(1)、408(2)、……、408(N)中的一些、全部或没有任何一个的矢量处理流水线,以实现在从命令队列406接收的矢量处理命令链(例如,图5B中的C1、C2和C3)中指定的矢量处理操作,其中每个矢量处理命令链与输入矢量中的对应输入矢量(例如,分别为VAi、VBi和VCi)相关联。
现在参考图4C,描述了选择器电路410的实现。在一种实现中,选择器电路410包括多路复用器电路418(1)、418(2)、418(3)和418(4)的网络,并且调度器电路412提供控制信号CTRL,控制信号CTRL包括用于分别控制多路复用器电路418(1)、418(2)、418(3)和418(4)的操作的控制信号CTRLNNL、CTRLMUL、CTRLADS和CTRLOUT。
每个多路复用器电路418(1)、418(2)、418(3)和418(4)分别耦合到控制信号CTRLNNL、CTRLMUL、CTRLADS和CTRLOUT中的对应控制信号。在一种实现中,控制信号CTRLNNL、CTRLMUL、CTRLADS和CTRLOUT中的每个是具有二进制值的数字信号。在其他实现中,其他类型的信号可以用于控制信号CTRLNNL、CTRLMUL、CTRLADS和CTRLOUT。在其他实现中,选择器电路410可以包括更多或更少的多路复用器电路418(1)、418(2)、418(3)和418(4),和/或可以包括除多路复用器电路418(1)、418(2)、418(3)和418(4)之外的其他电路元件。
在一种实现中,多路复用器电路418(1)包括在输入端子IN处耦合到输入队列402的第一输入端子、耦合到矢量处理操作电路408(2)的输出端子VOC2(O)的第二输入端子、耦合到矢量处理操作电路408(3)的输出端子VOC3(O)的第三输入端子、耦合到矢量处理操作电路408(1)的输入端子VOC1(i)的输出端子、以及耦合到控制信号CTRLNNL的控制端子。在一种实现中,基于控制信号CTRLNNL,多路复用器电路418(1)选择性地将输入端子IN、输出端子VOC2(O)和输出端子VOC3(O)处的信号中的一个信号(或没有任何一个)耦合到矢量处理操作电路408(1)的输入端子VOC1(i)。
在一种实现中,多路复用器电路418(2)包括在输入端子IN处耦合到输入队列402的第一输入端子、耦合到矢量处理操作电路408(1)的输出端子VOC1(O)的第二输入端子、耦合到矢量处理操作电路408(3)的输出端子VOC3(O)的第三输入端子、耦合到矢量处理操作电路408(2)的输入端子VOC2(i)的输出端子、以及耦合到控制信号CTRLMUL的控制端子。在一种实现中,基于控制信号CTRLMUL,多路复用器电路418(2)选择性地将输入端子IN、输出端子VOC1(O)和输出端子VOC3(O)处的信号中的一个信号(或没有任何一个)耦合到矢量处理操作电路408(2)的输入端子VOC2(i)。
在一种实现中,多路复用器电路418(3)包括在输入端子IN处耦合到输入队列402的第一输入端子、耦合到矢量处理操作电路408(1)的输出端子VOC1(O)的第二输入端子、耦合到矢量处理操作电路408(2)的输出端子VOC2(O)的第三输入端子、耦合到矢量处理操作电路408(3)的输入端子VOC3(i)的输出端子、以及耦合到控制信号CTRLADS的控制端子。在一种实现中,基于控制信号CTRLADS,多路复用器电路418(3)选择性地将输入端子IN、输出端子VOC1(O)和输出端子VOC2(O)处的信号中的一个信号(或没有任何一个)耦合到矢量处理操作电路408(3)的输入端子VOC3(i)。
在一种实现中,多路复用器电路418(4)包括在输入端子IN处耦合到输入队列402的第一输入端子、耦合到矢量处理操作电路408(1)的输出端子VOC1(O)的第二输入端子、耦合到矢量处理操作电路408(2)的输出端子VOC2(O)的第三输入端子、耦合到矢量处理操作电路408(3)的输出端子VOC3(O)的第四输入端子、在输出端子OUT处耦合到输出队列404的输出端子、以及耦合到控制信号CTRLOUT的控制端子。在一种实现中,基于控制信号CTRLOUT,多路复用器电路418(4)选择性地将输入端子IN、输出端子VOC1(O)、输出端子VOC2(O)和输出端子VOC3(O)处的信号中的一个信号耦合到输出队列404。
在一种实现中,调度器电路412将控制信号CTRLNNL、CTRLMUL、CTRLADS和CTRLOUT提供给选择器电路410,以在输入队列402与输出队列404之间动态地配置包括矢量处理操作电路408(1)、408(2)、408(3)中的一些、全部或没有任何一个的矢量处理流水线,以实现在从命令队列406接收的矢量处理命令链(例如,图5B中的C1、C2和C3)中指定的矢量处理操作。
在一种实现中,图4C的选择器电路410能够在输入队列402与输出队列404之间配置与来自命令队列406的16个不同的矢量处理命令链相对应的16个不同的矢量处理流水线,如图6A1-6P2所示。在图6A1-6P2所示的示例中,矢量处理操作电路408(1)被配置为执行非线性矢量处理操作(例如,ReLU),矢量处理操作电路408(2)被配置为执行逐元素矢量-矢量乘法,并且矢量处理操作电路408(2)被配置为执行加法/减法。
图6A1描绘了矢量处理命令链CA,矢量处理命令链CA指定要从输入队列402中取回输入矢量并且将其存储在输出队列404中作为对应输出矢量。图6A2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将输入队列402直接耦合到输出队列404,其中矢量处理操作电路408(1)、408(2)或408(3)中没有任何一个耦合在输入队列402与输出队列404之间。
图6B1描绘了矢量处理命令链CB,矢量处理命令链CB指定要从输入队列402中取回输入矢量并且利用ReLU函数对其进行处理,并且要将处理后的结果存储在输出队列404中作为对应输出矢量。图6B2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(1)(非线性电路)耦合在输入队列402与输出队列404之间。
图6C1描绘了矢量处理命令链CC,矢量处理命令链CC指定要从输入队列402中取回输入矢量并且然后将其与矢量x相乘,并且要将乘法结果存储在输出队列404中作为对应输出矢量。图6C2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(2)(乘法电路)耦合在输入队列402与输出队列404之间。
图6D1描绘了矢量处理命令链CD,矢量处理命令链CD指定要从输入队列402中取回输入矢量并且然后将其与矢量x相加,并且要将加法结果作为对应输出矢量存储在输出队列404中。图6D2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(3)(加法/减法电路)耦合在输入队列402与输出队列404之间。
图6E1描绘了矢量处理命令链CE,矢量处理命令链CE指定要从输入队列402中取回输入矢量并且使用ReLU函数对其进行处理,要将处理后的结果与矢量x相乘,并且要将乘法结果存储在输出队列404中作为对应输出矢量。图6E2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(1)(非线性电路)和矢量处理操作电路408(2)(乘法电路)以该顺序耦合在输入队列402与输出队列404之间。
图6F1描绘了矢量处理命令链CF,矢量处理命令链CF指定要从输入队列402中取回输入矢量,将其与矢量x相乘,要通过ReLU函数对乘法结果进行处理,并且要将处理后的结果存储在输出队列404中作为对应输出矢量。图6F2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(2)(乘法电路)和矢量处理操作电路408(1)(非线性电路)以该顺序耦合在输入队列402与输出队列404之间。
图6G1描绘了矢量处理命令链CG,矢量处理命令链CG指定要从输入队列402中取回输入矢量,通过ReLU函数对其进行处理,并且要将处理后的结果与矢量x相加,要将加法结果存储在输出队列404中作为对应输出矢量。图6G2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(1)(非线性电路)和矢量处理操作电路408(3)(加法/减法电路)以该顺序耦合在输入队列402与输出队列404之间。
图6H1描绘了矢量处理命令链CH,矢量处理命令链CH指定要从输入队列402中取回输入矢量,将其与矢量x相加,要通过ReLU函数对加法结果进行处理,并且要将处理后的结果存储在输出队列404中作为对应输出矢量。图6H2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(3)(加法/减法电路)和矢量处理操作电路408(1)(非线性电路)以该顺序耦合在输入队列402与输出队列404之间。
图6I1描绘了矢量处理命令链CI,矢量处理命令链CI指定要从输入队列402中取回输入矢量,将其与矢量x相乘,将乘法结果与矢量y相加,并且将加法结果存储在输出队列404中作为对应输出矢量。图6I2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(2)(乘法电路)和矢量处理操作电路408(3)(加法/减法电路)以该顺序耦合在输入队列402与输出队列404之间。
图6J1描绘了矢量处理命令链CJ,矢量处理命令链CJ指定要从输入队列402中取回输入矢量,将其与矢量x相加,要将加法结果与矢量y相乘,并且要将乘法结果存储在输出队列404中作为对应输出矢量。图6J2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(3)(加法/减法电路)和矢量处理操作电路408(2)(乘法电路)以该顺序耦合在输入队列402与输出队列404之间。
图6K1描绘了矢量处理命令链CK,矢量处理命令链CK指定要从输入队列402中取回输入矢量,通过ReLU函数对其进行处理,要将处理后的结果与矢量x相乘,并且要将乘法结果与矢量y相加,并且要将加法结果存储在输出队列404中作为对应输出矢量。图6K2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(1)(非线性电路)、矢量处理操作电路408(2)(乘法电路)和矢量处理操作电路408(3)(加法/减法电路)以该顺序耦合在输入队列402与输出队列404之间。
图6L1描绘了矢量处理命令链CL,矢量处理命令链CL指定要从输入队列402中取回输入矢量,使用Reque函数对其进行处理,要将处理结果与矢量x相加,要将加法结果与矢量y相乘,并且要将乘法结果存储在输出队列404中作为对应输出矢量。图6L2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(1)(非线性电路)、矢量处理操作电路408(3)(加法/减法)和矢量处理操作电路408(2)(乘法电路)以该顺序耦合在输入队列402与输出队列404之间。
图6M1描绘了矢量处理命令链CM,矢量处理命令链CM指定要从输入队列402中取回输入矢量,将其与矢量x相乘,要通过ReLU函数对乘法结果进行处理,并且要将处理后的结果与矢量y相加,并且要将加法结果存储在输出队列404中作为对应输出矢量。图6M2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(2)(乘法电路)、矢量处理操作电路408(1)(非线性电路)和矢量处理操作电路408(3)(加法/减法电路)以该顺序耦合在输入队列402与输出队列404之间。
图6N1描绘了矢量处理命令链CN,矢量处理命令链CN指定要从输入队列402中取回输入矢量,将其与矢量x相乘,要将乘法结果与矢量y相加,要通过ReLU函数对加法结果进行处理,并且要将处理后的结果存储在输出队列404中作为对应输出矢量。图6N2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(2)(乘法电路)、矢量处理操作电路408(3)(加法/减法电路)和矢量处理操作电路408(1)(非线性电路)以该顺序耦合在输入队列402与输出队列404之间。
图6O1描绘了矢量处理命令链CO,矢量处理命令链CO指定要从输入队列402中取回输入矢量,将其与矢量x相加,要通过ReLU函数对加法结果进行处理,要将处理后的结果与矢量y相乘,并且要将乘法结果存储在输出队列404中作为对应输出矢量。图6O2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(3)(加法/减法电路)、矢量处理操作电路408(1)(非线性电路)和矢量处理操作电路408(2)(乘法电路)以该顺序耦合在输入队列402与输出队列404之间。
图6P1描绘了矢量处理命令链CP,矢量处理命令链CP指定要从输入队列402中取回输入矢量,将其与矢量x相加,要将加法结果与矢量y相乘,要通过ReLU函数对乘法结果进行处理,并且要将处理后的结果存储在输出队列404中作为对应输出矢量。图6P2描绘了在输入队列402与输出队列404之间的对应矢量处理流水线。具体地,选择器电路410将矢量处理操作电路408(3)(加法/减法电路)、矢量处理操作电路408(2)(乘法电路)和矢量处理操作电路408(1)(非线性电路)耦合在输入队列402与输出队列404之间。
再次参考图4A,调度器电路412经由命令译码器电路414耦合到命令队列406,命令队列406存储矢量处理命令链(例如,图5B中的C1、C2和C3),其中每个矢量处理命令链与存储在输入队列402中的对应输入矢量(例如,图5A中的VAi、VBi和VCi)相关联。调度器电路412将控制信号CTRL提供给选择器电路410,以在输入队列402与输出队列404之间动态地配置包括矢量处理操作电路408(1)、408(2)、……、408(N)中的一些、全部或没有任何一个的矢量处理流水线,以实现在从命令队列406接收的矢量处理命令链中指定的矢量处理操作。
在一种实现中,每个矢量处理命令链(例如,图5B中的C1、C2和C3)指定要对相关联的对应输入矢量(例如,分别为VAi、VBi和VCi)执行以产生相关联的对应输出矢量(例如,分别为VAo、VBo和VCo)的矢量处理操作。在一种实现中,矢量处理命令链不包括用于动态地配置矢量处理流水线以处理连续的矢量处理命令链的调度信息。在一种实现中,调度器电路412确定经由控制信号CTRL被提供给选择器电路410的这样的调度信息。
在一种实现中,当命令队列406接收每个矢量处理命令链时,调度器电路412在矢量处理器电路400中调度每个接收的矢量处理命令链的操作。
在一种实现中,调度器电路412提供控制信号CTRL以在矢量处理器电路400中调度连续的矢量处理命令链的操作。
在一种实现中,调度器电路412在矢量处理器电路400中调度连续的矢量处理命令链,以最大化通过矢量处理器电路400的吞吐量。
在一种实现中,当命令队列406接收到矢量处理命令链时,调度器电路412实时地确定这种调度。
图7是用于在矢量处理器电路400中调度矢量处理命令链以处理相关联的对应输入矢量的过程700的实现的流程图。在一种实现中,调度器电路412实现过程700,尽管在其他实现中,某个其他电路或电路组合可以实现过程700。
如下面更详细描述的,在一种实现中,调度器电路412实现过程700以在矢量处理器电路400中同时调度连续的矢量处理命令链以最大化吞吐量,同时避免矢量处理器电路400中的结构危害。在一种实现中,调度器电路412基于在矢量处理命令链中指定的矢量处理操作,实时地确定这种调度。在一种实现中,矢量处理命令链不包括调度信息。
为了便于理解,过程700的操作的示例将分别使用图4C的矢量处理器电路400、以及图5A、5B和5C的输入队列402、命令队列406和输出队列404来描述。
在步骤702,确定命令队列406是否包括矢量处理命令链。在一种实现中,命令译码器电路414提供警报(例如,设置标志,生成中断,等等),以向调度器电路412通知已经在命令队列406中接收到矢量处理命令链(例如,矢量处理命令链C1)。在一种实现中,在步骤702处接收指示之前,矢量处理器电路处于“空闲”状态——例如,当前未处理任何矢量处理命令链或对应输入矢量。
为了简化以下描述,在矢量处理器电路处于空闲状态的同时在命令队列406中接收的第一矢量处理命令链在本文中将被称为“第一矢量处理命令链”。如果命令队列406不包括第一矢量处理命令链,则过程700循环回到步骤702。
如果命令队列406包括第一矢量处理命令链,则在步骤704,将与第一矢量处理命令链相对应的起始时钟周期指定为下一时钟周期。为了简单起见,在下面的描述中,将用于第一矢量处理命令链的起始时钟周期描述为“时钟周期1”。例如,矢量处理命令链C1是在命令队列406中接收的第一矢量处理命令链,因此在步骤704,调度器电路412确定与第一矢量处理命令链C1相对应的起始时钟周期是时钟周期1。
在步骤706,为用于实现当前正在处理的矢量处理命令链(称为“有效矢量处理命令链”)的每个结构计算“繁忙计数”值。在一种实现中,繁忙计数值指定在矢量处理器电路400执行有效矢量处理命令链的同时每个结构将“繁忙”(例如,正在使用)的时钟周期数。在一种实现中,调度器电路412从命令译码器电路414接收用于处理有效命令链的每个结构的“链延迟等待时间值”(将在下面更详细地描述),并且基于所接收的链延迟等待时间值确定繁忙计数值。
参考图4A,由矢量处理操作电路408(1)、408(2)、……、408(N)中的对应矢量处理操作电路实现的每个矢量处理操作具有相关联的矢量处理操作电路等待时间(在其余描述中称为“等待时间”),该等待时间是完成由矢量处理操作电路执行的矢量处理操作所需要的时钟周期数。
例如,下面的表1列出了上述各种矢量处理操作的示例等待时间。
表1:示例等待时间值
表1中列出的值仅用于说明目的。可以使用其他矢量处理操作电路等待时间值。
在一种实现中,命令译码器电路402被配置为从命令队列406接收矢量处理命令链,并且为每个接收的命令链确定用于处理所接收的命令链的每个结构的链延迟等待时间值。
在一种实现中,用于结构的链延迟等待时间值指定在矢量数据的第一子段到达该结构之前经过的时钟周期数。换言之,用于结构的链延迟等待时间值(CDLV)(i)可以表示为:
CDLV(i)=CDLV(i-1)+LAT(i-1) (1)
其中CDLV(i-1)是用于矢量处理命令链中紧接在前的结构的链延迟等待时间值,而LAT(i-1)是矢量处理命令链中紧接在前的结构的等待时间。
使用图4C的示例矢量处理电路400,这些结构包括输入队列402、输出队列406、以及将用于实现在所接收的命令链中指定的矢量处理操作的任何矢量处理操作电路408(1)、408(2)、408(3)。在一种实现中,命令译码器电路402基于针对每个矢量处理操作而指定的等待时间值(诸如以上表1中指定的等待时间值)来确定链延迟等待时间值。
图8列出了用于使用上述表1中列出的示例等待时间来处理图5B的示例矢量处理命令链C1、C2和C3的图4C中的每个结构的链延迟等待时间值,其中输入队列402和输出队列404每个具有零(0)等待时间。在该图中,INQ表示输入队列402,NL表示非线性矢量处理操作(例如,S形、双曲正切、ReLU),MUL表示逐元素矢量-矢量乘法矢量处理操作,A/S表示矢量-矢量加法/减法矢量处理操作,并且OUTQ表示输出队列404。
矢量处理命令链C1指定要从输入队列402中取回输入矢量VAi并且然后将其与矢量w相乘,要将乘法结果与矢量x相加,并且要将加法结果存储在输出队列404中作为对应输出矢量VAo。输入矢量VAi源自输入队列402,因此CDLV(i-1)=LAT(i-1)=0,并且根据等式(1),用于INQ的链延迟等待时间=0。用于NL的链延迟等待时间未确定,因为矢量处理命令链C1没有指定非线性矢量处理操作。对于MUL,矢量处理命令链(INQ)中紧接在前的结构的链延迟等待时间值为零(CDLV(i-1)=0)并且等待时间为零(LAT(i-1)=0),并且因此根据等式(1),用于MUL的链延迟等待时间值=0。对于A/S,矢量处理命令链(MUL)中紧接在前的结构的链延迟等待时间值为零(CDLV(i-1)=0),并且等待时间为七(LAT(i-1)=7),并且因此根据等式(1),用于A/S的链延迟等待时间值=7。对于OUTQ,矢量处理命令链(A/S)中紧接在前的结构的链延迟等待时间值为七(CDLV(i-1)=7),并且等待时间为十(LAT(i-1)=10),并且因此根据等式(1),用于OUTQ的链延迟等待时间值=17。
矢量处理命令链C2指定要从输入队列402中取回输入矢量VBi并且然后将其与矢量y相加,要将加法结果与矢量z相乘,并且要将乘法结果存储在输出队列404中作为对应输出矢量VBo。输入矢量VBi源自输入队列402,因此CDLV(i-1)=LAT(i-1)=0,并且根据等式(1),用于INQ的链延迟等待时间=0。用于NL的链延迟等待时间未确定,因为矢量处理命令链C2没有指定非线性矢量处理操作。对于A/S,矢量处理命令链(INQ)中紧接在前的结构的链延迟等待时间值为零(CDLV(i-1)=0),并且等待时间为零(LAT(i-1)=0),并且因此根据等式(1),用于A/S的链延迟等待时间值=0。对于MUL,矢量处理命令链(A/S)中紧接在前的结构的链延迟等待时间值为零(CDLV(i-1)=0),并且等待时间为十(LAT(i-1)=10),并且因此根据等式(1),用于MUL的链延迟等待时间值=10。对于OUTQ,矢量处理命令链(MUL)中紧接在前的结构的链延迟等待时间值为十(CDLV(i-1)=10),并且等待时间为七(LAT(i-1)=7),并且因此根据等式(1),用于OUTQ的链延迟等待时间值=17。
矢量处理命令链C3指定要对对应输入矢量VCi执行以产生对应输出矢量VCo的矢量处理操作。在一种实现中,矢量处理命令链C3指定要从输入队列402中取回输入矢量VCi并且用双曲正切函数对其进行处理,并且要将处理后的结果存储在输出队列404中作为对应输出矢量VCo。输入矢量VCi源自输入队列402,因此CDLV(i-1)=LAT(i-1)=0,并且根据等式(1),用于INQ的链延迟等待时间=0。对于NL,矢量处理命令链(INQ)中紧接在前的结构的链延迟等待时间值为零(CDLV(i-1)=0)并且等待时间为零(LAT(i-1)=0),并且因此根据等式(1),用于NL的链延迟等待时间值=0。用于MUL和A/S的链延迟等待时间未确定,因为矢量处理命令链C2没有指定乘法或加法/减法矢量处理操作。对于OUTQ,矢量处理命令链(NL)中紧接在前的结构的链延迟等待时间值为零(CDLV(i-1)=0)并且等待时间为三(LAT(i-1)=3),并且因此根据等式(1),用于OUTQ的链延迟等待时间值=3。
再次参考图7,在步骤706,为有效矢量处理命令链中使用的每个结构计算繁忙计数值。在一种实现中,用于结构的繁忙计数值由以下等式确定:
busy_count=CDLV+Vseg-1
(2)
其中CDLV是用于结构的链延迟等待时间值,并且Vseg是包括完整矢量的矢量子段的数目。例如,如果矢量包括100个元素,并且矢量处理器电路400一次并行处理10个元素,则Vseg=10。对于在矢量处理命令链中未使用的任何结构,将忽略用于这些结构的繁忙计数。
作为示例,对于有效矢量处理命令链C1,不执行非线性矢量处理操作,并且因此用于NL的繁忙计数值=0。选择器电路410初始化用于INQ、MUL、A/S和OUTQ的繁忙计数值。例如,使用上面的等式(2),用于INQ、MUL、A/S和OUTQ的繁忙计数值计算为:
在步骤708,调度器电路412将任何先前确定的繁忙计数值重置为在步骤706中计算出的繁忙计数值,并且将控制信号CTRL提供给选择器电路410,以开始从输入队列402向矢量处理操作电路408(1)、408(2)、……、408(N)中的一个矢量处理操作电路或输出队列404流传输与有效矢量处理命令链相对应的输入矢量。
例如,对于有效矢量处理命令链C1,调度器电路412将控制信号CTRL提供给选择器电路410,以开始从输入队列402向乘法电路408(2)流传输对应输入矢量VAi,并且将繁忙计数值重置为在步骤706中计算出的繁忙计数值。
图9示出了用于使用图8中列出的示例链延迟等待时间值的有效矢量处理命令链C1的示例繁忙计数值,其中Vseg=10。如上所述,与矢量处理命令链C1相对应的起始时钟周期是时钟周期1,其在图9中用箭头突出显示。
在时钟周期1,选择器电路410使用等式(2)计算用于每个结构(INQ、NL、MUL、A/S、OUTQ)的繁忙计数值,将任何先前确定的繁忙计数值重置为计算出的繁忙计数值,并且将控制信号CTRL提供给选择器电路410,以开始从输入队列402向乘法电路408(2)流传输输入矢量VAi,在每个时钟周期内一次Vseg=10个元素。
因此,在时钟周期1,繁忙计数值表明,输入队列402将繁忙达另外的9个时钟周期(一次10个元素地流传输输入矢量VAi),乘法电路408(2)将繁忙达另外的9个时钟周期(一次10个元素地处理输入矢量VAi),加法/减法电路408(3)将繁忙达另外的16个时钟周期(处理乘法电路408(2)的输出),并且输出队列404将繁忙达另外的26个时钟周期(接收加法/减法电路408(3)的输出。
再次参考图7,在步骤710,确定命令队列406是否包括正在等待由矢量处理器电路400执行的矢量处理命令链。如本文中使用的,这样的矢量处理命令链被称为“未决矢量处理命令链”。如果命令队列406不包含任何未决矢量处理命令链,则在步骤712,调度器电路412将控制信号提供给选择器电路410以处理有效矢量处理命令链的下一时钟周期,并且调度器电路412将所有繁忙计数值递减1。
在步骤714,确定矢量处理器电路400是否已完成对有效矢量处理命令链的处理。如果有效矢量处理命令链尚未完成处理,则过程700返回到步骤710以确定命令队列406是否包括未决矢量处理命令链。备选地,如果有效矢量处理命令链已经完成处理,则过程700返回到步骤702以等待命令队列406中的矢量处理命令链的接收。
再次参考步骤710,使用图5B的示例,命令队列406包括未决矢量处理命令链C2,并且因此过程700进行到步骤716以确定先前是否已经确定了与未决矢量处理命令链相对应的起始时钟周期。
如果先前尚未确定与未决矢量处理命令链相对应的起始时钟周期,则在步骤718,确定与未决矢量处理命令链相对应的起始时钟周期。在一种实现中,当避免矢量处理器电路400中的所有结构危害时——也就是说,当矢量处理器电路400开始处理与对应矢量处理命令链相关联的输入矢量时——所确定的起始时钟周期是第一时钟周期,所有结构危害将在输入矢量到达矢量处理器电路400中的每个结构的输入时已被解决。
在一种实现中,在以下条件满足之后,调度器电路412确定与未决矢量处理命令链相对应的起始时钟周期等于下一时钟周期:
busy_count≤CDLV
(3)
对于所有结构,其中CDLV是用于未决矢量处理命令链中的结构的链延迟等待时间值。
例如,对于未决矢量处理命令链C2,使用图8中的示例链延迟等待时间值,INQ、MUL、A/S和OUTQ分别具有以下CDLV值:0、10、0和17。在图9中,在时钟周期1,用于INQ、MUL、A/S和OUTQ的繁忙计数值分别为9、9、16和26。对于INQ,在9个附加的时钟周期之后(即,直到时钟周期10),繁忙计数将小于或等于CDLV(0)。对于MUL,在时钟周期1,繁忙计数将小于或等于CDLV(10)。对于A/S,在16个附加的时钟周期之后(即,直到时钟周期17),繁忙计数将小于或等于CDLV(0)。对于OUTQ,在9个附加的时钟周期之后(即,直到时钟周期10),繁忙计数将小于或等于CDLV(17)。
因此,在该示例中,在时钟周期17,对于未决矢量处理命令链C2,等式(3)被满足。因此,在图7中的步骤718,调度器电路412确定与未决矢量处理命令链C2相对应的起始时钟周期是时钟周期18(即,在时钟周期17之后的下一时钟周期)(在图8中用箭头突出显示)。在时钟周期18,所有结构危害将在输入矢量到达矢量处理器电路400中的每个结构的输入时已被解决。
在步骤720,确定当前时钟周期是否等于与未决矢量处理命令链相对应的起始时钟周期。如果当前时钟周期不等于与未决矢量处理命令链相对应的起始时钟周期,则过程700进行到步骤712,并且调度器电路将控制信号CTRL提供给选择器电路410,以处理有效矢量处理命令链的下一时钟周期。
例如,参考图9,如果当前时钟周期是时钟周期2(其不等于用于未决矢量处理命令链C2的起始时钟周期(18)),则过程700进行到步骤712,并且调度器电路412将控制信号CTRL提供给选择器电路410,以处理有效矢量处理命令链C1的下一时钟周期(例如,时钟周期3),并且将所有繁忙计数值递减1。
再次参考图7,过程700继续循环通过步骤710、716、718、720、712和714,直到在步骤720,当前时钟周期等于与未决矢量处理命令链相对应的起始时钟周期。
因此,在图9所示的示例中,从时钟周期2-10,调度器电路412将控制信号CTRL提供给选择器电路410,以继续从输入队列402向乘法电路408(2)一次10个元素地流传输输入矢量VAi,并且从时钟周期11到17,调度器电路412将控制信号CTRL提供给选择器电路410以继续处理有效矢量处理命令链C1。
在时钟周期17,用于INQ、NL、MUL和A/S结构的繁忙计数值都为0,这表示,这些结构“可用”于处理未决矢量处理命令链。用于OUTQ的繁忙计数值为10,这表示,调度器电路412将控制信号CTRL提供给选择器电路410以继续处理通过输出队列404的有效矢量处理命令链C1达另外的10个时钟周期(例如,直到时钟周期27)。
然而,即使在时钟周期17矢量处理器电路400尚未完全完成对有效矢量处理命令链C1的处理,矢量处理器电路400仍然可以在下一时钟周期18(与未决矢量处理命令链C2相对应的起始时钟周期)开始处理未决矢量处理命令链C2,因为起始时钟周期指定了不存在结构危害的时钟周期,并且调度器电路412可以将控制信号CTRL提供给选择器电路410以开始处理未决矢量处理命令链。
再次参考图7,在步骤720,确定当前时钟周期是否等于与未决矢量处理命令链相对应的起始时钟周期。继续图9的示例,在时钟周期18,当前时钟周期等于与未决矢量处理命令链C2相对应的起始时钟周期。
相应地,在步骤722,未决矢量处理命令链变为有效矢量处理命令链。因此,继续上述示例,未决矢量处理命令链C2变为有效矢量处理命令链。过程700循环回到步骤706以为在有效矢量处理命令链中使用的每个结构计算繁忙计数值。
在有效矢量处理命令链C2中,没有执行非线性矢量处理操作,并且因此用于NL的繁忙计数=0。选择器电路410计算用于INQ、MUL、A/S和OUTQ的繁忙计数。例如,使用上面的等式(2),用于INQ、MUL、A/S和OUTQ的繁忙计数计算为:
也就是说,繁忙计数表明,输入队列402将繁忙达另外的9个时钟周期(一次10个元素地流传输输入矢量VBi),加法/减法电路408(3)将繁忙达另外的9个时钟周期(一次10个元素地处理输入矢量VBi),乘法电路408(2)将繁忙达另外的19个时钟周期(处理加法/减法电路408(3)的输出),并且输出队列404将繁忙达另外的26个时钟周期(接收乘法电路408(2)的输出)。
在步骤708,调度器电路412将任何先前确定的繁忙计数值重置为在步骤706中计算出的繁忙计数值,并且将控制信号CTRL提供给选择器电路410以开始从输入队列402向矢量处理操作电路408(1)、408(2)、……、408(N)中的一个矢量处理操作电路或输出队列404流传输与有效矢量处理命令链相对应的输入矢量。
例如,对于有效矢量处理命令链C2,调度器电路412将控制信号CTRL提供给选择器电路410,以开始从输入队列402向加法/减法电路408(3)流传输对应输入矢量VBi,并且将繁忙计数值重置为在步骤706中计算出的繁忙计数值。再次参考图9,在时钟周期18,所有繁忙计数已经相应地重置。
从时钟周期18到27,调度器电路412将控制信号CTRL提供给选择器电路410,以从输入队列402向加法/减法电路408(3)一次10个元素地流传输输入矢量VBi,同时还向输出队列404流传输加法/减法电路408(3)的输出,以完成矢量处理器命令链C1的处理。
因此,在该示例中,调度器电路412在矢量处理器电路400中同时调度连续的矢量处理命令链C1和C2以最大化吞吐量,同时避免矢量处理器电路400中的结构危害。在时钟周期28,调度器电路412将控制信号CTRL提供给选择器电路410,以向乘法电路408(2)流传输加法/减法电路408(3)的输出,以继续处理有效矢量处理器命令链C2。
再次参考图7,在步骤710,确定命令队列406是否包括等待由矢量处理器电路400执行的矢量处理命令链。在图5B的示例中,矢量处理命令链C3在命令队列406中正在等待由矢量处理器电路400执行。因此,矢量处理命令链C3现在是未决矢量处理命令链。
再次参考图7,在步骤716,确定先前是否已经确定了与未决矢量处理命令链相对应的起始时钟周期。例如,由于尚未确定与未决矢量处理命令链C3相对应的时钟周期,因此在步骤718,确定与未决矢量处理命令链C3相对应的起始时钟周期。在一种实现中,在以上等式(3)中的条件满足之后,调度器电路412确定与未决矢量处理命令链相对应的起始时钟周期等于下一时钟周期。
例如,对于未决矢量处理命令链C3,使用图8中的示例链延迟等待时间值,INQ、NL和OUTQ分别具有以下CDLV值:0、0和3(MUL和A/S在矢量处理命令链C3中未使用)。在图9中,在时钟周期18,用于INQ、NL和OUTQ的繁忙计数值分别为9、0和26。对于INQ,在另外的9个时钟周期之后(即,直到时钟周期27),繁忙计数将小于或等于CDLV(0)。对于OUTQ,在另外的23个时钟周期之后(即,直到时钟周期40),繁忙计数将小于或等于CDLV(3)。因此,在时钟周期41,对于未决矢量处理命令链C3,等式(3)被满足。因此,在图7中的步骤718,调度器电路412确定与未决矢量处理命令链C3相对应的起始时钟周期是时钟周期52(即,在时钟周期41之后的下一时钟周期)(在图8中用箭头突出显示)。
在步骤720,确定当前时钟周期是否等于与未决矢量处理命令链相对应的起始时钟周期。如果当前时钟周期不等于与未决矢量处理命令链相对应的起始时钟周期,则过程700进行到步骤712,并且调度器电路将控制信号CTRL提供给选择器电路410,以处理有效矢量处理命令链的下一时钟周期。
例如,参考图9,如果当前时钟周期是时钟周期19,则调度器电路412将控制信号CTRL提供给选择器电路410以处理有效矢量处理命令链C2的下一时钟周期(例如,时钟周期20),并且将所有繁忙计数值递减1。
过程700继续循环通过步骤710、716、718、720、712和714,直到在步骤720,当前时钟周期等于与未决矢量处理命令链相对应的起始时钟周期。
因此,在图9所示的示例中,从时钟周期19-27,调度器电路412将控制信号CTRL提供给选择器电路410,以继续从输入队列402向加法/减法电路408(3)一次10个元素地流传输输入矢量VBi,并且从时钟周期28到41,调度器电路412将控制信号CTRL提供给选择器电路410以继续处理有效矢量处理命令链C2。
在时钟周期40,用于INQ、NL、MUL和A/S结构的繁忙计数值都为0,这表示,这些结构“可用”于处理未决矢量处理命令链。用于OUTQ的繁忙计数值为3,这表示,调度器电路412将控制信号CTRL提供给选择器电路410以继续处理通过输出队列404的有效矢量处理命令链C2达另外3个时钟周期(例如,直到时钟周期43)。
然而,即使在时钟周期40矢量处理器电路400尚未完全完成对有效矢量处理命令链C2的处理,矢量处理器电路400仍然可以在下一时钟周期41上(与未决矢量处理命令链C3相对应的起始时钟周期)开始处理未决矢量处理命令链C3,因为起始时钟周期指定了不存在结构危害的时钟周期,并且调度器电路412可以将控制信号CTRL提供给选择器电路410以开始处理未决矢量处理命令链。
再次参考图7,在步骤720,确定当前时钟周期是否等于与未决矢量处理命令链相对应的起始时钟周期。继续图9的示例,在时钟周期41,当前时钟周期等于与未决矢量处理命令链C3相对应的起始时钟周期。
相应地,在步骤722,未决矢量处理命令链变为有效矢量处理命令链。因此,继续上述示例,未决矢量处理命令链C3变为有效矢量处理命令链。过程700循环回到步骤706以为在有效矢量处理命令链中使用的每个结构计算繁忙计数值。
在对应矢量处理命令链C3中,没有执行乘法或加法/减法处理操作,并且因此MUL=A/S的繁忙计数=0。选择器电路410更新用于INQ、NL和OUTQ的繁忙计数。例如,使用上面的等式(2),用于INQ、NL和OUTQ的繁忙计数更新为:
也就是说,繁忙计数表明,输入队列402将繁忙达另外的9个时钟周期(一次10个元素地流传输输入矢量VCi),非线性电路408(1)将繁忙达另外的9个时钟周期(一次10个元素地处理输入矢量VCi),并且输出队列404将繁忙达另外的12个时钟周期(接收非线性电路408(1)的输出)。
在步骤708,调度器电路412将任何先前确定的繁忙计数值重置为在步骤706中计算出的繁忙计数值,并且将控制信号CTRL提供给选择器电路410以开始从输入队列402向矢量处理操作电路408(1)、408(2)、……、408(N)中的一个矢量处理操作电路或输出队列404流传输与有效矢量处理命令链相对应的输入矢量。
例如,对于有效矢量处理命令链C3,调度器电路412将控制信号CTRL提供给选择器电路410,以开始从输入队列402向非线性电路408(1)流传输对应输入矢量VCi,并且将繁忙计数值重置为在步骤706中计算出的繁忙计数值。再次参考图9,在时钟周期41,所有繁忙计数已经相应地重置。
从时钟周期42到43,调度器电路412将控制信号CTRL提供给选择器电路410以从输入队列402向非线性电路408(1)一次10个元素地流传输输入矢量VCi,同时还向输出队列404流传输乘法电路408(2)的输出,以完成矢量处理器命令链C2的处理。
因此,在该示例中,调度器电路412在矢量处理器电路400中同时调度连续的矢量处理命令链C2和C3以最大化吞吐量,同时避免矢量处理器电路400中的结构危害。从时钟周期41到43,调度器电路412将控制信号CTRL提供给选择器电路410以向乘法电路408(2)流传输乘法电路408(2)的输出以继续处理有效矢量处理器命令链C2。
再次参考图7,在步骤710,确定命令队列406是否包括等待由矢量处理器电路400执行的矢量处理命令链。在图5B的示例中,命令队列406不包括等待由矢量处理器电路400执行的矢量处理命令链。因此,再次参考图7,过程700重复步骤712、714和710,同时调度器电路412将控制信号CTRL提供给选择器电路410以完成对有效矢量处理命令链C3的处理。
除非另有说明,否则上述所有方法和过程可以全部或部分地通过由一个或多个通用计算机或处理器执行的软件代码模块来实现。代码模块可以存储在任何类型的计算机可读存储介质或其他计算机存储设备中。备选地,一些或所有方法可以全部或部分地由专用计算机硬件(诸如FPGA、ASIC等)实现。
除非另有明确说明,否则条件语言(诸如“可以(can)”、“可以(could)”、“可以(might)”或“可以(may)”)用于表明某些示例包括但其他示例不包括提出的特征、元素和/或步骤。因此,除非另有说明,否则这种条件性语言并非旨在暗示一个或多个示例以任何方式要求特征、元素和/或步骤,或者一个或多个示例必须包括用于决定在任何特定示例中是否需要包括或执行这些特征、元素和/或步骤的逻辑(在具有或没有用户输入或提示的情况下)。
除非另有明确说明,否则诸如短语“X、Y或Z中的至少一个”等连接语言应当被理解为表示项目、术语等可以是X或Y或Z或其组合。
可以对上述示例进行很多变化和修改,其要素应当被理解为是其他可接受的示例。所有这些修改和变型旨在被包括在本公开的范围内。
技术的说明性方面
以下概述提供了本文中阐述的技术的说明性方面的非详尽列表。
根据第一方面,提供了一种处理器电路,该处理器电路包括:输入端子和输出端子;多个矢量处理器操作电路;耦合到输入端子、输出端子和每个矢量处理器操作电路的选择器电路;以及适于控制选择器电路以在输入端子与输出端子之间配置以任何顺序包括零个、一个或多个矢量处理器操作电路的矢量处理流水线的调度器电路。
根据第二方面,调度器电路适于实时地确定用于控制选择器电路以配置矢量处理流水线的计划表。
根据第三方面,调度器电路适于:接收矢量处理命令链,矢量处理命令链指定要由矢量处理流水线执行的矢量处理操作;以及从接收的矢量处理命令链中确定用于控制选择器电路以配置矢量处理流水线的计划表,其中所接收的矢量处理命令链不包括用于配置矢量处理流水线的调度信息。
根据第四方面,调度器电路适于:接收多个矢量处理命令链,每个矢量处理命令链指定要由对应矢量处理流水线执行的矢量处理操作;以及从所接收的矢量处理命令链中实时地确定计划表,该计划表用于控制选择器电路以同时调度连续的矢量处理命令链,以最大化吞吐量同时避免处理器电路中的结构危害。
根据第五方面,选择器电路包括耦合到多个矢量处理器操作电路的多个多路复用器电路,其中多路复用器电路适于选择性地配置矢量处理流水线。
根据第六方面,每个多路复用器电路包括被耦合以从调度器电路接收对应控制信号的控制端子。
根据第七方面,多个矢量处理器操作电路包括逐元素矢量乘法电路、矢量加法/减法电路和矢量非线性处理电路中的一种或多种。
根据第八方面,多个矢量处理器操作电路中的每个矢量处理器操作电路包括浮点处理器电路、块浮点处理器电路和整数定点处理器电路中的任何一种。
根据第九方面,处理器电路还包括耦合到矢量处理器操作电路中的一个矢量处理器操作电路的矢量寄存器文件。
根据第十方面,多个矢量处理流水线包括机器学习算法。
根据第十一方面,处理器电路在硬件加速器电路中实现。
根据第十二方面,处理器电路在现场可编程门阵列设备、专用集成电路设备、图形处理单元、大规模并行处理器阵列设备、专用标准产品设备、片上系统设备、复杂可编程逻辑设备和定制集成电路中的一种或多种中实现。
根据第十三方面,提供了一种包括硬件加速器的计算设备,该硬件加速器包括被配置为对输入矢量执行多个矢量处理操作的硬件逻辑电路系统。硬件加速器包括:包括被配置为提供多个矢量处理器操作电路的硬件逻辑电路系统的矢量处理器;以及包括被配置为选择性地配置以任何顺序包括零个、一个或多个矢量处理器操作电路的多个矢量处理流水线的硬件逻辑电路系统的调度器,每个矢量处理流水线与输入矢量中的对应输入矢量相关联。
根据第十四方面,调度器还包括被配置为实时地确定用于配置矢量处理流水线的计划表的硬件逻辑电路系统。
根据第十五方面,调度器还包括硬件逻辑电路系统,该矢量处理操作电路被配置为接收指定要由矢量处理流水线执行的矢量处理操作的矢量处理命令链,并且从所接收的矢量处理命令链中确定用于配置矢量处理流水线的计划表,其中所接收的矢量处理命令链不包括用于配置矢量处理流水线的调度信息。
根据第十六方面,调度器还包括被配置为实时地确定计划表的硬件逻辑电路。
根据第十七方面,多个矢量处理器操作电路包括逐元素矢量乘法电路、矢量加法/减法电路和矢量非线性处理电路中的一种或多种。
根据第十八方面,多个矢量处理流水线包括机器学习算法。
根据第十九方面,提供了一种方法,该方法包括使用硬件逻辑电路系统对输入矢量执行多个矢量处理操作。硬件逻辑电路系统包括:包括被配置为提供多个矢量处理器操作电路的硬件逻辑电路系统的矢量处理器;以及包括被配置为选择性地配置以任何顺序包括零个、一个或多个矢量处理器操作电路的多个矢量处理流水线的硬件逻辑电路系统的调度器,每个矢量处理流水线与输入矢量中的对应输入矢量相关联。
根据第二十方面,该方法还包括在现场可编程门阵列设备、专用集成电路设备、图形处理单元设备、大规模并行处理器阵列设备,专用标准产品设备、片上系统设备、复杂可编程逻辑设备和定制集成电路中的一种或多种上实现硬件逻辑电路。
尽管已经以特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求书中定义的主题不必限于上述特定特征或动作。相反,上述特定特征和动作被公开作为实现权利要求的示例形式。
Claims (11)
1.一种处理器电路,包括:
输入端子和输出端子;
多个矢量处理器操作电路;
选择器电路,耦合到所述输入端子、所述输出端子和所述矢量处理器操作电路中的每个矢量处理器操作电路;以及
调度器电路,适于控制所述选择器电路以在所述输入端子与所述输出端子之间选择性地配置矢量处理流水线,所述矢量处理流水线以任何顺序包括所述矢量处理器操作电路中的零个、一个或多个矢量处理器操作电路。
2.根据前述权利要求中任一项所述的处理器电路,其中所述调度器电路适于实时地确定用于控制所述选择器电路以配置所述矢量处理流水线的计划表。
3.根据前述权利要求中任一项所述的处理器电路,其中所述调度器电路适于:
接收矢量处理命令链,所述矢量处理命令链指定要由所述矢量处理流水线执行的矢量处理操作;以及
从接收的所述矢量处理命令链中确定用于控制所述选择器电路以配置所述矢量处理流水线的计划表,其中接收的所述矢量处理命令链不包括用于配置所述矢量处理流水线的调度信息。
4.根据前述权利要求中任一项所述的处理器电路,其中所述调度器电路适于:
接收多个矢量处理命令链,每个矢量处理命令链指定要由对应矢量处理流水线执行的矢量处理操作;以及
从接收的所述矢量处理命令链中,实时地确定用于控制所述选择器电路以同时调度连续的矢量处理命令链以最大化吞吐量同时避免所述处理器电路中的结构危害的计划表。
5.根据前述权利要求中任一项所述的处理器电路,其中所述选择器电路包括耦合到所述多个矢量处理器操作电路的多个多路复用器电路,其中所述多路复用器电路适于选择性地配置所述矢量处理流水线。
6.根据前述权利要求中任一项所述的处理器电路,其中所述多个矢量处理器操作电路包括逐元素矢量乘法电路、矢量加法/减法电路和矢量非线性处理电路中的一种或多种。
7.根据前述权利要求中任一项所述的处理器电路,其中所述多个矢量处理器操作电路中的每个矢量处理器操作电路包括浮点处理器电路、块浮点处理器电路和整数定点处理器电路中的任何处理器电路。
8.根据前述权利要求中任一项所述的处理器电路,其中所述多个矢量处理流水线包括机器学习算法。
9.根据前述权利要求中任一项所述的处理器电路,其中所述处理器电路在现场可编程门阵列设备、专用集成电路设备、图形处理单元、大规模并行处理器阵列设备、专用标准产品设备、片上系统设备、复杂可编程逻辑设备和定制集成电路中的一种或多种中实现。
10.一种方法,包括:
使用硬件逻辑电路系统对输入矢量执行多个矢量处理操作,所述硬件逻辑电路系统包括:
矢量处理器,包括被配置为提供多个矢量处理器操作电路的硬件逻辑电路系统;以及
调度器,包括被配置为选择性地配置多个矢量处理流水线的硬件逻辑电路系统,所述多个矢量处理流水线以任何顺序包括所述矢量处理器操作电路中的零个、一个或多个矢量处理器操作电路,每个矢量处理流水线与所述输入矢量中的对应输入矢量相关联。
11.根据权利要求10所述的方法,还包括在现场可编程门阵列设备、专用集成电路设备、图形处理单元设备、大规模并行处理器阵列设备,专用标准产品设备、片上系统设备、复杂可编程逻辑设备和定制集成电路中的一种或多种上实现所述硬件逻辑电路系统。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/603,934 | 2017-05-24 | ||
US15/603,934 US10331445B2 (en) | 2017-05-24 | 2017-05-24 | Multifunction vector processor circuits |
PCT/US2018/028972 WO2018217361A1 (en) | 2017-05-24 | 2018-04-24 | Multifunction vector processor circuits |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110692038A true CN110692038A (zh) | 2020-01-14 |
CN110692038B CN110692038B (zh) | 2023-04-04 |
Family
ID=62196701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880033692.6A Active CN110692038B (zh) | 2017-05-24 | 2018-04-24 | 多功能矢量处理器电路 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10331445B2 (zh) |
EP (1) | EP3631624B1 (zh) |
CN (1) | CN110692038B (zh) |
WO (1) | WO2018217361A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022088090A1 (zh) * | 2020-10-30 | 2022-05-05 | 深圳市大疆创新科技有限公司 | 数字管理单元和数字信号处理系统 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11615307B2 (en) | 2018-12-06 | 2023-03-28 | MIPS Tech, LLC | Neural network data computation using mixed-precision |
US11893470B2 (en) | 2018-12-06 | 2024-02-06 | MIPS Tech, LLC | Neural network processing using specialized data representation |
US11537939B2 (en) * | 2019-05-03 | 2022-12-27 | Google Llc | Reshape and broadcast optimizations to avoid unnecessary data movement |
US10997116B2 (en) | 2019-08-06 | 2021-05-04 | Microsoft Technology Licensing, Llc | Tensor-based hardware accelerator including a scalar-processing unit |
US11615043B2 (en) * | 2020-01-02 | 2023-03-28 | Texas Instruments Incorporated | Systems, methods, and apparatus to enable data aggregation and adaptation in hardware acceleration subsystems |
US11347652B2 (en) | 2020-08-31 | 2022-05-31 | Microsoft Technology Licensing, Llc | Banked memory architecture for multiple parallel datapath channels in an accelerator |
US11734214B2 (en) | 2021-02-01 | 2023-08-22 | Microsoft Technology Licensing, Llc | Semi-programmable and reconfigurable co-accelerator for a deep neural network with normalization or non-linearity |
US20220121593A1 (en) * | 2021-12-23 | 2022-04-21 | Intel Corporation | Systems And Methods For Processor Circuits |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140019726A1 (en) * | 2012-07-10 | 2014-01-16 | Renesas Electronics Corporation | Parallel arithmetic device, data processing system with parallel arithmetic device, and data processing program |
CN105453028A (zh) * | 2013-08-14 | 2016-03-30 | 高通股份有限公司 | 向量积累方法及设备 |
CN106127302A (zh) * | 2016-06-23 | 2016-11-16 | 杭州华为数字技术有限公司 | 处理数据的电路、图像处理系统、处理数据的方法和装置 |
US20160335082A1 (en) * | 2015-05-11 | 2016-11-17 | Ceva D.S.P. Ltd. | Multi-dimensional sliding window operation for a vector processor |
US20160379115A1 (en) * | 2015-06-29 | 2016-12-29 | Microsoft Technology Licensing, Llc | Deep neural network processing on hardware accelerators with stacked memory |
US20170024632A1 (en) * | 2015-07-23 | 2017-01-26 | Mireplica Technology, Llc | Performance Enhancement For Two-Dimensional Array Processor |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5805875A (en) | 1996-09-13 | 1998-09-08 | International Computer Science Institute | Vector processing system with multi-operation, run-time configurable pipelines |
US7159099B2 (en) * | 2002-06-28 | 2007-01-02 | Motorola, Inc. | Streaming vector processor with reconfigurable interconnection switch |
US7461234B2 (en) * | 2002-07-01 | 2008-12-02 | Panasonic Corporation | Loosely-biased heterogeneous reconfigurable arrays |
JP4357473B2 (ja) * | 2005-11-04 | 2009-11-04 | 株式会社ソニー・コンピュータエンタテインメント | データ処理システムおよびプログラム |
EP2122542B1 (en) | 2006-12-08 | 2017-11-01 | Medhat Moussa | Architecture, system and method for artificial neural network implementation |
US7945768B2 (en) * | 2008-06-05 | 2011-05-17 | Motorola Mobility, Inc. | Method and apparatus for nested instruction looping using implicit predicates |
EP2946296A4 (en) * | 2013-01-17 | 2016-11-16 | Xockets Ip Llc | DELIBRATION PROCESSOR MODULES FOR CONNECTING TO A SYSTEM MEMORY |
US9275014B2 (en) | 2013-03-13 | 2016-03-01 | Qualcomm Incorporated | Vector processing engines having programmable data path configurations for providing multi-mode radix-2x butterfly vector processing circuits, and related vector processors, systems, and methods |
KR102204282B1 (ko) * | 2013-11-25 | 2021-01-18 | 삼성전자주식회사 | 다수의 기능 유닛을 가지는 프로세서를 위한 루프 스케쥴링 방법 |
US9369397B1 (en) * | 2014-07-16 | 2016-06-14 | Juniper Networks, Inc. | Apparatus to achieve quality of service (QoS) without requiring fabric speedup |
US10691463B2 (en) | 2015-07-30 | 2020-06-23 | Futurewei Technologies, Inc. | System and method for variable lane architecture |
CN106096728B (zh) | 2016-06-03 | 2018-08-24 | 南京航空航天大学 | 一种基于深层极限学习机的危险源识别方法 |
-
2017
- 2017-05-24 US US15/603,934 patent/US10331445B2/en active Active
-
2018
- 2018-04-24 EP EP18725703.5A patent/EP3631624B1/en active Active
- 2018-04-24 WO PCT/US2018/028972 patent/WO2018217361A1/en active Application Filing
- 2018-04-24 CN CN201880033692.6A patent/CN110692038B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140019726A1 (en) * | 2012-07-10 | 2014-01-16 | Renesas Electronics Corporation | Parallel arithmetic device, data processing system with parallel arithmetic device, and data processing program |
CN105453028A (zh) * | 2013-08-14 | 2016-03-30 | 高通股份有限公司 | 向量积累方法及设备 |
US20160335082A1 (en) * | 2015-05-11 | 2016-11-17 | Ceva D.S.P. Ltd. | Multi-dimensional sliding window operation for a vector processor |
US20160379115A1 (en) * | 2015-06-29 | 2016-12-29 | Microsoft Technology Licensing, Llc | Deep neural network processing on hardware accelerators with stacked memory |
US20170024632A1 (en) * | 2015-07-23 | 2017-01-26 | Mireplica Technology, Llc | Performance Enhancement For Two-Dimensional Array Processor |
CN106127302A (zh) * | 2016-06-23 | 2016-11-16 | 杭州华为数字技术有限公司 | 处理数据的电路、图像处理系统、处理数据的方法和装置 |
Non-Patent Citations (1)
Title |
---|
钱艺等: "一种神经网络并行处理器的体系结构", 《小型微型计算机系统》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022088090A1 (zh) * | 2020-10-30 | 2022-05-05 | 深圳市大疆创新科技有限公司 | 数字管理单元和数字信号处理系统 |
Also Published As
Publication number | Publication date |
---|---|
US20180341486A1 (en) | 2018-11-29 |
CN110692038B (zh) | 2023-04-04 |
US10331445B2 (en) | 2019-06-25 |
WO2018217361A1 (en) | 2018-11-29 |
EP3631624B1 (en) | 2023-05-10 |
EP3631624A1 (en) | 2020-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110692038B (zh) | 多功能矢量处理器电路 | |
US20210157992A1 (en) | Information processing method and terminal device | |
US11307864B2 (en) | Data processing apparatus and method | |
RU2767447C2 (ru) | Процессор нейронной сети, использующий сжатие и распаковку данных активации для снижения использования пропускной способности памяти | |
CN110678840B (zh) | 张量寄存器文件 | |
CN110678841B (zh) | 张量处理器指令集架构 | |
EP3786786A1 (en) | Processing device, processing method, chip, and electronic apparatus | |
US20200104573A1 (en) | Data processing apparatus and method | |
KR20190107766A (ko) | 계산 장치 및 방법 | |
US20210098001A1 (en) | Information processing method and terminal device | |
JP2023084094A (ja) | 面積高効率畳み込みブロック | |
CN108369538A (zh) | 下载视觉资产 | |
CN114008589A (zh) | 用于在顺序处理器上进行多次执行的动态代码加载 | |
CN110678862B (zh) | 用于硬连线乘法器电路的数据打包技术 | |
WO2021114903A1 (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
WO2021083101A1 (zh) | 数据处理方法、装置及相关产品 | |
CN114897147B (zh) | 骨干网络的生成方法、装置、设备以及存储介质 | |
US11307866B2 (en) | Data processing apparatus and method | |
US11086634B2 (en) | Data processing apparatus and method | |
CN115409678A (zh) | 一种对神经网络的算子进行融合的方法和相关产品 | |
CN111783969A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
WO2021082654A1 (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN115086232B (zh) | 任务处理及数据流生成方法和装置 | |
WO2021082653A1 (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
TWI829208B (zh) | 用於判定用於處理串流輸入資料之硬體架構之設計參數值之方法及系統及電腦可讀儲存媒體 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |