CN114450661A - 用于可重配置架构的编译器流程逻辑 - Google Patents
用于可重配置架构的编译器流程逻辑 Download PDFInfo
- Publication number
- CN114450661A CN114450661A CN202080067026.1A CN202080067026A CN114450661A CN 114450661 A CN114450661 A CN 114450661A CN 202080067026 A CN202080067026 A CN 202080067026A CN 114450661 A CN114450661 A CN 114450661A
- Authority
- CN
- China
- Prior art keywords
- memory
- data
- compute
- units
- array
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- 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
- 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
- G06F15/7871—Reconfiguration support, e.g. configuration loading, configuration switching, or hardware OS
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Logic Circuits (AREA)
- Devices For Executing Special Programs (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
Abstract
所公开的技术将高级程序的数据流图分割成存储器分配和执行片段。存储器分配表示在处理器上的和/或处理器外的存储器中为实现数据流图所需的数据创建逻辑存储器空间。执行片段表示对数据的操作。所公开的技术将存储器分配指定给虚拟存储器单元,并且将执行片段指定给虚拟计算单元。所公开的技术将执行片段分割成存储器片段和计算片段,并且将存储器片段指派给虚拟存储器单元,将计算片段指派给虚拟计算单元。所公开的技术然后将虚拟存储器单元分配给物理存储器单元,并且将虚拟计算单元分配给物理计算单元。然后,其将物理存储器单元和物理计算单元放置在可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络。
Description
优先权申请
本申请要求于2019年8月8日提交的题为“COMPILER FLOW LOGIC FORRECONFIGURABLE ARCHITECTURES”的美国申请第16/536,192号的优先权和权益(代理人案卷号SBNV 1006-2)。
所公开技术的领域
本技术涉及可重配置架构的编译器流程,并且可以特别地应用于用于粗粒度可重配置架构和其他分布式执行系统的编译器流程逻辑。
合并
出于所有目的,以下内容通过引用来合并,如同在本文中完全阐述一样:
于2019年1月3日提交的题为“VIRTUALIZATION OF A RECONFIGURABLE DATAPROCESSOR”的美国非临时专利申请第16/239,252号(代理人案卷号SBNV 1000-1);
于2018年11月21日提交的题为“CONFIGURATION LOAD OF A RECONFIGURABLEDATA PROCESSOR”的美国非临时专利申请第16/197,826号(代理人案卷号SBNV 1001-1A);
于2018年11月21日提交的题为“CONFIGURATION UNLOAD OF A RECONFIGURABLEDATA PROCESSOR”的美国非临时专利申请第16/198,086号(代理人案卷号SBNV 1001-1B);
于2019年1月29日提交的题为“MATRIX NORMAL/TRANSPOSE READ AND ARECONFIGURABLE DATA PROCESSOR INCLUDING SAME”的美国非临时专利申请第16/260,548号(代理人案卷号SBNV 1005-1);以及
于2019年5月9日提交的题为“CONTROL FLOW BARRIER AND RECONFIGURABLE DATAPROCESSOR”的美国非临时专利申请第16/407,675号(代理人案卷号SBNV 1007-1)。
背景技术
本节中讨论的主题不应仅仅由于其在本节中提及而被认为是现有技术。类似地,在本节中提及的或者与作为背景提供的主题相关联的问题不应被认为先前在现有技术中已经认识到。本节中的主题仅仅表示不同的方式,这些方式本身也可以对应于所要求保护的技术的实现。
可重配置处理器(包括现场可编程门阵列(FPGA))可以被配置为比使用执行计算机程序的通用处理器更高效或更快地实现各种功能。正在开发所谓的粗粒度可重配置架构(CGRA),其中阵列中的可配置单元比典型的、更精细粒度的FPGA中所使用的更复杂,并且可以更快或更有效地执行各类功能。例如,已经提出了能够实现用于机器学习和人工智能工作负载的高能效加速器的CGRA。参见Prabhakar等人的“Plasticine:A ReconfigurableArchitecture for Parallel Patterns”(ISCA’17,2017年6月24-28日,加拿大安大略省多伦多)。
当性能、功率或能效至关重要时,CGRA是一种极具吸引力的平台。CGRA是粗粒度可重配置的计算元件和存储器元件的组合,这些元件通过使用可重配置互连结构以某种拓扑互连在一起。它被称为是粗粒度可重配置的,因为架构中的可重配置组件以较粗的粒度(诸如指令、字和字向量)进行操作,这与在诸如FPGA之类的架构中常见的精细粒度、比特级粒度相反。CGRA中的可编程数据和控制路径通过将可重配置的计算组件和存储器组件连接到定制的、深度嵌套的并且分层次的流水线中,使其自然适合开发应用中的嵌套并行。
现代应用通常有若干级的嵌套循环级,并且在多个嵌套级处包含并行。对于这种深度嵌套的循环,传统的循环流水线方法(只关注最内循环的主体)通常利用不足的并行并导致较差的硬件利用率,从而导致较差的性能、功率或能效。
高效的编译器技术使程序员能够用高级语言来描述应用,而大多数优化是自动发生的。已经提出了可以自动将高级语言翻译成FPGA上的流水线和状态机的层次结构的编译器。参见Koeplinger等人的“Spatial:A Language And Compiler For ApplicationAccelerators”(第39届ACM SIGPLAN编程语言设计和实现大会(PLDI)会议记录,2018年)。
实现承诺的性能、功耗和能效,关键取决于编译器技术。CGRA编译器比常规编译器复杂得多,因为它必须(i)执行代码分析以提取多级嵌套处的任务、数据和流水线并行,(ii)在空间和时间两者上都对可重配置的元件进行分割和调度操作,(iii)将操作放置在可重配置的元件上,以及(iv)在可重配置的元件之间路由数据和控制依赖性。
因此,有机会将嵌套循环有效地映射到CGRA的可重配置元件上。可以提高并行化和硬件利用率。
附图说明
在附图中,相同的附图标记在不同的视图中通常是指相同的部分。此外,附图不一定按比例绘制,相反,重点通常放在说明所公开的技术的原理上。在以下描述中,参考以下附图描述了所公开的技术的各种实现方式,其中:
图1是示出包括编译器、主机、存储器和具有可配置单元阵列的可重配置数据处理器的系统的系统图。
图2是对高级程序进行变换以映射到可重配置数据处理器上的一个实现方式的框图。
图3是将虚拟存储器单元分配给多个物理存储器单元并且将虚拟计算单元分配给多个物理计算单元的一个实现方式的框图。
图4是将多个物理存储器单元融合成单个物理存储器单元并且将多个物理计算单元融合成单个物理计算单元的一个实现方式的框图。
图5示出了单层ResNet块的高级程序的示例。
图6描述了ResNet块的数据流图的一个示例。
图7A、图7B和图7C示出了将数据流图分割成存储器分配和执行片段的一个示例。
图8是将存储器分配指定给虚拟存储器单元并且将执行片段指定给虚拟计算单元的一个实现方式。
图9A和图9B示出了将执行片段分割成存储器片段和计算片段的一个实现方式。
图10描绘了将存储器片段分别指派给虚拟存储器单元并且将计算片段分别指派给虚拟计算单元的一个实现方式。
图11示出了将虚拟存储器单元映射到一个或多个物理存储器单元并且将虚拟计算单元映射到一个或多个物理计算单元的一个实现方式。
图12A和图12B描绘了将执行片段映射到虚拟计算单元的一个示例。
图12C示出了当单个物理计算单元不足以执行映射到虚拟计算和/或存储器单元的执行片段时,可以使用划分来将虚拟计算和/或存储器单元映射到多个物理计算和/或存储器单元。
图13A是融合物理计算单元和物理存储器单元的一个示例。
图13B示出了通过在单个物理计算单元上执行会以其他方式在不同的时钟周期在分开的物理计算单元上执行的多个操作的在空间上的融合的一个示例是。
图13C示出了在时间上的融合的一个示例,其通过在单个物理计算单元上顺序地执行多个操作作为分开的执行上下文。
图14A是在图1的可重配置数据处理器中可用的分片(tile)和阵列层级网络的简化图。图14B示出了连接阵列层级网络中的元件的示例交换单元。
图15是示出示例可配置单元的框图。
具体实施方式
呈现以下讨论是为了使本领域的任何技术人员能够制造和使用所公开的技术,并且是在特定应用及其要求的背景下提供的。对本领域技术人员而言,对所公开的实现方式的各种修改将容易显而易见,且本文定义的一般原理可以适用于其它实现方式和应用,而不脱离所公开的技术的精神和范围。因此,所公开的技术不旨在限于所示的实现方式,而是符合与本文公开的原理和特征相一致的最宽范围。
可重配置数据处理器和编译器
图1是示出包括编译器196、主机120、存储器140和可重配置数据处理器110的系统的系统图。如图1的示例所示,可重配置数据处理器110包括可配置单元阵列190和配置加载/卸载控制器195。本文使用的短语“配置加载/卸载控制器”是指配置加载控制器和配置卸载控制器的组合。配置加载控制器和配置卸载控制器可以使用分开的逻辑和数据路径资源来实现,或者可以使用适合特定实施例的共享的逻辑和数据路径资源来实现。在一些实施例中,系统可以仅包括本文描述的类型的配置加载控制器。在一些实施例中,系统可以仅包括本文描述的类型的配置卸载控制器。
可配置单元阵列190的配置涉及由编译器196对配置描述进行编译以产生配置文件198(有时称为比特流或比特文件),并且将配置文件198分发给阵列190上的可配置单元。在一个实施例中,编译器196提供从应用程序到比特文件的翻译。
处理器110包括连接到主机120的外部I/O接口130和连接到存储器140的外部I/O接口150。I/O接口130、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或其他时钟信号源可以向可重配置数据处理器110中的元件提供一个或多个时钟信号175,该元件包括可配置单元阵列190、总线系统115和外部数据I/O接口。
图2是对高级程序进行变换以映射到可重配置数据处理器100上的一个实现方式的框图200。将应用映射到可重配置数据处理器100涉及将算术操作和逻辑操作映射到可重配置数据处理器100的可重配置单元。使用机器学习框架(例如PyTorch、ONNX和Tensorflow)或高级语言(诸如C、C++、Java、Python或Spatial)在高抽象层次指定设计。参见Koeplinger等人的“Spatial:A Language And Compiler For ApplicationAccelerators”(第39届ACM SIGPLAN编程语言设计和实现大会(PLDI)会议记录,第43届计算机架构国际研讨会会议记录,2018年)。所提出的技术用于自动生成实现在高抽象层次描述的行为的配置比特结构。
编译流程
高级程序202是用诸如(但不限于)C、C++、Java、Python或Spatial之类的编程语言编写的应用程序或源代码。例如,高级程序202可以用不同的大小的若干层以及数据类型来实现卷积神经网络(CNN)处理,使得每一层包括具有不同属性的若干嵌套循环。例如,高级程序202可以涉及用于访问输入和权重的存储器操作以及用于执行矩阵乘法的浮点操作。作为另一示例,高级程序202可以包括嵌套循环,该嵌套循环具有高迭代计数以及加载来自前一层的输入值并将其与后一层的权重相乘以产生后一层的输出的循环体。高级程序202具有最外层循环体的循环级并行,可以使用粗粒度流水线来利用该循环级并行。其具有最内层循环体的指令层级并行,可以通过使用循环展开、SIMD向量化和流水线来类似地利用该指令层级并行。
关于循环,直接嵌套在循环体中的循环被称为外部父循环的子循环。如果循环没有任何子循环,即循环体内没有任何嵌套循环,则该循环称为最内层循环。如果循环没有父循环,即没有嵌套在另一循环体内,则该循环是最外层循环。不完全嵌套循环具有非循环语句(例如,基本算术、逻辑、以及关系操作)以及一个或多个子循环的混合的主体。不完全嵌套循环中的并行可以在任何或所有循环级以及包括循环体的操作中利用。并行可以以多种形式出现,诸如细粒度和粗粒度的流水线并行、数据并行和任务并行。
在动作1,数据流图生成器204生成高级程序202的数据流图206。该编译将输入行为描述变换成中间表示。这第一步可以包括各种代码优化,诸如假数据依赖性消除、死码消除和常量折叠。由编译产生的中间表示展示了操作之间的数据和控制依赖性。
数据流图206中的节点表示控制结构、数据操作和存储器分配,而边表示数据和效果依赖性。程序中的每个循环在中间表示中被表示为“控制器”。数据流图206支持分支、循环、函数调用和控制依赖性的其他变化。一旦构建了数据流图206,就可以集中于循环变换(包括循环展开、循环流水线操作、循环裂变/融合和循环分片)来执行附加的分析或优化。
在动作2,分割器214将数据流图206分割成存储器分配224和执行片段222。关于执行片段222,它们表示对数据的操作。执行片段可以包括表示工作量的程序的部分。执行片段可以包括由一组循环、一组图节点或一些其他需要同步的工作单元所涵盖的计算。根据程序的需要,执行片段可以包括固定或可变的工作量。类似地,不同的执行片段222可以包含不同的计算量。执行片段222可以表示并行模式或并行模式的部分。此外,执行片段222可异步执行。
在一个实施例中,分割器214包括存储器分配器216和执行片段生成器212,存储器分配器216生成存储器分配224,执行片段生成器212生成执行片段222。在一个实施例中,将数据流图206分割成执行片段222还包括将数据流图206的嵌套循环的至少一个最内层循环内的计算视为分开的执行片段。在另一实施例中,将数据流图206分割成执行片段222还包括将数据流图206的最内层循环周围的外部循环的计算视为分开的执行片段。在不完全嵌套循环的情况下,循环体内直到该循环体内嵌套循环开始处的操作被分组在一起作为分开的执行片段。
关于存储器分配224,它们表示在片上和/或片外的存储器中为实现数据流图206所需的数据创建逻辑存储器空间。存储器分配224定义硬件资源(功能单元、存储设备或连接组件)的类型和数目。主存储器(缩写为DRAM)是对其进行存储器分配224的片外存储器的示例。高速暂存存储器或SRAM是对其进行存储器分配224的片上存储器的示例。可以对其他存储器类型进行针对应用中发现的各种常见访问模式和布局的存储器分配224。这种存储器类型的示例包括只读查找表(LUT)、固定大小队列(FIFO)和寄存器文件。
在动作3,指定器232将存储器分配224指定给虚拟存储器单元244,并且将执行片段222指定给虚拟计算单元242。
在动作4,执行片段分割器252将执行片段222分割成存储器片段264和计算片段262。每个存储器片段包括导致存储器访问的地址计算。计算片段包括父执行片段中的所有其他操作。在一个实施例中,每个执行片段被分成多个存储器片段和恰好一个计算片段。编译器196使用反向数据流分析来执行分割,使得对存储器访问中使用的地址的输入被递归地标记,直到编译器196达到常数值或(有界)循环/模式迭代器。取决于原始循环体中存在多少存储器访问,单个执行片段可以产生一个或多个存储器片段。在多个存储器访问之间共享相同的存储器寻址逻辑的情况下,地址计算可以被复制以从相同执行片段中创建多个存储器片段。
执行片段222的存储器片段264被配置为索引到数据结构中。存储器片段264中的至少一个存储器片段索引到存储器分配224中的一个存储器分配的逻辑存储器空间中的数据结构中。每个计算片段和存储器片段都保留关于所有循环的信息,这些循环的循环体直接包含相对应的执行片段中的操作。在一个实施例中,这对应于将每个循环的循环迭代器的计算复制到每个计算片段和存储器片段中。这种复制允许每个片段保留与原始程序相同的迭代行为,同时还允许循环迭代器的分布式计算。
在动作5,指派器266将存储器片段264指派给虚拟存储器单元244,并且将计算片段262指派给虚拟计算单元242。虚拟存储器单元244实现相对应的存储器片段264。虚拟计算单元242实现相对应的计算片段262。
每个存储器片段在操作方面被映射到与被访问的存储器相对应的虚拟存储器单元。每个操作被降低到用于虚拟存储器单元的其对应的配置中间表示(IR)。每个计算片段在操作方面被映射到新分配的虚拟计算单元。每个操作被降低到用于虚拟计算单元的其对应的配置中间表示(IR)。
在动作6,分配器274将虚拟存储器单元244分配给物理存储器单元284,并且将虚拟计算单元242分配给物理计算单元282。
在动作7,放置器和路由器286将物理存储器单元284和物理计算单元282放置在可配置单元阵列100中的位置上,并且在放置的位置之间路由数据和控制网络。在一个实施例中,这还包括在每个物理存储器和计算单元内分配物理资源,诸如计数器和寄存器。
在动作8,比特文件生成器292访问由放置器和路由器286产生的放置和路由信息296,并且生成具有用于放置的位置以及所路由的数据和控制网络的配置数据的比特文件198。在一个实施例中,这包括通过将单元放置并路由到可配置单元阵列100上来指派物理存储器和计算单元的坐标和通信资源,同时最大化带宽并最小化等待时间。
在动作9,配置加载/卸载控制器195将比特文件198加载到可配置单元阵列100的实例上,并且使得可配置单元阵列100实现数据流图206。
划分
图3是将虚拟存储器单元244分配给多个物理存储器单元284、285并且将虚拟计算单元242分配给多个物理计算单元282、283的一个实现方式的框图300。这是由分配器274在图3中的动作6完成的。在一个实施例中,分配满足多个物理存储器单元284、285和多个物理计算单元282、283的硬件约束。
在一个实施例中,分配至少部分取决于由特定物理计算单元接受的输入数目。在一个实施例中,作为第一步,在每个虚拟存储器和计算单元中,操作被移除,直到虚拟存储器和计算单元在物理上可实现。在一个实施例中,作为第二步,被移除的操作被分组到分开的、新的虚拟存储器和计算单元中。在一个实施例中,重复这两个步骤,直到所有虚拟存储器和计算单元在物理上是可实现的。在一个实施例中,编译器196然后基于原始虚拟存储器和计算单元中的依赖性将数据和控制通信信道添加到虚拟存储器和计算单元之间的IR。
在这个应用的上下文中,“物理上可实现”是使用具有目标架构参数的分析来建模的。在一个实施例中,参数包括物理存储器单元中可用的片上SRAM的容量、算术逻辑单元(ALU)级的数目、每级的寄存器的数目、每个ALU级的能力、ALU与寄存器之间可用的连接以及寄存器之间可用的连接。在一个实施例中,移除操作的次序可以变化并且基于试探法,试探法的目标函数是最小化物理上可实现的单元的最终数目。在其他实施例中,可以应用具有不同的目标函数的试探法来最小化总执行时间,这可以增加物理上可实现的单元的数目。
在动作7,放置器和路由器286将多个物理存储器单元284、285和多个物理计算单元282、283放置在可配置单元阵列100中的位置上,并且在放置的位置之间路由数据和控制网络。
在动作8,比特文件生成器292访问由放置器和路由器286产生的放置和路由信息296,并且生成具有用于放置的位置以及所路由的数据和控制网络的配置数据的比特文件198。
在动作9,配置加载/卸载控制器195将比特文件198加载到可配置单元阵列100的实例上,并且使得可配置单元阵列100实现数据流图206。
融合
图4是将多个物理存储器单元402、404、406融合成单个物理存储器单元424并且将多个物理计算单元402、404、406融合成单个物理计算单元424的一个实现方式的框图400。这是由融合器424基于融合逻辑416在图4中的动作7完成的。融合的目标是通过将操作更好地打包到物理存储器和计算单元中来减少资源浪费。在一个被称为“在空间上的融合”的实施例中,具有未充分利用的资源的两个或更多个物理存储器或计算单元可以被组合成具有更高资源利用率的单个存储器或计算单元以提高效率,只要所得到的资源利用率仍然是物理上可实现的。在被称为“在时间上的融合”的另一实施例中,可以通过调度两个或更多个物理存储器或计算单元以在单个新的物理存储器或计算单元内顺序地执行作为分开的执行上下文,来将该两个或更多个物理存储器或计算单元进行组合。在其他实施例中,如果编译流程认为空间和时间两者上的融合规则的优化组合有利可图,则可以采用在空间和时间两者上的融合规则的组合。可以使用试探法、搜索算法或其他算法优化技术来确定融合规则。
在一个实施例中,融合至少部分取决于物理存储器单元中可用的片上SRAM的容量以及单个物理计算单元内的ALU级的数目。在一个实施例中,在空间上的融合包括在单个物理计算单元424上执行会以其他方式在不同的时钟周期在分开的物理计算单元402、404、406上执行的多个操作。在一个实施例中,在时间上的融合包括在单个物理计算单元424上顺序地执行多个操作作为分开的执行上下文。在一个实施例中,来自数据流图206的被分组到特定物理计算单元上的多个操作被映射到该特定物理计算单元内的资源上。在其他实施例中,使用试探法来寻找所需物理存储器和计算单元的数目与实现的性能之间的折衷。
在动作8,放置器和路由器286将单个物理存储器单元424和单个物理计算单元424放置在可配置单元阵列100中的位置上,并且在放置的位置之间路由数据和控制网络。
在动作9,比特文件生成器292访问由放置器和路由器286产生的放置和路由信息296,并且生成具有用于放置的位置以及所路由的数据和控制网络的配置数据的比特文件198。
在动作10,配置加载/卸载控制器195将比特文件198加载到可配置单元阵列100的实例上,并且使得可配置单元阵列100实现数据流图206。
在一些实施例中,参考图2、图3和图4讨论的编译器流程逻辑由编译器196实现。
ResNet示例
高级程序
图5示出了PyTorch中的高级程序202的示例。这个示例实现了残差神经网络(ResNet)块,它是通常用于自动图像分类的一种常用的卷积神经网络(CNN)。ResNet架构包含若干卷积操作层,其中每一层对前一层的输出和当前层的权重滤波器执行若干卷积操作。ResNet架构还包含跳过连接,这些跳过连接将一些层的输出连接到网络中远得多的层的输入,从而“跳过”其间的两层或三层。ResNet模型还包含非线性函数,诸如ReLU和其间的批量归一化。批量归一化是一种用于通过将数据标准化为网络架构的组成部分来加速深度网络训练的方法。
数据流图
图6描绘了ResNet块600的数据流图206的一个示例。这个示例对输入602执行卷积612,并且产生输出614。对输出614执行批量归一化622以产生输出624。然后,通过ReLU激活632,批量归一化输出624在零与最大正值之间被线性化,以产生ReLU激活输出634。对ReLU激活输出634执行平均池化642,以产生平均池化输出644。平均池化输出644然后作为输入被馈送到线性层652(例如,全连接网络)以产生ResNet块600的最终输出654。线性层652具有1000个神经元(权重)。
输入602的维数是4×3×224×224,其中4是批量大小,3是输入通道(例如,RGB图像通道)的数目,224是输入宽度(例如,图像中的像素列的数目),并且224是输入高度(例如,图像中的像素宽度的数目)。卷积612的维数是64×3×7×7,其中64是卷积滤波器的数目,3是每个卷积滤波器中的内核的数目,7是内核宽度(例如,内核中的权重列的数目),并且7是内核高度(例如,内核中的权重行的数目)。输出614的维数是4×64×112×112,其中4是批量通道,64是输出通道的数目,112是输出宽度(例如,特征图中的特征列的数目),并且112是输出高度(例如,特征图中的特征行的数目)。最终输出654的维数是4×100,其中4是批量通道,并且1000是输出通道的数目。
中间表示和分割
图7A、图7B、图7C示出了作为高级程序202的ResNet架构的子集的示例实现方式,其在内部被表示为数据流图206。在一个实施例中,高级程序可以用空间高级语言(Spatialhigh-level language)编写。参见D.Koeplinger等人的“Spatial:A Language AndCompiler For Application Accelerators”(第39届ACM SIGPLAN编程语言设计和实现大会(PLDI)会议记录,第43届计算机架构国际研讨会会议记录,2018年)。
图7A、图7B和图7C示出了将数据流图206分割成存储器分配224和执行片段222的一个示例。在图7A、图7B和图7C中,斜体代码标识存储器分配224,并且粗体代码标识执行片段222。第一存储器分配701为输入602分配片上SRAM中的存储器空间。第二存储器分配702为卷积612分配片上SRAM中的存储器空间。第三存储器分配703为输出614分配片上SRAM中的存储器空间。
第一执行片段704实现输入602与卷积612的卷积权重之间的卷积612。第二执行片段705实现输出614的累加。
第四存储器分配706为批量归一化622的输出624分配片上SRAM中的存储器空间。第五存储器分配707为批量归一化622的缩放值分配片上SRAM中的存储器空间。第六存储器分配708为批量归一化622的偏置值分配片上SRAM中的存储器空间。
第三执行片段709实现批量归一化622的均值计算1302。第四执行片段710实现批量归一化622的均值归一化1206。
在图7B中,第五执行片段711实现批量归一化622的方差计算1304。第六执行片段712实现批量归一化622的方差归一化1207。第七执行片段713实现批量归一化622的输出624的计算。
第七存储器分配714为ReLU激活632的输出634分配片上SRAM中的存储器空间。第八执行片段715实现ReLU激活632的输出634的计算。
第八存储器分配716为平均池化642的输出644分配片上SRAM中的存储器空间。第九执行片段717实现平均池化642的输出644的计算。第十执行片段718实现平均池化642的输出644的累加。
在图7C中,第九存储器分配719为线性层652的神经元(权重)分配片上SRAM中的存储器空间。第十存储器分配720为最终输出654分配片上SRAM中的存储器空间。第十一执行片段721实现最终输出654的计算。
指定
图8示出了将存储器分配224指定给虚拟存储器单元244并且将执行片段指定给虚拟计算单元242的一个实现方式的示例。在图8中,图7A、图7B和图7C中的十个存储器分配224分别被指定相对应的虚拟存储器单元(VMU)。同样在图8中,图7A、图7B和图7C中的十一个执行片段分别被指定相对应的虚拟计算单元(VCU)。
执行片段分割
图9A和图9B示出了将执行片段222分割成存储器片段264和计算片段262的一个实现方式。图9A示出了实现输入602与卷积612的卷积权重之间的卷积612的第一执行片段704被分割成第一存储器片段901、第二存储器片段902和计算片段903。图9B还示出了由第一和第二存储器片段901、902(MF1a、MF1b)计算的用于存储器访问的相应地址。
图10描绘了分别将存储器片段901、902指派给虚拟存储器单元1002、1022(VMU 1、VMU 2)并且将计算片段903指派给虚拟计算单元1014(VCU 1)的一个实现方式。地址计算901、902(MF1a、MF1b)利用分配904、905(A1、A2)被分别分配给虚拟存储器单元1002、1022(VMU 1、VMU 2)。
图11示出了将虚拟存储器单元1002、1022(VMU 1、VMU 2)映射到一个或多个物理存储器单元1102、1112、1122、1132、1142(PMU 1_0、PMU 1_1、PMU 2_0、PMU 2_1、PMU 2_2)并且将虚拟计算单元1014(VCU 1)映射到一个或多个物理计算单元1104、1124(PCU 1_0、PCU1_1)的一个实现方式。
虚拟存储器单元1002(VMU 1)被映射到物理存储器单元1102(PMU 1_0)和物理存储器单元1112(PMU 1_1)。虚拟存储器单元1002(VMU 1)的原始地址指定904(A1)被分别表示为物理存储器单元1102、1112(PMU 1_0、PMU 1_1)的重复地址指定1101、1102(A1_0、A1_1)。
虚拟存储器单元1022(VMU 2)被映射到物理存储器单元1122(PMU 2_0)、物理存储器单元1132(PMU 2_1)和物理存储器单元1142(PMU 2_1)。虚拟存储器单元1022(VMU 2)的原始地址指定905(A2)被分别表示为物理存储器单元1122、1132、1142(PMU 2_0、PMU 2_1、PMU 2_2)的重复地址指定1103、1104、1105(A2_0、A2_1、A2_2)。
虚拟计算单元1014(VCU 1)被映射到物理计算单元1104(PCU 1_0)和物理计算单元1124(PCU 1_1)。
图12A和图12B描绘了将执行片段713映射到具有四个输入的虚拟计算单元(VCU7)的一个示例。执行片段713被分割成第一存储器片段1201、第二存储器片段1202、第三存储器片段1203、第四存储器片段1205和计算片段1204。
在图12B中,由于虚拟计算单元(VCU 7)具有四个输入,因此它能够处理所有四个存储器片段1201、1202、1203、1205,以计算执行片段713的计算片段1204。
当单个物理计算单元不足以执行映射到虚拟计算和/或存储器单元的执行片段时,则划分可以被用于将虚拟计算和/或存储器单元映射到多个物理计算和/或存储器单元。多个物理计算和/或存储器单元然后一起执行该执行片段。
转到图12C,考虑单个物理计算单元只有三个输入。然而,虚拟计算单元(VCU 7)有四个输入。为了考虑这一点,使用两个物理计算单元(PCU 7_0和PCU 7_1)来计算执行片段713的计算片段1204。这是通过将虚拟计算单元(VCU 7)映射到两个物理计算单元(PCU 7_0和PCU 7_1)来实现的。
图13A是融合物理计算单元和物理存储器单元的一个示例。在图13A中,实现各种存储器片段和计算片段的物理计算单元和物理存储器单元被连接。连接遵循数据流图206所需的数据和控制依赖性。
在空间上的融合
图13B示出了通过在单个物理计算单元上执行会以其他方式在不同的时钟周期在分开的物理计算单元上执行的多个操作的、在空间上的融合的一个示例。在图13B中,PCU3_0和PCU 4_0被组合成单个PCU 3_0_4_0。此外,PCU 5_0和PCU 6_0被组合成单个PCU 5_0_6_0。
在时间上的融合
图13C示出了通过在单个物理计算单元上顺序地执行多个操作作为分开的执行上下文的在时间上的融合的一个示例。在图13C中,PCU 3_0、PCU 4_0、PCU 5_0和PCU 6_0被组合成单个PCU 3_0_4_0_5_0_6_0。这意味着单个PCU 3_0_4_0_5_0_6_0针对一段时间执行融合的计算片段1302、1206(CF 3/4),然后改变上下文并执行融合的计算片段1304、1207(CF5/6)。CF 3/4之后的值被传回该单元(因为它是用作CF 5/6输入的中间值)。这种自循环的实现取决于硬件实施例,但是可以被实现为PCU中的内部寄存器或存储器,或者通过将PCU的输出反馈回自身来使用外部网络。在另一实施例中,被反馈回PCU的数据可以被存储在分开的存储器单元(诸如PMU或一组PMU)中。
可重配置分片
图14A是在图1的可重配置数据处理器中可用的分片和阵列层级网络的简化图1400。图14B示出了连接阵列层级网络中的元件的示例交换单元。在这个示例中,可配置单元阵列300包括多种类型的可配置单元。在这个示例中,可配置单元的类型包括模式计算单元(PCU)、模式存储器单元(PMU)、交换单元(S)以及地址生成和合并单元(各自包括两个地址生成器AG和一个共享CU)。对于这些类型的可配置单元的功能的示例,参见Prabhakar等人的“Plasticine:A Reconfigurable Architecture For Parallel Patterns”(ISCA’17,2017年6月24-28日,加拿大安大略省多伦多),其通过引用被并入,如同在本文中被完全阐述一样。
这些可配置单元中的每个可配置单元都包含配置存储设备,该配置存储设备包括表示用于运行程序的设置或序列的一组寄存器或触发器,并且这些可配置单元中的每个可配置单元可以包括嵌套循环的数目、每个循环迭代器的限制、每一级要执行的指令、操作数的来源以及输入和输出接口的网络参数。
此外,这些可配置单元中的每一个都包含配置存储,该配置存储包括存储可用于跟踪嵌套循环中的进程或其他进程的状态的一组寄存器或触发器。配置文件198包含表示执行程序的组件中的每个组件的初始配置或起始状态的比特流。这个比特流被称为比特文件。程序加载是基于比特文件的内容设置可配置单元阵列190中的配置存储的过程,以允许所有组件执行程序(即,机器)。程序加载也可能需要加载所有PMU存储器。
阵列层级网络包括互连阵列中的可配置单元的链路。阵列层级网络中的链路包括一种或多种物理总线,并且在这种情况下包括三种物理总线:块级向量总线(例如,128比特数据)、字级标量总线(例如,32比特数据)和多比特级控制总线。例如,交换单元1411与1412之间的互连1421包括向量总线宽度为128比特的向量总线互连、标量总线宽度为32比特的标量总线互连以及控制总线互连。
这三种物理总线在传输数据的粒度上有所不同。在一个实施例中,向量总线可以携带包括16字节(=128比特)数据的块作为其有效载荷。标量总线可以具有32比特有效载荷,并且携带标量操作数或控制信息。控制总线可以携带诸如令牌之类的控制握手信号和其他信号。向量和标量总线可以是分组交换的,包括指示每个分组的目的地的报头以及其他信息,诸如当分组被无序接收时可以用来重组文件的序列号。每个分组报头可以包含标识目的地交换单元的地理坐标(例如,阵列中的行和列)的目的地标识符以及标识目的地交换机上用于到达目的地单元的接口(例如,北、南、东、西等)的接口标识符。例如,控制网络可以基于设备中的时序电路进行电路交换。配置加载/卸载控制器可以为每个128比特的配置数据块生成报头。报头在报头总线上被发送到可配置单元阵列190中的每个可配置单元。
在一个示例中,128比特的数据块在向量总线上发送,该向量总线将该块作为向量输入提供给可配置单元。向量总线可以包括128条有效载荷线路和一组报头线路。报头可以包括每个块的序列ID,其可以包括:
一个比特来指示该块是高速暂存存储器还是配置存储数据。
·形成块号的比特。
·指示列标识符的比特。
·指示行标识符的比特。
·指示组件标识符的比特。
对于加载操作,配置加载控制器可以按照从N-1到0的次序向可配置单元发送N个块。对于该示例,这6个块按照块5->块4->块3->块2->块1->块0的最高有效比特优先次序被发出。(注意,该最高有效比特优先次序导致块5在来自阵列配置加载控制器的分发序列的第0轮中被分发。)对于卸载操作,配置卸载控制器可以按次序将卸载数据写出到存储器。对于加载操作和卸载操作两者,可配置单元中的配置数据存储中的配置串行链的移位是从LSB(最低有效比特)到MSB(最高有效比特),或者MSB优先。
图14B示出了连接阵列层级网络中的元件的示例交换单元。如图14B的示例所示,交换单元可以具有8个接口。交换单元的北、南、东和西接口用于交换单元之间的连接。交换单元的东北、东南、西北和西南接口各自用于连接到PCU或PMU实例。每个分片象限中的一组2个交换单元具有到地址生成和合并单元(AGCU)的连接,该AGCU包括多个地址生成(AG)单元以及连接到多个地址生成单元的合并单元(CU)。合并单元(CU)在AG之间进行仲裁,并且处理存储器请求。交换单元的8个接口中的每一个可以包括向量接口、标量接口和控制接口,以与向量网络、标量网络和控制网络进行通信。
在配置之后的机器的执行期间,可以使用阵列层级网络上的一个或多个交换单元的向量总线和(多个)向量接口,经由一个或多个单元交换机以及单元交换机之间的一个或多个链路,将数据发送到可配置单元。
在本文描述的实施例中,在分片的配置之前,可以经由一个或多个单元交换机以及单元交换机之间的一个或多个链路,将配置文件或比特文件198从使用相同向量总线的配置加载控制器发送到阵列层级网络上使用向量总线以及一个或多个交换单元的(多个)向量接口的可配置单元。例如,可以经由配置加载/卸载控制器1401与交换单元1411的西(W)向量接口之间的链路1420、交换单元1411以及交换单元1411的东南(SE)向量接口与PMU1441之间的链路1431,将单元文件中特定于可配置单元PMU 1441的配置数据的块从配置加载/卸载控制器1401发送到PMU 1441。
在这个示例中,AGCU之一被配置为包括配置加载/卸载控制器(例如1401)的主AGCU。主AGCU实现了寄存器,主机(图1中的120)可以通过该寄存器经由总线系统向主AGCU发送命令。主AGCU控制分片中的可配置单元阵列上的操作,并且实现程序控制状态机,以基于其通过写入寄存器从主机接收的命令来跟踪分片的状态。对于每个状态转换,主AGCU通过菊花链命令总线向分片上的所有组件发出命令(图15)。命令包括用于重置分片中的可配置单元阵列中的可配置单元的程序重置命令以及用于将配置文件加载到可配置单元的程序加载命令。
主AGCU中的配置加载控制器负责从存储器中读取配置文件,并且将配置数据发送到分片的每个可配置单元。主AGCU可以优选地以顶层级网络的最大吞吐量从存储器中读取配置文件。从存储器读取的数据由主AGCU根据本文描述的分发序列通过阵列层级网络上的向量接口被发送到相对应的可配置单元。
在一个实施例中,以可以减少可配置单元内的布线要求的方式,保存要在组件中的配置加载过程中加载或在配置卸载过程中卸载的单元文件的配置和状态寄存器以串行链方式连接,并且可以通过经由串行链进行移位的过程来加载。在一些实施例中,可以有多于一个的串行链并联地或串联地布置。当可配置单元在一个总线周期中从主AGCU接收到例如128比特的配置数据时,可配置单元以每周期1比特的速率通过其串行链对该数据进行移位,其中移位器周期可以以与总线周期相同的速率运行。可配置单元会花费128个移位器周期将128个配置比特加载为通过向量接口接收的128比特数据。128比特的配置数据被称为块。可配置单元可能需要多个数据块来加载其所有配置比特。
可配置单元通过多个存储器接口(图1的150)与存储器对接。可以使用若干AGCU访问存储器接口中的每个存储器接口。每个AGCU包含可重配置的数据路径,以生成对片外存储器的请求。每个AGCU包含FIFO(用于组织数据的先进先出缓冲器),以缓冲来自片外存储器的传出命令、数据和传入响应。
AGCU中的地址生成器AG可以生成密集或稀疏的存储器命令。密集请求可以用于批量传输连续的片外存储器区域,并且可以用于从可配置单元阵列中的可配置单元读取数据块或向其写入数据块。AGCU中的合并单元(CU)可以将密集请求转换为多个片外存储器突发请求。稀疏请求可以将地址流排入合并单元。合并单元可以使用合并高速缓存来维护关于发布的片外存储器请求的元数据,以组合属于相同的片外存储器请求的稀疏地址,从而最小化发布的片外存储器请求数目。
可重配置单元
图15是示出示例可配置单元1500(诸如模式计算单元(PCU))的框图。在该应用的上下文中,PCU对应于物理计算单元。可配置单元阵列中的可配置单元包括配置数据存储1520(例如,串行链)以存储单元文件,该单元文件包括特定于对应的可配置单元的多个配置数据块(或其他大小的子文件)。可配置单元阵列中的可配置单元各自包括经由线路1522连接到配置数据存储1520的单元配置加载逻辑1540,以执行单元配置加载过程。单元配置加载过程包括经由总线系统(例如,向量输入)接收特定于可配置单元的单元文件的块,并且将接收的块加载到可配置单元的配置数据存储1520中。
在这个示例中,多个可配置单元中的可配置单元中的配置数据存储包括锁存器的串行链,其中锁存器存储控制可配置单元中的资源的配置的比特。配置数据存储中的串行链可以包括串联连接的用于配置数据的移位寄存器链以及用于状态信息和计数器值的第二移位寄存器链。
可配置单元可以使用三组相对应的输入和输出(IO)来与标量、向量和控制总线对接:标量输入/输出、向量输入/输出和控制输入/输出。标量IO可以用于传送单个字的数据(例如,32比特)。向量IO可以用于(诸如在单元配置加载过程中接收配置数据的情况下)传送数据块(例如,128比特),以及在配置之后通过多个PCU之间的长流水线在操作期间发送和接收数据。控制IO可以用于传送控制信号,诸如可配置单元的执行的开始或结束。控制块1570接收控制输入,并且控制块1570提供控制输出。
使用可以包括一个或多个向量FIFO的向量FIFO块1560中的向量FIFO来缓冲每个向量输入。使用标量FIFO 1550来缓冲每个标量输入。使用输入FIFO解耦了数据生产者与消费者之间的时序,并且通过使其对输入延时不匹配具有鲁棒性来简化内部可配置单元控制逻辑。
输入配置数据1510可以作为向量输入被提供给向量FIFO,然后被传输到配置数据存储1520。可以使用向量输出从配置数据存储1520中卸载输出配置数据1530。
CGRA使用菊花链完成总线来指示加载/卸载命令何时完成。主AGCU通过菊花链式命令总线向可配置单元阵列中的可配置单元发送程序加载和卸载命令。如图15的示例所示,菊花链完成总线1591和菊花链命令总线1592连接到菊花链逻辑1593,菊花链逻辑1593与单元配置加载逻辑1540进行通信。菊花链逻辑1593可以包括加载完成状态逻辑,如下所述。下面将进一步描述菊花链完成总线。命令和完成总线的其它拓扑显然也是可能的,但这里不再描述。
在块1580中,可配置单元包括多个可重配置数据路径。可配置单元中的数据路径可以被组织为多级(级1……级N)、可重配置SIMD(单指令、多数据)流水线。被推入到可配置单元的配置串行链中的数据块包括可配置单元中的每个数据路径的每一级的配置数据。配置数据存储420中的配置串行链经由线路1521连接到块1580中的多个数据路径。
在本申请的上下文中,模式存储器单元(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对接。每个通道具有相关联的地址管理单元,该地址管理单元在多个地址流之间进行仲裁,并且由缓冲器组成以支持多个未完成的(outstanding)存储器请求和地址合并,从而最小化DRAM访问。本地地址计算在PMU中完成,DRAM地址计算发生在DRAM地址管理单元中,并且剩余的数据计算发生在PCU中。高速暂存由与PCU通道数目相匹配的多个SRAM储存体(bank)构成。高速暂存周围的地址解码逻辑可以被配置为在若干储存体模式下操作,以支持各种访问模式。步进储存体模式支持在密集数据结构上常见的线性访问模式。FIFO模式支持流访问。行缓冲模式捕获类似滑动窗口的访问模式。复制模式(其中内容在所有存储器储存体上复制)提供了多个读取地址通道来支持并行化的片上收集操作。
PCU被涉及成执行应用中的最内并行模式。PCU数据路径被组织成多级的可重配置的SIMD流水线。这种设计使每个PCU能够实现高计算密度,并且利用跨通道的循环级并行和跨级的流水线并行。每个SIMD通道的每一级由功能单元(FU)和相关联的流水线寄存器(PR)组成。FU执行32比特字级算术和二进制操作,包括对浮点和整数操作的支持。由于单个流水线级中的FU在SIMD中操作,所以每一级仅需要单个配置寄存器。来自每个FU的结果被写入其相关联的寄存器。每个通道中的PR跨流水线级被链接在一起,以允许实时值在同一通道内的级之间传播。使用两种类型的PCU内部网络来捕获FU之间的跨通道通信:缩减树网络,其允许将来自多个通道的值缩减为单个标量;以及移位网络,其允许使用PR作为跨级的滑动窗口以利用模板应用中的重用。两种网络都使用PR内的专用寄存器,以最小化硬件开销。
PCU使用三种输入和输出(IO)与全局互连对接:标量、向量和控制。标量IO被用于传送单个字的数据,诸如折叠(Fold)的结果。每个向量IO允许在PCU中每个通道传送一个字,并且在诸如读写PMU中的高速暂存以及在多个PCU之间的长流水线上发送中间数据等情况中使用。每个向量和标量输入使用小FIFO进行缓冲。使用输入FIFO将数据生产者和消费者解耦合,并且通过使其对输入延迟不匹配具有鲁棒性来简化PCU间控制逻辑。控制IO被用于传送控制信号(诸如PCU的执行的开始或结束)或指示反压(backpressure)。
可重配置计数器链生成模式迭代索引和控制信号以协调执行。当控制块启用其中一个计数器时,PCU执行开始。基于应用的控制和数据依赖性,控制模块可以被配置为组合来自本地FIFO和全局控制输入两者的多个控制信号,以触发PCU执行。使用可重配置组合逻辑和用于状态机的可编程加减计数器来实现控制块。
正如储存体对于支持多个SIMD单元以维持计算吞吐量很重要一样,N缓冲或广义双重缓冲对于支持粗粒度流水线也同样重要。作为示例,ResNet中的跳过连接和保存每层输出的缓冲器可以使用N缓冲来实现。PMU高速暂存可以被配置为作为具有所描述的任何储存体模式的N缓冲器来操作。通过将每个SRAM储存体中的地址空间分割成N个不相交的区域来实现N缓冲器。使用写入和读取状态信息,适当的偏移被添加到每个储存体的本地地址以访问正确的数据。
可编程计数器链和控制块触发类似于PCU的PMU执行。每个PMU通常包含来自生产者模式的写入地址计算逻辑和来自消费者模式的读取地址计算逻辑。基于本地FIFO的状态和外部控制输入,控制模块可以被配置为通过启用适当的计数器来触发写入地址计算、读取地址计算、或触发写入地址计算与读取地址计算两者。
特定实现方式
在一个实现方式中,我们公开了一种对高级程序进行变换以映射到具有可配置单元阵列的可重配置数据处理器上的计算机实现的方法。该方法包括将高级程序的数据流图分割成存储器分配和执行片段。存储器分配表示在处理器上的和/或处理器外的存储器中为实现数据流图所需的数据创建逻辑存储器空间。执行片段表示对数据的操作。
该方法包括将存储器分配指定给虚拟存储器单元,并且将执行片段指定给虚拟计算单元。
该方法包括将执行片段分割成存储器片段和计算片段。
该方法包括将存储器片段指派给虚拟存储器单元,并且将计算片段指派给虚拟计算单元。
该方法包括将虚拟存储器单元分配给物理存储器单元,并且将虚拟计算单元分配给物理计算单元。
该方法包括将物理存储器单元和物理计算单元放置在可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络。
该方法包括生成比特文件,该比特文件具有用于放置的位置以及所路由的数据和控制网络的配置数据。该比特文件在被加载到可配置单元阵列的实例上时使可配置单元阵列实现数据流图。
在其他实现方式的特定实现部分中讨论的每个特征同样适用于这个实现方式。如上所述,所有其他特征在这里不再重复,并且应被视为重复引用。读者将理解在这些实现方式中标识的特征如何能够容易地与在其他实现方式中标识出的基础特征集合进行组合。
该方法包括将虚拟存储器单元中的至少一个虚拟存储器单元分配给多个物理存储器单元和/或将虚拟计算单元中的至少一个虚拟计算单元分配给多个物理计算单元。
该方法包括将多个物理存储器单元和多个物理计算单元放置在可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络。
该方法包括生成比特文件,该比特文件具有用于放置的位置以及所路由的数据和控制网络的配置数据。该比特文件在被加载到可配置单元阵列的实例上时使得可配置单元阵列实现数据流图。
该分配满足多个物理存储器单元和多个物理计算单元的硬件约束。该分配至少部分取决于由特定物理计算单元接受的输入数目。该分配至少部分地取决于物理存储器单元中可用的片上SRAM的容量、算术逻辑单元(ALU)级数目、每级的寄存器数目、每个ALU级的能力、ALU与寄存器之间可用的连接以及寄存器之间可用的连接。
该方法包括将至少两个物理存储器单元融合成单个物理存储器单元和/或将至少两个物理计算单元融合成单个物理计算单元。
该方法包括将单个物理存储器单元和单个物理计算单元放置在可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络。
该方法包括生成比特文件,该比特文件具有用于放置的位置以及所路由的数据和控制网络的配置数据。该比特文件在被加载到可配置单元阵列的实例上时,使可配置单元阵列实现数据流图。
该融合提高了单个物理存储器单元和单个物理计算单元的资源利用率。该融合至少部分取决于单个物理计算单元内的ALU级的数目。该融合在空间上包括在单个物理计算单元上执行会以其他方式在不同的时钟周期在分开的物理计算单元上执行的多个操作。该融合在时间上包括在单个物理计算单元上顺序地执行多个操作作为分开的执行上下文。执行片段是可异步执行的。
该方法包括配置执行片段的存储器片段以索引到数据结构中。存储器片段中的至少一个存储器片段索引到存储器分配中的一个存储器分配的逻辑存储器空间中的数据结构中。执行片段中的至少一个执行片段包括循环或模式迭代器,该循环或模式迭代器使对计算片段中的至少一个计算片段的操作在由存储器片段索引的值上重复地操作。特定执行片段的计算片段和存储器片段使操作在保存经索引的值的数据结构的至少两个维度上操作。特定执行片段包括索引到多个数据结构中的多个存储器片段。
分割成执行片段还包括将数据流图的嵌套循环中的至少一个最内层循环内的计算视为分开的执行片段。分割成执行片段还包括将数据流图的最内层循环周围的外部循环的计算视为分开的(separate)执行片段。
该方法包括将来自数据流图的被分组到特定物理计算单元上的多个操作映射到该特定物理计算单元内的资源上。
本节中描述的方法的其他实现方式可以包括非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储可由处理器执行以执行上述方法中的任何方法的指令。在本节中描述的方法的又一实现方式可以包括一种系统,该系统包括存储器和一个或多个处理器,该处理器可操作来执行存储在存储器中的指令,以执行上述方法中的任何方法。
在一个实现方式中,我们公开了一种对高级程序进行变换以映射到具有可配置单元阵列的可重配置数据处理器上的计算机实现的方法。
该方法包括将高级程序的数据流图分割成存储器分配和执行片段。存储器分配表示在处理器上的和/或处理器外的存储器中为实现数据流图所需的数据创建逻辑存储器空间。执行片段表示对数据的操作。
该方法包括将存储器分配和执行片段指定给虚拟可配置单元。
该方法包括将执行片段分割成存储器片段和计算片段。
该方法包括将存储器片段和计算片段指派给虚拟可配置单元。
该方法包括将虚拟可配置单元分配给物理可配置单元。
该方法包括将物理可配置单元放置在可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络。
该方法包括生成比特文件,该比特文件具有用于放置的位置以及所路由的数据和控制网络的配置数据。该比特文件在被加载到可配置单元阵列的实例上时,使可配置单元阵列实现数据流图。
在其他实现方式的特定实现部分中讨论的每个功能同样适用于这个实现方式。如上所述,所有其他特征在这里不再重复,并且应被视为重复引用。读者将理解在这些实现方式中标识的特征如何能够容易地与在其他实现方式中标识的基础特征集合进行组合。
该方法包括将虚拟可配置单元中的至少一个虚拟可配置单元分配给多个物理可配置单元。
该方法包括将多个物理可配置单元放置在可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络。
该方法包括生成比特文件,该比特文件具有用于放置的位置以及所路由的数据和控制网络的配置数据。该比特文件在被加载到可配置单元阵列的实例上时,使可配置单元阵列实现数据流图。
该方法包括将至少两个物理可配置单元融合成单个物理可配置单元。
该方法包括将单个物理可配置单元放置在可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络。
该方法包括生成比特文件,该比特文件具有用于放置的位置以及所路由的数据和控制网络的配置数据。该比特文件在被加载到可配置单元阵列的实例上时,使可配置单元阵列实现数据流图。
本节中描述的方法的其他实现方式可以包括非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储可由处理器执行以执行上述任何方法的指令。在本节中描述的方法的又一实现方式可以包括一种系统,该系统包括存储器和一个或多个处理器,该处理器可操作来执行存储在存储器中的指令,以执行上述方法中的任何方法。
呈现前面的描述是为了能够制造和使用所公开的技术。对所公开的实现方式的各种修改将是显而易见的,并且在不脱离所公开的技术的精神和范围的情况下,本文定义的一般原理可以应用于其他实现方式和应用。因此,所公开的技术不旨在限于所示的实现方式,而是符合与本文公开的原理和特征相一致的最宽范围。所公开的技术的范围由所附权利要求限定。
Claims (24)
1.一种对高级程序进行变换以映射到具有可配置单元阵列的可重配置数据处理器上的计算机实现的方法,所述方法包括:
将所述高级程序的数据流图分割成存储器分配和执行片段,其中所述存储器分配表示在处理器上的和/或处理器外的存储器中为实现所述数据流图所需的数据创建逻辑存储器空间,并且所述执行片段表示对所述数据的操作;
将所述存储器分配指定给虚拟存储器单元,并且将所述执行片段指定给虚拟计算单元;
将所述执行片段分割成存储器片段和计算片段;
将所述存储器片段指派给所述虚拟存储器单元,并且将所述计算片段指派给所述虚拟计算单元;
将所述虚拟存储器单元分配给物理存储器单元,并且将所述虚拟计算单元分配给物理计算单元;
将所述物理存储器单元和所述物理计算单元放置在所述可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络;以及
生成具有用于所述放置的位置以及所路由的所述数据和控制网络的配置数据的比特文件,其中所述比特文件在被加载到所述可配置单元阵列的实例上时,使所述可配置单元阵列实现所述数据流图。
2.根据权利要求1所述的计算机实现的方法,还包括:
将所述虚拟存储器单元中的至少一个虚拟存储器单元分配给多个物理存储器单元和/或将所述虚拟计算单元中的至少一个虚拟计算单元分配给多个物理计算单元;
将所述多个物理存储器单元和所述多个物理计算单元放置在所述可配置单元阵列中的位置上,并且在所述放置的位置之间路由数据和控制网络;以及
生成具有用于所述放置的位置以及所路由的所述数据和控制网络的配置数据的比特文件,其中所述比特文件在被加载到所述可配置单元阵列的实例上时,使所述可配置单元阵列实现所述数据流图。
3.根据权利要求2所述的计算机实现的方法,其中所述分配满足所述多个物理存储器单元和所述多个物理计算单元的硬件约束。
4.根据权利要求2所述的计算机实现的方法,其中所述分配至少部分取决于由特定物理计算单元接受的输入的数目。
5.根据权利要求2所述的计算机实现的方法,其中所述分配至少部分取决于物理存储器单元中可用的片上SRAM的容量、算术逻辑单元(ALU)级的数目、每级的寄存器的数目、每个ALU级的能力、ALU与寄存器之间可用的连接以及寄存器之间可用的连接。
6.根据权利要求1所述的计算机实现的方法,还包括:
将所述物理存储器单元中的至少两个物理存储器单元融合成单个物理存储器单元和/或将所述物理计算单元中的至少两个物理计算单元融合成单个物理计算单元;
将所述单个物理存储器单元和所述单个物理计算单元放置在所述可配置单元阵列中的位置上,并且在所述放置的位置之间路由数据和控制网络;以及
生成具有用于所述放置的位置以及所路由的所述数据和控制网络的配置数据的比特文件,其中所述比特文件在被加载到所述可配置单元阵列的实例上时,使所述可配置单元阵列实现所述数据流图。
7.根据权利要求6所述的计算机实现的方法,其中所述融合增加所述单个物理存储器单元和所述单个物理计算单元的资源利用率。
8.根据权利要求6所述的计算机实现的方法,其中所述融合至少部分取决于物理存储器单元中可用的片上SRAM的容量以及所述单个物理计算单元内的ALU级的数目。
9.根据权利要求6所述的计算机实现的方法,其中所述融合在空间上包括在所述单个物理计算单元上执行会以其他方式在不同的时钟周期在分开的物理计算单元上执行的多个操作。
10.根据权利要求9所述的计算机实现的方法,其中所述融合在时间上包括在所述单个物理计算单元上顺序地执行所述多个操作作为分开的执行上下文。
11.根据权利要求1所述的计算机实现的方法,其中所述执行片段可异步执行。
12.根据权利要求11所述的计算机实现的方法,还包括:
配置所述执行片段的存储器片段以索引到数据结构中。
13.根据权利要求12所述的计算机实现的方法,其中所述存储器片段中的至少一个存储器片段索引到所述存储器分配中的一个存储器分配的逻辑存储器空间中的数据结构中。
14.根据权利要求12所述的计算机实现的方法,其中所述执行片段中的至少一个执行片段包括循环或模式迭代器,所述循环或模式迭代器使对所述计算片段中的至少一个计算片段的操作在由所述存储器片段索引的值上重复地操作。
15.根据权利要求14所述的计算机实现的方法,其中特定执行片段的计算片段和存储器片段使所述操作在保存经索引的所述值的数据结构的至少两个维度上操作。
16.根据权利要求12所述的计算机实现的方法,其中特定执行片段包括索引到多个数据结构中的多个存储器片段。
17.根据权利要求1所述的计算机实现的方法,其中分割成所述执行片段还包括将所述数据流图的嵌套循环中的至少一个最内层循环内的计算视为分开的执行片段。
18.根据权利要求17所述的计算机实现的方法,其中分割成所述执行片段还包括将所述数据流图的最内层循环周围的外部循环的计算视为分开的执行片段。
19.根据权利要求1所述的计算机实现的方法,还包括:
将来自所述数据流图的、被分组到特定物理计算单元上的多个操作映射到所述特定物理计算单元内的资源上。
20.一种变换高级程序以映射到具有可配置单元阵列的可重配置数据处理器上的计算机实现的方法,所述方法包括:
将所述高级程序的数据流图分割成存储器分配和执行片段,其中所述存储器分配表示在处理器上的和/或处理器外的存储器中为实现所述数据流图所需的数据创建逻辑存储器空间,并且所述执行片段表示对所述数据的操作;
将所述存储器分配和所述执行片段指定给虚拟可配置单元;
将所述执行片段分割成存储器片段和计算片段;
将所述存储器片段和所述计算片段指派给所述虚拟可配置单元;
将所述虚拟可配置单元分配给物理可配置单元;
将所述物理可配置单元放置在所述可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络;以及
生成具有用于所述放置的位置以及所路由的所述数据和控制网络的配置数据的比特文件,其中所述比特文件在被加载到所述可配置单元阵列的实例上时,使所述可配置单元阵列实现所述数据流图。
21.根据权利要求20所述的计算机实现的方法,还包括:
将所述虚拟可配置单元中的至少一个所述虚拟可配置单元分配给多个物理可配置单元;
将所述多个物理可配置单元放置在所述可配置单元阵列中的位置上,并且在所述放置的位置之间路由数据和控制网络;以及
生成具有用于所述放置的位置以及所路由的所述数据和控制网络的配置数据的比特文件,其中所述比特文件在被加载到所述可配置单元阵列的实例上时,使所述可配置单元阵列实现所述数据流图。
22.根据权利要求21所述的计算机实现的方法,还包括:
将所述物理可配置单元中的至少两个物理可配置单元融合成单个物理可配置单元;
将所述单个物理可配置单元放置在所述可配置单元阵列中的位置上,并且在所述放置的位置之间路由数据和控制网络;以及
生成具有用于所述放置的位置以及所路由的所述数据和控制网络的配置数据的比特文件,其中所述比特文件在被加载到所述可配置单元阵列的实例上时,使所述可配置单元阵列实现所述数据流图。
23.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质记录有计算机程序指令,以对高级程序进行变换以映射到具有可配置单元阵列的可重配置数据处理器上,所述指令在处理器上被执行时,实现方法,所述方法包括:
将所述高级程序的数据流图分割成存储器分配和执行片段,其中所述存储器分配表示在处理器上的和/或处理器外的存储器中为实现所述数据流图所需的数据创建逻辑存储器空间,并且所述执行片段表示对所述数据的操作;
将所述存储器分配指定给虚拟存储器单元,并且将所述执行片段指定给虚拟计算单元;
将所述执行片段分割成存储器片段和计算片段;
将所述存储器片段指派给所述虚拟存储器单元,并且将所述计算片段指派给所述虚拟计算单元;
将所述虚拟存储器单元分配给物理存储器单元,并且将所述虚拟计算单元分配给物理计算单元;
将所述物理存储器单元和所述物理计算单元放置在所述可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络;以及
生成具有用于所述放置的位置以及所路由的所述数据和控制网络的配置数据的比特文件,其中所述比特文件在被加载到所述可配置单元阵列的实例上时,使所述可配置单元阵列实现所述数据流图。
24.一种系统,所述系统包括耦合到存储器的一个或多个处理器,所述存储器被加载有计算机指令以对高级程序进行变换以映射到具有可配置单元阵列的可重配置数据处理器上,所述指令在所述处理器上被执行时实现动作,所述动作包括:
将所述高级程序的数据流图分割成存储器分配和执行片段,其中所述存储器分配表示在处理器上的和/或处理器外的存储器中为实现所述数据流图所需的数据创建逻辑存储器空间,并且所述执行片段表示对所述数据的操作;
将所述存储器分配指定给虚拟存储器单元,并且将所述执行片段指定给虚拟计算单元;
将所述执行片段分割成存储器片段和计算片段;
将所述存储器片段指派给所述虚拟存储器单元,并且将所述计算片段指派给所述虚拟计算单元;
将所述虚拟存储器单元分配给物理存储器单元,并且将所述虚拟计算单元分配给物理计算单元;
将所述物理存储器单元和所述物理计算单元放置在所述可配置单元阵列中的位置上,并且在放置的位置之间路由数据和控制网络;以及
生成具有用于所述放置的位置以及所路由的所述数据和控制网络的配置数据的比特文件,其中所述比特文件在被加载到所述可配置单元阵列的实例上时,使所述可配置单元阵列实现所述数据流图。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/536,192 | 2019-08-08 | ||
US16/536,192 US11080227B2 (en) | 2019-08-08 | 2019-08-08 | Compiler flow logic for reconfigurable architectures |
PCT/US2020/045478 WO2021026489A1 (en) | 2019-08-08 | 2020-08-07 | Compiler flow logic for reconfigurable architectures |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114450661A true CN114450661A (zh) | 2022-05-06 |
Family
ID=72179258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080067026.1A Pending CN114450661A (zh) | 2019-08-08 | 2020-08-07 | 用于可重配置架构的编译器流程逻辑 |
Country Status (8)
Country | Link |
---|---|
US (2) | US11080227B2 (zh) |
EP (1) | EP4010793A1 (zh) |
JP (1) | JP2022543457A (zh) |
KR (1) | KR20220042424A (zh) |
CN (1) | CN114450661A (zh) |
CA (1) | CA3147217A1 (zh) |
TW (1) | TW202127238A (zh) |
WO (1) | WO2021026489A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11709664B2 (en) * | 2020-06-02 | 2023-07-25 | SambaNova Systems, Inc. | Anti-congestion flow control for reconfigurable processors |
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 |
US11182221B1 (en) | 2020-12-18 | 2021-11-23 | SambaNova Systems, Inc. | Inter-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS) |
US11237880B1 (en) | 2020-12-18 | 2022-02-01 | SambaNova Systems, Inc. | Dataflow all-reduce for reconfigurable processor systems |
US11392740B2 (en) * | 2020-12-18 | 2022-07-19 | SambaNova Systems, Inc. | Dataflow function offload to reconfigurable processors |
US11782760B2 (en) | 2021-02-25 | 2023-10-10 | SambaNova Systems, Inc. | Time-multiplexed use of reconfigurable hardware |
US11442696B1 (en) | 2021-03-23 | 2022-09-13 | SambaNova Systems, Inc. | Floating point multiply-add, accumulate unit with exception processing |
CN113934681B (zh) * | 2021-12-15 | 2022-09-13 | 北京清微智能信息技术有限公司 | 一种可重构计算阵列及构建方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6964029B2 (en) * | 2002-10-31 | 2005-11-08 | Src Computers, Inc. | System and method for partitioning control-dataflow graph representations |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US7734895B1 (en) * | 2005-04-28 | 2010-06-08 | Massachusetts Institute Of Technology | Configuring sets of processor cores for processing instructions |
AU2015289442B2 (en) * | 2014-07-18 | 2019-07-11 | Ab Initio Technology Llc | Managing lineage information |
RU2018130817A (ru) * | 2016-01-26 | 2020-02-27 | Айкэт Ллс | Процессор с реконфигурируемым алгоритмическим конвейерным ядром и алгоритмическим согласующим конвейерным компилятором |
US10558575B2 (en) * | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10452452B2 (en) * | 2017-04-17 | 2019-10-22 | Wave Computing, Inc. | Reconfigurable processor fabric implementation using satisfiability analysis |
US10445098B2 (en) * | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US10331836B1 (en) * | 2017-10-11 | 2019-06-25 | Xilinx, Inc. | Loop optimization for implementing circuit designs in hardware |
US11120188B2 (en) * | 2019-01-28 | 2021-09-14 | King Fahd University Of Petroleum And Minerals | FPGA virtualization |
-
2019
- 2019-08-08 US US16/536,192 patent/US11080227B2/en active Active
-
2020
- 2020-08-07 WO PCT/US2020/045478 patent/WO2021026489A1/en unknown
- 2020-08-07 JP JP2022507592A patent/JP2022543457A/ja active Pending
- 2020-08-07 EP EP20760710.2A patent/EP4010793A1/en active Pending
- 2020-08-07 CA CA3147217A patent/CA3147217A1/en active Pending
- 2020-08-07 CN CN202080067026.1A patent/CN114450661A/zh active Pending
- 2020-08-07 KR KR1020227006963A patent/KR20220042424A/ko unknown
- 2020-09-10 TW TW109131179A patent/TW202127238A/zh unknown
-
2021
- 2021-05-20 US US17/326,128 patent/US11714780B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20210042259A1 (en) | 2021-02-11 |
JP2022543457A (ja) | 2022-10-12 |
US11714780B2 (en) | 2023-08-01 |
KR20220042424A (ko) | 2022-04-05 |
WO2021026489A1 (en) | 2021-02-11 |
US11080227B2 (en) | 2021-08-03 |
TW202127238A (zh) | 2021-07-16 |
EP4010793A1 (en) | 2022-06-15 |
US20210271630A1 (en) | 2021-09-02 |
CA3147217A1 (en) | 2021-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11714780B2 (en) | Compiler flow logic for reconfigurable architectures | |
US11816560B2 (en) | Performance estimation-based resource allocation for reconfigurable architectures | |
US11182221B1 (en) | Inter-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS) | |
US11709664B2 (en) | Anti-congestion flow control for reconfigurable processors | |
US11782729B2 (en) | Runtime patching of configuration files | |
US11182264B1 (en) | Intra-node buffer-based streaming for reconfigurable processor-as-a-service (RPaaS) | |
CN115151898A (zh) | 基于用户规范的可重配置架构上的操作单元图的高效执行 | |
US20220147328A1 (en) | Compile time logic for inserting a buffer between a producer operation unit and a consumer operation unit in a dataflow graph | |
US11782760B2 (en) | Time-multiplexed use of reconfigurable hardware | |
TW202230129A (zh) | 用於檢測串流相容和廣播相容的資料存取型樣之編譯時邏輯 | |
US20230409395A1 (en) | Runtime Virtualization of Reconfigurable Data Flow Resources | |
US11983141B2 (en) | System for executing an application on heterogeneous reconfigurable processors | |
US20230076473A1 (en) | Memory processing unit architecture mapping techniques | |
WO2023129546A1 (en) | Compiler-based input synchronization for processor with variant stage latencies | |
Shahsavani et al. | Efficient compilation and mapping of fixed function combinational logic onto digital signal processors targeting neural network inference and utilizing high-level synthesis | |
CN112906877A (zh) | 用于执行神经网络模型的存储器架构中的数据布局有意识处理 | |
US20240069770A1 (en) | Multiple contexts for a memory unit in a reconfigurable data processor | |
US20240054099A1 (en) | Cluster-Based Placement and Routing of Memory Units and Compute Units in a Reconfigurable Computing Grid | |
US20230325346A1 (en) | Buffer Splitting | |
US20230273879A1 (en) | Critical Stage Optimization for Reconfigurable Architectures | |
US20230401480A1 (en) | Hardware acceleration of machine learning designs | |
US20230325312A1 (en) | Merging Buffer Access Operations in a Coarse-grained Reconfigurable Computing System | |
US20230385077A1 (en) | Forward-style Gradient GeMMs |
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 |