CN105677436B - 程序转换方法、处理器及计算机系统 - Google Patents
程序转换方法、处理器及计算机系统 Download PDFInfo
- Publication number
- CN105677436B CN105677436B CN201511033563.1A CN201511033563A CN105677436B CN 105677436 B CN105677436 B CN 105677436B CN 201511033563 A CN201511033563 A CN 201511033563A CN 105677436 B CN105677436 B CN 105677436B
- Authority
- CN
- China
- Prior art keywords
- data
- program
- generated
- gpu
- thread
- 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.)
- Active
Links
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
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程序确定待生成GPU程序对应的数据本地化方式,数据本地化方式包括对待生成GPU程序进行数据本地化采用的算法;根据CPU程序、GPU的存储资源属性和待生成GPU程序对应的数据本地化方式生成GPU程序;GPU的存储资源属性为根据GPU的硬件存储资源确定的。本发明实施例可简化GPU程序的开发难度,提升GPU程序的性能。
Description
技术领域
本发明实施例涉及计算机技术,尤其涉及一种程序转换方法、处理器及计算机系统。
背景技术
随着计算机及多媒体技术的发展,用户对计算机的处理性能的要求越来越高。这使得计算机中除包括中央处理器(Central Processing Unit,简称CPU)外,还包括图形处理器(Graphic Processing Unit,简称GPU)。
在计算机中,CPU可接收输入输出(Input Output,简称IO)设备所发送的计算机程序。该计算机程序可包括:CPU程序和GPU程序。该CPU在读取该计算机程序后,可运行其中的CPU程序,将其中的GPU程序转发至GPU,由该GPU运行该GPU程序。其中,该计算机程序可以为用户编程输入的程序。该GPU程序中可包括数据本地化程序,使得该GPU执行该GPU程序时,根据该数据本地化程序进行数据本地化,即将片外存储资源中该GPU程序所处理的数据存储至该GPU的片上存储资源上,提高GPU运行该GPU程序时的数据访存性能,提高GPU的处理性能。其中,该片外存储资源包括CPU和GPU所在芯片外的存储资源。该片上存储资源包括GPU所在芯片上的存储资源。
然而,该计算机程序可以为用户通过IO设备输入的程序,也就是说,该GPU程序中的数据本地化程序可以是该用户通过GPU编程语言编程获得。由于该数据本地化与该GPU的架构相关联,那么用户需清楚了解GPU的架构信息以及GPU编程语言,从而使得GPU程序的开发复杂度较高。
发明内容
本发明实施例提供一种程序转换方法、处理器及计算机系统,以降低GPU程序的开发复杂度,提升GPU程序的性能。
本发明实施例提供一种程序转换方法,包括:
根据中央处理器CPU程序确定待生成图像处理器GPU程序对应的数据本地化方式,数据本地化方式包括:对待生成GPU程序进行数据本地化采用的算法;
根据CPU程序、GPU的存储资源属性和待生成GPU程序对应的数据本地化方式生成GPU程序;GPU的存储资源属性为根据GPU的硬件存储资源确定的。
可选的,根据CPU程序确定待生成GPU程序对应的数据本地化方式,包括:
根据CPU程序的计算访存特征确定待生成GPU程序对应的数据本地化方式;计算访存特征包括:CPU程序的循环迭代特征。
可选的,根据CPU程序的计算访存特征确定待生成GPU程序对应的数据本地化方式之前,该方法还可包括:
对CPU程序进行语法分析,构成该CPU程序的中间表示;该CPU程序的中间表示可以包括:逆波兰记号、四元式或三元式,还可以包括其他形式。
根据该CPU程序的中间表示确定该CPU程序的计算访存特征。
可选的,CPU程序的循环迭代特征包括:
CPU程序的不同循环迭代间是否通信、CPU程序的不同循环迭代处理的数据是否共享和CPU程序的片外访存是否连续。
可选的,若CPU程序中一个循环迭代处理的数据为CPU程序中另一个循环迭代处理后的数据,或者,一个循环迭代处理后的数据为另一个循环迭代处理的数据,则CPU程序的不同循环迭代间存在通信;若一个循环迭代处理的数据不为另一个循环迭代处理后的数据,且,一个循环迭代处理后的数据不为另一个循环迭代处理的数据,则CPU程序的不同循环迭代间不存在通信;
若CPU程序的一个循环迭代处理的数据与CPU程序中另一个循环迭代处理的数据有相同的数据,则CPU程序的不同循环迭代处理的数据存在共享;若一个循环迭代处理的数据与另一个循环迭代处理的数据没有相同的数据,则CPU程序的不同循环迭代处理的数据不存在共享;
若CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址连续,则CPU程序的片外访存连续;若CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址不连续,则CPU程序的片外访存不连续。
可选的,根据CPU程序的计算访存特征确定待生成GPU程序对应的数据本地化方式,包括:
根据CPU程序的计算访存特征,和预设的计算访存特征与数据本地化方式的对应关系,确定CPU程序的计算访存特征对应的数据本地化方式为待生成GPU程序对应的数据本地化方式。
可选的,数据本地化方式包括:待生成GPU程序的处理数据的目标存储资源和待生成GPU程序的处理数据的目标存储资源对应的数据本地化方式。
可选的,待生成GPU程序的处理数据的目标存储资源包括:GPU的片上存储资源;GPU的存储资源属性包括:GPU的片上存储资源对应的数据本地化方式;
根据CPU程序、GPU的存储资源属性和待生成GPU程序对应的数据本地化方式生成GPU程序,包括:
判断目标存储资源对应的数据本地化方式,与,GPU的存储资源属性中GPU的片上存储资源对应的数据本地化方法是否相同;
若相同,则确定待生成GPU程序需要进行数据本地化;
根据CPU程序和待生成GPU程序对应的数据本地化方式生成GPU程序。
可选的,GPU的片上存储资源可包括:寄存器或共享存储器。
若GPU的片上存储资源包括:寄存器;GPU的存储资源属性中寄存器对应的数据本地化方式包括:向量化的数据本地化方式;
若GPU的片上存储资源包括:共享存储器;GPU的存储资源属性中共享存储器对应的数据本地化方式包括:向量化的数据本地化方式,或者,非向量化的数据本地化方式。
该程序转换方法中,在生成GPU程序之前,还通过根据该CPU程序确定的该待生成GPU程序的目标存储资源对应的数据本地化方式,和,该GPU的存储资源属性中片上存储资源对应的数据本地化方式,判断该待生成GPU程序是否需进行数据本地化,可保证执行该生成的GPU程序过程中实现数据本地化,降低GPU的访存压力,提高GPU的访存宽带,更好地保证GPU程序性能。
可选的,根据CPU程序和待生成GPU程序对应的数据本地化方式生成GPU程序,包括:
根据CPU程序和待生成GPU程序对应的数据本地化方式确定待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系;其中,待生成GPU程序的目标数据为待生成GPU程序处理后的数据;
根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定待生成GPU程序的源数据与待生成GPU程序的线程的对应关系;其中,待生成GPU程序的源数据为待生成GPU程序需处理的数据;
根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的源数据与待生成GPU程序的线程的对应关系、CPU程序,生成GPU程序。
根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的源数据与待生成GPU程序的线程的对应关系,生成GPU程序之前,该方法还包括:
判断待生成GPU程序各线程对应的目标数据中各数据的存储地址是否超出待生成GPU程序的目标数据的存储地址范围;
判断待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出待生成GPU程序的源数据的存储地址范围;
若待生成GPU程序的各线程对应的目标数据中各数据的存储地址均未超出待生成GPU程序的目标数据的存储地址范围,且,待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出待生成GPU程序的源数据的存储地址范围,根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的源数据与待生成GPU程序的线程的对应关系和CPU程序,生成GPU程序。
可选的,判断待生成GPU程序各线程对应的目标数据各数据的存储地址是否超出待生成GPU程序的目标数据的存储地址范围之前,该方法还包括;
根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系确定待生成GPU程序各线程对应的目标数据中各数据的存储地址;
根据待生成GPU程序各线程对应的目标数据中各数据的存储地址,和,待生成GPU程序的最大位置偏移,确定待生成GPU程序的目标数据的存储地址范围;
判断待生成GPU程序的各线程对应的源数据中各数据的存储地址是否超出待生成GPU程序的源数据的存储地址范围之前,该方法还包括:
根据待生成GPU程序的源数据与待生成GPU程序的线程的对应关系确定待生成GPU程序各线程对应的源数据中各数据的存储地址;
根据待生成GPU程序的源数据中各数据的存储地址和待生成GPU程序的最大位置偏移,确定待生成GPU程序的源数据的存储地址范围。
可选的,该方法还包括:
若待生成GPU程序各线程对应的部分目标数据的存储地址超出待生成GPU程序的目标数据的存储地址范围,待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出待生成GPU程序的源数据的存储地址范围,根据待生成GPU程序的另一部分目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的源数据与待生成GPU程序的线程的对应关系、CPU程序,生成GPU程序。
可选的,该方法还可包括:
若待生成GPU程序各线程对应的目标数据的存储地址均未超出待生成GPU程序的目标数据的存储地址范围,而待生成GPU程序各线程对应的部分源数据的存储地址超出待生成GPU程序的源数据的存储地址范围,根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的另一部分源数据与待生成GPU程序的线程的对应关系、CPU程序中的边界规则、CPU程序生成GPU程序;其中,边界规则包括:部分源数据的计算规则。
可选的,该部分源数据的计算规则可以包括:该部分源数据对应的预设值,或者,该部分源数据与该另一部分源数据的计算关系。
可选的,目标存储资源包括:寄存器;待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系包括:待生成GPU程序的每个线程的目标数据与每个线程的对应关系;待生成GPU程序的源数据与待生成GPU程序的线程的对应关系包括:每个线程的源数据与每个线程的对应关系。
可选的,根据CPU程序和待生成GPU程序对应的数据本地化方式确定待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系可以包括:
确定每个线程的任务粒度、待生成GPU程序的线程组织确定每个线程的目标数据与每个线程的对应关系;其中,每个线程的任务粒度包括:每个线程处理的循环迭代次数;待生成GPU程序的线程组织包括:待生成GPU程序中处理每层循环的所需开启的线程数量;
根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定待生成GPU程序的源数据与待生成GPU程序的线程的对应关系,包括:
根据每个线程的数据本地化粒度、每个线程的目标数据与每个线程的源数据的对应关系,和,每次访问数据的位置偏移,确定每个线程的源数据与每个线程的对应关系;每个线程的数据本地化粒度包括:每个线程需处理的数据个数。
可选的,目标存储资源包括:共享存储器;待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系包括:待生成GPU程序的每个工作组的目标数据与每个工作组的对应关系;待生成GPU程序的源数据与待生成GPU程序的线程的对应关系包括:每个工作组的源数据与每个工作组的对应关系,和,每个工作组中每个线程的源数据与每个线程的对应关系。
可选的,根据CPU程序和待生成GPU程序对应的数据本地化方式确定待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系包括:
根据线程的任务粒度、待生成GPU的线程组织确定每个工作组的目标数据与每个工作组的对应关系;其中,每个线程的任务粒度包括:每个线程处理的循环迭代次数;待生成GPU程序的线程组织包括:待生成GPU程序中处理每层循环需开启的线程数量;
根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定待生成GPU程序的源数据与待生成GPU程序的线程的对应关系,可以包括:
根据每个工作组的目标数据与每个工作组的对应关系、每个工作组的数据本地化粒度,和,每次访问数据的位置偏移,确定每个工作组的源数据与每个工作组的对应关系;每个工作组的数据本地化粒度包括:每个工作组需处理的数据个数;
根据每个工作组的源数据与每个工作组的对应关系、每个线程的数据本地化粒度,和,每次访问数据的位置偏移,确定每个线程的源数据与每个线程的对应关系;每个线程的数据本地化粒度包括:每个线程需处理的数据个数。
如上所述的程序转换方法,还针对不同的GPU片上存储资源采用不同的方式生成该GPU程序,可保证该生成的GPU程序的准确度,保证该生成的GPU程序的性能。
本发明实施例还提供一种处理器,包括:
确定模块,用于根据中央处理器CPU程序确定待生成图像处理器GPU程序对应的数据本地化方式,数据本地化方式包括:对待生成GPU程序进行数据本地化采用的算法;
生成模块,用于根据CPU程序、GPU的存储资源属性和待生成GPU程序对应的数据本地化方式生成GPU程序;GPU的存储资源属性为根据GPU的硬件存储资源确定的。
可选的,确定模块,还用于根据CPU程序的计算访存特征确定待生成GPU程序对应的数据本地化方式;计算访存特征包括:CPU程序的循环迭代特征。
可选的,CPU程序的循环迭代特征包括:CPU程序的不同循环迭代间是否通信、CPU程序的不同循环迭代处理的数据是否共享和CPU程序的片外访存是否连续。
可选的,若CPU程序中一个循环迭代处理的数据为CPU程序中另一个循环迭代处理后的数据,或者,一个循环迭代处理后的数据为另一个循环迭代处理的数据,则CPU程序的不同循环迭代间存在通信;若一个循环迭代处理的数据不为另一个循环迭代处理后的数据,且,一个循环迭代处理后的数据不为另一个循环迭代处理的数据,则CPU程序的不同循环迭代间不存在通信;
若CPU程序的一个循环迭代处理的数据与CPU程序中另一个循环迭代处理的数据有相同的数据,则CPU程序的不同循环迭代处理的数据存在共享;若一个循环迭代处理的数据与另一个循环迭代处理的数据没有相同的数据,则CPU程序的不同循环迭代处理的数据不存在共享;
若CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址连续,则CPU程序的片外访存连续;若CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址不连续,则CPU程序的片外访存不连续。
可选的,确定模块,还用于根据CPU程序的计算访存特征,和预设的计算访存特征与数据本地化方式的对应关系,确定CPU程序的计算访存特征对应的数据本地化方式为待生成GPU程序对应的数据本地化方式。
可选的,数据本地化方式包括:待生成GPU程序的处理数据的目标存储资源和待生成GPU程序的处理数据的目标存储资源对应的数据本地化方式。
可选的,待生成GPU程序的处理数据的目标存储资源包括:GPU的片上存储资源;GPU的存储资源属性包括:GPU的片上存储资源对应的数据本地化方式;
确定模块,还用于判断目标存储资源对应的数据本地化方式,与,GPU的片上存储资源对应的数据本地化方法是否相同;若相同,则确定待生成GPU程序需要进行数据本地化;
生成模块,还用于根据CPU程序和待生成GPU程序对应的数据本地化方式生成GPU程序。
可选的,确定模块,还用于根据CPU程序和待生成GPU程序对应的数据本地化方式确定待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系;根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定待生成GPU程序的源数据与待生成GPU程序的线程的对应关系;其中,待生成GPU程序的目标数据为待生成GPU程序处理后的数据;待生成GPU程序的源数据为待生成GPU程序需处理的数据;
生成模块,还用于根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的源数据与待生成GPU程序的线程的对应关系、CPU程序,生成GPU程序。
可选的,处理器,还包括:
判断模块,用于判断待生成GPU程序各线程对应的目标数据中各数据的存储地址是否超出待生成GPU程序的目标数据的存储地址范围;判断待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出待生成GPU程序的源数据的存储地址范围;
生成模块,还用于若待生成GPU程序的各线程对应的目标数据中各数据的存储地址均未超出待生成GPU程序的目标数据的存储地址范围,且,待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出待生成GPU程序的源数据的存储地址范围,根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的源数据与待生成GPU程序的线程的对应关系和CPU程序,生成GPU程序。
可选的,确定模块,还用于根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系确定待生成GPU程序各线程对应的目标数据中各数据的存储地址;根据待生成GPU程序各线程对应的目标数据中各数据的存储地址,和,该待生成GPU程序的最大位置偏移,确定该待生成GPU程序的目标数据的存储地址范围;根据该待生成GPU程序的源数据与待生成GPU程序的线程的对应关系确定待生成GPU程序各线程对应的源数据中各数据的存储地址;根据待生成GPU程序的源数据中各数据的存储地址和待生成GPU程序的最大位置偏移,确定待生成GPU程序的源数据的存储地址范围。
可选的,生成模块,还用于若待生成GPU程序各线程对应的部分目标数据的存储地址超出待生成GPU程序的目标数据的存储地址范围,待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出待生成GPU程序的源数据的存储地址范围,根据待生成GPU程序的另一部分目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的源数据与待生成GPU程序的线程的对应关系、CPU程序,生成GPU程序。
可选的,生成模块,还用于若待生成GPU程序各线程对应的目标数据的存储地址均未超出待生成GPU程序的目标数据的存储地址范围,而待生成GPU程序各线程对应的部分源数据的存储地址超出待生成GPU程序的源数据的存储地址范围,根据待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系、待生成GPU程序的另一部分源数据与待生成GPU程序的线程的对应关系、CPU程序中的边界规则、CPU程序生成GPU程序;其中,边界规则包括:部分源数据的计算规则。
可选的,目标存储资源包括:寄存器;待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系包括:待生成GPU程序的每个线程的目标数据与每个线程的对应关系;待生成GPU程序的源数据与待生成GPU程序的线程的对应关系包括:每个线程的源数据与每个线程的对应关系。
可选的,确定模块,还用于确定每个线程的任务粒度、待生成GPU程序的线程组织确定每个线程的目标数据与每个线程的对应关系;根据每个线程的数据本地化粒度、每个线程的目标数据与每个线程的源数据的对应关系,和,每次访问数据的位置偏移,确定每个线程的源数据与每个线程的对应关系;
其中,每个线程的任务粒度包括:每个线程处理的循环迭代次数;待生成GPU程序的线程组织包括:待生成GPU程序中处理每层循环的所需开启的线程数量;每个线程的数据本地化粒度包括:每个线程需处理的数据个数。
可选的,目标存储资源包括:共享存储器;待生成GPU程序的目标数据与待生成GPU程序的线程的对应关系包括:待生成GPU程序的每个工作组的目标数据与每个工作组的对应关系;待生成GPU程序的源数据与待生成GPU程序的线程的对应关系包括:每个工作组的源数据与每个工作组的对应关系,和,每个工作组中每个线程的源数据与每个线程的对应关系。
可选的,确定模块,还用于根据线程的任务粒度、待生成GPU的线程组织确定每个工作组的目标数据与每个工作组的对应关系;根据每个工作组的目标数据与每个工作组的对应关系、每个工作组的数据本地化粒度和,每次访问数据的位置偏移,确定每个工作组的源数据与每个工作组的对应关系;根据每个工作组的源数据与每个工作组的对应关系、每个线程的数据本地化粒度和每次访问数据的位置偏移,确定每个线程的源数据与每个线程的对应关系;每个线程的数据本地化粒度包括:每个线程需处理的数据个数;
其中,每个线程的任务粒度包括:每个线程处理的循环迭代次数;待生成GPU程序的线程组织包括:待生成GPU程序中处理每层循环需开启的线程数量;每个工作组的数据本地化粒度包括:每个工作组需处理的数据个数。
本发明实施例还提供一种计算机系统,包括:输入输出IO设备、中央处理器CPU、图像处理器GPU和存储器;IO设备、CPU、GPU和存储器通过通信总线连接;存储器包括:GPU的片外存储资源和GPU的片上存储资源;
IO设备,用于获取CPU程序;
CPU,用于根据CPU程序确定待生成GPU程序对应的数据本地化方式,数据本地化方式包括:对待生成GPU程序进行数据本地化采用的算法,并根据CPU程序、GPU的存储资源属性和待生成GPU程序对应的数据本地化方式生成GPU程序;GPU的存储资源属性为根据GPU的片上存储资源确定的;
GPU,用于根据生成的GPU程序进行处理,从而将生成的GPU程序的处理数据从GPU的片外存储资源存储至GPU的片上存储资源。
本发明实施例程序转换方法、处理器及计算机系统,可根据接收到的CPU程序确定待生成GPU程序对应的数据本地化方式,并根据该CPU程序、GPU的存储资源属性和该待生成GPU程序对应的数据本地化方式生成GPU程序,实现GPU程序的自动生成,因而用户无需清楚了解GPU的编程语言以及GPU的存储资源属性等信息,从而简化了GPU程序的开发难度,提升GPU程序的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种程序转换方法的流程图;
图2为本发明实施例二提供的一种程序转换方法的流程图;
图3为本发明实施例二提供的另一种程序转换方法的流程图
图4为本发明实施例三提供的一种程序转换方法的流程图;
图5为本发明实施例四提供的一种处理器的结构示意图;
图6为本发明实施例五提供的一种计算机系统的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明各实施例提供的程序转换方法,可由包括CPU和GPU的计算机中的CPU执行,通过该程序转换方法可将CPU程序转换为GPU程序。其中,该CPU程序可以为用户输入的通过CPU编程语言编程得到的程序。也就是说,通过该程序转换方法,可将用户输入的通过CPU编程语言得到的程序,即CPU程序,转换为GPU程序,用户无需了解GPU编程语言以及GPU的架构等信息,从而可降低GPU程序的开发复杂度。
本发明实施例一提供一种程序转换方法。该方法可由CPU执行。图1为本发明实施例一提供的一种程序转换方法的流程图。如图1所示,该方法可包括:
S101、根据CPU程序确定待生成GPU程序对应的数据本地化方式,该数据本地化方式包括:对该待生成GPU程序进行数据本地化采用的算法。
其中,CPU程序可以是CPU接收IO设备发送的CPU程序。该CPU程序可以为用户通过IO设备输入的程序。该CPU程序可以为CPU编程语言对应的程序,如C语言程序。该CPU程序可以为串行程序,也就是说,该CPU可通过串行方式执行该CPU程序。该CPU程序可以包括图像处理程序,如图像处理中的水平滤波程序,和/或,图像处理中的边界处理程序等。在该S101之前,该方法还可包括:接收CPU程序。
具体地,CPU可以通过软件编译模块,如编译器,对该CPU程序的各指令进行语法分析,构成该CPU程序的中间表示,继而根据该CPU程序的中间表示确定该待生成GPU程序对应的数据本地化方式。该CPU程序的中间表示为与该CPU程序等价的可分析形式。该CPU程序的中间表示可以为通过介于源程序语言和机器语言之间的中间语言表示程序的一种形式,其作用是使程序的结构在逻辑上更为简单明确。该CPU程序的中间表示可以包括:逆波兰记号、四元式或三元式,还可以包括其他形式,具体此处不作限定。
S102、根据该CPU程序、GPU的存储资源属性和该待生成GPU程序对应的数据本地化方式生成GPU程序,该GPU的存储资源属性为根据该GPU的硬件存储资源确定的。
该GPU的硬件存储资源包括:该GPU的片上存储资源。该GPU的存储资源属性可包括该GPU的架构所对应的该GPU的片上存储资源的属性。该GPU的片上存储资源可包括:寄存器(Register,简称R)和共享存储器(Shared Memory,简称S)。该GPU的片上存储资源的属性可包括:该GPU的至少一个片上存储资源的属性。如该GPU的片上存储资源的属性可包括寄存器的属性和共享存储器的属性。该寄存器的属性可包括该GPU支持寄存器的数据本地化属性,该共享存储器的属性可包括该GPU支持共享存储器的数据本地化属性。
GPU程序可以是根据该CPU程序生成的,该GPU程序中可包括业务处理指令,因此该CPU程序与该GPU程序中业务处理指令的实现功能相同,也就是说,该CPU执行该CPU程序实现的业务功能,与该GPU执行该GPU程序实现的业务功能相同。该GPU程序可以是根据该GPU的存储资源属性和该待生成GPU程序对应的数据本地化方式生成的,因此,该GPU程序除业务处理指令外,还可包括:数据本地化指令,该数据本地化指令可以为该待生成GPU程序对应的数据本地化方式对应的程序指令,该待生成GPU程序对应的数据本地化方式还可满足该GPU的存储资源属性。该GPU在执行该GPU程序过程中,可根据该数据本地化指令采用该GPU程序对应的数据本地化方式实现数据本地化,即该GPU程序的源数据和/或该GPU程序的目的数据从该GPU的片外存储资源存储至该GPU程序对应的数据本地化方式对应的该GPU的片上存储资源上,从而使得该GPU在执行该GPU程序的过程中可直接在该GPU的片上存储资源上进行访存,继而直接进行计算处理,而无需从该GPU的片外存储资源上进行访存,从而可提高该GPU程序的性能。其中,该GPU程序的源数据可以为该GPU程序需处理的数据;该GPU程序的目标数据可以该GPU程序处理后的数据。该GPU的片外存储资源可包括该GPU所在芯片外的存储资源,如计算机的全局共享存储器等。
本发明实施例一提供的程序转换方法,可根据接收到的CPU程序确定待生成GPU程序对应的数据本地化方式,并根据该CPU程序、GPU的存储资源属性和该待生成GPU程序对应的数据本地化方式生成GPU程序,实现GPU程序的自动生成,因而用户无需清楚了解GPU的编程语言以及GPU的存储资源等信息,从而简化了GPU程序的开发难度。
同时,由于该GPU程序是根据该CPU程序确定的待生成GPU程序对应的数据本地化方式生成的,因而,本发明实施例提供的程序转换方法,还可使得GPU执行该GPU程序的过程中实现数据本地化,从而提高GPU程序的性能。并且,由于通过该方法可将该CPU程序转换为GPU程序,也就是说,对于预设功能的CPU程序,如图像处理的CPU程序,可转换为GPU程序,由该GPU程序执行,实现该预设功能,而无需该CPU执行,从而减轻CPU处理压力。
本发明实施例二还提供一种程序转换方法。图2为本发明实施例二提供的一种程序转换方法的流程图。如图2所示,可选的,如上所述的S101中该根据CPU程序确定待生成GPU程序对应的数据本地化方式,包括:
S201、根据该CPU程序的计算访存特征确定该待生成GPU程序对应的数据本地化方式,该计算访存特征包括:该CPU程序的循环迭代特征。
具体地,该S201中可以是根据该CPU程序的计算访存特征,确定该CPU程序的计算访存特征对应的数据本地化方式为该待生成GPU程序对应的数据本地化方式。
该S201中例如可以是根据该CPU程序的计算访存特征,确定该CPU程序对应的GPU处理模式,并确定该GPU处理模式对应的数据本地化方式确定为该待生成GPU程序对应的数据本地化方式。其中,该CPU程序对应的GPU处理模式例如可以是该CPU程序的计算访存特征的集合。
可选的,在该S201之前,该方法还可包括:
确定该CPU程序的计算访存特征。
具体地,CPU可以是通过编译器对该CPU程序进行语法分析,构成该CPU程序的HAST中间表示,继而根据该CPU程序的HAST中间表示确定该CPU程序的计算访存特征。
可选的,该CPU程序的循环迭代特征包括:该CPU程序的不同循环迭代间是否通信、该CPU程序的不同循环迭代处理的数据是否共享和该CPU程序的片外访存是否连续。
具体地,若该CPU程序的循环迭代特征包括至少一个特征,则该GPU处理模式可以是该CPU程序的该至少一个特征组成的集合。该GPU程序的处理模式可通过该至少一个特征组成的多元组形成表示。
举例来说,该CPU程序的循环迭代特征包括:三个特征,如该CPU程序的不同循环迭代间是否通信、该CPU程序的不同循环迭代处理的数据是否共享和该CPU程序的片外访存是否连续。因而,该GPU处理模式可通过该计算访存特征的三个特征组成的三元组形式表示。其中,该CPU程序的循环迭代特征中每个特征的不同状态,可通过不同的比特值表示。因而,可通过比特值1表示该CPU程序的不同循环迭代间存在通信,通过比特值0表示该CPU程序的不同循环迭代间不存在通信;通过比特值1表示该CPU程序的不同循环迭代处理的数据存在共享,通过比特值0表示该CPU程序的不同循环迭代处理的数据不存在共享;通过比特值1表示该CPU程序的片外访存连续,通过比特值0表示该CPU程序的片外访存不连续。
若该CPU程序的不同循环迭代间存在通信、该CPU程序的不同循环迭代处理的数据存在共享、且该CPU程序的片外访存连续,则该GPU的处理模式可表示为{1,1,1}。
若该CPU程序的不同循环迭代间不存在通信、该CPU程序的不同循环迭代处理的数据存在共享、且该CPU程序的片外访存连续,则该GPU的处理模式可表示为{0,1,1}。
若该CPU程序的不同循环迭代间存在通信、该CPU程序的不同循环迭代处理的数据不存在共享、且该CPU程序的片外访存连续,则该GPU的处理模式可表示为{1,0,1}。
若该CPU程序的不同循环迭代间存在通信、该CPU程序的不同循环迭代处理的数据存在共享、且该CPU程序的片外访存不连续,则该GPU的处理模式可表示为{1,1,0}。
若该CPU程序的不同循环迭代间不存在通信、该CPU程序的不同循环迭代处理的数据不存在共享、且该CPU程序的片外访存连续,则该GPU的处理模式可表示为{0,0,1}。
若该CPU程序的不同循环迭代间存在通信、该CPU程序的不同循环迭代处理的数据不存在共享、且该CPU程序的片外访存不连续,则该GPU的处理模式可表示为{1,0,0}。
若该CPU程序的不同循环迭代间不存在通信、该CPU程序的不同循环迭代处理的数据存在共享、且该CPU程序的片外访存不连续,则该GPU的处理模式可表示为{0,1,0}。
若该CPU程序的不同循环迭代间不存在通信、该CPU程序的不同循环迭代处理的数据不存在共享、且该CPU程序的片外访存不连续,则该GPU的处理模式可表示为{0,0,0}。
如上述所述的CPU程序的处理模式仅为举例说明,本发明实施例中该CPU程序的处理模式还可以是其他表示形式,在此不再赘述。
可选的,若该CPU程序中一个循环迭代处理的数据为该CPU程序中另一个循环迭代处理后的数据,或者,该一个循环迭代处理后的数据为该另一个循环迭代处理的数据,则该CPU程序的不同循环指令间存在通信;若该一个循环迭代处理的数据不为该另一个循环迭代处理后的数据,且,该一个循环迭代处理后的数据不为该另一个循环迭代处理的数据,则该CPU程序的不同循环迭代间不存在通信。
若该CPU程序中一个循环迭代处理的数据与该CPU程序中另一个循环迭代处理的数据有相同的数据,则该CPU程序的不同循环迭代处理的数据存在共享;若该一个循环迭代处理的数据与该另一个循环迭代处理的数据不存在相同的数据,则该CPU程序的不同循环迭代处理的数据不存在共享。
若该CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址连续,则该CPU程序的片外访存连续;若该不同循环迭代处理数据对应的片外存储资源上的存储地址不连续,则该CPU程序的片外访存不连续。
可选的,如上所述的S201中根据该CPU程序的计算访存特征确定该待生成GPU程序对应的数据本地化方式,可以包括:
根据该CPU程序的计算访存特征,和预设的计算访存特征与数据本地化方式的对应关系,确定该CPU程序的计算访存特征对应的数据本地化方式为该待生成GPU程序对应的数据本地化方式。
具体地,该CPU程序的计算访存特征的集合可构成该CPU程序对应的GPU处理模式。因而,该预设的计算访存特征与数据本地化方式对应关系,可以为预设的GPU处理模式与数据本地化方式对应关系,该预设的GPU处理模式与数据本地化方式的对应关系,可以位于GPU处理模式库中。该GPU处理模式库中可包括至少一个GPU处理模式与数据本地化方式的对应关系;其中,一个GPU处理模式可包括计算访存特征的一个集合。该计算访存特征与数据本地化方式的对应关系,可以是预先根据历史经验数据进行配置的。举例来说,若该GPU处理模式库可包括:{0,0,0}、{0,0,1}、{0,1,0}、{0,1,1}、{1,0,0}、{1,0,1}、{1,1,0}、{1,1,1}。其中,每个GPU处理模式具有对应的数据本地化方式。
可选的,该数据本地化方式包括:该待生成GPU程序的处理数据的目标存储资源和该待生成GPU程序的处理数据的目标存储资源对应的数据本地化方式。
可选的,该待生成GPU程序的处理数据的目标存储资源包括:该GPU的片上存储资源。举例来说,该GPU的片上存储资源可包括寄存器或共享存储器。
该GPU的存储资源属性包括:该GPU的片上存储资源对应的数据本地化方式。举例来说,该GPU的存储资源属性可包括:寄存器对应的数据本地化方式,和,共享存储器对应的数据本地化方式。该GPU的存储资源属性中,寄存器对应的数据本地化方式可以为该GPU所支持的数据本地化方式,该共享存储器对应的数据本地化方式也可以为该GPU支持的数据本地化方式。其中,该GPU的存储资源属性中,该寄存器对应的数据本地化方式可包括:向量化(Vector,简称V)的数据本地化方式。该GPU的存储资源属性中,该共享存储器对应的数据本地化方式可包括:向量化的数据本地化方式,或者,非向量化(No Vector,简称NV)的数据本地化方式。
可选的,如上所述的S102中根据该CPU程序、GPU的存储资源属性和该待生成GPU程序的数据本地化方式生成GPU程序,可包括:
S202、判断该目标存储资源对应的数据本地化方式与该GPU的片上存储资源对应的数据本地化方式是否相同。
S203、若相同,则确定该待生成GPU程序需要进行数据本地化。
S204、根据该CPU程序和该待生成GPU程序对应的数据本地化方式生成该GPU程序。
举例来说,若该GPU处理模式库可包括:{0,0,0}、{0,0,1}、{0,1,0}、{0,1,1}、{1,0,0}、{1,0,1}、{1,1,0}、{1,1,1}。其中,每个GPU处理模式具有对应的数据本地化方式。该GPU处理模式库中各GPU处理模式与数据本地化方式的对应关系依次为{{0,0,0},S,NV}、{{0,0,1},R,NV}、{{0,1,0},S,NV}、{{0,1,1},R,V}、{{1,0,0},S,NV}、{{1,0,1},S,V}、{{1,1,0},S,NV}、{{1,1,1},R,V}。若该CPU程序的处理模式为{0,0,0},则该目标存储资源可以为共享存储器,该目标存储资源对应的数据本地化方式可以为非向量化的数据本地化方式;若该CPU程序的处理模式为{0,0,1},则该目标存储资源可以为寄存器,该目标存储资源对应的数据本地化方式可以为非向量化的数据本地化方式;若该CPU程序的处理模式为{0,1,0},则该目标存储资源可以为共享存储器,该目标存储资源对应的数据本地化方式可以为非向量化的数据本地化方式;若该CPU程序的处理模式为{0,1,1},则该目标存储资源可以为寄存器,该目标存储资源对应的数据本地化方式可以为向量化的数据本地化方式;若该CPU程序的处理模式为{1,0,0},则该目标存储资源可以为共享存储器,该目标存储资源对应的数据本地化方式可以为非向量化的数据本地化方式;若该CPU程序的处理模式为{1,0,1},则该目标存储资源可以为共享存储器,该目标存储资源对应的数据本地化方式可以为向量化的数据本地化方式;若该CPU程序的处理模式为{1,1,0},则该目标存储资源可以为共享存储器,该目标存储资源对应的数据本地化方式可以为非向量化的数据本地化方式;若该CPU程序的处理模式为{1,1,1},则该目标存储资源可以为寄存器,该目标存储资源对应的数据本地化方式可以为向量化的数据本地化方式。
若该GPU的片上存储资源包括寄存器,则根据该GPU的存储资源属性可确定该GPU的片上存储资源对应的数据本地化方法可以包括向量化的数据本地化方式。该GPU处理模式中该目标存储资源对应的数据本地化方式为寄存器对应的数据本地化方式,寄存器对应的数据本地化方式若为向量化的数据本地化方式,则该GPU处理模式中该目标存储资源对应的数据本地化方式,与,该GPU的存储属性中该GPU的片上存储资源对应的数据本地化方式相同,因而可确定该待生成GPU程序需要进行数据本地化;若该GPU处理模式中寄存器对应的数据本地化方式为非向量化的数据本地化方式,则该GPU处理模式中该目标存储资源对应的数据本地化方式,与,该GPU的存储属性中该GPU的片上存储资源对应的数据本地化方式不同,因而确定该待生成GPU程序不需要进行数据本地化。
若确定该待生成GPU程序需要进行数据本地化,则根据该CPU程序和该待生成GPU程序对应的数据本地化方式生成该GPU程序。
如上通过目标存储资源包括该GPU的寄存器为例进行说明,对于共享存储器的场景,其比较过程与上述实施例类似,在此不再赘述。
图3为本发明实施例二提供的另一种程序转换方法的流程图。如图3所示,可选的,如上所述的实施例中的S204中根据该CPU程序和该待生成GPU程序对应的数据本地化方式生成该GPU程序可包括:
S301、根据该CPU程序和该待生成GPU程序对应的数据本地化方式确定该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系;其中,该待生成GPU程序的目标数据为该待生成GPU程序处理后的数据。
S302、根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系;其中,该待生成GPU程序的源数据为该待生成GPU程序需处理的数据。
S303、根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系和该CPU程序,生成该GPU程序。
可选的,如上所述的在实施例中S303中根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系和该CPU程序,生成该GPU程序之前,该方法还可包括:
判断该待生成GPU程序各线程对应的目标数据中各数据的存储地址是否超出该待生成GPU程序的目标数据的存储地址范围;
判断该待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出该待生成GPU程序的源数据的存储地址范围;
若该待生成GPU程序各线程对应的目标数据中各数据的存储地址均未超出该待生成GPU程序的目标数据的存储地址范围,且,该待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系和该CPU程序,生成该GPU程序。
可选的,在如上述所述的判断该待生成GPU程序各线程对应的目标数据各数据的存储地址是否超出该待生成GPU程序的目标数据的存储地址范围之前,该方法还包括;
根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系确定该待生成GPU程序各线程对应的目标数据中各数据的存储地址;
根据该待生成GPU程序各线程对应的目标数据中各数据的存储地址,和,该待生成GPU程序的最大位置偏移,确定该待生成GPU程序的目标数据的存储地址范围。
可选的,在如上述所述的判断该待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出该待生成GPU程序的源数据的存储地址范围之前,该方法还可包括:
根据该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系确定该待生成GPU程序各线程对应的源数据中各数据的存储地址;
根据该待生成GPU程序各线程对应的源数据中各数据的存储地址和该待生成GPU程序的最大位置偏移,确定该待生成GPU程序的源数据的存储地址范围。
可选的,该方法还可包括:
若该待生成GPU程序各线程对应的部分目标数据的存储地址超出该待生成GPU程序的目标数据的存储地址范围,该待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序的另一部分目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系、该CPU程序,生成该GPU程序。
举例来说,生成该GPU程序后,GPU在执行该GPU程序的过程中,可根据该GPU程序的目标数据与该GPU程序的线程的对应关系、该GPU程序的源数据与该GPU程序的线程的对应关系,对该GPU程序的另一部分目标数据和该GPU程序的源数据进行数据本地化,即将该GPU程序的源数据和该GPU程序的另一部分目标数据存储至该GPU的片上存储资源。
可替代地,该方法还可包括:
若该待生成GPU程序各线程对应的目标数据的存储地址均未超出该待生成GPU程序的目标数据的存储地址范围,该待生成GPU程序各线程对应的部分源数据的存储地址超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的另一部分源数据与该待生成GPU程序的线程的对应关系、该CPU程序中的边界规则、所述CPU程序生成该GPU程序;其中,该边界规则包括:该部分源数据的计算规则。
举例来说,该边界规则中该部分源数据的计算规则可以包括:该部分源数据对应的预设值,或者,该部分源数据与该另一部分源数据的计算关系。
举例来说,生成该GPU程序后,GPU可在执行该GPU程序的过程中,可根据该GPU程序的目标数据与该GPU程序的线程的对应关系的程序指令、该GPU程序的另一部分源数据与该GPU程序的线程的对应关系的程序指令,对该GPU程序的目标数据和该GPU程序的另一部分源数据进行数据本地化,即将该GPU程序的目标数据和该GPU程序的另一部分源数据存储至该GPU程序的一个片上存储资源;根据该CPU程序中的该部分源数据的计算规则确定该部分源数据。
可选的,该目标存储资源可包括:寄存器;该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系包括:该待生成GPU程序的每个线程的目标数据与该每个线程的对应关系;该待生成GPU程序的源数据与该待生成CPU程序的线程的对应关系包括:该每个线程的源数据与该每个线程的对应关系。
可选的,如上所述的根据该CPU程序和该待生成GPU程序对应的数据本地化方式确定该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系可以包括:
确定该每个线程的任务粒度、该待生成GPU的线程组织确定该每个线程的目标数据与该每个线程的对应关系;其中,该每个线程的任务粒度包括:该每个线程处理的循环迭代次数;该待生成GPU程序的线程组织包括:该待生成GPU程序中处理每层循环的所开启的线程数量。
可选的,如上所述的根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定该待生成GPU程序的源数据与该待生成CPU程序的线程的对应关系,可以包括:
根据每个线程的数据本地化粒度、每个线程的目标数据与每个线程的源数据的对应关系,和,每次访问数据的位置偏移,确定每个线程的源数据与每个线程的对应关系;每个线程的数据本地化粒度包括:每个线程需处理的数据个数。
可替代地,若目标存储资源包括:共享存储器;该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系包括:该待生成GPU程序的每个工作组(work-group)的目标数据与该每个工作组的对应关系。该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系包括:该每个工作组的源数据与该每个工作组的对应关系,和,每个工作组中每个线程的源数据与每个线程的对应关系。
可选的,如上根据该CPU程序和该待生成GPU程序对应的数据本地化方式确定该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系,可以包括:
根据该线程的任务粒度、该待生成GPU的线程组织确定该每个工作组的目标数据与该每个工作组的对应关系;其中,该每个线程的任务粒度包括:该每个线程处理的循环迭代次数。该待生成GPU程序的线程组织包括:该待生成GPU程序中处理每层循环需开启的线程数量;
可选的,根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系,可以包括:
根据该每个工作组的目标数据与该每个工作组的对应关系、该每个工作组的数据本地化粒度,和,该每次访问数据的位置偏移,确定该每个工作组的源数据与该每个工作组的对应关系;该每个工作组的数据本地化粒度包括:该每个工作组需处理的数据个数;
根据该每个工作组的源数据与该每个工作组的对应关系、该每个线程的数据本地化粒度和,该每次访问数据的位置偏移,确定该每个线程的源数据与该每个线程的对应关系;该每个线程的数据本地化粒度包括:该每个线程需处理的数据个数。
本发明实施例二提供的各程序转换方法,通过提供多种确定该待生成GPU程序对应的数据本地化方式的实现方法和多种生成GPU程序的实现过程,可更好地保证GPU程序的开发难度的降低,提高GPU程序的性能。
本发明实施例三还提供一种程序转换方法。图4为本发明实施例三提供的一种程序转换方法的流程图。本发明实施例三可通过具体的实例对上述实施例进行具体说明。如图4所示,该方法可包括:
S401、根据CPU程序的计算访存特征确定该CPU程序对应的GPU处理模式。
需要说明的是,在该S401中根据CPU程序的计算访存特征确定该CPU程序对应的GPU处理模式之前,该方法还可包括:
接收CPU程序,并确定该CPU程序的计算访存特征。其中,该CPU程序可以为串行程序。
举例来说,该CPU程序例如可以为图像处理的水平滤波的程序。该水平滤波的程序可如下所示:
该CPU程序例如也可以为图像处理的边界处理的程序。该边界处理的程序可如下所示:
其中,确定该CPU程序的计算访存特征,可以是对该CPU程序的指令进行语法分析,获得该CPU程序的中间表示,并根据该CPU程序的中间表示确定该CPU程序的计算访存特征。该计算访存特征包括:该CPU程序的不同循环迭代间是否通信、该CPU程序的不同循环迭代处理的数据是否共享和该CPU程序的片外访存是否连续。该CPU程序对应的GPU处理模式可以是该CPU程序的计算访存特征,从预设的GPU处理模式库中确定该CPU程序的计算访存特征的集合所形成的GPU处理模式。该GPU处理模式库可包括:{0,0,0}、{0,0,1}、{0,1,0}、{0,1,1}、{1,0,0}、{1,0,1}、{1,1,0}、{1,1,1}。
以上述水平滤波程序为例,该CPU程序的计算访存特征可包括:该CPU程序的不同循环迭代间不存在通信、该CPU程序的不同循环迭代处理的数据存在共享和该CPU程序的片外访存连续。该CPU程序对应的GPU处理模式可以为{0,1,1}。
以上述边界处理程序为例,该CPU程序的计算访存特征可包括:该CPU程序的不同循环迭代间不存在通信、该CPU程序的不同循环迭代处理的数据存在共享和该CPU程序的片外访存不连续。该CPU程序对应的GPU处理模式可以为{0,1,0}。
S402、根据该GPU处理模式对应的本地化方式,确定待生成GPU程序对应的数据本地化方式。
该GPU处理模式库可包括:{0,0,0}、{0,0,1}、{0,1,0}、{0,1,1}、{1,0,0}、{1,0,1}、{1,1,0}、{1,1,1}。其中,每个GPU处理模式具有对应的数据本地化方式。该GPU处理模式库中各GPU处理模式与数据本地化方式的对应关系依次为{{0,0,0},S,NV}、{{0,0,1},R,NV}、{{0,1,0},S,NV}、{{0,1,1},R,V}、{{1,0,0},S,NV}、{{1,0,1},S,V}、{{1,1,0},S,NV}、{{1,1,1},R,V}。
以水平滤波程序为例,该CPU程序对应的GPU处理模式可以为{0,1,1},则该待生成GPU程序对应的数据本地化方式可包括:该GPU的寄存器,该GPU的寄存器对应的数据本地化方式为向量化方式。
以边界处理程序为例,该CPU程序对应的GPU处理模式可以为{0,1,0},则该待生成GPU程序对应的数据本地化方式可包括:该GPU的共享存储器,该GPU的寄存器对应的数据本地化方式为非向量化方式。
S403、根据该CPU程序和该待生成GPU程序对应的数据本地化方式确定该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系。
其中,该待生成GPU程序的目标数据为该待生成GPU程序处理后的数据。
以水平滤波程序为例,该待生成GPU程序对应的数据本地化方式可包括:寄存器,该寄存器对应的数据本地化方式为向量化方式。
若该待生成GPU程序对应的数据本地化方式可包括:寄存器,则该待生成GPU程序的每个线程的任务粒度为N,N可以为2,4,8等。N的具体值可以根据目标GPU确定,不同GPU对应N值可以不同。该每个线程的任务粒度包括:该每个线程处理的循环迭代次数。该待生成GPU程序的数据本地化粒度为每个线程的源数据和/或每个线程的目标数据。该每个线程的源数据为该每个线程需处理的数据;该每个线程的目标数据为该每个线程处理后的数据。该待生成GPU程序的线程组织为该待生成GPU程序所需的线程组织,包括:该待生成GPU程序中处理每层循环所需开启的线程数量。该待生成GPU程序的一个工作组的线程组织为{P,1,1},P取值范围为[128,1024],P的具体值可以根据该GPU确定的一个工作组内需开启的线程数量,不同GPU对应P值可以不同。由于该CPU程序为两层循环,因此,在该待生成GPU程序在内层循环,即X维循环所需开启的线程数量为一个工作组内需开启的线程数量的整数倍。该待生成GPU程序在X维循环所需开启的线程数量例如可以为divUp(divUp(width/N),P)﹡P。其中,divUp表示向上取整。divUp(width/N)表示对width与N的商向上取整得到的整数;divUp(divUp(width/N),P)表示对divUp(width/N),与,P的商向上取整得到的整数。在该待生成GPU程序在外层循环,即Y维循环所需开启的线程数量为height。
该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系可以包括:该待生成GPU程序的每个线程的目标数据在全局内存的存储地址,与,该每个线程的对应关系。该待生成GPU程序的每个线程的目标数据与该每个线程的对应关系,也可以称为该待生成GPU程序的每个线程的目标数据与该每个线程的全局映射关系。该待生成GPU程序的每个线程的目标数据与该每个线程的对应关系例如可以为:
(gidx,gidy)->dst[row_index][col_index:col_num:1];
col_num=N;
row_index=h;
col_index=w*N;
其中,gidx和gidy为X维和Y维上循环中的线程索引;N为每个线程的任务粒度;col_index:N:1表示从col_index开始的N个数据,相邻数据间隔为1;h为X维的循环迭代索引;w为Y维的循环迭代索引。
以边界处理程序为例,该待生成GPU程序对应的数据本地化方式可包括:共享存储器,该共享存储器对应的数据本地化方式为非向量化方式。
若该待生成GPU程序对应的数据本地化方式可包括:共享存储器,则该待生成GPU程序的每个线程的任务粒度为M,M可以为1或其他整数。M的具体值可以根据该GPU确定,不同GPU对应M值可以不同。该每个线程的任务粒度包括:该每个线程处理的循环迭代次数。该待生成CPU程序的数据本地化粒度为每个工作组的源数据和/或每个工作组的目标数据。待生成GPU程序的线程组织为该待生成GPU程序所需的线程组织,可包括:该待生成GPU程序中处理每层循环所需开启的线程数量。该待生成GPU程序的一个工作组的线程组织为{1,P,1},,P取值范围为[128,1024],P的具体值可以根据该GPU确定的一个工作组内需开启的线程数量,不同GPU对应P值可以不同。由于该CPU程序为一层循环,因此,在该待生成GPU程序在内层循环,即X维循环所需开启的线程数量为1,在Y维循环所需开启的线程数量为divUp(width/4,P)。其中,divUp表示向上取整。在该边界处理程序实例中,以width可以被4整除为例进行说明。divUp(width/N,P)表示对width/N,与,P的商取整得到的整数。
该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系可以包括:该待生成GPU程序的每个工作组的目标数据在全局内存的存储地址与该每个工作组的对应关系。该待生成GPU程序的每个工作组的目标数据与该每个工作组的对应关系,也可以称为该每个工作组的目标数据与该每个工作组的全局映射关系。该每个工作组的目标数据与该每个工作组的对应关系例如可以为:
(gidx,gidy)->dst[row_index:row_num:1][A1];
row_index=h;
row_num=4;
其中,gidx和gidy为X和Y维循环上的线程索引;以上述边界处理程序为例,A1=0;h为X维中的循环迭代索引;4为每次循环迭代处理的目标数据所在矩阵的行数。
S404、根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系。
其中,该待生成GPU程序的源数据为该待生成GPU程序需处理的数据。
以水平滤波程序为例,该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系可以包括该待生成GPU程序的每个线程的源数据在全局内存的存储地址,与,该待生成GPU程序的线程的对应关系。该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系,也可以称为该待生成GPU程序的源数据与该待生成GPU程序的线程的全局映射关系。该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系例如可以为:
(gidx,gidy)->src[row_index][col_index:col_num:1];
row_index=h;
col_index=w*N-offset;
col_num=src_col_num+N-1;
其中,gidx和gidy为X维和Y维上的线程索引;h为X维的循环迭代索引;w为Y维的循环迭代索引,offset=2为每次访问数据的位置偏移。src_col_num=5,为每次循环迭代需要读取的源数据所在矩阵的列数。
以边界处理程序为例,该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系可以包括:该待生成GPU程序的每个工作组的源数据在全局内存的存储地址与该每个工作组的对应关系,和,该每个工作组中每个线程的源数据在本地内存的存储地址与该每个线程的对应关系。该待生成GPU程序的每个工作组的源数据与该每个工作组的对应关系,也可以称为该每个工作组的源数据与该每个工作组的全局映射关系。该每个工作组的源数据与该每个工作组的对应关系例如可以为:
(gidx,gidy)->src[row_index:row_num:row_stride][1]
row_index=h,或者,
row_index=lidx+work_group_size_y+number-1;lidx<=work_group_size_y-number+1;
row_num=1;
row_stride=1;
其中,h为X维中的循环迭代索引;number为每次循环迭代处理的源数据所在矩阵的行数,如2;lidx为一个工作组内的线程索引。
若该row_index=h,则该每个工作组的源数据与该每个工作组的对应关系可包括:该每个工作组内所有线程的源数据与该每个工作组的对应关系;row_index=lidx+work_group_size_y+number-1,则该每个工作组的源数据与该每个工作组的对应关系还可包括:该每个工作组内线程索引最大的预设个数线程的源数据与该每个工作组的对应关系。
该每个工作组中每个线程的源数据在本地内存的存储地址与该每个线程的对应关系,也可以称为该每个线程的源数据与该每个线程的本地映射关系。
每个work_group的源数据个数为:
Local_size=(work_group_size_y+src_row_num-1)*src_col_num
其中,work_group_size_y=P,src_row_num为每次循环迭代需要读取的源数据所在矩阵的行数,如4;src_col_num为每次循环迭代需要读取的源数据所在矩阵的列数,如1。
该每个线程的源数据与该每个线程的对应关系例如可以为:
local_size_x=work_group_size_y+src_row_num-1=P+3;
local_size_y=src_col_num=1
S405、根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系确定该待生成GPU程序各线程对应的目标数据中各数据的存储地址和该待生成GPU程序的目标数据的存储地址范围。
该S405中可以是根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系确定该待生成GPU程序各线程对应的目标数据中各数据的存储地址,并根据该待生成GPU程序的目标数据中各数据的存储地址,和,该待生成GPU程序的最大位置偏移,确定该待生成GPU程序的目标数据的存储地址范围。
S406、根据该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系确定该待生成GPU程序各线程对应的源数据中各数据的存储地址和该待生成GPU程序的源数据的存储地址范围。
该S406中可以是根据该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系确定该待生成GPU程序各线程对应的源数据中各数据的存储地址,并根据该待生成GPU程序各线程对应的源数据中各数据的存储地址和该待生成GPU程序的最大位置偏移,确定该待生成GPU程序的源数据的存储地址范围。
S407、判断该待生成GPU程序各线程对应的目标数据中各数据的存储地址是否超出该待生成GPU程序的目标数据的存储地址范围。
S408、判断该待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出该待生成GPU程序的源数据的存储地址范围。
该待生成GPU程序各线程对应的源数据中各数据的存储地址,可以通过该待生成GPU程序各线程的索引表示。以上述水平滤波程序为例,该待生成GPU程序各线程的索引可以为X维循环的线程索引,gidx。该待生成GPU程序各线程对应的源数据的存储地址范围,可通过该待生成GPU程序的线程索引范围表示。
以上述水平滤波程序为例,该待生成GPU程序的线程对应的源数据的存储地址范围可以包括X维循环的数据存储地址范围divUp(width/N)。因此,判断该待生成GPU程序的源数据中各数据的存储地址是否超出该待生成GPU程序的源数据的存储地址范围,可以采用如下公式进行:gidx<divUp(width/N)。若线程索引大于或等于gidx,则该线程对应的源数据中各数据的存储地址均超出该待生成GPU程序的源数据的存储地址范围,该线程为越界线程。若线程索引小于gidx,则该线程对应的源数据的存储地址未超出该待生成GPU程序的源数据的存储地址范围,该线程索引gidx的线程可称为内部线程。
该判断该待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出该待生成GPU程序的源数据的存储地址范围的步骤对应的程序可如下所示:
1:if gidx>=divUp(width/N)then
2:return;
3:endif
可替代地,以上述边界处理程序为例,该待生成GPU程序的线程对应的源数据的存储地址范围可以包括Y维循环的数据存储范围width/N。因此,判断该待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出该待生成GPU程序的源数据的存储地址范围,可以是采用如下公式进行:gidy<width/N。若线程索引大于或等于gidy,则该线程对应的源数据中各数据的存储地址均超出该待生成GPU程序的源数据的存储地址范围,该线程为越界线程。若线程索引小于gidy,则该线程对应的源数据的存储地址未超出该待生成GPU程序的源数据的存储地址范围,该线程可称为内部线程。
该判断该待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出该待生成GPU程序的源数据的存储地址范围的步骤对应的程序可如下所示:
S409、若该待生成GPU程序各线程对应的目标数据中各数据的存储地址均未超出该待生成GPU程序的目标数据的存储地址范围,且,该待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系、该CPU程序,生成GPU程序。
S410、若该待生成GPU程序各线程对应的部分目标数据的存储地址超出该待生成GPU程序的目标数据的存储地址范围,该待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序各线程对应的另一部分目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系、该CPU程序,生成该GPU程序。
S411、若该待生成GPU程序各线程对应的目标数据的存储地址均未超出该待生成GPU程序的目标数据的存储地址范围,而该待生成GPU程序各线程对应的部分源数据的存储地址超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序各线程对应的另一部分源数据与该待生成GPU程序的线程的对应关系、该CPU程序中的边界规则、该CPU程序生成该GPU程序。
其中,该边界规则包括:该部分源数据的计算规则。
以水平滤波程序为例,若该待生成GPU程序各线程对应的部分源数据的存储地址超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序各线程对应的部分源数据与该待生成GPU程序的线程的对应关系及预设的偏移计算公式,确定该待生成GPU程序各线程对应的部分源数据的存储地址的偏移。该预设的偏移计算公式可如下所示:
addr=m*step+n*sizeof(data_type);
m=gidy*a1+b1;
n=gidx*a2+b2;
其中,step为源数据所在矩阵中一行所占字节数;data_type为源数据所在矩阵中的数据类型;a1为相邻线程在外循环上处理的循环迭代次数;a2为相邻线程在内循环上处理的循环迭代次数;b1为线程在外循环所在维度上处理数据存储地址的偏移;b2为线程在内循环所在维度上处理数据存储地址的偏移。
根据上述水平滤波程序可知,a1=1;a2=N;b1=0;b2=0,因此,根据该待生成GPU程序各线程对应的部分源数据与该待生成GPU程序的线程的对应关系及预设的偏移计算公式,确定该待生成GPU程序各线程对应的部分源数据的存储地址的偏移的步骤对应的程序可如下所示:
addr=giddy*step+gidx*N
每个线程的任务粒度,也就是每个线程处理的循环迭代次数N,那么对于每个线程,取依次存取(iter_offset+N+iter_offset)个数据。即先存取iter_offset个数据;然后取N个数据,当N=4时,直接向量化读取;最后再取iter_offset个数据。iter_offset可以转化成1+2+4+…的形式,然后顺序依次读取这些数据。在该水平滤波程序的实例中,iter_offset=2。首次存取的iter_offset个数据中各数据可表示为pre_i(i=0,1,…,iter_offset);N个数据可表示为mid;最后存取的iter_offset个数可表示为last_i(i=0,1,…,iter_offset)。存取该待生成GPU程序各线程对应的部分源数据的步骤对应的程序可以如下所示:
1:d_type pre_0←(d_type)(*((__global src_type*)((__global char*)src+ad dr))));
2:src_addr+=sizeof(src_type);
3:d_type pre_1←(d_type)(*((__global src_type*)((__global char*)src+addr))));
4:…(共存取iter_offset个数据)
5:
6:src_addr+=sizeof(src_type)
7:d_typeN mid←(d_typeH)(*((__global typeN*)((__global char*)src+src_addr))));
8:
9:src_addr+=sizeof(src_type)*N
10:d_type last_0←(_type)(*((__global type*)((__global char*)src+src_ad dr))));
11:…(共取iter_offset个)
若该待生成GPU程序的线程对应的部分源数据的存储地址超出该待生成GPU程序的源数据的存储地址范围,还需确定该待生成GPU程序各线程对应的部分源数据的存储地址的超出方向,即确定该待生成GPU程序各线程对应的部分源数据的存储地址是超出数据左存储范围,还是数据右存储范围。
确定该待生成GPU程序的部分源数据的存储地址超出数据左存储范围的线程,可以采用如下公式进行:gidx<divUp(iter_offset/N)。其中,iter_offset为每层循环处理数据的最大偏移。以上述水平滤波程序为例,最大偏移出现在src[h][w-2],因此iter_offset=2。若线程索引小于gidx,该线程对应的部分源数据的存储地址超出数据左存储范围;若线程索引大于等于gidx,线程对应的源数据的存储地址未超出数据左存储范围。
确定该待生成GPU程序的部分源数据的存储地址超出数据右存储范围的线程,可以是采用如下公式进行:gidx>=divUp(width/N)–divUp(border/N),其中,borer=(width%N)=0?iter_offset:iter_offset+N-(width%N)。若线程索引大于等于gidx,线程对应的部分源数据的存储地址超出数据右存储范围;若该线程索引小于gidx,线程对应的源数据的存储地址未超出数据右存储范围。
若该待生成GPU程序的线程对应的部分源数据的存储地址超出数据左存储范围,则确定该待生成GPU程序的线程对应的部分源数据与该待生成GPU程序的线程对应的另一部分源数据的对应关系;根据该待生成GPU程序的线程的部分源数据和该CPU程序中的预设边界规则,重新确定得到该新的部分源数据。其中,首次读取的数据pre_i与该另一部分源数据的对应关系,可表示为pre_i->src[*][-iter_offset+gidx*N+i];其中,中间读取的数据mid和最后读取的数据last_i与与该另一部分源数据可依次与src[*][gidx*N]对应。根据该水平滤波程序中的边界规则,如BOERDER_RULE中的该部分源数据的计算规则,确定pre_i数据。
若width%N==0,确定越界数据的步骤对应的程序可如下所示:
1:△gidx=thread_num–idx;
2:data[iter_offset+N+iter_offset]={pre_i,mid,last_i};
3:for idx←1toup(iter_offset/N)+1do;
4:for i←0 to d2-(idx-1)*4do;
5:data[iter_offset+N+iter_offset–(iter_offset-(idx-1)*N)+i]←src[*][width+i];
6:endfor
7:endfor
其中,确定另一部分源数据与该GPU程序的另一部分源数据的对应关系,的步骤对应的程序可如下所示:
1:△gidx=thread_num–idx
2:data[iter_offset+N+iter_offset]={pre_i,mid,last_i}//iter_offset+N+iter_off set记为LEN;
3:for i←0 to LEN-(iter_offset-idx*N)do;
4:data[i]←src[*][N-(N*idx+iter_offset)+i];
5:endfor
d)根据越界规则进行计算
若width%N!=0,确定越界数据的步骤对应的程序可如下所示:
1:△gidx=thread_num–idx OFFSET=width%N;
2:data[iter_offset+N+iter_offset]={pre_i,mid,last_i};
4:if(width%4==1);
5:for i←0 to iter_offset do;
6:data[iter_offset+off_itery_num+i]←src[*][width+i];
7:endfor
8:else
9:for i←0 to(iter_offset+OFFSET)-(idx-1)*4do
10:data[iter_offset+4+iter_offset–((iter_offset+OFFSET)-(idx-1)*N)+i]←s rc[*][width+i];
11:endfor
12:endfor
其中,确定另一部分源数据与该GPU程序的另一部分源数据的对应关系,的步骤对应的程序可如下所示:
可替代地,以边界处理程序为例,若该部分源数据的存储地址超出该GPU的源数据的存储地址范围,根据该部分源数据与该GPU程序的线程的对应关系及预设的偏移计算公式,确定该部分源数据的存储地址的偏移。该预设的偏移计算公式可如下所示:
addr=m*step+n*sizeof(data_type);
m=gidy*a1+b1;
n=gidx*a2+b2;
其中,step为源数据所在矩阵中一行所占字节数;data_type为源数据所在矩阵中的数据类型;a1为相邻线程在外循环上处理的循环迭代次数;a2为相邻线程在内循环上处理的循环迭代次数;b1为线程在外循环所在维度上处理数据存储地址的偏移;b2为线程在内循环所在维度上处理数据存储地址的偏移。
根据上述边界处理程序可知,a1=1;a2=0b1=0;b2=0,因此,根据该部分源数据与该GPU程序的线程的对应关系及预设的偏移计算公式,确定该部分源数据的存储地址的偏移的步骤对应的程序可如下所示:
addr=giddy*step
对于由于该部分源数据的存储地址超出该GPU程序的源数据的存储地址范围,存取该部分源数据,即该部分源数据的步骤对应的程序可以如下所示:
1:lds[lidy)]=*(src+addr);
2:if(lidx(y)<=work_group_size_y)–number+1)
3:lds[lidy+number-1]=*(src+addr+(number-1)*step);
其中,number为每次循环迭代的源数据的个数。
对于该待生成GPU程序对应的数据本地化方式中包括共享存储器的场景,在执行该GPU程序时,可以将数据从片外存储资源上加载至该GPU的片上存储资源上,将数据读取到寄存器中,继而在该寄存器进行数据计算。
在寄存器中计算数据对应的程序可如下所示:
1:temp_1=LDS[lidy]
2:temp_2=LDS[lidy+1]
3://计算;
4://计算完成后统一写入。
生成该GPU程序例如可如下所示:
本发明实施例三提供的程序转换方法,通过分别通过不同的实例对上述实施例进行具体的实例说明,有益效果与上述实施例类似,在此不再赘述。
本发明实施例四还提供一种处理器。图5为本发明实施例四提供的一种处理器的结构示意图。如图5所述,该处理器500可包括确定模块501和生成模块502。
确定模块501用于根据CPU程序确定待生成GPU程序对应的数据本地化方式,该数据本地化方式包括:对该待生成GPU程序进行数据本地化采用的算法。
生成模块502,用于根据该CPU程序、GPU的存储资源属性和该待生成GPU程序对应的数据本地化方式生成GPU程序;该GPU的存储资源属性为根据该GPU的硬件存储资源确定的。
该处理器500例如可以为可以为中央处理器(Central Processing Unit,简称CPU)或其他通用处理器、数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
可选的,确定模块501,还用于根据该CPU程序的计算访存特征确定该待生成GPU程序对应的数据本地化方式;该计算访存特征包括:该CPU程序的循环迭代特征。
可选的,该GPU程序的循环迭代特征包括:
该CPU程序的不同循环迭代间是否通信、该CPU程序的不同循环迭代处理的数据是否共享和该CPU程序的片外访存是否连续。
可选的,若该CPU程序中一个循环迭代处理的数据为该CPU程序中另一个循环迭代处理后的数据,或者,该一个循环迭代处理后的数据为该另一个循环迭代处理的数据,则该CPU程序的不同循环迭代间存在通信;若该一个循环迭代处理的数据不为该另一个循环迭代处理后的数据,且,该一个循环迭代处理后的数据不为该另一个循环迭代处理的数据,则该CPU程序的不同循环迭代间不存在通信;
若该CPU程序的一个循环迭代处理的数据与该CPU程序中另一个循环迭代处理的数据有相同的数据,则该CPU程序的不同循环迭代处理的数据存在共享;若该一个循环迭代处理的数据与该另一个循环迭代处理的数据没有相同的数据,则该CPU程序的不同循环迭代处理的数据不存在共享;
若该CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址连续,则该CPU程序的片外访存连续;若该CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址不连续,则该CPU程序的片外访存不连续。
可选的,确定模块501,还用于根据该CPU程序的计算访存特征,和预设的计算访存特征与数据本地化方式的对应关系,确定该CPU程序的计算访存特征对应的数据本地化方式为该待生成GPU程序对应的数据本地化方式。
可选的,该数据本地化方式包括:该待生成GPU程序的处理数据的目标存储资源和该待生成GPU程序的处理数据的目标存储资源对应的数据本地化方式。
可选的,该待生成GPU程序的处理数据的目标存储资源包括:该GPU的片上存储资源;该GPU的存储资源属性包括:该GPU的片上存储资源对应的数据本地化方式;
确定模块501,还用于判断该目标存储资源对应的数据本地化方式,与,该GPU的片上存储资源对应的数据本地化方法是否相同;若相同,则确定该待生成GPU程序需要进行数据本地化;
生成模块502,还用于根据该CPU程序和该待生成GPU程序对应的数据本地化方式生成该GPU程序。
可选的,确定模块501,还用于根据该CPU程序和该待生成GPU程序对应的数据本地化方式确定该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系;根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系;其中,该待生成GPU程序的目标数据为该待生成GPU程序处理后的数据;该待生成GPU程序的源数据为该待生成GPU程序需处理的数据。
生成模块502,还用于根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系和该CPU程序,生成该GPU程序。
可选的,处理器500,还包括:
判断模块,用于判断该待生成GPU程序各线程对应的目标数据中各数据的存储地址是否超出待生成GPU程序的目标数据的存储地址范围;判断待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出待生成GPU程序的源数据的存储地址范围。
生成模块502,还用于若该待生成GPU程序的各线程对应的目标数据中各数据的存储地址均未超出该待生成GPU程序的目标数据的存储地址范围,且,所述待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出所述待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系,和,该CPU程序,生成该GPU程序。
可选的,确定模块501,还用于根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系确定该待生成GPU程序各线程对应的目标数据中各数据的存储地址;根据该待生成GPU程序各线程对应的目标数据中各数据的存储地址,和,该待生成GPU程序的最大位置偏移,确定该待生成GPU程序的目标数据的存储地址范围;根据该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系确定该待生成GPU程序各线程对应的源数据中各数据的存储地址;根据该待生成GPU程序的源数据中各数据的存储地址和该待生成GPU程序的最大位置偏移,确定该待生成GPU程序的源数据的存储地址范围。
可选的,生成模块502,还用于若该待生成GPU程序各线程对应的部分目标数据的存储地址超出该待生成GPU程序的目标数据的存储地址范围,该待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序的另一部分目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系,和,该CPU程序,生成该GPU程序。
可选的,生成模块502,还用于若该待生成GPU程序各线程对应的目标数据的存储地址均未超出该待生成GPU程序的目标数据的存储地址范围,而该待生成GPU程序各线程对应的部分源数据的存储地址超出该待生成GPU程序的源数据的存储地址范围,根据该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系、该待生成GPU程序的另一部分源数据与该待生成GPU程序的线程的对应关系、该CPU程序中的边界规则、该CPU程序生成该GPU程序;其中,该边界规则包括:该部分源数据的计算规则。
可选的,该目标存储资源包括:寄存器;该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系包括:该待生成GPU程序的每个线程的目标数据与所述每个线程的对应关系;该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系包括:该每个线程的源数据与该每个线程的对应关系。
可选的,确定模块501,还用于确定该每个线程的任务粒度、该待生成GPU程序的线程组织确定该每个线程的目标数据与该每个线程的对应关系;根据该每个线程的数据本地化粒度、该每个线程的目标数据与该每个线程的源数据的对应关系,和,该每次访问数据的位置偏移,确定该每个线程的源数据与该每个线程的对应关系;
其中,该每个线程的任务粒度包括:该每个线程处理的循环迭代次数;该待生成GPU程序的线程组织包括:该待生成GPU程序中处理每层循环的所需开启的线程数量;该每个线程的数据本地化粒度包括:该每个线程需处理的数据个数。
可选的,该目标存储资源包括:共享存储器;该待生成GPU程序的目标数据与该待生成GPU程序的线程的对应关系包括:该待生成GPU程序的每个工作组的目标数据与该每个工作组的对应关系;该待生成GPU程序的源数据与该待生成GPU程序的线程的对应关系包括:该每个工作组的源数据与该每个工作组的对应关系,和,该每个工作组中每个线程的源数据与该每个线程的对应关系。
可选的,确定模块501,还用于根据该线程的任务粒度、该待生成GPU的线程组织确定该每个工作组的目标数据与该每个工作组的对应关系;根据该每个工作组的目标数据与该每个工作组的对应关系、该每个工作组的数据本地化粒度,和,该每次访问数据的位置偏移,确定该每个工作组的源数据与该每个工作组的对应关系;根据该每个工作组的源数据与该每个工作组的对应关系、该每个线程的数据本地化粒度和该每次访问数据的位置偏移,确定该每个线程的源数据与该每个线程的对应关系;该每个线程的数据本地化粒度包括:该每个线程需处理的数据个数;
其中,该每个线程的任务粒度包括:该每个线程处理的循环迭代次数;该待生成GPU程序的线程组织包括:该待生成GPU程序中处理每层循环需开启的线程数量;该每个工作组的数据本地化粒度包括:该每个工作组需处理的数据个数。
本发明实施例四提供的处理器,可用于执行上述实施例一至三中任一实施例所述的程序转换方法,有益效果与上述实施例类似,在此不再赘述。
本发明实施例五还提供一种计算机系统。图6为本发明实施例五提供的一种计算机系统的结构示意图。如图6所示,计算机系统600包括输入输出(Input Output,简称IO)设备601、CPU 602、GPU 603和存储器604;IO设备601、CPU 602、GPU 603和存储器604通过通信总线605连接。
存储器604包括:GPU 603的片外存储资源606和GPU 603的片上存储资源607。
IO设备601,用于获取CPU程序。
CPU 602,用于通过执行上述实施例所述的程序转换方法,将CPU程序转换为GPU程序。
GPU 603,用于根据该GPU程序进行处理,从而将该GPU程序的处理数据从该GPU的片外存储资源606存储至该GPU的片上存储资源607。
本发明实施例五提供的计算机中系统中CPU可用于执行上述实施例一至三中任一实施例所述的程序转换方法,有益效果与上述实施例类似,在此不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (29)
1.一种程序转换方法,其特征在于,包括:
根据中央处理器CPU程序确定待生成图像处理器GPU程序对应的数据本地化方式,所述数据本地化方式包括:对所述待生成GPU程序进行数据本地化采用的算法;
根据所述CPU程序、GPU的存储资源属性和所述待生成GPU程序对应的数据本地化方式生成GPU程序;所述GPU的存储资源属性为根据所述GPU的硬件存储资源确定的;
其中,所述数据本地化方式包括:所述待生成GPU程序的处理数据的目标存储资源和所述待生成GPU程序的处理数据的目标存储资源对应的数据本地化方式;
所述待生成GPU程序的处理数据的目标存储资源包括:所述GPU的片上存储资源;所述GPU的存储资源属性包括:所述GPU的片上存储资源对应的数据本地化方式;
所述根据所述CPU程序、GPU的存储资源属性和所述待生成GPU程序对应的数据本地化方式生成GPU程序,包括:
判断所述目标存储资源对应的数据本地化方式,与,所述GPU的片上存储资源对应的数据本地化方式是否相同;
若相同,则确定所述待生成GPU程序需要进行数据本地化;
根据所述CPU程序和所述待生成GPU程序对应的数据本地化方式生成所述GPU程序。
2.根据权利要求1所述的方法,其特征在于,所述根据CPU程序确定待生成GPU程序对应的数据本地化方式,包括:
根据所述CPU程序的计算访存特征确定所述待生成GPU程序对应的数据本地化方式;所述计算访存特征包括:所述CPU程序的循环迭代特征。
3.根据权利要求2所述的方法,其特征在于,所述CPU程序的循环迭代特征包括:
所述CPU程序的不同循环迭代间是否通信、所述CPU程序的不同循环迭代处理的数据是否共享和所述CPU程序的片外访存是否连续。
4.根据权利要求3所述的方法,其特征在于,
若所述CPU程序中一个循环迭代处理的数据为所述CPU程序中另一个循环迭代处理后的数据,或者,所述一个循环迭代处理后的数据为所述另一个循环迭代处理的数据,则所述CPU程序的不同循环迭代间存在通信;若所述一个循环迭代处理的数据不为所述另一个循环迭代处理后的数据,且,所述一个循环迭代处理后的数据不为所述另一个循环迭代处理的数据,则所述CPU程序的不同循环迭代间不存在通信;
若所述CPU程序的一个循环迭代处理的数据与所述CPU程序中另一个循环迭代处理的数据有相同的数据,则所述CPU程序的不同循环迭代处理的数据存在共享;若所述一个循环迭代处理的数据与所述另一个循环迭代处理的数据没有相同的数据,则所述CPU程序的不同循环迭代处理的数据不存在共享;
若所述CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址连续,则所述CPU程序的片外访存连续;若所述CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址不连续,则所述CPU程序的片外访存不连续。
5.根据权利要求2-4中任一项所述的方法,其特征在于,所述根据所述CPU程序的计算访存特征确定所述待生成GPU程序对应的数据本地化方式,包括:
根据所述CPU程序的计算访存特征,和预设的计算访存特征与数据本地化方式的对应关系,确定所述CPU程序的计算访存特征对应的数据本地化方式为所述待生成GPU程序对应的数据本地化方式。
6.根据权利要求2-4中任一项所述的方法,其特征在于,所述根据所述CPU程序和所述待生成GPU程序对应的数据本地化方式生成所述GPU程序,包括:
根据所述CPU程序和所述待生成GPU程序对应的数据本地化方式确定所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系;其中,所述待生成GPU程序的目标数据为所述待生成GPU程序处理后的数据;
根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系;其中,所述待生成GPU程序的源数据为所述待生成GPU程序需处理的数据;
根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系和所述CPU程序,生成所述GPU程序。
7.根据权利要求6所述的方法,其特征在于,所述根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系,生成所述GPU程序之前,所述方法还包括:
判断所述待生成GPU程序各线程对应的目标数据中各数据的存储地址是否超出所述待生成GPU程序的目标数据的存储地址范围;
判断所述待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出所述待生成GPU程序的源数据的存储地址范围;
若所述待生成GPU程序的各线程对应的目标数据中各数据的存储地址均未超出所述待生成GPU程序的目标数据的存储地址范围,且,所述待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出所述待生成GPU程序的源数据的存储地址范围,根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系,和,所述CPU程序,生成所述GPU程序。
8.根据权利要求7所述的方法,其特征在于,所述判断所述待生成GPU程序各线程对应的目标数据各数据的存储地址是否超出所述待生成GPU程序的目标数据的存储地址范围之前,所述方法还包括;
根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系确定所述待生成GPU程序各线程对应的目标数据中各数据的存储地址;
根据所述待生成GPU程序各线程对应的目标数据中各数据的存储地址,和,所述待生成GPU程序的最大位置偏移,确定所述待生成GPU程序的目标数据的存储地址范围;
所述判断所述待生成GPU程序的各线程对应的源数据中各数据的存储地址是否超出所述待生成GPU程序的源数据的存储地址范围之前,所述方法还包括:
根据所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系确定所述待生成GPU程序各线程对应的源数据中各数据的存储地址;
根据所述待生成GPU程序的源数据中各数据的存储地址和所述待生成GPU程序的最大位置偏移,确定所述待生成GPU程序的源数据的存储地址范围。
9.根据权利要求7或8所述的方法,其特征在于,所述方法还包括:
若所述待生成GPU程序各线程对应的部分目标数据的存储地址超出所述待生成GPU程序的目标数据的存储地址范围,所述待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出所述待生成GPU程序的源数据的存储地址范围,根据所述待生成GPU程序的另一部分目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系,和,所述CPU程序,生成所述GPU程序。
10.根据权利要求7或8所述的方法,其特征在于,所述方法还包括:
若所述待生成GPU程序各线程对应的目标数据的存储地址均未超出所述待生成GPU程序的目标数据的存储地址范围,而所述待生成GPU程序各线程对应的部分源数据的存储地址超出所述待生成GPU程序的源数据的存储地址范围,根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的另一部分源数据与所述待生成GPU程序的线程的对应关系、所述CPU程序中的边界规则、所述CPU程序生成所述GPU程序;其中,所述边界规则包括:所述部分源数据的计算规则。
11.根据权利要求6所述的方法,其特征在于,所述目标存储资源包括:寄存器;所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系包括:所述待生成GPU程序的每个线程的目标数据与所述每个线程的对应关系;所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系包括:所述每个线程的源数据与所述每个线程的对应关系。
12.根据权利要求11所述的方法,其特征在于,所述根据所述CPU程序和所述待生成GPU程序对应的数据本地化方式确定所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系包括:
确定所述每个线程的任务粒度、所述待生成GPU程序的线程组织确定所述每个线程的目标数据与所述每个线程的对应关系;其中,所述每个线程的任务粒度包括:所述每个线程处理的循环迭代次数;所述待生成GPU程序的线程组织包括:所述待生成GPU程序中处理每层循环的所需开启的线程数量;
所述根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系,包括:
根据所述每个线程的数据本地化粒度、所述每个线程的目标数据与所述每个线程的源数据的对应关系,和,所述每次访问数据的位置偏移,确定所述每个线程的源数据与所述每个线程的对应关系;所述每个线程的数据本地化粒度包括:所述每个线程需处理的数据个数。
13.根据权利要求6所述的方法,其特征在于,所述目标存储资源包括:共享存储器;所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系包括:所述待生成GPU程序的每个工作组的目标数据与所述每个工作组的对应关系;所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系包括:所述每个工作组的源数据与所述每个工作组的对应关系,和,所述每个工作组中每个线程的源数据与所述每个线程的对应关系。
14.根据权利要求13所述的方法,其特征在于,所述根据所述CPU程序和所述待生成GPU程序对应的数据本地化方式确定所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系包括:
根据所述线程的任务粒度、所述待生成GPU的线程组织确定所述每个工作组的目标数据与所述每个工作组的对应关系;其中,所述每个线程的任务粒度包括:所述每个线程处理的循环迭代次数;所述待生成GPU程序的线程组织包括:所述待生成GPU程序中处理每层循环需开启的线程数量;
所述根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系,包括:
根据所述每个工作组的目标数据与所述每个工作组的对应关系、所述每个工作组的数据本地化粒度和,所述每次访问数据的位置偏移,确定所述每个工作组的源数据与所述每个工作组的对应关系;所述每个工作组的数据本地化粒度包括:所述每个工作组需处理的数据个数;
根据所述每个工作组的源数据与所述每个工作组的对应关系、所述每个线程的数据本地化粒度和,所述每次访问数据的位置偏移,确定所述每个线程的源数据与所述每个线程的对应关系;所述每个线程的数据本地化粒度包括:所述每个线程需处理的数据个数。
15.一种处理器,其特征在于,包括:
确定模块,用于根据中央处理器CPU程序确定待生成图像处理器GPU程序对应的数据本地化方式,所述数据本地化方式包括:对所述待生成GPU程序进行数据本地化采用的算法;
生成模块,用于根据所述CPU程序、GPU的存储资源属性和所述待生成GPU程序对应的数据本地化方式生成GPU程序;所述GPU的存储资源属性为根据所述GPU的硬件存储资源确定的;
其中,所述数据本地化方式包括:所述待生成GPU程序的处理数据的目标存储资源和所述待生成GPU程序的处理数据的目标存储资源对应的数据本地化方式;
所述待生成GPU程序的处理数据的目标存储资源包括:所述GPU的片上存储资源;所述GPU的存储资源属性包括:所述GPU的片上存储资源对应的数据本地化方式;
所述确定模块,还用于判断所述目标存储资源对应的数据本地化方式,与,所述GPU的片上存储资源对应的数据本地化方法是否相同;若相同,则确定所述待生成GPU程序需要进行数据本地化;
所述生成模块,还用于根据所述CPU程序和所述待生成GPU程序对应的数据本地化方式生成所述GPU程序。
16.根据权利要求15所述的处理器,其特征在于,
所述确定模块,还用于根据所述CPU程序的计算访存特征确定所述待生成GPU程序对应的数据本地化方式;所述计算访存特征包括:所述CPU程序的循环迭代特征。
17.根据权利要求16所述的处理器,其特征在于,所述CPU程序的循环迭代特征包括:
所述CPU程序的不同循环迭代间是否通信、所述CPU程序的不同循环迭代处理的数据是否共享和所述CPU程序的片外访存是否连续。
18.根据权利要求17所述的处理器,其特征在于,
若所述CPU程序中一个循环迭代处理的数据为所述CPU程序中另一个循环迭代处理后的数据,或者,所述一个循环迭代处理后的数据为所述另一个循环迭代处理的数据,则所述CPU程序的不同循环迭代间存在通信;若所述一个循环迭代处理的数据不为所述另一个循环迭代处理后的数据,且,所述一个循环迭代处理后的数据不为所述另一个循环迭代处理的数据,则所述CPU程序的不同循环迭代间不存在通信;
若所述CPU程序的一个循环迭代处理的数据与所述CPU程序中另一个循环迭代处理的数据有相同的数据,则所述CPU程序的不同循环迭代处理的数据存在共享;若所述一个循环迭代处理的数据与所述另一个循环迭代处理的数据没有相同的数据,则所述CPU程序的不同循环迭代处理的数据不存在共享;
若所述CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址连续,则所述CPU程序的片外访存连续;若所述CPU程序中不同循环迭代处理数据对应的片外存储资源上的存储地址不连续,则所述CPU程序的片外访存不连续。
19.根据权利要求16-18中任一项所述的处理器,其特征在于,
所述确定模块,还用于根据所述CPU程序的计算访存特征,和预设的计算访存特征与数据本地化方式的对应关系,确定所述CPU程序的计算访存特征对应的数据本地化方式为所述待生成GPU程序对应的数据本地化方式。
20.根据权利要求16-18中任一项所述的处理器,其特征在于,
所述确定模块,还用于根据所述CPU程序和所述待生成GPU程序对应的数据本地化方式确定所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系;根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系,和,预设的每次访问数据的位置偏移,确定所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系;
其中,所述待生成GPU程序的目标数据为所述待生成GPU程序处理后的数据;所述待生成GPU程序的源数据为所述待生成GPU程序需处理的数据;
所述生成模块,还用于根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系,和,所述CPU程序,生成所述GPU程序。
21.根据权利要求20所述的处理器,其特征在于,
所述处理器,还包括:
判断模块,用于判断所述待生成GPU程序各线程对应的目标数据中各数据的存储地址是否超出所述待生成GPU程序的目标数据的存储地址范围;判断所述待生成GPU程序各线程对应的源数据中各数据的存储地址是否超出所述待生成GPU程序的源数据的存储地址范围;
所述生成模块,还用于若所述待生成GPU程序的各线程对应的目标数据中各数据的存储地址均未超出所述待生成GPU程序的目标数据的存储地址范围,且,所述待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出所述待生成GPU程序的源数据的存储地址范围,根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系,和,所述CPU程序,生成所述GPU程序。
22.根据权利要求21所述的处理器,其特征在于,
所述确定模块,还用于根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系确定所述待生成GPU程序各线程对应的目标数据中各数据的存储地址;根据所述待生成GPU程序各线程对应的目标数据中各数据的存储地址,和,所述待生成GPU程序的最大位置偏移,确定所述待生成GPU程序的目标数据的存储地址范围;根据所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系确定所述待生成GPU程序各线程对应的源数据中各数据的存储地址;根据所述待生成GPU程序的源数据中各数据的存储地址和所述待生成GPU程序的最大位置偏移,确定所述待生成GPU程序的源数据的存储地址范围。
23.根据权利要求21或22所述的处理器,其特征在于,
所述生成模块,还用于若所述待生成GPU程序各线程对应的部分目标数据的存储地址超出所述待生成GPU程序的目标数据的存储地址范围,所述待生成GPU程序各线程对应的源数据中各数据的存储地址均未超出所述待生成GPU程序的源数据的存储地址范围,根据所述待生成GPU程序的另一部分目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系、所述CPU程序,生成所述GPU程序。
24.根据权利要求21或22所述的处理器,其特征在于,
所述生成模块,还用于若所述待生成GPU程序各线程对应的目标数据的存储地址均未超出所述待生成GPU程序的目标数据的存储地址范围,而所述待生成GPU程序各线程对应的部分源数据的存储地址超出所述待生成GPU程序的源数据的存储地址范围,根据所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系、所述待生成GPU程序的另一部分源数据与所述待生成GPU程序的线程的对应关系、所述CPU程序中的边界规则、所述CPU程序生成所述GPU程序;其中,所述边界规则包括:所述部分源数据的计算规则。
25.根据权利要求20所述的处理器,其特征在于,所述目标存储资源包括:寄存器;所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系包括:所述待生成GPU程序的每个线程的目标数据与所述每个线程的对应关系;所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系包括:所述每个线程的源数据与所述每个线程的对应关系。
26.根据权利要求25所述的处理器,其特征在于,
所述确定模块,还用于确定所述每个线程的任务粒度、所述待生成GPU程序的线程组织确定所述每个线程的目标数据与所述每个线程的对应关系;根据所述每个线程的数据本地化粒度、所述每个线程的目标数据与所述每个线程的源数据的对应关系,和,所述每次访问数据的位置偏移,确定所述每个线程的源数据与所述每个线程的对应关系;
其中,所述每个线程的任务粒度包括:所述每个线程处理的循环迭代次数;所述待生成GPU程序的线程组织包括:所述待生成GPU程序中处理每层循环的所需开启的线程数量;所述每个线程的数据本地化粒度包括:所述每个线程需处理的数据个数。
27.根据权利要求20所述的处理器,其特征在于,所述目标存储资源包括:共享存储器;所述待生成GPU程序的目标数据与所述待生成GPU程序的线程的对应关系包括:所述待生成GPU程序的每个工作组的目标数据与所述每个工作组的对应关系;所述待生成GPU程序的源数据与所述待生成GPU程序的线程的对应关系包括:所述每个工作组的源数据与所述每个工作组的对应关系,和,所述每个工作组中每个线程的源数据与所述每个线程的对应关系。
28.根据权利要求27所述的处理器,其特征在于,
所述确定模块,还用于根据所述线程的任务粒度、所述待生成GPU的线程组织确定所述每个工作组的目标数据与所述每个工作组的对应关系;根据所述每个工作组的目标数据与所述每个工作组的对应关系、所述每个工作组的数据本地化粒度和,所述每次访问数据的位置偏移,确定所述每个工作组的源数据与所述每个工作组的对应关系;根据所述每个工作组的源数据与所述每个工作组的对应关系、所述每个线程的数据本地化粒度和所述每次访问数据的位置偏移,确定所述每个线程的源数据与所述每个线程的对应关系;所述每个线程的数据本地化粒度包括:所述每个线程需处理的数据个数;
其中,所述每个线程的任务粒度包括:所述每个线程处理的循环迭代次数;所述待生成GPU程序的线程组织包括:所述待生成GPU程序中处理每层循环需开启的线程数量;所述每个工作组的数据本地化粒度包括:所述每个工作组需处理的数据个数。
29.一种计算机系统,其特征在于,包括:输入输出IO设备、中央处理器CPU、图像处理器GPU和存储器;所述IO设备、所述CPU、所述GPU和所述存储器通过通信总线连接;所述存储器包括:所述GPU的片外存储资源和所述GPU的片上存储资源;
所述IO设备,用于获取CPU程序;
所述CPU,用于通过执行上述权利要求1-14中任一项所述的程序转换方法,将所述CPU程序转换为GPU程序;
所述GPU,用于根据所述GPU程序进行处理,从而将所述GPU程序的处理数据从所述GPU的片外存储资源存储至所述GPU的片上存储资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511033563.1A CN105677436B (zh) | 2015-12-31 | 2015-12-31 | 程序转换方法、处理器及计算机系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201511033563.1A CN105677436B (zh) | 2015-12-31 | 2015-12-31 | 程序转换方法、处理器及计算机系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105677436A CN105677436A (zh) | 2016-06-15 |
CN105677436B true CN105677436B (zh) | 2019-04-05 |
Family
ID=56298643
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201511033563.1A Active CN105677436B (zh) | 2015-12-31 | 2015-12-31 | 程序转换方法、处理器及计算机系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105677436B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107817969B (zh) * | 2016-08-31 | 2020-10-16 | 华为技术有限公司 | 一种程序生成方法、装置及计算机系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101963918A (zh) * | 2010-10-26 | 2011-02-02 | 上海交通大学 | 实现cpu/gpu异构平台的虚拟执行环境的方法 |
CN102214086A (zh) * | 2011-06-20 | 2011-10-12 | 复旦大学 | 基于多核处理器的通用并行加速算法 |
-
2015
- 2015-12-31 CN CN201511033563.1A patent/CN105677436B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101963918A (zh) * | 2010-10-26 | 2011-02-02 | 上海交通大学 | 实现cpu/gpu异构平台的虚拟执行环境的方法 |
CN102214086A (zh) * | 2011-06-20 | 2011-10-12 | 复旦大学 | 基于多核处理器的通用并行加速算法 |
Non-Patent Citations (1)
Title |
---|
基于OpenCL的图像积分图算法优化研究;贾海鹏等;《计算机科学》;20130215;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN105677436A (zh) | 2016-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104346285B (zh) | 内存访问处理方法、装置及系统 | |
Liang et al. | High‐Level Synthesis: Productivity, Performance, and Software Constraints | |
CN104040488B (zh) | 用于给出相应复数的复共轭的矢量指令 | |
CN104040487B (zh) | 用于合并掩码模式的指令 | |
CN103927270B (zh) | 一种面向多个粗粒度动态可重构阵列的共享数据缓存装置及控制方法 | |
CN104094182B (zh) | 掩码置换指令的装置和方法 | |
CN102184365B (zh) | 基于SoC芯片外部数据安全存储系统及存取控制方法 | |
CN104137053B (zh) | 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法 | |
CN107766079A (zh) | 处理器以及用于在处理器上执行指令的方法 | |
CN104937568B (zh) | 用于多页尺寸转换后备缓冲器(tlb)的装置和方法 | |
CN101799762A (zh) | 面向遥感图像处理算法的快速并行化编程模板方法 | |
CN104375805A (zh) | 采用多核处理器仿真可重构处理器并行计算过程的方法 | |
CN110109859A (zh) | 可编程平台上的加速器架构 | |
CN104025025B (zh) | 用于对打包数据元素执行增量编码的系统、装置和方法 | |
CN105677436B (zh) | 程序转换方法、处理器及计算机系统 | |
Schreiber et al. | Free-surface lattice-Boltzmann simulation on many-core architectures | |
CN106484532B (zh) | 面向sph流体模拟的gpgpu并行计算方法 | |
CN202102449U (zh) | 基于SoC芯片外部程序安全访问架构 | |
Shang et al. | LACS: A high-computational-efficiency accelerator for CNNs | |
US20170364809A1 (en) | Parallelization techniques for variable selection and predictive models generation and its applications | |
CN202102448U (zh) | 基于SoC芯片外部数据安全存储架构 | |
CN103942035B (zh) | 处理指令的方法、编译器及指令处理器 | |
Alonso et al. | Dynamic memory management for embedded systems | |
CN104011659B (zh) | 用于确定值是否在范围内的指令的装置和方法 | |
CN109416635A (zh) | 针对使用多个架构寄存器的指令的架构寄存器替换 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |