一种OpenCL内核提交的方法及装置制造方法及图纸

技术编号:27531605 阅读:13 留言:0更新日期:2021-03-03 11:10
本发明专利技术公开了一种OpenCL内核提交的方法,步骤如下:1、将内核信息传递给OpenCL的内核;2、工作项维度从一维转二维;3、检查OpenCL内核是否使用了局部内存,若使用了则申请空间保存;4、检查局部工作组的大小;5、将包含OpenCL内核信息的命令缓冲提交到硬件设备。本发明专利技术还公开了一种OpenCL内核提交的装置,包括:内核信息创建提交模块;工作项维度转换模块;局部内存变量模块;局部工作组模块;OpenCL工作线程模块。本发明专利技术在保证满足OpenCL标准框架的前提下,给硬件合理的分配工作任务,将OpenCL内核提交到硬件进行执行,提高并行运算的效率,可以广泛应用于高性能并行计算领域。可以广泛应用于高性能并行计算领域。可以广泛应用于高性能并行计算领域。

【技术实现步骤摘要】
一种OpenCL内核提交的方法及装置


[0001]本专利技术涉及计算机高性能并行计算领域,特别是涉及一种OpenCL内核提交的方法及装置。

技术介绍

[0002]近年来,高性能并行计算技术快速发展,OpenCL作为并行计算的通用标准被各大芯片厂商广泛采用。
[0003]OpenCL是为了解决不同架构的硬件间的并行计算问题而产生的,OpenCL标准能够让开发人员专注于算法的设计和优化,而不需要关注各个平台的编程语言以及底层硬件的细节等问题,极大的提高了开发效率。
[0004]OpenCL内核通俗来讲就是在硬件中执行的一个函数,计算设备中的每个计算单元都会执行相同的函数,但是使用的数据却不同,从而达到并行运算高效处理大量数据的目的。OpenCL标准只规定了通用的编程框架,具体的计算方法仍需要各大厂商自行设计。

技术实现思路

[0005]本专利技术的目的是为了克服上述
技术介绍
的不足,提供一种OpenCL内核提交的方法及装置,使其在保证满足OpenCL标准框架的前提下,给硬件合理的分配工作任务,将OpenCL内核提交到硬件进行执行,提高并行运算的效率。
[0006]本专利技术提供的一种OpenCL内核提交的方法,包括如下步骤:S1、在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;S2、检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;S3、检查OpenCL内核是否使用了局部内存,若使用了该类型的变量,则在特定存储区域申请相应大小的空间保存该变量;S4、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组项数;S5、启动OpenCL的工作线程,将包含OpenCL内核信息的命令缓冲提交到硬件设备。
[0007]在上述技术方案中,所述步骤S2包括如下子步骤:S21、判断工作项维度的大小和全局工作项数量的值,若同时满足维度为1且全局工作项数量的值大于最大全局工作项数量这两个条件,则执行子步骤S22,若不满足条件,则跳转执行步骤S3;S22、首先取一个值base作为一个基数,用来将工作项的维度由1维变为2维,若在步骤S1中传递的参数中设置了局部工作组项数的值,则将其值作为base的初始值,否则令base为一个合适的初始常数值,这个值取决于设备所能支持的最大并行工作项数量和工作组数量;S23、用全局工作项数量的值除以base,设得到的商为result,得到的余数为mod;S24、判断result的大小,若小于或等于最大全局工作项数量,则继续判断mod的值,若不为0,则转化后的2维工作项大小为GlobalWorkSize[result+1,base];若为0,则转化后的2维工作项大小GlobalWorkSize[result,base];若result的值大于MaxGlobalWorkSize,则将base变为原来的2倍并跳转到子步骤S23;S25、检查OpenCL内核中是否设置了参数全局偏移量的值,若设置了全局偏移量
的值且不为0,则将全局偏移量的值去除以子步骤S21到子步骤S24中得到的base值,得到的新的商为result_offset和余数mod_offset,得到转化后的2维数组偏移量大小为GlobalWorkOffset[result_offset,result_mod]。
[0008]在上述技术方案中,所述步骤S3包括如下子步骤:S31、从OpenCL内核中依次读取所有设置为OpenCL局部内存类型的变量,计算它们各自的大小,得到需要的空间大小之和;S32、从设备上动态分配一块所需空间之和容量的非主机内存;S33、将所有的OpenCL局部内存类型变量的值写入到所述非主机内存区域中,并返回相对应的指针以供后续访问。
[0009]在上述技术方案中,所述步骤S4包括如下子步骤:S41、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则检查全局工作项大小是否与局部工作组大小成倍数关系且局部工作组的值小于最大局部工作组大小,若满足关系则执行子步骤S51,若不满足关系则执行子步骤S42;S42、给局部工作组预设一个值Size,对每一个维度的工作项,比较最大全局工作项数量除以Size的商和最大工作组数量的大小关系,若前者小于或等于后者,则取Size为最终的局部工作组在对应维度上的值;否则执行子步骤S43;S43、将Size变为原来的两倍,并比较此时的Size是否大于最大局部工作组大小,若是则取Size的一半为局部工作组在对应维度上的值,否则跳转到子步骤S42。
[0010]在上述技术方案中,所述步骤S5包括如下子步骤:S51、刷新相关着色器状态以及指令这些相关数据,根据工作项的分配情况计算执行OpenCL内核所要分配的线程数;S52、将OpenCL内核的信息传递给计算设备系统的命令队列中,修改命令队列的状态,使得包含OpenCL内核信息的命令进入硬件设备中,以指定的线程数并行执行,最终完成OpenCL内核的提交。
[0011]本专利技术还提供了一种OpenCL内核提交的装置,包括如下部分:内核信息创建提交模块:在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;工作项维度转换模块:检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;局部内存变量模块:检查OpenCL内核是否使用了局部内存,若使用了该类型的变量,则在特定存储区域申请相应大小的空间保存该变量;局部工作组模块:检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组项数;OpenCL工作线程模块:启动OpenCL的工作线程,将包含OpenCL内核信息的命令缓冲提交到硬件设备。
[0012]在上述技术方案中,所述工作项维度转换模块包括如下单元:工作项维度判断单元:判断工作项维度的大小和全局工作项数量的值,若同时满足维度为1且全局工作项数量的值大于最大全局工作项数量这两个条件,则执行base值设定单元,若不满足条件,则跳转执行局部内存变量模块;base值设定单元:首先取一个值base作为一个基数,用来将工作项的维度由1维变为2维,若在内核信息创建提交模块中传递的参数中设置了局部工作组项数的值,则将其值作为base的初始值,否则令base为一个合适的初始常数值,这个值取决于设备所能支持的最大并行工作项数量和工作组数量;全局工作项数量除法单元:用全局工作项数量的值除以base,设得到的商为result,得到的余数为mod;result大小判断单元:判断result的大小,若小于或等于最大全局工作项数量,则继续判断mod的值,若不为0,则转化后的2维工作项大小为GlobalWorkSize[result+1,base];若为0,则转化后的2维工作项大小GlobalWorkSize[result,base];若result的值大于MaxGlobalWorkSize,则将base变为
原来的2倍并跳转到子步骤S2本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种OpenCL内核提交的方法,其特征在于:包括如下步骤:S1、在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;S2、检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;S3、检查OpenCL内核是否使用了局部内存,若使用了该类型的变量,则在特定存储区域申请相应大小的空间保存该变量;S4、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组项数;S5、启动OpenCL的工作线程,将包含OpenCL内核信息的命令缓冲提交到硬件设备。2.根据权利要求1所述的OpenCL内核提交的方法,其特征在于:所述步骤S2包括如下子步骤:S21、判断工作项维度的大小和全局工作项数量的值,若同时满足维度为1且全局工作项数量的值大于最大全局工作项数量这两个条件,则执行子步骤S22,若不满足条件,则跳转执行步骤S3;S22、首先取一个值base作为一个基数,用来将工作项的维度由1维变为2维,若在步骤S1中传递的参数中设置了局部工作组项数的值,则将其值作为base的初始值,否则令base为一个合适的初始常数值,这个值取决于设备所能支持的最大并行工作项数量和工作组数量;S23、用全局工作项数量的值除以base,设得到的商为result,得到的余数为mod;S24、判断result的大小,若小于或等于最大全局工作项数量,则继续判断mod的值,若不为0,则转化后的2维工作项大小为GlobalWorkSize[result+1,base];若为0,则转化后的2维工作项大小GlobalWorkSize[result,base];若result的值大于MaxGlobalWorkSize,则将base变为原来的2倍并跳转到子步骤S23;S25、检查OpenCL内核中是否设置了参数全局偏移量的值,若设置了全局偏移量的值且不为0,则将全局偏移量的值去除以子步骤S21到子步骤S24中得到的base值,得到的新的商为result_offset和余数mod_offset,得到转化后的2维数组偏移量大小为GlobalWorkOffset[result_offset,result_mod]。3.根据权利要求2所述的OpenCL内核提交的方法,其特征在于:所述步骤S3包括如下子步骤:S31、从OpenCL内核中依次读取所有设置为OpenCL局部内存类型的变量,计算它们各自的大小,得到需要的空间大小之和;S32、从设备上动态分配一块所需空间之和容量的非主机内存;S33、将所有的OpenCL局部内存类型变量的值写入到所述非主机内存区域中,并返回相对应的指针以供后续访问。4.根据权利要求3所述的OpenCL内核提交的方法,其特征在于:所述步骤S4包括如下子步骤:S41、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则检查全局工作项大小是否与局部工作组大小成倍数关系且局部工作组的值小于最大局部工作组大小,若满足关系则执行子步骤S51,若不满足关系则执行子步骤S42;S42、给局部工作组预设一个值Size,对每一个维度的工作项,比较最大全局工作项数
量除以Size的商和最大工作组数量的大小关系,若前者小于或等于后者,则取Size为最终的局部工作组在对应维度上的值;否则执行子步骤S43;S43、将Size变为原来的两倍,并比较此时的Size是否大于最大局部工作组大小,若是则取Size的一半为局部工作组在对应维度上的值,否则跳转到子步骤S42。5.根据权利要求4所述的OpenCL内核提交的方法,其特征在于:所述步骤S5包括如下子步骤:S51、刷新相关着色器状态以及指令这些相关数据,根据工作项的分配情况计算执行OpenCL内核所要分配的线程数;S52、将OpenCL内核的信息传递给计算设备系统的命令队列中,修改命令队列的状态,使得包含OpenCL内核信息的命令进入硬件设备中,以指定的线程数并行执行,最终完成OpenCL内核的提交。6.一种OpenCL内核提交的装置,其特征在于:包括如下部分:内核信息创建提交模块:在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;工作项维度转换模块:检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;局部内存变量模块...

【专利技术属性】
技术研发人员:许世文樊宇解文华张坤
申请(专利权)人:中国船舶重工集团公司第七零九研究所
类型:发明
国别省市:

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

1