logo好方法网

用于生成CUDA程序的设备、方法和存储介质


技术摘要:
本公开涉及一种用于生成CUDA程序的设备、方法和存储介质,其中,所述设备包括:存储访问库,包括多个存储访问模板,所述存储访问模板包括用于实现数据访问的代码模块;函数调用库,包括多个函数调用模板,所述函数调用模板包括核函数的调用配置;运算模块,包括多个封  全部
背景技术:
统一计算设备架构(Compute  Unified  Device  Architecture,CUDA)程序是一种 通用并行计算架构的程序,可以应用于计算机视觉任务中。随着计算机视觉技术的兴起, CUDA程序的开发有着广泛的需求。近年来,大量研究致力于对CUDA中程序的优化,使CUDA程 序的性能得到提高。 然而,计算机视觉技术领域面临着巨量的CUDA程序开发任务,如何提高CUDA程序 的生成效率是当前面临的一个紧迫需要解决的问题。
技术实现要素:
本公开提出了一种生成CUDA程序的方案。 根据本公开的一方面,提供了一种用于生成CUDA程序的设备,包括: 存储访问库,包括多个存储访问模板,所述存储访问模板包括用于实现数据访问 的代码模块; 函数调用库,包括多个函数调用模板,所述函数调用模板包括核函数的调用配置; 运算模块,包括多个封装运算单元,所述封装运算单元用于实现特定的运算功能; 其中,所述CUDA程序是基于对所述存储访问模板、所述函数调用模板以及所述封 装运算单元的调用生成的。 在一个或多个可选实施例中,每个所述存储访问模板包括适用于特定运算类型 和/或特定数据类型情况下的数据访问的代码模块。 在一个或多个可选实施例中,所述代码模块包括用于调用所述封装运算单元的计 算参数。 在一个或多个可选实施例中,所述数据访问包括以下至少一种: 从全局存储器中访问所述封装运算单元的输入数据,以自动变量的方式将所述封 装运算单元的中间数据存储在寄存器中,将所述封装运算单元的输出数据存储在全局存储 器中;或者, 从全局存储器中访问所述封装运算单元的输入数据,以数组的方式将所述封装运 算单元的中间数据存储在共享存储器中;将所述封装运算单元的输出数据存储在全局存储 器中。 在一个或多个可选实施例中,所述多个存储访问模板包括第一存储访问模板,所 述第一存储访问模板用于实现第一预设访问模式,在所述第一预设访问模式下,线程对运 算类型为第一运算类型和/或数据类型为第一数据类型的数据读写性能达到特定条件。 在一个或多个可选实施例中,所述运算类型包括以下至少一种:向量运算、卷积运 4 CN 111552478 A 说 明 书 2/13 页 算、矩阵运算。 在一个或多个可选实施例中,所述核函数的调用配置包括下列中的至少一种:线 程块的尺寸、线程流配置、动态共享存储配置和线程网格的尺寸。 在一个或多个可选实施例中,所述线程块包括多个线程,每个线程用于执行所述 封装运算单元的一次运算。 在一个或多个可选实施例中,所述多个函数调用模板包括第一函数调用模板,所 述第一函数调用模板用于实现第一预设调用模式,在所述第一预设调用模式下,线程对数 据维度为第一数据维度和/或数据类型为第一数据类型的数据执行所述封装运算单元的一 次运算。 根据本公开的一方面,提供了一种生成CUDA程序的方法,包括:获取CUDA程序的源 代码,其中,所述CUDA程序的源代码是基于对第一存储访问模板、第一函数调用模板以及至 少一个封装运算单元的调用生成的;对所述CUDA程序的源代码进行编译处理,得到可执行 文件。 在一个或多个可选实施例中,所述第一存储访问模板包括适用于第一运算类型 和/或第一数据类型情况下的数据访问的代码模块。 在一个或多个可选实施例中,所述第一存储访问模板用于实现第一预设访问模 式,在所述第一预设访问模式下,线程对第一运算类型和/或第一数据类型的数据读写性能 达到特定条件。 在一个或多个可选实施例中,所述第一存储访问模板的代码模块用于调用所述至 少一个封装运算单元的第一计算参数。 在一个或多个可选实施例中,所述数据访问包括以下至少一种: 从全局存储器中访问所述封装运算单元的输入数据,以自动变量的方式将所述封 装运算单元的中间数据存储在寄存器中,将所述封装运算单元的输出数据存储在全局存储 器中;或者, 从全局存储器中访问所述封装运算单元的输入数据,以数组的方式将所述封装运 算单元的中间数据存储在共享存储器中;将所述封装运算单元的输出数据存储在全局存储 器中。 在一个或多个可选实施例中,其特征在于,所述第一运算类型包括以下任意一种: 向量运算、卷积运算、矩阵运算。 在一个或多个可选实施例中,所述第一函数调用模板包括第一核函数的调用配 置。 在一个或多个可选实施例中,所述第一核函数的调用配置包括下列中的至少一 种:第一线程网格尺寸、第一线程块的尺寸、第一线程流配置和第一动态共享存储配置。 在一个或多个可选实施例中,所述第一函数调用模板用于实现第一预设调用模 式,在所述第一预设调用模式下,线程对第一数据维度和/或第一数据类型的数据执行所述 封装运算单元的一次运算。 根据本公开的另一方面,提供了一种电子设备,包括:处理器;用于存储处理器可 执行指令的存储器;其中,所述处理器被配置为:执行上述程序优化方法。 根据本公开的另一方面,提供了一种计算机可读存储介质,其上存储有计算机程 5 CN 111552478 A 说 明 书 3/13 页 序指令,所述计算机程序指令被处理器执行时实现上述程序优化方法。 在本公开实施例中,可以用于生成CUDA程序的设备,包括:存储访问库,包括多个 存储访问模板,存储访问模板包括用于实现数据访问的代码模块;函数调用库,包括多个函 数调用模板,函数调用模板包括核函数的调用配置;运算模块,包括多个封装运算单元,封 装运算单元用于实现特定的运算功能。其中,CUDA程序是基于对存储访问模板、函数调用模 板以及封装运算单元的调用生成的。这样,用于生成CUDA程序的设备可以为CUDA程序提供 多个部分的源代码,通过调用设备提供的存储访问模板、函数调用模板以及封装运算单元, 可以快速地生成CUDA程序,从而提高CUDA程序设计的灵活性,提高CUDA程序的生成效率。 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非 限制本公开。 根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得 清楚。 附图说明 此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公 开的实施例,并与说明书一起用于说明本公开的技术方案。 图1示出根据本公开实施例的用于生成CUDA程序的设备的框图。 图2示出根据本公开实施例的生成CUDA程序的方法流程图。 图3示出根据本公开实施例的用于生成CUDA程序的设备中各个部分之间通信的框 图。 图4示出根据本公开实施例的生成CUDA程序装置的框图。 图5示出根据本公开实施例的电子设备示例的框图。
分享到:
收藏