可扩展的数据并行语义的制作方法

文档序号:6442744阅读:257来源:国知局
专利名称:可扩展的数据并行语义的制作方法
技术领域
本申请涉及可扩展的数据并行语义。
背景技术
计算机系统通常包括一个或多个通用处理器(例如,中央处理器(CPU))以及一个或多个专用数据并行计算节点(例如,图形处理单元(GPU)或CPU中的单指令多数据 (SIMD)执行单元)。通用处理器通常在计算机系统上执行通用处理,而数据并行计算节点通常在计算机系统上执行数据并行处理(例如图形处理)。通用处理器通常具有实现数据并行算法的能力,但是在没有在数据并行计算节点中发现的优化的硬件资源的情况下这样做。结果,通用处理器在执行数据并行算法时可能比数据并行计算节点低效得多。数据并行计算节点传统地在计算机系统上执行程序方面扮演通用处理器的辅助角色。随着为数据并行算法优化的硬件的角色由于数据并行计算节点处理能力的增强而增加,增强程序员对数据并行计算节点进行编程的能力并使对数据并行计算节点进行编程变得更为容易可能是合乎需要的。然而,数据并行算法一般用数据并行语言编程,该数据并行语言具有不同于通用编程语言的语义限制。

发明内容
提供本发明内容以便以简化的形式介绍将在以下的具体实施方式
中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。高级编程语言提供可扩展的数据并行语义。用户代码使用计算设备对象和资源查看对象来指定用于执行数据并行代码的硬件和软件资源。用户代码使用对象和语义元数据以容许新的和/或更新的类型的计算节点以及新的和/或更新的类型的运行时库来执行。 可扩展的数据并行语义容许用户代码由新的和/或更新的类型的计算节点以及运行时库来执行。


包括附图来提供了对各实施例的进一步理解,且这些附图被合并在本发明书内并构成其一部分。附图示出各实施例,并且与说明书一起用于解释本发明的原理。其他实施例和各实施例的许多预期优点将随着参考下面的详细描述进行更好的理解而得到认识。附图的元素不一定相对于彼此而缩放。相同的附图标记指代对应的类似部分。图1是示出带有可扩展的数据并行语义的运行时环境的实施例的框图。图2是示出实现可扩展数据并行语义的代码的实施例的计算机代码图。图3A-3C是示出在实现可扩展数据并行语义的运行时环境中运行时库的实施例的框图。图4A-4B是示出支持可扩展并行语义的数据结构的实施例的框图。
图5是示出被配置成编译并执行带有可扩展数据并行语义的数据并行代码的计算机系统的实施例的框图。
具体实施例方式在以下具体实施例中,对附图进行了参考,附图构成了实施例的一部分且在其中作为示例示出了可在其中实践本发明的各特定实施例。就此,诸如“顶部”、“底部”、“前方”、 “后方”、“前导”、“尾部”等的方向性术语参考正在描述的附图的方向来使用。因为实施例的各组件可位于多个不同的方向,所以方向性术语出于说明的目的来使用而不是限制。可以理解,可以使用其它实施例并且可以做出结构上或逻辑上的改变而不背离本发明的范围。 因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。应该理解, 此处描述的各示例性实施例的特征可相互组合,除非另外具体注明。图1是示出在诸如图5中所示的计算机系统100的计算机系统中带有可扩展数据并行语义的运行时环境2的实施例的框图。运行时环境2表示计算机系统中的运行时操作模式,其中计算机系统正在执行来自用户代码10的指令以及在一个或多个计算节点121上的一个或多个运行时库20的集合(也在图5中示出,且下文将更详细描述)。代码10包括来自高级通用或数据并行编程语言的可被编译成一个或多个可执行代码(例如,图5中所示的DP可执行代码138)的用于由一个或多个计算节点121执行的指令序列。代码10结合一个或多个运行时库20而执行,其中运行时库20包括提供数据并行函数的数据并行应用编程接口(API)。代码10使得计算设备对象12从运行时库20中产生以指定用于执行代码10的至少一部分的计算节点121,以及使得资源查看对象14从运行时库20中产生以指定在执行代码10中所要使用的运行时库20。计算设备对象12形成指定设备级别(即,计算节点21的类型)的硬件抽象。资源查看对象14指定描述如何使用由计算设备对象12所指定的硬件的资源级别。资源查看对象14例如可描述不同的DirectX实现(如,DirectX IUDirectX 11. 1、DirectX 12、以及DirectX 13)或者带有本机代码产生或带有WARP的SSE/AVX实现 (DirectX软件模拟器)。资源查看对象14还可包括存储器管理和内核执行服务。计算设备对象12和资源查看对象14的使用以及相关联的语义元数据提供了用于处理代码10的底层编程语言的语义变化的可扩展的数据并行语义。可扩展数据并行语义容许代码10与新的和/或更新的类型的计算节点以及新的和/或更新的类型的运行时库20 —起被执行。 因此,被设计为与特定类型的计算节点121 —起使用的代码10的构造可由新的和/或更新的类型的计算节点121执行。在一个实施例中,代码10包括来自具有数据并行扩展的高级通用编程语言(之后称为GP语言)的指令序列,所述指令序列形成存储在一个或多个模块的集合中的程序。GP 语言可允许程序被编写在不同部分(即模块)中,使得每个模块都可以被存储在可以由计算机系统访问的分开的文件或者位置中。GP语言提供用于对包括一个或多个通用处理器和一个或多个专用的DP最优计算节点的计算环境进行编程的单个语言。DP最优计算节点通常是通用处理器的图形处理单元(GPU)或SIMD单元,但也可包括通用处理器的标量或矢量执行单元、场可编程门阵列(FPGA)或一些计算环境中的其他合适设备。使用GP语言,程序员可将通用处理器和DP源代码均包含在代码10中以便由通用处理器和DP计算节点分别执行,并协调通用处理器和DP源代码的执行。在该实施例中,代码10可以表示任何合适类型的代码,诸如应用、库函数或操作系统服务。GP语言可以通过扩展诸如C或C++之类的广泛适用的高级且通用的编程语言以包括数据并行特征来形成。其中可出现DP特征的通用语言的其他示例包括Java 、PHP、 Visual Basic、Perl、Python 、C#、Ruby、Delphi、Fortran、VB、F#、OCaml、Haskell、Erlang、 NESLXhapel以及Jav必cript 。GP语言的实现可包括允许程序的不同部分被包括在不同模块中的丰富链接能力。数据并行特征提供了利用DP最优计算节点的专用体系结构来允许数据并行操作比使用通用处理器(即,非DP最优计算节点)更快或更有效地执行的编程工具。GP语言也可以是允许程序员对通用处理器和DP最优计算节点两者均进行编程的另一合适的高级通用编程语言。在另一个实施例中,代码10包括来自高级数据并行编程语言(此后称DP语言)的形成程序的指令序列。DP语言提供了用于对具有一个或多个DP最优计算节点的计算环境中的DP最优计算节点进行编程的专用语言。使用DP语言,程序员在代码10中生成旨在供在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(数据并行C)、DAPPLE或APL。在该实施例中,代码10可以表示任何合适类型的DP源代码,诸如应用、库函数或操作系统服务。代码10包括被指定为在DP最优计算节点121上执行的代码部分。DP最优计算节点121具有一个或多个计算资源且该资源具有为数据并行计算(即,执行DP程序或算法) 而优化的硬件体系结构。在使用GP语言来编写代码10的图2所示的一个实施例中,GP语言允许程序员在定义矢量函数时使用注解四(例如,rlarmote)来指定GP源代码。注释四与旨在供在DP最优计算节点上执行的矢量函数的函数名27(例如vect0r_fUnc)相关联。 代码10还可包括在调用点(诸如,forall (对于全部),reduce (缩减),scan (扫描),或 sort (排序))处对矢量函数的一个或多个调用28 (例如,forall. · ·,vector_func, · · ·)。 对应于调用点的矢量函数被称为内核函数。内核函数可调用代码10中的其他矢量函数 (即,其他DP源代码),并可被视为矢量函数调用图中的根。内核函数还可使用由代码10 所定义的类型(例如,类或结构体)。这些类型可以被注释为DP源代码或可以不被注释成 DP源代码。在其他实施例中,可使用其他合适的编程语言结构体来将代码10的各部分指定为DP源代码和/或通用处理器代码。此外,在使用DP语言来编写代码10的实施例中,注释四可以被省略。注释四为矢量函数指定资源级别语义。注释四容许编译器来确保矢量函数的语义状态与如在计算设备对象12和资源查看对象14中所反映的目标计算节点121的语义和其他特性相兼容。随着语义限制随时间而减弱,带有更少语义限制的较新的计算节点121 可执行带有较旧注释29 (其指示较高级别的语义限制)的矢量函数。运行时库20包括提供任务并行和/或数据并行(DP)执行能力的任何合适的类型和/或数量的库。例如,在一个实施例中,运行时库20可包括DirectX运行时库和带有并行模式库(PPL)的并发运行时库。运行时库20提供应用编程接口(API)或者提供带有任务并行和/或数据并行能力的函数的其他合适的编程构造。图3A-3C分别示出用于图1所示的运行时环境2的运行时库20的实施例 20(1)-20(3)。在图3A的实施例中,运行时库20(1)包括计算设备函数42、资源查看函数 43、数据并行(DP)函数以及调用点抽象函数46。计算设备函数42根据用户代码10所提供的参数来创建计算设备对象12 (图1中所示)。具体地,用户代码10传递指定用于执行代码10的至少一部分的计算节点类型的设备级别(如,devicejevel)来创建计算设备对象12。在一个实施例中,计算设备函数42识别图4A的数据结构中所示的设备级别(即,none (无)、CUStom(自定义)、GPU、WARP、REF、 NATIVE、SSE、AVX、及LRB)。相应地,在这个实施例中,用户代码可传递这些设备级别中的一个。资源查看函数43根据用户代码10所提供的参数来创建资源查看对象14(图1中所示)。具体地,用户代码10传递描述如何使用由计算设备对象12所指定的硬件的资源级别(如,resource_level)。在一个实施例中,资源查看函数43识别图4B的数据结构中所示的资源级另Ij (即,none (无)、NATIVE(本机)、CUST0M(自定义)、DX11、DX11. 1、及 DX12)。 相应地,在这个实施例中,用户代码可传递这些资源级别中的一个。用户代码10的设备和资源级别指示用户代码10要求达到的语义限制的级别。假设,当使用新的和更新的计算节点121和运行时库20来执行用户代码10的时候,这些语义限制随着时间而减少。相应地,如果计算节点121和运行时库20相比用户代码10的设备和资源级别而言具有相同的或者较少的语义限制,则计算节点121和运行时库20能执行用户代码10。在一个示例中,用户代码10创建具有GPU的设备级别的计算设备对象12、以及具有DXll的资源级别的资源查看对象14。用户代码10还包括具有指示DXll的注释四的至少一个矢量函数。GPU的设备级别指示用户代码10的至少一部分为在GPU上执行而写,而 DXll的资源级别指示用户代码10的至少一部分为用包括或以其它方式支持DirectX 11的运行时库20来执行而写。相应地,一个或多个矢量函数符合DirectX 11的语义限制,且可用DirectX 11在GPU上执行。如果资源查看对象14具有DX12的资源级别而不是DXll (即, 用户代码10为用包括或以其它方式支持DirectX 12的运行时库20来执行而写),那么一个或多个矢量函数的一个或多个注释四可以是DX11、DX 11. 1、或DX12,因为DirectX 12 相比DirectX 11和DirectX 11. 1包括较少的语义限制。在另一个示例中,用户代码10创建具有WARP的设备级别的计算设备对象12、以及具有DXll或DX12的资源级别的资源查看对象14。用户代码10还包括具有指示DXll (如果资源级别是DXll或DXll、DX11. 1)或DX12 (如果资源级别是DX12)的注释四的至少一个矢量函数。WARP的设备级别指示用户代码10的至少一部分为由SSE、AVX、或者启用LRBni 的DirectX模拟器执行而写,而DXll或DX12的资源级别指示用户代码10的至少一部分为用包括或以其它方式支持DirectX 11或DirectX 12的运行时库20来执行而写。相应地, 可在WARP模拟器上用DirectX 11或更高版本执行符合DirectX 11的语义限制的矢量函数,且可在WARP模拟器上用DirectX 12执行符合DirectX 12的语义限制的矢量函数。在又一个示例中,用户代码10创建具有REF的设备级别的计算设备对象12、以及具有DXll或DX12的资源级别的资源查看对象14。用户代码10还包括具有指示DXll (如果资源级别是DXll或DXll、DX11. 1)或DX12 (如果资源级别是DX12)的注释四的至少一个矢量函数。REF的设备级别指示用户代码10的至少一部分为由基于单线程CPU的DirectX 模拟器执行而写,而DXll或DX12的资源级别指示用户代码10的至少一部分为用分别地包括或以其它方式支持DirectX 11或DirectX 12的运行时库20来执行而写。相应地,可在 REF模拟器上用DirectX 11或更高版本执行符合DirectX 11的语义限制的矢量函数,且可在REF模拟器上用DirectX 12执行符合DirectX 12的语义限制的矢量函数。上述示例使用支持DirectX的运行时库20。在其他示例中,可通过将硬件类型指示为设备级别、并将本地指示为资源级别而支持其他硬件实现。例如,用户代码10可创建计算设备对象12,其具有SSE的设备级别以在来自Intel和AMD的CPU上启用SSE矢量单元、具有AVX的设备级别以启用来自htel的Sandy Bridge CPU、或者具有LRB的设备级别以启用来自htel的Knights Ferry专用数据并行优化CPU。使用这些示例,用户代码10 可创建具有本地级别(即,NATIVE)的资源查看对象14,其中用户代码10的矢量函数并不相关于数据并行语义而受限,而是符合底层通用语言(如,C++)的语义。返回参看图3A中的运行时库20 (1),DP函数44提供数据并行函数来为所选类型的计算机节点121 (诸如GPU或具有WARP或REF软件模拟器的那些)实现调用点,诸如 forall (对于全部)、SCan (扫描)、reduCe (缩减)、及sort (排序)。对于其他类型的计算节点121(如,新的和/或更新的类型),运行时库20(1)提供对调用点进行抽象的调用点抽象函数46。调用点抽象函数46可被用于为新的和/或更新的类型的计算节点121实现调用点功能。如图;3B中所示,用户也可提供包括自定义计算设备函数48、自定义资源查看函数、和/或自定义DP函数50的一个或多个运行时库20 (2)。可将自定义计算设备函数48 实现为抽象基类,并容许用户为用于执行用户代码10的新的和/或更新的类型的计算节点 121提供语义元数据。自定义资源查看函数49也可被实现为抽象基类,并容许用户提供描述如何使用用于执行用户代码10的硬件的新的和/或更新的资源级别。自定义DP函数50 容许用户提供可在新的和/或更新的类型的计算节点121上执行的诸如forall (对于全部)、scan (扫描)、reduce (缩减)、及sort (排序)之类的自定义调用点实现。在一个示例中,为了使用运行时库20 O),用户代码10创建具有⑶ST0M(自定义) 的设备级别的计算设备对象12、以及具有NATIVE (本机)的资源级别的资源查看对象14。 用户代码10还调用自定义计算设备函数48来为新的和/或更新的类型的计算节点121而提供语义元数据。对于调用点,用户代码10可使用运行时库20(1)的调用点抽象函数46 来为计算节点121实现合适的调用点功能,或者提供实现调用点的自定义DP函数50。在另一个示例中,为了使用运行时库2(K2),用户代码10创建具有NATIVE的设备级别的计算设备对象12、以及具有⑶STOM的资源级别的资源查看对象14。用户代码10也调用自定义资源查看函数49来提供描述如何使用由计算设备对象12指定的用于执行用户代码10的计算节点121的新的和/或更新的资源级别。例如,资源级别可以是Intel Thread Building Blocks (线程创建模块,TBB)的自定义版本。对于调用点,用户代码10 可使用运行时库20(1)的调用点抽象函数46来为计算节点121实现合适的调用点功能,或者提供实现调用点的自定义DP函数50。
在又一个示例中,为了使用运行时库2(K2),用户代码10创建具有⑶STOM的设备级别的计算设备对象12、以及具有CUSTOM的资源级别的资源查看对象14。用户代码10调用自定义计算设备函数48来为新的和/或更新的类型的计算节点121提供语义元数据。用户代码10也调用自定义资源查看函数49来提供描述如何使用由计算设备对象12指定的用于执行用户代码10的计算节点121的新的和/或更新的资源级别。对于调用点,用户代码10可使用运行时库20(1)的调用点抽象函数46来为计算节点121实现合适的调用点功能,或者提供实现调用点的自定义DP函数50。为了在主机(即,非矢量CPU)上执行矢量函数,用户代码10创建带有NATIVE的设备级别的计算设备对象12、以及具有NATIVE的资源级别的资源查看对象14。NATIVE的设备级别指示用户代码10的至少一部分可在主机上执行。NATIVE的资源级别容许用户代码10的矢量函数并不相关于数据并行语义而受限,而是符合底层通用语言(如,C++)的语义。对于主机执行,用户代码10可使用运行时库20(1)的调用点抽象函数46来为计算节点121实现合适的调用点功能,或者提供实现调用点的自定义DP函数50。通过提供可扩展的数据并行语义(其中减少或消除了数据并行语义限制),可实现与基于任务的并行编程运行时库20的集成(或异构编程)。具体地,图3C中所示的带有任务并行函数52的运行时库20 (3)可与DP函数44 (图3A)结合使用。在其中任务并行函数52表示带有并行模式库(PPL)的并发运行时库(ConcRT)的一个示例中,可产生使用任务并行函数52的forall的实现用于在使用虚拟处理器的主机上执行。类似地,来自PPL 和C++标准模板库(STL)的foreach (对于每个)和transform (变换)的实现可包括基于范围的签名而不是线性迭代器。在一个实施例中,范围模式的选项是
枚举器(基本是具有前向、双向等变量的经典
迭代器模式) 递归对分(任务并行)
程序分块(任务并行)
随机存取(任务或数据并行)。foreach和transform的实现激活了使用这些范围模式的范围特性或类别。在foreach的数据并行形式中,“范围(range) ”是forall中计算域的模拟。当用具有数据并行子特性的随机存取“范围”呈现的时候,单纯的实现可调用foreach内部的 forall。可通过使用拉姆达闭包来缓和foreach或transform内的受限数量的内核自变量。如果在foreach被调用时用户想要使用forall功能的ConcRT实现(即使它不是对于全部被调用的),假设ConcRT foreach还没有被实现(否则它可以被通常地烧固 (baked in)-调用的forall的版本取决于计算设备对象12和资源查看对象14的语义状态),foreach可专用于为基于ConcRT (或者其他自定义)的数据并行调用点实现而创建的 “范围”类型。 基于内置的“范围”的foreach和transform实现激活了“范围”特性来决定哪一个实现模式。为了引入自定义数据并行调用点实现,新的“范围”类型可能过载。因此, 使用现有语言机制的用户扩展性可实现数据并行函数44与基于任务的并行编程运行时库20 (如,带有任务并行函数52的运行时库20(3))的集成。图5是示出被配置成编译并执行带有可扩展数据并行语义的数据并行代码10的计算机系统100的实施例的框图。计算机系统100包括具有容纳在一个或多个处理器封装(未示出)中的一个或多个处理元件(PE) 102以及存储器系统104的主机101。计算机系统100还包括零个或更多个输入/输出设备106、零个或更多个显示设备108、零个或更多个外围设备110和零个或更多个网络设备112。计算机系统100还包括具有一个或多个DP最优或其他类型的计算节点121的计算引擎120,其中每一 DP最优计算节点121包括一个或多个处理元件(PE) 122 的集合和存储DP可执行代码138的存储器124。主机101、输入/输出设备106、显示设备108、外围设备110、网络设备112和计算
引擎120使用包括任何合适的类型、数量和配置的控制器、总线、接口、和/或其他有线或无线连接的一组互连114来进行通信。计算机系统100表示出于通用或专用目的而配置的任何合适的处理设备。计算机系统100的示例包括服务器、个人计算机、膝上型计算机、图形输入板计算机、智能电话、个人数字助理(PDA)、移动电话、和音频/视频设备。计算机系统100的组件(即,主机101、 输入/输出设备106、显示设备108、外围设备110、网络设备112、互连114和计算引擎120) 可包含在公共外壳(未示出)中或任何合适数量的分立外壳(未示出)中。处理元件102各自形成被配置成执行存储在存储器系统104中的指令(即软件) 的执行硬件。每一处理器封装中的处理元件102可具有相同或不同的体系结构和/或指令集。例如,处理元件102可以包括顺序执行元件、超标量执行元件、以及数据并行执行元件 (例如GPU执行元件)的任何组合。每一处理元件102被配置为访问并执行存储在存储器系统104中的指令。这些指令可包括基本输入输入系统(BIOS)或固件(未示出)、操作系统(0 132、代码10、编译器134、GP可执行代码136以及DP可执行代码138。每一处理元件102可以结合或响应于从输入/输出设备106、显示设备108、外围设备110、网络设备112 和/或计算引擎120接收到的信息来执行指令。主机101引导并执行OS 132。OS 132包括可以由处理元件执行以管理计算机系统100的组件并提供允许程序访问并使用这些组件的一组功能的指令。在一实施例中,OS 132是Windows操作系统。在其他实施例中,OS 132是适于和计算机系统100 —起使用的
另一操作系统。当计算机系统执行编译器134来编译代码10时,编译器134生成一个或多个可执行代码——例如,一个或多个GP可执行代码136和一个或多个DP可执行代码138。在其他实施例中,编译器134可生成一个或多个GP可执行代码136以使每个GP可执行代码136 包括一个或多个DP可执行代码138,或可生成一个或多个DP可执行代码138而不生成任何GP可执行代码136。GP可执行代码136和/或DP可执行代码138是响应于为了编译代码10的全部或所选部分对具有数据并行扩展的编译器134的调用来生成的。该调用可以由例如程序员或计算机系统100的其他用户或者计算机系统100中的其他代码或另一个计算机系统(未示出)的其他代码来生成。GP可执行代码136表示旨在供在一个或多个通用处理元件102 (例如中央处理单元(CPU))上执行的程序。GP可执行代码136包括来自一个或多个通用处理元件102的指令集的低级指令。DP可执行代码138表示旨在并被优化成在一个或多个数据并行(DP)最优计算节点121上执行的数据并行程序或算法(例如着色器)。在一个实施例中,DP可执行代码138 包括DP字节代码或者在DP最优计算节点121上被执行之前使用设备驱动程序(未示出) 被转换成来自DP最优计算节点121的指令集的低级指令的某种其他中间表示(IL)。在其他实施例中,DP可执行代码138包括来自一个或多个DP最优计算节点121的指令集的低级指令,其中该低级指令是由编译器134插入的。因此,GP可执行代码136可以由一个或多个通用处理器(诸如,CPU)直接执行,并且DP可执行代码138或可以由一个或多个DP最优计算节点121直接执行或可以在被转换成DP最优计算节点121的低级指令以后由一个或多个DP最优计算节点121来执行。计算机系统100可使用一个或多个处理元件102来执行GP可执行代码136,并且计算机系统100可使用下文中更详细描述的一个或多个PE 122来执行DP可执行代码138。存储器系统104包括被配置成存储指令和数据的任何合适的类型、数量和配置的易失性或非易失性存储设备。存储器系统104的储存设备表示储存包括OS 132、代码10、 编译器134、GP可执行代码136以及DP可执行代码138的计算机可执行指令(即软件)的计算机可读储存介质。指令可由计算机系统100执行以实现此处所述的OS 132、代码10、 编译器134、GP可执行代码136以及DP可执行代码138的功能和方法。存储器系统104存储从处理元件102、输入/输出设备106、显示设备108、外围设备110、网络设备112和计算引擎120接收的指令和数据。存储器系统104将所存储的指令和数据提供给处理元件102、 输入/输出设备106、显示设备108、外围设备110、网络设备112和计算引擎120。存储器系统104中的存储设备的示例包括硬盘驱动器、随机存取存储器(RAM)、只读存储器(ROM)、 闪存驱动器和卡、以及诸如⑶和DVD之类的磁盘和光盘。输入/输出设备106包括被配置成将指令或数据从用户输入到计算机系统100并将指令或数据从计算机系统100输出到用户的任何合适的类型、数量和配置的输入/输出设备。输入/输出设备106的示例包括键盘、鼠标、触摸垫、触摸屏、按钮、拨盘、旋钮和开关。显示设备108包括被配置成向计算机系统100的用户输出文本和/或图形信息的任何合适的类型、数量和配置的显示设备。显示设备108的示例包括监视器、显示屏和投影仪。外围设备110包括被配置成用计算机系统100中的一个或多个其他组件来操作以执行通用或专用处理功能的任何合适的类型、数量和配置的外围设备。网络设备112包括被配置成允许计算机系统100跨一个或多个网络(未示出)进行通信的任何合适的类型、数量和配置的网络设备。网络设备112可根据任何合适的网络协议和/或配置来操作以允许计算机系统100将信息发送给网络或者从网络接收信息。计算引擎120被配置成执行DP可执行代码138。计算引擎120包括一个或多个计算节点121。每一计算节点121是共享一存储器分层结构的计算资源的集合。每一计算节点121包括一个或多个PE 122的集合以及存储DP可执行代码138的存储器124。PE 122 执行DP可执行代码138并将由DP可执行代码138生成的结果储存在存储器124中。如上所述,具有一个或多个计算资源且该资源具有为数据并行计算(即,执行DP 程序或算法)而优化的硬件体系结构的计算节点121被称为DP最优计算节点121。DP最优计算节点121的示例包括其中PE 122的集合包括一个或多个GPU的节点121,以及其中 PE 122的集合包括通用处理器封装中的SIMD单元的集合的节点121。不具有带有为数据并行计算而优化的硬件体系结构的任何计算资源的计算节点121(例如,仅仅具有通用处理元件102的处理器封装)被称为非DP最优计算节点121。在每一计算节点121中,存储器1 可与存储器系统104分开(诸如,GPU所使用的GPU存储器),或可以是存储器系统 104的一部分(例如,通用处理器封装102中的SIMD单元所使用的存储器)。主机101形成被配置成将DP可执行代码138提供给计算节点121以供执行并且使用互连114接收由DP可执行代码138生成的结果的主机计算节点。主机计算节点包括共享一存储器分层结构(即,存储器系统104)的通用计算资源(即,通用处理元件102)的集合。主机计算节点可被配置成具有对称多处理体系结构(SMP),并且还可被配置为使用例如非均勻存储器存取(NUMA)体系结构来最大化存储器系统104的存储器局部性。主机计算节点的OS 132被配置为执行DP调用点以使DP可执行代码138被DP最优计算节点或非DP最优计算节点121执行。在其中存储器IM与存储器系统104分开的实施例中,主机计算节点使DP可执行代码138以及一个或多个可索引类型14从存储器系统104复制到存储器124。在其中存储器系统104包括存储器IM的实施例中,主机计算节点可将存储器系统104中的DP可执行代码138和/或一个或多个可索引类型14的副本指定为存储器124,和/或将DP可执行代码138和/或一个或多个可索引类型14从存储器系统104的一部分复制到形成存储器124的存储器系统104的另一部分中。在计算节点121 和主机计算节点之间的复制过程可以是同步点,除非它被指定为是异步的。主机计算节点和每一计算节点121可并发地彼此独立地执行代码。主机计算节点和每一计算节点121可在同步点处进行交互以协调节点计算。在一个实施例中,计算引擎120表示图形卡,其中一个或多个图形处理单元(GPU) 包括PE 122以及与存储器系统104分开的存储器124。在该实施例中,图形卡的驱动程序 (未示出)可以将DP可执行代码138的字节代码或某种其他中间表示(IL)转换成GPU的指令集以供GPU的PE 122执行。在另一实施例中,从一个或多个GPU(即,PE 122)的组合中形成计算引擎120,该一个或多个GPU被包括在具有一个或多个通用处理元件102以及包括存储器IM的存储器系统104的一部分的处理器封装中。在该实施例中,可以在计算机系统100上提供附加软件来将DP可执行代码138的字节代码或某种其他中间表示(IL)转换成处理器封装中的GPU 的指令集。在另一实施例中,从一个或多个处理器封装中的一个或多个SIMD单元的组合中形成计算引擎120,该一个或多个处理器封装包括处理元件102以及包括存储器IM的存储器系统104的一部分。在该实施例中,可以在计算机系统100上提供附加软件来将DP可执行代码138的字节代码或某种其他中间表示(IL)转换成处理器封装中的SIMD单元的指令集。在又一实施例中,从一个或多个处理器封装中的一个或多个标量或矢量处理流水线的组合中形成计算引擎120,该一个或多个处理器封装包括处理元件102以及包括存储器124的存储器系统104的一部分。在该实施例中,可以在计算机系统100上提供附加软件来将DP可执行代码138的字节代码或某种其他中间表示(IL)转换成处理器封装中的标量处理流水线的指令集。 尽管此处说明并描述了具体实施例,但本领域技术人员可以理解,可用各种替换和/或等价实现来替换所示出并描述的具体实施例而不背离本发明的范围。本申请旨在覆盖此处讨论的具体实施例的任何改编或变型。因此,本发明旨在仅由权利要求书及其等效方案来限制。
权利要求
1.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在由计算机系统(100)执行时使得所述计算机系统执行一种方法,所述方法包括响应于数据并行源代码(10)而产生计算设备对象(1 和资源查看对象(14),所述计算设备对象指定设备级别且所述资源查看对象指定资源级别;以及使用对应于所述设备级别的计算节点(121)、响应于数据并行算法的注释09)指示所述数据并行算法与所述资源级别相兼容,而执行所述数据并行源代码的所述数据并行算法 (138)。
2.如权利要求1所述的计算机可读存储介质,其特征在于,响应于所述资源级别相比所述注释而言具有较少的数据并行源代码的编程语言的语义限制,注释指示所述数据并行算法与所述资源级别相兼容。
3.如权利要求2所述的计算机可读存储介质,其特征在于,由所述资源查看对象所指定的所述资源级别是本机。
4.如权利要求1所述的计算机可读存储介质,其特征在于,还包括检测在所述计算设备对象中所述设备级别是自定义;以及响应于检测到所述设备级别是自定义,使用自定义设备函数或自定义数据并行函数之ο
5.如权利要求1所述的计算机可读存储介质,其特征在于,还包括使用调用点抽象函数而为所述计算节点而产生调用点实现。
6.如权利要求1所述的计算机可读存储介质,其特征在于,所述数据并行源代码是用具有数据并行扩展的编程语言编写的。
7.如权利要求1所述的方法,其特征在于,所述数据并行源代码是用高级数据并行编程语言编写的。
8.如权利要求1所述的计算机可读存储介质,其特征在于,所述一个或多个数据并行计算节点包括至少一个图形处理单元。
9.如权利要求1所述的计算机可读存储介质,其特征在于,所述一个或多个数据并行计算节点包括至少一个通用处理器。
10.一种由计算机系统(100)中的编译器(134)执行的方法,所述方法包括标识被设置为在一个或多个数据并行计算节点(121)上执行的数据并行源代码(10) 的数据并行算法中的注释09);以及响应于所述注释指示所述数据并行算法与由所述数据并行源代码所指定的资源级别相兼容,而从所述数据并行源代码中产生数据并行可执行代码(138)。
11.如权利要求10所述的方法,其特征在于,响应于所述资源级别相比所述注释而言具有较少的数据并行源代码的编程语言的语义限制,注释指示所述数据并行算法与所述资源级别相兼容。
12.权利要求10所述的方法,其特征在于,对应于所述资源查看对象的所述资源级别是本机。
13.如权利要求10所述的方法,其特征在于,还包括响应于检测到自定义的设备级别,而产生数据并行可执行代码以包括自定义计算设备函数或者自定义数据并行函数之一。
14.如权利要求10所述的方法,其特征在于,还包括使用调用点抽象函数而为一个或多个数据并行计算节点而产生调用点实现。
15.如权利要求10所述的方法,其特征在于,所述数据并行源代码是用带有数据并行扩展的高级通用编程语言和高级数据并行编程语言之一编写的。
全文摘要
本申请涉及可扩展的数据并行语义。高级编程语言提供可扩展的数据并行语义。用户代码使用计算设备对象和资源查看对象来指定用于执行数据并行代码的硬件和软件资源。用户代码使用对象和语义元数据以容许新的和/或更新的类型的计算节点以及新的和/或更新的类型的运行时库来执行。可扩展的数据并行语义容许用户代码由新的和/或更新的类型的计算节点以及运行时库来执行。
文档编号G06F9/38GK102566980SQ20111043617
公开日2012年7月11日 申请日期2011年12月22日 优先权日2010年12月23日
发明者P·F·林塞斯 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1