CN111566616A - 多处理器***的编程流程 - Google Patents
多处理器***的编程流程 Download PDFInfo
- Publication number
- CN111566616A CN111566616A CN201880084639.9A CN201880084639A CN111566616A CN 111566616 A CN111566616 A CN 111566616A CN 201880084639 A CN201880084639 A CN 201880084639A CN 111566616 A CN111566616 A CN 111566616A
- Authority
- CN
- China
- Prior art keywords
- intermediate representations
- generate
- tasks
- processors
- task
- 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
- 238000000034 method Methods 0.000 claims abstract description 97
- 238000004891 communication Methods 0.000 claims abstract description 72
- 238000005457 optimization Methods 0.000 claims abstract description 66
- 230000015654 memory Effects 0.000 claims description 71
- 238000013507 mapping Methods 0.000 claims description 39
- 238000004088 simulation Methods 0.000 claims description 17
- 230000004044 response Effects 0.000 claims description 3
- 238000012545 processing Methods 0.000 abstract description 38
- 230000015572 biosynthetic process Effects 0.000 abstract description 7
- 238000003786 synthesis reaction Methods 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 33
- 230000008569 process Effects 0.000 description 28
- 208000035982 type 10 mucopolysaccharidosis Diseases 0.000 description 20
- 238000010586 diagram Methods 0.000 description 15
- 238000013459 approach Methods 0.000 description 14
- 238000013461 design Methods 0.000 description 14
- 230000007246 mechanism Effects 0.000 description 13
- 238000012360 testing method Methods 0.000 description 11
- 238000012546 transfer Methods 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 6
- 230000000875 corresponding effect Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 230000033001 locomotion Effects 0.000 description 5
- 239000000047 product Substances 0.000 description 5
- 230000001934 delay Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000012512 characterization method Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000009977 dual effect Effects 0.000 description 3
- 238000000605 extraction Methods 0.000 description 3
- 239000004744 fabric Substances 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 230000002194 synthesizing effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 239000000872 buffer Substances 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 208000000785 Invasive Pulmonary Aspergillosis Diseases 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 231100000871 behavioral problem Toxicity 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000000919 ceramic Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000010894 electron beam technology Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 208000023368 generalized pustular psoriasis Diseases 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- 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/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Hardware Redundancy (AREA)
Abstract
公开了具有针对多处理***的优化的编译以及对处理元件进行编程的相关方法的各种实施例,多处理***具有针对高性能和低功耗被优化的处理元件。可以将应用源代码初始编译为中间表示。在初始编译之后,可以对资源进行映射并执行通信合成。可以在将可执行映像加载到多处理器***上之前执行仿真和调试。在每个步骤,可以针对进行可能的优化执行检查,并使用检查的结果重复一个或多个步骤。
Description
通过引用合并
标题为“Memory-Network Processor with Programmable Optimizations”的美国专利9430369,其发明人是Michael B.Doerr,Carl S.Dobbs,Michael B.Solka,MichaelR.Trocino,Kenneth R.Faulkner,Keith M.Bindloss,Sumeer Arya,John Mark Beardslee和David A.Gibson,其全部内容通过引用合并于此,就如同在本文全部且完整地进行了阐述。
技术领域
本发明涉及多处理器***,并且更特别地涉及处理器操作和执行的改进,以及针对此类***的软件的开发。
背景技术
通用硬件***的主要目标是在保留完整的可编程性的同时实现专用的(非可编程的)硬件性能。从历史上看,这两个概念是截然相反的。专用硬件是一种固定的硬件解决方案,其以可能最有效的方式执行特定功能。这通常是依照单位功能的能量或单位(一个或多个)操作的能量以及以能与产品的部分成本相关的单位(电路)面积的功能来衡量的。芯片产品的成本由许多因素组成,包括裸片(die)面积和最终封装。成本还应考虑开发产品的整个生态***。这种生态***成本包括将特定应用简化为特定硬件解决方案的时间,组成整个***所需的特定硬件解决方案的数量,以及通过定制化通信和存储器结构集成所有特定硬件解决方案所花费的时间,等等。因此,需要一种完全集成的解决方案以通过其自定义互连来支持众多特定的硬件解决方案中的所有,这导致在单个芯片裸片上有非常大的面积要求。历史上,此过程已导致解决方案在面积、能量和上市时间方面效率低下。
在考虑可编程性和定位(targeting)硬件的概念时,从硬件架构和软件开发风格的角度来看,市场或前景是由以下产品代表的:由英特尔、AMD和ARM提供的通用处理器(GPP);来自NVIDIA和AMD的图形处理单元(GPU);来自德州仪器和亚德诺半导体(AnalogDevices)的数字信号处理器(DSP);来自Xilinx、Altera等的现场可编程门阵列(FPGA);来自Cavium和Tilera的多核/众核处理器;以及专用集成电路(ASIC)或片上***(SoC)。
基于思考了40多年的非常古老但得到证明的硬件架构,GPP用于通用处理,即,试图样样都行。它们的主流目的是运行用户界面(UI)和高度交互的UI密集型应用,例如,MSWord、Excel、电子邮件等,并带有支持的操作***(例如,Windows和Linux)。影响功耗的硬件特性是多级缓存、复杂的硬件存储器管理单元、大型总线和大型时钟结构。总而言之,它们会耗费大量功率来执行这些任务。从软件开发的角度来看,它被认为是最简单的要定位的软件编程模型。这是从用户正在开发连续或串行执行的单个线程的角度出发的。当引入并行性或多个硬件线程(大于大约四个线程)时,对它们进行有效编程的能力就变得更加困难。这是由于以下事实:从根本上说,该架构不是为支持并行线程操作而开发的,作为结果,硬件架构需要管理大量开销复杂性。软件编程模型需要引入API或语言扩展,以便支持多个软件线程的定义。尽管这不一定很复杂,但是不幸的是,当前的GPP硬件架构需要这种复杂性。
在高层,在世界上的每台超级计算机中已与C、C++、Fortran等一起广泛使用多年的API是MPI(消息传递接口)API,这是自1990年代初以来的行业标准。这是非常简单的、被充分理解的API,它不限制硬件实现路径。MPI API允许以独立于硬件的方式定义软件线程和通信。这不同于OpenMP、Coarray Fortran、OpenCL等以及固有地规定了假定的基础硬件模型(其限制了解释灵活性并导致前向兼容性问题)的其他语言/API。换句话说,使用这些后面的语言/API,就要求程序员为定位的每个新硬件平台重写程序。
历史上已经开发了GPU用于处理和定位数据显示。它们在硬件架构上受其核外(外部)存储器模型要求和内部核心存储器模型要求的约束。核外存储器需要GPP将数据放置在GPU存储器空间中。然后,GPU提取数据,以管线方式对其进行操作,然后将其放回其外部存储器空间中。从此处,可以将数据发送到显示器,或者GPP需要将数据移出GPU存储器空间,以便在通用处理下的操作中进一步使用/存储。硬件效率低下的原因是:(1)移动数据以支持核外硬件限制所需的支持;以及(2)有限的核内存储器结构,其中数据限于在流水线型的管线中进行处理——类似于深度管线化的SIMD机器。结果是由于处理数据的硬件低效率而导致的高功率利用率。所使用的软件编程模型是极度硬件中心的、OpenCL、CUDA等,因此实现效率非常复杂,并且便携性不好,当尝试移至新的硬件定位平台时必须重新编写代码并重新构建代码。
DSP可以被视为具有精简的并定位于通用信号处理的指令集的GPP。他们遭受与其兄/姐GPP相同的缓存、MMU和总线困境。此外,任何真正高吞吐量的处理功能(例如,Viterbi/Turbo解码或运动估计)都已简化为能力有限的ASIC加速器,通常在商业市场中仅支持有限的一组特定标准。当定位单个硬件线程时,编程模型与GPP类似,但是由于执行单元硬件中的信号处理指令方法,要实现任何高效率都需要手工组装功能或使用DSP公司的库。当创建类似于上面讨论的并行GPP的多并行DSP架构时,问题进一步恶化。
FPGA是完全不同的硬件方法,其中功能的定义可以在位级别完成,并且逻辑功能之间的通信通过可编程的导线结构完成。这种硬件方法带来了巨大的开销和复杂性。因此,可以使用硬件编程语言(例如,Verilog或VHDL)执行有效的编程。由于可编程布线和可编程逻辑引入了时序收敛障碍,类似于ASIC/SOC所要求的,但具有结构化的导线结构,因此编译过程要复杂得多。当由于FPGA仅执行被编程的功能而不执行任何其他功能使得一次仅比较一个功能时,特定功能的功耗和性能吞吐量显然要比GPP或GPU好得多。然而,如果试图在FPGA中实现GPP的所有功能,则显然会比GPP差很多。在硬件级别进行编程的困难是显而易见的(例如,时序收敛)。对FPGA进行编程实际上不是“编程”,而是逻辑/硬件设计,并且VHDL/Verilog是逻辑/硬件设计语言,而不是编程语言。
从硬件的角度来看,几乎所有的多核/众核架构都采用核心处理器、高速缓存、MMU、总线以及所有相关联的逻辑,并将它们复制到裸片上,它们四周有通信总线/构造。多核架构的示例为IBM的Cell、英特尔和AMD的四核和N多核、Cavium和Tilera的产品、许多定制SoC等。此外,在多核架构中实现的功耗降低幅度很小。这种相当明显的结果源自以下事实:多核方法仅复制了GPU方法。多核架构中唯一真正的功率节省就是减少了某些IO驱动器,这些驱动器现在不需要了,因为核心是在附加的通信总线上连接的,而之前它们是在分离的裸片上。因此,多核方法不会导致任何更少的功率。其次,软件编程模型没有从上面讨论的GPP中得到改进。
为其他方法确定的问题列表是,对于特定市场,为什么通常认为实现性能效率和成本目标的唯一方法是开发具有特定GPP、DSP和ASIC加速器以形成SoC的定制芯片。SoC在需要时提供可编程性,并为特定功能提供ASIC性能,以平衡功耗和成本。然而,现在的软件编程模型比在上面的可编程硬件解决方案下讨论的更为复杂。此外,SoC可能会导致与完全可编程解决方案相关联的灵活性丧失。
所有这些可编程硬件解决方案之间的共同点是,当今市场上代表的软件编程模型关注于推断执行模型和底层硬件架构,以更有效地支持其定位。通过查看一些较流行的并行编程语言的关键特性,可以观察到对将执行模型的功能外推到软件编程模型的关注。代表当今使用方法的一些示例是OpenMP、OpenCL和MPI。
OpenMP(开放式多处理)是一种行业标准API,其支持共享存储器多处理编程。OpenMP包括一组会影响运行时行为的编译器指令、库例程和环境变量。它通过并行化方法支持多线程,从而使主线程(连续执行的一系列指令)派生指定数量的从属线程,并在在它们之间划分任务。然后线程同时运行,其中运行时环境根据使用情况、机器负载和其他因素将线程分配给不同的资源或处理器。线程的数量可以由运行时环境基于环境变量或在代码中使用函数来分配。打算并行运行的代码部分相应地被用导致线程在执行该部分之前形成的预处理器指令标记。在C/C++中,这通过使用#pragmas。默认情况下,每个线程独立执行代码的并行化部分。任务并行化和数据并行化都可以实现。执行并行化的代码后,线程将加回主线程,该主线程将继续到程序结束。为了支持线程间通信,可以使用OpenMP的扩展或另一不同的行业标准API,例如MPI(消息传递接口)。
开放式计算语言(OpenCL)是用于编写程序的框架,其目的是能够在包括中央处理单元(CPU)、图形处理单元(GPU)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)和其他处理器的异构平台上执行。它被设计为支持有限抽象的接近硬件的接口。因此,基于OpenCL的程序通常需要对底层硬件有深入的了解,以实现可接受的性能。当重新定位到不同硬件架构时,OpenCL程序也需要重构。
OpenCL支持使用ANSI C编程语言编写内核,但有一些限制和补充。它不允许使用函数指针、递归、位字段、可变长度数组和标准头文件。语言被扩展为支持矢量类型和操作、同步以及函数的并行化以与工作项/组一起使用。应用编程接口(API)用于定义并然后控制平台。在过程级别(course-level)上,OpenCL支持使用基于任务和基于数据的并行化的并行计算。
消息传递接口(MPI)是一种与标准化语言无关、可扩展且便携的消息传递通信协议API。MPI API意图以语言无关的方式,使用特定于语言的语法(绑定),在一组进程(已映射到节点/服务器/计算机实例)之间提供基本的虚拟拓扑、同步和通信功能。MPI API标准定义了库例程的核心的语法和语义,其包括但不限于对各种行为可定义的点对点以及集体/广播通信发送/接收操作以及进程的同步化的支持。MPI仍然是当今高性能计算中使用的支配模型。
开发用于在多处理器***上并行执行的软件应用的其他方法通常需要在开发的容易性和并行执行的效率之间进行权衡。换言之,通常情况是,程序员的开发过程越容易,生成的可执行程序在硬件上同时执行的效率就越低;相反,更有效的并行执行通常需要程序员付出更多的努力,即,更详细地设计程序,以避免低效的处理并使用目标硬件的效率增强功能。
因此,需要改进的***和方法来协助应用或***级视图的软件描述,以驱动软件编程模型及其随后使用定位执行模型和底层硬件架构。还需要的改进是提供通过该过程实现应用的高效可编程实现的机制。
发明内容
公开了用于准备用于多处理器阵列的应用软件的各种实施例。多处理器阵列可以包括多个处理器(例如,在2D或3D网格中)以及散布在处理器之间的多个存储器和路由元件。可以提供路由构造以使用路由元件连接各种处理器和存储器。
可以使用应用源代码来执行前端编译,以生成多个中间表示和连接性信息。多个中间表示中的特定中间表示可以对应于多个任务中的特定任务,其中连接性信息包括多个连接,并且其中特定连接指定多个任务中的第一任务与多个任务中的第二任务之间的通信。可以使用多个中间表示和连接性信息将应用源代码中包括的逻辑对象映射到多处理器阵列中包括的物理资源,以生成资源映射。然后可以选择多个连接中的每个连接的相应实现,并且可以使用多个中间表示来执行第一优化操作以生成多个经优化的中间表示。可以使用多个经优化的中间表示来生成可执行代码。然后可以对可执行代码进行仿真以生成仿真结果,并且可以将可执行代码加载到多处理器阵列上。
在非限制性实施例中,可以对应用源代码进行解析以生成初始中间表示,并且可以使用该初始中间表示来执行至少一个第二优化操作以生成多个中间表示。使用该多个中间表示,可以确定多个任务之间的连接性以生成多个连接,并且可以将该多个中间表示和连接性信息存储在项目数据库中。多处理器阵列可以包括多个处理器以及散布在处理器之间的存储器。在映射逻辑对象时,可以将多个任务中的特定任务分配给多个处理器中的特定处理器,并且可以将与该特定任务相关联的变量分配给与特定处理器相关联(例如,物理上邻近)的相应数据存储器。
附图说明
图1是示出多处理器***(MPS)的一个实施例的框图。
图2示出了由均一地散布有数据存储器路由器的处理元件组成的示例MPS。
图3是示出在可动态配置的处理元件中包括的数据路径的实施例的框图。
图4是示出编译流程的实施例的流程图。
图5是示出多任务编译流程的实施例的流程图。
图6是示出具有优化的多处理器编译的实施例的框图。
图7是示出多处理器编译流程的实施例的流程图。
图8是示出通过优化的多处理器编译流程的实施例的流程图。
图9是示出用于执行前端编译的方法的实施例的流程图。
图10是示出用于执行资源映射的方法的实施例的流程图。
图11是示出用于执行通信合成的方法的实施例的流程图。
尽管本公开容易有各种修改和替代形式,但是其特定实施例在附图中以示例的方式示出,并且将在本文中进行详细描述。然而,应当理解,附图及其详细描述并非旨在将本公开限制为所示的特定形式,相反,其意图是涵盖落入由所附权利要求限定的本公开的精神和范围内的所有修改、等同和替代。本文使用的标题仅用于组织目的,并不意味着用来限制本说明书的范围。如在本申请中通篇所使用的,词语“可以”以允许的意义(即,意味着有可能)而不是强制性的意义(即,必须)使用。类似地,词语“包括”、“包含”和“含有”意思是包括但不限于。
各种单元、电路或其他组件可以被描述为“被配置为”执行一个或多个任务。在这样的上下文中,“被配置为”是对结构的广泛叙述,通常意味着“具有电路”在操作期间执行一个或多个任务。这样,即使单元/电路/组件当前未开启,也可以将单元/电路/组件配置为执行该任务。通常,形成与“被配置为”相对应的结构的电路可以包括硬件电路。类似地,为了便于描述,各种单元/电路/组件可以被描述为执行一个或多个任务。这样的描述应该被解释为包括短语“被配置为”。叙述被配置为执行一个或多个任务的单元/电路/组件明确地旨在不引用35U.S.C§112,对该单元/电路/组件的第六段解释。更一般地,对任何元件的叙述都明确地旨在不引用35U.S.C§112,对该元件的第六段解释,除非明确叙述了“用于…的装置”或“用于…的步骤”的语言。
具体实施方式
术语
计算机***——术语“计算机***”是指各种类型的计算或处理***中的任何一种,包括个人计算机***(PC)、大型计算机***、工作站、网络家电、互联网家电、个人数字助理(PDA)、网格计算***或其他设备或设备组合。一般而言,术语“计算机***”可以广义地被定义为包括具有执行来自存储介质的指令的至少一个处理器的任何设备(或设备组合)。
软件应用——术语“软件应用”(在本文中也称为“应用”)旨在具有其普通含义的全部范围,并且包括任何类型的程序指令、代码、脚本和/或数据或其组合,它们可以被存储在一个或多个存储器中并由一个或多个处理器执行。示例性的软件应用包括以诸如C、C++、FORTRAN、JavaTM、汇编语言等基于文本的编程语言编写的程序;图形程序(以图形编程语言编写的程序);汇编语言程序;已编译为机器语言的程序;脚本;以及其他类型的可执行软件。一般而言,程序是一组指令,其指定一个或多个数据结构并指定为了执行一个或多个功能而针对那些结构中的数据要采取的程序步骤。程序通常定位于特定机器架构。更抽象地,程序的程序步骤可以被称为其算法。
应用可以在多处理器***(MPS)的一个或多个处理器上执行,并且可以从MPS的一个或多个本地存储器中读取数据和/或向其写入数据。应用可以包括一个或多个计算任务(或简称为“任务”),其中每个任务通常在MPS的单个处理器上运行,并且可以与来自一个或多个应用的一个或多个任务共享处理器。应用可以执行特定的功能或操作。如果应用包括多于一个任务,则这些任务可以彼此通信以执行功能或操作。
MPS可以同时执行多个应用,例如,其中应用彼此并行执行。应用可以彼此通信,并且由应用执行的各个功能或操作可以在彼此之上构建以执行更大或更高级别的功能或操作。
软件编程模型——简单地说,软件编程模型是机器及其操作环境的用户视图。软件编程模型包括可以编写应用的(一种或多种)语言,以及提供抽象化的、经封装的功能的库,其超出用(一种或多种)语言直接表达的功能。软件编程模型还包括以下机制:应用通过这些机制来与其自身外部的实体(I/O、扩展的存储器等)交互,并且通过这些机制来表达关于应用的元信息(例如,性能约束或要求)。编程模型的两个主要部分是控制模型和通信模型,控制模型表示如何在应用中表达或从应用导出并行化,通信模型表示应用的并行实体如何共享信息。
软件编程模型呈现了当最终执行应用时将发生的实际控制和数据流以及通信的“理想化”视图。操作的语义是底层实现“好像”完全按照软件编程模型中所描述的那样执行;只要获得相同的效果(答案),采取的实际步骤并不重要。由于代码和/或数据大小、速度、功耗等方面的效率原因,实际的实现步骤可能有所不同。
软件编程模型的一个重要考虑是,它同时为用户提供支持应用的表达(及其操作)的机制,这些机制对用户来说是方便、自然和直观的,同时还可以捕获足够的信息以通过工具集(编译器等),然后在执行模型下,支持对应用进行正确有效的处理。
硬件编程/执行模型——硬件编程模型或执行模型表示如何执行应用。它定义了如何表达与应用的逻辑和数据对象相对应的信息集,以及如何随着时间的推移处理该信息以完成应用指定的功能。***工具(编译器、并行提取器、布局布线等)的目的是将应用从其软件编程模型表达转换为相应的执行模型表达。执行模型包括支持软件编程模型所描述的功能(例如,通过库)以及监视、调解和管理硬件的使用(例如,通过O/S)所需的机制。
执行模型可以与软件编程模型相当接近,或者可以完全不同;软件编程模型的不同方面可以与执行模型具有不同程度的直接对应关系。对应等级和底层硬件架构与原始的(软件)编程模型的相似程度有关。相似度越高,对应度越高。
底层硬件架构——底层硬件架构是在其上执行计算的物理设备的架构。在此级别上,所有操作都直接对应于由设备执行的物理操作。可以描述底层硬件架构的抽象级别可以从高级别概念架构(对于在设计空间探索期间的评估、仿真、表征和权衡分析来说有用)到低级别实现架构(对于驱动待制造设备的物理设计来说有用)。即使在实现级别,底层硬件架构的不同实例在能力或容量方面也可能有所不同。例如,一个实例可以实现10x10的处理单元网格,而另一个实例可以仅实现6x6的网格。尽管能力不同,但每个都与底层硬件架构保持一致。
自动——指由计算机***(例如,由计算机***执行的软件)或设备(例如,电路、可编程硬件元件、ASIC等)执行的动作或操作,而无需直接指定或执行动作或操作的用户输入。因此,术语“自动”与用户手动执行或指定的操作相反,在用户手动执行或指定的操作中,用户提供输入以直接执行操作。可以通过由用户提供的输入来启动自动过程,但是“自动”执行的后续动作不由用户指定,即,不是“手动”执行的,在“手动”执行中用户指定要执行的每个动作。例如,通过选择每个字段并提供指定信息的输入(例如,通过键入信息、选择复选框、单选等)来填写电子表单的用户手动填写表单,即使计算机***必须响应于用户动作更新表单。该表单可以由计算机***自动填写,其中计算机***(例如,在计算机***上执行的软件)分析表单的字段并填写表单,而无需任何用户输入来指定字段的答案。如上所述,用户可以调用表单的自动填写,但不参与表单的实际填写(例如,用户不手动指定字段的答案,而是它们被自动完成)。本说明书提供了响应于用户已采取的动作而自动执行的操作的各种示例。
处理元件(PE)——多核处理器中的单个可编程核心。
数据存储器——用于存储由一个或多个PE使用的数据的存储器。
I/O端口——从片外进出计算机处理器的连接。
路由——两个数据存储器之间的物理连接,其可用于在两个存储器之间传送数据。
直接存储器访问(DMA)——一种用于使用路由在两个数据存储器之间传送数据的方法。DMA访问不通过PE传送数据。
共享存储器——存储在数据存储器中的数据可由两个或更多个任务访问。
任务——由实现特定功能的应用源代码组成的计算单元。任务被分配给多核处理器上的一个或多个PE。
变量——与符号名称配对的存储位置。变量在任务中被引用,并被分配给任务可访问的数据存储器中的(一个或多个)位置。
输入/输出(IO)——数据通过IO端口从片外读取或片外写入。
通信(Comm)——任务或IO与两个或更多个其他任务之间的用于传送数据的抽象连接。可以使用路由、共享存储器或任何其他可用物理资源来实现通信。
通信API——一组例程和协议,例如MPI(消息传递接口),用于在任务之间或I/O与任务之间传送数据。
资源映射——将抽象对象(任务、变量、通信、I/O等)分配给处理器芯片上的物理资源的过程。所有资源都可以手动、自动或两者组合地映射。
任务映射——将任务分配给PE以及将IO分配给IO端口的资源映射步骤。
变量分配——将变量映射到数据存储器,并在数据存储器中为变量分配地址空间的资源映射步骤。
通信映射——将通信分配给诸如共享存储器或路由之类的物理资源的资源映射步骤。
中间表示(IR)——编译器内部用来表示源代码的数据结构。IR有利于进一步处理,例如优化和翻译。
转向图1,描绘了示出多处理器***(MPS)的一个实施例的框图。在所示实施例中,MPS 10包括多个处理元件(PE)和多个数据存储路由器(DMR),DMR也可以被称为可动态配置的通信器或可动态配置的通信元件,其相耦合以与彼此通信数据和指令。如本文所使用的,PE也可以被称为PE节点,并且DMR也可以被称为DMR节点。
处理***(MPS)10可以用于当前使用GPMC、DSP、FPGA或ASIC的各种***和应用中的任何一种。因此,例如,处理***10可以用于各种类型的计算机***或需要计算的其他设备中的任何一种。在一个预期的实施例中,处理***10用作数字视频显示***中的信号处理设备。
在一个实施例中,PE可以包括被配置用于操纵数据的一个或多个算术逻辑单元(ALU)、被配置用于控制ALU的一个或多个指令处理单元(IPU)、被配置为保存指令或数据的一个或多个存储器、和各种复用器和解码器。这样的实施例可以包括多个端口(“处理器端口”),其中一些端口可以被配置用于去往DMR的连接,而其他端口可以被配置用于去往其他PE的连接。
在一个实施例中,DMR可以包括被配置为保存数据和指令的一个或多个随机存取存储器(RAM)、可配置的控制器、诸如纵横开关的网络交换机、寄存器和复用器。这样的实施例可以包括多个端口,其中一些端口可以被配置用于去往PE的连接(在此称为PE型端口),而其他端口可以被配置用于去往DMR的连接(在此称为DMR型端口)。要注意的是,对于任何给定端口,无论是被配置用于去往还是来自DMR或PE的连接,在特定的时钟周期内可通过这样的给定端口传送的数据量在各种实施例中可能会有所不同。例如,在一个实施例中,给定端口可以被配置为在每个时钟周期传送一个数据字,而在另一实施例中,给定端口可以被配置为在每个时钟周期传送多个数据字。在又一个实施例中,给定端口可以采用诸如时分复用之类的技术来在多个时钟周期上传送一个数据字,从而减少包括该端口的物理连接的数量。
在MPS 10的一个实施例中,每个PE可以包括为指令预留的小的本地存储器,并且可以包括非常少的本地数据存储。在这样的实施例中,邻近每个PE的DMR可以被配置为向给定PE提供操作数。在特定实施例中,对于许多PE指令,给定PE可以在一个时钟周期内从邻近的DMR读取操作数、执行ALU操作、并将ALU结果存储到给定的邻近DMR。因此,在紧接执行之后的时钟周期内,来自一个PE的ALU结果可用于若干其他PE。以这种方式产生结果可以使邻近的PE的执行紧密协调或“紧密耦合”。
如本文所使用的,从给定DMR或PE的角度来看,邻近的DMR或PE是指可以在特定的延迟内从给定DMR或PE访问的DMR或PE。在一些实施例中,定义邻近关系的程度的延迟可以例如取决于诸如时钟速度之类的因素而变化。此外,在一些实施例中,可以定义多个邻近等级,这些等级可以对应于不同的访问延迟。例如,在一个实施例中,“最近的邻居”可以被定义为可以在其被请求的同一时钟周期内提供数据的设备,“次近的邻居”可以被定义为可以在其被请求后的一个时钟周期内提供数据的设备,依此类推。在其他实施例中,可以想到,可以使用其他度量来量化邻近关系。
在给定的MPS实施例中,一些DMR和PE可以在逻辑上邻近其他DMR和PE。如本文所使用的,“逻辑上邻近”是指两个设备之间的关系,例如,一个DMR和另一DMR,或者一个DMR和一个PE,使得一个设备的一个或多个端口直接连接到另一设备的相应端口,而无需通过介于中间的DMR或PE。此外,在给定的MPS实施例中,一些DMR和PE可以在物理上邻近其他DMR和PE。如本文所使用的,“物理上邻近”是指两个设备之间的关系,例如,一个DMR和另一DMR,或者一个DMR和一个PE,使得没有其他DMR或PE在物理上位于该两个设备之间。
在一些MPS实施例中,逻辑上和/或物理上邻近的诸如DMR和PE之类的设备也是邻近或邻居设备。然而,应注意,在一些实施例中,给定设备之间的逻辑和/或物理相邻并不意味着给定设备之间的邻近关系或特定程度的邻近关系。例如,在一个实施例中,一个DMR可以直接连接到相距相当远的另一DMR。这样的一对可以在逻辑上相邻但不在物理上相邻,并且从一个DMR到另一个DMR的信号传播时间可能太大而无法满足邻居的延迟要求。类似地,在一个实施例中,一个DMR可以在物理上与另一DMR相邻,但是不直接与其相连,因此不在逻辑上与其相邻。从一个DMR到另一个DMR的访问可能会遍历一个或多个中间节点,并且所产生的运输延迟可能太大而无法满足邻居的延迟要求。
取决于MPS 10的给定实施例的技术和实现,可以将DMR的多个端口的特定数量以及DMR存储器的大小与DMR的总体期望执行速度和大小进行平衡。例如,一个DMR实施例可以包括4个PE型端口、4个DMR型端口和4K字的存储器。这样的DMR实施例可以被配置为提供直接存储器访问(DMA)机制。DMA机制可以允许给定DMR向其他DMR或从其他DMR,或者向或从MPS 10外部的位置高效复制数据,同时PE计算结果。
在MPS 10的一个实施例中,可以以若干不同方式之一在DMR之间传送数据和指令。可以将串行总线提供给MPS 10中的所有存储器;这样的总线可用于从外部存储器初始化MPS 10或用于支持对MPS数据结构的测试。对于短距离传送,可以对给定PE进行编程,以直接将数据移入或移出其邻居DMR。为了在更长的距离上传送数据或指令,可以在DMR的网络中动态创建和销毁通信路径。
为了这种更长距离的数据传送的目的,MPS 10内的互连DMR网络可以构成针对通信路径的交换路由结构(SRF)。在这样的实施例中,可以存在至少两种用于管理SRF中的通信路径的方法。第一种方法是通过全局编程,其中可以通过软件控制(例如,由人类程序员或具有路由能力的编译器)选择路径,并且可以将指令编码到DMR配置控制器中以对纵横开关(crossbar)进行适当编程。为了创建路径,可以使用特定的路由功能对沿路径的每个DMR进行显式编程。在频繁创建和销毁路径的动态环境中,可能需要大量的纵横开关配置代码,其存储进而可能会消耗潜在受限的DMR RAM资源。
用于管理通信路径的第二种方法称为“虫洞路由”。为了实现虫洞路由,每个DMR可以包括一组导向功能和一种用于通过SRF停止和重新启动一系列字(称为消息)的进度的机制。因为导向功能可以被所有通信路径共同使用和重复使用,所以可占用DMR RAM的配置代码量可以比上述全局编程方法小得多。对于虫洞路由方法,仍然可以使用软件控制来选择路径要使用的特定链路,但是路径创建(本文中也称为建立)和破坏/链路释放(本文中也称为“拆卸”)的进程可以以最少的软件干预在硬件中实现。
为了防止路径上的数据字的潜在丢失,MPS 10的实施例可以沿着路径在接收器和发送器之间实现流控制。流控制是指这样的一种机制,该机制可以在发送器的相应接收器可以不再接收数据的情况下停止发送器,并在发送器的相应接收器准备好接收数据时重新启动发送器。由于停止和重新启动路径上的数据流与在虫洞路由中停止和重新启动消息的进程有许多相似之处,因此可以将两者组合为集成方案。
在一个实施例中,MPS 10可以包括以均一阵列连接在一起的多个PE和DMR,这些PE可以是相同的,并且这些DMR可以是相同的。在均一阵列中,大多数PE可以是相同的,并且大多数PE中的每一个可以具有与DMR相同数量的连接。同样,在均一阵列中,大多数DMR可以是相同的,并且大多数DMR中的每一个可以具有与其他DMR和PE相同数量的连接。在一个MPS实施例中,PE和DMR可以以基本同构的方式散布。如本文所使用的,基本同构的散布是指其中PE与DMR的比率在阵列的大部分子区域上一致的布置。
以基本同构的方式布置的均一阵列可以具有某些有利的特性,例如提供可预测的互连图样并且使得软件模块能够在整个阵列上重复使用。在一个实施例中,均一阵列可以使得能够设计和测试PE和DMR的少量实例。然后可以通过制造包括DMR和PE的单元并然后多次重复或“拼贴(tiling)”这种单元来组装***。这种方法可以通过重复使用公共***元素来降低设计和测试成本。
还应注意的是,PE和DMR的可配置性质可以允许将各种非均一行为编程为在物理均一的阵列上发生。然而,在替代实施例中,MPS 10也可以形成有不均一的DMR和PE单元,这些不均一的DMR和PE单元可以以规则或不规则的阵列或者甚至以随机的方式连接。在一个实施例中,PE和DMR互连可以被实现为电路迹线,例如在集成电路(IC)、陶瓷衬底或印刷电路板(PCB)上。然而,在替代实施例中,这样的互连可以是多种微型通信链路中的任何一种,例如用于电磁能量(即,无线电或光能)的波导、无线(即,非制导的)能量、粒子(例如,电子束)、或分子上的电势。
MPS 10可以在单个集成电路上实现。在一个实施例中,多个MPS集成电路可以组合以产生更大的***。MPS 10的给定实施例可以使用硅集成电路(Si-IC)技术来实现,并且可以采用各种特征来考虑这种技术的特定特性。例如,可以将Si-IC芯片上的电路限制在薄平面上。相应地,MPS 10的给定实施例可以采用诸如图2所示的PE和DMR的二维阵列。然而,设想了包括PE和DMR的不同布置的替代MPS实施例。
此外,Si-IC芯片上的可用布线密度可以远高于此类芯片之间的布线密度,并且每个芯片可以具有专用输入/输出(I/O)电路的***以接口片上信号和片外信号。相应地,MPS10的给定实施例可以采用略不均一的阵列,该阵列由芯片核心中的PE和DMR的均一阵列以及沿芯片***的经修改的PE/DMR单元组成。然而,设想了包括均一的和经修改的PE/DMR单元的不同布置和组合的替代MPS实施例。
此外,由Si-IC电路执行的计算操作可能会产生热量,此热量可以通过IC封装除去。增加的IC封装可能需要更多空间,并且穿过和围绕IC封装的互连可能会导致与路径长度成比例的延迟。因此,如上所述,可以通过互连多个芯片来构造非常大的MPS。这样的多芯片MPS实施例的编程可以考虑到芯片间信号时延比芯片内时延长得多。
在给定的Si-IC MPS 10实施例中,可以在单个芯片上实现的PE和DMR的最大数量可以通过采用给定的Si-IC技术可能实现的微型化以及每个PE和DMR的复杂性来确定。在这样的MPS实施例中,可以在达到计算吞吐量的目标水平的情况下最小化PE和DMR的电路复杂性。这种最小化的PE和DMR在本文中可以被称为是流水线型的。在一个MPS 10实施例中,PE的吞吐量的目标水平可以与以相同Si-IC技术制造的最佳数字信号处理器(DSP)的算术执行单元的目标水平相当。然而,设想了其中可以使用用于目标PE吞吐量的替代参考的其他MPS实施例。
在一些实施例中,MPS 10可以采用DSP和FPGA架构的最佳特征。像DSP一样,MPS 10可以是具有多个处理单元和片上存储器的可编程芯片。然而,相对于DSP,MPS处理单元可以是流水线型的,可以有更多的MPS处理单元,并且它们可以以新颖的方式互连,从而最大化它们之间的数据移动以及片上和片外的数据移动的带宽。具有比DSP更多的处理单元允许MPS 10每单位时间进行更多的乘法运算,并且流水线型的处理单元可以使能耗最小化。具有内部并行性的许多DSP可以是面向总线的架构。在一些实施例中,MPS 10可以不包括总线,而是可以包括嵌入在SRF中的相邻共享本地存储器,例如在DMR中,其可以提供比面向总线的架构高得多的总带宽。
与FPGA方法相比,一些MPS实施例可能粒度更粗糙。例如,在一个MPS实施例中,操作可以具有自然字长(例如,16位),并且如果使用作为自然字长的倍数的数据来执行,则计算可能是最有效的。在一些MPS实施例中,PE和DMR可能比FPGA中实现的等效结构更密集,这可能会导致平均布线长度更短,布线电容更低以及能耗更少。与FPGA实现相反,在一些MPS实施例中,MPS中的每个ALU可以是处理器(即,PE)的一部分,这可以有助于提取操作数以及将结果写回到DMR中的周围快速存储器。ALU、提取和写回操作的定时和时钟偏斜问题可以在IC芯片的设计期间解决,而不必像FPGA实现的典型情形那样要对每个新应用重新解决。
粗粒度的可编程嵌入式***可以由少量处理器或数字信号处理引擎组成。例如,设备可以包含四个或八个处理器核心以及固定或可编程的专用逻辑功能。这些***通常具有用于存储数据和指令的大型公共存储器。通常,它们利用虚拟存储器方案来将可被寻址的数据和指令存储器的范围扩展为大于片上存储器的大小。这样的***没有通信映射要求,并且在代码生成期间要考虑的物理特性最少。
图3示出了示例性MPS,其由均一散布有9×9阵列的DMR(圆圈)的8×8PE阵列的PE(正方形)组成。可以将程序编译为被分配给PE的任务。第一个示例程序已被编译为具有taskID=62,并被分配给阵列左上角的特定PE。变量u、v、w在程序源代码中被声明为通信变量,并被分配给相邻DMR中的具体存储器地址;u和v是I/O端口的缓冲区,而w是用于与其相关联的DMR进行片上网络通信的缓冲区。第二个示例程序已被编译为具有taskID=71,并被分配给阵列内部的特定PE。变量x是声明的通信变量,并被分配给所示的DMR。与变量x相关联的通信路径从其分配的DMR经由其他DMR到达最上一行的I/O端口。如图所示,这两个示例程序不相互通信,但是它们可以通过向任务71添加另一个通信变量以及在其DMR和与任务62相邻的DMR中的变量w之间的路径,轻松地进行通信。
图3示出了具有双高吞吐量操作单元的数据路径示例,该双高吞吐量操作单元被指定为数据管线0(DP0)和数据管线1(DP1),并扩展了一些额外的流寄存器以进行讨论。这些是额外的管线寄存器X、Y(用于输入)和Z(用于输出)。还示出了名义操作数阶段A、B、C和目标阶段D。
A、B和C寄存器用于存储如先前讨论为变量的高达64位宽的操作数。HyperOps使用两个数据路径的A、B和C寄存器以及X和Y寄存器之间的复用(muxing)来控制由数据路径执行的每个操作所需的操作数和字对齐。在HyperOp处理期间,操作数到A、B和C寄存器中的提取在具有移位选项的程序控制下,以允许对存储器进行地址对齐的访问以及对数据路径数学单元进行正确的操作数对齐。这项创新允许实现更简单的低功耗存储器结构和寻址模式,以便提供一种将足够的操作数馈送到复杂数据路径/HyperOp组合的方式,从而提供与操作数如何存储在存储器中无关的峰值吞吐量。
类似于操作数的讨论是对结果的讨论。在HyperOp执行期间,数据路径结果被放入累加器或Z寄存器中。然后可以将它们要么移到D以供写回其他位置,要么反馈回所示路径上,以用作后续指令中的额外操作数。与操作数一样,此处可以发生结果的重新对齐,以提供对未对齐数据的存储器/寄存器的对齐写回。同样,这些操作由HyperOp指令独立控制。
在许多架构中,支持一种用于将类似数学运算的长字符串加在一起为单个总和的累加器,从而存在单个累加器。此外,有时所有运算都会使用结果(同样,我们先前的生成)来修改该累加器。尽管此结构良好适用于每个周期主要是单个、标量的运算的架构,其中添加有额外的数据路径以及通过HyperOps在每个周期对多个操作数进行运算的能力,但是变得有必要扩展此概念。当前设计点在每个数据路径包含两个独立的累加器。每个操作都可以选择将更新哪个累加器(如果有)。因此,它们可以用于要么存储中间值以供通过前面讨论的复用结构进行后续处理,要么允许以交错形式处理多个数据流,而无需保存和恢复累加器值的额外周期或功率开销。双累加器结构的这些特征当与其他特征(例如,双数据路径和操作数/结果对齐)耦合时,提供了一种使管线得到更充分的利用的机制,这进而降低对于该设计的每次操作的总功耗。
与累加器有关的另一特征提供了另一种方式来加速一些算法的内部循环并增加跨芯片中多个PE的并行执行。例如,为了使应分布在多个PE之间的计算循环的开销最小化,这是需要的,以便提供足够的数据处理带宽,如在多抽头高带宽FIR滤波器中那样。
在图3中,示出了包含地址生成单元(AGU)的地址生成器部分,但是没有详细说明。PE架构的地址生成器部分为硬件支持的各种寻址模式生成地址。其独特特征将在该部分中进一步描述。
地址生成器部分可以具有多个可编程的数学单元,以用于生成地址。这些单元中的每一个均为地址生成单元(AGU)。另外,可以有一个或多个扩展的数学和逻辑单元(GALU),其可用于在管线的地址计算部分中的额外计算。这些计算对于扩展管线的功能和性能以及消除表查找类型操作与其他操作中的管线延迟有用。在图3中,示例地址生成器部分包含三个AGU和一个GALU以及一组支持寄存器。
对于标准编码方法中的典型操作,AGU用于要么为两个源操作数和目标生成地址,要么为这些操作的子集和一些地址或扩展数学运算生成地址。这些单元与编码紧密耦合。对于通过HyperOp编码进行的扩展操作,这些单元更为解耦合,并且可以由指令流独立控制。这允许更大的灵活性和更大的操作并行性。可以在编译时执行优化,使得不需要实时的重排序,因此不存在这种优化的操作功率损失。
图4示出了典型的编程设计流程。经由编译器和汇编器将用户源代码转换为一个或多个目标文件,然后将它们链接在一起以形成可执行文件,可执行文件包含可由目标处理器核解释的二进制代码映像。为了运行和测试可执行映像,加载程序将其复制到仿真器或物理嵌入式***的目标核心的指令存储器。
对于图4的典型流程,所有编译器优化都在汇编器和链接器阶段之前完成。对于允许个体线程在不同核心上运行的多线程应用,也是如此。
具有许多PE和较小的分布式存储器的多核处理器具有较低功耗的优点,但是需要考虑更多的物理约束。图5示出了用于这种处理器的典型工具流程。在开始于框501的这个工具流程中,用户源代码包括一个或多个任务,这些任务经由支持通信的应用编程接口(API)彼此通信。例如,可以将API设计为支持消息传递范例。
该方法包括编译应用源代码以生成汇编代码(框502)。编译阶段运行C编译器、汇编器和任务链接器,以为每个任务生成目标文件,然后它将任务之间的连接性提取到连接性数据库中。此时,所有编译器优化均已完成,但是任务、变量和通信尚未映射到物理资源。
该方法包括映射资源(框503)。任务映射、变量分配和通信映射在资源映射期间完成。另外,该方法包括合成通信(框504)。通信API的此类代码合成可以作为编译过程的最终链接器阶段的一部分执行。
该方法还包括仿真和调试(框505)。可以将映像文件加载到软件仿真或硬件调试器中,以进行此类测试和调试。该方法还包括在硬件上加载可执行映像(框506)。这种加载可以是部署已编译的软件以在多处理器阵列上使用的一部分。
由于用于优化的编译器数据在编译过程完成之后就消失了,因此在资源映射中分配了物理资源之后,可能很少优化或没有优化。流程中步骤的迭代得不到支持。
使用分布式存储器、多核处理器来获得最佳结果的一种方法是创建一种在整个流程中维护足够的信息,以允许在最后(在所有资源均已完全映射之后)进行编译器优化的工具流程。这包括所有形式的编译器优化以及负载平衡优化(例如,多任务化)。在多任务化中,将多个任务分配给同一PE。为了一般性地有用和实用,为每个PE选择的任务可以被选择为一起操作,而不会产生上下文切换的开销(其中寄存器和变量被保存,以便稍后可以恢复它们)。在图6中示出了可以执行这样的流程的计算机***的框图。
如图所示,计算机***600包括工作站601、项目数据库602、仿真器603和多处理器阵列604。在各个实施例中,工作站601可以包括计算机、膝上型计算机、平板电脑或能够通过有线或无线网络与项目数据库602、多处理器阵列604和仿真器603进行通信的任何其他适合的计算设备。
项目数据库602可以包括应用源代码,以及在编译过程中生成的文件,例如,中间表示和映像文件。在各种实施例中,项目数据库602可以存储在磁盘服务器上或连接到计算机***600中示出的其他组件的其他适合的存储设备上。
在各个实施例中,多处理器阵列604可以包括多个处理元件(PE)以及其他组件。例如,如上所述,多处理器阵列604可以包括如图1所示的实施例中所示出的一个或多个数据存储器路由器。
仿真器603可以包括被配置为执行应用源代码的已编译版本的软件和硬件的任何适合的组合。例如,仿真器603可以是专用计算机或工作站,其执行软件以模拟应用最终将在其中被执行的期望环境。在一些情况下,仿真器603可以被配置为向正被仿真的应用软件提供测试数据,并收集由对测试数据进行操作的应用软件生成的结果,例如,变量值。
转向图7,示出了描绘一种用于编译应用源代码的方法的实施例的流程图。开始于框701的方法可以应用于图6所示的计算机***。
该方法包括使用应用源代码执行前端编译以生成多个中间表示和连接性信息,其中,多个中间表示中的特定中间表示对应于多个任务中的特定任务,其中连接性信息包括多个连接,并且其中特定连接指定多个任务中的第一任务与多个任务中的第二任务之间的通信(框702)。如本文所使用和描述的,连接性信息是描述两个或更多个任务和两个或更多个输入/输出端口之间的抽象连接的信息。
该方法还包括使用多个中间表示和连接性信息将应用源代码中包括的逻辑对象映射到多处理器阵列中包括的物理资源,以生成资源映射(框703)。如下文更详细地描述的,资源映射可以包括将特定任务分配给多处理器阵列内的特定PE。
该方法进一步包括针对多个连接中的每个连接选择相应的实现(框704)。如下所述,连接可以通过由应用程序员提供的代码显式地标识,或者通过对源代码的分析由软件工具自动提取。
另外,该方法包括使用多个中间表示来执行第一优化操作以生成多个经优化的中间表示(框705)。如下文更详细地描述的,这种优化可以包括更好的资源映射以利用多处理器阵列的能力。通过在已经确定初始资源映射之后执行优化,该优化可以有利地改善应用软件在多处理器阵列上的执行。
该方法还包括使用多个经优化的中间表示来生成可执行代码(框706)。在各种实施例中,生成可执行代码可以包括创建映像文件,该映像文件的部分可以由多处理器阵列中包括的相应PE来执行。
该方法还包括将可执行代码加载到多处理器阵列上(框707)。在一些实施例中,可执行代码的映像文件的部分可以被加载到多处理器阵列的相应PE中。这样的加载可以采用耦合多处理器阵列的各个PE的通信网络。该方法结束于框708。
在某些情况下,前端优化和后端优化都被执行。在图8中示出了描绘这种方法的实施例的流程图。开始于框801的方法可以应用于图6描绘的计算机***。该方法包括执行前端编译以生成中间表示(框802)。
该方法还包括映射资源(框803)。在各种实施例中,从中间表示收集的信息可以用于确定哪些任务将被映射到多处理器阵列中包括的哪个PE。该方法还包括检查可能的优化(框804)。在某些情况下,优化可以涉及与原始分配的不同的资源映射。
然后,该方法取决于优化是否可能(框805)。如果优化是可能的,则该方法如上所述从框803继续。替代地,如果优化是不可能的,则该方法包括执行后端编译和通信合成(框806)。
与前端编译一样,该方法包括检查可能的优化(框807)。该方法同样取决于优化是否可能(框808)。如果优化是可能的,则该方法如上所述从框806或框803继续。如果没有优化是可能的,则该方法包括仿真和调试(框809)。在某些情况下,这种仿真和调试包括将软件加载到多处理器上并执行该软件。这样的执行可以包括使用测试数据并从软件的执行中收集结果。可以将结果与预期数据进行比较。
然后,该方法包括检查可能的优化(框810)。以与先前描述的方式类似,然后,该方法取决于优化是否可能(框811)。如果优化是可能的,则该方法可以从如上所述的框803、框806或框809继续。如果没有优化是可能的,则该方法包括将可执行映像加载到多处理器阵列上(框812)。在各种实施例中,可执行映像可以使用如上所述的在个体PE之间连接的通信网络被加载到多处理器阵列上。该方法结束于框813。
如图9所示,用于诸如C之类的高级语言的编译器使用中间表示(IR)来存储编译过程的中间结果。开始于框901的方法包括分析应用源代码(框902)。诸如LLVM之类的现代编译器提供了包括将源语言转换为IR的解析器的一组组件。该方法然后包括执行初始优化操作(框903)。这样的初始优化操作可以包括一个或多个优化过程以及指令生成器框架,以生成由用于不同目标指令集(例如,X86、ARM等)的指令组成的程序模块。
使用一个或多个“降低”趟次(pass)来实现优化,每个趟次读取输入IR,进行转换并输出修改后的IR。可以为任何期望的转换添加额外趟次。转换系列旨在将高级语言构造转换为低级机器特征。传统上,编译步骤是顺序执行的,并且最后的趟次会为目标机器生成经优化的汇编语言。然后运行汇编器和任务链接器,以针对每个任务生成单个目标文件,并生成包含所有任务的数据库。然后,此信息用于标识任务之间的连接性并将其存储在数据库中。关于传统方法有若干重要的观察。
不必运行所有优化来标识连接性。仅需要用于传播常量和移除无效代码的优化。需要这些以避免标识错误的连接性。
注意,不需要任务链接来针对每个任务产生单个目标文件。相反,该方法包括执行进程间分析(IPA)(框904)。IPA是编译器优化趟次,其跨源代码文件运行,并且针对每个任务产生单个IR。
目标代码对于连接性标识不是必需的。可以从IR中为任务提取连接性。对于增强的流程,前端编译过程仅运行最少的优化趟次和IPA来为每个任务生成IR表示。关于每个任务和每个任务的IR的相关信息被存储在数据库中。该方法结束于框905。
上述流程直到后端编译步骤才生成汇编语言。因此,C源文件中包括的汇编源文件和内联汇编将转换为IR表示,该IR表示的处理方式与从C源生成的IR相同。这作为前端编译过程的一部分进行处理。
当然,汇编语言代码一般是由应用开发人员手动优化的,因此生成的IR的级别比从C源生成的初始IR的级别低。幸运的是,IR中支持混合级别的抽象,并且一些额外优化仍然是可能的。
对于内联汇编,识别在汇编代码块中引用的物理寄存器,以便可以在代码生成期间在寄存器分配中使用额外信息。替代地,该流程可以支持在内联汇编代码块中使用虚拟寄存器。这些寄存器引用在寄存器分配期间被识别,并在针对从C源生成的代码进行的寄存器分配的同时被物理寄存器替换。
连接性标识是编译阶段的最后步骤。在此步骤期间,将标识任务之间的所有连接。这可以通过应用程序员提供的代码显式地完成,或由软件工具通过分析自动地提取。
对于自动通信提取,在前端编译期间,关于每个任务的发送和接收通信的信息被存储在IR中。提取过程将为整个设计构建连接性图。这是使用声明性信息和IR中可用于任务的通信API的组合来完成的。连接性信息被存储在数据库中。
转向图10,示出了描绘用于资源映射的方法的实施例的流程图。开始于框1001的方法是将应用代码中定义的逻辑对象分配给硬件上的物理资源的过程。为了实现这一点,该方法包括映射任务(框1002)。例如,不同的任务可以被映射到各个PE。该方法还包括分配变量(框1003)。在某些情况下,将特定变量分配给可用数据存储器中给定的一个。
另外,该方法包括映射任务之间的通信(框1104)。在某些情况下,输入和输出通信被映射到I/O端口以及映射到其他物理资源。该方法结束于框1005。
注意,这些操作的顺序很重要,尽管对于不同的硬件它可能会有所不同。在典型的分布式存储器阵列处理器上,在通信可被路由之前,必须先将任务分配给PE,并且必须分配通信中涉及的变量和I/O端口。通信中未涉及的变量可以在通信映射完成之前或之后进行放置。
约束可以被提供给资源映射以影响结果。约束可以被指定为可选的或必需的。资源映射器未能达到所要求的约束会导致资源映射错误。未能达到可选约束是可以接受的。约束的一些示例是对任务和变量的相对位置约束,以及在通信之间共享相同的路由资源。
可能需要位置约束以允许访问诸如共享存储器之类的公共资源或为了优化目的而允许访问某些指令。如果满足约束条件,则软件工具可以利用必要的资源以获得最优结果。如果不满足,则可以基于可用资源使用次优方法。
通信映射约束可以用于防止具有高带宽需求的通信之间的竞争。这样的约束可以由用户手动提供或由工具自动提供。如果用户源代码包括需要硬件资源的特殊布置以供实现的构造,则后者是常见的。还可以从该流程中的下游工具提供约束。
由于任务映射是在最终代码优化之前完成的,因此可以将多个任务分配给同一PE,而不招致任务之间的上下文切换的大开销。上下文切换需要保存和恢复包括寄存器和变量的状态信息。由于直到后端编译器阶段才完成寄存器和变量分配,因此可以在多个任务之间分配寄存器和变量,并且可以减少或完全消除上下文切换的开销。
选择实现每种通信的最佳机制以及生成适当代码的过程被称为“通信合成”。在图11中示出了描绘用于执行通信合成的方法的实施例的流程图。一旦资源映射完成,该方法开始于框101。在这样的资源映射之后,为每个通信API选择最佳实现所需的所有信息是可用的。然后,该方法包括合成通信(框1102)。例如,软件工具基于通信中涉及的变量的相对位置以及基于可用的硬件资源选择最有效的实现。例如,经由直接存储器访问(DMA)的传送常是最好的解决方案,但是如果发送器和接收器变量位于同一数据存储器中,则最佳机制可以利用共享存储器。
一旦通信全部被实际实现代替,则该方法包括执行编译器优化(框1103)。这样的优化可以包括执行可针对每个任务在IR上运行的一个或多个优化过程。针对通信API合成的代码与任务中的其他代码一起被优化。与先前的流程相比,这是一个明显的优势,在先前的流程中,在合成通信API的代码之前进行后端编译器优化。
在流程中的这一点上执行的常见优化可以包括特定于硬件的循环优化和用以选择访问源和目标操作数的最佳方法的操作数模式选择。在各种实施例中,特定于硬件的循环优化可以包括重复循环提取、循环不变代码运动、软件管线化以隐藏某些PE功能的延迟、矢量化以利用多个PE来改善性能、循环展开、循环融合以组合相似的循环、以及循环***以将循环拆分为特定部分。
在一些实施例中,操作数模式选择可以包括用于硬件寄存器的最优使用的寄存器选择和用于变量到存储器地址的最优分配的变量分配。
尽管可以在完成资源映射之前完成许多这些优化,但是它们不能充分地完成。例如,在完全放置任务之后,最好完成寄存器和变量分配,以便可以优化多任务调度。最好在将任务分配给PE后进行循环矢量化,以便知晓相邻PE中的可用资源。并且,最好在完成通信合成之后进行诸如循环不变代码运动之类的优化。
该方法还包括生成可执行代码(框1104)。在各种实施例中,代码生成可以包括针对每个任务IR生成目标代码,以及生成最终映像文件,该最终映像文件用于将应用加载到硬件上或软件仿真环境中。根据实现方式,第一步骤可以涉及针对每个任务生成汇编语言源,汇编语言源然后被汇编器运行以生成目标代码。
在代码生成期间,软件工具基于数据库中存储的针对该任务优化的IR选择指令序列以实现针对每个任务的原始源。该过程可以涉及基于任务和变量的相对位置可用的硬件的特殊特征。例如,某些指令可以仅在阵列中的某些PE上可用。如果将任务放置在这些PE之一上,则可以使用特殊指令用于实现。在其他情况下,某些指令可以仅在源变量和/或目标变量位于同一存储器中的情况下可用。如果资源映射无法实现必要的变量并置,则选择不太理想的实现。
该方法结束于框1105。注意,在某些情况下,在代码生成完成之后,写入最终映像文件。该文件可以被加载到实际硬件上,也可以被加载到软件仿真器或硬件调试器环境中以进行测试和调试。
在某些情况下,在将可执行映像加载到多处理器阵列上之前,工具流程中的最后步骤是仿真步骤。在各种实施例中,仿真步骤可以包括应用执行、行为测试和调试、性能和定时表征以及功率表征。行为问题通常通过对应用源代码进行修改来解决。
对于满足性能目标有各种要求。在一些实施例中,这些要求包括要求所有任务必须足够快地运行以跟上期望的吞吐量,并且任务之间的数据必须足够快地流动以使得任务不必等待数据。
任务执行速度可能受到任务需要执行以完成其功能的指令数量的限制。在这种情况下,可以通过将任务拆分为多个任务或通过将一些指令移至其他任务以平衡负载来缓解此问题。这些中的任一个都可以手动完成。替代地,仿真存储可用于进一步优化设计的信息。例如,如果发现循环执行所需的时间太长,则可以使用进一步的优化(例如,循环矢量化)来改善结果。
多任务化是用于负载平衡的另一个有价值的工具。如果使用许多小型、快速执行的任务开发应用,则可以使用单个PE来执行多个任务的全部或部分。如果任务没跟上所需的吞吐量,则可以将其分配给另一PE,以使其具有更多可用的计算资源。
任务执行速度也可能受到与其他任务竞争公共资源的限制。例如,两个任务可能正在尝试同时访问同一存储库。可以通过将变量重新分配给不同存储库甚至不同存储器中的地址来解决。该信息在仿真过程中被收集,并用于重新分配变量。
传送数据中的时延常常是由于竞争共享资源。例如,两个关键通信可能正在共享相同DMA引擎或某些相同的路由资源。这可能导致其中一个通信在等待另一个通信完成时停顿。关于通信停顿的信息在仿真过程中被存储,并且可用于改进任务映射和通信映射。
在许多嵌入式***中,功率考虑也很重要。与定时性能数据非常相似,在仿真运行期间保存的功率数据可用于改进资源映射、通信合成和后端编译期间的优化。
在某些情况下,可以使用静态分析来找到一些与仿真相同的性能限制,而无需特定的测试数据。例如,可以使用静态分析来找到潜在的存储库冲突或可能的通信冲突。此信息还提供给资源映射、通信合成和后端编译以优化结果。
迭代流程是其中在流程中的后续步骤中收集的信息被反馈回到流程中的先前步骤的流程。然后重新执行先前步骤中的一些或全部,以进一步优化设计。例如,代码优化可能会导致某些变量被添加或删除,因此必须部分重新运行资源映射以调整变量放置。或者,可以使用从仿真或静态分析收集的信息来迭代较早的步骤,以进一步优化设计。这是可能的,因为数据库包括针对所有应用任务的IR。优化趟次可以根据需要运行。
在各种实施例中,计算机可读存储介质可以存储可由MPS的处理器和/或一个或多个外部处理器执行的程序指令,以实现上述各种功能,例如交换软件应用中涉及的功能。一般地,计算机可读存储介质可以包括任何指令集,这些指令集在被执行时实现本文描述的功能的一部分或全部。一般而言,计算机可读存储介质可以包括计算机在使用期间可访问的任何存储介质,以向计算机***提供指令和/或数据。例如,计算机可读存储介质可以包括诸如磁或光介质之类的存储介质,例如,盘(固定或可移动)、带、CD-ROM、DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW或蓝光。存储介质还可包括易失性或非易失性存储介质,例如,RAM(例如,同步动态RAM(SDRAM)、Rambus DRAM(RDRAM)、静态RAM(SRAM)等)、ROM、闪存、可通过***接口(例如,通用串行总线(USB)接口、闪存接口(FMI)、串行***接口(SPI)等)访问的非易失性存储器(例如,闪存)。存储介质可以包括微机电***(MEMS)以及经由诸如网络和/或无线链路之类的通信介质可访问的存储介质。载体介质可以包括计算机可访问的存储介质以及诸如有线或无线传送之类的传送介质。
尽管已经结合优选实施例描述了本发明的***和方法,但是其并不旨在限于本文阐述的特定形式,相反,其旨在涵盖可以合理地包括在由所附权利要求所限定的本发明的精神和范围之内的替代、修改、和等同。
Claims (20)
1.一种方法,包括:
使用应用源代码执行前端编译以生成多个中间表示和连接性信息,其中所述多个中间表示中的特定中间表示对应于多个任务中的特定任务,其中所述连接性信息包括多个连接,并且其中特定连接指定所述多个任务中的第一任务与所述多个任务中的第二任务之间的通信;
使用所述多个中间表示和所述连接性信息将所述应用源代码中包括的逻辑对象映射到多处理器阵列中包括的物理资源以生成资源映射;
针对所述多个连接中的每个连接选择相应的实现;
使用所述多个中间表示执行第一优化操作以生成多个经优化的中间表示;
使用所述多个经优化的中间表示生成可执行代码;以及
将所述可执行代码加载到所述多处理器阵列上。
2.根据权利要求1所述的方法,其中执行所述前端编译包括:
解析所述应用源代码以生成初始中间表示;
使用所述初始中间表示执行至少一个第二优化操作以生成所述多个中间表示;
使用所述多个中间表示,标识所述多个任务之间的连接性以生成所述多个连接;以及
将所述多个中间表示和连接性信息存储在项目数据库中。
3.根据权利要求1所述的方法,其中,所述多处理器阵列包括多个处理器,其中所述多个处理器中的特定处理器包括数据存储器,并且其中映射所述逻辑对象包括:
将所述多个任务中的特定任务分配给所述多个处理器中的特定处理器;以及
将与所述特定任务相关联的变量分配给所述数据存储器。
4.根据权利要求1所述的方法,其中针对所述多个连接中的每个连接选择相应的实现包括:选择用于将数据从发送器传送到所述多个连接中的特定连接中包括的接收器的直接存储器访问。
5.根据权利要求1所述的方法,其中所述多处理器阵列包括多个处理器,并且其中使用所述多个中间表示执行所述第一优化操作以生成所述多个经优化的中间表示包括:对多个指令的循环进行矢量化以利用所述多个处理器的子集。
6.根据权利要求1所述的方法,还包括:
仿真所述可执行代码以生成仿真结果;以及
基于所述仿真结果修改至少所述应用源代码。
7.一种计算机***,包括:
一个或多个存储器,被配置为存储指令;以及
一个或多个处理器,被配置为从所述一个或多个存储器接收指令并且执行所述指令以使所述计算机***执行包括以下的操作:
使用应用源代码执行前端编译以生成多个中间表示和连接性信息,其中所述多个中间表示中的特定中间表示对应于多个任务中的特定任务,其中所述连接性信息包括多个连接,并且其中特定连接指定所述多个任务中的第一任务与所述多个任务中的第二任务之间的通信;
使用所述多个中间表示和所述连接性信息将所述应用源代码中包括的逻辑对象映射到多处理器阵列中包括的物理资源,以生成资源映射;
针对所述多个连接中的每个连接选择相应的实现;
使用所述多个中间表示执行第一优化操作以生成多个经优化的中间表示;以及
使用所述多个经优化的中间表示生成可执行代码。
8.根据权利要求7所述的计算机***,其中执行所述前端编译包括:
解析所述应用源代码以生成初始中间表示;
使用所述初始中间表示执行至少一个第二优化操作以生成所述多个中间表示;
使用所述多个中间表示,标识所述多个任务之间的连接性以生成所述多个连接;以及
将所述多个中间表示和连接性信息存储在项目数据库中。
9.根据权利要求7所述的计算机***,其中所述多处理器阵列包括多个处理器,其中所述多个处理器中的特定处理器包括数据存储器,并且其中映射所述逻辑对象包括:
将所述多个任务中的特定任务分配给所述多个处理器中的特定处理器;以及
将与所述特定任务相关联的变量分配给所述数据存储器。
10.如权利要求7所述的计算机***,其中针对所述多个连接中的每个连接选择相应的实现包括:选择用于将数据从发送器传送到所述多个连接中的特定连接中包括的接收器的直接存储器访问。
11.根据权利要求7所述的计算机***,其中,所述多处理器阵列包括多个处理器,并且其中使用所述多个中间表示执行所述第一优化操作以生成所述多个经优化的中间表示包括:对多个指令的循环进行矢量化以利用所述多个处理器的子集。
12.根据权利要求7所述的计算机***,其中所述操作还包括:
仿真所述可执行代码以生成仿真结果;以及
基于所述仿真结果修改至少所述应用源代码。
13.根据权利要求7所述的计算机***,其中使用所述多个经优化的中间表示生成所述可执行代码包括:使用所述多个经优化的中间表示中的相对应的经优化的中间表示来针对所述多个任务中的每个任务生成相应的目标代码。
14.一种非暂时性计算机可访问存储介质,其中存储有编程指令,该编程指令响应于被计算机***执行而使所述计算机***执行包括以下的操作:
使用应用源代码执行前端编译以生成多个中间表示和连接性信息,其中所述多个中间表示中的特定中间表示对应于多个任务中的特定任务,其中所述连接性信息包括多个连接,并且其中特定连接指定所述多个任务中的第一任务与所述多个任务中的第二任务之间的通信;
使用所述多个中间表示和所述连接性信息将所述应用源代码中包括的逻辑对象映射到多处理器阵列中包括的物理资源以生成资源映射;
针对所述多个连接中的每个连接选择相应的实现;
使用所述多个中间表示执行第一优化操作以生成多个经优化的中间表示;
使用所述多个经优化的中间表示生成可执行代码;以及
将所述可执行代码加载到所述多处理器阵列上。
15.根据权利要求14所述的非暂时性计算机可访问存储介质,其中执行所述前端编译包括:
解析所述应用源代码以生成初始中间表示;
使用所述初始中间表示执行至少一个第二优化操作以生成所述多个中间表示;
使用所述多个中间表示,标识所述多个任务之间的连接性以生成所述多个连接;以及
将所述多个中间表示和连接性信息存储在项目数据库中。
16.根据权利要求14所述的非暂时性计算机可访问存储介质,其中所述多处理器阵列包括多个处理器,其中所述多个处理器中的特定处理器包括数据存储器,并且其中映射所述逻辑对象包括:
将所述多个任务中的特定任务分配给所述多个处理器中的特定处理器;以及
将与所述特定任务相关联的变量分配给所述数据存储器。
17.根据权利要求14所述的非暂时性计算机可访问存储介质,其中针对所述多个连接中的每个连接选择相应的实现包括:选择用于将数据从发送器传送到所述多个连接中的特定连接中包括的接收器的直接存储器访问。
18.根据权利要求14所述的非暂时性计算机可访问存储介质,其中所述多处理器阵列包括多个处理器,并且其中使用所述多个中间表示执行所述第一优化操作以生成所述多个经优化的中间表示包括:对多个指令的循环进行矢量化以利用所述多个处理器的子集。
19.根据权利要求14所述的非暂时性计算机可访问存储介质,其中所述操作还包括:
仿真所述可执行代码以生成仿真结果;以及
基于所述仿真结果修改至少所述应用源代码。
20.根据权利要求14所述的非暂时性计算机可访问存储介质,其中使用所述多个经优化的中间表示生成所述可执行代码包括:使用所述多个经优化的中间表示中的相对应的经优化的中间表示来针对所述多个任务中的每个任务生成相应的目标代码。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762581525P | 2017-11-03 | 2017-11-03 | |
US62/581,525 | 2017-11-03 | ||
PCT/US2018/058700 WO2019089918A1 (en) | 2017-11-03 | 2018-11-01 | Programming flow for multi-processor system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111566616A true CN111566616A (zh) | 2020-08-21 |
CN111566616B CN111566616B (zh) | 2023-12-12 |
Family
ID=64362703
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880084639.9A Active CN111566616B (zh) | 2017-11-03 | 2018-11-01 | 多处理器***的编程流程 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11755382B2 (zh) |
EP (1) | EP3704572A1 (zh) |
JP (1) | JP2021501949A (zh) |
CN (1) | CN111566616B (zh) |
TW (3) | TWI806550B (zh) |
WO (1) | WO2019089918A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114398011A (zh) * | 2022-01-17 | 2022-04-26 | 安谋科技(中国)有限公司 | 数据存储方法、设备和介质 |
CN114610288A (zh) * | 2022-05-12 | 2022-06-10 | 之江实验室 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11144286B2 (en) | 2019-01-14 | 2021-10-12 | Microsoft Technology Licensing, Llc | Generating synchronous digital circuits from source code constructs that map to circuit implementations |
US11093682B2 (en) | 2019-01-14 | 2021-08-17 | Microsoft Technology Licensing, Llc | Language and compiler that generate synchronous digital circuits that maintain thread execution order |
US11106437B2 (en) * | 2019-01-14 | 2021-08-31 | Microsoft Technology Licensing, Llc | Lookup table optimization for programming languages that target synchronous digital circuits |
US11275568B2 (en) | 2019-01-14 | 2022-03-15 | Microsoft Technology Licensing, Llc | Generating a synchronous digital circuit from a source code construct defining a function call |
US11113176B2 (en) | 2019-01-14 | 2021-09-07 | Microsoft Technology Licensing, Llc | Generating a debugging network for a synchronous digital circuit during compilation of program source code |
US10810343B2 (en) | 2019-01-14 | 2020-10-20 | Microsoft Technology Licensing, Llc | Mapping software constructs to synchronous digital circuits that do not deadlock |
KR20230095507A (ko) * | 2021-12-22 | 2023-06-29 | 삼성전자주식회사 | 신경망 연산의 스케줄링 방법 및 장치 |
CN117724764A (zh) * | 2022-09-09 | 2024-03-19 | 达发科技(苏州)有限公司 | 网络处理单元的算法分析方法及装置和存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5577253A (en) * | 1991-02-27 | 1996-11-19 | Digital Equipment Corporation | Analyzing inductive expressions in a multilanguage optimizing compiler |
US20070226686A1 (en) * | 2006-03-27 | 2007-09-27 | Beardslee John M | Programming a multi-processor system |
US7702499B1 (en) * | 2000-05-02 | 2010-04-20 | Cadence Design Systems, Inc. | Systems and methods for performing software performance estimations |
CN103119561A (zh) * | 2010-09-23 | 2013-05-22 | 苹果公司 | 用于对非叶代码进行基于编译器的矢量化的***和方法 |
US20130198494A1 (en) * | 2012-01-30 | 2013-08-01 | Vinod Grover | Method for compiling a parallel thread execution program for general execution |
US20140040855A1 (en) * | 2011-07-28 | 2014-02-06 | National Instruments Corporation | Optimization of a Data Flow Program Based on Access Pattern Information |
US20140351551A1 (en) * | 2013-05-24 | 2014-11-27 | Coherent Logix, Incorporated | Memory-network processor with programmable optimizations |
JP2015125503A (ja) * | 2013-12-25 | 2015-07-06 | 富士通株式会社 | マルチプロセッサ用プログラム生成方法、マルチプロセッサ装置およびマルチプロセッサ用ファームウェア |
CN105164642A (zh) * | 2013-03-14 | 2015-12-16 | 微软技术许可有限责任公司 | 对合同的操作***支持 |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3039953B2 (ja) * | 1989-04-28 | 2000-05-08 | 株式会社日立製作所 | 並列化装置 |
US8001266B1 (en) | 2003-03-31 | 2011-08-16 | Stretch, Inc. | Configuring a multi-processor system |
JP4042972B2 (ja) | 2003-09-30 | 2008-02-06 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化コンパイラ、コンパイラプログラム、及び記録媒体 |
US7721069B2 (en) * | 2004-07-13 | 2010-05-18 | 3Plus1 Technology, Inc | Low power, high performance, heterogeneous, scalable processor architecture |
US8190381B2 (en) * | 2005-01-27 | 2012-05-29 | Electro Industries/Gauge Tech | Intelligent electronic device with enhanced power quality monitoring and communications capabilities |
US7509632B2 (en) * | 2005-03-24 | 2009-03-24 | International Business Machines Corporation | Method and apparatus for analyzing call history data derived from execution of a computer program |
EP1783604A3 (en) | 2005-11-07 | 2007-10-03 | Slawomir Adam Janczewski | Object-oriented, parallel language, method of programming and multi-processor computer |
US8375368B2 (en) * | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8359586B1 (en) * | 2007-08-20 | 2013-01-22 | The Mathworks, Inc. | Code generation |
US8578381B2 (en) * | 2007-10-26 | 2013-11-05 | Oracle America, Inc. | Apparatus, system and method for rapid resource scheduling in a compute farm |
EP2257874A4 (en) * | 2008-03-27 | 2013-07-17 | Rocketick Technologies Ltd | DESIGN SIMULATION ON THE BASIS OF PARALLEL PROCESSORS |
KR101275698B1 (ko) * | 2008-11-28 | 2013-06-17 | 상하이 신하오 (브레이브칩스) 마이크로 일렉트로닉스 코. 엘티디. | 데이터 처리 방법 및 장치 |
US8566804B1 (en) * | 2009-08-13 | 2013-10-22 | The Mathworks, Inc. | Scheduling generated code based on target characteristics |
JP4806060B2 (ja) | 2009-09-15 | 2011-11-02 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム |
US8904398B2 (en) | 2011-03-31 | 2014-12-02 | International Business Machines Corporation | Hierarchical task mapping |
US9009686B2 (en) * | 2011-11-07 | 2015-04-14 | Nvidia Corporation | Algorithm for 64-bit address mode optimization |
US8495535B2 (en) * | 2011-11-28 | 2013-07-23 | International Business Machines Corporation | Partitioning and scheduling uniform operator logic trees for hardware accelerators |
US9135143B2 (en) * | 2012-10-08 | 2015-09-15 | National Instruments Corporation | Automated analysis of compilation processes in a graphical specification and constraint language |
TW201423402A (zh) | 2012-12-12 | 2014-06-16 | Paneve Llc | 通用目的數位資料處理器、系統及方法 |
US10326448B2 (en) * | 2013-11-15 | 2019-06-18 | Scientific Concepts International Corporation | Code partitioning for the array of devices |
US9817931B1 (en) * | 2013-12-05 | 2017-11-14 | The Mathworks, Inc. | Systems and methods for generating optimized hardware descriptions for models |
US9274771B1 (en) | 2014-09-22 | 2016-03-01 | Oracle International Corporation | Automated adaptive compiler optimization |
US9864583B2 (en) * | 2014-11-14 | 2018-01-09 | Cavium, Inc. | Algorithm to derive logic expression to select execution blocks for programmable network devices |
US10002455B2 (en) * | 2015-04-20 | 2018-06-19 | Intel Corporation | Optimized depth buffer cache apparatus and method |
GB2541353A (en) * | 2015-05-07 | 2017-02-22 | Aria Networks Ltd | Multi-layer network topology optimization |
US9507891B1 (en) * | 2015-05-29 | 2016-11-29 | International Business Machines Corporation | Automating a microarchitecture design exploration environment |
US9760376B1 (en) | 2016-02-01 | 2017-09-12 | Sas Institute Inc. | Compilation for node device GPU-based parallel processing |
US10175992B2 (en) * | 2016-10-01 | 2019-01-08 | Intel Corporation | Systems and methods for enhancing BIOS performance by alleviating code-size limitations |
WO2018078451A1 (en) * | 2016-10-25 | 2018-05-03 | Reconfigure.Io Limited | Synthesis path for transforming concurrent programs into hardware deployable on fpga-based cloud infrastructures |
-
2018
- 2018-11-01 EP EP18804827.6A patent/EP3704572A1/en active Pending
- 2018-11-01 US US16/177,680 patent/US11755382B2/en active Active
- 2018-11-01 JP JP2020524794A patent/JP2021501949A/ja active Pending
- 2018-11-01 CN CN201880084639.9A patent/CN111566616B/zh active Active
- 2018-11-01 WO PCT/US2018/058700 patent/WO2019089918A1/en active Search and Examination
- 2018-11-02 TW TW111114174A patent/TWI806550B/zh active
- 2018-11-02 TW TW107139064A patent/TWI703451B/zh active
- 2018-11-02 TW TW109125816A patent/TWI762982B/zh active
-
2023
- 2023-04-20 US US18/136,976 patent/US20230359509A1/en active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5577253A (en) * | 1991-02-27 | 1996-11-19 | Digital Equipment Corporation | Analyzing inductive expressions in a multilanguage optimizing compiler |
US7702499B1 (en) * | 2000-05-02 | 2010-04-20 | Cadence Design Systems, Inc. | Systems and methods for performing software performance estimations |
US20070226686A1 (en) * | 2006-03-27 | 2007-09-27 | Beardslee John M | Programming a multi-processor system |
CN103119561A (zh) * | 2010-09-23 | 2013-05-22 | 苹果公司 | 用于对非叶代码进行基于编译器的矢量化的***和方法 |
US20140040855A1 (en) * | 2011-07-28 | 2014-02-06 | National Instruments Corporation | Optimization of a Data Flow Program Based on Access Pattern Information |
US20130198494A1 (en) * | 2012-01-30 | 2013-08-01 | Vinod Grover | Method for compiling a parallel thread execution program for general execution |
CN105164642A (zh) * | 2013-03-14 | 2015-12-16 | 微软技术许可有限责任公司 | 对合同的操作***支持 |
US20140351551A1 (en) * | 2013-05-24 | 2014-11-27 | Coherent Logix, Incorporated | Memory-network processor with programmable optimizations |
JP2015125503A (ja) * | 2013-12-25 | 2015-07-06 | 富士通株式会社 | マルチプロセッサ用プログラム生成方法、マルチプロセッサ装置およびマルチプロセッサ用ファームウェア |
Non-Patent Citations (3)
Title |
---|
ABHISHEK KUMAR JAIN等: "Resource-Aware Just-in-Time OpenCL Compiler for Coarse-Grained FPGA Overlays", pages 7 - 12 * |
BOPPU, S.等: "Compact code generation for tightly-coupled processor arrays", vol. 77, pages 5 - 29, XP035384230, DOI: 10.1007/s11265-014-0891-2 * |
GUO JICHI ET AL: "COMPILER-ASSISTED OVERLAPPING OF COMMUNICATION AND COMPUTATION IN MPI APPLICATIONS", 2016 IEEE INTERNATIONAL CONFERENCE ON CLUSTER COMPUTING, pages 60 - 69 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114398011A (zh) * | 2022-01-17 | 2022-04-26 | 安谋科技(中国)有限公司 | 数据存储方法、设备和介质 |
CN114398011B (zh) * | 2022-01-17 | 2023-09-22 | 安谋科技(中国)有限公司 | 数据存储方法、设备和介质 |
CN114610288A (zh) * | 2022-05-12 | 2022-06-10 | 之江实验室 | 基于阵列式解析基元结构的后端编译器实现方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
EP3704572A1 (en) | 2020-09-09 |
CN111566616B (zh) | 2023-12-12 |
JP2021501949A (ja) | 2021-01-21 |
TWI806550B (zh) | 2023-06-21 |
TW202042080A (zh) | 2020-11-16 |
TW201923613A (zh) | 2019-06-16 |
TW202305590A (zh) | 2023-02-01 |
US11755382B2 (en) | 2023-09-12 |
TWI703451B (zh) | 2020-09-01 |
TWI762982B (zh) | 2022-05-01 |
WO2019089918A1 (en) | 2019-05-09 |
US20230359509A1 (en) | 2023-11-09 |
US20190138365A1 (en) | 2019-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111566616B (zh) | 多处理器***的编程流程 | |
CN107347253B (zh) | 用于专用处理器的硬件指令生成单元 | |
CN109284131B (zh) | 具有可编程优化的存储器-网络处理器 | |
EP2710467B1 (en) | Automatic kernel migration for heterogeneous cores | |
US20070219771A1 (en) | Branching and Behavioral Partitioning for a VLIW Processor | |
KR20220042424A (ko) | 재구성가능 아키텍처들을 위한 컴파일러 플로우 로직 | |
Jo et al. | SOFF: An OpenCL high-level synthesis framework for FPGAs | |
Podobas | Accelerating parallel computations with openmp-driven system-on-chip generation for fpgas | |
Gray et al. | Exposing non-standard architectures to embedded software using compile-time virtualisation | |
Athrij | Vectorizing Memory Access on HammerBlade Architecture | |
Tanase et al. | Symbolic Parallelization of Nested Loop Programs | |
Leidel | GoblinCore-64: A scalable, open architecture for data intensive high performance computing | |
US20240069770A1 (en) | Multiple contexts for a memory unit in a reconfigurable data processor | |
US20230325312A1 (en) | Merging Buffer Access Operations in a Coarse-grained Reconfigurable Computing System | |
US20240232127A1 (en) | Dataflow architecture processor statically reconfigurable to perform n-dimensional affine transformation in a tiled manner | |
US20240233069A1 (en) | Dataflow architecture processor statically reconfigurable to perform n-dimensional affine transformation in parallel manner by replicating copies of input image across multiple scratchpad memories | |
US20240233068A1 (en) | Dataflow architecture processor statically reconfigurable to perform n-dimensional affine transformation | |
US20240232128A1 (en) | Dataflow architecture processor statically reconfigurable to perform n-dimensional affine transformation in parallel manner by replicating copies of input image across scratchpad memory banks | |
US20230325346A1 (en) | Buffer Splitting | |
Kim | Exploiting Reconfiguration and Co-Design for Domain-Agnostic Hardware Acceleration | |
KHALILI MAYBODI | A Data-Flow Threads Co-processor for MPSoC FPGA Clusters | |
Krommydas | Towards enhancing performance, programmability, and portability in heterogeneous computing | |
Janßen | Hardware/Software virtualization in complex embedded systems | |
Tanase et al. | Fundamentals and Compiler Framework | |
Tagliavini | Optimization Techniques for Parallel Programming of Embedded Many-Core Computing Platforms |
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 |