运算和控制单元、运算和控制方法、与并行处理器的制作方法

文档序号:6373606阅读:188来源:国知局
专利名称:运算和控制单元、运算和控制方法、与并行处理器的制作方法
技术领域
本发明涉及并行处理器的运算和控制技术。
背景技术
近些年来,因为需要抑制处理器发热,存在明显的趋势通过增加进行并行处理的处理器核(以下仅称为“核”)的数量而不是增大处理器的操作频率来实现性能上的改善。其中每一个具有多个核的处理器被称为“多核处理器”,并且,在多核处理器中,其中每一个具 有特别大量的核的处理器被称为“众核处理器”。在本说明书中,在多核处理器和众核处理器之间不特别区分,并且其中每一个具有并行进行处理的多个核的处理器通常被称为“并行处理器”。并行处理器已经在大量的领域中被用作加速器。然而,已经取决于制造商或领域而制造了多种加速器,并且也已经不同地开发了用于加速器的语言和框架。这使得难以在加速器之间移植程序代码。为了解决这个问题,将OpenCL (开放计算语言)确定为用于并行处理器的标准框架(OpenCL 规范,版本1. 0,修订文件43,Khronos OpenCL 工作组(2009))。将描述 OpenCL的概览。图19图示了典型的OpenCL系统的平台模型,其中,对于“OpenCL规范,版本1. 0,修订文件43, Khronos OpenCL工作组(2009)”中的图3. I添加了附图标号。如图19中所示,OpenCL系统10包括主机12和一个或多个计算设备(以下称为“OpenCL设备”)14。OpenCL设备14对应于上述的加速器。OpenCL设备14的每一个具有一个或多个计算单元(以下称为“⑶”)16,并且⑶16的每一个具有一个或多个处理元件(以下称为“PE”)18。PE18对应于上述的核。OpenCL的应用包括在主机12侧运行的程序代码和在OpenCL设备14中、即在加速器侧运行的程序代码。在主机12侧运行的程序代码被称为“主机代码”,并且在OpenCL设备14侧运行的程序代码被称为“内核”。主机12调用用于运算的指令的API (应用程序接口)。OpenCL设备14的每一个执行所指令的运算。主机12产生用于管理资源的环境,并且也产生用于通过OpenCL来调整设备操作的命令队列。“设备操作”包括运算、存储器的操作以及同步。在OpenCL中,在N维索引空间(I彡N彡3)中执行内核作为工作项目(以下简称为“项目”)。例如,如果将(4, 6)被指定为二维索引空间,则总共执行4X6、24个项目。将一个PE用于一个项目的执行。因此,如果要并行执行的项目的数量与对于该项目实际上存在的PE的数量相同,则总共在4 X 6、24个PE上执行该内核。
如果存在的PE的数量小于要并行执行的项目的数量,则在存在的PE上重复该项目的并行执行。如果例如仅存在总共2X3、6个PE,则当指定上述的(4,6)的索引空间时,必须通过6个PE将6个项目的并行执行重复4次。而且,在OpenCL中,引入工作组的概念。工作组是在同一⑶16上执行并且彼此相关联的项目的集合。在同一工作组内的相应的项目执行同一内核,并且共享CU 16的本地存储器,这将在下文描述。向相应的工作组分配唯一的组ID,并且在每一个工作组内的项目具有在工作组内向其分配的唯一的本地ID。也向项目分配唯一的全局ID。可以通过全局ID或组ID与本地ID的组合来识别项目。通过以下面的步骤顺序调用API来配置用于允许OpenCL设备14进行运算处理的过程。<步骤1> :从OpenCL设备14的主机12传送用于运算处理的参考数据(以下称为 “参考数据”)和内核。<步骤2> :响应于“内核开始命令”在OpenCL设备14的每一个上开始执行内核。<步骤3> :在OpenCL设备14中完成内核的执行后,将运算处理的结果数据从OpenCL设备14的存储器空间传送到主机12侦U。将参考图20来描述包括存储器空间的OpenCL设备14的配置。在图20中,对于“OpenCL规范,版本1. 0,修订文件43,KhronosOpenCL工作组(2009)”中的图3. 3添加了附图标号。如上所述,OpenCL设备14的每一个包括一个或多个⑶16,并且⑶16的每一个具有一个或多个PE 18。在上述步骤2中的内核的执行中,可以在OpenCL设备14的每一个中访问四个不同的存储器。这四个存储器包括专用存储器20、本地存储器22、全局存储器32和常数存储器34。将从项目和工作组的观点参考图21描述这四个存储器。图21图示了在“OpenCL规范,版本1. 0,修订文件43, Khronos OpenCL工作组(2009)”中的表格3. I。专用存储器20的每一个对应于一个项目,并且仅用于执行该项目。对于与一个项目对应的专用存储器20定义的变量不能用于其他项目。本地存储器22的每一个对应于一个组,并且可以被该组内的相应的项目共享。因为这个原因,作为本地存储器22的预期目的,例如,向本地存储器22分配由该组内的相应的项目共享的变量。可以从所有组内的所有项目访问全局存储器32和常数存储器34。可以从项目访问全局存储器32用于读取和写入。另一方面,可以从项目访问常数存储器34仅用于读取。以下,全局存储器32和常数存储器34被统称为“设备存储器30”。根据项目和PE 18之间的一对一的关系,将在下面描述上面四个不同的存储器与⑶16和PE 18之间的对应关系。专用存储器20 —对一地对应于PE 18,并且可以仅被对应的PE 18访问。本地存储器22 —对一地对应于⑶16,并且可以被对应⑶16内的所有PE 18访问。设备存储器30可以被所有⑶16内的所有PE 18,即在OpenCL设备14内的所有PE,访问。
而且,取决于OpenCL设备14的每一个来进一步提供作为设备存储器30的高速缓存存储器的高速缓存24。因此,OpenCL设备14的每一个配备了在层级上不同的多个存储器。层级越高,可以从PE访问这些存储器的速度越快。该层级以设备存储器30 (最低)、本地存储器22 (中)和专用存储器20 (最高)的顺序变高,并且从PE的访问速度以同一顺序变高。为了充分地使得OpenCL设备14的性能显现,必须设计例如在设备存储器30和专用存储器20或本地存储器22之间的数据移动,使得在使用频率更高的数据移动到高速的存储器空间,然后被引用。即使在与OpenCL设备在控制系统上不同的顺序处理器的情况下,也在全局存储器空间和专用存储器空间之间进行数据移动。将参考在图22中所示的顺序处理的示例来描述数据移动。 在图22中图示的顺序处理器50包括作为运算元件的PE 52、专用存储器54、全局存储器56和高速缓存控制机制58。如图22中所示,将顺序处理器50的存储设备分类为专用存储器54和全局存储器56。专用存储器54在物理上是芯片上低容量存储器,并且,全局存储器56在物理上是芯片上高容量存储器。在顺序处理器50中,将存储设备分类为专用存储器54和全局存储器56。位于专用存储器54和全局存储器56之间的高速缓存控制机制58自动地进行在专用存储器54和全局存储器56之间的数据移动,并且顺序处理器50的用户看到的仅仅是一个大的存储器空间。即,顺序处理器50的用户可以容易地开发用户程序,该用户程序允许PE 52进行运算处理,而不用计划如何在全局存储器56和专用存储器54之间移动数据。

发明内容
顺便提及,当在并行处理器上,特别是在图20中所示的OpenCL设备14上,安装大量核(PE)时,存在与核的数量相同数量的专用存储器20,并且还存在与CU 16的数量相同数量的本地存储器22。因为硬件的成本高,通常难以实现由一个高速缓存控制机制以统一方式管理这些存储器。另一方面,如果没有高速缓存控制机制,则OpenCL系统10的用户(以下仅称为“用户”)可以看到多个存储器空间。如上所述,为了追求更高的性能使得使用频率更高的数据移动到更高速的存储器空间(即,更高层级的存储器空间)并且然后被引用,需要允许用户程序显式地给出用于与运算处理相关联的在层级上不同的存储器之间移动数据的指令。为了精确地实现这个处理,用户需要具有与上述相应的存储器之间的速度差、容量差和功能差相关的知识。将参考图23来描述该处理的具体示例。图23是图示执行用于从多个数据块(数据块A至D)获得数据块A’和B’的运算处理的情况的图。从图23中省略了从主机到设备的内核传送。而且,数据块A至D是在如上所述的步骤I中从主机12传送到OpenCL设备14并且被存储在全局存储器32中的参考数据。数据块A’和B’是已经在上述的步骤2中对于数据块A至D执行运算的结果,该结果被写入全局存储器32中,并且其后在上述的步骤3中被传送到主机12。现在,将描述步骤2的处理,S卩,用于执行内核的运算处理。在下面的本说明书中,多个专用存储器被称为“专用存储器组”。除非追求运算处理的性能,否则可以设想在运算中仅使用全局存储器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〉在相应的PE18上执行运算处理,并且运算处理的结果被存储在可以被PE 18访问的专用存储器组或本地存储器22中。<步骤C〉通过步骤B的运算处理获得并且被存储在专用存储器组或本地存储器22中的数据块A’和B’被传送到全局存储器32。在下面的说明中,从专用存储器组或本地存储器22到全局存储器32的数据传送被称为“写入传送”。而且,诸如数据块A’和B’的在专用存储器组或本地存储器22中存储并且被写入传送的数据块被称为“写入块WB”在由用户建立的内核中需要显式地指定所有上面的三个步骤。这些指定包括运算处理的内容和依赖于OpenCL设备14的配置的内容(PE的数量(=专用存储器的数量)、各个专用存储器的容量、本地存储器的容量等)。例如,假定存在多个要进行运算的读取块RB,并且相应的读取块RB必须被划分为子块,因为不能在一个工作组内的专用存储器组或本地存储器22中存储所有的读取块RB。在该情况下,必须对于多个读取块RB指定在步骤A中将相应的子块彼此相关联的方法。在读取块RB中将子块彼此“相关联的方法”表示在多个读取块RB中的子块中,任何读取块RB中的相应子块被传送到同一工作组内的专用存储器组或同一工作组内的本地存储器22。运算处理的内容和如何划分读取块RB取决于OpenCL设备14的配置。同样,当存在作为运算结果的多个写入块WB时,也需要在下述含义上指定相关联的方法在任何读取块RB的相应的子块的组合下,作为运算结果获得多个写入块WB的相应的子块。即,在写入块WB中的相应的子块的内容是作为运算结果存储在每一个工作组的专用存储器组或本地存储器22中的数据。写入块WB到全局存储器32的传送表示在全局存储器32中在写入块WB的相应的子块位置处写入数据。如在读取块RB相关联方法中那样,写入块WB相关联方法取决于运算处理的内容和OpenCL设备14的配置。如上所述,除了不能在工作组内的存储器中存储整个所需数据块的情况之外,SP使当PE的总数小于索引空间的大小时,也不能同时并行执行所有的项目。因此,必须将由PE对于项目的并行执行重复多次。不必说,需要根据并行执行的重复来重复读取传送和写入传送。在该情况下,需要根据运算处理的内容和OpenCL设备14的配置来指定数据块划分方法和将通过划分数据块而获得的子块彼此相关联的方法。数据块的“划分方法”表示如何将数据块划分为子块。“子块”是读取传送和写入传送的传送单元。在下面的说明中,当必须在读取和写入之间区分时,通过划分读取块RB而获得的子块被称为“子读取块SRB”,并且通过划分写入块WB获得的子块被称为“子写入 块 SWB ”。在子块SB之间的“相关联方法”表示在相应的不同的读取块或写入块中包括的子块SB同时位于同一专用存储器组或本地存储器22上。数据块的划分方法取决于OpenCL设备14的配置,而子块的相关联方法取决于运算处理的内容。如果需要划分,则与不划分数据块的情况相比,指定变得更复杂。图24图示了需要由用户指定以便允许OpenCL设备14进行运算处理的内容。如该图中所示,第一部分是对于读取传送的指定,并且包括依赖于运算处理的内容和OpenCL设备14的配置的部分。依赖于运算处理的内容和OpenCL设备14的配置的部分例如包括是否划分读取块RB的指定(示例I)、当进行划分时划分方法的指定(示例2),以及在子读取块SRB之间的相关联方法的指定(不例3)。第二部分是在读取块RB或子读取块SRB上的运算处理的指定。因为用于指定运算处理的内容,所以第二部分取决于运算处理的内容。而且,第二部分包括取决于OpenCL设备14的配置的内容,诸如项目的并行执行的数量的指定(示例4),因为这个部分需要符合用于读取传送的指令。第三部分是用于写入传送的指定,并且自然包括取决于运算处理的内容和OpenCL设备14的配置的部分(示例5),因为这个部分需要符合用于读取传送的指令。因此,为了追求更高的性能,用户需要开发符合运算处理的内容和OpenCL设备14的配置的内核(用户代码)。然而,即使当设备符合OpenCL时,如果制造商不同,则相应的存储器空间的容量、访问延迟和高速缓存控制的可用性彼此很大不同。为此,有可能其中已经对于一个OpenCL设备理想地开发了在层级上不同的存储器之间的数据移动的用户代码反过来对于其他OpenCL设备或在系列上相同但是年代不同的OpenCL设备致使性能变差。S卩,在性能上用户代码的可移植性低。为了实现一定程度的性能可移植性,可以设想不对于特定的OpenCL设备开发用户代码,而是在优选地记住大量现有OpenCL设备的配置的同时建立用户代码。然而,运算处理的设计者感到上面的操作是沉重的负担,因为没有重要的操作。而且,该操作致使代码的可读性变差并且复杂度增大。已经鉴于上面的情况做出了本发明,并且因此,本发明目的是提供一种技术,用于降低用户代码的开发者的负担,并且对于与运算处理相关联的在层级上不同的多个存储器中的数据移动增强用户代码的可移植性。根据本发明的一个方面,提供了一种运算和控制方法,该方法控制通过并行处理器的多个运算元件的并行运算,其中并行处理器具有多个运算元件和为该多个运算元件布置的、在层级上不同的多个存储器。该方法包括两个步骤。第一步骤获取和保存为读取块和写入块的每一个设置的属性组,其中,读取块是,在多个存储器中的最低层级的存储器中存储的一个或多 个数据块中,其中要进行并行运算的数据被传送到另一个层级的存储器的块;并且写入块是,在并行运算后,在从该另一个层级的存储器传送到最低层级的存储器的一个或多个数据块中,对于该一个或多个读取块进行并行运算的运算结果。第二步骤基于所保存的属性组的每一个和用于表示并行运算的配置的配置参数,来确定读取块和写入块的每一个的传送系统,并且根据所确定的传送系统来控制读取块和写入块的每一个的传送,和与该传送对应的并行运算。属性组是用于确定传送系统所必需的,并且包括不取决于并行处理器的配置的一个或多个属性。在假定写入块已经位于另一个层级的存储器中的情况下设置写入块的属性组,并且将写入块的属性组传送到最低层级的存储器。上面的方面的方法被替换为设备、在设备中包括的系统、实现该方法的并行处理器和允许计算机执行该方法的程序的表达也有益于作为本发明的方面。根据本发明的技术,可以降低用户代码的开发者的负担,并且,在诸如OpenCL设备的并行处理器中,对于与运算处理相关联的在层级上不同的多个存储器间的数据移动,可以增强用户代码的可移植性。


图I是图示根据本发明的一个实施例的OpenCL系统的图;图2是图示要由用户实现的处理的具体示例的图;图3是图示读取属性的图;图4是图示容限属性的图;图5是图示广播属性的图;图6是图示分配属性(No. I)的图;图7是图示分配属性(No. 2)的图;图8是图示依赖度属性的图;图9是图示对于图2中所示的每一个数据块设置的属性组的示例的图;图10是图示参数的示例的图,该参数的示例图示了图I所示OpenCL系统中的运算单元的配置;图11是图示在每一个层级内的关联和在层级之间的关联的图;图12是在图2中所示示例中通过情形确定单元确定的内容中的一些的图;图13是图示需要由图I所示OpenCL系统中的用户指定的内容的图14是图示当意图通过现有技术(No. I)实现图2中所示的运算时的内核的一个示例的图;图15是图示当意图通过现有技术(No. 2)实现图2中所示的运算时的内核的另一个示例的图;图16是图示当意图通过图I中所示的OpenCL系统实现图2中所示的运算时的内核的一个示例的图;图17是图示当意图通过由现有技术接受异步存储器传送的OpenCL设备实现图2中所示的运算时的内核的一个示例的图;图18是图示当意图在接受和不接受异步存储器传送的OpenCL设备中实现图2中所示的运算时图I中所示的OpenCL系统中的情形确定单元的处理上的差别的图;
图19是图示OpenCL系统的平台模型的图;图20是OpenCL设备的配置的图;图21是图示在OpenCL设备中的各种存储器的图;图22是图示顺序处理器的示例的图;图23是图示现有技术(No. I)的问题的图;以及图24是图示现有技术(No. 2)的问题的图。
具体实施例方式以下,将参考附图描述本发明的实施例。为了说明清楚,适当地省略和简化下面的说明和附图。而且,本领域普通技术人员可以明白,可以通过各种形式的硬件和软件(程序)的组合来实现附图中所示作为进行各种处理的功能块的相应的元件。元件不限于硬件或软件。在相应的附图中,通过相同的附图标号或标记来表示相同的元件,并且,将根据情况要求省略重复的说明。而且,上述的程序被存储在各种类型的非临时计算机可读介质中,并且可以被供应到计算机。非临时计算机可读介质包括各种类型的有形存储介质。非临时计算机可读介质的示例包括磁记录介质(例如,软盘、磁带、硬盘驱动器)、磁光记录介质(例如,磁光盘)、CD-ROM (只读存储器)、CD-R、CD-R/W、半导体存储器(例如,掩模ROM、PROM (可编程ROM)、EPROM (可擦除PROM)、快闪ROM和RAM (随机存取存储器))。而且,可以通过各种类型的临时计算机可读介质向计算机供应程序。临时计算机可读介质的示例包括电信号、光信号和电磁波。临时计算机可读介质可以通过诸如电线或光纤的有线通信信道或无线电通信信道来向计算机供应程序。图I图示了根据本发明的一个实施例的OpenCL系统100。OpenCL系统100包括OpenCL主机(以下仅称为“主机”)110和OpenCL设备(以下仅称为“设备”)120。设备120包括运算和控制单元130、以及运算单元140。运算和控制单元130包括属性组存储单元132和情形确定单元134。运算单元140包括设备存储器150、多个计算单元(CU) 160和为⑶160的每一个布置的本地存储器170。设备存储器150包括全局存储器152和常数存储器154。而且,⑶160的每一个包括多个PE 162和为PE 162的每一个布置的专用存储器164。全局存储器152、常数存储器154、CU 160、PE 162、专用存储器164和本地存储器170与通常的OpenCL设备中的相同名称的相同,并且在本说明书中将省略详细描述。当主机110允许设备120进行运算时,主机110向设备120传送内核,该内核对应于具有由用户指定的变元的运算。在设备120中,运算和控制单元130基于来自主机110的内核来控制运算单元140。运算单元140根据运算和控制单元130的控制来进行运算,以获得运算结果。由运算单元140进行的运算与要进行运算的数据从设备存储器150到专用存储器164和本地存储器170的传送(读取传送)以及运算结果的数据到设备存储器150的传送(写入传送)相关联。因为在全局存储器152中存储要进行运算的数据和运算结果的数据两者,所以在下面的描述中,在全局存储器152和专用存储器164或本地存储器170之间进行“读取传送”和“写入传送”。当要进行运算的数据也被存储在常数存储器154中时,应当明白,“读 取传送”也包括从常数存储器154到专用存储器164或本地存储器170的传送。为了便利理解,将参考在图2中图示的具体示例来详细描述根据这个实施例的OpenCL系统100。在下面的说明中的术语“维度”对应于上述索引空间的维度。在OpenCL中,可以最多通过三维来指定索引空间。然而,为了说明的方便,例示了二维。如图2中所示,通过表达式(I)来表示要由用户实现的处理。R(x,y) =Σ [PdQ0i, (y+i))] (i=0 8) (I)要进行运算的数据被包括在读取块P和读取块Q的每一个中。运算结果的数据被包括在写入块R中。在图2中所示的示例中,写入块仅是一个写入块R。用于实现由表达式(I)表不的处理的内核自然由用户建立。内核的建立包括建立由设备120的PE162的每一个执行的程序代码的处理(以下称为“用户指定处理”);以及,指定变元的处理。在根据这个实施例的OpenCL系统100中,除了由OpenCL确定的相应的变元之外,进一步支持包括8个属性的“属性组”。这8个属性包括“大小属性”、“读取属性”、“写入属性”、“容限属性”、“广播属性”、“分配属性”、“层级属性”和“依赖度属性”,并且由用户对于所有的读取块和写入块指定为内核的变元。在属性的指定中,不总是需要指定所有8个属性。在属性组中包括的这8个属性是为了确定在全局存储器152和专用存储器164和/或本地存储器170之间传送的系统(传送系统)而需要引用的参数。以下,在没有具体说明的情况下,“传送”表示在全局存储器152和专用存储器164和/或本地存储器170之间的传送。“传送系统”包括下面的内容。(I)传送系统I :划分的存在与否。传送系统I是“没有划分”的系统和“具有划分”的系统的任何一个。在读取块中,“没有划分”表示通过一个读取传送操作来传送读取块中的所有数据,并且“具有划分”表示将读取块划分为多个子读取块SRB,并且通过一个读取传送操作向一个工作组传送仅一个子读取块SRB。在写入块中,“没有划分”表示通过一个写入传送操作向全局存储器152传送写入块的所有数据(运算结果)。另一方面,“具有划分”表示将写入块划分为多个子写入块SWB,并且通过一个写入传送操作从一个工作组传送仅一个子写入块SWB。(2)传送系统划分系统。传送系统2表示当将数据块划分为多个子块时如何划分数据块。(3)传送系统3 :划分系统(子读取块SRB的相关联的方法)。当在上面的传送系统I中划分读取块时指定传送系统3。S卩,如果存在多个读取块,则分发系统表示由同一读取传送操作传送的、来自每个读取块的一个子读取块SRB如何被分发到专用存储器164和本地存储器170。如果仅有一个读取块,则划分系统均等地将子读取块SRB划分到专用存储器164和本地存储器170。(4)传送系统4 :整合系统(子写入块SWB的相关联的方法)。当在上面的传送系统I中划分写入块时指定传送系统4。“整合”表示在全局存储器152中的写入块的各个子写入块SWB中分配的区域中写 入数据。如果存在多个写入块,则整合系统表示通过同一写入传送操作传送的、在专用存储器组或本地存储器170中存储的多个子写入块SWB如何被整合到相应的写入块内。另一方面,如果仅有一个写入块,则该整合系统将在专用存储器组或本地存储器170中存储的写入块的相应的子写入块SWB中的数据整合到上面的一个写入块内。在现有技术中需要通过用户代码来指定上面的“传送系统”。用户代码复杂,因为用户代码取决于运算处理的内容和设备120 (具体地,运算单元140)的配置,这使得极难保持可移植性。在上面的情况下,作为进行认真研究和探求的结果,本发明人已经在下述方面获得成功在各种情况下,在考虑运算处理的内容和OpenCL设备的配置的同时,各个用户花时间以即兴方式确定传送系统的处理被分类为依赖于OpenCL设备的配置的处理和不依赖于其的处理,并且,基于由不依赖于OpenCL设备的处理指定的参数和用于表示OpenCL设备的配置的参数,来自动地确定依赖于OpenCL的处理。因此,本发明人已经建立了一种技术,通过该技术,减少了用户代码的开发者的负担,并且增强了用户代码的可移植性。在根据这个实施例的OpenCL系统100中,不依赖于OpenCL设备的处理对应于用于数据块的上面的属性组的指定。属性组是确定传送系统所需的参数,但是不依赖于OpenCL设备的配置。以下,在下面详细描述属性组。以下,不重复描述每一个属性“是确定传送系统所需的,但是不依赖于OpenCL设备的配置”,而是仅描述其他元素。上面的8个属性被进一步划分为“特定属性”、“运算属性”和“策略属性”三种。将参考在图2中图示的相应的数据块的示例来描述属性。在数据块中提供特定属性,而与运算处理的内容和用户的意图无关。在这个实施例中,“特定属性”是下面的“大小属性”。<大小属性 > 该属性是用于指示数据块的大小的参数,其例如是每一个维度的字的数量和每一个字的字节的数量或比特的数量。总是对于所有的数据块指定该属性。为此,将图2中所示的读取块P、读取块Q和写入块R的大小属性表示如下。读取块P是二维数据块,并且,X方向大小Lx和Y方向大小Ly的每一个是3个字。在读取块P中,用于一个字的比特的数量是8比特。为此,作为大小属性,对于读取块P指定“X方向大小Lx :3,Y方向大小Ly :3,比特/字的数量8”。
同样,对于读取块Q指定“X方向大小Lx :640,Y方向大小Ly :480,比特/字的数量16,,。而且,对于读取块R指定“X方向大小Lx 640, Y方向大小Ly :480,比特/字的数
曰-O O,,
I O Zi O“运算属性”与用户的意图无关,而是与运算处理的内容有关。在这个实施例中,“运算属性”包括下面的“读取属性”和“写入属性”。在假定将每一个数据块划分为一个或多个子块的情况下,指定运算属性。在写入块中,进一步假定读取块已经位于专用存储器组或本地存储器22上。数据块被划分为一个子块表示没有划分。<读取属性 > 该属性首先指示该数据块是否是要进行运算处理的数据(即,读取传·送的数据)以及数据进行运算时的传送顺序。该传送顺序是用于指定以何顺序来传送数据块的相应子块的参数。写入块不被读取传送,因此以指示不读取传送数据的“无”来指定该写入块。读取块是要读取传送的数据块,并且因此以传送顺序来指定为“读取传送”。在根据这个实施例的OpenCL系统100中,可以使用“左上”、“右下”和“随机”来指定被设置为读取属性的传送顺序。仅当指定“随机”时,在其中存储了用于指示传送顺序的信息的区域中单独地指定指针。“左上”表示从在左上的子块开始传送,并且“右下”表示从在右下的子块开始传送。图3表示当将“左上”指定为读取属性时的子块的传送顺序。如图3中所示,在该情况下,在全局存储器152中存储的数据块(读取块)是以左上的子块I、与子块I在右面相邻的子块2、与子块2在右面相邻的子块3、…为传送顺序的。将描述在图2中图示的相应的数据块的读取属性。因为是要读取传送的数据,所以基于在表达式(I)中图示的运算处理的内容,在传送顺序上将读取块P和读取块Q指定为“左上”作为读取属性。另一方面,因为不是要读取传送的数据,所以在读取属性中将写入块R指定为
U 丁.,,
尤ο<写入属性 > 该属性首先指示该数据块是否是运算结果的数据(即,要写入传送的数据)以及当数据块是运算结果的数据时的传送顺序。传送顺序是用于指定以何顺序来传送相应的子写入块SWB的参数。读取块不被写入传送,并且因此使用指示没有数据被写入传送的“无”来指定读取块。写入块是要写入传送的数据块,并且因此以传送顺序来指定为“写入传送”。在根据这个实施例的OpenCL系统100中,可以以“左上”、“右下”和“随机”来指定作为写入属性设置的传送顺序。仅当指定“随机”时,在其中存储了指示传送顺序的信息的区域中单独地指定指针。读取块不被写入传送,因此使用指示没有数据被写入传送的“无”来指定读取块。为此,使用“无”作为写入属性来指定图2中所示的读取块P和读取块Q。写入块是要被写入传送的数据块,并且因此以传送顺序来指定为“写入传送”。传送顺序是用于指定以何顺序来传送数据块的相应的子块的参数。在根据该实施例的OpenCL系统100中,与作为读取属性设置的传送顺序相同,以“左上”、“右下”和“随机”来指定作为写入属性设置的传送顺序。仅当指定“随机”时,在其中存储指示传送顺序的信息的区域中单独地指定指针。作为写入属性设置的传送顺序的相应的参数的含义与作为读取属性设置的传送顺序的对应参数的那些相同,并且因此将省略其详细描述。将描述相应的数据块的写入属性。因为是要写入传送的数据,所以基于在表达式(I)中所示的运算处理的内容,在传送顺序上将写入块R指定为“左上”作为读取属性。另一方面,因为不是要写入传送的数据,所以在写入属性中读取块P和读取块Q被指定为“无”。“策略属性”是与运算处理的内容和如何执行传送和运算处理的用户意图相关的属性。在根据这个实施例的OpenCL系统100中,“策略属性”包括“容限属性”、“广播属性”、“分配属性”、“层级属性”和“依赖度属性”。也在将每一个数据块划分为一个或多个子块的假设下指定策略属性。在写入块中,进一步假定写入块已经位于专用存储器20或本地存储器22上。将数据块划分为一个子块表示没有划分。 <容限属性 > 该属性是用于读取块的参数,其指示除了与子读取块SRB的边界相邻的子读取块SRB之外的数据量,其与子读取块SRB内的数据一起传送。而且,对于维度的每一个指定容限属性。容限属性的参数的单位是字。在写入块中,不能指定容限属性,或即使指定容限属性也被忽略。图4图示了当在X方向上指定“I”并且在Y方向上指定“2”作为容限属性时,在传送数据块(读取块)的相应的子读取块SRB时的传送范围。在该情况下,在传送子读取块SRB时的传送范围包括在子读取块SRB内的数据以及在与在子读取块SRB的右侧和左侧的每一个的边界相邻的一列上的数据以及在与上端和下端的每个的边界相邻的两行上的数据。图4例示了位于数据块的上端的子读取块SRB。在这个示例中,因为没有数据与子读取块SRB的上端的边界相邻,所以在传送子读取块SRB时的传送范围不包括与上端的边界相邻的数据。虽然将在下面详细描述,在读取块的每一个中,在一次读取传送操作期间向一个⑶160传送一个子读取块SRB,并且⑶160对于每个子块的子读取块SRB进行运算。运算的结果被从⑶160传送到全局存储器。例如,当在二维图像上进行3X3的卷积运算时,需要目标像素和在上、下、右和左四个方向的每一个中与目标像素相邻的一个像素。如果仅传送子读取块SRB内的数据,则不能对位于子读取块SRB的最外侧的每一个像素进行运算。为此,在该情况下,必须在X方向和Y方向两者上指定“I”作为容限属性。将描述在图2中图示的相应的数据块的容限属性。容限属性的指定与其他属性的指定相关,因此,仅描述容限属性是困难的。为此,在这个示例中,仅图示对于图2中图示的相应的数据块指定的容限属性的值,并且下面将描述那些含义的细节。读取块P和读取块Q进行容限属性的指定,但是在读取块P中,在X方向和Y方向的每个中,容限被设置为“O”。而且,在读取块Q中,在X方向上的容限被指定为“0”,并且在Y方向上的容限被指定为“9”。因此,在传送读取块P时,仅传送子读取块SRB内的数据。另一方面,在传送读取块Q时,除了在子读取块SRB内的数据之外,还传送与子读取块SRB的下端相邻的9行上的数据。
写入块R是要写入传送的数据,因此不进行容限属性的指定。即,在传送写入块R时,仅传送子写入块SWB内的数据。<广播属性 > 该属性是用于指定专用存储器和本地存储器的哪个是读取块的每个中的子读取块SRB的目的地和写入块的每一个中的子写入块SWB的目的地的参数,并且是“开(on)”和“关(off)”中的任何一个。例如,如图5中所示,广播属性的“开”将本地存储器指定为目的地或来源,并且广播属性的“关”将专用存储器指定为目的地或来源。将描述图2中图示的相应的数据块的广播属性。广播属性的指定也与其他属性相关,因此仅描述广播属性是困难的。为此,在这个示例中,仅图示对于图2中图示的相应的数据块指定的广播属性的值,并且下面将描述那些含义的细节。在读取块P中,将广播属性指定为“开”。为此,在传送读取块P时,向本地存储器170传送相应的子读取块SRB。
在读取块Q和写入块R中,将广播属性指定为“关”。为此,在传送读取块Q时,向专用存储器164传送相应的子读取块SRB。而且,从专用存储器组向全局存储器152传送写入块R的子写入块SWB。〈分配属性〉该属性是用于表示如何向专用存储器组或⑶160的本地存储器分配子读取块SRB和子写入块SWB的分配系统的参数。在根据该实施例的OpenCL系统100中,支持“垂直优先”和“水平优先”两种分配系统。在详细描述分配属性前,将首先描述工作组大小WG和要向一个项目分配的数据量。与其中广播属性是“关”的数据块对应的“工作组大小WG”是由在一个工作组中的项目的数量表示的数据量,并且如果项目的数量是例如N,则工作组大小WG变为N个字。另一方面,与其中广播属性是“开”的数据块对应的工作组大小WG总是被看作I。在下面的描述中,与其中广播属性是“关”的数据块对应的“工作组大小WG”仅被称为“工作组大小WG”。随后,根据在设备120中的运算和控制单元130的情形确定单元134来确定工作组大小WG。然而,用户可以在建立内核时指定工作组大小WG的最大值和最小值的任何一个。而且,随后,也通过情形确定单元134来确定要向一个项目分配的数据量。当工作组大小WG是最小值时,一个项目对应于I个PE。相比之下,在其中将PE的专用存储器划分为M个(M :2或更大的整数)的OpenCL设备,并且使M个项目单元对应于I个PE,以便可以将工作组大小WG指定为最多是比前者的M倍大的情况下,该最大值变为最小值的M倍大。另一方面,如果使用最大值的工作组大小WG,则每I个PE的专用存储器仅是使用最小值的工作组大小WG的情况下的1/M。以下,为了说明简单,情形确定单元134总是采用最小值来作为工作组大小WG,作为其结果,一个项目对应于I个PE。因此,在下面的说明中,将项目表达为PE。“垂直优先”是下述系统其中,在X方向上的子块的大小(SBsx)是工作组大小WG,并且分配数据块使得在Y方向上的大小是要向一个项目分配的数据量,即,要向I个PE分配的数据量。在其中将“垂直优先”指定为分配属性的数据块内的相应的子块在全局存储器152和专用存储器164之间传送,使得一个子块对应于一个工作组,并且在子块内的一列上的数据对应于在工作组内的一个PE 162的专用存储器164。图6图示了其中将“垂直优先”指定为分配属性的读取块的示例。在该情况下,从全局存储器152向专用存储器164传送相应的子读取块SRB,使得在每一个子读取块SRB内的所有数据被存储在同一工作组内的PE 162的专用存储器164中,并且,在子块内的同一列上的数据被存储在同一 PE 162的专用存储器164中。“水平优先”是用于划分数据块使得在X方向上的子块的大小SBsx变为工作组大小WG的整数倍的系统。随后,通过情形确定单元134来确定在Y方向上的子块的SBsy。在其中将“水平优先”指定为分配属性的数据块内的子块的每一个对应于一个工作组,并且在每一个子块内的所有数据被传送到在同一工作组中包括的PE 162的专用存储器164。而且,通过对于工作组大小WG的每一个数量分离每行子块而获得的整数分离块的数据被均匀地分布到在用于每一个分离块的工作组内的WG个PE 162的专用存储器164上。 图7图示了其中将“水平优先”指定为分配属性的读取块的示例。在该示例中,假定在Y方向上的子写入块SWB的大小SBsy是一个字。即,划分读取块使得在X方向上的子读取块SRB的大小SBsx变为工作组大小WG的整数倍,并且行的数量是I。如该图中所示,在该情况下,从全局存储器152向专用存储器164传送相应的子读取块SRB,使得在同一工作组内的PE 162的专用存储器164中存储每一个子读取块SRB内的所有数据。而且,通过在行中对于工作组大小WG的每一个数量分离子读取块SRB获得的整数分离块的数据被传送为均匀地分布到用于每一个分离块的工作组内的WG个PE 162的专用存储器164。例如,从数据I至在数据a前的数据的多个数据构成一个分离块,并且被传送为被存储在同一工作组中的多个PE 162的相应的专用存储器164中。而且,从数据a至数据j前的数据的多个数据也构成一个分离块,并且被传送为被存储在工作组中的多个PE 162的相应的专用存储器164中。将描述在图2中图示的相应的数据块的分配属性。分配属性的指定也与其他属性相关,并且因此,仅描述分配属性是困难的。为此,在这个示例中,仅说明了对于图2中图示的相应的数据块指定的分配属性的值,并且下面将描述那些含义的细节。在读取块P中,假定将“垂直优先”指定为分配属性。类似地,在读取块Q和写入块R中,假定将分配属性指定为“垂直优先”。〈层级属性〉该属性是由I或更大的自然数指定的层级的数量。在其中指定相同数量的层级的多个读取块中,通过一次读取或写入传送操作来传送每一个子块SB。将描述在图2中图示的相应的数据块的层级。层级属性的指定也与其他属性相关,并且因此,仅描述层级属性是困难的。为此,仅说明了对于图2中图示的相应的数据块指定的层级属性的值,并且下面将描述那些含义的细节。在读取块P和读取块Q中,将相应的层级属性指定为“2”和“I”。而且,将写入块R的层级属性指定为“I”。<依赖度属性 > 该属性是表示对于数据块在子块和8个其他子块之间的数据依赖度关系的参数,并且可以指定“具有依赖度”和“没有依赖度”。而且,在“具有依赖度”中,可以进一步指定二种依赖度关系。“具有依赖度”具有Rl类型、R2类型和R3类型三种类型。将参考图8来描述依赖度关系。参见图8,由虚线围绕的框指示子块SB,并且编号指示传送顺序。图8图示了当分别将分配属性和读取属性指定为“垂直优先”和“左上”时的Rl至R3依赖度关系。如该图中所示,在该情况下,当目标子块SB与顶部子块SB具有依赖关系时,指定“R1依赖度”。当目标子块SB与顶部、左上和左子块SB具有依赖关系时,指定“R2依赖度”。而且,当目标子块SB与8个相邻子块SB中的除了底部和右下子块两个之外的6个子块SB具有依赖关系时,指定“R3依赖度”。将描述在图2中例示的数据块的依赖度属性。依赖度属性的指定也与其他属性相关,并且因此仅描述依赖度属性是困难的。为此,在这个示例中,仅图示对于图2中图示的相应的数据块指定的依赖度属性的值,并且,随后将描述那些含义的细节。在该示例中,在读取块P、读取块Q和写入块R的全部中,将依赖度属性指定为
U 丁.,,
尤ο上面描述了由根据该实施例的OpenCL系统100支持的8个属性。这8个属性都不依赖于在设备120中的运算单元140的配置。为了便于理解随后的说明,一次全部地在图9中图示了对于图2中所示的三个数据块设置的相应的属性组。在根据该实施例的OpenCL系统100中,从主机110向设备120传送的内核的变元包括对于运算主体和运算结果的相应的数据块指定的上面的属性组。在设备120的运算和控制单元130中的属性组存储单元132在其中存储这些相应的属性组,并且向情形确定单元134供应属性组。情形确定单元134基于在属性组存储单元132中存储的相应的属性组来确定后述的传送情形(以下也简称为“情形”),并且也基于所确定的情形来控制由运算单元140进行的运算和与该运算相关联的数据的传送。情形确定单元134在进行上面的控制中重复地向运算单元140发送指令集。该指令集包括读取传送指令R、运算执行指令S和写入传送指令W。而且,指令集的一次发送表示读取传送指令R、运算执行指令S和写入传送指令W以所述的顺序被发送。在运算单元140中,根据来自运算和控制单元130的读取传送指令R来进行读取传送。随后,运算单元140的PE 162响应于来自运算和控制单元130的运算执行指令S,通过响应于读取传送指令R的读取传送来对专用存储器164或本地存储器170中存储的数据进行运算处理。作为运算结果的相应的数据被存储在与相应的PE 162对应的专用存储器164或本地存储器170中。然后,通过响应于来自运算和控制单元130的写入传送指令W的写入传送,将在专用存储器164或本地存储器170中存储的数据(运算结果)传送到全局存储器152。现在,将描述由情形确定单元134确定情形的处理。情形确定单元134基于在属性组存储单元132中存储的相应的属性组和用于表示运算单元140的配置的参数来确定情形。该情形对应于传送系统。将描述情形确定单元134的操作。在该描述中,对于运算处理和数据块,参考图2中图示的示例。假定,在图2中所示的相应的数据块中,如图9中所示设置属性组,并且将其存储在属性组存储单元132中。在图10中图示了用于表示运算单元140的配置的参数的示例。而且,在上面的相应的属性的说明中,为了便于理解,假定一个项目对应于I个PE0另一方面,在下面的说明中,假定I个PE可以对应于一个或多个项目。情形确定单元134确定符合下面的规则的传送系统,并且根据所确定的传送系统来控制运算处理。<规则1>情形确定单元134首先对于所有数据块设置公共工作组大小WG,并且确定数据块的划分大小和迭代次数,使得通过公共划分数量将具有相同的层级属性的多个数据块划分为子块。“划分大小”表示子块的大小,并且“划分数量”表示通过划分一个数据块而获得的子块的数量。当“划分数量”是I时,表示没有划分。而且,“迭代次数”表示用于传送数据块中的所有子块所需的传送次数。
数据块的大小、划分大小、划分数量、工作组大小WG和迭代次数具有由下面的表达式(2)至(5)表达的关系。数据块的大小=X-方向大小LxXY方向大小Ly…(2)划分大小=子块的X方向大小SBsxXY方向大小SBsy…(3)划分数量=数据块大小/ (划分大小Xw工作组大小WG)…(4)迭代次数={划分数量X (X方向大小Lx/工作组大小WG)} /WG的数量…(5)情形确定单元134确定工作组大小WG和划分大小(精确地,子块的Y方向大小SBsy),使得当指定容限属性时的划分大小和容限的总数的和(当未指定容限属性时为“O”)未超过各个项目的专用存储器的可用容量和具有相同层级属性的数据块的总和值,并且,在其中广播属性是“关”的数据块中,关于其中读取属性不是“无”的数据块(读取块)或其中写入属性不是“无”的数据块(写入块),满足通过相同的划分数量来划分具有相同层级属性的数据块的限制。在上面的限制的假设下,如果存在建议的目标OpenCL设备的工作组大小WG,则应用所建议的工作组大小WG,并且如果确定工作组大小WG的上限和下限,则在由上限和下限确定的范围内确定工作组大小WG。<规则2>将包括具有相同的层级属性的读取块的对应子读取块SRB的子读取块SRB组的每一个同时传送到专用存储器或本地存储器,并且用户指定处理开始。如果通过用于要传送的子读取块SRB的容限属性指定容限,则也传送容限的数据。<规则3>在已经将对应子读取块SRB的子读取块SRB组传送到专用存储器或本地存储器部分在层级属性上不同的数据块的划分数量的乘积的次数之后,用户指定处理开始。例如,当假定其中层级属性是“I”的读取块的划分数量是N,并且其中层级属性是“2”的读取块的划分数量是M时,情形确定单元134运行来调用用户指定处理NXM次。而且,在每次调用前,子读取块SRB的一种组合被传送到专用存储器或本地存储器部分。情形确定单元134确定子块的相关联方法(在上述传送系统中的分布系统和整合系统),然后传送该子块。如图12中所示,在具有同一层级的数据块的子块之间相关联的方法与在具有不同层级的数据块的子块之间的相关联的方法不同。<规则4>在每一个用户指定处理已经开始后,作为运算处理的结果的子写入块SffB被传送到全局存储器部分。子写入块SWB的传送与子读取块SRB的传送相同,除了在用户指定处理已经开始后进行传送,并且传送方向是“从专用存储器和/或本地存储器空间到全局存储器空间”。图11图不了由情形确定单兀134基于对图9中图不的读取块P、读取块Q和与入块R指定的属性组与用于表示图10中图示的运算单元140的配置的参数确定的工作组大小WG、垂直划分大小(在Y方向上的子块的大小SBsy)和迭代次数的示例。情形确定单元134首先临时确定运算单元140的工作组大小WG (32)。当假定其中层级属性是“I”的相应的数据块的划分数量是4时,由读取块Q共享的专用存储器对于项目的每一个是“129X2B”的O. 258KB。通过下述方式来获得值“ 129”:将由容限属性指定的在Y方向上的9加到“读取块Q的Y方向大小Ly (480) /划分数量(4)”(垂直划分大小)。同样,由写入块R共享的专用存储器对于工作项目WI的每一个是“480/4X4B”的O. 738KB。由读取块Q和写入块R对于项目的每一个的共享的专用存储器小于在用于表示运算单元140的配置的参数(图10)中用于项目的每一个的专用存储器容量(1KB)。因此,因·为满足规则1,所以确定工作组大小WG与读取块Q和写入块R的划分大小。而且,根据上面的表达式(6)来将迭代次数计算为“5”。而且,向本地存储器分配其中层级属性是“2”的读取块P,因为广播属性是“开”。而且,因为大小(3X3=9)小于用于运算单元140的工作组大小WG的每一个的本地存储器容量4KB,所以将读取块P传送到本地存储器而没有划分(迭代次数I)。最后,将描述当存在其中依赖度属性是“具有依赖度”的数据块时的情形确定单元134的操作。为了便于理解下面的说明,在将相应的数据块划分为相应的划分大小后相关联的子块组被称为“子块组合”。如果在子块组合之间的子块具有依赖关系,则情形确定单元134控制迭代的顺序,使得在依赖源的子块组合已经进行处理后对依赖目标的子块组合进行处理。在这个示例中,当假定在子块组合MO内的一个子块MX与在子块组合Ml内的一个子块MY具有依赖关系,并且MX是定义源时,子块组合MO和Ml具有依赖关系,并且MO被称为“Ml的依赖源”,并且Ml被称为“MO的依赖目标”。因此,在根据该实施例的OpenCL系统100中,情形确定单元134被布置在设备120中,并且基于由来自主机110的内核的变元和运算结果指示的运算目标的相应的数据块的属性组和用于表示运算单元140的配置的参数,来自动地确定传送系统,并且还通过所确定的传送系统来控制数据的传送以及由运算单元140进行的运算。为此,当用户开发内核时需要指定的内容仅是属性组的指定和用户处理的指定,如图13中所示。当将图13和24彼此比较时,在根据该实施例的OpenCL系统100中,由用户指定的所有内容简单,而不依赖于设备的配置。为此,用户可以强调用于开发的运算处理的内容的指定,并且免受与运算处理相关联的数据传送的设计的负担。可以由对于设备120的配置的专家,例如属于设备120的制造商的开发者,来设计情形确定单元134。在OpenCL中,在软件开发者中存在一些专家试图得出硬件的最终运算性能的假设下,基于向这样的专家提供自由控制硬件的自由度的策略,仅可以冒险地准备抽象API。另一方面,如果仅存在抽象API,则可以使用该API的人仅限于熟悉硬件的专家,导致使用有意限定的标准的人群未增加的风险。根据本发明的技术可以减少如上所述的用户的负担,并且使得能够扩展使用预期的标准的人员。而且,根据本发明的技术允许用户设置特定属性和用于运算所需的运算属性以及策略属性,由此能够向用户提供特定的自由度。而且,例如,可以在内核的变元中设置用于指示“标准模式”和“专家模式”的任何一个的“模式属性”。设备120参考所设置的模式属性,并且如果模式属性是“标准模式”,则通过上述的情形确定单元134来控制传送系统的确定。另一方面,如果模式属性是“专家模式”,则设备120可以进行现有技术的OpenCL设备的操作。使用上面的配置,熟悉硬件的配置的所谓的专家可以设置“专家模式”,并且如在现有技术中那样仅使用抽象API来开发内核。将更详细地描述由OpenCL系统100获得的优点。首先,将描述未使用本发明的技术的现有技术的情况。图14图示了为了实现在图2中图示的示例中的运算处理,当PE直接访问全局存储器以传送数据而不使用专用存储器和本地存储器时的内核的程序代码。在图14中所示的程序代码在内容上简单,并且在代码数量上小,因为在全局存储器空间和专用存储器和/或本地存储器部分之间没有数据传送。 然而,上面的配置在运算处理的性能上不高。因此,为了改善该性能,必须通过读取传送从全局存储器向专用存储器和/或本地存储器传送要进行运算的数据,并且通过写入传送从专用存储器和/或本地存储器向全局存储器传送运算结果的数据。在图15中图示了用于实现与上面的传送相关联的运算处理的在现有技术内核中的程序代码的示例。从图15明白,程序代码的数量增加,并且,与在图14中的那些相比,配置变得复杂。图16图示了用于在OpenCL系统100中实现在图2中所示的处理的内核的程序代码。在该图中,函数“get_aCl_l0Cal_siZe()”是用于返回划分大小的系统函数的示例,添加该函数以实现情形确定单元134的情形的确定和执行。显然,与实现等同函数的在图15中图示的示例相比,该内核在代码的数量上小并且在配置上简单。根据本发明的技术,可以容易地开发内核,并且提供良好的可移植性,因为用户的指定内容不取决于设备的配置。现在,将目标的OpenCL设备接受异步存储器传送的情况与OpenCL设备不接受异步存储器传送的情况作比较。当未使用根据本发明的技术时,如果目标从不接受异步存储器传送的设备改变为接受异步存储器传送的设备,则必须将在图15中所示的程序代码改变为在图17中所示的程序代码。如从图15与图17的比较明白,程序代码的数量和配置较大地改变。图18图示了在接受异步存储器传送的设备和不接受异步存储器传送的设备中的情形确定单元134的处理流的示例。在附图中,虚线框表示在接受异步存储器的设备的情况下向不接受异步存储器传送的设备的情况下的处理流添加的处理。如该图中所示,即使改变了设备的配置,也通过情形确定单元134的一些改变来减少情形确定单元134的开发者的负担。而且,根据本发明的技术,情形确定单元134同化在设备的配置上的差别。因此,作为在图2中所示的用于实现运算处理的内核,可以在接受异步存储器传送的设备和不接受异步存储器传送的设备的情况下使用在图16中图示的同一内核。因此,可移植性良好。上面已经参考实施例描述了本发明。例示了实施例,并且,可以在不偏离本发明的主题的情况下不同地改变或修改上面的实施例。对于本领域内的普通技术人员显然,实施例的那些修改示例落在本发明的范围内。
权利要求
1.一种运算和控制单元,所述运算和控制单元控制通过并行处理器的多个运算元件的并行运算,所述并行处理器具有所述多个运算元件和为所述多个运算元件布置的、在层级上不同的多个存储器,所述运算和控制单元包括 属性组保存单元,所述属性组保存单元获取和保存为读取块和写入块的每一个设置的属性组,其中,所述读取块是,在所述多个存储器中的最低层级的存储器中存储的一个或多个数据块中,其中要进行并行运算的数据被传送到另一个层级的存储器的块;并且所述写入块是,在所述并行运算后,在从所述另一个层级的所述存储器传送到所述最低层级的所述存储器的一个或多个数据块中,对于所述一个或多个读取块进行所述并行运算的运算结果;以及 情形确定单元,所述情形确定单元基于由所述属性组保存单元保存的相应的属性组和用于表示所述并行处理器的配置的配置参数,来确定所述读取块和所述写入块的相应的传送系统,并且根据所确定的传送系统来控制所述读取块和所述写入块的传送,和与所述传送对应的所述并行运算, 其中,所述属性组的每一个是确定所述传送系统所必需的,并且包括不取决于所述并行处理器的所述配置的一个或多个属性,并且 其中,在假定所述写入块的每一个已经位于所述另一个层级的所述存储器中的情况下,设置所述写入块的所述属性组,并且将所述写入块的所述属性组传送到所述最低层级的所述存储器。
2.根据权利要求I所述的运算和控制单元,其中,所述并行处理器是OpenCL(开放计算语言)设备,并且所述属性组的每一个被设置为内核的变元。
3.—种运算和控制方法,所述运算和控制方法控制通过并行处理器的多个运算元件的并行运算,所述并行处理器具有所述多个运算元件和为所述多个运算元件布置的、在层级上不同的多个存储器,所述运算和控制方法包括 获取和保存为读取块和写入块的每一个设置的属性组,其中,所述读取块是,在所述多个存储器中的最低层级的存储器中存储的一个或多个数据块中,其中要进行并行运算的数据被传送到另一个层级的存储器的块;并且所述写入块是,在所述并行运算后,在从所述另一个层级的所述存储器传送到所述最低层级的所述存储器的一个或多个数据块中,对于所述一个或多个读取块进行所述并行运算的运算结果;以及 基于相应的保存的属性组和用于表示所述并行处理器的配置的配置参数,确定所述读取块和所述写入块的相应的传送系统,并且根据所确定的传送系统来控制所述读取块和所述写入块的传送,和与所述传送对应的所述并行运算, 其中,所述属性组的每一个是确定所述传送系统所必需的,并且包括不取决于所述并行处理器的所述配置的一个或多个属性,并且 其中,在假定所述写入块的每一个已经位于所述另一个层级的所述存储器中的情况下,设置所述写入块的所述属性组,并且将所述写入块的所述属性组传送到所述最低层级的所述存储器。
4.根据权利要求3所述的运算和控制方法,其中,所述并行处理器是OpenCL(开放计算语言)设备,并且所述属性组的每一个被设置为内核的变元。
5.一种并行处理器,包括多个运算元件,为所述多个运算元件布置的、在层级上不同的多个存储器;以及 运算控制器,所述运算控制器控制通过所述运算元件的并行运算,所述运算控制器包括 属性组保存单元,所述属性组保存单元获取和保存为读取块和写入块的每一个设置的属性组,其中,所述读取块是,在所述多个存储器中的最低层级的存储器中存储的一个或多个数据块中,其中要进行并行运算的数据被传送到另一个层级的存储器的块;并且所述写入块是,在所述并行运算后,在从所述另一个层级的所述存储器传送到所述最低层级的所述存储器的一个或多个数据块中,对于所述一个或多个读取块进行所述并行运算的运算结果;以及 情形确定单元,所述情形确定单元基于由所述属性组保存单元保存的相应的属性组和用于表示所述并行处理器的配置的配置参数来确定所述读取块和所述写入块的相应的传送系统,并且根据所述确定的传送系统来控制所述读取块和所述写入块的传送,和与所述传送对应的所述并行运算, 其中,所述属性组的每一个是确定所述传送系统所必需的,并且包括不取决于所述并行处理器的所述配置的一个或多个属性,并且 其中,在假定所述写入块的每一个已经位于所述另一个层级的所述存储器中的情况下,设置所述写入块的所述属性组,并且将所述写入块的所述属性组传送到所述最低层级的所述存储器。
6.根据权利要求5所述的并行处理器,其中,所述并行处理器是OpenCL (开放计算语言)设备,并且所述属性组的每一个被设置为内核的变元。
全文摘要
本发明涉及运算和控制单元、运算和控制方法、与并行处理器。属性组存储单元获取和保存对于相应的数据块设置的属性组。情形确定单元基于那些属性组和是并行处理器的运算单元的配置来确定在最低层级的存储器和另一个层级的存储器之间的相应块的相应的传送系统,并且根据确定的传送系统来控制相应数据块的传送和与该传送对应的并行运算。属性组的每一个是确定传送系统所必需的,并且包括不取决于并行处理器的配置的一个或多个属性。在假定写入块的每一个已经位于另一个层级的存储器中的情况下设置写入块的属性组,并且将该写入块的属性组传送到最低层级的存储器。
文档编号G06F9/38GK102890625SQ201210252648
公开日2013年1月23日 申请日期2012年7月20日 优先权日2011年7月20日
发明者京昭伦 申请人:瑞萨电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1