CN115151898A - 基于用户规范的可重配置架构上的操作单元图的高效执行 - Google Patents
基于用户规范的可重配置架构上的操作单元图的高效执行 Download PDFInfo
- Publication number
- CN115151898A CN115151898A CN202080079317.2A CN202080079317A CN115151898A CN 115151898 A CN115151898 A CN 115151898A CN 202080079317 A CN202080079317 A CN 202080079317A CN 115151898 A CN115151898 A CN 115151898A
- Authority
- CN
- China
- Prior art keywords
- unit
- units
- operation unit
- graph
- node
- 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
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/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/25—Fusion techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/94—Hardware or software architectures specially adapted for image or video understanding
- G06V10/95—Hardware or software architectures specially adapted for image or video understanding structured as a network, e.g. client-server architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/94—Hardware or software architectures specially adapted for image or video understanding
- G06V10/955—Hardware or software architectures specially adapted for image or video understanding using specific electronic processors
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Multimedia (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Evolutionary Biology (AREA)
- Computational Linguistics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
- Logic Circuits (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
公开的技术涉及在具有目标架构的可重配置数据处理器上高效地执行操作单元图。特别地,本发明涉及通过从用户接收特定于可重配置数据处理器的目标架构的架构提示、扫描操作单元图以检测由架构提示指定的操作单元模式的实例、以及将操作单元图中的操作单元融合为合并的操作单元块,从而产生经融合的操作单元图,来减少执行操作单元图所需的可重配置数据处理器的物理计算单元数目和/或物理存储器单元的数目。
Description
对其他申请的交叉引用
本申请涉及2019年9月16日提交的申请号为16/572527、名称为“针对可重配置架构的基于性能评估的资源分配”的美国非临时专利申请(代理人案卷号SBNV1016-2)。相关申请出于所有目的通过引用被并入本文。
技术领域
本技术涉及在可重配置架构上高效地执行操作单元图,并且可以特别地被应用于在粗粒度可重配置架构和其他分布式执行系统上高效地执行深度神经网络。
并入
出于所有目的,以下内容以引用的方式被并入,如同在本文中完全阐述:
Koeplinger等人,“Spatial:A language and compiler for applicationaccelerators(空间:针对应用加速器的语言和编译器)”,Proceedings Of the39thACMSIGPLAN conference on programming language design and implementation(PLDI),Proceedings of the 43thinternational symposium on computerarchitecture,2018;
Prabhakar等人,“Plasticine:A Reconfigurable Architecture for ParallelPatterns(Plasticine:针对并行模式的可配置架构),”ISCA’17,6月24日至28日,2017,多伦多,ON,加拿大;
于2019年1月3日提交的申请号为16/239252、名称为“可重配置数据处理器的虚拟化”的美国非临时专利申请(代理人案卷号SBNV1000-1);
于2018年11月21日提交的申请号为16/197826、名称为“可重配置数据处理器的配置加载”的美国非临时专利申请(代理人案卷号SBNV1001-1A);
于2018年11月21日提交的申请号为16/198086、名称为“可重配置数据处理器的配置卸载”的美国非临时专利申请(代理人案卷号SBNV1001-1B);
于2019年1月29日提交的申请号为16/260548、名称为“矩阵正规/转置读取和包括相同的可重配置数据处理器”的美国非临时专利申请(代理人案卷号SBNV1005-1);
于2019年8月8日提交的申请号为16/536192、名称为“针对可重配置架构的编译器流逻辑”的美国非临时专利申请(代理人案卷号SBNV1006-1);
于2019年5月9日提交的申请号为16/407675、名称为“控制流屏障和可重配置数据处理器”的美国非临时专利申请(代理人案卷号SBNV1007-1);以及
于2019年7月8日提交的申请号为16/504627、名称为“静默可重配置数据处理器”的美国非临时专利申请(代理人案卷号SBNV1008-1)。
背景技术
在本节中讨论的主题不应当仅仅由于其在本节中的提及而被认为是现有技术。类似地,不应当将本节中提及的或与作为背景提供的主题相关联的问题不应当被认为是先前已在现有技术中被识别。本节中的主题仅仅表示不同的方法,其本身也可以对应于所要求保护的技术的实现。
可重配置的处理器(包括现场可编程门阵列(FPGA))可以被配置为与可以使用执行计算机程序的通用处理器来实现各种功能相比,更高效或更快地实现各种功能。正在开发所谓的粗粒度可重配置架构(CGRA),其中阵列中的可配置单元比在通常的、更细粒度的FPGA中使用的可配置单元更复杂,并且可以使得能够更快或更高效地执行各种类别的功能。例如,已经提出了可以使得能够实现针对机器学习和人工智能工作负载的能量高效加速器的CGRA。参见Prabhakar等人,“Plasticine:A Reconfigurable Architecture forParallel Patterns(Plasticine:针对并行模式的可配置架构),”ISCA’17,6月24日至28日,2017,多伦多,ON,加拿大。
当性能、功率、或能量效率极为重要时,CGRA是极具吸引力的平台。CGRA是使用可重配置互连结构以某种拓扑而互连在一起的粗粒度可重配置计算元件和存储器元件的组合。因为架构中的可重配置组件以(诸如,指令、字、和字的向量)粗粒度操作,所以被称为粗粒度可重配置,与诸如FPGA的架构中常见的细粒度、比特等级粒度相反。CGRA中的可编程数据和控制路径通过将可重配置计算组件和存储器组件连接到定制的、深度嵌套的、并且分层的流水线中,使它们自然地适合以在应用中利用嵌套并行性。
现代应用通常具有多个等级的嵌套循环等级,并且在多个等级的嵌套中包含并行性。对于这种深度嵌套的循环,仅集中在最内部循环的主体上的传统循环流水线方法通常利用不充分的并行性,并且导致硬件利用率低下,导致性能、功率、或能量效率低下。
基于引导操作并行性的用户指定的架构提示,出现加速对CGRA的可重配置元件的操作的执行的机会。可能导致改进的并行化和硬件利用率。
附图说明
在附图中,相同的附图标记通常指代不同视图中的相同部分。此外,附图不必然按比例绘制,而是总体上将重点放在说明所公开的技术的原理上。在以下描述中,参考以下附图描述所公开的技术的各种实现,其中:
图1是图示了包括主机、存储器、和具有可配置单元的阵列的可重配置数据处理器的系统的系统图。
图2是使用融合以可重配置数据处理器上的高效地执行操作单元图的一个实现。
图3是以JSON(javascript对象符号)编写的模式图,并且是用户指定的架构提示的示例。
图4也是以JSON编写的模式图,并且是用户指定的架构提示的另一示例。
图5描绘了根据所公开的技术的一个实现的融合算法。
图6示出了由图5的融合算法构建的操作单元的模式的一个示例。
图7是根据所公开的技术的一个实现找到模式匹配(匹配的子图)的样本代码。
图8描绘了用于复制的选择的一个实现。
图9描绘了复制的一个实现。
图10示出了将图6的融合算法应用于ResNet50操作单元图的一个示例。
图11示出了得到的融合的ResNet50操作单元图。
图12图示了使用性能估计来将可重配置数据处理器的可用物理计算单元和/或物理存储器单元分配给经融合的操作单元图的操作单元用于其执行的一个实现。
图13示出了用于生成在可重配置数据处理器上执行经融合的操作单元图的性能估计的二分搜索算法的一个实现。
图14描绘了资源确定函数的一个实现,该资源确定函数确定处理可重配置数据处理器上的经融合的操作单元图的流水线计算负载所需的可重配置数据处理器的物理计算单元和/或物理存储器单元的流水线数目。
图15示出了确定经融合的操作单元图的特定加法操作单元的阶段计算负载的一个示例。
图16示出了确定经融合的操作单元图的特定矩阵乘法操作单元的阶段计算负载的另一示例。
图17描绘了根据所公开的技术的一个实现来确定其性能估计的示例操作单元图。
图18图示了根据所公开的技术的一个实现针对图18的操作单元图的不同操作单元确定阶段计算处理时间。
图19A是在图1的可重配置数据处理器中可使用的区块和阵列等级网络的简化图。图19B示出了阵列等级网络中的示例交换单元连接元件。
图20是图示示例可配置单元的框图。
具体实施方式
呈现以下讨论以使得任何本领域的技术人员能够制作并且使用所公开的技术,并且在特定应用及其要求的上下文中提供以下论述。对所公开的实现的各种修改对于本领域技术人员将是明显的,并且在不脱离所公开的技术的精神和范围的情况下,本文所定义的一般原理可以被应用于其它实现和应用。因此,所公开的技术不旨在限于所示出的实现,而是与符合本文所公开的原理和特征的最宽范围一致。
可重配置数据处理器
图1是示出了包括主机120、存储器140、和可重配置数据处理器110的系统的系统图。如图1的示例所示,可重配置数据处理器110包括可配置单元的阵列190和配置加载/卸载控制器195。本文所使用的短语“配置加载/卸载控制器”指代配置加载控制器和配置卸载控制器的组合。配置加载控制器和配置卸载控制器可以使用分离的逻辑和数据路径资源来实现,或者可以使用适合于特定实施例的共享的逻辑和数据路径资源来实现。在一些实施例中,系统可以仅包括本文所述的类型的配置加载控制器。在一些实施例中,系统可以仅包括本文所述的类型的配置卸载控制器。
可配置单元的阵列190的配置涉及由编译器(未示出)编译配置描述,以产生配置文件(有时被称为比特流或比特文件),并且将配置文件分发到阵列190上的可配置单元。在一个实施例中,编译器提供从应用到比特文件的转换。
处理器110包括连接到主机120的外部I/O接口130和连接到存储器140的外部I/O接口150。I/O接口130、I/O接口150经由总线系统115连接到可配置单元的阵列190和配置加载/卸载控制器195。总线系统115可以具有携带一个数据分块(“chunk”)的总线宽度,对于该示例,总线宽度可以是128比特(贯穿本文中对128比特的引用可以被认为是更通用的示例分块大小)。通常,配置文件的分块可以具有N个数据比特号,并且总线系统可以被配置为在一个总线周期中传输N个比特数据,其中N是任何实际总线宽度。在分发顺序中分发的子文件可以包括一个分块,或适合特定实施例的其它数据的数量。本文使用由每个数据的一个块组成的子文件来描述过程。当然,该技术可以被配置为分发不同大小的子文件,包括例如可以包含两个总线周期中分发的两个分块的子文件。
为了利用配置文件来配置可配置单元的阵列190中的可配置单元,主机120可以经由可重配置数据处理器110中的接口130、总线系统115、和接口150而将配置文件发送到存储器140。主机120经由总线系统125连接到接口130。存储器140经由总线系统145连接到接口150。配置文件可以以适合特定架构的多种方式而被加载,包括在可配置处理器110外部的数据路径中。可以经由存储器接口150从存储器140中取回配置文件。然后,配置文件的分块可以以本文所述的分发顺序被发送到可重配置数据处理器110中的可配置单元的阵列190中的可配置单元。
外部时钟发生器170或其它时钟信号源可以将时钟信号175或多个时钟信号提供给可重配置数据处理器110中的元件,包括可配置单元的阵列190、总线系统115、和外部数据I/O接口。
融合
图2是使用融合200在可重配置数据处理器100上高效地执行操作单元图204的一个实现。融合器214将操作单元图204、架构提示202、和架构规范212作为输入,并且产生经融合的操作单元图224。
操作单元图204是以诸如(但不限于)C、C++、Java、Python、或Spatial等编程语言编写的应用或源代码。例如,操作单元图204可以实现具有不同大小和数据类型的多层的卷积神经网络(CNN)处理,使得每层包括具有不同属性的多个嵌套循环。例如,操作单元图204可以涉及访问输入和权重的存储器操作以及执行矩阵乘法的浮点操作。作为另一示例,操作单元图204可以包括具有高迭代计数的嵌套循环和加载来自先前层的输入值并且乘以后一层的权重,以产生后续层的输出的循环主体。操作单元图204具有最外循环主体的循环等级并行性,最外循环主体可以使用粗粒度流水线来利用。操作单元图204具有最内循环主体的指令等级并行性,可以使用循环展开、SIMD向量化、和流水线化来类似地开发最内循环主体。
关于循环,直接嵌套在循环主体中的循环被称为外部父循环的子循环。如果循环不具有任何子循环,即在其主体内没有任何嵌套的循环,则循环被称为最内循环。如果循环不具有父循环,即不被嵌套在另一循环的主体内,则循环是最外循环。不完全嵌套的循环具有主体,该主体具有非循环语句(例如,基本算术运算、逻辑运算、以及关系运算)和一个或多个子循环的混合。不完全嵌套的循环中的并行性可以在任何或所有循环等级以及在包括循环主体的操作中被利用。并行性可以以多种形式出现,诸如细粒度流水线并行性、粗粒度流水线并行性、数据并行性、以及任务并行性。
操作单元图204的示例包括:
·AlexNet
·ResNet
·Inception
·WaveNet
·PixelCNN
·GoogLeNet
·ENet
·U-Net
·BN-NIN
·VGG
·LeNet
·DeepSEA
·DeepChem
·DeepBind
·DeepMotif
·FIDDLE
·DeepLNC
·DeepCpG
·DeepCyTOF
·SPINDLE
使用诸如JSON、C、C++、Java、Python、或Spatial等高级语言,由诸如应用开发方和系统架构师等用户指定架构提示202。参见Koeplinger等人的“Spatial:A Language AndCompiler For Application Accelerators(空间:应用加速器的语言和编译程序),”Proceedings Of The 39th ACM SIGPLAN Conference On Programming Language DesignAnd Implementation(PLDI),Proceedings of the 43rd International Symposium onComputer Architecture,2018。
图3和4示出了以JSON编写的架构提示202的示例。当在可重配置数据处理器100的物理计算单元和/或物理存储器单元上执行第一操作单元的模式时,架构提示202要求融合第一操作单元。此外,架构提示202将模式中的第一操作单元指定为第一节点,并且将模式中的第一操作单元之中的第一数据流指定为第一边缘。此外,架构提示202引导模式中的第一操作单元(例如322、332、342、252、422)之中的融合。
在一个实现中,架构提示202描述了节点模式的列表,节点模式被融合到一个操作中,该操作可以在可重配置数据处理器100的一个物理计算单元上执行。在一些实现中,每个节点模式包括节点的列表(它们的通用唯一标识符(UUID)和操作类型)、描述节点如何被连接的边缘(即,每个节点的输入的列表)、以及融合的节点的操作类型。
模式图300是架构提示202的一个示例。模式图300要求融合322的三个操作单元(Conv2DBNRelu):(1)二维(2D)卷积操作单元(Conv2D)、(2)批量归一化操作单元(BatchNorm)、以及(3)整流线性单元(ReLU)操作单元(Relu)。模式图300将这三个操作单元指定为节点302,并且将这三个操作单元之间的数据流指定为边缘312。
模式图300还要求融合332的两个操作单元(Conv2DBN):(1)2D卷积操作单元和(2)批量归一化操作单元。模式图300还要求融合342的两个操作单元(Conv2DRelu):(1)2D卷积操作单元和(2)ReLU操作单元。模式图300还要求融合352的两个操作单元(Addmm):(1)乘法操作单元(Mm)和(2)加法操作单元(Add)。
模式图400是针对非顺序模式的架构提示202的另一示例。模式图400要求融合422的五个操作单元(Conv2DBNAdd):(1)第一2D卷积操作单元、(2)第一批量归一化操作单元、(3)第二2D卷积操作单元、(4)第二批量归一化操作单元、以及(5)加法操作单元。模式图400将这五个操作单元指定为节点402,并且将这五个操作单元之中的数据流指定为边缘412。此处,可重配置数据处理器100的一个物理计算单元对两个数据集执行2D卷积操作和批量归一化,然后将它们的结果相加。
融合器214考虑可重配置数据处理器100的目标架构来执行融合。目标架构在架构规范212中被指定并且由用户提供。在一个实现中,架构提示202特定于可重配置数据处理器100的目标架构。
图6描绘根据所公开技术的一个实现的融合算法500。在一个实现中,融合算法500由融合器214实现。
在动作502处,融合算法500基于用户指定的架构提示202来构造“操作单元的模式”。操作单元的模式中的节点表示控制结构、数据操作、和存储器分配,而边缘表示数据与效果依赖性。操作单元的模式支持分支、循环、函数调用、和控制依赖性的其它变型。在一个实现中,操作单元的每个模式可以具有多个输入,但是只具有一个输出。输出节点被称为“node_pattern_output”。图6示出了具有2D卷积节点602、2D卷积节604、和批量归一化节点612、批量归一化节点614、以及加法输出节点622(node_pattern_output)的操作单元的模式的一个示例600。
在动作512处,融合算法500在未经融合的操作单元图204中寻找与操作单元的模式的输出节点(例如,加法输出节点622)匹配的节点。未经融合的操作单元图204中的匹配的节点称为“node_matched_output”。
在动作522处,融合算法500并行地从node_pattern_output以及从node_matched_output向上遍历,并且检查所有对应节点是否匹配,直到已经访问了操作单元的模式中的每个节点为止。如果所有节点都匹配,则找到“匹配的子图”。如果没有找到匹配的子图,则融合算法500返回到动作512。
在一个实现中,动作522由检测器714执行,检测器714又包括扫描器702和匹配器712。图7中还提供了具化动作522的样本代码724,以寻找700模式匹配(匹配的子图)。扫描器702扫描未经融合的操作单元图204以检测由架构提示202指定的第一操作单元(例如322、332、342、252、422)的模式的实例。匹配器712将操作单元图204中的第二节点和第二边缘与架构提示202中的第一节点和第一边缘进行匹配,并且检测模式匹配(匹配的子图)。
在一个实现中,动作522包括通过将由架构提示202指定的第一输出节点与操作单元图204中的第二输出节点进行匹配来检测模式匹配,以及从操作单元图204中的第二输出节点开始,遍历操作单元图204以确定操作单元图204中的第二节点和第二边缘与架构提示202中的第一节点和第一边缘匹配。在一个实现中,该遍历是向上遍历。
在动作532处,如果匹配的子图中的中间节点具有指向匹配的子图外部的连接,则融合算法500复制匹配的子图的部分。图8示出了标识800操作单元图204的操作单元,该操作单元被融合到合并的操作单元块814中,但是具有到合并的操作单元块814之外的操作单元图204的另一操作单元的数据流。合并的操作单元块814包括2D卷积操作单元(Conv2D)812、批量归一化操作单元(BatchNorm)824、和ReLU操作单元(ReLU)834。此处,Conv2D 812和BatchNorm 824的中间结果需要在合并的操作单元块814之外作为到加法操作单元(Add)842的输入。这需要复制一些节点,以确保节点融合后的正确性。
在一个实现中,针对连接匹配的子图的中间节点的任何连接(即,合并的操作单元块),复制合并的操作单元块中的中间节点及其所有祖先。在合并的操作单元块814的情况下,这样的中间节点是Conv2D812和BatchNorm 824。
图9示出了复制900所标识的操作单元(例如,Conv2D 812A、Conv2D 812B、BatchNorm 824)及其数据流、以及复制合并的操作单元块814中的、向所标识的操作单元(例如,BatchNorm 824)及其数据流提供输入的任何其他操作单元(例如,Conv2D 812A)。
在动作542处,融合算法500利用由架构提示202指定的融合节点替换匹配子图。在一个实现中,融合器214将操作单元图204中的第二节点和第二边缘的操作单元融合到合并的操作单元块中,从而产生经融合的操作单元图224。
分配器234将可重配置数据处理器100的物理计算单元和/或物理存储器单元分配给经融合的操作单元图224。
执行器244基于该分配在可重配置数据处理器100上执行经融合的操作单元图224。
ResNet50融合示例
图10示出了将图6的融合算法应用于ResNet50操作单元图1000的一个示例。融合算法500标识包括Conv2D操作单元1002、BatchNorm操作单元1012、Conv2D操作单元1022、BatchNorm操作单元1032、和Add操作单元1042的匹配的子图以及它们的数据流(如虚线箭头所示)。
图11示出了具有合并的操作单元块1102(即,融合块)的得到的融合的ResNet50操作单元图1100。
性能估计
所公开的技术生成用于在可重配置数据处理器100上执行操作单元图的性能估计。操作单元图可以是经融合的操作单元图224。在一个实现中,性能估计用于将可重配置数据处理器100的可用物理计算单元和/或物理存储器单元分配给操作单元图的操作单元以用于其执行。
图12图示了使用性能估计1200来将可重配置数据处理器100的可用物理计算单元和/或物理存储器单元分配给经融合的操作单元图224的操作单元以供其执行的一个实现。
性能估计器1202将经融合的操作单元图224作为输入,并且生成性能估计1262作为输出。在一个实现中,性能估计1262被用于将可重配置数据处理器100的可用物理计算单元和/或物理存储器单元分配给经融合的操作单元图224的操作单元,然后在可重配置数据处理器100上执行经融合的操作单元图224。
在一些实现中,可视器1272生成用于显示的性能估计1262。可视化可以用于传达由可重配置数据处理器100如何有效地执行经融合的操作单元图224。可视化可以用于比较分析,以将经融合的操作单元图224的性能估计与操作单元图204的性能估计进行比较。可视化可以用于比较分析,以将第一经融合的操作单元图的性能估计与第二经融合的操作单元图的性能估计进行比较。可视化可以用于比较分析,以将第一操作单元图的性能估计与第二操作单元图的性能估计进行比较。
性能估计器1202包括搜索器1212、流水线资源确定器1222、阶段延时确定器1232、阶段资源确定器1242、和性能估计计算器1252。
在一个实现中,性能估计1262标识在可重配置数据处理器100上执行经融合的操作单元图224的吞吐量和延时。在理想情况下,芯片(可重配置数据处理器100)利用率是百分之百(100%),可以被公式化为:
througput ideal=GRAPH FLOP/CHIP FLOPS
其中GRAPH FLOP是经融合的操作单元图224中浮点操作的总数目,并且CHIPFLOPS是每秒可以由芯片(可重配置数据处理器100)处理的浮点操作的峰值数目。
当未实现芯片(可重配置数据处理器100)的百分之百(100%)利用率时(例如,由于软件限制和硬件限制),则:
througputreal=througputideal*η
其中η是平均芯片利用率。
此处,η是取决于可重配置数据处理器100的架构、经融合的操作单元图224、和/或经融合的操作单元图224的输入维度的数字,因此不容易被估计。此外,对于某个操作单元图,可重配置数据处理器100的不同物理计算单元和/或物理存储器单元的利用率也可以是不同的,利用率取决于在特定物理计算单元或物理存储器单元上运行的操作大小和数据大小。例如,运行卷积的物理计算单元可以实现非常高的利用率,而运行加法的物理计算单元可能未被充分利用。这些变量使得准确的性能估计具有挑战性。
二分搜索
图13示出了二分搜索算法1300的一个实现,该二分搜索算法用于生成在可重配置数据处理器100上执行经融合的操作单元图224的性能估计1262。
搜索器1212使用通过二分搜索算法1300的迭代过程来确定执行经融合的操作单元图224的操作单元所需的通用阶段处理时间(“stage_latency”)。在一个实现中,搜索器1212初始化通用阶段处理时间(“stage_latency”)的搜索下限(“stage_latency_low”,lowerer search bound)和搜索上限(“stage_latency_high”,upper search bound)。
在一个实现中,通用阶段处理时间(“stage_latency”)的搜索下限(“stage_latency_low”)可以基于可重配置数据处理器100的最大利用率(例如,100%利用率)。这具化在动作1302中。
在一个实现中,通用阶段处理时间(“stage_latency”)的搜索上限(“stage_latency_high”)可以基于将通用阶段处理时间(“stage_latency”)的搜索下限(“stage_latency_low”)与最小利用率因素相乘。在一些实现中,最小利用率因素是100,因此最小利用率是1%。在其它实现中,搜索上限(“stage_latency_high”)的初始值被设置为搜索下限(“stage_latency_low”)的1000倍,这也等于0.1%的利用率。这也具化在动作1302中。
然后,搜索器1212选择通用阶段处理时间(“stage_latency”)的搜索下限(“stage_latency_low”)和搜索上限(“stage_latency_high”)之间的中间阶段计算处理时间用于评估。在一个实现中,中间阶段计算处理时间可以是通用阶段处理时间(“stage_latency”)的搜索下限(“stage_latency_low”)和搜索上限(“stage_latency_high”)的平均值(“stage_latency_average”)。这具化在动作1312中。
然后,流水线资源确定器1222确定处理可重配置数据处理器100上的经融合的操作单元图224的流水线计算负载所需的物理计算单元和/或物理存储器单元的流水线数目1442(“total_PCU”)。
阶段计算负载
转到图14,针对经融合的操作单元图224的操作单元中的每个操作单元(“fornode in fused_graph”),阶段延时确定器1232通过使用资源确定函数(例如,“get_graph_PCU”1402)来执行资源确定1400,以确定仅使用一个物理计算单元和/或仅使用一个物理存储器单元,来处理经融合的操作单元图224的操作单元中的相应一个操作单元的阶段计算负载1424(“node.get_flop()”)所需的特定阶段计算处理时间1414(“node_latency_with_one_PCU”)。
操作单元中的相应一个操作单元的阶段计算负载1424(“node.get_flop()”)是指执行操作单元中的相应一个操作单元所需的浮点运算(FLOP)的总数目,由其操作类型、输入维度、和输出维度来确定。
例如,在图15中,通过首先计算FLOP 1502的总数目作为输出大小的函数来确定针对加法操作单元的阶段计算负载1500。即,一个操作生成一个输出数目。然后,基于张量形状计算输入大小1512。
在可重配置数据处理器100的一个实现中,物理计算单元具有32个通道和6个阶段,总共具有196个(32×6)算术逻辑单元(ALU)。每个ALU可以每周期执行两个操作,并且可以在一个周期中完成一个乘加。这被具化为“n_passes”1522。
加法操作单元仅能够使用一个阶段,因此“/config.PCU_N_STAGES”参数1536被包括在“PCU_utilization”公式1532中。PCU_utiliziton计算1532的另一组件1534是由于加法可能不能够利用所有通道的事实。例如,如果我们有32个数字加上32个数字,我们可以利用32个通道(并行)。然而,如果我们有40个数字,我们将首先加载32个数字,然后加载8个数字,因此利用率将乘以(40/64)。
在图16中的另一示例中,通过首先计算FLOP 1602的总数目作为输出大小M*N的函数来确定针对矩阵乘法操作单元的阶段计算负载1600。即,针对每个输出元件,我们需要进行K次乘加运算,因此总FLOP是M*N*(K*2)。
使用一个物理计算单元,我们可以在M个维度中跨32个通道并行化,并且在N个维度中跨6个阶段并行化,如1612中所具化的。因此,如果我们具有M=64、K=100、和N=12,那么我们可以通过将第一矩阵划分为两个32×100分块并且将第二矩阵划分为200×6分块来实现百分之百的利用率1622。然而,如果M=16、K=100、N=3,那么我们只能得到25%的利用率1622。
阶段计算处理时间
最后,特定阶段计算处理时间1414(“node_latency_with_one_PCU”)被确定为仅一个物理计算单元和/或仅一个物理存储器单元的利用率和容量的比率(后者可以是针对特定处理器/芯片/硬件的常数)。
阶段资源
阶段资源确定器1242通过将特定阶段计算处理时间1414(“node_latency_with_one_PCU”)除以中间阶段计算处理时间1434(例如,“stage_latency_average”),来确定处理操作单元的相应一个操作单元的阶段计算负载1424(“node.get_flop()”)所需的物理计算单元和/或物理存储器单元的阶段数目1432(“node_PCU”)。
在一个实现中,阶段资源确定1242通过向上取整到整数来确定处理阶段计算负载1424(“node.get_flop()”)所需的物理计算单元和/或物理存储器单元的阶段数目1432(“node_PCU”),该整数是阶段计算处理时间1414(“node_latency_with_one_PCU”)除以中间阶段计算处理时间1432(例如,“stage_latency_average”)的结果。这由天花板函数1433具化。
流水线资源
流水线资源确定器1222对操作单元中的每个操作单元的物理计算单元和/或物理存储器单元的阶段数目1432(“node_PCU”)求和,并且产生物理计算单元和/或物理存储器单元的流水线数目1442(“total_PCU”)。这也具化在图13的动作1312中。
在一个实现中,针对每个节点,如果仅使用一个PCU,则我们首先计算其延时。这需要构建具有每个操作的建模(例如,Conv、Add)的节点库,使得我们知道在给定输入大小和输出大小的情况下如何计算每个操作的FLOP和利用率。然后,我们查看该延时(具有一个PCU)与我们的目标stage_latency之间的比率,以确定需要多少个PCU来并行化该操作。然后,针对该图的总PCU是分配给每个节点的PCU的总和。
迭代
然后搜索器1212迭代地初始化通用阶段处理时间的新的搜索下限(“stage_latency_low”)和搜索上限(“stage_latency_high”)(“stage_latency”),并且考虑在先前迭代中针对之前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目1432(“total_PCU”)是低于还是高于可用的物理计算单元和/或物理存储器单元,来选择通用阶段处理时间的新的搜索下限与搜索上限(“stage_latency”)之间的新的中间阶段计算处理时间,用于在下一次迭代中进行评估。这具化在动作1322中。
在一个实现中,当在先前迭代中针对之前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目1432(“total_PCU”)低于可用的(available_PCU)物理计算单元和/或物理存储器单元时,搜索器1212将针对下一次迭代的新的搜索上限(“stage_latency_high”)设置为之前中间阶段计算处理时间(例如,“stage_latency_average”)。这具化在动作1324中。
在一个实现中,当在先前迭代中针对之前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目1432(“total_PCU”)高于可用(available_PCU)物理计算单元和/或物理存储器单元时,搜索器1212将针对下一次迭代的新的搜索下限(“stage_latency_low”)设置为之前中间阶段计算处理时间(例如,“stage_latency_average”)。这具化在动作1332中。
在一个实现中,在每次迭代中,我们选取较高界限和较低界限的中间点(stage_latency_average),并且通过get_graph_PCU函数调用来获得实现这个阶段延时所需的总PCU的估计。如果PCU的总数目超过可用的PCU,我们需要增加阶段延时(让stage_latency_low=stage_latency_average)。否则,我们要花费更多的计算资源来进一步提高性能,因此我们尝试降低阶段延时(让stage_latency_high=stage_latency_average)。
终止
当在当前迭代中针对当前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目1432(“total_PCU”)满足收敛标准时,搜索器1212终止迭代初始化和选择。在一个实现中,收敛标准在搜索上限与搜索下限之间的差低于阈值时发生。这具化在动作1342中。在一个实现中,只要搜索上限与搜索下限之间的差高于阈值,搜索器1212就继续迭代初始化和选择。
吞吐量和延迟
性能估计计算器1252将流水线吞吐量计算为当前中间阶段计算处理时间的反函数,并且通过将阶段计算处理时间乘以融合操作图224中的操作单元数目(“图深度”)来计算图延时。这具化在动作1344中。
通用性能估计示例
图17描绘了根据所公开的技术的一个实现来确定性能估计的示例操作单元图1700。
在空间架构中,节点操作是流水线式。换言之,每个节点是流水线中的阶段,并且流水线的长度是图的深度。例如,在操作单元图1700中,在流水线中有五个节点/阶段/操作单元。当分配给第二操作“Add1”的PCU对第n个样本应用加法时,针对第一操作“Conv1”1702的PCU对第n+1个样本执行卷积(并且Conv2是对第n-1个样本的操作,等等)。
图18根据所公开的技术的一个实现图示了为图17的操作单元图1700的不同操作单元1702、操作单元1712、操作单元1722、操作单元1732、和操作单元1742确定的阶段计算处理时间1800。列1802和列1812中的值是基于以上在类似命名的节中讨论的阶段计算负载和阶段计算处理时间实施例而被确定的,如果仅将一个PCU和/或PCU分配给每个节点/操作单元/阶段,则将这些值考虑在内。
假设我们有40个可用PCU(available_PCU)。假定我们的针对阶段延时的当前搜索范围是4us(stage_latency_low)到12us(stage_latency_high)。我们选取中间点,即(4+12)/2=8us(stage_latency_average)。为了使Conv1 1702实现8us,我们需要以200/8=25的方式对其进行并行化。因此,我们将25个PCU分配给Conv1 1702。类似地,我们将ceil(18/8)=3个PCU分配给Add1 1712,将ceil(110/8)=14个PCU分配给Conv2 1722,将ceil(9/8)=2个PCU分配给Add2 1732,以及将ceil(50/8)=7个PCU分配给MM 1742。所使用的总PCU为25+3+14+2+7=51(total_PUC),大于可用的40(available_PCU)。
因此,我们通过让stage_latency_low=8us来增加stage_latency,并且尝试的下一中间点将是(8+12)/2=10us。二分搜索算法1300最终收敛到11us作为最佳阶段延时。基于此,估计的吞吐量是1/11us=90909个样本/s。图延时为11us*5=55us。
可重配置区块
图19A是在图1的可重配置数据处理器中可使用的区块和阵列等级网络的简化图1900。图19B图示了阵列等级网络中的示例交换单元连接元件。在该示例中,可配置单元的阵列300包括多种类型的可配置单元。在该示例中,可配置单元的类型包括模式计算单元(PCU)、模式存储器单元(PMU)、交换单元(S)、以及地址生成及合并单元(各自包括两个地址生成器AG和共享CU)。对于这些类型的可配置单元的功能的示例,参见Prabhakar等人的“Plasticine:AReconfigurable Architecture For Parallel Patterns(Plasticine:针对并行模式的可重配置架构),”,ISCA’17,2017年6月24至28日,多伦多,ON,加拿大,其通过引用被并入,如同在本文完全阐述。
这些可配置单元中的每个可配置单元包含配置存储,配置存储包括表示设置或运行程序的序列的寄存器集或触发器集,并且可以包括嵌套循环的数目、每次循环迭代器的限制、将针对每个阶段执行的指令、操作数的来源、以及针对输入接口和输出接口的网络参数。
附加地,这些可配置单元中的每个可配置单元包含配置存储,配置存储包括存储用于跟踪嵌套循环或其它循环中的进展的状态寄存器集或触发器集。配置文件包含表示执行程序的组件中的每个组件的初始配置或开始状态的比特流。该比特流被称为比特文件。程序加载是基于比特文件的内容在可配置单元的阵列190中建立配置存储以允许所有组件执行程序(即,机器)的过程。程序加载也可能需要所有PMU存储器的加载。
阵列等级网络包括互连阵列中的可配置单元的链路。阵列等级网络中的链路包括一种或多种物理总线,在这种情况下包括三种物理总线:分块等级向量总线(例如,128比特数据)、字等级标量总线(例如,32比特数据)、和多比特等级控制总线。例如,交换单元1911和交换单元1912之间的互连1921包括具有128比特的向量总线宽度的向量总线互连、具有32比特的标量总线宽度的标量总线互连、以及控制总线互连。
这三种物理总线在被传输的数据的粒度方面不同。在一个实施例中,向量总线可以携带包括16字节(=128比特)数据作为其有效负载的分块。标量总线可以具有32比特有效负载,并且携带标量操作数或控制信息。控制总线可以携带诸如令牌和其它信号的控制握手。向量总线和标量总线可以是分组交换的,包括指示每个分组的目的地的报头和其它信息,诸如当分组被乱序地接收时可以用于重组文件的序列号。每个分组报头可以包含标识目的地交换单元的地理坐标(例如,阵列中的行和列)的目的地标识符、以及标识目的地交换上用于到达目的地单元的接口(例如,北、南、东、西等)的接口标识符。例如,控制网络可以基于设备中的定时电路进行电路交换。配置加载/卸载控制器可以为128比特的配置数据的每个分块生成报头。报头在报头总线上被传送到可配置单元的阵列190中的每个可配置单元。
在一个实例中,在向量总线上传送128比特的数据分块,向量总线将分块作为向量输入提供到可配置单元。向量总线可以包括128条有效负载线路和报头线路集。报头可以包括针对每个分块的序列ID,序列ID可以包括:
指示分块是暂存存储器数据还是配置存储数据的比特。
·形成分块号的比特。
·指示列标识符的比特。
·指示行标识符的比特。
·指示组件标识符的比特。
对于加载操作,配置加载控制器可以按从N-1到0的顺序将N个分块号发送到可配置单元。对于该示例,6个分块以分块5->分块4->分块3->分块2->分块1->分块0的最高有效比特第一顺序被发出。(注意,该最高有效比特第一顺序导致分块5在来自阵列配置加载控制器的分发顺序的第0轮次中被分发。)对于卸载操作,配置卸载控制器可以将顺序的卸载数据写出到存储器。对于加载操作和卸载操作二者,可配置单元中的配置数据存储库中的配置串行链中的移位是从LSB(最低有效位)到MSB(最高有效位),或者MSB首先出。
图19B示出了阵列等级网络中的示例交换单元连接元件。如图19B的示例所示,交换单元可以具有8个接口。交换单元的北、南、东、和西接口用于交换单元之间的连接。交换单元的东北、东南、西北、和西南接口各自用于连接到PCU实例或PMU实例。每个区块象限中的2个交换单元集具有到地址生成及合并单元(AGCU)的连接,AGCU包括多个地址生成(AG)单元和连接到多个地址生成单元的合并单元(CU)。合并单元(CU)在AG之间仲裁并且处理存储器请求。交换单元的8个接口中的每个接口可以包括向量接口、标量接口、和控制接口,以与向量网络、标量网络、和控制网络进行通信。
在执行配置后的机器期间,可以使用阵列等级网络上的一个或多个交换单元的向量总线和(多个)向量接口,经由一个或多个单元交换和单元交换之间的一个或多个链路将数据发送到可配置单元。
在本文描述的实施例中,在区块的配置之前,可以使用阵列等级网络上的一个或多个交换单元的向量总线和(多个)向量接口,经由一个或多个单元交换和单元交换之间的一个或多个链路,将配置文件或比特文件从使用相同的向量总线的配置加载控制器发送到可配置单元。例如,特定于可配置单元PMU 1941的单元文件中的配置数据分块可以经由配置加载/卸载控制器1901和交换单元1911的西(W)向量接口之间的链路1922、交换单元1911、以及交换单元1911的东南(SE)向量接口和PMU 1941之间的链路1931从配置加载/卸载控制器1901发送到PMU 1941。
在该示例中,AGCU中的一个AGCU被配置为主AGCU,主AGCU包括配置加载/卸载控制器(例如1901)。主AGCU实现寄存器,通过该寄存器,主机(120,图1)可以经由总线系统向主AGCU发送命令。主AGCU控制区块中的可配置单元的阵列上的操作,并且实现程序控制状态机,以基于其通过对寄存器的写入而从主机接收的命令来跟踪区块的状态。对于每个状态转换,主AGCU通过菊链式命令总线向区块上的所有组件发出命令(图19A)。该命令包括用以复位区块中的可配置单元的阵列中的可配置单元的程序复位命令和用以将配置文件加载到可配置单元的程序加载命令。
主AGCU中的配置加载控制器负责从存储器读取配置文件并且将配置数据发送到区块的每个可配置单元。主AGCU可以优选地以顶级网络的最大吞吐量从存储器读取配置文件。从主AGCU通过阵列等级网络上的向量接口将从存储器读取的数据根据本文描述的分发顺序传送到对应的可配置单元。
在一个实施例中,以可以减少可配置单元内的布线要求的方式,在组件中的配置加载过程中要被加载的、或配置卸载过程中要被卸载的保存单元文件的配置和状态寄存器被连接在串行链中,并且可以通过在串行链中移位比特的过程而被加载。在一些实施例中,可以有多于一个的并行排列或串行排列的串行链。当可配置单元在一个总线周期中从主AGCU接收例如128比特的配置数据时,可配置单元以每周期1比特的速率通过其串行链来移位该数据,其中移位器周期可以以与总线周期相同的速率运行。可配置单元将消耗128个移位器周期来加载128个配置比特以及通过向量接口接收的128比特数据。128比特的配置数据被称为分块。可配置单元可以需要多个数据分块来加载其所有配置比特。
可配置单元通过多个存储器接口(150,图1)与存储器进行接口。可以使用多个AGCU来访问存储器接口中的每个存储器接口。每个AGCU包含可重配置数据路径,以产生针对片外存储器的请求。每个AGCU包含FIFO(用于组织数据的先进先出缓冲器)以缓冲来自片外存储器的输出命令、数据、和输入响应。
AGCU中的地址生成器AG可以生成密集或稀疏的存储器命令。密集请求可以用于批量传输邻近的片外存储器区域,并且可以用于从可配置单元的阵列中的可配置单元读取数据分块/向可配置单元写入数据分块。通过AGCU中的合并单元(CU)可以将密集请求转换为多个片外存储器突发请求。稀疏请求可以将地址流排队到合并单元中。合并单元可以使用合并高速缓存来维护关于发出的片外存储器请求的元数据,以组合属于相同片外存储器请求的稀疏地址,从而最小化发出的片外存储器请求的数目。
可重配置单元
图20是图示诸如模式计算单元(PCU)的示例可配置单元2000的框图。在本应用的上下文中,PCU对应于物理计算单元。可配置单元的阵列中的可配置单元包括配置数据存储库2020(例如,串行链),以存储包括特定于对应可配置单元的配置数据的多个分块(或其它大小的子文件)的单元文件。可配置单元的阵列中的可配置单元各自包括经由线2022连接到配置数据存储库2020的单元配置加载逻辑2040,以执行单元配置加载过程。单元配置加载过程包括:经由总线系统(例如,向量输入)接收特定于可配置单元的单元文件的分块、以及将所接收的分块加载到可配置单元的配置数据存储库2020中。
在该实例中的多个可配置单元中的可配置单元中的配置数据存储包括锁存器(“latch”)的串行链,其中锁存器存储控制可配置单元中的资源的配置的比特。配置数据存储库中的串行链可以包括串行连接的、针对配置数据的移位寄存器链和针对状态信息和计数器值的第二移位寄存器链。
可配置单元可以使用三个对应的输入和输出(IO)集与标量、向量、和控制总线进行接口:标量输入/输出、向量输入/输出、和控制输入/输出。标量IO可以用于传递单个数据字(例如32比特)。在诸如在单元配置加载过程中接收配置数据以及跨多个PCU之间的长流水线上配置之后的操作期间传送和接收数据的情况下,向量IO可以用于传递数据分块(例如128比特)。控制IO可以用于传递控制信号,诸如可配置单元的执行的开始或结束。控制输入由控制块2070接收,控制输出由控制块2070提供。
使用向量FIFO块2060中的向量FIFO来缓冲每个向量输入,向量FIFO块2060可以包括一个或多个向量FIFO。使用标量FIFO 2050来缓冲每个标量输入。使用输入FIFO对数据生产者和数据消费者之间的定时进行解耦,并且通过使其对输入延迟不匹配具有稳健性而简化可配置单元间的控制逻辑。
输入配置数据2010可以作为向量输入而被提供给向量FIFO,然后被传送到配置数据存储库2020。可以使用向量输出从配置数据存储库2020中卸载输出配置数据2030。
CGRA使用菊链式完成总线,以指示加载/卸载命令何时完成。主AGCU通过菊链式命令总线向可配置单元的阵列中的可配置单元传送程序加载和卸载命令。如图20的示例所示,菊链式完成总线2091和菊链式命令总线2092被连接到菊链逻辑2093,菊链逻辑2093与单元配置加载逻辑2040通信。如下所述,菊链逻辑2093可以包括加载完成状态逻辑。下面进一步描述菊链式完成总线。针对命令总线和完成总线的其它拓扑显然是可能的,但本文不作描述。
在框2080中,可配置单元包括多个可重配置的数据路径。可配置单元中的数据路径可以被组织为多阶段(阶段1…阶段N)、可重配置的SIMD(单指令,多数据)流水线。推入可配置单元中的配置串行链的数据分块包括针对可配置单元中的每个数据路径的每个阶段的配置数据。配置数据存储库2020中的配置串行链经由线路2023连接到框2080中的多个数据路径。
在本应用的上下文中,模式存储器单元(PMU)对应于物理存储器单元。PMU可以包含与用于地址计算的可重配置数据路径耦合的暂存存储器、以及PCU中使用的总线接口。PMU可以用于在整个可重配置单元阵列中分发片上存储器。在一个实施例中,PMU中的存储器内的地址计算在PMU数据路径上被执行,而核心计算在PCU内被执行。每个PMU包含编程器管理的暂存存储器和程序所需的其它计算操作,该暂存存储器与主要用于地址计算的可重配置数据路径耦合。PMU用于在整个阵列190中分发片上存储器。阵列架构在存储器地址计算中涉及的操作与核心计算底层应用之间作出区分。在PMU数据路径上执行地址计算,而在PCU内执行核心计算。多个观察激发了该设计选择:(i)地址计算涉及简单的标量数学,这需要比PCU中的ALU更简单的ALU;(ii)针对大多数片上访问模式,使用多个通道用于地址计算通常是不必要的;以及(iii)在PCU内执行地址计算需要将地址从PCU路由到PMU,这占用了PCU阶段和输出链路,并且可以导致PCU利用率不足。
PCU和PMU(统称为“单元”)与三种互连进行通信:字等级标量互连、多字等级向量互连、和比特等级控制互连。可配置单元的阵列190通过多个DDR通道与DRAM进行接口。每个通道具有相关联的地址管理单元,地址管理单元在多个地址流之间进行仲裁,并且包括支持多个未完成的存储器请求和地址合并以最小化DRAM访问的缓冲器。本地地址计算在PMU中完成,DRAM地址计算发生在DRAM地址管理单元中,并且剩余数据计算发生在PCU中。高速暂存存储器由与PCU通道数目匹配的多个SRAM存储体(“banking”)构成。暂存器周围的地址解码逻辑可以被配置为在若干存储体模式中操作以支持各种访问模式。跨步存储体模式支持通常在密集数据结构上发现的线性访问模式。FIFO模式支持流式访问。线缓冲器模式捕获类似于滑动窗口的访问模式。复制模式(其中跨所有存储器存储体来复制内容)提供多个读取地址通道,以支持并行化的片上采集操作。
PCU被设计为在应用中执行最内部的并行模式。PCU数据路径被组织为多阶段、可重配置的SIMD流水线。该设计使得每个PCU能够实现高计算密度,并且利用跨通道的循环等级并行性和跨阶段的流水线并行性。每个SIMD通道的每个阶段由功能单元(FU)和相关的流水线寄存器(PR)组成。FU执行32比特字等级算术和二进制操作,包括支持浮点操作和整数操作。由于单个流水线阶段中的FU在SIMD中操作,因此每个阶段只需要单个配置寄存器。将来自每个FU的结果写入到其相关联的寄存器。每个通道中的PR跨流水线阶段被链接在一起,以允许活动值在相同通道内的阶段之间传播。使用两种类型的PCU内网络捕获FU之间的交叉通道通信:缩减树网络,其允许将来自多个通道的值缩减为单个标量,以及移位网络,其允许使用PR作为跨阶段的滑动窗口以利用模板应用中的复用。两个网络都使用PR内的专用寄存器以最小化硬件开销。
具有使用三种输入和输出(IO)的全局互连的PCU接口;标量、向量、和控制。标量IO用于传递单个数据字,诸如折叠的结果。每个向量IO允许在PCU中每通道传递一个字,并且在诸如对PMU中的暂存存储器进行读取和写入以及跨多个PCU之间的长流水线上传送中间数据的情况下使用每个向量IO。使用小FIFO缓冲每个向量输入和标量输入。使用输入FIFO对数据生产者和消费者进行解耦,并且通过使其对输入延迟不匹配具有稳健性来简化PCU内控制逻辑。控制IO用于传递控制信号,诸如PCU执行的开始或结束,或者用于指示反压。
计数器的可重配置链生成模式迭代索引和控制信号以协调执行。当控制块启用计数器中的一个计数器时,PCU执行开始。基于应用的控制与数据依赖性,控制块可以被配置为组合来自本地FIFO和全局控制输入的多个控制信号以触发PCU执行。使用针对状态机的可重配置组合逻辑和可编程的升降计数器来实现控制块。
正如存储体对于馈送多个SIMD单元以维持计算吞吐量是重要的,N缓冲或普遍的双缓冲对于支持粗粒度流水线也是重要的。作为示例,可以使用N缓冲来实现ResNet中的跳过连接和保持每个层的输出的缓冲器。PMU暂存存储器可以被配置为作为具有所述的任何存储体模式的N缓冲器来操作。通过将每个SRAM存储体中的地址空间划分为N个不相交的区域来实现N缓冲器。使用写入和读取状态信息,将适当的偏移添加到每个存储体的本地地址以访问正确的数据。
可编程计数器链和控制块触发类似于PCU的PMU执行。每个PMU通常包含来自生产者模式的写入地址计算逻辑和来自消费者模式的读取地址计算逻辑。基于本地FIFO的状态和外部控制输入,控制块可以被配置为通过启用适当的计数器来触发写入地址计算、读取地址计算或两者。
特定实现
在一个实现中,我们公开了在具有目标架构的可重配置数据处理器上高效地执行操作单元图的计算机实现的方法。该方法包括减少执行操作单元图所需的可重配置数据处理器的物理计算单元和/或物理存储器单元的数目。
该方法包括从用户接收特定于可重配置数据处理器的目标架构的架构提示。当在可重配置数据处理器的物理计算单元和/或物理存储器单元上执行第一操作单元的模式时,架构提示要求融合第一操作单元,将模式中的第一操作单元指定为第一节点,将模式中的第一操作单元之中的第一数据流指定为第一边缘,以及将引导模式中的第一操作单元之间的融合。
该方法包括扫描操作单元图,以检测由架构提示指定的第一操作单元的模式的实例。这还包括将操作单元图中的第二节点和第二边与架构提示中的第一节点和第一边进行匹配,并且检测模式匹配。
该方法包括将操作单元图中的第二节点的操作单元和第二边缘融合为合并的操作单元块,从而产生经融合的操作单元图。
该方法包括将可重配置数据处理器的物理计算单元和/或物理存储器单元分配给经融合的操作单元图。
所述方法包括基于分配在可重配置数据处理器上执行经融合的操作单元图。
在特定实现部分中针对其它实现所讨论的特征中的每个特征同样适用于该实现。如上所述,所有其它特征在此不再重复,并且应当被认为通过引用而重复。读者将理解在这些实现中标识的特征如何可以容易地与在其他实现中标识的基本特征集进行组合。
架构提示指定模式中的第一输出操作单元作为第一输出节点。
该方法包括通过使由架构提示指定的第一输出节点与操作单元图中的第二输出节点进行匹配来检测模式匹配,并且从操作单元图中的第二输出节点开始,遍历操作单元图以确定操作单元图中的第二节点和第二边缘与架构提示中的第一节点和第一边缘匹配。在一个实现中,该遍历是向上遍历。
该方法包括:标识操作单元图的操作单元,该操作单元被融合到合并的操作单元块中,但具有到操作单元图的另一操作单元的数据流,另一操作单元在合并的操作单元块的外部,复制所标识的操作单元及其数据流,并且复制合并的操作单元块中的任何其它操作单元,合并的操作单元向所标识的操作单元和其数据流提供输入,以及基于具有合并的操作单元块与经复制的操作单元和数据流的操作单元图,执行分配和执行。
在一个实现中,架构提示被表示为转换为模式图的节点和边缘的列表。
本节中描述的方法的其他实现可以包括存储可由处理器执行以执行任何上述方法中的指令的非暂态计算机可读存储器介质。本节中描述的方法的又一实现可以包括系统,该系统包括存储器和可操作来执行存储在存储器中的指令以执行上述任何方法的一个或多个处理器。
我们公开了将可重配置数据处理器的可用物理计算单元和/或物理存储器单元(available_PCU)分配给操作单元图的操作单元以供其执行的计算机实现的方法。
该方法包括初始化执行操作单元图的操作单元所需的通用阶段处理时间(“stage_latency”)的搜索下限(“stage_latency_low”)和搜索上限(“stage_latency_high”)。
该方法包括选择通用阶段处理时间(“stage_latency”)的搜索下限(“stage_latency_low”)和搜索上限(“stage_latency_high”)之间的中间阶段计算处理时间(例如,“stage_latency_average”)。
该方法包括确定处理可重配置数据处理器上的操作单元图的流水线计算负载所需的物理计算单元和/或物理存储器单元的流水线数目(“total_PCU”)。
针对操作单元图的操作单元中的每个操作单元(“for node in fused_graph”),该方法包括仅使用一个物理计算单元和/或仅使用一个物理存储器单元来确定处理操作单元中的相应一个操作单元的阶段计算负载(“node.get_flop()”)所需的特定阶段计算处理时间(“node_latency_with_one_PCU”),以及通过将特定阶段计算处理时间(“node_latency_with_one_PCU”)除以中间阶段计算处理时间(例如,“stage_latency_average”)来确定处理操作单元中的相应一个操作单元的阶段计算负载(“node.get_flop()”)所需的物理计算单元和/或物理存储器单元的阶段数目(“node_PCU”)。
该方法包括对操作单元中的每个操作单元的物理计算单元和/或物理存储器单元的阶段数目(“node_PCU”)求和,并且产生物理计算单元和/或物理存储器单元的流水线数目(“total_PCU”)。
该方法包括迭代地初始化通用阶段处理时间的新的搜索下限(“stage_latency_low”)和搜索上限(“stage_latency_high”)(“stage_latency”),并且考虑在先前迭代中针对之前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目(“total_PCU”)是低于还是高于可用的物理计算单元和/或物理存储器单元,来选择通用阶段处理时间的新的搜索下限与搜索上限之间的新的中间阶段计算处理时间以用于下一次迭代中的评估。
该方法包括当在当前迭代中针对当前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目满足收敛标准时,终止迭代初始化和选择。
该方法包括基于当前中间阶段计算处理时间而将可用物理计算单元和/或物理存储器单元分配给操作单元图的操作单元。
该方法包括基于分配在可重配置数据处理器上执行操作单元图的操作单元。
在特定实现部分中针对其它实现所讨论的特征中的每个特征同样适用于该实现。如上所述,所有其它特征在此不再重复,并且应当被认为通过引用而重复。读者将理解在这些实现中标识的特征如何可以容易地与在其他实现中标识的基本特征集进行组合。
在一个实现中,收敛标准可以在搜索上限与搜索下限之间的差低于阈值时发生。
在一个实现中,通用阶段处理时间的搜索下限可以基于可重配置数据处理器的最大利用率,并且通过将操作单元图的流水线计算负载除以可重配置数据处理器的总处理容量来确定。
在一个实现中,操作单元图的流水线计算负载可以由执行操作单元图所需的浮点运算(FLOP)的总数目来确定。
在一个实现中,可重配置数据处理器的总处理容量可以由每秒可重配置数据处理器可执行的FLOP的最大数目(FLOP/s)来确定。
在一个实现中,通用阶段处理时间的搜索上限可以基于将通用阶段处理时间的搜索下限与最小利用率相乘。在一些实现中,最小利用率是100。
在一个实现中,该方法包括只要搜索上限与搜索下限之间的差高于阈值就继续迭代初始化和选择。
在一个实现中,中间阶段计算处理时间可以是通用阶段处理时间(“stage_latency”)的较低(“stage_latency_low”)和较高(“stage_latency_high”)搜索界限的平均值(“stage_latency_average”)。
在一个实现中,当在先前迭代中针对之前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目低于可用物理计算单元和/或物理存储器单元时,该方法包括将下一次迭代的新的搜索上限设置为之前中间阶段计算处理时间。
在一个实现中,当在先前迭代中针对之前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目高于可用物理计算单元和/或物理存储器单元时,该方法包括将下一次迭代的新的搜索下限设置为之前中间阶段计算处理时间。
在一个实现中,操作单元中的相应一个操作单元的阶段计算负载是指执行操作单元中的相应一个操作单元所需的浮点运算(FLOP)的总数目,由其操作类型、输入维度、和输出维度来确定。
在一个实现中,该方法包括通过将阶段计算处理时间除以中间阶段计算处理时间的结果向上取整到整数来确定处理阶段计算负载所需的物理计算单元和/或物理存储器单元的阶段数目。
在一个实现中,该方法包括基于当前中间阶段计算处理时间来确定吞吐量值。
在一个实现中,该方法包括基于将操作单元图的操作单元的数目乘以当前中间阶段计算处理时间来确定执行操作单元图所需的流水线计算处理时间。
在一个实现中,该方法包括选择其阶段计算处理时间相对大于操作单元图的大多数其它操作单元的操作单元图的那些操作单元,以及将附加的可用物理计算单元和/或物理存储器单元分配给所选择的操作单元。
在一个实现中,分配导致操作单元图的操作单元中的每个操作单元具有基本上匹配的阶段计算处理时间。
在一个实现中,操作单元图可以是具有至少一个融合操作单元的经融合的操作单元图。
在一个实现中,操作单元图可以是深度神经网络。
在一个实现中,该方法包括生成用于显示的数据,该数据对满足收敛标准的当前迭代中的当前中间阶段计算处理时间进行可视化,针对当前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目,使用仅一个物理计算单元和/或仅一个物理存储器单元来处理操作单元中的相应一个操作单元的阶段计算负载所需的阶段计算处理时间,和/或处理操作单元中的相应一个操作单元的阶段计算负载所需的物理计算单元和/或物理存储器单元的阶段数目。
在一个实现中,该方法包括生成用于显示的数据,该数据对基于当前中间阶段计算处理时间确定的吞吐量值进行可视化。
在一个实现中,该方法包括生成用于显示的数据,该数据对执行操作单元图所需的流水线计算处理时间进行可视化。
在一个实现中,该方法包括生成用于显示的数据,该数据对分别分配给操作单元图的操作单元中的每个操作单元的可用物理计算单元和/或物理存储器单元进行可视化。
在一个实现中,迭代初始化和选择基于二分搜索。
本节中描述的方法的其他实现可以包括存储可由处理器执行以执行任何上述方法中的指令的非暂态计算机可读存储器介质。本节中描述的方法的又一实现可以包括系统,该系统包括存储器和可操作来执行存储在存储器中的指令以执行上述任何方法的一个或多个处理器。
我们公开了将可重配置数据处理器的可用物理计算单元和/或物理存储器单元(available_PCU)分配给操作单元图的操作单元以供其执行的计算机实现的方法。
该方法包括初始化执行操作单元图的操作单元所需的通用阶段处理时间的较低(“stage_latency_low”)和较高(“stage_latency_high”)搜索界限。
该方法包括选择通用阶段处理时间的搜索下限(“stage_latency_low”)与搜索上限(“stage_latency_high”)之间的中间阶段计算处理时间(例如,“stage_latency_average”)以供评估。
该方法包括确定处理可重配置数据处理器上的操作单元图的流水线计算负载所需的物理计算单元和/或物理存储器单元的流水线数目(“total_PCU”,“get_graph_PCU”)。
该方法包括:迭代地初始化通用阶段处理时间的新的搜索下限和搜索上限,以及考虑在先前迭代中针对先前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目是低于还是高于可用物理计算单元和/或物理存储器单元(available_PCU),在通用阶段处理时间的新的搜索下限和搜索上限之间选择新的中间阶段计算处理时间以用于下一次迭代中的评估。
该方法包括当在当前迭代中针对当前中间阶段计算处理时间产生的物理计算单元和/或物理存储器单元的流水线数目满足收敛标准时,终止迭代初始化和选择。
在特定实现部分中针对其它实现所讨论的特征中的每个特征同样适用于该实现。如上所述,所有其它特征在此不再重复,并且应当被认为通过引用而重复。读者将理解在这些实现中标识的特征如何可以容易地与在其他实现中标识的基本特征集进行组合。
该方法包括:针对操作单元图中的每个操作单元(“for node in fused_graph”),仅使用一个物理计算单元和/或仅使用一个物理存储器单元来确定处理操作单元中的相应一个操作单元的阶段计算负载(“node.get_flop()”)所需的特定阶段计算处理时间(“node_latency_with_one_PCU”),以及通过将特定阶段计算处理时间(“node_latency_with_one_PCU”)除以中间阶段计算处理时间(“stage_latency”,例如“stage_latency_average”)来确定处理操作单元中的相应一个操作单元的阶段计算负载(“node.get_flop()”)所需的物理计算单元和/或物理存储器单元的阶段数目(“node_PCU”)。
该方法包括对针对操作单元中的每个操作单元的物理计算单元和/或物理存储器单元的阶段数目(“node_PCU”)求和,并且产生物理计算单元和/或物理存储器单元的流水线数目。
该方法包括基于当前中间阶段计算处理时间将可用物理计算单元和/或物理存储器单元分配给操作单元图的操作单元。
该方法包括基于分配在可重配置数据处理器上执行操作单元图的操作单元。
本节中描述的方法的其他实现可以包括存储可由处理器执行以执行任何上述方法中的指令的非暂态计算机可读存储器介质。本节中描述的方法的又一实现可以包括系统,该系统包括存储器和可操作来执行存储在存储器中的指令以执行上述任何方法的一个或多个处理器。
给出前面的描述以实现所公开的技术的制造和使用。对所公开的实现的各种修改将是明显的,并且本文所限定的一般原理可以在不脱离所公开的技术的精神和范围的情况下应用于其它实现和应用。因此,所公开的技术不旨在限于所示出的实现,而是与符合本文所公开的原理和特征的最宽范围一致。所公开的技术的范围由所附权利要求书限定。
Claims (18)
1.一种利用目标架构在可重配置数据处理器上高效地执行操作单元图的计算机实现的方法,所述方法包括:
通过以下项来减少执行所述操作单元图所需的所述可重配置数据处理器的物理计算单元的数目和/或物理存储器单元的数目:
从用户接收特定于所述可重配置数据处理器的所述目标架构的架构指示,
其中所述架构提示
当在所述可重配置数据处理器的所述物理计算单元和/或物理存储器单元上执行第一操作单元上的模式时,要求融合所述第一操作单元,
将模式中的所述第一操作单元指定为第一节点,
将所述模式中的所述第一操作单元之中的第一数据流指定为第一边缘,以及
引导所述模式中的所述第一操作单元之中的融合;
扫描所述操作单元图,以检测由所述架构提示指定的所述第一操作单元的所述模式的实例,包括
将所述操作单元图中的第二节点和第二边缘与所述架构提示中的所述第一节点和所述第一边缘进行匹配,并且检测模式匹配;
将所述操作单元图中的所述第二节点的操作单元和所述第二边缘融合到合并的操作单元块中,从而产生经融合的操作单元图;
将所述可重配置数据处理器的所述物理计算单元和/或物理存储器单元分配给所述经融合的操作单元图;以及
基于所述分配在所述可重配置数据处理器上执行所述经融合的操作单元图。
2.根据权利要求1中所述的计算机实现的方法,其中所述架构提示将所述模式中的第一输出操作单元指定为第一输出节点。
3.根据权利要求2中所述的计算机实现的方法,还包括:
通过以下项来检测所述模式匹配:
将由所述架构提示指定的所述第一输出节点与所述操作单元图中的第二输出节点进行匹配,以及
从所述操作单元图中的所述第二输出节点开始,
遍历所述操作单元图,以确定所述操作单元图中的所述第二节点和所述第二边缘与所述架构提示中的所述第一节点和所述第一边缘匹配。
4.根据权利要求3中所述的计算机实现的方法,其中所述遍历是向上遍历。
5.根据权利要求1中所述的计算机实现的方法,还包括:
标识所述操作单元图的操作单元,所述操作单元被融合到所述合并的操作单元块中,但是具有到所述操作单元图的另一操作单元的数据流,所述另一操作单元在所述合并的操作单元块的外部;
复制所标识的所述操作单元和所述操作单元的数据流并且复制所述合并的操作单元块中的任何其他操作单元,所述合并的操作单元块向所标识的所述操作单元和所述操作单元的数据流提供输入;以及
基于具有所述合并的操作单元块与经复制的所述操作单元和数据流的所述操作单元图,执行所述分配和所述执行。
6.根据权利要求1所述的计算实现的方法,其中所述架构提示被表示为转换为模式图的节点和边缘的列表。
7.一种非暂态计算机可读存储器介质,所述非暂态计算机可读存储器介质印有计算机程序指令,以在具有目标架构的可重配置数据处理器上高效地执行操作单元图,所述指令在处理器上被执行时实现方法,所述方法包括:
通过以下项来减少执行所述操作单元图所需的所述可重配置数据处理器的物理计算单元的数目和/或物理存储器单元的数目:
从用户接收特定于所述可重配置数据处理器的所述目标架构的架构指示,
其中所述架构提示
当在所述可重配置数据处理器的所述物理计算单元和/或物理存储器单元上执行第一操作单元上的模式时,要求融合所述第一操作单元,
将模式中的所述第一操作单元指定为第一节点,
将所述模式中的所述第一操作单元之中的第一数据流指定为第一边缘,以及
引导所述模式中的所述第一操作单元之中的融合;
扫描所述操作单元图,以检测由所述架构提示指定的所述第一操作单元的所述模式的实例,包括
将所述操作单元图中的第二节点和第二边缘与所述架构提示中的所述第一节点和所述第一边缘进行匹配,并且检测模式匹配;
将所述操作单元图中的所述第二节点的操作单元和所述第二边缘融合到合并的操作单元块中,从而产生经融合的操作单元图;
将所述可重配置数据处理器的所述物理计算单元和/或物理存储器单元分配给所述经融合的操作单元图;以及
基于所述分配在所述可重配置数据处理器上执行所述经融合的操作单元图。
8.根据权利要求7所述的非暂态计算机可读存储器介质,其中所述架构提示将所述模式中的第一输出操作单元指定为第一输出节点。
9.根据权利要求8所述的非暂态计算机可读存储器介质,实现所述方法还包括:
通过以下项来检测所述模式匹配:
将由所述架构提示指定的所述第一输出节点与所述操作单元图中的第二输出节点进行匹配,以及
从所述操作单元图中的所述第二输出节点开始,
遍历所述操作单元图,以确定所述操作单元图中的所述第二节点和所述第二边缘与所述架构提示中的所述第一节点和所述第一边缘匹配。
10.根据权利要求9中所述的非暂态计算机可读存储器介质,其中所述遍历是向上遍历。
11.根据权利要求7中所述的非暂态计算机可读存储器介质,实现所述方法还包括:
标识所述操作单元图的操作单元,所述操作单元被融合到所述合并的操作单元块中,但是具有到所述操作单元图的另一操作单元的数据流,所述另一操作单元在所述合并的操作单元块的外部;
复制所标识的所述操作单元和所述操作单元的数据流并且复制所述合并的操作单元块中的任何其他操作单元,所述合并的操作单元块向所标识的所述操作单元和所述操作单元的数据流提供输入;以及
基于具有所述合并的操作单元块与经复制的所述操作单元和数据流的所述操作单元图,执行所述分配和所述执行。
12.根据权利要求7中所述的非暂态计算机可读存储器介质,其中所述架构提示被表示为转换为模式图的节点和边缘的列表。
13.一种包括被耦合到存储器的一个或多个处理器的系统,所述存储器被加载有计算机指令以在具有目标架构的可重配置数据处理器上高效地执行操作单元图,所述指令在所述处理器上被执行时实现动作,所述动作包括:
通过以下项来减少执行所述操作单元图所需的所述可重配置数据处理器的物理计算单元的数目和/或物理存储器单元的数目:
从用户接收特定于所述可重配置数据处理器的所述目标架构的架构指示,
其中所述架构提示
当在所述可重配置数据处理器的所述物理计算单元和/或物理存储器单元上执行第一操作单元上的模式时,要求融合所述第一操作单元,
将模式中的所述第一操作单元指定为第一节点,
将所述模式中的所述第一操作单元之中的第一数据流指定为第一边缘,以及
引导所述模式中的所述第一操作单元之中的融合;
扫描所述操作单元图,以检测由所述架构提示指定的所述第一操作单元的所述模式的实例包括
将所述操作单元图中的第二节点和第二边缘与所述架构提示中的所述第一节点和所述第一边缘进行匹配,并且检测模式匹配;
将所述操作单元图中的所述第二节点的操作单元和所述第二边缘融合到合并的操作单元块中,从而产生经融合的操作单元图;
将所述可重配置数据处理器的所述物理计算单元和/或物理存储器单元分配给所述经融合的操作单元图;以及
基于所述分配在所述可重配置数据处理器上执行所述经融合的操作单元图。
14.根据权利要求13所述的系统,其中所述架构提示将所述模式中的第一输出操作单元指定为第一输出节点。
15.根据权利要求14所述的系统,实现动作还包括:
通过以下项来检测所述模式匹配:
将由所述架构提示指定的所述第一输出节点与所述操作单元图中的第二输出节点进行匹配,以及
从所述操作单元图中的所述第二输出节点开始,
遍历所述操作单元图,以确定所述操作单元图中的所述第二节点和所述第二边缘与所述架构提示中的所述第一节点和所述第一边缘匹配。
16.根据权利要求15所述的系统,其中所述遍历是向上遍历。
17.根据权利要求13所述的系统,实现动作还包括:
标识所述操作单元图的操作单元,所述操作单元被融合到所述合并的操作单元块中,但是具有到所述操作单元图的另一操作单元的数据流,所述另一操作单元在所述合并的操作单元块的外部;
复制所标识的所述操作单元和所述操作单元的数据流并且复制所述合并的操作单元块中的任何其他操作单元,所述合并的操作单元块向所标识的所述操作单元和所述操作单元的数据流提供输入;以及
基于具有所述合并的操作单元块与经复制的所述操作单元和数据流的所述操作单元图,执行所述分配和所述执行。
18.根据权利要求13所述的系统,其中所述架构提示被表示为转换为模式图的节点和边缘的列表。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/572,516 | 2019-09-16 | ||
US16/572,516 US20210081691A1 (en) | 2019-09-16 | 2019-09-16 | Efficient Execution of Operation Unit Graphs on Reconfigurable Architectures Based on User Specification |
PCT/US2020/050220 WO2021055234A1 (en) | 2019-09-16 | 2020-09-10 | Efficient execution of operation unit graphs on reconfigurable architectures based on user specification |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115151898A true CN115151898A (zh) | 2022-10-04 |
Family
ID=72659881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080079317.2A Pending CN115151898A (zh) | 2019-09-16 | 2020-09-10 | 基于用户规范的可重配置架构上的操作单元图的高效执行 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20210081691A1 (zh) |
EP (1) | EP4031985A1 (zh) |
JP (1) | JP2022548114A (zh) |
CN (1) | CN115151898A (zh) |
TW (1) | TWI781441B (zh) |
WO (1) | WO2021055234A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10824784B2 (en) * | 2018-09-26 | 2020-11-03 | Taiwan Semiconductor Manufacturing Company Ltd. | System and method of timing characterization for semiconductor circuit |
US11568021B2 (en) | 2020-02-21 | 2023-01-31 | Alibaba Group Holding Limited | Vector-vector multiplication techniques for processing systems |
US11809908B2 (en) | 2020-07-07 | 2023-11-07 | SambaNova Systems, Inc. | Runtime virtualization of reconfigurable data flow resources |
US11782729B2 (en) | 2020-08-18 | 2023-10-10 | SambaNova Systems, Inc. | Runtime patching of configuration files |
US20230025245A1 (en) * | 2021-07-13 | 2023-01-26 | Nvidia Corporation | Neural network evaluation |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20180005346A1 (en) * | 2016-07-01 | 2018-01-04 | Google Inc. | Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
EP3343351B1 (en) * | 2016-12-28 | 2023-04-26 | Waseda University | Parallel program generating method and parallelization compiling apparatus |
US9798527B1 (en) * | 2017-01-06 | 2017-10-24 | Google Inc. | Loop and library fusion |
US10489878B2 (en) * | 2017-05-15 | 2019-11-26 | Google Llc | Configurable and programmable image processor unit |
JP7262952B2 (ja) * | 2018-09-19 | 2023-04-24 | 株式会社東芝 | 紙葉類処理装置および紙葉類処理方法 |
-
2019
- 2019-09-16 US US16/572,516 patent/US20210081691A1/en not_active Abandoned
-
2020
- 2020-09-10 JP JP2022516603A patent/JP2022548114A/ja active Pending
- 2020-09-10 CN CN202080079317.2A patent/CN115151898A/zh active Pending
- 2020-09-10 EP EP20781150.6A patent/EP4031985A1/en active Pending
- 2020-09-10 WO PCT/US2020/050220 patent/WO2021055234A1/en active Search and Examination
- 2020-09-14 TW TW109131513A patent/TWI781441B/zh active
Also Published As
Publication number | Publication date |
---|---|
JP2022548114A (ja) | 2022-11-16 |
TWI781441B (zh) | 2022-10-21 |
EP4031985A1 (en) | 2022-07-27 |
TW202127269A (zh) | 2021-07-16 |
US20210081691A1 (en) | 2021-03-18 |
WO2021055234A1 (en) | 2021-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11816560B2 (en) | Performance estimation-based resource allocation for reconfigurable architectures | |
CN115151898A (zh) | 基于用户规范的可重配置架构上的操作单元图的高效执行 | |
US11714780B2 (en) | Compiler flow logic for reconfigurable architectures | |
TW202115575A (zh) | 靜止可重組態的資料處理器 | |
US12105630B2 (en) | Compile time logic for inserting a buffer between a producer operation unit and a consumer operation unit in a dataflow graph | |
US9354850B2 (en) | Method and apparatus for instruction scheduling using software pipelining | |
TW202230129A (zh) | 用於檢測串流相容和廣播相容的資料存取型樣之編譯時邏輯 | |
US20230244748A1 (en) | Matrix Multiplication on Coarse-grained Computing Grids | |
US12093551B2 (en) | Memory unit partitioning solutions for reconfigurable dataflow computing systems | |
US20230315411A1 (en) | Operation Fusion in Nested Meta-pipeline Loops | |
US20230273879A1 (en) | Critical Stage Optimization for Reconfigurable Architectures | |
US20230237012A1 (en) | System for Executing an Application on Heterogeneous Reconfigurable Processors | |
US20240037063A1 (en) | Routing Method Based On A Sorted Operation Unit Graph For An Iterative Placement And Routing On A Reconfigurable Processor | |
US11954053B2 (en) | Integrating buffer views into buffer access operations in a coarse-grained reconfigurable computing environment | |
US20230325346A1 (en) | Buffer Splitting | |
US20240069770A1 (en) | Multiple contexts for a memory unit in a reconfigurable data processor | |
US20230385077A1 (en) | Forward-style Gradient GeMMs | |
US20230305823A1 (en) | Merging Skip-Buffers |
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 |