一种程序生成方法、装置及计算机系统与流程

文档序号:13982819阅读:183来源:国知局
一种程序生成方法、装置及计算机系统与流程

本发明涉及计算机技术领域,尤其涉及一种程序生成方法、装置及计算机系统。



背景技术:

随着计算性能和可编程性的不断增强,图形处理器(英文:graphicprocessingunit,简称:gpu)的应用越来越广泛,越来越多的中央处理器(英文:centralprocessingunit,简称:cpu)程序被移植到gpu上运行。

然而,由于gpu硬件架构特征的限制,许多被移植的程序在gpu上运行的性能并不理想,在一定程度上限制了gpu的应用范围。例如,迭代求解算法具备计算访存密集的特点,该迭代求解算法程序在gpu上运行的效果优于在cpu上运行的效果,但是,该程序需要在循环迭代中频繁的进行cpu和gpu的全局同步,增加了cpu和gpu之间同步的开销,此外,该程序还需要频繁的调用gpukernel(核心)函数,这样会产生多次启动gpukernel函数的开销。这些开销会降低迭代求解算法程序在gpu上运行的性能,从而导致gpu无法在迭代求解算法这一应用领域得到较好的运用。



技术实现要素:

本发明实施例提供一种程序生成方法、装置及计算机系统,能够提升gpu程序的性能,扩大gpu的应用范围。

第一方面,提供一种程序生成方法,首先,根据cpu程序的计算访存特征和gpu的硬件特性,确定包括待生成gpu程序的线程的数量以及待生成gpu程序的每个线程组与待处理数据之间的映射关系的性能参数,然后,确定用于实现待生成gpu程序的线程在gpukernel函数中的全局同步的全局同步机制,最后,根据cpu程序、预设的程序自动生成框架、性能参数以及全局同步机制,生成gpu程序。

本发明实施例中的cpu程序的计算访存特征能够反映出该cpu程序所需线程的数量,gpu的硬件特性能够表征gpu所能承载的线程的数量,因此,本发明实施例中根据cpu程序的计算访存特征和gpu的硬件特性确定出的待生成gpu程序的线程的数量较为准确,待生成gpu程序的每个线程组与待处理数据之间的映射关系和待生成gpu程序的线程的数量能够确保开启的线程被gpu程序一次加载完毕,又由于全局同步机制可实现gpu程序的线程在gpukernel函数中的全局同步,因此,本发明实施例中根据cpu程序、预设的程序自动生成框架、性能参数以及全局同步机制生成的gpu程序能够一次加载完所有开启的线程,并在gpukernel函数中实现全局同步,提升了gpu程序的性能,相应的,扩大了gpu的应用范围。

可选的,在本发明实施例的一种可能的实现方式中,“根据cpu程序的计算访存特征和gpu的硬件特性,确定性能参数中的待生成gpu程序的线程的数量”的方法为:首先,根据gpu的硬件特性,确定gpu中计算单元cu的数量k、gpu中的每个cu包括的线程组的数量l以及第一数量m,第一数量为待生成gpu程序的每个线程组所包括的线程的数量,k≥1,l≥1,m≥1;其次,根据第一数量m以及cpu程序的计算访存特征,确定cpu程序在每个cu中待开启线程的数量的最大值j,j≥1;然后,根据cu的数量k、可开启线程的数量l、第一数量m和最大值j,确定第一取值范围,第一取值范围为[k*m,min(k*m*l,k*j)],其中,min(k*m*l,k*m*j)表示选取k*m*l和k*m*j中的最小值;最后,确定第一取值范围中的第一数值为待生成gpu程序的线程的数量。

可选的,本发明实施例中的第一数值可以为第一取值范围中的任意一个数值,也可以为第一取值范围中的最大数值,本发明实施例对此不作具体限定。

cpu程序的计算访存特征可以表示出该cpu程序移植到gpu上后需使用的资源的数量,gpu的硬件特性可以表示出该gpu能够承载的线程的数量,结合cpu程序的计算访存特征和gpu的硬件特性可以准确的确定出该gpu可以运行的gpu程序的线程的最大数量。

可选的,在本发明实施例的另一种可能的实现方式中,“根据第一数量m以及cpu程序的计算访存特征,确定cpu程序在每个cu中待开启线程的数量的最大值j”的方法为:根据cpu程序的计算访存特征,确定cpu程序的每个线程需使用的寄存器的数量p和cpu程序的每个线程组需使用的共享内存的大小q;确定每个cu中的可用寄存器的数量x和每个cu中的可用共享内存的大小y;根据cu的数量k、第一数量m、cpu程序的每个线程需使用寄存器的数量p、cpu程序的每个线程组需使用的共享内存的大小q、可用寄存器的数量x和可用共享内存的大小y,确定最大值j,j为x/p和y/q*m中的最小值。

结合cpu程序的计算访存特征和gpu的硬件特性,确定出cpu程序在每个cu中待开启线程的数量的最大值j,能够最大程度的利用gpu的资源。

可选的,在本发明实施例的一种可能的实现方式中,根据cpu程序的计算访存特征和gpu的硬件特性,确定性能参数之后,还将待生成gpu程序的线程的数量除以第一数量m,得出待生成gpu程序的线程组的数量n。

可选的,本发明实施例中的全局同步机制为待生成gpu程序的n个线程组中的第一线程组在确定每个线程组的全局同步到达标识的数值均为第一预设数值时,将全局同步通过标识的数值从第二预设数值更新为第三预设数值,并触发n个线程组继续运行;其中,对于n个线程组中的每个线程组而言,该线程组在执行至预设的程序代码语句时,暂停执行,并将该线程组的全局同步到达标识的数值更新为第一预设数值。

可选的,在本发明实施例的另一种可能的实现方式中,确定待生成gpu程序的线程组的数量n之后,还为n个线程组中的每个线程组配置全局同步到达标识,并为第一线程组配置全局同步通过标识,全局同步到达标识用于指示该线程组是否已经执行到预设的程序代码语句,全局同步通过标识用于指示每个线程组是否可以继续执行。

本发明实施例通过配置全局同步到达标识和全局同步通过标识,在第一线程组确定所有全局同步到达标识的数值均为第一预设数值时,更新全局同步通过标识的数值,并触发所有线程组继续运行,实现了待生成gpu程序的线程的全局同步。

可选的,在本发明实施例的另一种可能的实现方式中,“根据cpu程序、预设的程序自动生成框架、性能参数以及全局同步机制,生成gpu程序”的方法为:根据cpu程序,确定cpu程序的计算访存特征;根据cpu程序的计算访存特征,确定可移植程序,该可移植程序为cpu程序中被移植至gpu中运行的程序;根据可移植程序、预设的程序自动生成框架和全局同步机制,生成初始gpu程序;根据性能参数和初始gpu程序,确定gpu程序。

由于全局同步机制能够实现线程在gpukernel函数中的全局同步,根据cpu程序的特征和gpu的硬件特性确定出的性能参数能够较好的匹配gpu的硬件特性,因此,根据全局同步机制和性能参数确定出的gpu程序能够实现线程在gpukernel函数中的全局同步,其线程的数量也能满足gpu程序的需求和gpu的硬件特性。

第二方面,提供一种程序生成装置,该程序生成装置包括:确定单元和生成单元。

具体的,本发明实施例提供的各个单元模块所实现的功能具体如下:

上述确定单元,用于根据中央处理器cpu程序的计算访存特征和图像处理器gpu的硬件特性,确定性能优化空间,性能优化空间包括待生成gpu程序的线程的数量以及待生成gpu程序的线程与待处理数据之间的映射关系,硬件特性能够表征gpu所能承载的线程的数量以及用于确定待生成gpu程序的线程在gpukernel函数中的全局同步机制;上述生成单元,用于根据cpu程序、预设的程序自动生成框架、上述确定单元确定的性能优化空间以及上述确定单元确定的全局同步机制,生成gpu程序。

可选的,在本发明实施例的一种实现方式中,所述确定单元,具体用于根据gpu的硬件特性,确定gpu中计算单元cu的数量k、gpu中的每个cu中的可开启线程的数量l以及第一数量m,第一数量为待生成gpu程序的每个线程组所包括的线程的数量,k≥1,l≥1,m≥1,以及具体用于根据第一数量m以及cpu程序的计算访存特征,确定cpu程序在每个cu中待开启线程的数量的最大值j,j≥1,以及具体用于根据cu的数量k、可开启线程的数量l、第一数量m和最大值j,确定第一取值范围,第一取值范围为待生成gpu程序的线程的数量的取值范围,第一取值范围为[k*m,min(k*m*l,k*j)],其中,min(k*m*l,k*m*j)表示选取k*m*l和k*m*j中的最小值,以及具体用于确定第一取值范围中的第一数值为待生成gpu程序的线程的数量。

可选的,在本发明实施例的另一种实现方式中,上述确定单元,具体用于根据cpu程序的计算访存特征,确定cpu程序的每个线程需使用的寄存器的数量p和cpu程序的每个线程组需使用的共享内存的大小q,以及具体用于确定每个cu中的可用寄存器的数量x和每个cu中的可用共享内存的大小y,以及具体用于根据第一数量m、cpu程序的每个线程需使用寄存器的数量p、cpu程序的每个线程组需使用的共享内存的大小q、可用寄存器的数量x和可用共享内存的大小y,确定最大值j,j为x/p和y/q*m中的最小值。

可选的,在本发明实施例的另一种实现方式中,上述确定单元,还用于在根据cpu程序的计算访存特征和gpu的硬件特性,确定性能参数之后,将待生成gpu程序的线程的数量除以第一数量m,得出待生成gpu程序的线程组的数量n。

可选的,本发明实施例中的全局同步机制为待生成gpu程序的n个线程组中的第一线程组在确定每个线程组的全局同步到达标识的数值均为第一预设数值时,将全局同步通过标识的数值从第二预设值修改为第三预设值,并触发n个线程组继续运行。其中,对于n个线程组中的每个线程组而言,该线程组在执行至预设的程序代码语句时,暂停执行,并将该线程组的全局同步到达标识的数值更新为第一预设数值。

可选的,在本发明实施例的另一种实现方式中,上述程序生成装置还包括配置单元,该配置单元用于为n个线程组中的每个线程组配置全局同步到达标识,并为第一线程组配置全局同步通过标识,全局同步到达标识用于指示该线程组是否已经执行到预设的程序代码语句,全局同步通过标识用于指示每个线程组是否可以继续执行。

可选的,在本发明实施例的另一种实现方式中,上述确定单元,还用于根据cpu程序的计算访存特征,确定可移植程序,该可移植程序为cpu程序中被移植至gpu中运行的程序;上述生成单元,具体用于根据确定单元确定的可移植程序和预设的程序自动生成框架,生成初始gpu程序,以及具体用于根据所述性能参数以及所述初始gpu程序,确定所述gpu程序。

第三方面,提供一种计算机系统,该计算机及系统包括通信接口、中央处理器cpu、图像处理器gpu以及存储器;通信接口、cpu、gpu和存储器通过系统总线连接;通信接口,用于与其他通信设备通信,以及用于获取cpu程序;存储器,用于存储软件程序以及应用模块;cpu,用于执行存储器存储的软件程序以及应用模块,使得cpu执行上述第一方面及其各种实现方式所述的程序转换方法,将通信接口获取到的cpu程序转换为gpu程序,以及用于向gpu发送gpu程序;gpu,用于接收cpu发送的gpu程序,并运行cpu生成的gpu程序。

第四方面,还提供一种计算机可读存储介质,该计算机可读存储介质包括一个或多个程序代码;当程序生成装置在执行该程序代码时,该程序生成装置执行如上述第一方面及其各种实现方式所述的程序生成方法。

在本发明实施例中,上述程序生成装置的名字对设备或功能模块本身不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本发明实施例类似,属于本发明权利要求及其等同技术的范围之内。

同理,在本发明实施例中,上述计算机系统的名字对设备或功能模块本身不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本发明实施例类似,属于本发明权利要求及其等同技术的范围之内。

本发明实施例第二方面、第三方面和第四方面及其各种实现方式的具体描述,可以参考第一方面及其各种实现方式中的详细描述;并且,第二方面、第三方面和第四方面及其各种实现方式的有益效果,可以参考第一方面及其各种实现方式中的有益效果分析,本发明实施例这里不再赘述。

本发明实施例的这些方面或其他方面在以下实施例的描述中会更加简明易懂。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。

图1为本发明实施例提供的计算机系统的结构示意图;

图2为本发明实施例提供的程序生成方法的流程示意图;

图3为本发明实施例中映射关系的结构示意图;

图4为本发明实施例提供的程序生成装置的结构示意图一;

图5为本发明实施例提供的程序生成装置的结构示意图二。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行详细地描述。

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。

此外,本发明的说明书和权利要求书及附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

其中,本发明实施例中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

此外,本发明的说明书和权利要求书及附图中的术语“第一”和“第二”等是用于区别不同对象,而不是用于限定特定顺序。

目前,越来越多的cpu程序被移植到gpu上运行,然而,由于gpu硬件架构特征的限制,许多被移植的程序在gpu上运行的性能并不理想,在一定程度上限制了gpu的应用范围。

典型的,迭代求解算法在gpu上运行的效果优于在cpu上运行的效果,但是,该算法程序在gpu上运行的性能也并不理想。以机器学习类应用中的k-means算法的程序为例进行说明。k-means算法的程序可如下所示:

可以看出,上述程序在每次循环迭代中包含多个gpukernel函数,会多次调用gpukernel函数,并使用clfinish函数实现cpu和gpu之间的同步,导致了该程序存在两方面的重要开销:一是调用clfinish函数,cpu和gpu间同步的开销;二是多次启动gpukernel函数的开销。这两类开销大大降低了该程序在gpu上运行的性能,从而导致gpu在k-means算法的应用领域无法很好的运用。

为了解决上述问题,本发明实施例提供一种程序生成方法,通过确定性能参数,以及确定用于实现待生成gpu程序的线程在gpukernel函数中的全局同步的全局同步机制,实现根据cpu程序、预设的程序自动生成框架、性能参数以及全局同步机制,生成高性能的gpu程序,以扩大gpu的应用范围。

本发明实施例提供的程序生成方法应用于计算机系统。图1是本发明实施例提供的计算机系统的结构示意图。参见图1,该计算机系统包括通信接口10、cpu11、gpu12以及存储器13。

其中,通信接口10、cpu11、gpu12与存储器13之间通过系统总线14连接,并完成相互间的通信。

需要说明的是,图1所示的计算机系统的结构并不是对该计算机系统的限定,其可以包括比图示更多的部件,或者组合某些部件,或者不同的部件布置。

具体的,上述通信接口10,使用任何收发器一类的装置,用于与其他通信设备通信。该通信接口10可以用于获取用户输入的cpu程序。

具体的,上述存储器13可用于存储软件程序以及应用模块,上述cpu11通过运行存储在存储器13的软件程序以及应用模块,将上述通信接口10获取到的cpu程序转换为gpu程序。

上述存储器13可主要包括存储程序区130和存储数据区131,其中,存储程序区130可存储操作系统、至少一个功能所需的应用程序,比如预设的程序自动生成框架等。存储数据区131可存储应用程序执行过程中所需的相关数据。

其中,上述存储器13可以是只读存储器(英文:read-onlymemory,简称:rom),或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(英文:randomaccessmemory,简称:ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(英文:electricallyerasableprogrammableread-onlymemory,简称:eeprom)、只读光盘(英文:compactdiscread-onlymemory,简称:cd-rom)或其他光盘存储、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。

上述存储器13可以是独立存在,通过上述系统总线14与上述cpu11和上述gpu12相连接。上述存储器13也可以和上述cpu11和/或gpu12集成在一起。

上述gpu12和上述cpu11可以集成在一起,也可以独立存在。gpu12用于运行cpu11生成的gpu程序。

上述系统总线14可以是工业标准体系结构(英文:industrystandardarchitecture,简称:isa)总线、外部设备互连(英文:peripheralcomponentinterconnect,简称:pci)总线或扩展工业标准体系结构(英文:extendedindustrystandardarchitecture,简称:eisa)总线等。该系统总线14可以分为地址总线、数据总线、控制总线等。本发明实施例中为了清楚说明,在图1中将各种总线都示意为系统总线14。

本发明实施例提供一种程序生成方法,该程序生成方法由程序生成装置执行。本发明实施例中的程序生成装置可以为cpu,本发明实施例以程序生成装置为cpu为例进行说明。如图2所示,本发明实施例提供的程序生成方法包括:

s200、cpu根据cpu程序的计算访存特征和gpu的硬件特性,确定性能参数。

性能参数包括待生成gpu程序的线程的数量,以及待生成gpu程序的每个线程组与待处理数据之间的映射关系。待生成gpu程序的每个线程组与待处理数据之间的映射关系包括离散型映射关系和连续型映射关系。

结合图1,本发明实施例中的cpu可以通过通信接口获取用户输入的cpu程序,并根据其获取到的cpu程序确定该cpu程序的计算访存特征,cpu可以通过与gpu的通信获取gpu的硬件特性。

可以理解的是,cpu首先获取cpu程序的计算访存特征和gpu的硬件特性,然后根据其获取到的cpu程序的计算访存特征和gpu的硬件特性确定性能参数。

可选的,该cpu程序可以为cpu编程语言对应的程序,如c语言程序。该cpu程序可以为串行程序,即cpu可通过串行方式执行该cpu程序。

其中,gpu的硬件特性通过该gpu中计算单元(英文:computeunit,简称:cu)的数量k、gpu中的每个cu中的可开启线程组的数量l以及第一数量m表示,其中,第一数量m为待生成gpu程序的每个线程组所包括的线程的数量,k≥1,l≥1,m≥1。

具体的,cpu首先根据第一数量m以及cpu程序的计算访存特征,确定cpu程序在gpu的每个cu中待开启线程的数量的最大值j,然后,根据cu的数量k、可开启线程的数量l、第一数量m和最大值j,确定待生成gpu程序的线程的数量的取值范围,即确定第一取值范围,第一取值范围具体可表示为:[k*m,min(k*m*l,k*j)],其中,min(k*m*l,k*m*j)表示选取k*m*l和k*m*j中的最小值,最后,cpu将第一取值范围中的第一数值确定为待生成gpu程序的线程的数量。

其中,cpu程序的计算访存特征可以为cpu通过软件编译模块,如编译器,对cpu程序的各指令进行语法分析,构成该cpu程序的中间表示。

cpu程序的中间表示为与该cpu程序等价的可分析形式。该cpu程序的中间表示可以为通过介于源程序语言和机器语言之间的中间语言表示程序的一种形式,其作用是使程序的结构在逻辑上更为简单明确。该cpu程序的中间表示可以为高层抽象语法树(英文:high-levelabstractsyntaxtree,简写:hast)形式,还可以为其他形式,本发明实施例对此不作具体限定。

可选的,本发明实施例中的第一数值可以为第一取值范围中的任意一个数值,也可以为第一取值范围中的最大数值,本发明实施例对此不作具体限定。

具体的,cpu根据第一数量m以及cpu程序的计算访存特征,确定cpu程序在gpu的每个cu中待开启线程的数量的最大值j的方法为:cpu根据cpu程序的计算访存特征,确定cpu程序的每个线程需使用的寄存器的数量p和cpu程序的每个线程组需使用的共享内存的大小q;然后,cpu确定每个cu中的可用寄存器的数量x和每个cu中的可用共享内存的大小y;最后,cpu确定最大值j,该最大值j可表示min(x/p,y/q*m)。

具体的,cpu还将待生成gpu程序的线程的数量除以第一数量m,得到待生成gpu程序的线程组的数量n,并根据待生成gpu程序的线程组的数量n和待处理数据的大小确定待生成gpu程序的每个线程组与待处理数据之间的映射关系,该映射关系包括离散型映射关系和连续型映射关系。

对于每个线程组而言,连续型映射关系指与该线程组对应的待处理数据在位置上连续,离散型映射关系指与该线程组对应的待处理数据在位置上非连续。

示例性的,如图3所示,位置上连续的待处理数据包括第1份数据、第2份数据、第3份数据和第4份数据,待生成gpu程序的线程组包括线程组0和线程组1。在离散型映射关系中,线程组0处理第1份和第3份数据,线程组1处理第2份和第4份数据;在连续型映射关系中,线程组0处理第1份和第2份数据,线程组1处理第3份和第4份数据。

需要说明的是,在实际应用中,待生成gpu程序的每个线程组与待处理数据之间的映射关系,在不同架构的gpu上对性能的影响不同,因此,待生成gpu程序的每个线程组与待处理数据之间的映射关系可以视为自适应调优参数。

s201、cpu确定全局同步机制,该全局同步机制用于实现待生成gpu程序的线程在gpukernel函数中的全局同步。

具体的,cpu为n个线程组中的每个线程组配置全局同步到达标识,并为n个线程组中的第一线程组配置全局同步通过标识。

示例性的,第i个线程组的全局同步到达标识可表示为buffer_arr[i],buffer_arr[i]的数值用于表示第i个线程组是否已经执行到预设的程序代码语句,全局同步通过标识可表示为buffer_info[1],buffer_info[1]的数值用于指示每个线程组是否可以继续执行。

本发明实施例中的cpu确定出的全局同步机制为:待生成gpu程序的n个线程组中的第一线程组在确定每个线程组的全局同步到达标识的数值均为第一预设数值时,将全局同步通过标识的数值从第二预设数值更新为第三预设数值,并触发n个线程组继续运行;其中,对于n个线程组中的任意一个线程组而言,该线程组在执行至预设的程序代码语句时,暂停执行,并将该线程组的全局同步到达标识的数值更新为第一预设数值。

可以看出,第一线程组用于负责监控n个线程组中的每个线程组是否均已执行至预设的程序代码语句,并在所有线程组均已执行至预设的程序代码语句时,触发所有线程组继续运行。

其中,第一线程组为n个线程组中的任意一个,本发明实施例对此不作具体限定。

示例性的,若第一线程组为n个线程组中的第1个线程组,则cpu为n个线程组中的每个线程组配置全局同步到达标识,其中,第i个线程组的全局同步到达标识表示为buffer_arr[i],cpu为第1个线程组配置全局同步通过标识,该全局同步通过标识表示为buffer_info[1]。buffer_arr[i]的初始值为0,buffer_info[1]的数值为第二预设数值。

当第i个线程组执行到达预设的程序代码语句后,该线程组暂停运行,并将buffer_arr[i]的数值由0更新为第一预设数值。第1个线程组在监测到所有线程组的buffer_arr的数值均为第一预设数值时,确定所有线程组都已运行至预设的程序代码语句,此时,第1个线程组将buffer_info[1]的数值从第二预设数值更新为第三预设数值,并触发所有线程组继续运行。在所有线程组均继续运行时,第1个线程组将buffer_info[1]的数值从第三预设数值更新为第二预设数值,并进入下一次的全局同步监控。

cpu确定出的全局同步机制可以方便调用,以确保待生成gpu程序的线程在gpukernel函数中的全局同步。

s202、cpu根据cpu程序、预设的程序自动生成框架、性能参数以及全局同步机制,生成gpu程序。

具体的,cpu首先根据cpu程序的计算访存特征,确定可移植程序,然后,该cpu根据其确定的可移植程序、预设的程序自动生成框架和全局同步机制,生成初始gpu程序,最后,cpu根据性能参数以及初始gpu程序,确定gpu程序。

其中,可移植程序为cpu程序中被移植至gpu中运行的程序,本发明实施例中的预设的程序自动生成框架可以为现有的任意一种程序自动生成框架,本发明实施例对此不作具体限定。

可选的,cpu通过编译器对cpu程序的各指令进行语法分析,构建hsat中间表示;然后,该cpu根据cpu程序的hsat中间表示确定该cpu程序的主要计算子程序所在的迭代区域;最后,分析该cpu程序的主要计算子程序的程序调用特征,确定其所在的最外层迭代,cpu将其确定出的最外层迭代所覆盖的程序作为可移植程序。

在cpu根据可移植程序、预设的程序自动生成框架和全局同步机制,生成初始gpu程序之后,cpu将其确定的性能参数输入至初始gpu程序中,并运行初始gpu程序。由于性能参数中的待生成gpu程序的每个线程组与待处理数据之间的映射关系包括离散型映射关系和连续型映射关系,因此,cpu可获取到不同版本的初始gpu程序。cpu运行各个版本的初始gpu程序,并将各个版本的初始gpu程序的运行结果与cpu程序的运行结果进行比较,以验证各个版本的初始gpu程序的正确性。最终,cpu将其中一个版本的初始gpu程序确定为gpu程序。

可选的,本发明实施例中的cpu可以选取运行时间最短的初始gpu程序作为gpu程序,也可以选取运行准确率最高的初始gpu程序作为gpu程序,本发明实施例对此不作具体限定。

示例性的,若cpu程序为无线类应用中的奇异值分解(英文:singularvaluedecomposition,简称:svd)算法的程序,该程序中的主要计算子程序为以iterator函数所覆盖的程序。svd算法的程序具体为:

cpu确定最外层的while循环所覆盖的程序为可移植程序,即确定最外层while循环所覆盖的程序为gpukernel函数所覆盖的程序。cpu根据该可移植程序、预设的程序自动生成框架、性能参数以及全局同步机制,生成的gpu程序具体为:

该gpu程序中包括一个gpukernel函数,并在gpukernel函数中通过global_sys函数实现gpu线程的全局同步,与现有技术相比较,减少了gpukernel函数的启动开销,也减少了cpu与gpu之间的同步开销。

本发明实施例中根据cpu程序的计算访存特征和gpu的硬件特性,确定出待生成gpu程序的线程的数量,以及确定出待生成gpu程序的每个线程组与待处理数据之间的映射关系,能够确保开启的线程的数量被gpu程序一次加载完毕,且全局同步机制可实现gpu程序的线程在gpukernel函数中的全局同步,因此,本发明中根据cpu程序、预设的程序自动生成框架、性能参数以及全局同步机制生成的gpu程序能够一次加载完所有开启的线程,并在gpukernel函数中实现全局同步,提升了gpu程序的性能,相应的,扩大了gpu的应用范围。

本发明实施例提供一种程序生成装置,该程序生成装置用于执行以上程序生成方法中的cpu所执行的步骤。所述程序生成装置可以包括相应步骤所对应的模块。

本发明实施例可以根据上述方法示例对程序生成装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

在采用对应各个功能划分各个功能模块的情况下,图4示出了上述实施例中所涉及的程序生成装置的一种可能的结构示意图。如图4所示,程序生成装置包括确定单元40和生成单元41。确定单元40用于支持程序生成装置执行图2中的s200和s201;生成单元41用于支持程序生成装置执行图2中的s202。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。程序生成装置还包括配置单元42,配置单元42用于为确定单元40确定的n个线程组中的每个线程组配置全局同步到达标识,并为第一线程组配置全局同步通过标识,全局同步到达标识用于指示该线程组是否已经执行到预设的程序代码语句,全局同步通过标识用于指示每个线程组是否可以继续执行。

在采用集成的单元的情况下,图5示出了上述实施例中所涉及的程序生成装置的一种可能的结构示意图。如图5所示,程序生成装置包括:处理模块50和通信模块51。处理模块50用于对程序生成装置的动作进行控制管理,例如,处理模块50用于支持该程序生成装置执行图2中的s200、s201和s202。通信模块51用于支持该程序生成装置与其他装置通信。该程序生成装置还可以包括存储模块52,用于存储该程序生成装置的程序代码和数据。

可以理解的是,程序生成装置为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本发明中所公开的实施例描述的各示例的单元及算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

如图2所示的实施例所述程序生成方法如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本领域内的技术人员应明白,本发明的实施例可提供为方法、电子设备、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个包括有程序代码的计算机可读存储介质上实施的计算机程序产品的形式,所述计算机存储介质包括但不限于u盘、移动硬盘、rom,、磁盘存储器、cd-rom、光学存储器等。

相应的,本发明另一实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括一个或多个程序代码,该一个或多个程序包括指令,当程序生成装置在执行该程序代码时,该程序生成装置执行如图2所示的程序生成方法。

本发明实施例中根据cpu程序的计算访存特征和gpu的硬件特性,确定出待生成gpu程序的线程的数量,以及确定出待生成gpu程序的每个线程组与待处理数据之间的映射关系,能够确保开启的线程的数量被gpu程序一次加载完毕,且全局同步机制可实现gpu程序的线程在gpukernel函数中的全局同步,因此,本发明中根据cpu程序、预设的程序自动生成框架、性能参数以及全局同步机制生成的gpu程序能够一次加载完所有开启的线程,并在gpukernel函数中实现全局同步,提升了gpu程序的性能,相应的,扩大了gpu的应用范围。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。

例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。

基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1