CN112433847B - 一种OpenCL内核提交的方法及装置 - Google Patents

一种OpenCL内核提交的方法及装置 Download PDF

Info

Publication number
CN112433847B
CN112433847B CN202011238830.XA CN202011238830A CN112433847B CN 112433847 B CN112433847 B CN 112433847B CN 202011238830 A CN202011238830 A CN 202011238830A CN 112433847 B CN112433847 B CN 112433847B
Authority
CN
China
Prior art keywords
size
value
opencl
local
work
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
Application number
CN202011238830.XA
Other languages
English (en)
Other versions
CN112433847A (zh
Inventor
许世文
樊宇
解文华
张坤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Lingjiu Microelectronics Co ltd
China State Shipbuilding Corp Ltd
Original Assignee
Wuhan Lingjiu Microelectronics Co ltd
China State Shipbuilding Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Lingjiu Microelectronics Co ltd, China State Shipbuilding Corp Ltd filed Critical Wuhan Lingjiu Microelectronics Co ltd
Priority to CN202011238830.XA priority Critical patent/CN112433847B/zh
Publication of CN112433847A publication Critical patent/CN112433847A/zh
Application granted granted Critical
Publication of CN112433847B publication Critical patent/CN112433847B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Image Processing (AREA)

Abstract

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

Description

一种OpenCL内核提交的方法及装置
技术领域
本发明涉及计算机高性能并行计算领域,特别是涉及一种OpenCL内核提交的方法及装置。
背景技术
近年来,高性能并行计算技术快速发展,OpenCL作为并行计算的通用标准被各大芯片厂商广泛采用。
OpenCL是为了解决不同架构的硬件间的并行计算问题而产生的,OpenCL标准能够让开发人员专注于算法的设计和优化,而不需要关注各个平台的编程语言以及底层硬件的细节等问题,极大的提高了开发效率。
OpenCL内核通俗来讲就是在硬件中执行的一个函数,计算设备中的每个计算单元都会执行相同的函数,但是使用的数据却不同,从而达到并行运算高效处理大量数据的目的。OpenCL标准只规定了通用的编程框架,具体的计算方法仍需要各大厂商自行设计。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种OpenCL内核提交的方法及装置,使其在保证满足OpenCL标准框架的前提下,给硬件合理的分配工作任务,将OpenCL内核提交到硬件进行执行,提高并行运算的效率。
本发明提供的一种OpenCL内核提交的方法,包括如下步骤:S1、在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;S2、检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;S3、检查OpenCL内核是否使用了局部内存,若使用了该类型的变量,则在特定存储区域申请相应大小的空间保存该变量;S4、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组项数;S5、启动OpenCL的工作线程,将包含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]。
在上述技术方案中,所述步骤S3包括如下子步骤:S31、从OpenCL内核中依次读取所有设置为OpenCL局部内存类型的变量,计算它们各自的大小,得到需要的空间大小之和;S32、从设备上动态分配一块所需空间之和容量的非主机内存;S33、将所有的OpenCL局部内存类型变量的值写入到所述非主机内存区域中,并返回相对应的指针以供后续访问。
在上述技术方案中,所述步骤S4包括如下子步骤:S41、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则检查全局工作项大小是否与局部工作组大小成倍数关系且局部工作组的值小于最大局部工作组大小,若满足关系则执行子步骤S51,若不满足关系则执行子步骤S42;S42、给局部工作组预设一个值Size,对每一个维度的工作项,比较最大全局工作项数量除以Size的商和最大工作组数量的大小关系,若前者小于或等于后者,则取Size为最终的局部工作组在对应维度上的值;否则执行子步骤S43;S43、将Size变为原来的两倍,并比较此时的Size是否大于最大局部工作组大小,若是则取Size的一半为局部工作组在对应维度上的值,否则跳转到子步骤S42。
在上述技术方案中,所述步骤S5包括如下子步骤:S51、刷新相关着色器状态以及指令这些相关数据,根据工作项的分配情况计算执行OpenCL内核所要分配的线程数;S52、将OpenCL内核的信息传递给计算设备系统的命令队列中,修改命令队列的状态,使得包含OpenCL内核信息的命令进入硬件设备中,以指定的线程数并行执行,最终完成OpenCL内核的提交。
本发明还提供了一种OpenCL内核提交的装置,包括如下部分:内核信息创建提交模块:在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;工作项维度转换模块:检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;局部内存变量模块:检查OpenCL内核是否使用了局部内存,若使用了该类型的变量,则在特定存储区域申请相应大小的空间保存该变量;局部工作组模块:检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组项数;OpenCL工作线程模块:启动OpenCL的工作线程,将包含OpenCL内核信息的命令缓冲提交到硬件设备。
在上述技术方案中,所述工作项维度转换模块包括如下单元:工作项维度判断单元:判断工作项维度的大小和全局工作项数量的值,若同时满足维度为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倍并跳转到子步骤S23;全局偏移量单元:检查OpenCL内核中是否设置了参数全局偏移量的值,若设置了全局偏移量的值且不为0,则将全局偏移量的值去分别除以工作项维度判断单元、base值设定单元、全局工作项数量除法单元和result大小判断单元中得到的base值,得到的新的商为result_offset和余数mod_offset,得到转化后的2维数组偏移量大小为GlobalWorkOffset[result_offset,result_mod]。
在上述技术方案中,所述局部内存变量模块包括如下单元:OpenCL局部内存变量单元:从OpenCL内核中依次读取所有设置为OpenCL局部内存类型的变量,计算它们各自的大小,得到需要的空间大小之和;动态分配单元:从设备上动态分配一块所需空间之和容量的非主机内存;OpenCL局部内存变量写入单元:将所有的OpenCL局部内存类型变量的值写入到所述非主机内存区域中,并返回相对应的指针以供后续访问。
在上述技术方案中,所述局部工作组模块包括如下单元:局部工作组判断单元:检查OpenCL内核中是否设置了局部工作组的大小,若已设置则检查全局工作项大小是否与局部工作组大小成倍数关系且局部工作组的值小于最大局部工作组大小,若满足关系则执行OpenCL内核线程分配单元,若不满足关系则执行局部工作组值Size预设单元;局部工作组值Size预设单元:给局部工作组预设一个值Size,对每一个维度的工作项,比较最大全局工作项数量除以Size的商和最大工作组数量的大小关系,若前者小于或等于后者,则取Size为最终的局部工作组在对应维度上的值;否则执行局部工作组值Size比较单元;局部工作组值Size比较单元:将Size变为原来的两倍,并比较此时的Size是否大于最大局部工作组大小,若是则取Size的一半为局部工作组在对应维度上的值,否则跳转到局部工作组值Size预设单元。
在上述技术方案中,所述OpenCL工作线程模块包括如下单元:OpenCL内核线程分配单元:刷新相关着色器状态以及指令这些相关数据,根据工作项的分配情况计算执行OpenCL内核所要分配的线程数;OpenCL内核信息提交单元:将OpenCL内核的信息传递给计算设备系统的命令队列中,修改命令队列的状态,使得包含OpenCL内核信息的命令进入硬件设备中,以指定的线程数并行执行,最终完成OpenCL内核的提交。
本发明OpenCL内核提交的方法及装置,具有以下有益效果:
在满足OpenCL标准框架的前提下,通过给硬件合理的分配工作任务,将OpenCL内核提交到硬件进行执行,提高了并行运算的效率。
附图说明
图1为本发明OpenCL内核提交的方法的整体流程示意图;
图2为本发明OpenCL内核提交的方法中步骤S2的流程示意图;
图3为本发明OpenCL内核提交的方法中步骤S3的流程示意图;
图4为本发明OpenCL内核提交的方法中步骤S4的流程示意图;
图5为本发明OpenCL内核提交的方法中步骤S5的流程示意图;
图6为本发明OpenCL内核提交的装置的整体结构示意图;
图7为本发明OpenCL内核提交的装置中工作项维度转换模块的结构示意图;
图8为本发明OpenCL内核提交的装置中局部内存变量模块的结构示意图;
图9为本发明OpenCL内核提交的装置中局部工作组模块的结构示意图;
图10为本发明OpenCL内核提交的装置中OpenCL工作线程模块的结构示意图。
具体实施方式
下面结合附图及实施例对本发明作进一步的详细描述,但该实施例不应理解为对本发明的限制。
如图1所示,本发明提供了一种OpenCL内核提交的方法,其包括如下步骤:
S1、在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块。
S2、检查工作项维度是否满足从一维转二维的条件,若满足则进行转换。
可选地,如图2所示,所述步骤S2包括如下子步骤:
S21、判断工作项维度的大小和GlobalWorkSize(全局工作项数量)的值,若同时满足维度为1且GlobalWorkSize的值大于MaxGlobalWorkSize(最大全局工作项数量)这两个条件,则执行步骤S22,若不满足条件,则跳转执行步骤S3。
S22、首先取一个值base作为一个基数,用来将工作项的维度由1维变为2维,若在S1中传递的参数中设置了LocalWorkSize(局部工作组项数)的值,则将其值作为base的初始值,否则令base为一个合适的初始常数值,这个值取决于设备所能支持的最大并行工作项数量和工作组数量。
S23、用GlobalWorkSize的值除以base,设得到的商为result,得到的余数为mod。
S24、判断result的大小,若小于或等于MaxGlobalWorkSize,则继续判断mod的值,若不为0,则转化后的2维工作项大小为GlobalWorkSize[result+1,base];若为0,则转化后的2维工作项大小GlobalWorkSize[result,base]。若result的值大于MaxGlobalWorkSize,则将base变为原来的2倍并跳转到步骤S23。
S25、检查OpenCL内核中是否设置了参数GlobalWorkOffset(全局偏移量)的值,若设置了GlobalWorkOffset的值且不为0,则将GlobalWorkOffset的值去除以步骤S21到S24中得到的base值,得到的新的商为result_offset和余数mod_offset,得到转化后的2维数组偏移量大小为GlobalWorkOffset[result_offset,result_mod]。
S3、检查OpenCL内核是否使用了局部内存,若使用了该类型的变量,则在特定存储区域申请相应大小的空间保存该变量。
可选地,如图3所示,所述步骤S3包括如下子步骤
S31、从OpenCL内核中依次读取所有设置为OpenCL局部内存类型的变量,计算它们各自的大小,得到需要的空间大小之和。
S32、从设备上动态分配一块所需空间之和容量的非主机内存。
S33、将所有的OpenCL局部内存类型变量的值写入到这块内存区域中,并返回相对应的指针以供后续访问。
S4、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组大小。
可选地,如图4所示,所述步骤S4包括如下子步骤:
S41、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则检查全局工作项大小是否与局部工作组大小成倍数关系且局部工作组的值小于MaxLocalWorkSize(最大局部工作组大小),若满足关系则执行步骤S51,若不满足关系则执行步骤S42。
S42、给LocalWorkSize(局部工作组)预设一个值Size,这个值的大小取决于计算设备的着色器核心的数量。对每一个维度的工作项,比较MaxGlobalWorkSize(最大工作项数量)除以Size的商和MaxWorkGroupCount(最大工作组数量)的大小关系,若前者小于或等于后者,则取Size为最终的LocalWorkSize在对应维度上的值;否则执行步骤S43。
S43、将Size变为原来的两倍,并比较此时的Size是否大于MaxLocalWorkSize(最大局部工作组大小),若是则取Size的一半为LocalWorkSize在对应维度上的值,否则跳转到步骤S42。
S5、启动OpenCL的工作线程,将包含OpenCL内核信息的命令缓冲提交到硬件设备。
可选地,如图5所示,所述步骤S5包括如下子步骤:
S51、刷新相关着色器状态以及指令等相关数据,根据工作项的分配情况计算执行OpenCL内核所要分配的线程数。
S52、将OpenCL内核的信息传递给计算设备系统的命令队列中,修改命令队列的状态,使得包含有OpenCL内核信息的命令进入硬件设备中,以指定的线程数并行执行,最终完成OpenCL内核的提交。
如图6所示,本发明还提供了一种OpenCL内核提交的装置,包括如下部分:
内核信息创建提交模块:在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;
工作项维度转换模块:检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;
可选地,如图7所示,所述工作项维度转换模块包括如下单元:
工作项维度判断单元:判断工作项维度的大小和全局工作项数量的值,若同时满足维度为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倍并跳转到子步骤S23;
全局偏移量单元:检查OpenCL内核中是否设置了参数全局偏移量的值,若设置了全局偏移量的值且不为0,则将全局偏移量的值去分别除以工作项维度判断单元、base值设定单元、全局工作项数量除法单元和result大小判断单元中得到的base值,得到的新的商为result_offset和余数mod_offset,得到转化后的2维数组偏移量大小为GlobalWorkOffset[result_offset,result_mod];
局部内存变量模块:检查OpenCL内核是否使用了局部内存,若使用了该类型的变量,则在特定存储区域申请相应大小的空间保存该变量;
可选地,如图8所示,所述局部内存变量模块包括如下单元:
OpenCL局部内存变量单元:从OpenCL内核中依次读取所有设置为OpenCL局部内存类型的变量,计算它们各自的大小,得到需要的空间大小之和;
动态分配单元:从设备上动态分配一块所需空间之和容量的非主机内存;
OpenCL局部内存变量写入单元:将所有的OpenCL局部内存类型变量的值写入到所述非主机内存区域中,并返回相对应的指针以供后续访问;
局部工作组模块:检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组项数;
可选地,如图9所示,所述局部工作组模块包括如下单元:
局部工作组判断单元:检查OpenCL内核中是否设置了局部工作组的大小,若已设置则检查全局工作项大小是否与局部工作组大小成倍数关系且局部工作组的值小于最大局部工作组大小,若满足关系则执行OpenCL内核线程分配单元,若不满足关系则执行局部工作组值Size预设单元;
局部工作组值Size预设单元:给局部工作组预设一个值Size,对每一个维度的工作项,比较最大全局工作项数量除以Size的商和最大工作组数量的大小关系,若前者小于或等于后者,则取Size为最终的局部工作组在对应维度上的值;否则执行局部工作组值Size比较单元;
局部工作组值Size比较单元:将Size变为原来的两倍,并比较此时的Size是否大于最大局部工作组大小,若是则取Size的一半为局部工作组在对应维度上的值,否则跳转到局部工作组值Size预设单元;
OpenCL工作线程模块:启动OpenCL的工作线程,将包含OpenCL内核信息的命令缓冲提交到硬件设备;
可选地,如图10所示,所述OpenCL工作线程模块包括如下单元:
OpenCL内核线程分配单元:刷新相关着色器状态以及指令这些相关数据,根据工作项的分配情况计算执行OpenCL内核所要分配的线程数;
OpenCL内核信息提交单元:将OpenCL内核的信息传递给计算设备系统的命令队列中,修改命令队列的状态,使得包含OpenCL内核信息的命令进入硬件设备中,以指定的线程数并行执行,最终完成OpenCL内核的提交。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (2)

1.一种OpenCL内核提交的方法,其特征在于:包括如下步骤:
S1、在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;
S2、检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;
S3、检查OpenCL内核是否使用了局部内存,若使用了局部内存类型的变量,则在特定存储区域申请相应大小的空间保存该变量;
S4、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组项数;
S5、启动OpenCL的工作线程,将包含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,mod_offset];
所述步骤S3包括如下子步骤:
S31、从OpenCL内核中依次读取所有设置为OpenCL局部内存类型的变量,计算它们各自的大小,得到需要的空间大小之和;
S32、从设备上动态分配一块所需空间大小之和容量的非主机内存;
S33、将所有的OpenCL局部内存类型变量的值写入到所述非主机内存区域中,并返回相对应的指针以供后续访问;
所述步骤S4包括如下子步骤:
S41、检查OpenCL内核中是否设置了局部工作组的大小,若已设置则检查全局工作项大小是否与局部工作组大小成倍数关系且局部工作组的值小于最大局部工作组大小,若满足关系则执行子步骤S51,若不满足关系则执行子步骤S42;
S42、给局部工作组预设一个值Size,对每一个维度的工作项,比较最大全局工作项数量除以Size的商和最大工作组数量的大小关系,若前者小于或等于后者,则取Size为最终的局部工作组在对应维度上的值;否则执行子步骤S43;
S43、将Size变为原来的两倍,并比较此时的Size是否大于最大局部工作组大小,若是则取Size的一半为局部工作组在对应维度上的值,否则跳转到子步骤S42;
所述步骤S5包括如下子步骤:
S51、刷新相关着色器状态以及指令,根据工作项的分配情况计算执行OpenCL内核所要分配的线程数;
S52、将OpenCL内核的信息传递给计算设备系统的命令队列中,修改命令队列的状态,使得包含OpenCL内核信息的命令进入硬件设备中,以指定的线程数并行执行,最终完成OpenCL内核的提交。
2.一种OpenCL内核提交的装置,其特征在于:包括如下部分:
内核信息创建提交模块:在主机程序中创建内核后,将内核信息传递给OpenCL的内核提交模块;
工作项维度转换模块:检查工作项维度是否满足从一维转二维的条件,若满足则进行转换;
局部内存变量模块:检查OpenCL内核是否使用了局部内存,若使用了该类型的变量,则在特定存储区域申请相应大小的空间保存该变量;
局部工作组模块:检查OpenCL内核中是否设置了局部工作组的大小,若已设置则需要判断设置的数据是否合法,若不合法或未设置则自适应分配一个合适的局部工作组项数;
OpenCL工作线程模块:启动OpenCL的工作线程,将包含OpenCL内核信息的命令缓冲提交到硬件设备;
其中所述工作项维度转换模块包括如下单元:
工作项维度判断单元:判断工作项维度的大小和全局工作项数量的值,若同时满足维度为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倍并执行全局工作项数量除法单元;全局偏移量单元:检查OpenCL内核中是否设置了参数全局偏移量的值,若设置了全局偏移量的值且不为0,则将全局偏移量的值去分别除以工作项维度判断单元、base值设定单元、全局工作项数量除法单元和result大小判断单元中得到的base值,得到的新的商为result_offset和余数mod_offset,得到转化后的2维数组偏移量大小为GlobalWorkOffset[result_offset,mod_offset];
所述局部内存变量模块包括如下单元:
OpenCL局部内存变量单元:从OpenCL内核中依次读取所有设置为OpenCL局部内存类型的变量,计算它们各自的大小,得到需要的空间大小之和;
动态分配单元:从设备上动态分配一块所需空间大小之和容量的非主机内存;OpenCL局部内存变量写入单元:将所有的OpenCL局部内存类型变量的值写入到所述非主机内存区域中,并返回相对应的指针以供后续访问;所述局部工作组模块包括如下单元:
局部工作组判断单元:检查OpenCL内核中是否设置了局部工作组的大小,若已设置则检查全局工作项大小是否与局部工作组大小成倍数关系且局部工作组的值小于最大局部工作组大小,若满足关系则执行OpenCL内核线程分配单元,若不满足关系则执行局部工作组值Size预设单元;
局部工作组值Size预设单元:给局部工作组预设一个值Size,对每一个维度的工作项,比较最大全局工作项数量除以Size的商和最大工作组数量的大小关系,若前者小于或等于后者,则取Size为最终的局部工作组在对应维度上的值;否则执行局部工作组值Size比较单元;
局部工作组值Size比较单元:将Size变为原来的两倍,并比较此时的Size是否大于最大局部工作组大小,若是则取Size的一半为局部工作组在对应维度上的值,否则跳转到局部工作组值Size预设单元;
所述OpenCL工作线程模块包括如下单元:
OpenCL内核线程分配单元:刷新相关着色器状态以及指令,根据工作项的分配情况计算执行OpenCL内核所要分配的线程数;
OpenCL内核信息提交单元:将OpenCL内核的信息传递给计算设备系统的命令队列中,修改命令队列的状态,使得包含OpenCL内核信息的命令进入硬件设备中,以指定的线程数并行执行,最终完成OpenCL内核的提交。
CN202011238830.XA 2020-11-09 2020-11-09 一种OpenCL内核提交的方法及装置 Active CN112433847B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011238830.XA CN112433847B (zh) 2020-11-09 2020-11-09 一种OpenCL内核提交的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011238830.XA CN112433847B (zh) 2020-11-09 2020-11-09 一种OpenCL内核提交的方法及装置

Publications (2)

Publication Number Publication Date
CN112433847A CN112433847A (zh) 2021-03-02
CN112433847B true CN112433847B (zh) 2024-04-02

Family

ID=74699417

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011238830.XA Active CN112433847B (zh) 2020-11-09 2020-11-09 一种OpenCL内核提交的方法及装置

Country Status (1)

Country Link
CN (1) CN112433847B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116089316B (zh) * 2023-04-07 2023-06-09 武汉凌久微电子有限公司 一种基于动态断点的内核驱动数据调试方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103973431A (zh) * 2014-04-16 2014-08-06 华南师范大学 一种基于OpenCL的AES并行化实现方法
CN107292804A (zh) * 2017-06-01 2017-10-24 西安电子科技大学 基于OpenCL的直接多曝光融合并行加速方法
CN109656673A (zh) * 2017-10-11 2019-04-19 阿里巴巴集团控股有限公司 程序的加载方法、装置、系统以及电子设备
CN110070597A (zh) * 2019-04-02 2019-07-30 同济大学 一种基于OpenCL的Unity3D渲染加速方法
CN110110844A (zh) * 2019-04-24 2019-08-09 西安电子科技大学 基于OpenCL的卷积神经网络并行处理方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10489205B2 (en) * 2013-07-19 2019-11-26 Apple Inc. Enqueuing kernels from kernels on GPU/CPU

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103973431A (zh) * 2014-04-16 2014-08-06 华南师范大学 一种基于OpenCL的AES并行化实现方法
CN107292804A (zh) * 2017-06-01 2017-10-24 西安电子科技大学 基于OpenCL的直接多曝光融合并行加速方法
CN109656673A (zh) * 2017-10-11 2019-04-19 阿里巴巴集团控股有限公司 程序的加载方法、装置、系统以及电子设备
CN110070597A (zh) * 2019-04-02 2019-07-30 同济大学 一种基于OpenCL的Unity3D渲染加速方法
CN110110844A (zh) * 2019-04-24 2019-08-09 西安电子科技大学 基于OpenCL的卷积神经网络并行处理方法

Also Published As

Publication number Publication date
CN112433847A (zh) 2021-03-02

Similar Documents

Publication Publication Date Title
CN106662995B (zh) 用于提供中间线程抢占的装置、方法、系统、介质和设备
US11609792B2 (en) Maximizing resource utilization of neural network computing system
US11030095B2 (en) Virtual space memory bandwidth reduction
US11144330B2 (en) Algorithm program loading method and related apparatus
CN104714785A (zh) 任务调度装置、方法及并行处理数据的设备
CN110333827B (zh) 一种数据加载装置和数据加载方法
WO2021115208A1 (zh) 神经网络处理器、芯片和电子设备
WO2023082575A1 (zh) 一种面向神经网络模型计算的图执行流水并行方法和装置
CN112433847B (zh) 一种OpenCL内核提交的方法及装置
US20240241808A1 (en) Application performance test method and apparatus, and method and apparatus for establishing performance test model
US11687339B2 (en) Data processing method and apparatus, and related product
US10846138B2 (en) Allocating resources of a memory fabric
WO2021115149A1 (zh) 神经网络处理器、芯片和电子设备
US10978134B1 (en) Method and device for refreshing memory
CN107832154B (zh) 一种多进程处理方法、处理装置及应用
WO2023115529A1 (zh) 芯片内的数据处理方法及芯片
EP3343370A1 (en) Method of processing opencl kernel and computing device therefor
KR20230059536A (ko) 프로세스 스케줄링 방법 및 장치
CN111340224B (zh) 适用于低资源嵌入式芯片的cnn网络的加速设计方法
CN112114967A (zh) 一种基于服务优先级的gpu资源预留方法
US20220147280A1 (en) Efficient buffering technique for transferring data
CN112948758B (zh) 数据处理方法、装置以及芯片
US20240330011A1 (en) Processing method and apparatus, device
WO2024108907A1 (zh) 一种数据处理方法、装置、ai芯片、电子设备及存储介质
US20240248753A1 (en) Locating data in storage

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: No.1, zanlong North Road, Fenghuang Industrial Park, Donghu New Technology Development Zone, Wuhan City, Hubei Province

Applicant after: No. 709 Research Institute of China Shipbuilding Corp.

Address before: No.1, zanlong North Road, Fenghuang Industrial Park, Donghu New Technology Development Zone, Wuhan City, Hubei Province

Applicant before: NO.709 RESEARCH INSTITUTE OF CHINA SHIPBUILDING INDUSTRY Corp.

TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20220803

Address after: 430000 No. 1 Baihe Road, Guandong Industrial Park, Donghu New Technology Development Zone, Wuhan City, Hubei Province

Applicant after: Wuhan lingjiu Microelectronics Co.,Ltd.

Address before: No.1, zanlong North Road, Fenghuang Industrial Park, Donghu New Technology Development Zone, Wuhan City, Hubei Province

Applicant before: No. 709 Research Institute of China Shipbuilding Corp.

TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20221101

Address after: No. 889, Zhonghua Road, Huangpu District, Shanghai 200001

Applicant after: China Shipbuilding Group Co.,Ltd.

Applicant after: Wuhan lingjiu Microelectronics Co.,Ltd.

Address before: 430000 No. 1 Baihe Road, Guandong Industrial Park, Donghu New Technology Development Zone, Wuhan City, Hubei Province

Applicant before: Wuhan lingjiu Microelectronics Co.,Ltd.

GR01 Patent grant
GR01 Patent grant