CN107408054A - 用于通用计算图形处理单元中的语言嵌入式编程的流控制 - Google Patents
用于通用计算图形处理单元中的语言嵌入式编程的流控制 Download PDFInfo
- Publication number
- CN107408054A CN107408054A CN201680013001.7A CN201680013001A CN107408054A CN 107408054 A CN107408054 A CN 107408054A CN 201680013001 A CN201680013001 A CN 201680013001A CN 107408054 A CN107408054 A CN 107408054A
- Authority
- CN
- China
- Prior art keywords
- node
- flow control
- variable
- data structure
- sentence
- 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 39
- 238000004590 computer program Methods 0.000 claims abstract description 6
- 230000006870 function Effects 0.000 claims description 24
- 230000009471 action Effects 0.000 claims description 16
- 238000005457 optimization Methods 0.000 claims description 2
- 238000005192 partition Methods 0.000 claims 1
- 230000002265 prevention Effects 0.000 claims 1
- 230000004087 circulation Effects 0.000 abstract description 24
- 238000005516 engineering process Methods 0.000 description 7
- 230000000875 corresponding effect Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000001351 cycling effect Effects 0.000 description 2
- 238000005034 decoration Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
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/42—Syntactic analysis
- G06F8/423—Preprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/314—Parallel programming languages
-
- 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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow 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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
- G06F8/434—Pointers; Aliasing
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种计算设备中的流控制方法以及存储该方法的计算机程序产品,所述方法用于处理流控制语句以适应在计算设备上运行的程序的数据结构。本发明从而允许在编译时将内核集成到主程序中。CPU程序部分和内核的整个解析由一个单个标准编译器完成。用于设备的实际编译器可以作为库被链接,并且不需要进行任何解析。本发明还允许在语言嵌入式GPGPU编程中使用循环和if子句,使得能够以完全嵌入普通编程语言中的方式实现设备的全通用编程。所述设备可以是高度并行的计算设备,诸如视频卡或一些其它计算设备。
Description
技术领域
本发明涉及借助通用计算图形处理单元的数据处理。具体地,本发明涉及一种称为“语言嵌入式编程”的新技术。
背景技术
术语通用计算图形处理单元(GPGPU)用于使用专门的高度并行的硬件来执行通常在标准处理器上执行的计算上要求苛刻的任务。所述硬件可以是视频卡或一些其它计算设备。在大多数GPGPU编程环境中,可以在中央处理单元(CPU)上运行的主程序、以及针对计算上要求苛刻的任务在设备上运行的内核由单独的编译器解析。主程序由普通编译器解析,并以普通编程语言编写,而内核由专用编译器解析并以专门的编程语言编写。
涉及语言嵌入式编程的技术首先由Thomas C.Jansen在其博士论文“GPU++-AnEmbedded GPU Development System for General-Purpose Computations”(慕尼黑技术大学,2007年)中进行了描述。其中不包括流控制的方法,诸如循环或if子句。因此,本公开限于非常小的程序集,并且不能实现通用编程。
WO2012/097316描述了用于利用并行处理单元扩展通用图形处理单元的架构以允许基于流水线的应用的有效处理的技术。所述技术包括配置连接到作为处理流水线的阶段操作的并行处理单元的本地存储器缓冲器,以保持用于在并行处理单元之间传送的数据。
面向对象的编程语言允许定义新的数据类型以及对应的操作符。在语言嵌入式编程中,以这样的方式代替进行实际计算来定义特定数据类型,计算的步骤被记录并用于生成用于设备的机器码。以这种方式,内核被完全集成到主程序中,并且不必由特定编译器进行解析。
这些特定数据类型用于表示驻留在设备上的值。这些值通常将被存储在寄存器中。在一个示例中,用于设备值的类型名称是以表达式“gpu_”为前缀的内在(intrinsic)类型名称,即,int变为gpu_int,float变为gpu_float等。其它命名规格也是可以的。内核可以作为使用这些特定数据类型的函数被访问。当在CPU上执行这样的内核函数时,设备数据类型的使用将创建其中表示计算步骤的表达图(expression graph)。每个设备变量都拥有指向表达图中节点的指针,该指针确定如何计算该变量的值。根据该表达图生成内核代码。
利用现有技术的教导,内核不能被集成到主程序中,除非使用两个单独的编译器。
发明内容
本发明克服了现有技术的缺点,并且因此允许将内核集成到主程序中。CPU程序部分和内核的整个解析由一个单个标准编译器完成。用于设备的实际编译器可以作为库被链接,并且不需要进行任何解析。
本发明还允许在语言嵌入式GPGPU编程中使用循环和if子句,使得能够以完全嵌入普通编程语言中的方式实现设备的全通用编程。该设备可以是高度并行的计算设备,诸如视频卡或其它计算设备。
上述目的通过根据权利要求1的计算设备中的流控制的方法(用于处理流控制语句以适应在计算设备上运行的程序的数据结构)以及根据权利要求14的计算机程序产品来实现。在从属权利要求中限定了其它有利特征。
附图说明
图1是空变量列表的图。
图2是包含变量a、b和c的设备变量列表的图。
图3是在引入变量的副本之前的表达图。
图4是在引入变量的副本之后的表达图。
图5是循环之前以及评估指令节点之后的表达图。
图6是在循环体的结束处的表达图。
图7是示出替换指针的表达图。
图8是评估替换指针的效果之后的表达图。
图9是循环之后的表达图。
图10是示例内核的结束处的表达图。
图11是示出流控制语句的全表达图。
具体实施方式
本发明允许在语言嵌入式编程中使用流控制语句,诸如循环和if子句。
存在不同种类的流控制语句。最常见的是if子句、while循环和for循环。本发明适用于全部它们三个,但是本发明的一般原理也可以适用于其它种类的流控制语句。
在上面列出的三个流控制语句中,if子句是最基本的一个。循环有一些额外的要求。
在while循环中,循环条件在循环体内修改。因此,必须特别小心。解决这个问题的一种方法是将循环条件实例化为循环外的布尔值(Boolean)。
例如,
可以被实现为
For循环总是可以通过在循环之前声明循环变量并在循环体中使其递增而表示为while循环。
为了使编程更加用户友好,建议模仿传统的循环语法。然而,根据本发明,要求在循环体的开始和结束处调用函数。代替编写:
需要编写像下面的语句:
为了实现前面的语法,可以使用语言特征。例如,在C++中,这可以利用宏、for循环和constructor/destructors来实现。
用于跳过循环体的其余部分并继续下一个循环的“continue”语句可以被实现为覆盖循环体的其余部分的if子句,或者在继续语句是在子句中的情况下被实现为多个if子句。
作为示例,考虑以下循环:
gpu_continue()语句可以通过将循环变换成以下程序来实现,优选地由编译器库进行变换:
用于退出循环的“break”语句可以像“continue”语句一样被实现,但是其中循环条件也被修改,以便退出循环。
作为关于本发明的基础技术的示例,以下程序是一个示例:
在示例程序中,b用作循环变量,针对小于10的所有奇数自然数运行。变量a会将这些数字相加,并返回结果。为了在设备上执行该程序,对其进行如下修改:
将变量改变为相应的设备数据类型,设备值由前缀gpu_指示,因此int变为gpu_int。在循环体的开始和结束处,分别调用特定函数gpu_while_begin和gpu_while_end。
对于其它流控制语句,诸如if子句,可以使用其它函数(诸如gpu_if_begin和gpu_if_end)代替。代替在此明确地调用这些函数,可以使用构造函数/析构函数机制或其它语言特征来使循环声明更加用户友好。然而,本发明不限于任何这样的方法,并且出于解释性原因,在此将使用更基本的方法来在示例中明确地调用gpu_while_begin和gpu_while_end函数。结果被写入到资源res,资源res提供内存访问。资源访问的实现是本领域技术人员公知的,因此在本文中不再详细描述。假设使用“[]”运算符生成适当的指令。程序代码可以作为某一函数或类来访问。在本文中,作为示例,使用函数example_kernel(),以便可以从编译器库中调用它。
使用语言嵌入式编程技术。在内核可以在设备上运行之前,需要生成内核程序指令。为此,在CPU上执行内核函数。与标准内在变量相反,声明为设备类型的所有变量(在本示例中为gpu_int和gpu_bool)将不会立即执行计算,而是将计算步骤记录在表达图中,该表达图是有向且非循环图。每个设备变量都包含指向其表达图中当前值的指针。只要设备变量被分配了一个新值,其指针就改变成该新值。不再被参考的节点可能会被删除。两个或更多个变量可能指向同一节点。如果变量被复制,或者在表达式被优化之后,则可能会发生这种情况。根据该表达图生成内核代码。这可以是直接机器代码,或是一些中间代码,诸如OpenCL。
对于本发明,可以单独地或组合地实现以下过程:
以某种方式登记设备变量,使得计算机可以在任何时间访问存在于当前作用域(scope)内的所有设备变量的列表。这些变量也称为主动变量。大多数现代编程语言都支持作用域的概念。局部变量只在给定作用域内有效。请考虑以下示例:
在上面的代码段中,变量在以下作用域内有效:变量a从第3行到第9行,变量i从第4行到第7行,以及变量b从第6行到第7行。
对应的局部变量(在该示例中为变量a、i和b)仅从这样的点开始存在:它们被限定为对应作用域的结束。在执行期间的任一点处,都有明确定义的一组变量都是活跃的。在一些编程语言中,当变量首次存在时调用构造函数,并且当对应的作用域结束时调用析构函数。变量也可以在堆上被分配,在这种情况下,程序员可以选择何时创建和何时销毁它们。在本发明中,设备变量在创建它们的相同作用域内被销毁。否则,在设备上将需要动态内存管理,并且变量不能被存储在寄存器中。
参照图1,说明在运行时访问主动变量的列表的方法。如果编程语言支持构造函数和析构函数,许多选项中的一个(但可能是最有效的实现方法)就是使用构造函数和析构函数以及双向链表。所有设备变量存储指向前一个变量和下一个变量的两个指针。可选地,可以使用基类。根节点存储为静态变量。根节点用作列表的入口点。利用根节点地址本身初始化根节点的两个指针prev和next。
然后,当设备变量进入作用域时,将通过按以下方式设置指针来调用其构造函数,该构造函数将新变量插入到列表中:
this->prev=root->prev
this->next=root
root->prev->next=this
root->prev=this
其中“this”指向新变量,并且“root”指向静态根节点。
图2示出了具有三个变量a、b和c的列表结构。当设备变量离开作用域时,调用其析构函数,该析构函数将通过如下设置指针从列表中删除所述变量:
this->prev->next=this->next
this->next->prev=this->prev
利用这样的列表,可以通过在根节点处开始并且通过跟随下一个指针来访问当前存在的所有设备变量,直到再次到达根节点。另选地,可以使用其它方法来跟踪主动变量,这取决于编程语言支持哪些特征。
在CPU上执行内核程序以生成表达图,表达图稍后将用于创建用于设备的内核指令。
只要在处理期间遇到循环或if子句,函数gpu_while_begin()或gpu_if_begin()或适用于遇到的流控制语句的任何其它函数都在循环体的开始处被调用。图3示出了当调用gpu_while_begin()时,在循环的开始处的程序“example_kerneF”的表达图。
该函数可以具有以下效果中的一个或更多个:
参照图3,对于当前存在的每个设备变量,其值被其自身的副本替换,即,创建复制节点,并且改变变量中的节点指针以指向新的复制节点。新的复制节点指向原始节点。从而指向相同表达节点的多个变量被分离以指向不同的节点。因此,可以向所有设备变量分配寄存器,否则对于所有节点条目(诸如常数)可能不是这种情况。以这种方式,保证每个设备变量都可以被分配唯一的寄存器名称。复制节点的创建对于每个变量可能不是严格必需的,但是稍后可以去除冗余的复制操作。
图4示出了在引入复制节点之后的表达图。这些框表示变量,圆圈表示确定它们的值所需的操作。
为了处理先前指令的表达图,执行以下操作:立即评估当前的表达图。如图5所示,这将生成内核指令,直到循环开始,并将寄存器名称分配给所有现有变量。
参照图5至图8,其中所描绘的表达图包含已经被评估的节点。已评估的节点被标记为虚线(dashed)圆。此外,虚线箭头表示替换的标记,点线(dotted)箭头表示依赖关系(dependency)。作为其评估的结果,生成以下伪代码:
Rl=0
R2=1
R3=(1<10)
图5示出了循环之前以及评估指令节点之后的表达图。上面的程序代码是从已经被评估的指令节点生成的代码。仍然被参考的三个节点被标记为已评估,并且具有分配给它们的寄存器。
对于当前存在的每个设备变量,其当前节点指针被存储为“原始节点指针”,使得稍后其可以与在循环体结束处具有的值进行比较。
然后执行循环体,并且设备数据类型记录表达图中的所有计算步骤。图6中示出了循环体结束处的表达图。点划线(dash-dotted)箭头指向循环体开始处的原始节点。如果循环体还包含流控制语句(诸如嵌套循环或if语句),则通过将相关过程应用于此嵌套流控制语句,递归地处理这样的流控制语句。
在循环体的结束处,调用函数gpu_while_end()或适用于遇到的流控制语句的任何其它函数。
该函数可以具有以下效果中的一个或更多个:
参照图7,对于每个主动设备变量,将其当前节点指针与先前存储的原始节点指针进行比较。如果其已被改变,则标记新节点以替换旧节点。在下面的描述中,为在循环体中其值已改变的那些变量添加替换指针。在设备类型数据结构中,这可以被实现为附加指针。实现相同功能的其它手段是可能的,诸如直接添加适当的依赖关系指针。因为设备变量在创建其的相同作用域内被销毁,即没有变量在堆上被永久创建或销毁,所以在循环体之前和之后都存在相同的变量。
参照图8,当要将寄存器分配给被标记为替换另一个节点的节点时,该寄存器将被给予与正被替换的节点相同的寄存器名称。对于所有替换指针,添加依赖关系,使得在正在替换的节点之前计算访问正在替换的节点的每个节点。这是必要的,因为寄存器值被重写,并且使用其原始值的所有节点在被重写之前必须使用它。在图8中,寄存器R1、R2和R3被替换。如图8所示,由于左边的“+”(加)节点使用被另一个节点(在这种情况下为中间的“+”(加)节点)替换的节点(在这种情况下是顶部的中间“复制”节点),添加依赖关系以确保在重写之前使用寄存器“R2”的原始值。
参照图9,评估表达图,并且循环装饰(decoration)(这里例如是语句“while(R3)”)连同作用域括号或其它手段以适当的方式被添加到输出代码,以在输出代码中指示所述循环。循环后的程序伪代码是:
然后执行内核函数的其余部分,并且图10示出了示例内核的结束处的表达图。变量a和b已经离开作用域。写入语句仍然可以通过例如“流指针”访问。使用流指针,使得写入节点仍然被参考而不被删除。
表达图被转换成用于设备的程序指令。最终的程序代码可以是机器代码或某种中间代码。在给定的示例中,生成的代码对应于以下伪代码:
该代码,无论是直接代码(例如机器代码)还是间接代码(例如OpenCL代码或某种其它中间代码)都准备好在设备上执行。
参照图11,另选地,对处理先前指令的表达图的上述描述,可以执行以下操作:流控制语句(所述流控制语句中的每一个由入口节点和出口节点组成)被构成表达图的一部分。依赖关系用于强制实施正确的指令排序。图11示出了包含流控制语句的全表达图。其中虚线箭头指的是替换指针,点线箭头指的是依赖关系,而实线箭头指的是用作输入值。寄存器R1、R2和R3没有在开始时被分配,而是在图中被示出为指示由于替换指针而将哪些值分配给相同的寄存器。此过程类似于上面详细描述的过程,但代码生成被延迟。在内核函数结束之前,不评估表达图,必须使用依赖关系来确保生成的代码是正确的。
流控制语句必须以正确的方式被排序,通常以与源代码中出现的相应语句相同的顺序,或可能稍微放宽一点。这可以通过在流控制节点之间添加依赖关系指针来实现。这里使用输入值指针代替;它们在图11中被标记为实线箭头。从而该过程具有用于流控制语句的节点不被删除的额外益处。仅被依赖关系指针参考而不被输入值指针参考的节点可以从图中被去除。
被其它节点替换的节点需要在正确的作用域中被评估(在它们被替换的流控制语句的入口节点之前)。使用这些节点作为输入的所有节点必须在该入口节点之后被评估。替换其它节点的节点必须通过添加依赖关系来锚定在正确的流控制作用域内(在入口节点与出口节点之间)。写入内存必须在正确的作用域内被评估。不应在子作用域内评估节点。这意味着如果存在递归流控制语句(例如while循环中的if子句),则与while循环相关的所有节点必须在“if begin”节点之前或“if end”节点之后被评估。节点可以在父作用域内被预先计算,但是除非依赖关系阻止该计算。
为了提高性能,可以对表达图执行优化。例如,在上面的示例中,以值1和10作为输入的“<”(小于)节点是恒定表达式,并且可以用值“true”替换。
本文的主题可以在各种各样的设备或装置中实现。上述设备仅构成示例。已经对本发明方法的各种示例进行了描述。这些和其它示例在所附权利要求的范围内。
Claims (15)
1.一种计算设备中的流控制的方法,所述方法用于处理流控制语句以适应在所述计算设备上运行的程序的数据结构,其特征在于:
将所述计算设备的多个变量寄存在变量列表中,
针对所述多个变量中的当前存在的每一个,存储节点指针作为该变量的原始节点指针,
处理包含在所述流控制语句内的指令,
针对所述多个变量中的当前存在的每一个,确定当前节点指针是否与所述原始节点指针不同,
将所述多个变量中的每一个的、已经确定与原始节点不同的当前节点标记为用于所述原始节点的替换,
评估所述数据结构并创建代码输出,其中,将语言特定的流控制语句添加到所述代码输出。
2.根据前述权利要求中的任一项所述的方法,其中,所述多个变量中的每一个被寄存在构造所述变量的构造函数调用中,和/或其中,在析构函数调用中从所述变量列表中去除所述多个变量中的每一个。
3.根据前述权利要求中的任一项所述的方法,其中,评估所述数据结构的步骤包括:向所述数据结构中的所述节点中的至少一个分配寄存器名称。
4.根据前述权利要求中的任一项所述的方法,其中,所述数据结构是表达图。
5.根据前述权利要求中的任一项所述的方法,其中,所述方法还包括:基于所述数据结构创建用于所述计算设备的内核指令。
6.根据前述权利要求中的任一项所述的方法,其中,处理包含在所述流控制语句内的指令的步骤还包括:通过设备数据类型记录计算的全部步骤。
7.根据前述权利要求中的任一项所述的方法,其中,将所述多个变量中的每一个的、已经确定与所述原始节点不同的所述当前节点标记为用于所述原始节点的替换的步骤还包含:向所述原始节点添加替换指针。
8.根据前述权利要求中的任一项所述的方法,其中,标记所述当前节点的步骤还包括:添加依赖关系以防止意外重写变量。
9.根据前述权利要求中的任一项所述的方法,其中,在每个流控制语句开始处,从所述数据结构生成输出代码。
10.根据权利要求1至8中的任一项所述的方法,其中,流控制语句的入口和出口在所述数据结构内由入口节点和出口节点表示,并且所述数据结构的所述评估在所述处理的结束处实现。
11.根据权利要求10所述的方法,其中,所述流控制语句的顺序通过使用依赖关系指针被强制实施,和/或
其中,被其它节点替换的节点在相应的流控制语句的入口节点之前被评估,和/或
其中,被其它节点替换的、使用其它节点作为输入参数的节点在相应的流控制语句的入口节点之后被评估,和/或
其中,正被其它节点替换的节点被锚定在相应的流控制语句的入口节点与出口节点之间。
12.根据权利要求10至11中的任一项所述的方法,其中,节点能够在父作用域内被评估,除非这被依赖关系阻止,但是节点不能在子作用域内被评估。
13.根据权利要求1至12中的任一项所述的方法,其中,在评估所述数据结构之前对所述数据结构执行优化。
14.一种包括用于处理设备的程序的计算机程序产品,所述计算机程序产品包括用于当所述程序在所述处理设备上运行时执行根据权利要求1至13中的任一项所述的步骤的软件代码部分。
15.根据权利要求14所述的计算机程序产品,其中,所述计算机程序产品包括其上存储有所述软件代码部分的计算机可读介质,并且其中,所述程序能够直接加载到所述处理设备的内部存储器中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP15157809.3A EP3065051A1 (en) | 2015-03-05 | 2015-03-05 | Flow control for language-embedded programming in general-purpose computing on graphics processing units |
EP15157809.3 | 2015-03-05 | ||
PCT/EP2016/054542 WO2016139305A1 (en) | 2015-03-05 | 2016-03-03 | Flow control for language-embedded programming in general-purpose computing on graphics processing units |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107408054A true CN107408054A (zh) | 2017-11-28 |
CN107408054B CN107408054B (zh) | 2021-05-25 |
Family
ID=52669479
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680013001.7A Expired - Fee Related CN107408054B (zh) | 2015-03-05 | 2016-03-03 | 设备中的流控制的方法和计算机可读介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10459702B2 (zh) |
EP (1) | EP3065051A1 (zh) |
CN (1) | CN107408054B (zh) |
WO (1) | WO2016139305A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804222A (zh) * | 2018-04-13 | 2018-11-13 | 南京南瑞继保电气有限公司 | 一种临时变量的数据区分配方法 |
CN111324723A (zh) * | 2018-12-13 | 2020-06-23 | 阿里巴巴集团控股有限公司 | 语句选取方法、语句显示方法、相关装置及计算设备 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110543425B (zh) * | 2019-09-06 | 2022-06-21 | 陈本彬 | 一种嵌入式设备的编译与调试方法 |
US11860800B2 (en) | 2021-08-20 | 2024-01-02 | Micron Technology, Inc. | Kernel mapping to nodes in compute fabric |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716192A (zh) * | 2004-04-23 | 2006-01-04 | 微软公司 | 语义编程语言和语言对象模型 |
US20110173224A1 (en) * | 2010-01-08 | 2011-07-14 | Toledo Custodio Fernando | System and method for complex calculations and aggregations in relational and olap databases |
US20130159982A1 (en) * | 2011-12-16 | 2013-06-20 | Apostolos Lerios | Language Translation Using Preprocessor Macros |
Family Cites Families (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US2141720A (en) * | 1937-01-12 | 1938-12-27 | Elton Richardson | Wrist pin lock |
US5671416A (en) * | 1995-02-24 | 1997-09-23 | Elson; David | Apparatus and a method for searching and modifying source code of a computer program |
US5701490A (en) * | 1996-01-16 | 1997-12-23 | Sun Microsystems, Inc. | Method and apparatus for compiler symbol table organization with no lookup in semantic analysis |
US5915255A (en) * | 1997-04-23 | 1999-06-22 | Sun Microsystems, Inc. | Method and apparatus for referencing nodes using links |
US6014518A (en) * | 1997-06-26 | 2000-01-11 | Microsoft Corporation | Terminating polymorphic type inference program analysis |
US6298481B1 (en) * | 1998-10-30 | 2001-10-02 | Segasoft, Inc. | System for modifying the functionality of compiled computer code at run-time |
US6832378B1 (en) * | 2000-06-20 | 2004-12-14 | International Business Machines Corporation | Parallel software processing system |
US20020100029A1 (en) * | 2000-07-20 | 2002-07-25 | Matt Bowen | System, method and article of manufacture for compiling and invoking C functions in hardware |
US7370321B2 (en) * | 2002-11-14 | 2008-05-06 | Microsoft Corporation | Systems and methods to read, optimize, and verify byte codes for a multiplatform jit |
WO2004072796A2 (en) * | 2003-02-05 | 2004-08-26 | Arizona Board Of Regents | Reconfigurable processing |
US7146606B2 (en) * | 2003-06-26 | 2006-12-05 | Microsoft Corporation | General purpose intermediate representation of software for software development tools |
US9009660B1 (en) * | 2005-11-29 | 2015-04-14 | Tilera Corporation | Programming in a multiprocessor environment |
JP4795138B2 (ja) * | 2006-06-29 | 2011-10-19 | 富士ゼロックス株式会社 | 画像処理装置及びプログラム |
US20080109795A1 (en) * | 2006-11-02 | 2008-05-08 | Nvidia Corporation | C/c++ language extensions for general-purpose graphics processing unit |
JP2009169864A (ja) * | 2008-01-18 | 2009-07-30 | Panasonic Corp | コンパイル方法およびコンパイルプログラム |
US8930926B2 (en) * | 2008-02-08 | 2015-01-06 | Reservoir Labs, Inc. | System, methods and apparatus for program optimization for multi-threaded processor architectures |
US8866827B2 (en) * | 2008-06-26 | 2014-10-21 | Microsoft Corporation | Bulk-synchronous graphics processing unit programming |
EP2366144B1 (en) * | 2008-10-15 | 2015-09-30 | Hyperion Core, Inc. | Sequential processor comprising an alu array |
US9804995B2 (en) | 2011-01-14 | 2017-10-31 | Qualcomm Incorporated | Computational resource pipelining in general purpose graphics processing unit |
US20120239706A1 (en) * | 2011-03-18 | 2012-09-20 | Los Alamos National Security, Llc | Computer-facilitated parallel information alignment and analysis |
US8539463B2 (en) * | 2011-07-28 | 2013-09-17 | Qualcomm Innovation Center, Inc. | Apparatus and method for improving the performance of compilers and interpreters of high level programming languages |
US8589888B2 (en) * | 2011-08-29 | 2013-11-19 | Microsoft Corporation | Demand-driven analysis of pointers for software program analysis and debugging |
US9830133B1 (en) * | 2011-12-12 | 2017-11-28 | Significs And Elements, Llc | Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation |
US9275426B2 (en) * | 2012-06-04 | 2016-03-01 | Adobe Systems Incorporated | Method and apparatus for unifying graphics processing unit computation languages |
US9411558B2 (en) * | 2012-10-20 | 2016-08-09 | Luke Hutchison | Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing |
AU2013361244B2 (en) * | 2012-12-20 | 2018-11-15 | Georgia State University Research Foundation, Inc. | Paraller priority queue utilizing parallel heap on many-core processors for accelerating priority-queue-based applications |
WO2014188492A1 (ja) * | 2013-05-20 | 2014-11-27 | 三菱電機株式会社 | 監視制御装置 |
US9158513B2 (en) * | 2013-08-27 | 2015-10-13 | International Business Machines Corporation | Preprocessing kernel print commands |
GB2521367A (en) * | 2013-12-17 | 2015-06-24 | Ibm | Adaptable and extensible runtime and system for heterogeneous computer systems |
US9477477B2 (en) * | 2014-01-22 | 2016-10-25 | Nvidia Corporation | System, method, and computer program product for executing casting-arithmetic instructions |
US9990758B2 (en) * | 2014-03-31 | 2018-06-05 | Intel Corporation | Bounding volume hierarchy generation using a heterogeneous architecture |
US9697300B2 (en) * | 2014-04-03 | 2017-07-04 | Software Ag | Graph syntax validation system and method |
US9691122B2 (en) * | 2014-06-30 | 2017-06-27 | Intel Corporation | Facilitating dynamic and efficient pre-launch clipping for partially-obscured graphics images on computing devices |
US9330433B2 (en) * | 2014-06-30 | 2016-05-03 | Intel Corporation | Data distribution fabric in scalable GPUs |
US9582924B2 (en) * | 2014-08-11 | 2017-02-28 | Intel Corporation | Facilitating dynamic real-time volumetric rendering in graphics images on computing devices |
EP3180691A1 (en) * | 2014-08-15 | 2017-06-21 | Intel Corporation | Facilitating dynamic thread-safe operations for variable bit-length transactions on computing devices |
US10032244B2 (en) * | 2014-08-21 | 2018-07-24 | Intel Corporation | Method and apparatus for implementing a nearest neighbor search on a graphics processing unit (GPU) |
US10255654B2 (en) * | 2014-09-12 | 2019-04-09 | Intel Corporation | Facilitating dynamic parallel scheduling of command packets at graphics processing units on computing devices |
US20160093069A1 (en) * | 2014-09-26 | 2016-03-31 | Subramaniam Maiyuran | Method and apparatus for pixel hashing |
US10521874B2 (en) * | 2014-09-26 | 2019-12-31 | Intel Corporation | Method and apparatus for a highly efficient graphics processing unit (GPU) execution model |
KR20160074154A (ko) * | 2014-12-18 | 2016-06-28 | 삼성전자주식회사 | 컴파일러 |
US10068306B2 (en) * | 2014-12-18 | 2018-09-04 | Intel Corporation | Facilitating dynamic pipelining of workload executions on graphics processing units on computing devices |
US9589312B2 (en) * | 2014-12-19 | 2017-03-07 | Intel Corporation | Exploiting frame-to-frame coherence for optimizing color buffer clear performance in graphics processing units |
WO2016105218A1 (en) * | 2014-12-23 | 2016-06-30 | Intel Corporation | Facilitating culling of composite objects in graphics processing units when such objects produce no visible change in graphics images |
CN105518741B (zh) * | 2014-12-23 | 2019-04-09 | 英特尔公司 | 用于管理虚拟图形处理器单元的装置和方法 |
US9805498B2 (en) * | 2015-02-06 | 2017-10-31 | Intel Corporation | Method and apparatus for direct and interactive ray tracing of a subdivision surface |
-
2015
- 2015-03-05 EP EP15157809.3A patent/EP3065051A1/en not_active Ceased
-
2016
- 2016-03-03 CN CN201680013001.7A patent/CN107408054B/zh not_active Expired - Fee Related
- 2016-03-03 US US15/555,643 patent/US10459702B2/en not_active Expired - Fee Related
- 2016-03-03 WO PCT/EP2016/054542 patent/WO2016139305A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716192A (zh) * | 2004-04-23 | 2006-01-04 | 微软公司 | 语义编程语言和语言对象模型 |
US20110173224A1 (en) * | 2010-01-08 | 2011-07-14 | Toledo Custodio Fernando | System and method for complex calculations and aggregations in relational and olap databases |
US20130159982A1 (en) * | 2011-12-16 | 2013-06-20 | Apostolos Lerios | Language Translation Using Preprocessor Macros |
Non-Patent Citations (1)
Title |
---|
THOMAS C. JANSEN: "《GPU++ An Embedded GPU Development System for General-Purpose Computations》", 《COMPUTER SCIENCE》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804222A (zh) * | 2018-04-13 | 2018-11-13 | 南京南瑞继保电气有限公司 | 一种临时变量的数据区分配方法 |
CN108804222B (zh) * | 2018-04-13 | 2021-07-27 | 南京南瑞继保电气有限公司 | 一种临时变量的数据区分配方法 |
CN111324723A (zh) * | 2018-12-13 | 2020-06-23 | 阿里巴巴集团控股有限公司 | 语句选取方法、语句显示方法、相关装置及计算设备 |
CN111324723B (zh) * | 2018-12-13 | 2023-04-25 | 阿里巴巴集团控股有限公司 | 语句选取方法、语句显示方法、相关装置及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
EP3065051A1 (en) | 2016-09-07 |
US20180046440A1 (en) | 2018-02-15 |
CN107408054B (zh) | 2021-05-25 |
US10459702B2 (en) | 2019-10-29 |
WO2016139305A1 (en) | 2016-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8997040B2 (en) | Variable closure | |
Arendt et al. | Henshin: advanced concepts and tools for in-place EMF model transformations | |
JP5851396B2 (ja) | 処理方法 | |
EP2479673B1 (en) | Software architecture for validating C++ programs using symbolic execution | |
US8341614B2 (en) | Memory management for closures | |
US8707278B2 (en) | Embedding class hierarchy into object models for multiple class inheritance | |
US8141035B2 (en) | Method for accessing internal states of objects in object oriented programming | |
GB2459022A (en) | Translating a parallel application program for execution on a general purpose computer. | |
JP2007521568A (ja) | 複数の例外処理モデルの中間表現 | |
US7386843B2 (en) | Method and system for register allocation | |
CN107924326A (zh) | 对经更新的类型的迁移方法进行覆盖 | |
CN107408054A (zh) | 用于通用计算图形处理单元中的语言嵌入式编程的流控制 | |
US9134973B2 (en) | Dynamic compiling and loading at runtime | |
Kameyama et al. | Shifting the stage: Staging with delimited control | |
JP2001022591A (ja) | コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法 | |
US8407678B2 (en) | Method of array interception using data-flow analysis | |
US20150106796A1 (en) | Class loading device for a java runtime environment, cluster system and method of executing a function | |
US20020062478A1 (en) | Compiler for compiling source programs in an object-oriented programming language | |
Bottoni et al. | Specifying integrated refactoring with distributed graph transformations | |
Fokkink et al. | Lazy rewriting on eager machinery | |
Boudol et al. | Relaxed operational semantics of concurrent programming languages | |
US20090007115A1 (en) | Method and apparatus for parallel XSL transformation with low contention and load balancing | |
JP2006163686A (ja) | コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体 | |
US9250878B1 (en) | Function attribute for dynamic stack allocation | |
CN105393216B (zh) | 运行时内存调节 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20210525 |
|
CF01 | Termination of patent right due to non-payment of annual fee |