运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OPENCL设备.pdf

上传人:Y948****062 文档编号:1749234 上传时间:2018-07-09 格式:PDF 页数:50 大小:3.74MB
返回 下载 相关 举报
摘要
申请专利号:

CN201510069844.6

申请日:

2015.02.10

公开号:

CN104834630A

公开日:

2015.08.12

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 15/80申请日:20150210|||著录事项变更 IPC(主分类):G06F 15/80变更事项:申请人变更前:瑞萨电子株式会社变更后:瑞萨电子株式会社变更事项:地址变更前:日本神奈川县变更后:日本东京|||公开

IPC分类号:

G06F15/80

主分类号:

G06F15/80

申请人:

瑞萨电子株式会社

发明人:

京昭伦

地址:

日本神奈川县

优先权:

2014-023044 2014.02.10 JP

专利代理机构:

中原信达知识产权代理有限责任公司11219

代理人:

韩峰; 孙志湧

PDF下载: PDF下载
内容摘要

本发明涉及运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OPENCL设备。当由运算单元执行彼此相关的第一内核和第二内核时,如果第一内核的连续写入块的分配属性和第二内核的对应于连续写入块的连续读取块的分配属性相同,则场景确定单元以流水线通过使用连续写入块执行第一内核和第二内核,以便通过专用存储器或局部存储器执行第二内核而不将其传送给全局存储器。此时,场景确定单元按逻辑地将第二内核的连续读取块的裕度属性和依赖性属性分别加到第一内核的每个读取块的为读取块设置的裕度属性和依赖性属性。

权利要求书

权利要求书
1.  一种运算控制装置,所述运算控制装置控制OpenCL(开放计算语言)设备的多个处理元件的并行处理,所述OpenCL设备包括所述多个处理元件和对于所述多个处理元件提供的不同层级的多个存储器,所述运算控制装置包括:
属性组存储单元,所述属性组存储单元获取并存储为读取块和写入块中的每个所设置的属性组,所述读取块是在所述多个存储器中的最低层级的存储器中存储的一个或多个数据块并且具有用于并行处理的被传送到不同层级的存储器的数据,所述写入块是在所述并行处理后作为对所述一个或多个读取块进行并行处理的结果而从所述不同层级的存储器传送到所述最低层级的存储器的一个或多个数据块;以及
场景确定单元,所述场景确定单元基于在所述属性组存储单元中存储的属性组和用于指示所述OpenCL设备的配置的配置参数中的每个来确定所述读取块和写入块中的每个的传送方法,并且执行根据所确定的传送方法来对所述读取块和写入块的传送,以及执行与所述传送相对应的对所述并行处理的控制,其中,
所述属性组包括对于确定所述传送方法所需的且不取决于所述OpenCL设备的配置的多个属性,包括:
分配属性,所述分配属性用于指示是否将所述数据块分段为多个子块并且将所述子块进行传送,以及指示当对所述数据块进行分段时的分段方法,
裕度属性,所述裕度属性用于指示:当将所述数据块分段成多个子块并且传送所述子块时,与所述子块一起传送的相邻于所述子块的数据的大小,以及
依赖性属性,所述依赖性属性用于指示当将所述数据块分段成多个子块并且传送所述子块时所述子块是否具有与其它相邻子块的依赖性,并且指示当存在所述依赖性时的全部的依赖方向,
基于这样的假设来设置所述写入块的属性组,所述假设是指:所述写入块已经存在于所述不同层级的存储器中且传送到所述最低层级 的存储器,
当在所述OpenCL设备中接连地执行第一内核和第二内核、并且对应于所述第一内核的并行处理的写入块包括被用作对应于所述第二内核的并行处理的读取块的连续写入块、并且针对所述第一内核所设置的所述连续写入块的所述分配属性与针对所述第二内核所设置的对应于所述连续写入块的读取块的所述分配属性是相同的时,所述场景确定单元通过使用所述连续写入块以经由所述不同层级的存储器来执行所述第二内核而不将所述连续写入块传送到最低层级,来进行以流水线执行所述第一内核和所述第二内核的流水线控制,以及
在所述流水线控制中,对于与所述第一内核相对应的读取块中的每个读取块,在针对该读取块所设置的所述裕度属性和所述依赖性属性上,所述场景确定单元分别按逻辑地添加针对所述第二内核所设置的对应于所述连续写入块的读取块的所述裕度属性和所述依赖性属性。

2.  一种运算控制方法,所述运算控制方法控制OpenCL(开放计算语言)设备的多个处理元件的并行处理,所述OpenCL设备包括所述多个处理元件和对于所述多个处理元件提供的不同层级的多个存储器,所述运算控制方法包括:
第一步骤,获取并存储为读取块和写入块中的每个所设置的属性组,所述读取块是在所述多个存储器中的最低层级的存储器中存储的一个或多个数据块并且具有用于并行处理的被传送到不同层级的存储器的数据,所述写入块是在所述并行处理后作为对所述一个或多个读取块进行并行处理的结果而从所述不同层级的存储器传送到所述最低层级的存储器的一个或多个数据块;以及
第二步骤,基于所存储的属性组和用于指示所述OpenCL设备的配置的配置参数中的每个来确定所述读取块和写入块中的每个的传送方法,并且执行根据所确定的传送方法来对所述读取块和写入块的传送,以及执行与所述传送相对应的对所述并行处理的控制,其中,
所述属性组包括对于确定所述传送方法所需的且不取决于所述 OpenCL设备的配置的多个属性,包括:
分配属性,所述分配属性用于指示是否将所述数据块分段为多个子块并且将所述子块进行传送,以及指示当对所述数据块进行分段时的分段方法,
裕度属性,所述裕度属性用于指示:当将所述数据块分段成多个子块并且传送所述子块时,与所述子块一起传送的相邻于所述子块的数据的大小,以及
依赖性属性,所述依赖性属性用于指示当将所述数据块分段成多个子块并且传送所述子块时所述子块是否具有与其它相邻子块的依赖性,并且指示当存在所述依赖性时的全部的依赖方向,
基于这样的假设来设置所述写入块的属性组,所述假设是指:所述写入块已经存在于所述不同层级的存储器中且传送到所述最低层级的存储器,
在所述第二步骤中,当在所述OpenCL设备中接连地执行第一内核和第二内核、并且对应于所述第一内核的并行处理的写入块包括被用作对应于所述第二内核的并行处理的读取块的连续写入块、并且针对所述第一内核所设置的所述连续写入块的所述分配属性与针对所述第二内核所设置的对应于所述连续写入块的读取块的所述分配属性是相同的时,通过使用所述连续写入块以经由所述不同层级的存储器来执行所述第二内核而不将所述连续写入块传送到最低层级,来进行以流水线执行所述第一内核和所述第二内核的流水线控制,以及
在所述流水线控制中,对于与所述第一内核相对应的读取块中的每个读取块,在针对该读取块所设置的所述裕度属性和所述依赖性属性上,分别按逻辑地添加针对所述第二内核所设置的对应于所述连续写入块的读取块的所述裕度属性和所述依赖性属性。

3.  一种存储有程序的非瞬时计算机可读介质,所述程序用于控制OpenCL(开放计算语言)设备的多个处理元件的并行处理,所述OpenCL设备包括所述多个处理元件和对于所述多个处理元件提供的不同层级的多个存储器,所述程序使得计算机执行:
第一步骤,获取并存储为读取块和写入块中的每个所设置的属性组,所述读取块是在所述多个存储器中的最低层级的存储器中存储的一个或多个数据块并且具有用于并行处理的被传送到不同层级的存储器的数据,所述写入块是在所述并行处理后作为对所述一个或多个读取块进行并行处理的结果而从所述不同层级的存储器传送到所述最低层级的存储器的一个或多个数据块;以及
第二步骤,基于所存储的属性组和用于指示所述OpenCL设备的配置的配置参数中的每个来确定所述读取块和写入块中的每个的传送方法,并且执行根据所确定的传送方法来对所述读取块和写入块的传送,以及执行与所述传送相对应的对所述并行处理的控制,其中,
所述属性组包括对于确定所述传送方法所需的且不取决于所述OpenCL设备的配置的多个属性,包括:
分配属性,所述分配属性用于指示是否将所述数据块分段为多个子块并且将所述子块进行传送,以及指示当对所述数据块进行分段时的分段方法,
裕度属性,所述裕度属性用于指示:当将所述数据块分段成多个子块并且传送所述子块时,与所述子块一起传送的相邻于所述子块的数据的大小,以及
依赖性属性,所述依赖性属性用于指示当将所述数据块分段成多个子块并且传送所述子块时所述子块是否具有与其它相邻子块的依赖性,并且指示当存在所述依赖性时的全部的依赖方向,
基于这样的假设来设置所述写入块的属性组,所述假设是指:所述写入块已经存在于所述不同层级的存储器中且传送到所述最低层级的存储器,
在所述第二步骤中,当在所述OpenCL设备中接连地执行第一内核和第二内核、并且对应于所述第一内核的并行处理的写入块包括被用作对应于所述第二内核的并行处理的读取块的连续写入块、并且针对所述第一内核所设置的所述连续写入块的所述分配属性与针对所述第二内核所设置的对应于所述连续写入块的读取块的所述分配属性是相同的时,通过使用所述连续写入块以经由所述不同层级的存储器来 执行所述第二内核而不将所述连续写入块传送到最低层级,来进行以流水线执行所述第一内核和所述第二内核的流水线控制,以及
在所述流水线控制中,对于与所述第一内核相对应的读取块中的每个读取块,在针对该读取块所设置的所述裕度属性和所述依赖性属性上,分别按逻辑地添加针对所述第二内核所设置的对应于所述连续写入块的读取块的所述裕度属性和所述依赖性属性。

4.  一种OpenCL设备,包括:
多个处理元件;
对于所述多个处理元件提供的不同层级的多个存储器;和
运算控制单元,所述运算控制单元控制所述多个处理元件的并行处理,
所述运算控制单元包括:
属性组存储单元,所述属性组存储单元获取并存储为读取块和写入块中的每个所设置的属性组,所述读取块是在所述多个存储器中的最低层级的存储器中存储的一个或多个数据块并且具有用于并行处理的被传送到不同层级的存储器的数据,所述写入块是在所述并行处理后作为对所述一个或多个读取块并行处理的结果而从所述不同层级的存储器传送到所述最低层级的存储器的一个或多个数据块;以及
场景确定单元,所述场景确定单元基于在所述属性组存储单元中存储的属性组和用于指示所述OpenCL设备的配置的配置参数中的每个来确定所述读取块和写入块中的每个的传送方法,并且执行根据所确定的传送方法来对所述读取块和写入块的传送,以及执行与所述传送相对应的对所述并行处理的控制,其中,
所述属性组包括对于确定所述传送方法所需的且不取决于所述OpenCL设备的配置的多个属性,包括:
分配属性,所述分配属性用于指示是否将所述数据块分段为多个子块并且将所述子块进行传送,以及指示当对所述数据块进行分段时的分段方法,
裕度属性,所述裕度属性用于指示:当将所述数据块分段成 多个子块并且传送所述子块时,与所述子块一起传送的相邻于所述子块的数据的大小,以及
依赖性属性,所述依赖性属性用于指示当将所述数据块分段成多个子块并且传送所述子块时所述子块是否具有与其它相邻子块的依赖性,并且指示当存在所述依赖性时的全部的依赖方向,
基于这样的假设来设置所述写入块的属性组,所述假设是指:所述写入块已经存在于所述不同层级的存储器中且传送到所述最低层级的存储器,
当在所述OpenCL设备中接连地执行第一内核和第二内核、并且对应于所述第一内核的并行处理的写入块包括被用作对应于所述第二内核的并行处理的读取块的连续写入块、并且针对所述第一内核所设置的所述连续写入块的所述分配属性与针对所述第二内核所设置的对应于所述连续写入块的读取块的所述分配属性是相同的时,所述场景确定单元通过使用所述连续写入块以经由所述不同层级的存储器来执行所述第二内核而不将所述连续写入块传送到最低层级,来进行以流水线执行所述第一内核和所述第二内核的流水线控制,以及
在所述流水线控制中,对于与所述第一内核相对应的读取块中的每个读取块,在针对该读取块所设置的所述裕度属性和所述依赖性属性上,所述场景确定单元分别按逻辑地添加针对所述第二内核所设置的对应于所述连续写入块的读取块的所述裕度属性和所述依赖性属性。

说明书

说明书运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OpenCL设备
相关申请的交叉引用
本申请基于并且要求于2014年2月10日提交的日本专利申请No.2014-23044的优先权利益,其公开内容通过引用整体被包含在此。
技术领域
本发明涉及一种并行处理器,更具体涉及一种OpenCL设备的运算控制技术。
背景技术
近来,由于防止处理器过热的需求,通过增加执行并行处理的处理器核(下文简称为“核”)的数量而不是增加处理器的工作频率来改进性能的趋势已经变得很显著。具有多个核的处理器被称为多核处理器,具有大量核的多核处理器尤其被称为众核处理器(many-core processor)。在此说明书中,多核处理器和众核处理器并不特别彼此区分,包括执行并行处理的多个核的处理器通常被称为“并行处理器”。
并行处理器用在各种领域作为加速器。但是,因为各种类型的加速器是各种制造商制造的且处于各种领域并且开发了用于加速器的进一步的各种语言和框架,在加速器之间共享程序代码较为困难。
为了解决这一问题,OpenCL(开放计算语言)被定义为用于并行处理器的标准框架(非专利文献1:The OpenCL Specication,Ver:1.0,Document Revision:43,Khronos OpenCL Working Group(2009))。在下面描述了OpenCL的概述。
图17是在上述非专利文献1的图3.1中添加附图标记的图,其示出了典型OpenCL系统的平台模型。
如图17中所示,OpenCL系统10包括主机12和一个或多个计算设备(下文中被称为“OpenCL设备”)14。OpenCL设备14对应于上述的加速器。
每个OpenCL设备14包括一个或多个计算单元(下文中被缩写为“CU”)16,并且每个CU 16包括一个或多个处理元件(下文中被缩写为“PE”)18。注意:处理元件PE 18对应于上述的核。
OpenCL应用由在主机12上运行的程序代码和在作为加速器的OpenCL设备14上运行的程序代码组成。在主机12上运行的程序代码被称为“主机代码”,并且在OpenCL设备14上运行的程序代码被称为“内核”。
主机12调用API(应用程序接口)并且指示运算处理。OpenCL设备14执行所指示的运算处理。主机12生成用于管理资源的环境并进一步生成命令队列用于通过OpenCL调停设备操作。“设备操作”包括执行运算处理、操作存储器、获取同步等。
在OpenCL中,内核在N(1≤N≤3)维索引空间中执行作为工作项目(其被简称为“项目”)。例如,如果(4,6)被规定为二维索引空间,总共24(4×6)项目被执行。
为了执行一个项目,使用一个PE。相应地,在并行执行的项目的数目和现有PE的数目相同的情况下,内核在四行乘六列的总共24个PE上执行。
注意:在现有PE的数目小于并行执行的项目的数目的情况下,项 目的并行执行在现有PE上重复。例如,在规定上述(4,6)索引空间的情况下,当只有两行乘三列的总共六个PE时,六个项目的并行执行需要由六个PE重复四次。
进一步,在OpenCL中,引入工作组的概念。工作组是在相同CU 16上执行并且彼此相关的项目的组。相同工作组中的各个项目执行相同的内核并且共享下文将描述的CU 16的局部存储器。
唯一组ID被赋予每个工作组,工作组中唯一的局部ID被赋予每个工作组中的项目。进一步,唯一全局ID也被赋予项目。项目可以被全局ID或组ID与局部ID的组合来标识。
OpenCL设备14执行运算处理的方法是以下面的顺序步骤通过调用API来实现的。
<步骤1>:从主机12向OpenCL设备14传送用于运算处理的参考数据。
<步骤2>:由“内核开始命令”开始在OpenCL设备14上执行内核。
<步骤3>:在完成在OpenCL设备14上执行内核之后,从OpenCL设备14的存储器空间向主机12传送运算处理的结果数据。
结合图18来描述包括存储器空间的OpenCL设备14的配置。图18是在非专利文献1的图3.3中加入参考符合的图。如较早前所述,OpenCL设备14包括一个或多个CU 16且每个CU 16包括一个或多个PE 18。
在上述步骤2中执行内核时,可以在OpenCL设备14中进行对四 个不同存储器的访问。这四个存储器是:专用存储器20、局部存储器22、全局存储器32和常数存储器34。首先,结合图19,基于项目和工作组来描述这四个存储器。注意:图19是非专利文献1中的表3.1。
专用存储器20对应于一个项目且仅用于该项目的执行。为专用存储器20定义的对应于一个项目的变量不能用于另一个项目。
局部存储器22对应于一个组且可以由组中的项目共享。这样,使用局部存储器22的例子是分配由组中项目共享的变量给局部存储器22。
全局存储器32和常数存储器34可以由全部的组中的全部的项目存取。注意:尽管全局存储器32可以被项目存取用于读和写,常数存储器34仅可以被项目存取用于读。下文中,全局存储器32和常数存储器34被统称为设备存储器30。
根据项目和PE 18之间的一一对应,上述四个存储器和CU 16和PE 18之间的对应关系如下。
专用存储器20与PE 18一一对应并且仅能够由对应PE 18存取。
局部存储器22与CU 16一一对应并且能够由对应CU 16中的全部的PE 18存取。
设备存储器30能够由全部的CU 16中的全部的PE 18,即OpenCL设备14中的全部的PE,来存取。
进一步,取决于OpenCL设备14,存在这样一种情况:进一步提供功能为设备存储器30的高速缓存存储器的高速缓存24。
如上所述,不同层级中的多个存储器包括在OpenCL设备14中。这些存储器能够由PE以更高速度存取,因为它们处于更高级别。层级级别以设备存储器30(最低)、局部存储器22(中等)和专用存储器20(最高)的次序提高,来自PE的存取速度在此次序中变得更高。
为了完全带来OpenCL设备14的性能,有必要设计一种机制来在设备存储器30和专用存储器20/局部存储器22之间移动数据,诸如参考在例如移动到高速存储器空间之后频繁使用的数据。
在控制方法与OpenCL设备不同的串行处理器的情况下,也执行全局存储器空间与专用存储器空间之间的数据的移动。这结合图20中所示的串行处理器的示例来描述。
图20中所示的串行处理器50包括作为处理元件的PE 52、专用存储器54、全局存储器56和高速缓存控制机制58。
如其中所示,串行处理器50的存储设备被分为专用存储器54和全局存储器56。专用存储器54是低容量存储器,其物理上为片上,而全局存储器56是高容量存储器,其物理上为片外。
尽管在串行处理器50中,存储设备被分为专用存储器54和全局存储器56,由位于专用存储器54和全局存储器56之间的高速缓存控制机制58来自动地进行专用存储器54和全局存储器56之间的数据移动,串行处理器50的用户将其视为一个大存储器空间。换句话说,串行处理器50的用户容易开发用户程序用于PE 52来执行运算处理而不考虑数据怎样在全局存储器56和专用存储器54之间移动。
在并行处理器中,特别是如图18中所示包括大量核(PE)作为OpenCL设备14的并行处理器中,存在与核的数目具有相同数目的专用存储器20,进一步存在与CU 16的数目具有相同数目的局部存储器 22。由于高硬件成本,由一个高速缓存控制机制一起管理全部的这些存储器通常是不可行的。
另一方面,没有高速缓存控制机制,多个存储器空间被OpenCL系统10的用户(下文简称为“用户”)所看见。如较早前所述,为了通过诸如参考在移动到高速存储器空间(是更高层级存储器空间)之后频繁使用的数据的方案带来更好的性能,有必要由用户程序明确指示运算处理所涉及的不同层级中的存储器之间的数据的移动。为了正确获取它,用户需要知道上述存储器之间在速度、容量、功能等上的差别。结合图21来描述具体示例。
图21是图示说明执行运算处理以从多个数据块(数据块A到D)获得数据块A’和B’的例子的图。注意:在图21中,省略了从主机到设备的内核传送的图示。进一步,数据块A到D是上述步骤1中从主机12传送到OpenCL设备14的参考数据并且存储在全局存储器32中。数据块A’和B’是上述步骤2中针对数据块A到D执行运算处理的结果并且写入到全局存储器32并且随后在步骤3中传送到主机12。
下面描述步骤2的处理,即执行内核的运算处理。注意:在本说明书中,在可以存在多个专用存储器的情况下,它们被称为“专用存储器组”。
如果不追求运算处理的性能,可以利用在运算处理中仅使用全局存储器32而不使用专用存储器组/局部存储器22的技术。在此情况下,在全局存储器32和专用存储器组/局部存储器22之间没有数据传送。
该技术控制简单但性能不好。为了获得更好的运算处理性能,如上所述,利用在将要处理的数据从全局存储器32传送到专用存储器组/局部存储器22之后执行运算处理、然后将运算处理的结果存储到专用存储器组/局部存储器22之后再传送到全局存储器32的技术。
对于使用该技术的情况,首先描述当全部的项目可以同时并行执行时的流程(步骤A到C)。注意:“全部的项目可以同时并行执行”意指PE的数目等于或多于项目的总数目,且专用存储器组和局部存储器的容量能够存储全部的要处理的数据,而且,在这种情况下,要处理的数据从全局存储器32到专用存储器组/局部存储器22的传送、每个PE 18的运算处理的并行执行、处理结果从专用存储器组/局部存储器22到全局存储器32的传送仅执行一次。
<步骤A>:将存储在全局存储器32中的数据块A到D传送到专用存储器组/局部存储器22。
例如,该传送是将要处理的数据中仅由PE 18使用的数据传送到PE 18的专用存储器并且将多个PE 18共享的数据传送到局部存储器22。
注意:从全局存储器32到专用存储器组/局部存储器22的数据传送下面被称为“读传送”。进一步,读传送的数据块,诸如数据块A到D,被称为“读取块RB”。
<步骤B>:对每个PE 18执行运算处理并且将运算处理的结果存储到可由PE 18存取的专用存储器/局部存储器22中。
<步骤C>:将步骤B中由运算处理获得且存储在专用存储器组/局部存储器22中的数据块A’和B’传送到全局存储器32。
注意:从专用存储器组/局部存储器22到全局存储器32的数据传送下面被称为“写传送”。进一步,存储在专用存储器组/局部存储器22中的且被写传送的数据块,诸如数据块A’和B’被称为“写入块WB”。
全部的这三个步骤需要在由用户创建的内核中明确规定。这个规定包括运算处理的内容和取决于OpenCL设备14的配置的内容(PE数目(=专用存储器数目)、每个专用存储器的容量、局部存储器的容量等等)。
例如,在存在多个要被处理的读取块RB且由于全部的项目不能存储在一个工作组中的专用存储器组/局部存储器22中,每个读取块RB需要被分段为子块的情况下,有必要在步骤A中为多个读取块RB规定子块之间的关联方法。读取块RB的子块之间的“关联方法”意指多个读取块RB的子块中的读取块RB的哪些子块要被传送到相同工作组中的专用存储器组或者相同工作组中的局部存储器22。这取决于运算处理的内容,将它们进行分段的方式取决于OpenCL设备14的配置。
类似地,在存在多个写入块WB作为运算处理结果的情况下,也有必要规定关联方法,意指在读取块RB的子块的什么组合之下获得多个写入块WB的各个子块作为处理结果。注意:写入块WB中每个子块的内容是作为处理结果存储在每个工作组的专用存储器组或局部存储器22中的数据。写入块WB到全局存储器32的传送意指将数据写入全局存储器32中的写入块WB的每个子块位置。就像读取块RB的关联方法,写入块WB的关联方法也取决于运算处理的内容和OpenCL设备14的配置。
除了如上所述的全部的所需数据块不能存储在工作组中的存储器中的情况,在PE总数目小于索引空间大小的情况下,例如,全部的项目不能同时并行执行且因此PE对项目的并行执行需要重复多次。结果,因为并行执行被重复,读传送和写传送也需要被重复。在此情况下,有必要根据运算处理的内容和OpenCL设备14的配置来规定数据块的分段方法以及通过划分数据而获得的子块的关联方法。
数据块的“分段方法”意指怎样将数据块分段为子块。“子块SB” 是读传送和写传送的单位。此后,当有必要区分读和写时,通过分段读取块RB而获得的子块被称为“子读取块SRB”,而通过分段写入块WB而获得的子块被称为“子写入块SWB”。
子块SB之间的“关联方法”意指包括在不同读取块或写入块中的哪些子块SB是同时驻留在相同专用存储器组或相同局部存储器22中的。
数据块的分段方法取决于OpenCL设备14的配置,而子块的关联方法取决于运算处理的内容。当分段相对数据块未分段时必要时,规定更加复杂。
图22示出了需要被用户规定来使得OpenCL设备14执行运算处理的描述。
如图22中所示,第一部分是对于读传送的规定,并且其包括取决于运算处理的内容和OpenCL设备14的配置的部分。
取决于运算处理的内容和OpenCL设备14的配置的部分是是否分段读取块RB的规定(示例1)、当分段读取块RB时的分段方法的规定(示例2)以及子读取块SRB之间的关联方法的规定(示例3)。
第二部分是对读取块RB或子读取块SRB的运算处理的规定。因为该部分规定运算处理,所以其当然取决于运算处理的内容。进一步,因为该部分需要符合对于读传送的规定,所以其包含取决于OpenCL设备14的配置的内容,诸如项目的并行执行的次数的规定(示例4)。
第三部分是用于写传送的规定,且其必然包括取决于运算处理的内容和OpenCL设备14的配置的部分(示例5),因为其需要符合用于读传送的规定。
如上所述,为了追求更好性能,用户需要根据运算处理的内容和OpenCL设备14的配置来开发内核(用户代码)。
但是,如果制造商不同,则即使符合OpenCL的设备,在每个存储器空间的容量、存取速度、存取延迟、高速缓存控制存在与否等方面也不同。因此,存在理想地为数据在用于特定OpenCL设备的不同层级的存储器之间的移动而开发的用户代码造成另一OpenCL设备或相同系列的不同代的OpenCL设备的性能退化的可能性。这样,用户代码性能的可移植性较低。
通过考虑许多类型现有OpenCL设备的配置而创建用户代码、而非为特定OpenCL设备开发用户代码,可以实现特定性能可移植性等级。但是,该工作对设计运算处理的人造成较大负担,因为这不是实质性工作,且进一步导致代码易读性下降、复杂度增加等。
专利文献1(日本未审查专利申请公开No.2013-025547)公开了一种用于降低用户代码开发者负担并提高用于OpenCL设备上的运算处理中所涉及的不同层级中多个存储器之间的数据移动的用户代码可移植性的技术。
在该技术中,用户代码的开发者设置包含用于每个要被处理的数据块(读取块和写入块)的多个属性的属性组,作为在OpenCL设备中处理的结果作为内核参数(arguments),OpenCL设备的处理控制单元基于要被处理的每个数据块的属性组来自动地确定传送方法,作为由从主机传送的内核参数所指示的处理的结果,以及指示OpenCL设备的配置的参数,随后通过所确定的传送方法和OpenCL设备的运算处理来控制数据的传送。
注意:传送方法主要涉及怎样在设备存储器和局部存储器及专用 存储器之间传送数据块。
图23示出了当开发应用专利文献1的技术的OpenCL设备中内核时需要由用户规定的描述。如图23中所示,描述仅包括属性组的规定和用户处理的规定,这两个规定都不取决于设备配置。
如图23中所示,属性组被分类为独特属性、运算属性和策略属性的组,每组的属性需要确定传送方法并不取决于OpenCL设备的配置。例如,策略属性包括指示是否将数据块分段为多个子块并且传送子块以及当对其分段时的分段方法的分配属性,指示当将数据块分段成多个子块并且传送子块时与子块一同传送的数据相邻子块的大小的裕度属性,以及指示当将数据块分段成多个子块并且传送子块时子块是否具有与其它相邻子块的依赖性并且当具有依赖性时指示全部的依赖方向的依赖属性。
注意:写入块的属性组的设置基于这样的假设:写入块已经存在于局部存储器或专用存储器且传送到设备存储器。
根据专利文献1中所公开的技术,用户代码(内核)的开发者可以简单地通过规定用于内核所使用的每个数据块的属性组、而不用知道OpenCL设备的配置来实现具有高可移植性的高性能内核。OpenCL设备的运算控制单元可以执行控制以基于内核所指的每个数据块的属性组和OpenCL设备的配置将数据块分段成最适合设备的大小并且重复“读传送→内核的运算处理→写传送”的重复性处理,重复次数等于分段数目。设备的运算控制单元由很好地了解OpenCL设备的配置的专家来设计,例如,也就是OpenCL设备的制造商中的开发者。
发明内容
考虑接连地执行的两个内核相互有关的情况。例如,假设第一内核X首先执行,并且数据块作为处理结果被用作随后执行的第二内核 Y的输入数据。注意:每个数据块通过被分段为子块而传送。
在专利文献1(日本未审查专利申请公开No.2013-025547)中公开的OpenCL设备的例子中,考虑流程如下。
<步骤X1>
主机传送第一内核X到设备。第一内核X的参数(arguments)包括上述的用于每个数据块(读取块)的属性组,用于第一内核X的运算处理。
<步骤X2>
设备的运算控制单元确定传送方法,包括基于第一内核X的参数而存储在全局存储器中的读取块以及作为处理结果的写入块中每个的分段方法。然后,其将每个读取块分段成子读取块并将它们传送到局部存储器或专用存储器并且使得PE执行运算处理。
<步骤X3>
设备中每个PE根据运算控制单元的控制而执行运算处理并且获得子写入块。子写入块存储在局部存储器或专用存储器中,并且然后根据运算控制单元的控制从PE传送到全局存储器。
<步骤X4>
步骤X2和X3的处理在运算控制单元的控制下重复,直到全部的处理都完成。最后,获得作为第一内核X的处理结果的数据块(写入块)并存储在全局存储器中。
在完成第一内核X的处理之后,如下执行第二内核Y的处理。
<步骤Y1>
主机传送第二内核Y到设备。第二内核Y的参数包括上述的用于 每个数据块(读取块)的属性组,用于第二内核Y的运算处理。
在第一内核X的写入块中的特定写入块用于第二内核Y的运算处理的情况下,在第二内核Y的参数中,属性组也规定用于对应于写入块的第二内核Y的读取块。下文中,作为首先执行的内核的写入块且作为随后执行的内核的读取块的数据块被称为“连续写入块”,而作为随后执行的内核的读取块且作为首先执行的内核的写入块的数据块被称为“连续读取块”。
<步骤Y2>
设备的运算控制单元基于第二内核Y的参数确定传送方法,其包括存储在全局存储器中的读取块(包括连续读取块)和作为处理结果的写入块中每个的分段方法。然后,其将每个读取块分段为子读取块并且将其传送到局部存储器或专用存储器并且使得PE执行运算处理。
<步骤Y3>
设备中每个PE根据运算控制单元的控制执行运算处理并且获得子写入块。子写入块存储在局部存储器或专用存储器中,然后根据运算控制单元的控制从PE传送到全局存储器。
<步骤Y4>
在运算控制单元的控制下重复步骤Y2和Y3的处理,直到全部的处理完成。最后,获得作为第二内核Y的处理结果的数据块(写入块)并且被存储到全局存储器中。
如在上述流程中,当存在连续写入块时,执行连续写入块的子写入块到全局存储器的传送(写传送)和对应于连续写入块的连续读取块的子读取块到局部存储器/专用存储器的传送(读传送)。
如果连续写入块的子写入块可以用于下一内核作为已经通过读传 送而传送到专用存储器/局部存储器的子读取块,则可以通过使用用于下一内核的连续写入块而不将其从局部存储器/专用存储器传送到全局存储器来减少写传送和读传送,并且有可能改善OpenCL设备的处理效率。
通过说明书和附图的描述,本发明的其它问题和新颖特征将变得明显。
一个实施例是运算控制方法,其控制OpenCL设备中多个处理元件的并行运算并且包括第一步骤和第二步骤。
第一步骤是这样的步骤:获取并存储为一个或多个读取块和一个或多个写入块中每个设置的属性组,所述读取块存储在OpenCL设备的最低层级的存储器(例如全局存储器)中,所述写入块从不同层级的存储器(例如专用存储器或局部存储器)传送到最低层级的存储器。
第二步骤是这样的步骤:基于第一步骤中存储的属性组和指示OpenCL设备的配置的配置参数中的每个确定读取块和写入块中每个的传送方法,并且根据所确定的传送方法和对应于传送的对并行处理的控制执行读取块和写入块的传送。
读取块是从最低层级存储器传送到不同层级存储器作为要用于并行处理的数据的数据块。写入块是在并行处理之后作为第一个或多个读取块的并行处理的结果而从不同层级存储器传送到最低层级存储器的数据块。
属性组包括确定传送方法所需且不取决于OpenCL设备的配置的多个属性,并且例如其包括分配属性、裕度属性和依赖性属性。
分配属性指示是否将数据块分段为多个子块以及将子块传送并且 当对数据块分段时指示分段方法。
当将数据块分段成多个子块并且传送子块时,裕度属性指示与子块一起传送的与子块相邻的数据的大小.
当将数据块分段成多个子块并且传送子块时,依赖性属性指示子块是否具有与其它相邻子块的依赖性并且当存在依赖性时指示全部的依赖方向.
注意:基于以下假设来设置写入块的属性组:写入块已经存在于不同层级的存储器中且传送到最低层级的存储器。
第二步骤进一步包括下面的步骤:当在OpenCL设备中接连地执行第一内核和第二内核时,对应于第一内核的并行处理的写入块包括用作对应于第二内核的并行处理的读取块的连续写入块,并且设置用于第一内核的连续写入块的分配属性与设置用于第二内核的对应于连续写入块的读取块的(连续读取块)分配属性相同,通过使用连续写入块以流水线执行第一内核和第二内核,执行流水线控制,以便通过不同层级的存储器执行第二内核而不传送连续写入块到最低层级。
在流水线控制步骤中,按逻辑地将设置用于第二内核的对应于连续写入块的读取块的裕度属性和依赖性属性分别加到对应于第一内核的每个读取块的设置用于读取块的裕度属性和依赖性属性。
注意,根据上述实施例的方法实现为执行该方法的设备或系统、OpenCL设备、使得计算机执行该方法的程序等,也有效地作为本发明的方面。
根据上述实施例,能够改善OpenCL设备的处理效率。
附图说明
根据下面结合附图对特定实施例的描述,上述和其它方面、优点和特征将更加显然,在附图中:
图1是根据一个实施例示出OpenCL系统的图。
图2是示出图示说明单内核情况的特定示例的图。
图3是图示说明读属性的图。
图4是图示说明裕度属性的图。
图5是图示说明广播属性的图。
图6是图示说明分配属性的图。
图7是图示说明分配属性的另一图。
图8是图示说明依赖属性的图。
图9是示出用于图2中为所示的每个数据块设置的属性组的示例的图。
图10是指示图1中所示的OpenCL系统中的运算单元的配置的参数的示例。
图11是示出层级中与层级间关联的图。
图12是示出由图2中所示的示例上的场景确定单元所确定的描述的一部分的图。
图13是图示说明在接连地执行两个相关内核时执行的流水线控制的图。
图14是图示说明在接连地执行两个相关内核时执行的流水线控制的另一图。
图15是比较不执行流水线控制时和执行流水线控制时的每个数据块的传送的图。
图16是比较不执行流水线控制时和执行流水线控制时的内核的执行的图。
图17是示出OpenCL系统的平台模型的图。
图18是示出OpenCL设备的配置的图。
图19是图示说明OpenCL设备中每个存储器的图。
图20是示出串行处理器的示例的图。
图21是图示说明专利文献1中所公开的技术所解决的问题的图。
图22是图示说明专利文献1中所公开的技术所解决的问题的另一图。
图23是示出在专利文献1中需要由用户在OpenCL设备中规定的描述的图。
具体实施方式
下面将结合附图来解释本发明的示例实施例。下面的描述和附图被适当缩短和简化以澄清解释。进一步,图中示出为用于执行各种处理的功能性块的元素可以通过CPU、存储器或其它电路配置为硬件或者可以通过加载到存储器等中的程序实现为软件。因此,本领域技术人员将明白,这些功能性块可以以各种形式实现,诸如仅硬件、仅软件或者上述组合,而不限于任何一个。注意:在图中,相同要素被标以相同附图标记并且适当地省略了对其的冗余描述。
进一步,上述程序可以使用任何类型的非瞬时计算机可读介质而存储并提供给计算机。非瞬时计算机可读介质包括任何类型的有形存储介质。非瞬时计算机可读介质的示例包括磁存储介质(诸如软盘、磁带、硬盘驱动器等等)、光磁存储介质(例如磁光盘)、CD-ROM(只读存储器)、CD-R、CD-R/W以及半导体存储器(诸如掩模ROM、PROM(可编程ROM)、EPROM(可擦写PROM)、闪存ROM、RAM(随机存取存储器)等等)。程序可以使用任何类型的瞬时计算机可读介质提供给计算机。瞬时计算机可读介质的示例包括电信号、光信号和电磁波。瞬时计算机可读介质可以经由诸如电线或光纤的有线通信线路或无线通信线路提供程序给计算机。
图1示出了根据一个实施例的OpenCL系统100。OpenCL系统100包括OpenCL主机(下面被简称为“主机”)110和OpenCL设备(下面被称为“设备”)120。
设备120包括运算控制单元200和运算单元140。运算控制单元200包括属性组存储单元210、内核间信息存储单元220和场景确定单元230。运算单元140包括设备存储器150、多个计算单元(CU)160和提供用于每个CU 160的局部存储器170。
设备存储器150包括全局存储器152和常数存储器154。每个CU 160包括多个PE 162和提供用于每个PE 162的专用存储器164。
注意:全局存储器152、常数存储器154、CU 160、PE 162、专用存储器164和局部存储器170与正常OpenCL设备中的同名的那些相同,省略对其的详细描述。
当主机110使得设备120执行运算处理时,其将对应于由用户规定参数的运算处理的内核传送到设备120。
在设备120中,内核间信息存储单元220存储指示要被接连地执行的多个内核之间的数据块的依赖性的信息(被称为“内核间数据块依赖性信息”)。该信息可以由用户直接输入到内核间信息存储单元220或者可以通过被包含在内核参数中同多个内核中的一个内核(例如要被首先执行的内核)一起被从主机110传送到设备120然后存储在内核间信息存储单元220中。
内核间数据块依赖性信息指示首先执行的内核的写入块是否包括被用作随后执行的内核的读取块,以及,当存在这样的写入块时,例如指示连续写入块和连续读取块之间的对应关系。
注意:在单内核的情况下,内核间数据块依赖性信息指示“无依赖性”。单内核意指内核与另一内核无关,且内核要处理的读取块不是作为另一内核的处理结果的写入块,而内核的写入块也不用作另一内核的读取块。
运算控制单元200基于内核所指示的来自主机110的运算内容、属性组存储单元210中存储的每个属性组和内核间信息存储单元220中存储的内核间数据块依赖性信息来控制运算单元140。运算单元140根据运算控制单元200的控制来执行运算处理并且获得处理结果。运算单元140所执行的运算处理涉及要处理的数据从设备存储器150到专用存储器164/局部存储器170的传送(读传送)和处理结果的数据向设备存储器150的传送(写传送)。
因为要被处理的数据和处理结果的数据这二者通常都存储在全局存储器152中,所以下面的描述基于以下假设:“读传送”和“写传送”是全局存储器152和专用存储器164/局部存储器170之间的传送。注意:在要处理的数据存储在常数存储器154中的情况下,“读传送”包括从常数存储器154到专用存储器164/局部存储器170的传送。
<单内核情况>
为了更好理解,参考图2中所示的特定示例来描述执行单内核的情况。
在此情况下,指示“无依赖性”的内核间数据块依赖性信息存储在内核间信息存储单元220中。OpenCL系统100中的处理与专利文献1中所公开的OpenCL系统中的处理相同。
下面描述中的术语“维度”对应于上述的索引空间的维度。尽管在OpenCL中对于索引空间而言最大规定三维,但是使用二维作为示例以便于描述。
如图2中所示,用户所希望的处理是由下面的公式(1)所表示的处理。
R(x,y)=Σ[Pi*Q(x,(y+i))](i=0~8)
要被处理的数据是包含在读取块P和读取块Q中的每个数据。处理结果的数据是包含在写入块R中的每个数据。在图2的示例中,仅有一个写入块R。
用于实现公式(1)所表示的处理的内核当然是由用户创建的。内核的创建包括创建由设备120的每个PE 162执行的程序代码的处理(下面被称为“用户规定处理”)和规定参数的处理。
在根据该实施例的OpenCL系统100中,除了在OpenCL中定义的参数,还支持包括八个属性的“属性组”。这八个属性是:“大小属性”、“读属性”、“写属性”、“裕度属性”、“广播属性”、“分配属性”、“层级属性”和“依赖性属性”,由用户为全部的读取块和写入块来规定作为内核的参数。注意:当规定属性时,并不总是有必要规定全部的八个属性。
属性组中包括的八个属性是需要被参考以便确定全局存储器152和专用存储器164和/或局部存储器170之间的传送方法(传送方法)的参数。下面,除非特别描述,“传送”意指全局存储器152和专用存储器164和/或局部存储器170之间的传送。
“传送方法”包括以下:
(1)传送方法1:分段的存在与否
传送方法1是“无分段”方法或“分段”方法之一。
对于读取块,“无分段”意指一次读传送就传送读取块中的全部的数据,而“分段”意指将读取块分段成多个子读取块SRB并且一次读传送仅传送一个子读取块SRB到一个工作组。
对于写入块,“无分段”意指一次写传送就传送写入块中全部的数据(处理结果)到全局存储器152,而“分段”意指将写入块分段成多个子写入块SWB并且一次写传送只从一个工作组传送一个子写入块SWB。
(2)传送方法2:分段方法
传送方法2意指怎样将数据块分段成多个子块。
(3)传送方法3:分配方法(子读取块SRB的关联方法)
当上述的传送方法1是针对读取块的“分段”时规定传送方法3。
具体地,分配方法指示当存在多个读取块时怎样分配从每个读取块一次读传送而传送到专用存储器164/局部存储器170的每个子读取块SRB。另一方面,当只有一个读取块时,分配方法是将子读取块SRB平等地分配给专用存储器164/局部存储器170。
(4)传送方法4:集成方法(子写入块SWB的关联方法)
当上述的传送方法1是针对写入块的“分段”时规定传送方法4。
注意:“集成”意指写入全局存储器152中分配给写入块的每个子写入块SWB的区域。
集成方法指示,当有多个写入块时,如何将通过一次写传送而传送并存储在专用存储器组/局部存储器170中的多个子写入块SWB集成为各个写入块。当只有一个写入块时,集成方法是将存储在专用存储器组/局部存储器170中的写入块的每个子写入块SWB的数据集成到一个写入块中的方法。
在现有系统中,上述的“传送方法”需要由用户代码来规定。但 是,用户代码是复杂的,因为其取决于运算处理的内容和设备120(具体地,运算单元140)的配置,并且极端难以保持可移植性。
另一方面,根据该实施例的OpenCL系统100将处理划分为取决于OpenCL设备的配置的处理和不取决于其的处理,并且基于由不取决于OpenCL设备的处理所规定的参数以及指示OpenCL的配置的参数来自动地确定取决于OpenCL设备的处理,尽管在现有系统中每个用户已经花费处理时间来考虑到运算处理的内容和OpenCL设备的配置而每次即兴确定传送方法。
具体来说,在根据该实施例的OpenCL系统100中,不取决于OpenCL设备的处理对应于上述的关于数据块的属性组的规定。尽管属性组中的属性是确定传送方法所需的参数,它们不取决于OpenCL的配置。这在下面详细描述。注意:在下面的描述中,每个属性是“确定传送方法所需但不取决于OpenCL的配置”的陈述不会重复,只描述与之不同的元素。
上述的八个属性进一步被分类为三类:“独特属性”、“运算属性”和“策略属性”。下面参考图2中所示的数据块的示例来描述它们。
“独特属性”是与运算处理和用户意图无关而只与数据块有关的属性。在这个实施例中,“独特属性”是下面描述的“大小属性”。
<大小属性>
该属性是指示数据块的大小的参数,例如,其是每个维度的字的数目以及每个字的字节数或比特数。该属性必然具体用于全部的数据块。
因此,读取块P、读取块Q和写入块R的大小属性如下。
读取块P是二维数据块,X方向大小Lx和Y方向大小Ly都是三个字。注意:在读取块P中,一个字的比特数是八比特。因此,对于读取块P,规定“X方向大小:Lx:3,Y方向大小Ly:3,比特/字数:8”作为大小属性。
类似地,对于读取块Q,规定“X方向大小Lx:640,Y方向大小Ly:480,比特/字数:16”。
进一步,对于写入块R,规定“X方向大小Lx:640,Y方向大小Ly:480,比特/字数:32”。
“运算属性”是与用户意图无关但与运算处理的内容有关的属性。在这个实施例中,“运算属性”包括下面所述的“读属性”和“写属性”。规定运算属性基于以下假设:每个数据块被分段成一个或多个子块。对于写入块,进一步增加附加的假设:读取块已经存在于专用存储器组/局部存储器上。注意:“数据块被分段成一个子块”意指其没有被分段。
<读属性>
该属性指示数据块是否是要被处理的数据(即,要被读传送的数据)以及,当它是要被处理的数据时,指示传送的次序。传送的次序是规定数据块的子块要以什么次序被传送的参数。
因为写入块不是读传送的,所以规定指示没有读传送的“无”。因为读取块是读传送的数据块,所以为读传送规定传送的次序。
在根据该实施例的OpenCL系统100中,作为设定为读属性的传送的次序,规定了“左上”、“右下”和“随机”。注意:只有当规定“随机”时,额外规定指向存储指示传送次序的信息的区域的指针。
“左上”指示从左上子块开始传送数据,“右下”指示从右下子块开始传送数据。图3示出当规定“左上”为读属性时子块的传送次序。
如图3中所示,在此情况下,在全局存储器152中存储的数据块(读取块)中,传送次序是:左上的子块1、子块1右边的子块2、子块2右边的子块3等等。
下面描述图2中所示的数据块的读属性。
基于公式(1)所表示的运算处理的内容,因为读取块P和读取块Q是要被读传送的数据,所以规定传送次序“左上”为读属性。
另一方面,因为写入块R不是要被读传送的数据,所以规定“无”作为读属性。
<写属性>
该属性指示数据块是否是作为运算处理结果的数据(即要被写传送的数据)并且,当它是处理结果数据时,指示传送次序。传送次序是规定要以什么次序来传送子写入块SWB的参数。
因为读取块不被写传送,所以规定指示无写传送的“无”。因为写入块是被写传送的数据块,所以对写传送规定传送次序。
在根据该实施例的OpenCL系统100中,作为设定为写属性的传送的次序,可以规定“左上”、“右下”和“随机”。注意:只有当规定“随机”时,额外规定指向存储指示传送次序的信息的区域的指针。
因为读取块不是写传送的,所以规定指示没有写传送的“无”。因此,规定“无”作为图2中所示的读取块P和读取块Q中的写属性。
因为写入块是写传送的数据块,所以为写传送规定传送次序。传送次序是规定要以什么次序来传送数据块的子写入块的参数。
在根据该实施例的OpenCL系统100中,作为设定为写属性的传送的次序,可以规定“左上”、“右下”和“随机”,就像设置为读属性的传送次序一样。只有当规定“随机”时,额外规定指向存储指示传送次序的信息的区域的指针。
被设置为写属性的传送次序的每个参数的意思与被设置为读属性的传送次序的对应参数相同,因此省略对其的详细描述。
描述图2中所示的数据块的写属性。
基于公式(1)所表示的运算处理的内容,因为写入块R是要被写传送的数据,所以规定传送次序“左上”作为写属性。
另一方面,因为读取块P和读取块Q不是要被写传送的数据,所以规定“无”作为写属性。
“策略属性”是与运算处理的内容和关于怎样执行传送和运算处理的用户意图有关的属性。在根据该实施例的OpenCL系统100中,“策略属性”包括“裕度属性”、“广播属性”、“分配属性”、“层级属性”和“依赖性属性”。规定策略属性还基于以下假设:每个数据开被分段成一个或多个子块。对于写入块,进一步增加附加的假设:写入块已经存在于专用存储器20/局部存储器22上。注意:“数据块被分段成一个子块”意指其没有被分段。
<裕度属性>
该属性是用于读取块的参数,并且其指示子读取块SRB以外、邻近与子读取块SRB的边界并且与子读取块SRB中数据一起传送的数据的量。对每个维度规定裕度属性。裕度属性的参数是以字为单位规定的。
注意:对于写入块,不能规定裕度属性,或者即使可以规定也得忽略。
图4示出在规定X方向“1”和Y方向“2”作为裕度属性的情况下,当传送数据块(读取块)的每个子读取块SRB时的传送范围。在此情况下,当传送每个子读取块SRB时的传送范围除了子读取块SRB中的数据外,还包括一列的数据和两行的数据,其中一列的数据每个都邻近子读取块SRB的左边界和右边界,两行的数据每个都邻近子读取块SRB的上端边界和下端边界。注意:图4中,位于数据块顶部的子读取块SRB被示出为示例并且没有邻近子读取块SRB的上边界的数据,因此当传送每个子读取块SRB时的传送范围不包括邻近上边界的数据。
如稍后详细描述的,在根据该实施例的OpenCL系统100中,对于每个读取块,通过一次读传送为一个CU 160传送一个子读取块SRB,且CU 160执行对通过一次读传送而传送到CU 160的专用存储器/局部存储器的每个子块的子读取块SRB的运算处理。然后,运算处理的结果被作为每个写入块的一个子块从CU 160传送到全局存储器。
例如,在针对两维图像执行3×3卷积处理的情况下,在目标像素的四个方向上(上、下、左、右),需要邻近目标像素的一个像素。如果只传送子读取块SRB中的数据,则不可能对位于子读取块SRB的最外部分的每个像素执行运算处理。因此,在此情况下,有必要规定“1”为X方向和Y方向上的裕度属性。
描述图2中所示的数据块的裕度属性。注意:因为对裕度属性的规定与其它属性的规定有关,所以难以只描述裕度属性。因此,只描述了为图2中所示的每个数据块规定的裕度属性的值,并且稍后描述这些值的含义的细节。
尽管读取块P和读取块Q是要被规定裕度属性的数据,对于读取块P,在X方向和Y方向上,裕度被设置为“0”。进一步,对于读取块Q,X方向上裕度被设置为“0”,并且Y方向上被设置为“9”。
因此,在读取块P的传送中,只传送子读取块SRB中的数据。另一方面,在读取块Q的传送中,除了子读取块SRB中的数据外,还传送邻近子读取块SRB的下端的九行数据。
因为写入块R是要被写传送的数据,所以没有规定裕度属性。因此,在写入块R的传送中,只传送子写入块SWB中的数据。
<广播属性>
该属性是规定每个读取块的子读取块SRB的传送目的地或者每个写入块的子写入块SWB的传送源是专用存储器组和局部存储器中的哪个的参数,其可以是“打开”或“关闭”。例如,如图5中所示,广播属性“打开”规定局部存储器作为传送目的地或传送源,并且广播属性“关闭”规定专用存储器作为传送目的地或传送源。
描述图2中所示的数据块的广播属性。注意:因为广播属性的规定还与其它属性有关,所以难以只描述广播属性。因此,只描述了为图2中所示的每个数据块所规定的广播属性的值,并且稍后描述这些值的含义的细节。
对于读取块P,广播属性被设置为“打开”。因此,在读取块P 的传送中,每个子读取块SRB被传送到局部存储器170。
对于读取块Q和写入块R,广播属性被设置为“关闭”。因此,在读取块Q的传送中,每个子读取块SRB被传送到专用存储器164。进一步,写入块R的子写入块SWB被从专用存储器组传送到全局存储器152。
<分配属性>
该属性是指示怎样分配子读取块SRB和子写入块SWB到CU 160的专用存储器组/局部存储器的参数。
在根据该实施例的OpenCL系统100中,支持两种分配方法,“长度优先”和“宽度优先”。
在详细描述分配属性之前,描述工作组大小WG和分配给一个项目的数据量。
对应于具有广播属性“关闭”的数据块的“工作组大小WG”是一个工作组中项目的数目所表示的数据量,而且,例如,当项目数目为N时,工作组大小WG是N个字。换句话说,对应于具有广播属性“打开”的数据块的工作组大小WG总是被视为1。下面,对应于具有广播属性“关闭”的数据块的“工作组大小WG”被简称为工作组大小WG。尽管工作组大小WG稍后由设备120中的运算控制单元200的场景确定单元230来确定,用户可以规定在创建内核时采用其最大值和最小值中的哪个。
进一步,分配给一个项目的数据量也由场景确定单元230来确定。工作组大小WG采用最小值的情况是当一个项目对应于一个PE时。另一方面,在OpenCL设备能通过将PE的专用存储器分段成M(M是2或更大的整数)块使得M个项目对应于一个PE来规定最大M倍的工 作组大小WG时,最大值是最小值的M倍。另一方面,在使用工作组大小WG的最大值的情况下,每一个PE的专用存储器是当使用工作组大小WG最大值时的M分之一。下面,为了简化描述,假设场景确定单元230总是使用工作组大小WG的最小值,并且因为一个项目对应于一个PE,所以在下面描述中,用术语“PE”用来替换术语“项目”。
“长度优先”是以下方法:分配数据块使得子块的X方向上的大小(SBsx)为工作组大小WG,并且Y方向上的大小(SBsy)为分配给一个项目的数据量,该数据量是分配给一个PE的数据量。
规定“长度优先”作为分配属性的数据块中的每个子块在全局存储器152和专用存储器164之间传送,使得一个子块对应于一个工作组,而子块中的一列数据对应于工作组中一个PE 162的专用存储器164。
图6示出了规定“长度优先”作为分配属性的读取块情况的示例。在此情况下,每个子读取块SRB从全局存储器152传送到专用存储器164,使得子读取块SRB中的全部的数据被存储到相同工作组的PE 162的专用存储器164中,而子块中相同列的数据被存储到相同PE 162的专用存储器164中。
“宽度优先”是以下方法:分配数据块使得子块的X方向上的大小SBsx为工作组大小WG的整数倍。注意:子块的Y方向上的大小SBsy稍后由场景确定单元230确定。
在规定“宽度优先”作为分配属性的数据块中的每个子块中,一个子块对应于一个工作组,而子块中的全部的数据被传送到包括在相同工作组中的PE 162的专用存储器164。进一步在子块的每行中,通过以工作组大小WG的量分段每行所获得的整数个分段块的数据被均等地分布到对于每个分段块的相同工作组中WG个PE162的专用存储 器164。
图7示出了规定“宽度优先”作为分配属性的读取块的情况的示例。注意:在这个示例中,子写入块SWB的Y方向上的大小SBsy是一个字。这样,该读取块被分段使得子读取块SRB的X方向上的大小SBsx为工作组大小WG的整数倍且行数为1。
如本图中所示,在此情况下,读取块的每个子读取块SRB被传送,使得子读取块SRB中的全部的数据被存储在相同工作组中的PE 162的专用存储器164中。进一步,其被传送,使得通过在行方向上以工作组大小WG的量来分段子读取块SRB所获得的整数个分段块的数据被均等地分布到对于每个分段块的相同工作组中的WG个PE 162的专用存储器164。例如,从数据1到数据a之前一个的数据的多个数据构成一个分段块且被传送,使得它们被存储在相同工作组中的多个PE 162的专用存储器164中。进一步,从数据a到数据j之前一个的数据的多个数据也构成一个分段块且被传送,使得它们被存储到相同工作组中的多个PE 162的专用存储器164中。
描述图2中所示的数据块的分配属性。注意:由于分配属性的规定也与其它属性的规定有关,难以只描述分配属性。因此,只描述了为图2中所示的每个数据块所规定的分配属性的值,稍后描述这些值的含义的细节。
假设规定“长度优先”作为读取块P的分配属性,并且规定“长度优先”也作为读取块Q和写入块R的分配属性。
<层级属性>
该属性是一个或多个自然数所规定的层级数目。在规定相同层级数目的多个读取块中,通过一次读或写传送来传送每个子块SB。
描述图2中所示的数据块的层级属性。注意:因为层级属性的规定还与其它属性的规定有关,所以难以只描述层级属性。因此,只描述为图2中所示的每个数据块规定的层级属性的值,并且稍后描述这些值的含义的细节。
对于读取块P和读取块Q分别规定层级属性为“2”和“1”。进一步,对于写入块R规定层级属性为“1”。
<依赖性属性>
该属性是指示数据块的子块和邻近该子块的八个其它子块之间的依赖性的参数,并且可以规定“依赖”或“无依赖”。对于“依赖”,可以进一步规定三个类型的依赖性。
有三个类型的“依赖性”:R1、R2和R3。结合图8来描述它们。注意,在图8中,虚线所环绕的区域指示子块SB,并且数字指示传送的次序。
图8示出了在规定分配属性和读属性分别为“长度优先”和“左上”的情况下R1到R3依赖性。
如图中所示,在此情况下,在从目标子块SB观看存在与上方子块SB的依赖性的情况下规定“R1依赖性”。在从目标子块SB观看存在与上方、左上和左方子块SB的依赖性的情况下规定“R2依赖性”。在从目标子块SB观看存在与八个相邻子块中的排除下方和下方写入块的六个子块SB的依赖性的情况下规定“R3依赖性”。
描述图2所示的数据块的依赖性属性。注意:因为依赖性属性的规定也与其它属性有关,所以难以只描述依赖性属性。因此,只描述为图2中所示的每个数据块规定的依赖性属性的值,而在稍后描述这些值的含义的细节。
在这个示例中,对全部的读取块P、读取块Q和写入块R规定依赖性属性为“无”。
上面描述了在根据该实施例的OpenCL系统100中支持的八个属性。全部的这八个属性不取决于设备120中的运算单元140的配置。为图2中所示的三个数据块的每个设置的属性组在图9中总结示出,以便更简单地理解稍后提供的描述。
在根据该实施例的OpenCL系统100中,从主机110传送到设备120的内核的参数包括规定用于要被处理的数据块和作为处理结果的数据块中的每个的上述的属性组。设备120的运算控制单元200中的属性组存储单元210存储这样属性组并且将它们提供给场景确定单元230。
场景确定单元230基于存储在属性组存储单元210中的属性组中的每个来确定稍后描述的传送场景(下面也被简单称为“场景”),并且进一步基于所确定的场景来控制运算单元140的运算处理和在运算处理中涉及的数据的传送。注意:在上述控制期间,场景确定单元230重复地发射指令集到运算单元140。指令集包括读传送指令R、运算执行指令S和写传送指令W。进一步,指令集的一次发射意指以该次序发射读传送指令R、运算执行指令S和写传送指令W。
在运算单元140中,响应于来自运算控制单元200的读传送指令R来执行读传送。
接下来,响应于来自运算控制单元200的运算执行指令S,由运算单元140的PE 162针对已经通过响应于读传送指令R执行的读传送而已经存储在专用存储器164/局部存储器170中的数据执行运算处理。作为处理结果的每个数据被存储到每个PE 162的对应专用存储器164/ 局部存储器170中。
然后,响应于来自运算控制单元200的写传送指令W,存储在专用存储器164/局部存储器170中的数据(处理结果)被通过写传送而传送到全局存储器152。
下面描述场景确定单元230的场景确定处理。
场景确定单元230基于存储在属性组存储单元210中的属性组和指示运算单元140的配置的参数来确定场景。场景对应于传送方法。
下面描述场景确定单元230的操作。在下面的描述中,图2中所示的示例被用于运算处理和数据块。注意:假设对于图2中所示的每个数据块,属性组被设置如图9中所示,并且存储在属性组存储单元210中。进一步,指示运算单元140的配置的参数的示例在图10中示出。
在属性的上面的描述中,假设一个项目对应于一个PE以便于理解。在下面的描述中,假设一个PE可以对应于一个或多个项目。
场景确定单元230根据下面所述的规则执行对传送方法的确定以及根据所确定传送方法来执行对运算处理的控制。
<规则1>
场景确定单元230首先针对全部的数据块设置公共工作组大小WG并且进一步确定数据块的分段大小和重复数目,使得具有相同层级属性的多个数据块被分段为具有公共分段数目的子块。
“分段大小”指示子块的大小,并且“分段数目”指示通过分段一个数据块所获得的子块的数目。当分段数目为1时,这意指数据块 没有被分段。进一步,“重复数目”指示传送数据块的全部的子块所需的传送的数目。
数据块大小、分段大小、分段数目、工作组大小WG、重复数目等具有由下面的公式(2)到(5)所表示的关系。
(2)数据块大小=X方向大小Lx×Y方向大小Ly
(3)分段大小=子块的X方向大小SBsx×Y方向大小SBsy
(4)分段数目=数据块大小÷(分段大小×工作组大小WG)
(5)重复数目=分段数目×(X方向大小Lx÷工作组大小WG)/WG的数目
场景确定单元230确定工作组大小WG和分段大小(确切地说,子块的Y方向大小SBsy),使得对于广播属性为“关闭”的数据块中的读属性不为“无”的数据块(读取块)或写属性不为“无”的数据块(写入块)中的每个,分段大小和当规定裕度属性时的裕度总量(或者,当没有规定裕度属性时为“0”)之和不超过每个项目的专用存储器的可用容量的总值,满足具有相同层级属性的数据块被分段成相同分段数目的限制。注意:基于满足上述限制的假设,如果有目标OpenCL设备的推荐工作组大小WG,则可以使用该工作组大小WG,而如果设置了工作组大小WG的上限和下限,则在上限和下限所限定的范围内确定工作组大小。
<规则2>
传送包括同时具有相同层级属性的读取块的对应子读取块SRB的子读取块SRB组到专用存储器或局部存储器空间,并且开始用户规定处理。当通过裕度属性为要传送的子读取块SRB规定裕度时,也传送裕度的数据。
<规则3>
在传送对应子读取块SRB的子读取块SRB组到专用存储器或局部存储器空间,次数为具有不同层级属性的数据块的分段数目的倍数之后,开始用户规定处理。
例如,当假设具有层级属性“1”的读取块的分段数目为N且具有层级属性“2”的读取块的分段数据为M时,场景确定单元230操作为调用用户规定处理NxM次数。进一步,在每次调用之前,将子读取块SRB的一种类型的组合传送到专用存储器或局部存储器空间。
场景确定单元230确定子块的关联方法(上述的传送方法中的分配方法和集成方法),然后执行传送。如图12中所示,在相同层级的数据块的子块和不同层级的数据块的子块之间的关联方法不同。
<规则4>
在每次开始用户规定处理之后,传送子写入块SWB作为运算处理的结果到全局存储器空间。子写入块SWB的传送是在开始用户规定处理之后执行的,且其与子读取块SRB的情况相同,除了传送的方向是“从专用存储器和/或局部存储器空间到全局存储器空间”。
图11示出了由场景确定单元230基于为图9中所示的读取块P、读取块Q和写入块R所规定的属性组和图10中所示的运算单元140的配置而确定的工作组大小WG、长度方向分段大小(子块的Y方向大小SBsy)和重复数目的示例。
场景确定单元230首先暂时确定运算单元140的工作组大小WG(32)。当具有层级属性“1”的每个数据块的分段数目为4时,对于每个项目,读取块Q所占用的专用存储器为0.258KB(“129x2B”)。注意:129是通过将裕度属性所规定的Y方向上的9加到“读取块Q的Y方向大小Ly(480)/分段数目(4)”(长度方向分段大小)所获得的值。类似地,对于每个工作项目WI,写入块R所占用的专用存储器被 获得为0.738KB(“(480/4)x4B”)。
因为每个项目的读取块Q和写入块R所占用的专用存储器之和小于指示运算单元140的配置的参数(图10)中的每个项目的专用存储器容量(1KB),所以满足规则1,并且确定读取块Q和写入块R的工作组大小WG和分段大小。进一步,通过上述的公式(6)计算重复数目为“5”。
进一步,将具有层级属性“2”的读取块P分配给局部存储器,因为广播属性为“打开”。进一步,因为其大小(3×3=9)小于每个工作组WG的局部存储器容量4KB,所以其被传送到局部存储器而不分段(重复数目:1)。
最后,总结在存在具有依赖性属性“依赖”的数据块的情况下的场景确定单元230的操作。为了更容易理解下面的描述,将每个数据块被分段为各个分段大小并关联的子块组称为“子块集”。
在子块集之间子块依赖的情况下,场景确定单元230控制重复次序,使得在处理依赖子块集之后,处理被依赖的子块集。假设子块集M0中的一个子块MX具有与子块集M1中的一个子块MY的依赖性且子块MX是定义源,子块集M0和M1相依赖,M0是依赖于M1的子块集而M1是被M0依赖的子块集。
如上所述,OpenCL系统100执行针对单内核的处理。注意:在依次有多个单内核的情况下,OpenCL系统100为每个内核重复上述的处理。
<在两个相关内核的情况下>
假设两个内核是第一内核X和第二内核Y。两个内核彼此相关意指连续写入块包括在写入块中作为首先执行的第一内核X的处理结果 且连续写入块被用作后续第二内核Y的要被处理的读取块。换句话说,连续读取块包括在第二内核Y的读取块中。
图13示出两个内核的读取块和写入块。在这些数据块中,数据块R是连续写入块,并且数据块S是对应于连续写入块R的连续读取块。尽管连续写入块R和连续读取块S是相同的数据块,因为为第一内核X的写入块和第二内核Y的读取块设置了不同的属性组,所以它们被图示为不同的数据块且被标注为不同的附图标记以便更易于理解。
图13中所示的数据块的属性组被存储在运算控制单元200的属性组存储单元210中。这些属性组与单内核情况下描述的属性组相同。
进一步,指示第二内核Y在第一内核X之后执行且第一内核X的写入块R被用作第二内核Y的读取块S的信息作为内核间数据块依赖性信息被存储在运算控制单元200的内核间信息存储单元220中。
作为示例,假设第一内核是用于执行图2中所示的示例的运算处理的内核。因此,第一内核X的读取块是数据块P和Q,第一内核X的写入块是数据块R,并且数据块R是用于后续第二内核Y的连续写入块。
进一步,如单内核情况中所述,在读取块P的属性组中,分配属性是“长度优先”,裕度属性是“X:0,Y:0”(无裕度),以及依赖性属性是“无”(子读取块之间无依赖性)。
进一步,假设第二内核Y处理数据块S,其是与第一内核X的写入块R相同的数据块,且获得数据块U和V。因此,第二内核Y的读取块是数据块S,以及数据块S是连续读取块。进一步,第二内核的写入块是数据块U和V。
在图的示例中,在连续读取块S的属性组中,分配属性为“长度优先”,裕度属性为“X:1,Y:2”,依赖性属性为“R2”(依赖于左、左上和上子块)。
具体地,标记属性规定,当通过分段为子块而传送连续读取块S时,连同子块一起,传送一列数据,每个都在子块的左和右侧,以及传送两行数据,每个都在子块的上和下侧。进一步,连续读取块S的子块的传送和运算处理次序是由依赖性属性规定的,使得依赖子块(本例中是目标子块的左、左上和上侧的三个子块)在目标子块被处理之前被处理。
还为第二内核Y的写入块U和V设置属性组,并且这些块由用户根据第二内核Y的运算内容等来设置,并且省略对其的详细描述和图示。
在这个实施例中,运算控制单元200的场景确定单元230基于连续写入块R的分配属性和连续读取块S的分配属性来确定是否执行流水线控制。具体而言,如果连续写入块R和连续读取块S的分配属性相同,则场景确定单元230确定执行流水线控制,并且如果连续写入块R和连续读取块S的分配属性不同,则确定不执行流水线控制。
“流水线控制”是以流水线执行第一内核X和第二内核Y而不将连续写入块R传送到全局存储器152以及通过专用存储器164或局部存储器170使用其用于第二内核Y的执行。
当确定不执行流水线控制时,场景确定单元230对待第一内核X和第二内核Y每个为单内核,并且控制要被首先执行的第一内核X,在获得写入块R的全部的数据并存储在全局存储152中之后,使用写入块R作为第二内核Y的读取块S而控制要被执行的第二内核Y。
当确定执行流水线控制时,场景确定单元230改变首先执行的第一内核X的每个数据块的裕度属性和依赖性属性以便实现流水线控制。
具体而言,场景确定单元230按逻辑地将连续读取块S的裕度属性和依赖性属性加到第一内核X的读取块P的裕度属性和依赖性属性并由此获得新的裕度属性和依赖性属性。
类似地,场景确定单元230按逻辑地将连续读取块S的裕度属性和依赖性属性加到读取块Q的裕度属性和依赖性属性并由此获得新的裕度属性和依赖性属性。
图14示出在场景确定单元230改变之后的读取块P和读取块Q的属性组。如其中所示,对于读取块P,裕度属性从“X:0,Y:0”变为“X:1,Y:2”且依赖性属性从“无”变为“R2”。
进一步,同样对于读取块Q,裕度属性从“X:0,Y:9”变为“X:1,Y:11”且依赖性属性从“无”变为“R2”。
然后,场景确定单元230通过使用对于第一内核X的每个写入块已经改变裕度属性和依赖性属性的属性组并且对于其它数据块使用原始属性组来确定每个数据块的传送方法,并且进一步根据所确定的传送方法来执行读取块和写入块的传送和对应于传送的并行处理的控制。这与单内核的情况相同,除了使用连续写入块R的子块来通过专用存储器164或局部存储器170执行第二内核Y而不传送它们到全局存储器152并且并行执行第一内核X和第二内核Y。
图15的上部示出在执行第一内核X和第二内核Y时不执行流水线控制的情况的每个数据块的传送,以及图15的下部示出在执行第一内核X和第二内核Y时执行流水线控制的情况的每个数据块的传送。 在该图中,实线箭头表示数据传递通过全局存储器152,并且虚线箭头表示数据传递通过专用存储器164或局部存储器170。
如图15中所示,在不执行流水线控制的情况下,作为第一内核X的处理结果的写入块R(连续写入块)被存储在全局存储器152中然后被作为第二内核Y的读取块S(连续读取块)而从全局存储器152传送到专用存储器164或局部存储器170且用于第二内核Y的执行。
另一方面,在执行流水线控制的情况下,连续写入块R不被传送到全局存储器152且用于通过专用存储器164或局部存储器170执行第二内核Y。
注意:对于数据传递通过专用存储器164或局部存储器170,例如,生成数据的处理和使用数据执行运算处理的处理可以分配给相同PE,并且PE可以读取前一处理所生成的并且存储在专用存储器164或局部存储器170中的数据并且将其用于后续处理。
进一步,在OpenCL设备的各个PE环形连接且每个PE可以传递数据到环上相邻PE的情况下,已经执行前一处理的PE可以通过每个PE与执行下一处理的PE传递在前一处理中生成的数据。
图16的上部示出在不执行流水线控制的情况下的第一内核X和第二内核Y的执行,并且图16的下部示出在执行流水线控制的情况下的第一内核X和第二内核Y的执行。
在图16中,被对角线遮蔽的区域表示对于第一内核X的读传送的时期,并且被点所遮蔽的区域表示对于第一内核X的写传送的时期。进一步,被垂直线遮蔽的区域表示对于第二内核Y的读传送的时期,并且被网遮蔽的区域表示对于第二内核Y的写传送的时期。
进一步,空白区域表示第一内核X的执行的时期,并且波浪线遮蔽的区域表示第二内核Y的执行的时期。
如图16中所示,在不执行流水线控制的情况下,第一内核X和第二内核Y的每个都执行为独立内核,并且每次执行时,执行子读取块的读传送(从全局存储器传送到专用存储器/局部存储器)以及子写入块的写传送(从专用存储器/局部存储器到全局存储器)。
另一方面,在执行流水线控制的情况下,不执行第一内核X的每个执行所生成的子写入块的写传送,并且不执行第二内核Y的每个执行所要处理的子读取块(第一内核X所生成的子写入块)的读传送。
进一步,因为不执行第二内核Y的执行中要被处理的子读取块的读传送,所以可以与第二内核Y的执行并行地执行第一内核X的下一执行的读传送。
如上所述,当接连地执行第一内核X和第二内核Y时,根据该实施例的OpenCL系统100中的设备120的运算控制单元200可以使用连续写入块的子块,因为当要被用作第二内核Y的读取块的连续写入块包括在第一内核X的每个写入块中时其用于连续读取块的子块,并且连续写入块的分配属性和对应于连续写入块的第二内核Y的读取块(连续读取块)的分配属性是相同的,并且由此以流水线获取第一内核X和第二内核Y的执行。
具体而言,当执行流水线控制时,场景确定单元230首先按逻辑地将第二内核Y的连续读取块的裕度属性加到第一内核X的每个读取块的裕度属性由此改变第一内核X的每一读取块的裕度属性并且进一步按逻辑地将第二内核Y的连续读取块的依赖性属性加到第一内核的每一读取块的依赖性属性由此改变第一内核X的每一读取块的属性组。
然后,基于第一内核X和第二内核Y的每一数据块的属性组(用于第一内核X的读取块、在改变后的属性组),场景确定单元230确定每一数据块的传送方法,并且根据所确定的传送方法和对应于该传送的并行处理的控制执行每一数据块的传送。此时,第一内核X和第二内核Y以流水线执行,不传送连续写入块的每一子块到全局存储器,并且使用其用来通过专用存储器或局部存储器执行第二内核Y并且进一步并行执行第一内核X和第二内核Y。
如图16中所示,作为场景确定单元230的流水线控制的结果,完成第一内核X和第二内核Y的执行的时间比不执行流水线控制时短长度“T”,并且OpenCL设备的处理速度增加。
注意:因为第二内核Y的连续读取块的裕度属性按逻辑地加到第一内核X的每一读取块的裕度属性以便以流水线执行第一内核X和第二内核Y,所以存在以下可能性:第一内核X的子读取块的大小与同子读取块一起传送的数据的大小的总和超过专用存储器或局部存储器的容量。
为了避免这一情况,场景确定单元230可以在第一内核X的连续写入块的分配属性和第二内核Y的连续读取块的分配属性相同且进一步在传送时基于改变的裕度属性确定的第一内核X的子读取块的大小等于或小于预设阈值的条件下确定执行流水线控制。注意:阈值可以预先根据专用存储器和/或局部存储器的大小来设置。
进一步,尽管上面描述了以流水线执行两个相关内核以便易于理解,在相同原理下可以以流水线执行三个或更多的相关内核。
具体地,当存在N(N是2或更大的正数)个接连地执行的内核且第二或后续执行的每个内核的读取块包括就在之前执行的内核的写 入块时,场景确定单元230确定只在第K(1≤K≤N-1)个内核X的连续写入块的分配属性与对应于连续写入块的第K+1个内核的连续读取块的分配属性相同时执行流水线控制。
当场景确定单元230确定执行流水线控制时,其按逻辑地将第二或后续内核的连续读取块的裕度属性加到第一内核的每一读取块的裕度属性,并且进一步按逻辑地将第二或后续内核的连续读取块的依赖性属性加到第一内核的每一读取块的依赖性属性。
这之后,当场景确定单元230确定每一数据块的传送方法时,根据所确定的传送方法传送每一数据块并且对应于传送控制并行处理,其以流水线执行这些内核,使用连续写入块的每一子块来通过专用存储器或局部存储器执行下一内核,而不将其传送到全局存储器,并且进一步并行执行这些内核。
随着要以流水线执行的内核的数目增加,第一内核的子读取块的传送大小增加。为了防止第一内核的子读取块的传送大小超过专用存储器或局部存储器的容量,场景确定单元230可以将N个内核划分成多个组,每个组包括一个或多个接连地执行的内核,并且针对每个组执行流水线控制。对于分组,基于改变的裕度属性而确定的组中要被首先执行的内核的子读取块的传送大小被设置为小于预定阈值。
尽管已经参考其示例实施例特别示出并且描述了本发明,本发明不限于这些实施例。本领域普通技术人员将理解,可以在其中进行各种形式和细节上的改变,而不背离本发明的精神和范围。
尽管已经以若干实施例描述了本发明,本领域技术人员将认识到,本发明可以以所附权利要求的精神和范围内的各种修改来实践,且本发明不限于上述的示例。
进一步,权利要求的范围不由上述的实施例限制。
而且,注意:申请人的意图是包括全部的权利要求要素的等同物,即使是在审查期间后续修改的。

运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OPENCL设备.pdf_第1页
第1页 / 共50页
运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OPENCL设备.pdf_第2页
第2页 / 共50页
运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OPENCL设备.pdf_第3页
第3页 / 共50页
点击查看更多>>
资源描述

《运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OPENCL设备.pdf》由会员分享,可在线阅读,更多相关《运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OPENCL设备.pdf(50页珍藏版)》请在专利查询网上搜索。

本发明涉及运算控制装置、运算控制方法、存储有程序的非瞬时计算机可读介质以及OPENCL设备。当由运算单元执行彼此相关的第一内核和第二内核时,如果第一内核的连续写入块的分配属性和第二内核的对应于连续写入块的连续读取块的分配属性相同,则场景确定单元以流水线通过使用连续写入块执行第一内核和第二内核,以便通过专用存储器或局部存储器执行第二内核而不将其传送给全局存储器。此时,场景确定单元按逻辑地将第二内核的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1