CN113330418A - 编译器的面向工作负载的常量传播 - Google Patents
编译器的面向工作负载的常量传播 Download PDFInfo
- Publication number
- CN113330418A CN113330418A CN201980090260.3A CN201980090260A CN113330418A CN 113330418 A CN113330418 A CN 113330418A CN 201980090260 A CN201980090260 A CN 201980090260A CN 113330418 A CN113330418 A CN 113330418A
- Authority
- CN
- China
- Prior art keywords
- workload
- constant
- logic
- compiler
- identified
- 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
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
-
- 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/7803—System on board, i.e. computer system on one or more PCB, e.g. motherboards, daughterboards or blades
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- 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
- G06F8/4434—Reducing the memory space required by the program code
-
- 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/505—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 load
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种半导体封装装置的实施例可包括技术来识别工作负载控制变量,将工作负载标志添加到静态单一赋值图中的各个边缘,并且基于所识别的工作负载控制变量和工作负载标志来传播常量。公开并且要求保护了其他实施例。
Description
技术领域
实施例概括而言涉及编译器。更具体而言,实施例涉及编译器的面向工作负载的常量传播(workload oriented constant propagation)。
背景技术
编译器技术包括各种各样的优化,包括常量传播。常量传播指的是在编译时替换表达式中的已知常数的值。稀疏条件常量(sparse conditional constant,SCC)传播是一种可在转换为静态单一赋值(static single assignment,SSA)形式后应用的编译器优化。
附图说明
通过阅读以下说明书和所附权利要求,并且通过参考以下附图,实施例的各种优点将对本领域技术人员变得清楚,附图中:
图1是根据一实施例的电子处理系统的示例的框图;
图2是根据一实施例的半导体封装装置的示例的框图;
图3是根据一实施例的编译的方法的示例的流程图;
图4是根据一实施例的具有工作负载常量传播的深度优先SCC的过程流程的示例的流程图;
图5是根据一实施例的工作负载编译器指令和相应的WorkloadList结构的说明性表示;
图6是根据一实施例的M级点阵和会合规则的说明性表示;
图7A和图7B是根据实施例的编译器装置的示例的框图;
图8是根据一实施例的处理器的示例的框图;并且
图9是根据一实施例的系统的示例的框图。
具体实施方式
现在转向图1,电子处理系统10的一实施例可包括处理器11、与处理器11以可通信方式耦合的存储器12以及与处理器11以可通信方式耦合的编译器逻辑13,以识别工作负载控制变量(workload control variable,WCV),将工作负载标志添加到静态单一赋值图中的各个边缘,并且基于所识别的WCV和工作负载标志来传播常量。在一些实施例中,编译器逻辑13可被配置为接收编译器指令以识别WCV。替换地,或者额外地,编译器逻辑13可被配置为通过对要编译的代码的静态分析来识别WCV。例如,编译器逻辑13也可被配置为基于所识别的WCV和工作负载标志将编译器时间和空间复杂度约束在常量传播的渐近界限下。在一些实施例中,编译器逻辑13可进一步被配置为利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一(1)。例如,常量足迹可包括全局常量和部分常量实例中的一个或多个。在一些实施例中,编译器逻辑13可位于包括处理器11在内的各种组件(例如,在同一个管芯上)中,或与这些组件处于相同位置。
上述处理器11、存储器12、编译器逻辑13和其他系统组件的每一者的实施例可以用硬件、软件或者其任何适当组合来实现。例如,硬件实现方式可包括可配置逻辑,例如可编程逻辑阵列(programmable logic array,PLA)、现场可编程门阵列(fieldprogrammable gate array,FPGA)、复杂可编程逻辑器件(complex programmable logicdevice,CPLD)或者使用诸如专用集成电路(application specific integrated circuit,ASIC)、互补金属氧化物半导体(complementary metal oxide semiconductor,CMOS)或者晶体管-晶体管逻辑(transistor-transistor logic,TTL)技术之类的电路技术的固定功能逻辑硬件,或者这些的任何组合。处理器11的实施例可包括通用处理器、专用处理器、中央处理器单元(central processor unit,CPU)、控制器、微控制器,等等。
替换地或者额外地,这些组件的全部或一些部分可作为存储在机器或计算机可读存储介质中的一组逻辑指令被实现在一个或多个模块中以被处理器或计算设备执行,所述机器或计算机可读存储介质例如是随机访问存储器(random access memory,RAM)、只读存储器(read only memory,ROM)、可编程ROM(programmable ROM,PROM)、固件、闪存等等。例如,可以用一种或多种操作系统(operating system,OS)适用/适当的编程语言的任何组合来编写用于执行组件的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,比如PYTHON、PERL、JAVA、SMALLTALK、C++、C#等等,还包括传统的过程式编程语言,比如“C”编程语言或者类似的编程语言。例如,存储器12、持续性存储介质或其他系统存储器可存储一组指令,这些指令当被处理器11执行时使得系统10实现系统10的一个或多个组件、特征或方面(例如,编译器逻辑13,识别WCV,将工作负载标志添加到SSA图中的各个边缘,并且基于所识别的WCV和工作负载标志来传播常量,等等)。
现在转到图2,半导体封装装置20的实施例可包括一个或多个衬底21,和与一个或多个衬底21耦合的逻辑22,其中逻辑22至少部分实现在可配置逻辑和固定功能硬件逻辑中的一个或多个中。与一个或多个衬底耦合的逻辑22可被配置为识别WCV,将工作负载标志添加到静态单一赋值图中的各个边缘,并且基于所识别的WCV和工作负载标志来传播常量。在一些实施例中,逻辑22可被配置为接收编译器指令以识别WCV。替换地,或者额外地,逻辑22可被配置为通过对要编译的代码的静态分析来识别WCV。例如,逻辑22也可被配置为基于所识别的WCV和工作负载标志将编译器时间和空间复杂度约束在常量传播的渐近界限下。在一些实施例中,逻辑22可进一步被配置为利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一(1)。例如,常量足迹可包括全局常量和部分常量实例中的一个或多个。在一些实施例中,与一个或多个衬底21耦合的逻辑22可包括定位在一个或多个衬底21内的晶体管沟道区域。
逻辑22的实施例以及装置20的其他组件可实现在硬件、软件或者其任何组合中,包括硬件中的至少部分实现。例如,硬件实现方式可包括可配置逻辑,例如PLA、FPGA、CPLD,或者利用诸如ASIC、CMOS或TTL技术之类的电路技术的固定功能逻辑硬件,或者这些的任何组合。此外,这些组件的一些部分可作为存储在机器或计算机可读存储介质中的一组逻辑指令被实现在一个或多个模块中以被处理器或计算设备执行,所述机器或计算机可读存储介质例如是RAM、ROM、PROM、固件、闪存,等等。例如,可以用一种或多种OS适用/适当的编程语言的任何组合来编写用于执行组件的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,比如PYTHON、PERL、JAVA、SMALLTALK、C++、C#等,还包括传统的过程式编程语言,比如“C”编程语言或类似的编程语言。
装置20可实现方法30(图3)或者本文论述的任何实施例的一个或多个方面。在一些实施例中,图示的装置20可包括一个或多个衬底21(例如,硅、蓝宝石、砷化镓)和与(一个或多个)衬底21耦合的逻辑22(例如,晶体管阵列和其他集成电路/IC组件)。逻辑22可至少部分在可配置逻辑或固定功能逻辑硬件中实现。在一个示例中,逻辑22可包括被定位(例如,嵌入)在(一个或多个)衬底21内的晶体管沟道区域。从而,逻辑22和(一个或多个)衬底21之间的界面可能不是突变结。逻辑22也可被认为包括在(一个或多个)衬底21的初始晶片上生长的外延层。
现在转到图3,编译的方法30的实施例可包括在块31识别WCV,在块32将工作负载标志添加到静态单一赋值图中的各个边缘,并且在块33基于所识别的WCV和工作负载标志来传播常量。在一些实施例中,方法30可包括在块34接收编译器指令以识别WCV。替换地,或者额外地,方法30可包括在块35通过对要编译的代码的静态分析来识别WCV。例如,方法30还可包括在块36基于所识别的WCV和工作负载标志将编译器时间和空间复杂度约束在常量传播的渐近界限下。方法30的一些实施例还可包括在块37利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。例如,在块38,常量足迹包括全局常量和部分常量实例中的一个或多个。
方法30的实施例可实现在系统、装置、计算机、设备等等(例如本文描述的那些)中。更具体而言,方法30的硬件实现方式可包括可配置逻辑,例如PLA、FPGA、CPLD,或者利用诸如ASIC、CMOS或TTL技术之类的电路技术实现在固定功能逻辑硬件中,或者这些的任何组合。替换地或者额外地,方法30可作为存储在机器或计算机可读存储介质中的一组逻辑指令被实现在一个或多个模块中以被处理器或计算设备执行,所述机器或计算机可读存储介质例如是RAM、ROM、PROM、固件、闪存,等等。例如,可以用一种或多种OS适用/适当的编程语言的任何组合来编写用于执行组件的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,比如PYTHON、PERL、JAVA、SMALLTALK、C++、C#等,还包括传统的过程式编程语言,比如“C”编程语言或类似的编程语言。
例如,方法30可实现在计算机可读介质上,如下文联系示例20至25所述。方法30的实施例或一些部分可实现在固件、应用(例如,通过应用编程接口(applicationprogramming interface,API))或者在操作系统(operating system,OS)上运行的驱动器软件中。此外,逻辑指令可包括汇编指令、指令集体系结构(instruction setarchitecture,ISA)指令、机器指令、机器相关指令、微代码、状态设置数据、用于集成电路的配置数据、个性化电子电路和/或硬件原生的其他结构组件(例如,主机处理器、中央处理单元/CPU、微控制器等等)的状态信息。
一些实施例可有利地提供用于面向工作负载的常量传播的编译器技术。工作负载信息,例如循环计数、图像大小等等,经常包括可在编译时可用的常量信息。由于一些传统的常量传播策略的限制,某些种类的常量信息有时不能通过过程调用在内部被认为是常量,除非应用过程集成,这可能会在调用堆栈很深时引起代码爆炸。例如,在诸如深度卷积神经网络(convolutional neural network,CNN)之类的应用中,网络通常会包含几个卷积层,这些卷积层会以不同的参数多次调用相同的“conv2d”函数。其中一些参数,例如张量形状(宽度、高度、通道)、过滤器大小、步长等等,可以是特定层的编译时常量。在优化通用的“conv2d”函数时,这样的常量信息可被视为工作负载信息,以基于目标硬件资源,例如缓存、指令向量长度等等,提供更好的性能。下面是使用Tensorflow的示例代码片断:
在先前的tensorflow神经网络片段中,对输入形状28*28*3的“tf.layer.conv2d”调用的优化与对输入形状7*7*64的相同“tf.layer.conv2d”调用的优化可能完全不同。一些其他的编译器优化技术可利用过程内联技术、运行时库和/或域特定编译来优化编译。对于过程内联技术,通过集成不同调用站点中的过程,工作负载信息对于各个调用站点的每个单独副本来说自然变得恒定。然而,在实践中,实际使用这些工作负载变量进行计算的真正的计算密集型过程(例如,在此被称为内核过程)经常被定义在很深的类层次结构或调用栈下。在常量初始化站点和内核过程调用站点之间可能会出现很长的路径,这意味着要将常量工作负载信息集成到内核过程中要求通过堆栈内联所有的中间过程。内联中间过程可能会导致代码爆炸,而如果唯一需要的信息是特定的工作负载常量,那么这实际上是不必要的。
大多数硬件提供商将为各种性能关键的内核过程发布高度优化的运行时库。为了应对不同工作负载上的优化,带有动态工作负载检查的多版本实现被添加到这些库中。动态工作负载检查是基于范围的一般性检查。具体的工作负载优化只能被逐案添加,这使得库很沉重,而且当硬件体系结构发生变化时很难做到可移植。动态工作负载检查也不能涵盖所有真实的用户案例,这些案例往往在一些工作负载上效果最好,而在其他工作负载上却变得更糟。对于域特定编译,一些即时(just in time,JIT)编译技术基于运行时获得的工作负载信息来优化内核过程。然而,一些JIT编译器可能要求多种代码变换,并且可能限于基本的模式匹配优化。
有利的是,一些实施例可提供编译器指令的技术,以识别WCV,并且将工作负载标志(“WorkloadFlag”)添加到SSA图中的各个边缘,以便在类似于传统常量传播的渐近界限下约束算法的时间和空间复杂度。一些实施例还可利用M级点阵和深度优先搜索来追踪常量足迹,其不仅利用全局常量,还利用部分常量实例来进一步优化编译器。
编译器的一些实施例可针对不同的工作负载在性能关键的内核过程上实现更多的专门化,这使得优化对于多个硬件平台来说是可移植的,并且与运行时库相比,对于体系结构变化来说更加灵活。在一些实施例中,更多的工作负载常量可被传递给内核过程,而不是通过深层调用堆栈直接内联这些过程,并且优化可更容易地应用于现有的大型复杂框架上。有利的是,一些实施例提供了优化技术来适应不断变化的工作负载或应用。
现在转向图4,过程流程40的一实施例说明了具有工作负载常量传播的深度优先SCC的示例。流程40包括在块41识别WCV,在块42将WorkloadFlag添加到SSA图,并且在块43提供程序流图。然后,流程40可包括在块44对SSA图和程序流图执行具有工作负载传播的深度优先SCC,然后在块45输出工作负载常量列表,并且在块46执行专门优化。对于在块44的深度优先SCC,如下文更详细描述的,流程40可从在块44a执行程序流图的深度优先搜索开始,并且在块44b对目的地节点执行Visit-(其中对应于Phi函数)。然后,流程40可包括,如下面更详细描述的,在块44c执行VisitExpression以评估表达式。如果该表达式是赋值节点的一部分,则流程40可包括在块44d对所有SSA边缘执行SSA图的深度优先搜索(例如,如下文更详细描述)。如果该表达式控制条件分支,则流程40可包括根据条件表达式的值对边缘执行程序流图的深度优先搜索(例如,如下文更详细描述)。
程序通常可能将大部分的程序时间花费在执行循环中。因此,识别WCV涉及找到控制循环计数的所有变量。一些实施例可有利地定义编译器指令,以允许程序员直接指定工作负载变量。然而,在实践中,WCV也可通过编译器的静态分析来识别,这将涉及所有可以使得编译时间更长的循环。
在一些实施例中,编译器指令可在对性能至关重要的内核过程内定义。每个指令整体指定工作负载变量的列表,并且为编译器对内核过程的专门优化提供提示。下面的伪代码示出了在“Conv2d”内核函数中作为添加的pragma“workload”的工作负载编译器指令的“C”编程语言示例:
现在转向图5,工作负载编译器指令51的一般格式的实施例与相应的WorkloadList结构52的实施例一起被示出。例如,WorkloadList结构52可与每个工作负载编译器指令51相关联。WorkloadList结构52存储了包含工作负载变量的整个组合的值的工作负载实例的列表。对于工作负载编译器指令51,#pragma workload(var1,var2,…,varN),Var1…VarN对应于内核过程中定义的有效变量名。WorkloadList结构52包含了代表工作负载的不同实例的各个变量的常量值的群组。
现在转向图6,矩阵结构的一实施例可被称为M级点阵60。例如,一些实施例还调整了常量传播点阵,以便能够通过流程图记录所有的常量实例,这可直观地表示为如M级点阵60所示,带有图示的会合规则,其中T对应于矩阵的顶部,⊥对应于矩阵的底部(例如,对应于终端状态),并且∏代表集合相交操作。每个Ci代表任意的常量。M是预设的固定数字(例如,M>1),以控制点阵可运送的常量的数目。
一些实施例可提供基于经典的SCC传播的技术,带有以下改变:1)利用M级点阵评估常量值;2)使用深度优先搜索而不是迭代遍历来跟踪沿着同一执行路径的WCV的值;并且3)在评估M级点阵值时添加WorkloadFlag来调整M。对于WCV,一些实施例可要求多于两次降低,这取决于M的值。对于所有其他变量,它们只能像以前一样被降低两次。应用上述对M的限制有利地避免了M的大值的渐近复杂度扩展。一些实施例可有利地提供与传统SCC相比类似的渐近复杂度,同时获得WCV的常量值。
一些实施例最初为每个SSA边缘添加WorkloadFlag,以指示该边缘是否链接到工作负载变量。对于工作负载编译器指令中列出的每个变量,一些实施例从变量def站点和表达式部分中使用的变量遍历过SSA图中的use-def链。对于遍历中访问的所有边缘,WorkloadFlag被设置为True。与SCC技术类似,一些实施例也为每个程序流图边缘添加ExecutableFlag,并且将ExecutableFlag默认设置为False。每个LatticeCell最初被设置为T。
然后,一些实施例从程序流图中的入口边缘开始Depth_First_Search_Flowgraph,直到终止,其中Depth_First_Search_Flowgraph(Edge)被定义为如下:
如果这个Edge的ExecutableFlag是True,则返回。
将此Edge的ExecutableFlag标记为True。
如果只有一条内边缘的ExecutableFlag为True,则在目的地节点处执行VisitExpression。
如果只有一条外边缘,则在这个Edge上执行Depth_First_Search_Flowgraph。
-函数的每个操作对象的LatticeCell是基于相应程序流边缘的ExecutableFlag来定义的。如果ExecutableFlag为True,则LatticeCell的值是当前值和定义结束时LatticeCell值的会合:
LatticeCell(Vi)=LatticeCell(Vi)∏LatticeCell(Vj)
在一些实例中,VisitExpression被定义为如下:
评估表达式,从定义它们的LatticeCells中获得操作对象的值。
如果该表达式是赋值节点的一部分,则从此节点中的定义开始,调用所有SSA边缘的Depth_First_Search_SSA。最好遵循这个序列:指向目的地节点的主导节点的边缘先于其他边缘。
如果表达式控制了条件分支,则根据条件表达式的值在边缘上执行Depth_First_Search_Flowgraph。
在一些实施例中,Depth_First_Search_SSA(Edge)被定义为如下:
检查到达目的地节点的程序流图边缘的ExecutableFlags,如果它们中没有一个是True,则返回。
如果此Edge的目的地是工作负载编译器指令,则将工作负载变量的值添加到与此节点相关联的WorkloadList中。返回。
如果此Edge的目的地是表达式,则执行VisitExpression。
图7A示出了编译器装置132(132a-132c),它可实现系统10、装置20、方法30、流程40、WorkloadList结构52、M级点阵60和/或本文描述的任何其他实施例的一个或多个方面。可包括逻辑指令、可配置逻辑、固定功能硬件逻辑的编译器装置132可容易替代已经论述过的编译器逻辑13(图1)。WCV识别器132a可识别WCV。WorkloadFlag加法器132b可将工作负载标志添加到静态单一赋值图中的各个边缘。常量传播器132c可基于所识别的WCV和工作负载标志来传播常量。在一些实施例中,WCV识别器132a可被配置为接收编译器指令以识别WCV。替换地,或者额外地,WCV识别器132a可被配置为通过对要编译的代码的静态分析来识别WCVs。例如,常量传播器132c可被配置为基于所识别的WCV和工作负载标志将编译器时间和空间复杂度约束在常量传播的渐近界限下。在一些实施例中,常量传播器132c可进一步被配置为利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一(1)。例如,常量足迹可包括全局常量和部分常量实例中的一个或多个。
现在转向图7B,示出了编译器装置134(134a,134b),其中逻辑134b(例如,晶体管阵列和其他集成电路/IC组件)耦合到衬底134a(例如,硅、蓝宝石、砷化镓)。逻辑134b一般可实现系统10、装置20、方法30、流程40、WorkloadList结构52、M级点阵60和/或本文描述的任何其他实施例的一个或多个方面。从而,逻辑134b可包括技术来识别WCV,将工作负载标志添加到静态单一赋值图中的各个边缘,并且基于所识别的WCV和工作负载标志来传播常量。在一些实施例中,逻辑134b可被配置为接收编译器指令以识别WCV。替换地,或者额外地,逻辑134b可被配置为通过对要编译的代码的静态分析来识别WCV。例如,逻辑134b也可被配置为基于所识别的WCV和工作负载标志将编译器时间和空间复杂度约束在常量传播的渐近界限下。在一些实施例中,逻辑134b可进一步被配置为利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一(1)。例如,常量足迹可包括全局常量和部分常量实例中的一个或多个。在一个示例中,装置134是半导体管芯、芯片和/或封装。
图8根据一个实施例图示了处理器核心200。处理器核心200可以是用于任何类型的处理器(例如微处理器、嵌入式处理器、数字信号处理器(digital signal processor,DSP)、网络处理器或者其他执行代码的设备)的核心。虽然在图8中只图示了一个处理器核心200,但处理元件可改为包括多于一个图8中所示的处理器核心200。处理器核心200可以是单线程核心,或者对于至少一个实施例,处理器核心200可以是多线程的,因为其对于每个核心可包括多于一个硬件线程情境(或者说“逻辑处理器”)。
图8还图示了与处理器核心200耦合的存储器270。存储器270可以是本领域技术人员已知的或者以其他方式可获得的各种存储器(包括存储器层次体系的各种层)中的任何一者。存储器270可包括要被处理器核心200执行的一个或多个代码213指令,其中代码213可实现已经论述过的系统10、装置20、方法30、流程40、WorkloadList结构52、M级点阵60和/或本文描述的任何其他实施例的一个或多个方面。处理器核心200遵循由代码213指示的指令的程序序列。每个指令可进入前端部分210并且被一个或多个解码器220处理。解码器220可生成诸如预定格式的固定宽度微操作之类的微操作作为其输出,或者可生成其他指令、微指令或者反映原始代码指令的控制信号。图示的前端部分210还包括寄存器重命名逻辑225和调度逻辑230,它们一般分配资源并且对与转换指令相对应的操作排队以便执行。
处理器核心200被示为包括具有一组执行单元255-1至255-N的执行逻辑250。一些实施例可包括专用于特定功能或功能集合的若干个执行单元。其他实施例可只包括一个执行单元或者可执行特定功能的一个执行单元。图示的执行逻辑250执行由代码指令指定的操作。
在代码指令指定的操作执行完成之后,后端逻辑260让代码213的指令引退。在一个实施例中,处理器核心200允许指令的无序执行,但要求指令的有序引退。引退逻辑265可采取本领域技术人员已知的多种形式(例如,重排序缓冲器之类的)。这样,处理器核心200在代码213的执行期间被变换,至少就由解码器生成的输出、被寄存器重命名逻辑225利用的硬件寄存器和表格和被执行逻辑250修改的任何寄存器(未示出)而言。
虽然在图8中没有图示,但处理元件可包括与处理器核心200一起在芯片上的其他元件。例如,处理元件可包括与处理器核心200一起的存储器控制逻辑。处理元件可包括I/O控制逻辑和/或可包括与存储器控制逻辑集成的I/O控制逻辑。处理元件也可包括一个或多个缓存。
现在参考图9,示出了根据一实施例的系统1000的框图。图9中所示的是多处理器系统1000,其包括第一处理元件1070和第二处理元件1080。虽然示出了两个处理元件1070和1080,但要理解系统1000的实施例也可包括仅一个这种处理元件。
系统1000被示为点到点互连系统,其中第一处理元件1070和第二处理元件1080经由点到点互连1050耦合。应当理解,图9中所示的任何或所有互连可实现为多点分支总线,而不是点到点互连。
如图9中所示,处理元件1070和1080的每一者可以是多核处理器,包括第一和第二处理器核心(即,处理器核心1074a和1074b和处理器核心1084a和1084b)。这种核心1074a、1074b、1084a、1084b可被配置为以与上文联系图8所述类似的方式来执行指令代码。
每个处理元件1070、1080可包括至少一个共享缓存1896a、1896b(例如,静态随机访问存储器/SRAM)。共享缓存1896a、1896b可存储被处理器的一个或多个组件(例如分别是核心1074a、1074b和1084a、1084b)利用的数据(例如,对象、指令)。例如,共享缓存1896a、1896b可在本地缓存存储器1032、1034中存储的数据,供处理器的组件更快速访问。在一个或多个实施例中,共享缓存1896a、1896b可包括一个或多个中间级别缓存,例如第2级(L2)、第3级(L3)、第4级(L4)或其他级别的缓存,最后一级缓存(last level cache,LLC),和/或这些的组合。
虽然示为只具有两个处理元件1070、1080,但要理解实施例的范围不限于此。在其他实施例中,一个或多个额外的处理元件可存在于给定的处理器中。或者,处理元件1070、1080中的一个或多个可以是除了处理器以外的元件,例如加速器或者现场可编程门阵列。例如,(一个或多个)额外的处理元件可包括与第一处理器1070相同的(一个或多个)额外处理器,与第一处理器1070异构或非对称的(一个或多个)额外处理器,加速器(例如,图形加速器或者数字信号处理(DSP)单元),现场可编程门阵列,或者任何其他处理元件。在处理元件1070、1080之间,就包括体系结构特性、微体系结构特性、热特性、功率消耗特性等等在内的价值度量的范围而言可以有多种差异。这些差异可实际上将其自身展现为处理元件1070、1080之间的非对称性和异构性。对于至少一个实施例,各种处理元件1070、1080可存在于相同的管芯封装中。
第一处理元件1070还可包括存储器控制器逻辑(MC)1072和点到点(P-P)接口1076和1078。类似地,第二处理元件1080可包括MC 1082和P-P接口1086和1088。如图9中所示,MC1072和1082将处理器耦合到各自的存储器,即存储器1032和存储器1034,存储器1032和存储器1034可以是在本地附接到各个处理器的主存储器的一部分。虽然MC 1072和1082被示为集成到处理元件1070、1080中,但对于替换实施例,MC逻辑可以是在处理元件1070、1080之外的分立逻辑,而不是集成在其中。
第一处理元件1070和第二处理元件1080可分别经由P-P互连1076、1086耦合到I/O子系统1090。如图9中所示,I/O子系统1090包括TEE1097(例如,安全性控制器)和P-P接口1094和1098。此外,I/O子系统1090包括接口1092来将I/O子系统1090与高性能图形引擎1038耦合。在一个实施例中,总线1049可用于将图形引擎1038耦合到I/O子系统1090。或者,点到点互连可耦合这些组件。
进而,I/O子系统1090可经由接口1096耦合到第一总线1016。在一个实施例中,第一总线1016可以是外围组件互连(Peripheral Component Interconnect,PCI)总线,或者诸如快速PCI总线或另一种第三代I/O互连总线之类的总线,虽然实施例的范围不限于此。
如图9中所示,各种I/O设备1014(例如,相机、传感器)可耦合到第一总线1016,以及可将第一总线1016耦合到第二总线1020的总线桥1018。在一个实施例中,第二总线1020可以是低引脚数(low pin count,LPC)总线。各种设备可耦合到第二总线1020,例如包括键盘/鼠标1012、(一个或多个)网络控制器/通信设备1026(其进而可与计算机网络通信)、以及数据存储单元1019,例如盘驱动器或者其他大容量存储设备,它们在一个实施例中可包括代码1030。代码1030可包括用于执行上文描述的一个或多个方法的实施例的指令。从而,图示的代码可实现已经论述过的系统10、装置20、方法30、流程40、WorkloadList结构52、M级点阵60和/或本文描述的任何其他实施例的一个或多个方面,并且可与已经论述过的代码213(图8)类似。另外,音频I/O 1024可耦合到第二总线1020。
注意设想了其他实施例。例如,取代图9的点到点体系结构,系统可实现多点分支总线或者另外的这种通信拓扑。
附加注释和示例:
示例1包括一种电子处理系统,包括处理器,与所述处理器以可通信方式耦合的存储器,以及与所述处理器以可通信方式耦合的编译器逻辑,用于识别工作负载控制变量,将工作负载标志添加到静态单一赋值图中的各个边缘,并且基于所识别的工作负载控制变量和所述工作负载标志来传播常量。
示例2包括如示例1所述的系统,其中所述编译器逻辑还用于接收编译器指令以识别所述工作负载控制变量。
示例3包括如示例1至2的任何一项所述的系统,其中所述编译器逻辑还用于通过对要编译的代码的静态分析来识别所述工作负载控制变量。
示例4包括如示例1至3的任何一项所述的系统,其中所述编译器逻辑还用于基于所识别的工作负载控制变量和所述工作负载标志,将编译器时间和空间复杂度约束在常量传播的渐近界限下。
示例5包括如示例1至4的任何一项所述的系统,其中所述编译器逻辑还用于利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。
示例6包括如示例5所述的系统,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
示例7包括一种用于编译器的半导体封装装置,包括一个或多个衬底,以及与所述一个或多个衬底耦合的逻辑,其中所述逻辑至少部分实现在可配置逻辑和固定功能硬件逻辑中的一个或多个中,与所述一个或多个衬底耦合的所述逻辑用于识别工作负载控制变量,将工作负载标志添加到静态单一赋值图中的各个边缘,并且基于所识别的工作负载控制变量和所述工作负载标志来传播常量。
示例8包括如示例7所述的装置,其中所述逻辑还用于接收编译器指令以识别所述工作负载控制变量。
示例9包括如示例7至8的任何一项所述的装置,其中所述逻辑还用于通过对要编译的代码的静态分析来识别所述工作负载控制变量。
示例10包括如示例7至9的任何一项所述的装置,其中所述逻辑还用于基于所识别的工作负载控制变量和所述工作负载标志,将编译器时间和空间复杂度约束在常量传播的渐近界限下。
示例11包括如示例7至10的任何一项所述的装置,其中所述逻辑还用于利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。
示例12包括如示例11所述的装置,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
示例13包括如示例7至12的任何一项所述的装置,其中与所述一个或多个衬底耦合的所述逻辑包括定位在所述一个或多个衬底内的晶体管沟道区域。
示例14包括一种编译的方法,包括识别工作负载控制变量,将工作负载标志添加到静态单一赋值图中的各个边缘,并且基于所识别的工作负载控制变量和所述工作负载标志来传播常量。
示例15包括如示例14所述的方法,还包括接收编译器指令以识别所述工作负载控制变量。
示例16包括如示例14至15的任何一项所述的方法,还包括通过对要编译的代码的静态分析来识别所述工作负载控制变量。
示例17包括如示例14至16的任何一项所述的方法,还包括基于所识别的工作负载控制变量和所述工作负载标志,将编译器时间和空间复杂度约束在常量传播的渐近界限下。
示例18包括如示例14至17的任何一项所述的方法,还包括利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。
示例19包括如示例18所述的方法,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
示例20包括至少一个计算机可读存储介质,包括一组指令,所述一组指令当被计算设备执行时,使得所述计算设备识别工作负载控制变量,将工作负载标志添加到静态单一赋值图中的各个边缘,并且基于所识别的工作负载控制变量和所述工作负载标志来传播常量。
示例21包括如示例20所述的至少一个计算机可读存储介质,包括另一组指令,所述另一组指令当被所述计算设备执行时,使得所述计算设备接收编译器指令以识别所述工作负载控制变量。
示例22包括如示例20所述的至少一个计算机可读存储介质,包括另一组指令,所述另一组指令当被所述计算设备执行时,使得所述计算设备通过对要编译的代码的静态分析来识别所述工作负载控制变量。
示例23包括如示例20所述的至少一个计算机可读存储介质,包括另一组指令,所述另一组指令当被所述计算设备执行时,使得所述计算设备基于所识别的工作负载控制变量和工作负载标志,将编译器时间和空间复杂度约束在常量传播的渐近界限下。
示例24包括如示例20所述的至少一个计算机可读存储介质,包括另一组指令,所述另一组指令当被所述计算设备执行时,使得所述计算设备利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。
示例25包括如示例24所述的至少一个计算机可读存储介质,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
示例26包括一种编译器装置,包括用于识别工作负载控制变量的装置,用于将工作负载标志添加到静态单一赋值图中的各个边缘的装置,以及用于基于所识别的工作负载控制变量和所述工作负载标志来传播常量的装置。
示例27包括如示例26所述的装置,还包括用于接收编译器指令以识别所述工作负载控制变量的装置。
示例28包括如示例26至27的任何一项所述的装置,还包括用于通过对要编译的代码的静态分析来识别所述工作负载控制变量的装置。
示例29包括如示例26至28的任何一项所述的装置,还包括用于基于所识别的工作负载控制变量和所述工作负载标志将编译器时间和空间复杂度约束在常量传播的渐近界限下的装置。
示例30包括如示例26至29的任何一项所述的装置,还包括用于利用M级点阵和深度优先搜索来追踪常量足迹的装置,其中M大于或等于一。
示例31包括如示例30所述的装置,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
实施例适用于与所有类型的半导体集成电路(“IC”)芯片一起使用。这些IC芯片的示例包括但不限于处理器、控制器、芯片集组件、可编程逻辑阵列(programmable logicarray,PLA)、存储器芯片、网络芯片、片上系统(systems on chip,SoC)、SSD/NAND控制器ASIC,等等。此外,在一些附图中,用线条来表示信号导线。某些可能是不同的,以指示更多的构成信号路径,具有数字标注,以指示构成信号路径的数目,和/或在一端或多端具有箭头,以指示主要信息流方向。然而,这不应当以限制方式来解释。更确切地说,这种添加的细节可联系一个或多个示范性实施例使用来促进对电路的更容易理解。任何表示的信号线,无论是否具有附加信息,都可实际上包括一个或多个信号,这一个或多个信号可在多个方向上行进并且可利用任何适当类型的信号方案(例如利用差动对实现的数字或模拟线路、光纤线路和/或单端线路)来实现。
可能给出了示例大小/型号/值/范围,虽然实施例不限于此。随着制造技术(例如,光刻术)随着时间流逝而成熟,预期能够制造具有更小大小的器件。此外,为了图示和论述的简单,并且为了不模糊实施例的某些方面,在附图内可能示出或不示出到IC芯片和其他组件的公知电源/接地连接。另外,可能以框图形式示出布置以避免模糊实施例,并且同时也考虑到了如下事实:关于这种框图布置的实现的具体细节是高度取决于在其内实现实施例的平台的,即,这种具体细节应当完全在本领域技术人员的视野内。在阐述具体细节(例如,电路)以便描述示例实施例的情况下,本领域技术人员应当清楚,没有这些具体细节,或者利用这些具体细节的变体,也可实现实施例。从而说明书应当被认为是说明性的,而不是限制性的。
术语“耦合”在本文中可用于指所涉组件之间的任何类型的关系,无论是直接的还是间接的,并且可应用到电的、机械的、液体的、光的、电磁的、机电的或者其他连接。此外,除非另外指出,否则术语“第一”、“第二”等等在本文中可只用于促进论述,而不带有特定的时间或先后意义。
就在本申请中和权利要求中使用的而言,由术语“…中的一个或多个”联接的项目的列表可意指列出的术语的任何组合。例如,短语“A、B和C中的一个或多个”和短语“A、B或C中的一个或多个”两者都可意指A;B;C;A和B;A和C;B和C;或者A、B和C。
本领域技术人员从前述描述将会明白,实施例的宽广技术可按多种形式实现。因此,虽然已联系其特定示例描述了实施例,但实施例的真实范围不应当限于此,因为本领域技术人员在研习了附图、说明书和所附权利要求后将清楚其他修改。
Claims (25)
1.一种电子处理系统,包括:
处理器;
与所述处理器以可通信方式耦合的存储器;以及
与所述处理器以可通信方式耦合的编译器逻辑,该编译器逻辑用于:
识别工作负载控制变量,
将工作负载标志添加到静态单一赋值图中的各个边缘,并且
基于所识别的工作负载控制变量和所述工作负载标志来传播常量。
2.如权利要求1所述的系统,其中所述编译器逻辑还用于:
接收编译器指令以识别所述工作负载控制变量。
3.如权利要求1所述的系统,其中所述编译器逻辑还用于:
通过对要编译的代码的静态分析来识别所述工作负载控制变量。
4.如权利要求1至3的任何一项所述的系统,其中所述编译器逻辑还用于:
基于所识别的工作负载控制变量和所述工作负载标志,将编译器时间和空间复杂度约束在常量传播的渐近界限下。
5.如权利要求1至3的任何一项所述的系统,其中所述编译器逻辑还用于:
利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。
6.如权利要求5所述的系统,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
7.一种用于编译器的半导体封装装置,包括:
一个或多个衬底;以及
与所述一个或多个衬底耦合的逻辑,其中所述逻辑至少部分实现在可配置逻辑和固定功能硬件逻辑中的一个或多个中,与所述一个或多个衬底耦合的所述逻辑用于:
识别工作负载控制变量,
将工作负载标志添加到静态单一赋值图中的各个边缘,并且
基于所识别的工作负载控制变量和所述工作负载标志来传播常量。
8.如权利要求7所述的装置,其中所述逻辑还用于:
接收编译器指令以识别所述工作负载控制变量。
9.如权利要求7所述的装置,其中所述逻辑还用于:
通过对要编译的代码的静态分析来识别所述工作负载控制变量。
10.如权利要求7至9的任何一项所述的装置,其中所述逻辑还用于:
基于所识别的工作负载控制变量和所述工作负载标志,将编译器时间和空间复杂度约束在常量传播的渐近界限下。
11.如权利要求7至9的任何一项所述的装置,其中所述逻辑还用于:
利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。
12.如权利要求11所述的装置,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
13.如权利要求7至9的任何一项所述的装置,其中与所述一个或多个衬底耦合的所述逻辑包括定位在所述一个或多个衬底内的晶体管沟道区域。
14.一种编译的方法,包括:
识别工作负载控制变量;
将工作负载标志添加到静态单一赋值图中的各个边缘;并且
基于所识别的工作负载控制变量和所述工作负载标志来传播常量。
15.如权利要求14所述的方法,还包括:
接收编译器指令以识别所述工作负载控制变量。
16.如权利要求14所述的方法,还包括:
通过对要编译的代码的静态分析来识别所述工作负载控制变量。
17.如权利要求14至16的任何一项所述的方法,还包括:
基于所识别的工作负载控制变量和所述工作负载标志,将编译器时间和空间复杂度约束在常量传播的渐近界限下。
18.如权利要求14至16的任何一项所述的方法,还包括:
利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。
19.如权利要求18所述的方法,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
20.至少一个计算机可读存储介质,包括一组指令,所述一组指令当被计算设备执行时,使得所述计算设备执行以下操作:
识别工作负载控制变量;
将工作负载标志添加到静态单一赋值图中的各个边缘;并且
基于所识别的工作负载控制变量和所述工作负载标志来传播常量。
21.如权利要求20所述的至少一个计算机可读存储介质,包括另一组指令,所述另一组指令当被所述计算设备执行时,使得所述计算设备执行以下操作:
接收编译器指令以识别所述工作负载控制变量。
22.如权利要求20所述的至少一个计算机可读存储介质,包括另一组指令,所述另一组指令当被所述计算设备执行时,使得所述计算设备执行以下操作:
通过对要编译的代码的静态分析来识别所述工作负载控制变量。
23.如权利要求20至22的任何一项所述的至少一个计算机可读存储介质,包括另一组指令,所述另一组指令当被所述计算设备执行时,使得所述计算设备执行以下操作:
基于所识别的工作负载控制变量和工作负载标志,将编译器时间和空间复杂度约束在常量传播的渐近界限下。
24.如权利要求20至22的任何一项所述的至少一个计算机可读存储介质,包括另一组指令,所述另一组指令当被所述计算设备执行时,使得所述计算设备执行以下操作:
利用M级点阵和深度优先搜索来追踪常量足迹,其中M大于或等于一。
25.如权利要求24所述的至少一个计算机可读存储介质,其中所述常量足迹包括全局常量和部分常量实例中的一个或多个。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2019/076128 WO2020172788A1 (en) | 2019-02-26 | 2019-02-26 | Workload oriented constant propagation for compiler |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113330418A true CN113330418A (zh) | 2021-08-31 |
Family
ID=72239045
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980090260.3A Pending CN113330418A (zh) | 2019-02-26 | 2019-02-26 | 编译器的面向工作负载的常量传播 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11922152B2 (zh) |
EP (1) | EP3931685A4 (zh) |
JP (1) | JP7287743B2 (zh) |
KR (1) | KR20210127923A (zh) |
CN (1) | CN113330418A (zh) |
WO (1) | WO2020172788A1 (zh) |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2834171B2 (ja) * | 1989-02-06 | 1998-12-09 | 株式会社日立製作所 | コンパイル方法 |
US5805895A (en) * | 1996-06-09 | 1998-09-08 | Motorola, Inc. | Method and apparatus for code translation optimization |
US6016398A (en) * | 1997-04-01 | 2000-01-18 | Intel Corporation | Method for using static single assignment to color out artificial register dependencies |
US5999735A (en) * | 1997-04-01 | 1999-12-07 | Intel Corporation | Method for constructing a static single assignment language accommodating complex symbolic memory references |
US6427234B1 (en) * | 1998-06-11 | 2002-07-30 | University Of Washington | System and method for performing selective dynamic compilation using run-time information |
JP4462676B2 (ja) * | 1999-10-27 | 2010-05-12 | 富士通株式会社 | プログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6738967B1 (en) * | 2000-03-14 | 2004-05-18 | Microsoft Corporation | Compiling for multiple virtual machines targeting different processor architectures |
JP3813087B2 (ja) | 2001-12-20 | 2006-08-23 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム変換方法、コンピュータ装置及びプログラム |
US9170812B2 (en) * | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
JP4090969B2 (ja) | 2003-09-03 | 2008-05-28 | 独立行政法人科学技術振興機構 | 信号分離方法、信号分離プログラム及びそのプログラムを記録した記録媒体 |
US7814467B2 (en) * | 2004-01-15 | 2010-10-12 | Hewlett-Packard Development Company, L.P. | Program optimization using object file summary information |
CN100409187C (zh) * | 2004-02-12 | 2008-08-06 | 松下电器产业株式会社 | 程序转换装置及程序转换方法 |
US7694288B2 (en) * | 2005-10-24 | 2010-04-06 | Analog Devices, Inc. | Static single assignment form pattern matcher |
US20080028380A1 (en) * | 2006-07-26 | 2008-01-31 | Liang Guo | Localized, incremental single static assignment update |
JP5159238B2 (ja) | 2007-10-12 | 2013-03-06 | 株式会社東芝 | 車両検知器の異常検出装置および車両検知器の異常検出方法 |
US20090125894A1 (en) | 2007-11-14 | 2009-05-14 | Nair Sreekumar R | Highly scalable parallel static single assignment for dynamic optimization on many core architectures |
US20100199269A1 (en) * | 2008-02-05 | 2010-08-05 | Panasonic Corporation | Program optimization device and program optimization method |
US9081928B2 (en) * | 2009-06-02 | 2015-07-14 | Vector Fabrics, B.V. | Embedded system development |
US9009689B2 (en) * | 2010-11-09 | 2015-04-14 | Intel Corporation | Speculative compilation to generate advice messages |
US9495139B2 (en) * | 2011-04-11 | 2016-11-15 | University Of Florida Research Foundation, Inc. | Elastic computing |
EP2831797B1 (en) | 2012-03-30 | 2018-05-02 | Irdeto B.V. | Securing accessible systems using dynamic data mangling |
JP5842255B2 (ja) | 2013-12-12 | 2016-01-13 | 国立大学法人東京工業大学 | プログラミング言語による論理回路記述から論理回路を生成するための装置及び方法 |
US9245125B2 (en) * | 2014-02-27 | 2016-01-26 | Nec Laboratories America, Inc. | Duleak: a scalable app engine for high-impact privacy leaks |
US9286044B2 (en) * | 2014-06-27 | 2016-03-15 | International Business Machines Corporation | Hybrid parallelization strategies for machine learning programs on top of MapReduce |
US20160306847A1 (en) | 2015-04-15 | 2016-10-20 | Futurewei Technologies, Inc. | Apparatus and Method for Using Parameterized Intermediate Representation for Just-In-Time Compilation in Database Query Execution Engine |
EP3566159B1 (en) | 2017-01-05 | 2020-10-21 | Koninklijke Philips N.V. | Compiling device and method |
US10303449B2 (en) | 2017-07-31 | 2019-05-28 | Oracle International Corporation | Compiling non-native constants |
-
2019
- 2019-02-26 US US17/430,394 patent/US11922152B2/en active Active
- 2019-02-26 EP EP19916649.7A patent/EP3931685A4/en not_active Withdrawn
- 2019-02-26 CN CN201980090260.3A patent/CN113330418A/zh active Pending
- 2019-02-26 KR KR1020217023303A patent/KR20210127923A/ko not_active Application Discontinuation
- 2019-02-26 WO PCT/CN2019/076128 patent/WO2020172788A1/en unknown
- 2019-02-26 JP JP2021538706A patent/JP7287743B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
US11922152B2 (en) | 2024-03-05 |
EP3931685A1 (en) | 2022-01-05 |
KR20210127923A (ko) | 2021-10-25 |
JP2022521127A (ja) | 2022-04-06 |
EP3931685A4 (en) | 2022-10-12 |
US20220147331A1 (en) | 2022-05-12 |
JP7287743B2 (ja) | 2023-06-06 |
WO2020172788A1 (en) | 2020-09-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Prabhu et al. | Exposing speculative thread parallelism in SPEC2000 | |
US8683468B2 (en) | Automatic kernel migration for heterogeneous cores | |
US9081928B2 (en) | Embedded system development | |
US20070079303A1 (en) | Systems and methods for affine-partitioning programs onto multiple processing units | |
WO2015150342A1 (en) | Program execution on heterogeneous platform | |
Mikushin et al. | KernelGen--The Design and Implementation of a Next Generation Compiler Platform for Accelerating Numerical Models on GPUs | |
Hormati et al. | Macross: Macro-simdization of streaming applications | |
US10318261B2 (en) | Execution of complex recursive algorithms | |
Jacob et al. | CUDACL: A tool for CUDA and OpenCL programmers | |
US9921838B2 (en) | System and method for managing static divergence in a SIMD computing architecture | |
US10152310B2 (en) | Fusing a sequence of operations through subdividing | |
US10678524B2 (en) | Runtime struct fields size reduction | |
Amiri et al. | FLOWER: A comprehensive dataflow compiler for high-level synthesis | |
Janik et al. | An overview of altera sdk for opencl: A user perspective | |
Hosseinabady et al. | Optimised OpenCL workgroup synthesis for hybrid ARM-FPGA devices | |
Goossens | Dataflow management, dynamic load balancing, and concurrent processing for real‐time embedded vision applications using Quasar | |
CN113330418A (zh) | 编译器的面向工作负载的常量传播 | |
CN113885877A (zh) | 编译的方法、装置、设备及介质 | |
Torres et al. | Supporting efficient overlapping of host-device operations for heterogeneous programming with CtrlEvents | |
Bhat et al. | Towards automatic parallelization of “for” loops | |
Stitt et al. | Thread warping: Dynamic and transparent synthesis of thread accelerators | |
US11593114B1 (en) | Iterating group sum of multiple accumulate operations | |
Faict | Exploring opencl on a cpu-fpga heterogeneous architecture | |
Yamagiwa | Invitation to a standard programming interface for massively parallel computing environment: OpenCL | |
US20210319369A1 (en) | Multi-level caching for dynamic deep learning models |
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 |