当前位置: 首页 > 专利查询>I·乔索帕特专利>正文

用于通用计算图形处理单元中的语言嵌入式编程的流控制制造技术

技术编号:16672732 阅读:130 留言:0更新日期:2017-11-30 17:16
本发明专利技术公开了一种计算设备中的流控制方法以及存储该方法的计算机程序产品,所述方法用于处理流控制语句以适应在计算设备上运行的程序的数据结构。本发明专利技术从而允许在编译时将内核集成到主程序中。CPU程序部分和内核的整个解析由一个单个标准编译器完成。用于设备的实际编译器可以作为库被链接,并且不需要进行任何解析。本发明专利技术还允许在语言嵌入式GPGPU编程中使用循环和if子句,使得能够以完全嵌入普通编程语言中的方式实现设备的全通用编程。所述设备可以是高度并行的计算设备,诸如视频卡或一些其它计算设备。

【技术实现步骤摘要】
【国外来华专利技术】用于通用计算图形处理单元中的语言嵌入式编程的流控制
本专利技术涉及借助通用计算图形处理单元的数据处理。具体地,本专利技术涉及一种称为“语言嵌入式编程”的新技术。
技术介绍
术语通用计算图形处理单元(GPGPU)用于使用专门的高度并行的硬件来执行通常在标准处理器上执行的计算上要求苛刻的任务。所述硬件可以是视频卡或一些其它计算设备。在大多数GPGPU编程环境中,可以在中央处理单元(CPU)上运行的主程序、以及针对计算上要求苛刻的任务在设备上运行的内核由单独的编译器解析。主程序由普通编译器解析,并以普通编程语言编写,而内核由专用编译器解析并以专门的编程语言编写。涉及语言嵌入式编程的技术首先由ThomasC.Jansen在其博士论文“GPU++-AnEmbeddedGPUDevelopmentSystemforGeneral-PurposeComputations”(慕尼黑技术大学,2007年)中进行了描述。其中不包括流控制的方法,诸如循环或if子句。因此,本公开限于非常小的程序集,并且不能实现通用编程。WO2012/097316描述了用于利用并行处理单元扩展通用图形处理单元的架构以允许基于流水线的应用的有效处理的技术。所述技术包括配置连接到作为处理流水线的阶段操作的并行处理单元的本地存储器缓冲器,以保持用于在并行处理单元之间传送的数据。面向对象的编程语言允许定义新的数据类型以及对应的操作符。在语言嵌入式编程中,以这样的方式代替进行实际计算来定义特定数据类型,计算的步骤被记录并用于生成用于设备的机器码。以这种方式,内核被完全集成到主程序中,并且不必由特定编译器进行解析。这些特定数据类型用于表示驻留在设备上的值。这些值通常将被存储在寄存器中。在一个示例中,用于设备值的类型名称是以表达式“gpu_”为前缀的内在(intrinsic)类型名称,即,int变为gpu_int,float变为gpu_float等。其它命名规格也是可以的。内核可以作为使用这些特定数据类型的函数被访问。当在CPU上执行这样的内核函数时,设备数据类型的使用将创建其中表示计算步骤的表达图(expressiongraph)。每个设备变量都拥有指向表达图中节点的指针,该指针确定如何计算该变量的值。根据该表达图生成内核代码。利用现有技术的教导,内核不能被集成到主程序中,除非使用两个单独的编译器。
技术实现思路
本专利技术克服了现有技术的缺点,并且因此允许将内核集成到主程序中。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)内的所有设备变量的列表。这些变量也称为主动变量。大多数现代编程语言都支持作用域的概念。局部变量只在给定作用域内有效。请考虑以下示例:在上本文档来自技高网
...
用于通用计算图形处理单元中的语言嵌入式编程的流控制

【技术保护点】
一种计算设备中的流控制的方法,所述方法用于处理流控制语句以适应在所述计算设备上运行的程序的数据结构,其特征在于:将所述计算设备的多个变量寄存在变量列表中,针对所述多个变量中的当前存在的每一个,存储节点指针作为该变量的原始节点指针,处理包含在所述流控制语句内的指令,针对所述多个变量中的当前存在的每一个,确定当前节点指针是否与所述原始节点指针不同,将所述多个变量中的每一个的、已经确定与原始节点不同的当前节点标记为用于所述原始节点的替换,评估所述数据结构并创建代码输出,其中,将语言特定的流控制语句添加到所述代码输出。

【技术特征摘要】
【国外来华专利技术】2015.03.05 EP 15157809.31.一种计算设备中的流控制的方法,所述方法用于处理流控制语句以适应在所述计算设备上运行的程序的数据结构,其特征在于:将所述计算设备的多个变量寄存在变量列表中,针对所述多个变量中的当前存在的每一个,存储节点指针作为该变量的原始节点指针,处理包含在所述流控制语句内的指令,针对所述多个变量中的当前存在的每一个,确定当前节点指针是否与所述原始节点指针不同,将所述多个变量中的每一个的、已经确定与原始节点不同的当前节点标记为用于所述原始节点的替换,评估所述数据结构并创建代码输出,其中,将语言特定的流控制语句添加到所述代码输出。2.根据前述权利要求中的任一项所述的方法,其中,所述多个变量中的每一个被寄存在构造所述变量的构造函数调用中,和/或其中,在析构函数调用中从所述变量列表中去除所述多个变量中的每一个。3.根据前述权利要求中的任一项所述的方法,其中,评估所述数据结构的步骤包括:向所述数据结构中的所述节点中的至少一个分配寄存器名称。4.根据前述权利要求中的任一项所述的方法,其中,所述数据结构是表达图。5.根据前述权利要求中的任一项所述的方法,其中,所述方法还包括:基于所述数据结构创建用于所述计算设备的内核指令。6.根据前述权利要求中的任一项所述的方法,其中,处理包含在所述流控制语句内的指令的步骤还包括:通过设备数据类型记录计算的全部步骤。7.根据前述权利要求中的任一项所述的方法,其中,将所述多个变量中的每一个的、已经确定与所述原始节点不同的所述当前节点标记为用于...

【专利技术属性】
技术研发人员:I·乔索帕特
申请(专利权)人:I·乔索帕特
类型:发明
国别省市:德国,DE

相关技术
    暂无相关专利
网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1