可索引类型变换的制作方法

文档序号:6428347阅读:228来源:国知局
专利名称:可索引类型变换的制作方法
可索引类型变换
背景技术
计算机系统通常包括一个或多个通用处理器(诸如,中央处理器(CPU))以及一个或多个专用数据并行计算节点(诸如,图形处理单元(GPU)或CPU中的单指令多数据 (SIMD)执行单元)。通用处理器通常执行计算机系统上的通用处理,并且数据并行计算节点通常执行计算机系统上的数据并行处理(例如图形处理)。通用处理器通常具有实现数据并行算法的能力,但这样做却没有在数据并行计算节点中找到优化的硬件资源。结果,通用处理器在执行数据并行算法时比数据并行计算节点低效得多。数据并行计算节点传统地起通用处理器在计算机系统上执行程序时的辅助作用。 随着为数据并行算法优化的硬件的作用由于数据并行计算机节点处理能力的增强而逐渐增大,期望增强编程者对数据并行计算节点进行编程的能力,并且使对数据并行计算节点的编程变得更为容易。

发明内容
提供本发明内容是为了以简化的形式介绍将在以下具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。一高级编程语言提供了用于数据并行处理环境中的可索引类型上的可扩展变换集。用于该语言的编译器将每个变换实现为来自可索引类型的映射,以允许每个变换可被应用到其他变换上。在编译时间,编译器标识数据并行源代码中的每个可索引类型上的变换的序列,并生成数据并行可执行代码以将序列实现为运行时使用变换映射的组合操作。 编译器也包含优化处理,该优化处理是基于至数据并行可执行代码的变换的序列。


包括、合并在本发明书内并构成其一部分的附图提供了对各实施例的进一步理解。附图示出各实施例,并且与说明书一起用于解释本发明的原理。其他实施例和各实施例的许多预期优点将随着参考下面的详细描述进行更好的理解而得到认识。附图的元素不一定相对于彼此是比例正确的。相同的附图标记指代对应的类似部分。图1是示出了计算机系统中的编译器环境的一实施例的框图。图2是示出了将变换集应用到可索引类型的一实施例的框图。图3A到3N是示出了可被应用到可索引类型的变换的各个实施例的框图。图4是示出了被配置为实现编译器环境的计算机系统的一实施例的框图。图5是示出具有被配置为使用变换集来执行数据并行代码的数据并行计算引擎的计算机系统的一实施例的框图。
具体实施例方式在以下详细描述中,对附图进行了参考,附图构成了实施例的一部分且在其中作为示例示出了可在其中实践本发明的各特定实施例。就此,诸如“顶部”、“底部”、“前方”、 “后方”、“前导”、“尾部”等的方向性术语参考所描述的附图的取向来使用。因为各实施例的各组件可以被定位为多个不同的取向,所以方向性术语出于说明的目的来使用而不是限制。可以理解,可以使用其它实施例并且可以做出结构上或逻辑上的改变而不背离本发明的范围。因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。应该理解,此处描述的各示例性实施例的特征可相互组合,除非另外具体注明。图1是示出计算机系统(诸如图4所示的且在下文中将详细描述的计算机系统 100)中的编译器环境10的一实施例的框图,其中计算机系统正在执行指令以对具有数据并行(DP)部分14的代码12进行编译。在被编译时,DP部分14中的DP代码以及代码12 中的其他非DP代码(即,通用代码)生成一个或多个可执行代码,例如图1中所示的一个或多个通用(GP)可执行代码32和一个或多个DP可执行代码34。在其他实施例中,编译器 20可生成一个或多个GP可执行代码32以各自包括一个或多个DP可执行代码34,或可生成一个或多个DP可执行代码34而不生成任何GP可执行代码32。响应于对具有数据并行扩展的编译器20的调用而生成编译器环境10以编译代码12的所有或所选模块。例如,该调用可以由编程者或计算机系统的其他用户、计算机系统中的其他代码、或另一个计算机系统(未示出)的其他代码来生成。GP可执行代码32表示旨在用于在一个或多个通用处理器(例如中央处理单元 (CPU))上执行的程序。GP可执行代码32包括来自一个或多个通用处理器的指令集的低级指令。DP可执行代码34表示旨在且优化用于在一个或多个数据并行(DP)优化计算节点 (诸如,在图5中所示的且在下文中详细描述的DP优化计算节点211)上执行的数据并行程序或算法(诸如,加阴影程序)。DP优化计算节点通常是图形处理单元(GPU)或通用处理器的SIMD单元,但也可包括通用处理器的标量执行单元或一些计算环境中的其他合适设备。 在一个实施例中,DP可执行代码34包括DP字节代码,在DP优化计算节点上执行之前使用设备驱动程序(未示出)该DP字节代码从DP优化计算节点的指令集转换为低级指令。在其他实施例中,DP可执行代码34包括来自一个或多个DP优化计算节点的指令集的低级指令,其中低级指令是由编译器20插入的。因此,GP可执行代码32可由一个或多个通用处理器(诸如,CPU)直接执行,并且DP可执行代码34要么可由一个或多个DP优化计算节点直接执行,要么可在转换成DP优化计算节点的低级指令之后由一个或多个DP优化计算节点来执行。在一个实施例中,代码12包括来自具有数据并行扩展的高级通用编程语言(之后称为GP语言)的指令序列,这些数据并行扩展形成存储在一个或多个模块的集合中的程序。GP语言可允许程序被编写为不同部分(即模块),使得每个模块都可以被存储在可以由计算机系统访问的单独的文件或者位置中。GP语言提供用于对包括一个或多个通用处理器和一个或多个专用DP优化计算节点的计算环境进行编程的单个语言。使用GP语言,编程者可将通用处理器和DP源代码均包含在代码12中,用于由通用处理器和DP计算节点分别执行,并且协调通用处理器和DP源代码的执行。代码12在该实施例中可以表示任何合适类型的代码,诸如应用、库函数或操作系统服务。可以通过将诸如C或C++之类的广泛适用的高级和通用编程语言扩展以包括数据并行特征来形成GP语言。其中可出现DP特征的通用语言的其他示例包括JavaTM,PHP,Visual Basic, Perl, Python , C#, Ruby, Delphi, Fortran, VB, F#, OCaml, Haskell, Erlang, NESL,Chapel,以及Jav必cript 。GP语言可包括丰富的链接能力,该链接能力允许程序的不同部分被包括在如图1中用代码12示出的不同模块中。数据并行特征提供了编程工具, 该编程工具利用DP优化计算节点的专用架构来使数据并行操作能比使用通用处理器(即非DP优化计算节点)更快或更有效地执行。GP语言也可以是使编程者能对通用处理器和 DP优化计算节点两者进行编程的另一合适的高级通用编程语言。在另一个实施例中,代码12包括来自形成程序的高级数据并行编程语言(此后称 DP语言)的指令序列。DP语言提供了用于对具有一个或多个DP优化计算节点的计算环境中的DP优化计算节点进行编程的专用语言。使用DP语言,编程者生成代码12中的旨在用于在DP优化计算节点上执行的DP源代码。DP语言提供编程工具,这些编程工具利用DP 优化计算节点的专用架构来使数据并行操作能比使用通用处理器更快或更有效地执行。DP 语言可以是现有的 DP 编程语言,诸如 HLSL,GLSL, Cg, C, C++, NESL, Chapel, CUDA, OpenCL, Accelerator, Ct, PGI GPGPU Accelerator, CAPS GPGPU Accelerator, Brook+, CAL, APL, Fortran 90(以及更高版本),Data Parallel C, DAPPLE,或APL.。代码12在该实施例中可以表示任何合适类型的DP源代码,诸如应用、库函数或操作系统服务。代码12包括具有指定用于在DP优化计算节点上执行的代码的一个或多个模块中的一个或多个部分14。在使用GP语言来编写代码12的一个实施例中,GP语言使编程者能在定义矢量函数时使用注释16 (诸如,declspec (vector)...)来将GP代码12的一部分 14指定为DP源代码。注释16与旨在用于在DP优化计算节点上执行的矢量函数的函数名 17(例如vector_func)相关联。代码部分14也可包括在调用点(诸如,forall, reduce, scan,或sort)对矢量函数的一个或多个调用18 (诸如,forall. . .,vector_func,...)。对应于调用点的矢量函数被称为内核函数。内核函数可调用代码12中的其他矢量函数(即, 其他DP源代码),并可被视为矢量函数调用图中的根。内核函数也可使用由代码12所定义的类型(诸如,class或struct)。这些类型可以或可以不被注释成DP源代码。在其他实施例中,其他合适的编程语言构造可被用于将代码12的部分14指定为DP源代码和/或通用处理器代码。此外,在代码12用DP语言编写的实施例中可省略注释16。参考图2,代码12的高级语言提供了变换集40,该变换集40用于在数据并行处理环境中的可索引类型42上使用。可索引类型42是实现一个或多个下标算符连同秩(rank) (为非负整数)以及表示为元素_类型elementjype的类型的任何类型。如果索引<N> 是表示整数(即,任何类型的整数数据类型)的N元组的类型,那么索引<N>的一实例是N 个整数的集合(i0,il,. . .,im),其中m等于N-I (即,N元组)。秩N的索引算符采用索引 <N>的N元组实例,并将该实例与被称为元素类型(element type)的类型的另一实例相关联,其中元素类型定义了可索引类型42中的每个元素。在一个实施例中,可索引类型42定义了下述算符中的一个或多个

其中index—declarator釆用以下形式
const index<rank>&idx ;const index<rank>idx ;index<rank>&idx ;或index<rank>idx.在其他实施例中,算符可以是函数、函子或更通用的表示。具有给定秩和元素类型的可索引类型的种类具有被称为场的初始化对象。可索引类型是可索引类型42以及变换 40两者的多种情况。可索引类型具有多面体的形状——即,可索引类型可被代数地表示为有限个由坐标轴的线性函数所形成的半平面的交点。编译器20将每个变换40实现为来自可索引类型42的映射,以允许每个变换40 被应用到其他变换40。在编译时间,编译器20标识代码12中每个可索引类型42上的变换40的序列,并生成DP可执行代码34以将这些序列实现为运行时使用变换映射的组合操作。编译器20也包含优化处理,该优化处理基于至DP可执行代码34的变换的序列。在执行时,DP可执行代码34将变换40的集合应用到可索引类型42以生成经变换的可执行类型44。变换40的集合可包括以下的任何合适的组合转置(transpose)、扩展(spread)、 移位(shift)、环状移位(CShift)、分片(tile)、投射(project)、投影(projections)、分裂 (split)、晕绕(halo)、邻接(neighborhood)、内置(interior)、分区(section)、调整形状 (reshape)、只读(reacLonly)、以及用户定义的变换。转置(transpose)、扩展(spread)、 移位(shift)和环状移位(cshift)变换40表示变换范围模式,而分片(tile)、投射 (project)、投影(projections)和分裂(split)变换40表示范围模式。参考图3A至3N 示出了变换40。图3A表示转置(transpose)变换40A。转置变换40A将可索引类型42A的两个维度交换,以生成经变换的可索引类型44A。在一个实施例中,转置变换4012A将指定的维度移动到最右侧位置。例如,指定了 χ维的转置变换40A可将可索引类型42A的χ维和y维交换,以生成如图3A所示的经变换的可索引类型44A。在另一个实施例中,转置变换40A交换两个指定的维度。图;3B示出扩展(spread)变换40B。扩展变换40B在指定插槽向可索引类型42B 添加一维度,以生成经变换的可索引类型44B。在图;3B的实施例中,指定了 χ维的扩展变换 40B向可索引类型42B的仅有y维添加了 χ维,以生成经变换的可索引类型44Β。虽然在图 3Β中进行了图示,但所添加的维度仅仅是概念性地添加的并且可以具有无限的广度。图3C示出移位(shift)变换40C。移位变换40C将可索引类型42C的指定维度移位一指定线性距离以生成经变换的可索引类型44C。在图3C的示例中,移位变换40C指定了 χ维并且线性距离为一,以在生成经变换的可索引类型44C时将可索引类型42C的χ维移位一。图3D示出环状移位(cshift)变换40D。环状移位变换40D将可索引类型42D的指定维度移位一指定的旋转距离以形成经变换的可索引类型44D。在图3D的示例中,环状移位变换40D指定了 χ维并且旋转距离为一,以在生成经变换的可索引类型44D时将可索引类型42D的χ维旋转一。图3E示出分片(tile)变换40E。分片变换40E将可索引类型42E划分为相同大小的子阵列集合,以生成经变换的可索引类型44E。在图3E的示例中,分片变换4(^将虹4 的可索引类型42E划分为的经变换的可索引类型44E。图3F示出了投射(project)变换40F。投射变换40F在可索引类型42F上针对指定的维度切片进行维度缩减,以生成经变换的可索引类型作44F为超平面。在图3F的示例中,投射变换40F将可索引类型42F缩减至y维的第二行,以生成变换的可索引类型44F作为一加有阴影的超平面。图3G示出了投影(projection)变换40G。投影变换40G生成在给定方向上的所有可能投射变换的集合。在图3G的示例中,投影变换40G从可索引变换42G生成在可索引类型44G的y方向(即,所有行)上的所有可能投射变换的集合。图3H示出分裂(split)变换40H。分裂变换40H将可索引类型42H沿着非边界支点进行分裂,以生成具有2R个子阵列的经变换阵列44H,其中R是可索引类型42H的维度数。在可索引类型42H的边界支点上发生分裂变换40H的退化形式,以生成具有2B个子阵列的经变换可索引类型44H,其中B是在包含可索引类型42H中的边界支点的边界的维度。 在图3H的示例中,分裂变换40H将可索引类型42H沿着非边界支点进行分裂,以生成具有四个子阵列的经变换阵列44H。图31示出晕绕(halo)变换401。晕绕变换401接收分片后的可索引类型421 (即, 使用分片变换40E变换后的可索引类型4 ,并生成经变换的可索引类型441以包括来自可索引类型421的在对应分片之外一指定距离内的元素集合。在图31的示例中,晕绕变换 401生成经变换的可索引类型441以包括在虚线方块461之内的元素集合以及位于剩余分片的对应方块之内的元素集合,虚线方块461表示在可索引类型42J中的对应分片之外的指定距离。在其他实施例中,指定距离可以由圆形或另一个合适形状来表示。图3J示出邻接(neighborhood)变换40J。邻接变换40J生成经变换的可索引类型44J以包括来自可索引类型42J的位于对应元素的指定距离内的元素集合。在图3J的示例中,邻接变换40J生成经变换的可索引类型44J以包括在虚线方块46J之内的元素集合以及位于剩余未加阴影元素的对应圆形之内的元素集合,虚线方块46J表示可索引类型 42J的加阴影元素的指定距离。在其他实施例中,指定距离可以由圆形或另一个合适形状来表不。图I示出内置(interior)变换40K。内置变换40K生成经变换的可索引类型44K 以包括可索引类型42K中的离开可索引类型42K的边界至少一指定距离的所有元素。在图 3K的示例中,内置变换40K生成经变换的可索引类型44K以包括可索引类型42K中的离开可索引类型42K的边界至少一个元素的元素。图3L示出分区(section)变换40L。分区变换40L生成经变换的可索引类型44L 以包括可索引类型42L中的指定矩形分区的元素。矩形分区可由与可索引类型42L的偏移值以及可索引类型42L的每个维度的广度来指定。在图3L的示例中,分区变换40L生成经变换的可索引类型44L以使用指定偏移值(1,1)、x维的广度3以及y维的广度2包括来自可索引类型42L中的加阴影元素。图3M示出调整形状(reshape)变换40M。调整形状变换40M将可索引类型42M 变形为具有不同形状的经变换的可索引类型44M,同时保持可索引类型42M的总广度(即, 总的N维的量)。在图3M的示例中,调整形状变换40M将具有总广度为四(即,4x1阵列)的一维可索引类型42M(即,4x1阵列)变形为具有总广度为四的二维经变换的可索引类型 44M(即,2x2 阵列)。图3N示出只读(reacLonly)变换40N。只读变换40N根据可索引类型42N生成不可修改的经变换可索引类型44N,而不改变可索引类型42N的形状或物理表示。在图3N的示例中,只读变换40N根据可索引类型42N生成不可修改的经变换可索引类型44N(如加阴影元素所示),而不改变可索引类型42N的形状或物理表示。如上所述,转置(transpose)、扩展(spread)、移位(shift)和环状移位(cshift) 变换40表示变换范围模式,而分片(tile)、投射(project)、投影(projections)和分裂 (split)变换40表示范围模式。变换范围模式包括可由从索引<N>向索引<M>(对于一定的M和N)的变换所表示的那些变换40。使用变换范围模式变换40,编译器20可在编译时间中准确推测正在发生什么变换序列。例如,扩展变换40B(扩展<1>)是在插槽1上添加维度的操作。因此可索引类型 42 (f (x0,Xl,x2))(即,秩3的可索引类型)被变换为新的可索引类型扩展<I> (f),其是秩 4的可索引类型,从而扩展<l>(f) (x0,xl,x2,x3) = f(x0,x2,x3) ( SP,插槽1为空)。作为另一个示例,考虑转置变换40A (转置<0,2 ,其是将维度0与维度2进行交换的操作,以使得对于秩3的可索引类型42(f),转置<0,2>(f) (x0,xl,x2) = f(x2,xl,x0)o还有一个示例涉及移位变换40C (移位<1,5> (f)),其表示将维度1移位5,使得移位<1,5> (f) (x0, xl,x2) = f(x0,xl+5,x2)。又有一个示例涉及环状移位变换40D(环状移位<0,-2>(f)), 其表示将维度0环状移位-2,并要求场网格以便有意义。当float4类型的2维可索引类型 42f在网格(10,20)上,且网格是基点在(0,0)且在垂直方向上具有长度10并在水平方向上具有长度20的矩形时,环状移位<0,-2>(f) (x0,xl) = f((x0-2)% 10,xl)。最后一个示例,使用网格(10,20)上的float4类型的2D可索引类型42' f的调整形状变换40M改变网格矩形的维度(诸如,调整形状<5,40>(f)->改变为网格(5,40);调整形状<200>(f)-> 改变为网格(200);以及调整形状<10,2,10>(f)->改变为网格(10,2,10))。范围模式涉及可索引类型的集合。令可索引类型<N>为秩N的任何可索引类型 42,表示索引算符对类型索引<N>的实例动作。下标算符的返回类型(即,元素类型)是可索引类型<N>::元素_类型(Indexable<N>::element_type)。分片变换40E、投影变换40G 以及分裂变换40H的演算得出下述的同形性。对于分片,分片 < 网格_分片 > 可索引类型 <N>->范围〈N,可索引类型〈N》是被限制在网格_分片,且由可索引类型<N>/网格_分片所索引的可索引类型<N>的集合。更具体地,如果网格描述了可索引类型<N>的形状,那么范围〈N,可索引类型〈N》是被限制在由网格_范围=(网格+网格_分片-1)/网格_分片中的偏移值所解释的网格_分片中的可索引类型<N>的集合。因此,当由分片〈网格_ 分片 >(可索引类型<N>)所创建时,网格_范围是范围〈N,可索引类型<N>>的形状。对于投影,投影<0> 可索引类型<N>->范围<1,可索引类型<N-D>是可索引类型<N>在0方向中的N-I维度切片的I-D集合。例如,如果可索引类型<2>是float4像素的102虹10对屏幕,那么投影<0>(可索引类型<2>)是在102^10 屏幕中的所有行的集合。对于分裂,分裂<idx> 可索引类型<N>->范围〈N,可索引类型〈N》是被限制于通过对“索引<N>idx”进行分裂所确定的元素网格的可索引类型<N>的所有N维子集的集合。例如,当可索引类型<2>是float4像素的1024x1024屏幕且idx = {512,512},那么分裂<idx>得出具有偏移值为{0,0}、{0,512}、{512,0}、{512,512}的4个广度为512x512的子对象。在三维中,这样的内部分裂变换得出8个子对象。如果分裂变换不是在内部的(类似{0,512}),那么分裂变换得出具有偏移值{0,0}、{0,512}的广度为10MX512的2个子对象。在此使用术语 “被限制在元素网格的可索引类型<N>”,因为不存在存储器操作。相反,可索引类型<N>的原始存储器储存被限制为若干更小的网格(即,元素网格),这些更小的网格构成有效索引 <N>点的原始集合的划分,对有效索引<N>点的原始集合原始地定义了可索引类型<N>的索引算符。由变换40所构建的所有“范围”实例采用了可索引类型<N>andexable<N>)的定义或形状的原始域,其不丧失一般性地被称为可索引类型<N>.网格。通过定义,可索引类型<N>的所有索引算符对由可索引类型<N>.网格所描述的每一个索引<N>动作。在形成范围〈Ni,可索引类型<N2》中,形成可索引类型<N>.网格的划分,并且由范围<N1,可索引类型<N2>>所定义的集合是被限制为N2-维度划分(由索引<N1>的Nl-维度集参数化的集合)的原始可索引类型<N>。由编译器20在编译时所推断的优化处理是范围<N,可索引类型<N>>为原始可索引类型<N>的划分。编译器20也可执行下述的变换40的优化处理。 当编译器20检测到转置变换40A (转置(i,j)),并且i或j中的一个是具有存储器中的单位跨度布局的维度(假设i是单位跨度维度),那么编译器20试图访问j方向中的存储器,因为在转置变换40A之后j现在是单位跨度维度。编译器20试图实现在由Yi Yang等人所著的“用于存储器优化和并行化管理的GPGPU编译器(A GPGPU Compiler for Memory Optimization and Parallelism Management),,(ACM程序设计语言专业组(Sigplan)通知, 2010年6月,第6刊,第45卷,第86-97页,其全文结合在此作为引用)中第3. 2,3. 3,3. 7 节所描述的优化处理。编译器20也将优化处理应用到对“单位跨度维度”的概念有所改动的任何变换40上。编译器20可进一步在大部分情况中应用在上述的Yang参考文献中第 3. 5和3. 6节的优化处理。编译器20也可执行如下优化处理对任何变换40,将表示计算域的隐循环展开并阻塞。该优化处理类似于上述Yang参考文献中第3. 5节的优化处理。当编译器20检测到扩展变换40B (扩展<k>)时,编译器20知道它不需要关注维度k。编译器20通常跟踪全部变换40中哪个维度具有单位跨度存储器布局。通过经由扩展<k>识别维度k是“空的”,编译器20知道对维度k不需要进行跟踪。例如,在移位<1, 12> (扩展<1> (f)) =扩展<1> (f)中,编译器20知道因为维度1为空且对其移位12不进行任何操作。其他示例包括投影<1>(扩展<l>(f)) =f ;投影<1,12>(扩展<l>(f)) =f//投影<1,12>是在1到12维度中f的切片;环状移位<1,12> (扩展<1> (f)) =扩展 <l>(f);调整形状<10,5,2>(扩展<l>(f)) =扩展<1>(调整形状<10,2>(f));分片<8, 4,16>(扩展 <l>(f)) =扩展 <1>(分片 <8,16>(f));分裂 <512,64,128>(扩展 <l>(f)) =扩展<1>(分裂<512,128>(f))。编译器20对于晕绕变换401、邻接变换40J、内置变换 40K以及只读变换40N执行类似的优化处理以及带状挖掘和循环交换。当编译器20检测到移位变换40C时,编译器20知道按照由移位变换40C所指定的量和方向改变编译器20的边界检查代码。
投射变换40F(投射<_1,_Val>)意味着通过固定_I = _Val而将_1维度投射出去。例如,如果_I =0并且可索引类型42,f是ΙΟΜχΙΟΜ像素,那么投射<0,512>(f)是通过{0,512}的像素的垂直切片。当单位跨度维度已经被投射出去时编译器20执行优化处理以进行跟踪,在该情况中,编译器20实现在“用于存储器优化和并行化管理的GPGPU编译器(A GPGPU Compiler for Memory Optimization and Parallelism Management),,(其全文结合在此作为引用)中第3. 2和3. 3节所描述的优化处理。晕绕变换401可由描述每个点具有多少有效邻接点的值索引<N>所指定。例如, 上述的102^10 像素示例可被划分为16x16个分片。因此,被应用到分片后的可索引阵列42的晕绕<2,4>暗示在每个分片周围在垂直方向上的每一侧有另外两个像素可被访问, 且在水平方向上有另外四个像素可被访问。对于非分片可索引类型,晕绕<idx>暗示在_1 维度的两侧可访问idx[_I]个额外的点。晕绕函数等式晕绕<idx>(范围〈N,可索引类型 <Μ ) =范围〈N,晕绕<idx> (可索引类型<M>) >允许编译器20关于边界检查进行假设。内置变换40K(内置<idx>)是晕绕变换401的非分片逆处理。内置<idx>采用可索引类型42并通过idx被限制。考虑10MX1024的示例,则内置<8,8>(f).网格·广度 ={1008,1008}且内置<8,8>(f).网格.偏移 ={8,8} 0换句话说,通过将f限制于由从 χ和y轴两者形成距离为8的围块而定义的子网格来形成内置<8,8> (f)。内置<idx>允许编译器20在边界检查中作出假设。函数等式是晕绕<idx>(内置<idx>(f)) =f。邻接变换40J (邻接<idx>)被编译器20用于对分片进行缓存,或用于编译器优化处理中的缓存阻隔。特别是,邻接<64,64>(f)指示编译器20分片循环为64x64个索引分片。只读变换40N(只读<f>)指示编译器20由f所表示的存储器可以任何形式跨多个DP计算节点或多个单独进程分布。因此,编译器20和对应的运行时代码可在将经只读变换后的可索引类型44分布到不同的存储器或一致性域之后避免对原始存储器中发生的改动进行检查。图4是示出被配置为实现图1所示的编译器环境10的计算机系统的实施例的框图。计算机系统100包括一个或多个处理器封装102、存储器系统104、零个或多个输入/输出设备106、零个或多个显示设备108、零个或多个外围设备110、和零个或多个网络设备112。处理器封装102、存储器系统104、输入/输出设备106、显示设备108、外围设备 110和网络设备112使用包括任何合适的类型、数量和配置的控制器、总线、接口、和/或其他有线或无线连接的一组互连114来进行通信。计算机系统100表示出于通用或专用目的而配置的任何合适的处理设备。计算机系统100的示例包括服务器、个人计算机、膝上型计算机、平板计算机、个人数字助理 (PDA)、移动电话、智能手机、和音频/视频设备。计算机系统100的组件(即,处理器封装 102、存储器系统104、输入/输出设备106、显示设备108、外围设备110、网络设备112和互连114)可包含在公共外壳(未示出)中或任何合适数量的独立外壳(未示出)中。每个处理器封装102都包括一个或多个处理元件(在图5中示出),所述处理元件形成被配置为执行指令(即,软件)的执行硬件。每个处理器封装102都可以包括具有相同或不同架构和/或指令集的处理元件。例如,处理元件可以包括顺序执行元件、超标量执行元件、以及数据并行执行元件(例如GPU执行元件)的任何组合。每个处理元件都被配置为访问并执行存储在存储器系统104中的指令。这些指令可包括基本输入输入系统 (BIOS)或固件(未示出)、操作系统(OS) 122、GP代码12、编译器20、以及带有DP可执行代码34的GP可执行代码32。每个执行元件都可以结合或响应于从输入/输出设备106、显示设备108、外围设备110、和/或网络设备112所接收到的信息来执行指令。计算机系统100引导并执行OS 122。OS 122包括如下指令这些指令可以由执行元件来执行以管理计算机系统100的组件并提供允许程序访问并使用这些组件的一组功能。在一个实施例中,OS 122是Windows操作系统。在其他实施例中,OS 122是适于和计算机系统100 —起使用的另一操作系统。计算机系统100执行编译器20以如上所述地从 GP代码12生成GP可执行代码32和DP可执行代码34。计算机系统100可以使用一个或多个处理元件来执行GP可执行代码32以及DP可执行代码34,这将在下面参考图5的实施例予以描述。存储器系统104包括被配置成存储指令和数据的任何合适的类型、数量和配置的易失性或非易失性存储设备。存储器系统104的储存设备表示储存计算机可执行指令(即, 软件)的计算机可读储存介质,计算机可执行指令包括OS 122、GP代码12、编译器20、GP 可执行代码32以及DP可执行代码34。指令可由计算机系统100执行以执行在此所述的 OS 122,GP代码12、编译器20、GP可执行代码32以及DP可执行代码34的功能和方法。存储器系统104存储从处理器封装102、输入/输出设备106、显示设备108、外围设备110和网络设备112接收的指令和数据。存储器系统104将存储的指令和数据提供给处理器封装 102、输入/输出设备106、显示设备108、外围设备110和网络设备112。存储器系统104中的存储设备的示例包括硬盘驱动器、随机存取存储器(RAM)、只读存储器(ROM)、闪存驱动器和卡、以及诸如磁盘和CD和DVD之类的光盘。输入/输出设备106包括被配置成将指令或数据从用户输入到计算机系统100并将指令或数据从计算机系统100输出到用户的任何合适的类型、数量和配置的输入/输出设备。输入/输出设备106的示例包括键盘、鼠标、触摸垫、触摸屏、按钮、拨盘、旋钮和开关。显示设备108包括被配置成向计算机系统100的用户输出文本和/或图形信息的任何合适的类型、数量和配置的显示设备。显示设备108的示例包括监视器、显示屏和投影仪。外围设备110包括被配置成用计算机系统100中的一个或多个其他组件来操作以执行通用或专用处理功能的任何合适的类型、数量和配置的外围设备。网络设备112包括被配置成允许计算机系统100通过一个或多个网络(未示出) 进行通信的任何合适的类型、数量和配置的网络设备。网络设备112可根据任何合适的网络协议和/或配置来操作以允许计算机系统100将信息发送给网络或者从网络接收信息。图5是示出了具有被配置为执行DP可执行代码34的计算引擎210的计算机系统 200的实施例的框图。计算引擎210包括一个或多个计算节点211。每个计算节点211是共享一存储器层级的计算资源的集合。每个计算节点211包括一个或多个处理元件(PE)212 的集合、以及存储DP可执行代码34的存储器214。PE 212执行DP可执行代码34并将由 DP可执行代码34生成的结果储存在存储器214中。特别地,PE 212执行DP可执行代码34 以将至少一个变换40应用到可索引类型42以生成如图5所示的并且如上所描述的经变换的可索引类型44。具有带有被优化为数据并行计算(即,执行DP程序或算法)的硬件架构的一个或多个计算资源的计算节点211被称为DP优化计算节点211。DP优化计算节点211的示例包括其中处理元件212的集合包含一个或多个GPU的节点、以及其中处理元件212的集合包含通用处理元件102中的SIMD单元集合的节点。不具有带有被优化为数据并行计算的硬件架构的计算资源的计算资源的计算节点211(即,仅仅具有通用处理元件的处理器封装102)被称为非DP优化计算节点211。在这样的计算节点211中,存储器214可与存储器104(诸如,由GPU所使用的GPU存储器)分离,或可以是存储器104(诸如,由通用处理元件102中的SIMD单元所使用的存储器)的一部分。在图5的实施例中,计算机系统100(图4中所示)形成主机计算节点,该主机计算节点被配置为向计算节点211提供DP可执行代码34以供执行,以及使用互连114(图4) 接收由DP可执行代码34所生成的结果。主机计算节点包括共享一存储器层级(即,存储器104)的通用计算资源(即,处理器封装102的通用处理元件)的集合。主机计算节点可配置有对称多处理体系架构(SMP),并且也可被配置为使用例如非一致存储器访问(NUMA) 体系架构来最大化存储器104的存储器位置。主机计算节点的OS 122(图4)被配置为执行DP调用点以使DP可执行代码34被 DP优化计算节点或非DP优化计算节点211所执行。在存储器214与存储器104分离的实施例中,主机计算节点使DP可执行代码34以及一个或多个可索引类型42从存储器104被复制到存储器214。在存储器104包括存储器214的实施例中,主机计算节点可将存储器 104中的DP可执行代码34和/或一个或多个可索引类型42的副本指定为存储器214,和/ 或可将DP可执行代码34和/或一个或多个可索引类型42从存储器104的一部分复制到形成存储器214的存储器104的另一部分。在计算节点211和主机计算节点之间的复制处理可以是同步点,除非被指定为是异步的。主机计算节点和每一个计算节点211可同时彼此独立地执行代码。主机计算节点和每一个计算节点211可在同步点进行交互以协调节点计算。在一个实施例中,计算引擎210表示图形卡,其中一个或多个图形处理单元(GPU) 包括PE 212和与存储器104(图4)分离的存储器214。在该实施例中,图形卡的驱动程序 (未示出)可以将DP可执行代码34的字节代码转换成所述GPU的指令集以供所述GPU的 PE 212执行。在另一实施例中,计算引擎210由一个或多个GPU(即PE 212)的组合来形成,所述GPU与一个或多个通用执行元件以及存储器104(图4)的一部分214 —起被包括在处理器封装102(图4)中。在该实施例中,可以在计算机系统100上配备附加的软件来将DP可执行代码;34的字节代码转换成处理器封装102中的GPU的指令集。在另一实施例中,计算引擎210由处理器封装102(图4)的一个或多个执行元件中的一个或多个SIMD单元以及存储器104(图4)的一部分214的组合所形成。在该实施例中,可以在计算机系统100上配备附加的软件来将DP可执行代码34的字节代码转换成处理器封装102中的SIMD单元的指令集。在又一实施例中,计算引擎210由处理器封装102(图4)的一个或多个执行元件的一个或多个标量处理流水线以及存储器104(图4)的一部分214的组合所形成。在该实施例中,可以在计算机系统100上配备附加的软件来将DP可执行代码34的字节代码转换成处理器封装102中的标量处理流水线的指令集。 尽管此处说明并描述了具体实施例,但本领域技术人员可以理解,可用各种替换和/或等价实现来替换此处示出并描述的具体实施例而不背离本发明的范围。本申请旨在覆盖此处讨论的具体实施例的任何改编或变型。因此,本发明旨在仅由权利要求书及其等效方案来限制。
权利要求
1.一种由计算机系统(100/200)中的编译器00)所执行的方法,所述方法包括在被配置为在一个或多个数据并行优化计算节点(211)上执行的数据并行源代码(14)中标识可索引类型0 上的两个或多个变换GO)的集合;以及从所述数据并行源代码中生成数据并行可执行代码(34),以使得所述数据并行可执行代码将在所述可索引类型上的所述两个或多个变换GO)的集合实现为组合操作。
2.如权利要求1所述的方法,其特征在于,所述数据并行源代码是用带有数据并行扩展的高级通用编程语言来编写的。
3.如权利要求1所述的方法,其特征在于,所述数据并行源代码是用高级数据并行编程语言来编写的。
4.如权利要求1所述的方法,其特征在于,所述两个或多个变换的集合中的至少一个形成变换范围模式。
5.如权利要求1所述的方法,其特征在于,所述两个或多个变换的集合中的至少一个形成范围模式。
6.如权利要求1所述的方法,其特征在于,所述两个或多个变换的集合包括以下中的至少一个转置、扩展、移位、环状移位、分片、投射、投影、分裂、晕绕、邻接、内置、分区、调整形状、以及只读。
7.如权利要求1所述的方法,其特征在于,所述一个或多个数据并行优化计算节点包括至少一个图形处理单元。
8.如权利要求1所述的方法,其特征在于,所述一个或多个数据并行优化计算节点包括至少一个通用处理器。
9.一种存储计算机可执行指令的计算机可读储存介质(104/214),所述计算机可执行指令在由计算机系统(100/200)执行时执行一种方法,所述方法包括在旨在用于在一个或多个数据并行优化计算节点(211)上执行的数据并行源代码 (14)中标识应用到可索引类型G2)的两个或多个变换^))的序列;以及根据所述数据并行源代码来生成数据并行可执行代码(34),所述数据并行可执行代码优化了所述可索引类型上的所述两个或多个变换的序列的实现。
10.如权利要求9所述的计算机可读储存介质,其特征在于,所述两个或多个变换的集合中的至少第一个形成变换范围模式。
全文摘要
一高级编程语言提供了用于数据并行处理环境中的可索引类型上的可扩展变换集。用于该语言的编译器将每个变换实现为来自可索引类型的映射,以允许每个变换可被应用到其他变换。在编译时间,编译器标识数据并行源代码中的每个可索引类型上的变换的序列,并生成数据并行执行代码以将序列实现为运行时使用变换映射的组合操作。编译器也包含优化处理,该优化处理基于至数据并行执行代码的变换序列。
文档编号G06F9/45GK102314370SQ20111019261
公开日2012年1月11日 申请日期2011年6月29日 优先权日2010年6月30日
发明者C·D·卡拉罕二世, L·张, P·F·林塞斯, R·莫洛伊, W·朱, Y·莱瓦诺尼 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1