CN102541612B - 数据平行代码中的映射变换 - Google Patents

数据平行代码中的映射变换 Download PDF

Info

Publication number
CN102541612B
CN102541612B CN201110382436.8A CN201110382436A CN102541612B CN 102541612 B CN102541612 B CN 102541612B CN 201110382436 A CN201110382436 A CN 201110382436A CN 102541612 B CN102541612 B CN 102541612B
Authority
CN
China
Prior art keywords
data
type
index type
index
data parallel
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
CN201110382436.8A
Other languages
English (en)
Other versions
CN102541612A (zh
Inventor
P·F·林塞斯
Y·莱瓦诺尼
朱伟荣
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of CN102541612A publication Critical patent/CN102541612A/zh
Application granted granted Critical
Publication of CN102541612B publication Critical patent/CN102541612B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Image Processing (AREA)

Abstract

本发明涉及数据平行代码中的映射变换。高层编程语言提供了映射变换(12),该映射变换采用数据平行算法(14)并且将一组一个或多个输入可索引类型(32)作为参量(26)。映射变换将数据平行算法应用于该组输入可索引类型,以生成输出可索引类型,并且返回该输出可索引类型(34)。映射变换可用于将一个或多个数据平行算法(14)与另一数据平行算法(24)融合。

Description

数据平行代码中的映射变换
技术领域
本发明涉及计算机***,尤其涉及计算机***中代码的映射变换。
背景
计算机***通常包括一个或多个通用处理器(例如,中央处理单元(CPU))和一个或多个专有数据平行计算节点(例如,图形处理单元(GPU)或CPU中的单指令多数据(SIMD)执行单元)。通用处理器一般执行计算机***上的通用处理,而数据平行计算节点一般执行计算机***上的数据平行处理(例如,图形处理)。通用处理器通常具有实现数据平行算法的能力,但是在不需要数据平行节点中所发现的优化的硬件资源的情况下来这样做。因此,通用处理器在执行数据平行算法时远远没有数据平行计算节点有效。
数据平行计算节点在传统上扮演了对执行计算机***上的程序的通用处理器的支持角色。随着由于数据平行计算节点处理能力的增强而造成的为数据平行算法优化的硬件角色的增加,将需要增强程序员编程数据平行计算节点以及使数据平行计算节点的编程更加简单的能力。
数据平行计算节点一般执行例如被称为内核或者着色器的指定的数据平行算法。为了执行多个数据平行算法,一般消耗明显的计算开销以启动每一数据平行算法。此外,当数据平行计算节点具有和对应的主存计算节点不同的存储器层级结构时,将消耗额外的开销来将不同数据平行算法的中间结果复制到主存计算节点或者从主存计算节点复制。
发明内容
提供本发明内容以便以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。
高层编程语言提供了映射变换,该映射变换采用数据平行算法并且将一组一个或多个输入可索引类型作为自变量。映射变换将数据平行算法应用于该组输入可索引类型,以生成输出可索引类型,并且返回该输出可索引类型。映射变换可用于将一个或多个数据平行算法与另一数据平行算法融合。
附图说明
所附附图被包括以提供对各实施例的进一步理解,并且被并入和组成本发明的一部分。附图示出各实施例,并且与说明书一起用于解释各实施例的原理。其他实施例以及许多各实施例的预期优点将随着其通过参考以下详细描述变得更好理解而被容易地明白。附图的元素不需要相对于彼此而缩放。相同的标号指明对应的类似部分。
图1是示出具有映射变换的数据平行代码的实施例的计算机代码图。
图2是示出将映射变换应用于一组输入可索引类型的实施例的框图。
图3A-3C是示出使用映射变换的各实施例的框图。
图4是示出被配置为编译和执行包括了映射变换的数据平行代码的计算机***的实施例的框图。
详细描述
在以下详细描述中,对附图进行了参考,附图构成了实施例的一部分,并且在其中作为示例示出了其中能够实践本发明的特定实施例。出于这一考虑,参考所述附图的方向来使用诸如“顶部”、“底部”、“前”、“后”、“在前的”、“在后的”等方向术语。由于可以以众多不同的方向来放置各实施例的组件,因此方向术语仅用于示例的目的,而不作为限制。可以理解,可使用其他实施例并且可做出结构上或逻辑的改变而不背离本发明的范围。因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。可以理解,除非特别指明,此处描述的各示例性实施例的特征可以互相结合。
图1是示出具有通用映射变换12的数据平行(DP)代码10的实施例的计算机代码图。映射变换12采用DP算法14并且将一组一个或多个输入可索引类型作为自变量,如箭头16所指示将DP算法14应用于该组输入可索引类型以生成输出可索引类型,并且如箭头18所指示返回输出可索引类型。如以下更加详细描述的,映射变换12可用于将一个或多个DP算法14与另一DP算法24融合。
如此处所使用的,可索引类型是与非负整数的秩一起实现一个或多个下标操作符的任意数据类型,并且是由element_type(元素_类型)表示的类型。如果索引<N>是表示N-元整数的类型(即,任意类型的整数数据类型),则索引<N>的实例为一组N个整数{i0,i1,...,im},其中m等于N-1(即,N-元)。秩N的索引操作符采用索引<N>的N-元实例,并且将该实例与被称为元素类型的类型的另一实例相关联,在该元素类型中元素类型以可索引类型定义每一元素。在一个实施例中,可索引类型定义以下操作符中的一个或多个:
element_type operator[](index_declarator);
const element_type operator[](index_declarator)const;
element_type&operator[](index_declarator);
const element_type&operator[](index_declarator)const;
element_type&&operator[](index_declarator);或
const element_type&&operator[](index_declarator)const;
其中index_declarator(索引_声明符)采用以下至少一种形式:
const index<rank>&idx;
const index<rank>idx;
index<rank>&idx;
index<rank>idx。
在其他实施例中,操作符可以是函数、函子或更一般的表示。可索引类型的形状是为其定义以上下标操作符中的一个的index<rank>(索引<秩>)的集合。可索引类型一般具有多面体的形状,-即可索引类型可由有限数量的由坐标轴的线性函数组成的半空间的交点来代数地表示。
代码10包括来自高层通用或数据平行编程语言的一系列指令,所述指令可被编译为由一个或多个DP最优计算节点(例如,图4所示并且在以下更加详细描述的DP最优计算节点121)执行的一个或多个可执行文件(例如,DP可执行文件138)。代码10被配置成用于在一个或多个数据平行(DP)最优计算节点(诸如图4所示并且在以下更为详细描述的DP最优计算节点121)上进行最优执行。
在一个实施例中,代码10包括来自具有数据平行扩展的高层通用编程语言(此后记为GP语言)的一系列指令,所述指令形成存储在一组一个或多个模块中的程序。GP语言可允许程序被写入不同的部分(即,模块)中,从而每个模块可被存储在计算机***可访问的单独的文件或位置中。GP语言为对计算环境进行编程提供单一语言,该计算环境包括一个或多个通用处理器以及一个或多个专用DP最优计算节点。DP最优计算节点一般是图形处理单元(GPU)或通用处理器的SIMD单元,但是还可包括通用处理器的标量或矢量执行单元、现场可编程门阵列(FPGA)、或者某些计算环境中其他合适的设备。使用GP语言,程序员可将通用处理器和DP源代码两者包括在代码10中以分别用于由通用处理器和DP计算节点执行,并且协调通用处理器和DP源代码的执行。在这一实施例中,代码10可表示任意合适类型的代码,诸如应用程序、库函数、或者操作***服务。
可通过扩展诸如C或C++等广泛适应、高层以及通用的编程语言来形成GP语言以包括数据平行特征。其中DP特征可展现的通用语言的其他示例包括JavaTM、PHP、Visual Basic、Perl,PythonTM、C#、Ruby、Delphi、Fortran、VB、F#、OCaml、Haskell、Erlang、NESL、Chapel以及JavaScriptTM。GP语言实现可包括允许程序的不同部分被包含在不同模块中的丰富的链接能力。数据平行特征提供利用DP最优计算节点的专用体系结构的编程工具,以允许数据平行操作比用通用处理器(即,非DP最优计算节点)更快或更有效地执行。GP语言还可以是允许程序员为通用处理器和DP最优计算节点两者编程的另一合适的高层通用编程语言。
在另一实施例中,代码10包括来自高层数据平行编程语言(此后记为DP语言)的形成程序的一系列指令。DP语言为在具有一个或多个DP最优计算节点的计算环境中编程DP最优计算节点提供了专用语言。使用DP语言,程序员生成用于在DP最优计算节点上执行的代码10中的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。在这一实施例中,代码10可表示任意合适类型的DP源代码,诸如应用程序、库函数、或者操作***服务。
代码10包括指定用于在DP最优计算节点上执行的代码部分。在用GP语言编写代码10的图1的实施例中,GP语言允许程序员在定义矢量函数时使用注释(例如,__declspec(vector_func)...)来指定DP源代码。该注释与用于在DP最优计算节点上执行的矢量函数的函数名(例如,vector_func)相关联。代码10包括具有DP算法24的调用22的调用站点20(例如,对于所有(forall)、缩小、扫描、或分类)。对应于调用站点的矢量函数被称为内核或者内核函数。内核或者内核函数可调用代码10中其他矢量函数(即,其他DP源代码),并且可被视为矢量函数调用图的根。内核函数还可使用由代码10定义的类型(例如,类或结构)。这些类型可以被或者可以不被注释为DP源代码。在其他实施例中,其他合适的编程语言构造可用于将代码10的部分指定为DP源代码和/或通用处理器代码。此外,可在用DP语言编写代码10的实施例中省略注释。
调用站点20还包括一组输入和输出自变量26,该组自变数包括一个或多个映射变换12。如图2所示,在被编译和执行时,映射变换12采用DP算法14并且将一组一个或多个输入可索引类型32作为自变量,如箭头16所指示的将DP算法应用于该组输入可索引类型32以生成输出可索引类型34,并且如箭头18所指示的返回输出可索引类型34。在一些实施例中,输出可索引类型34可以与输入可索引类型32相同。通过将映射变换12包括在调用站点20的该组自变量26中,映射12允许DP算法14以及其他DP算法(未示出)与DP算法24融合。通过融合DP算法14和24,DP算法14和24被组合以形成可在DP最优计算设备上作为来自调用站点20的单个函数或内核调用而执行的单个算法。组合的算法可利用增强的空间和时间的数据局部性来提高性能。
映射12可用任意合适的方式表达。例如,映射12的通用形式可表达为:
map(elementary_function)(IT1,...,ITN)
其中elementary_function(基本的_函数)是在一组输入可索引类型IT1到ITN上操作的内核函数(例如,DP算法14)名,其中N是大于或等于1的整数(例如,图2所示的输入可索引类型32)。从该组输入可索引类型,映射变换12返回输出可索引类型(例如,图2所示的输出可索引类型34)。
现在将描述通用形式的映射变换12的附加细节。令element_type1,...,element_typen(元素_类型1...元素_类型n)是n数据平行(DP)标量类型,其中DP标量类型在一个实施例中为在C++POD结构操作(比较:文档N3126的9.0.9部分)下的基本C++类型的传递闭包(比较:C++0x工作标准草案-文档N3126:http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2010/n3126.pdf的3.9.1部分)。但是,更一般的数据类型并没有被排除,并且可用于其他实施例中。这些n个类型还是n个可索引类型indexable_type1,...,indexable_typen(可索引_类型1...可索引_类型n)的元素类型。换句话说,indexable_type1::element_type,...,indexable_typen::element_type与element_type1,...,element_typen相同。假设这些可索引类型都具有相同的秩N。(记号indexable_typek可以指类型或者可以指对应类型的实例,但是用法在上下文中是不含糊的。)
考虑函数:
return_type elementary_function(element_type1_Arg1,...,element_typen_Argn).
映射12的通用形式提升elementary_function以对indexable_type1,...,indexable_typen的实例起作用,以形成秩为N的可索引类型。新的可索引类型变为:
map(elementary_function)(indexable_type1,...,indexable_typen)
其中索引操作符采用以下形式。
Figure BSA00000622234700061
Figure BSA00000622234700071
对于给定的秩N,返回DP标量类型的DP标量类型的函数elementary_function可以被提升以对秩为N的可索引类型起作用,该可索引类型的元素类型是形成elementary_function的自变量的DP标量类型。elementary_function的提升形成秩为N的可索引类型,该可索引类型的元素类型与elementary_function的返回类型相同。提升的动作是通过以上的索引操作符。
现在将参考一个实施例描述提升的实现。在这一实施例中,map(elementary_function)创建map_abstract_type类的实例。map_abstract_type类有具有与elementary_function相同数量的自变量的函数调用操作符。如果可索引类型具有与elementary_function的对应自变量相同的元素类型并且可索引类型都具有相同的秩,则函数调用操作符的自变量是允许任意可索引类型被传递进来的抽象模板参数类型。函数调用操作符的返回类型是可索引类型map_type。使用C++0x可变参量模板,map_abstract_type的实现采用以下形式。
Figure BSA00000622234700072
Figure BSA00000622234700081
以下工厂方法映射用于创建map_abstract_type的实例。
Figure BSA00000622234700082
换句话说,map(elementary_function)(indexable_type1,...,indexable_typen)是map_type的实例。第一个自变量(elementary_function)产生map_abstract_type的实例,并且第二组自变量(indexable_type1,...,indexable_typen)调用map_abstract_type的函数调用操作符。该函数调用操作符返回与第一和第二组自变量两者对应的map_type的实例。
在map_type的实现中,通过如下的可变参量模板元编程,确定可索引类型的通用秩‘rank(秩)’,并且然后确定elementary_function的返回类型_Return_type。
static const int rank=get_rank<_Kernel_argument_types...>::rank;
typedef decltype(declval<_Kernel_type>()(
declval<_Kernel_argument_types>()::element_type...))Ret_type;
通过使用decltype来确定typedef_Ret_type以实现Kernel_type类型的部分实例的部分调用,_Kernel_type类型具有通过创建由模板参数包Kernel_argument_types形成的可索引类型的element_types的部分实例形成的自变量列表。此外,get_rank从参数包_Kernel_argument_types中解包出第一模板自变量,并且返回生成的可索引类型的秩。declval<T>()还创建适合于decltype类型推演中部分求值的T的部分实例。
在将map(elementary_function)应用于可索引类型实例中,map(elementary_function)(indexable_type1,...,indexable_typen)是map_type构造者调用。自变量列表(indexable_type1,...,indexable_typen)是被转化为C++元‘std::tuple m_args’的函数参数包,以便于被存储为map_type的成员。通过使用标准C++0x技术将m_args转化为参数包(为了说明的简便仍命名为m_args)来实现map_type的索引操作符。然后,在输入自变量‘const index<rank>&_Index’处将参数包的每一元素求值到索引操作符,产生类型element_type1,...,element_typen的参数包。然后由elementary_function求值并且返回参数包。在map_type的实现的符号中,索引操作符返回如下。
return m_kernel(m_args[_Index]...);
在一个实施例中,完整的实现采用以下形式。
Figure BSA00000622234700101
Figure BSA00000622234700111
返回的映射变换的可索引类型可当作如图3A所示的调用站点内核(例如,DP算法24)的自变量26,如图3B所示的调用站点内核的输出可索引类型,或者如图3C所示的调用站点20中其他映射函数12’的自变量。
如图3A所示,映射变换12的输出可索引类型34可用作DP算法24的输入索引类型以及在调用站点20中被指定为自变量26的一组零个或更多个其他输入可索引类型40。为了这样做,调用站点20将该组输入可索引类型32上的映射变换12指定为自变量26。DP算法24由输出可索引类型34和输入可索引类型40生成输出可索引类型42,并且返回输出可索引类型42。每个输入可索引类型32在被提供给映射变换12之前可经历一个或多个其他映射变换(未示出),每个输入可索引类型40在被提供给DP算法24之前也可经历一个或多个其他映射变换(未示出),并且输出可索引类型42在被DP算法24返回之前可经历一个或多个其他映射变换(未示出)。
如图3B所示,由DP算法24从一组输入可索引类型50生成的输出可索引类型52可用作映射变换12的一组输入可索引类型32中的一个。为了这样做,调用站点20在包括DP算法24的输出可索引类型52的该组输入可索引类型32上指定映射变换12。DP算法14由包括输出可索引类型52的该组输入可索引类型32生成输出可索引类型34,并且返回输出可索引类型34。每个输入可索引类型50在被提供给DP算法24之前可经历一个或多个其他映射变换(未示出),每个输入可索引类型32(包括可索引类型52)在被提供给映射变换12之前也可经历一个或多个其他映射变换(未示出),并且输出可索引类型34在被映射变换12返回之前可经历一个或多个其他映射变换(未示出)。
图3C示出在映射变换12的输出可索引类型34上映射变换12’的使用。特别地,映射变换12的输出可索引类型34可用作映射变换12’的一组一个或多个输入可索引类型32’中的一个,以生成输出可索引类型34’。更为一般地,图3C示出可将多个映射变换12应用于调用站点20中每一个自变量26的一组或多组输入可索引类型32.
现在将用若干示例示出映射变换12。在第一个示例中,为求值A*(sin(B)+exp(-C)而定义以下代码部分,其中A、B和C是可索引类型。
Figure BSA00000622234700121
Figure BSA00000622234700131
用以上注指出的通用形式来使用映射变换12:
-C可被表达为map(_uminus)(C);
exp(-C)可被表达为map(_exp)(map(_uminus)(C));
sin(B)可被表达为map(_sin)(B);并且,因此,
sin(B)+exp(-C)可被表达为
map(_add)(map(_sin)(B),map(_exp)(map(_uminus)(C))
因此,以下调用站点可使用映射变换以融合由_uminus、_exp、_sin和_add定义的内核来计算A*(sin(B)+exp(-C)。
forall(A.get_extent(),_mxm,D,A,map(_add)(map(_sin)(B),
map(_exp)(map(_uminus)(C))));
作为另一示例,可定义以下矩阵乘法内核。
Figure BSA00000622234700141
为了计算D=(A+B)*C,可定义以下映射变换12以形成第一矩阵加法内核。
Figure BSA00000622234700142
使用这一映射变换12以及以上矩阵乘法内核,以下调用站点可用于通过将矩阵乘法内核与由映射变换12定义的第一矩阵加法内核融合来计算D=(A+B)*C。
forall(D.get_grid(),mxm,D,morph_input(A,B),C);
为了计算D=A*B+C,可定义以下映射变换12以形成第二矩阵加法内核。
Figure BSA00000622234700151
使用这一映射变换12以及以上矩阵乘法内核,以下调用站点可用于通过将矩阵乘法内核与由映射变换12定义的第二矩阵加法内核融合来计算D=A*B+C。
forall(D.get_grid(),mxm,morph_output(D,C),A,B);
在以上示例中,morph_input的索引操作符:
const float operator[](const index<2>&_Index)const;
返按值返回。
反之,morph_output的索引操作符:
float&operator[](const index<2>&_Index);
按参考返回(即,按lvalue参考返回)。
当由映射变换提升的内核的输出类型(即,morph_input或morph_output)按l-value参考返回时,内核的索引操作符可以按l-value参考返回。类似地,当由映射变换提升的内核的输出类型按r-value参考返回时,内核的索引操作符可以按r-value参考返回。同样地,当由映射变换提升的内核的输出类型按值返回时,内核的索引操作符可以按值返回。使用模板元编程技术,特别地有SFINAE以及CRTP,分析提升内核的返回特征,并且适当地改变提供索引操作符的实现的基本类。
更为一般地,假设被封装的操作是函数:
element_type_transformation(const index<rank>&idx,
element_type_Value).
从而,输入映射变换12(morph_input)的封装可索引类型如下:
Figure BSA00000622234700171
Figure BSA00000622234700181
对于输入映射变换12(morph_input),封装可索引类型如下:
Figure BSA00000622234700182
Figure BSA00000622234700191
用以上的封装可索引类型,D=(A+B)*C的实现采用以下形式。
Figure BSA00000622234700201
采用这一实现形式,被映射的内核是auto lambda_in=[=](const index<2>&idx,float fin)->float{return(B[idx]+fin);},这是以下基本内核的变换,其中变换的目的是在lambda表达式中获取‘B’。
auto_add=[=](float in 1,float in2)->float{
     return in1+in2;
  }
同样地,D=A*B+C的实现采用以下形式。
Figure BSA00000622234700202
Figure BSA00000622234700211
采用这一实现形式,被映射的内核是auto lambda_out=[=](constindex<2>&idx,float fin)->float{return(C[idx]+fin);},这是以下基本内核的变换,其中变换的目的是在lambda表达式中获取‘C’。
auto_add=[=](float in 1,float in2)->float{
     return in1+in2;
以上示例中的lambda表达式通过获取所有已参考的数据来工作。因此,lambda_in获取B并且lambda_out获取C。在其他实施例中,只要B或C的获取是明确的,也可使用具有函数调用操作符的类。其主要目的是展示函数调用操作符的类被称为函子。C++0x lambda表达式的实现是通过编译器生成的函子类。
由于性能的原因,morph_input可索引类型类的索引操作符将按lvalue参考最优地返回。但是这是以输入函子按lvalue参考返回为条件的。下一个最优的情况为按rvalue参考返回,这同样是以输入函子按rvalue参考返回为条件的。最后,如果输入函子按值返回,则morph输入伪字段类按值返回。通过形成以下类自动地启用这一功能。
template<typename_Parent_type,typename_Transformer>
class morph_input:public Conditional_Base{...};
其中Conditional_Base是以下之一:
lvalue_morph_input
rvalue_morph_input
byvalue_morph_input
取决于morph_input专用的lambda表达式的返回类型。
图4是示出被配置为编译和执行包括映射变换12的数据平行代码10的计算机***100的实施例的框图。
计算机***100包括主机101,主机101具有被封装在一个或多个处理器包(未示出)中的一个或多个处理元素(PE)102以及存储器***104。计算机***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)或固件(未示出)、操作***(OS)132、代码10、编译器134、GP可执行文件136、以及DP可执行文件138。每一个处理元素102可结合或响应于从输入/输出设备106、显示设备108、***设备110、网络设备120和/或计算引擎120处接收的信息来执行指令。
主机101启动和执行OS 132。OS 132包括处理元素可执行以管理计算机***100的组件的指令,并且提供允许程序访问和使用各组件的一组函数。在一个实施例中,OS 132是Windows操作***。在另一实施例中,OS 132是适合计算机***100使用的另一操作***。
当计算机***执行编译器134来编译代码10时,编译器134生成一个或多个可执行文件-例如,一个或多个GP可执行文件136以及一个或多个DP可执行文件138。在其他实施例中,编译器134可生成一个或多个GP可执行文件136到每个包括一个或多个DP可执行文件138,或者可生成一个或多个DP可执行文件138而不生成任何GP可执行文件136。响应于用数据平行扩展调用编译器134以编译所有或者选定部分的代码10,生成GP可执行文件136和/或DP可执行文件138。调用可由例如程序员或计算机***100的其他用户、计算机***100中的其他代码、或者另一计算机***(未示出)中的其他代码生成。
GP可执行文件136表示旨在用于在一个或多个通用处理元素102(例如,中央处理单元(CPU)上执行的程序。GP可执行文件136包括来自一个或多个通用处理元素102的指令集的低层指令。
DP可执行文件138表示旨在并且优化以用于在一个或多个数据平行(DP)最优计算节点121上执行的数据平行程序或算法(例如,着色器)。在一个实施例中,DP可执行文件138包括可在在DP最优计算节点121上执行之前使用设备驱动器(未示出)转换为来自DP最优计算节点121的指令集的低层指令的DP字节代码或者若干其他中间表示(IL)。在其他实施例中,DP可执行文件138包括来自一个或多个DP最优计算节点121的指令集的低层指令,其中低层指令由编译器134***。因此,GP可执行文件136是由一个或多个通用处理器(例如,CPU)直接可执行的,并且DP可执行文件138或者可以是由一个或多个DP最优计算节点121直接可执行的,或者可以是在被转换为DP最优计算节点121的低层指令之后由一个或多个DP最优计算节点121可执行的。
如以下更加详细描述的,计算机***100可使用一个或多个处理元素102来执行可执行文件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)、快闪式存储器驱动器及卡、以及诸如CD和DVD等的磁盘和光盘。
输入/输出设备106包括任意合适类型、数量以及配置的被配置为由用户输入指令或数据至计算机***100并且由计算机***100输出指令或数据至用户的输入/输出设备。输入/输出设备106的示例包括键盘、鼠标、触摸板、触摸屏、按键、拨号盘、旋钮和开关。
显示设备108包括任意合适类型、数量以及配置的被配置为将文本和/或图形信息输出至计算机***100的用户的显示设备。显示设备108的示例包括监视器、显示屏以及投影仪。
***设备110包括任意合适类型、数量以及配置的被配置为用计算机***100中的一个或多个其他组件操作以执行一般或指定处理功能的***设备。
网络设备112包括任意合适类型、数量以及配置的被配置为允许计算机***100跨一个或多个网络(未示出)通信的网络设备。网络设备112可根据任意合适的联网协议和/或配置来操作,以允许信息由计算机***100传送到网络或者由计算机***100通过网络接收。
计算引擎120被配置为执行DP可执行文件138。计算引擎120包括一个或多个计算节点121。每个计算节点121是共享存储器层级结构的计算资源集合。每个计算节点121包括一组一个或多个PE 122以及存储DP可执行文件138的存储器124。PE 122执行DP可执行文件138并且存储由存储器124中的DP可执行文件138生成的结果。特别地,PE 122执行DP可执行文件138以将映射变换12应用于一组输入可索引类型32,以生成如图4所示并且在以下更加详细描述的一组输出可索引类型34。
具有有被优化以用于数据平行计算(即,DP程序或算法的执行)的硬件体系结构的一个或多个计算资源的计算节点121被称为DP最优计算节点121。DP最优计算节点121的示例包括其中该组PE 122包括一个或多个GPU的节点121以及其中该组PE 122包括通用处理器包中的一组SIMD单元的节点121。不具有有被优化以用于数据平行计算的硬件体系结构的任何计算资源的计算节点121(例如,仅有通用处理元素102的处理器包)被称为非DP最优计算节点121。在每个计算节点121中,存储器124可与存储器***104分离(例如,由GPU使用的GPU存储器),或者可是存储器***104的一部分(例如,由通用处理器包中的SIMD单元使用的存储器)。
主机101形成被配置为向计算节点121提供用于执行的DP可执行文件138并且使用互连114接收由DP可执行文件138生成的结果的主存计算节点。主存计算节点包括共享存储器层级结构(即,存储器***104)的一组通用的计算资源(即,通用处理元素102)。例如,主存计算节点可用对称的多处理体系结构(SMP)来配置,并且还可被配置为使用非一致的存储器访问(NUMA)体系结构来最大化存储器***104的存储器局部性。
主存计算节点的OS 132被配置为执行DP调用站点以导致DP可执行文件138被DP最优或非DP最优计算节点121执行。在其中存储器124与存储器***104分离的实施例中,主存计算节点导致DP可执行文件138以及一个或多个可索引类型14从存储器***104被复制到存储器124。在其中存储器***104包括存储器124的实施例中,主存计算节点可将存储器***104中的DP可执行文件138和/或一个或多个可索引类型14的副本指定为存储器124,和/或可将DP可执行文件138和/或一个或多个可索引类型14从存储器***104的一部分复制到形成存储器124的存储器***104的另一部分。除非被指定为异步的,在计算节点121以及主存计算节点之间的复制过程可以是同步点。
主存计算节点和每个计算节点121可同时地互相独立地执行代码。主存计算节点和每个计算节点121可在同步点交互以协作节点计算。
在一个实施例中,计算引擎120表示其中一个或多个图形处理单元(GPU)包括PE 122以及与存储器***104分离的存储器124的图形卡。在这一实施例中,图形卡(未示出)的驱动可将字节代码或者DP可执行文件138的若干其他中间表示(IL)转化为用于由GPU的PE 122执行的GPU的指令集。
在另一实施例中,由被包括在处理器包中的具有一个或多个通用处理元素102的一个或多个GPU(即,PE 122)与包括存储器124的存储器***104的一部分的组合形成计算引擎120。在这一实施例中,可在计算机***100上提供附加的软件以将字节代码或者DP可执行文件138的若干其他中间表示(IL)转化为处理器包中GPU的指令集。
在进一步的实施例中,由包括处理元素102的一个或多个处理器包中的一个或多个SIMD单元与包括存储器124的存储器***104的一部分的组合形成计算引擎120。在这一实施例中,可在计算机***100上提供附加的软件以将字节代码或者DP可执行文件138的若干其他中间表示(IL)转化为处理器包中SIMD单元的指令集。
在又一实施例中,由包括处理元素102的一个或多个处理器包中的一个或多个标量或矢量处理管道与包括存储器124的存储器***104的一部分的组合形成计算引擎120。在这一实施例中,可在计算机***100上提供附加的软件以将字节代码或者DP可执行文件138的若干其他中间表示(IL)转化为处理器包中标量处理管道的指令集。
尽管此处已经示出和描述了特定的实施例,但是本领域的技术人员将明白可为示出和描述的特定实施例替换各种替代和/或等效实现,而不背离本发明的范围。本申请旨在涵盖对此处讨论的特定实施例的任何改编或变种。因此,本发明旨在仅由权利要求书以及其同等物限制。

Claims (15)

1.一种计算机执行的方法,所述方法包括:
响应于作为自变量被包括在数据平行源代码中的调用站点中的第一映射变换,将第一数据平行算法应用于第一组输入可索引类型以生成第一输出可索引类型,所述数据平行源代码被配置成在一个或多个数据平行计算节点上执行;以及
将第二数据平行算法应用于所述第一输出可索引类型以生成第二输出可索引类型,所述第二数据平行算法由所述调用站点指定。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
将第二数据平行算法应用于第一输出可索引类型以及第二组输入可索引类型,以生成第二输出可索引类型。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
响应于被包括为调用站点中的自变量的第二映射变换,将第三数据平行算法应用于第二组输入可索引类型,以生成第一组输入可索引类型中的一个。
4.如权利要求1所述的方法,其特征在于,所述第一组输入可索引类型中的每一个都包括对应的秩以及对应的元素类型。
5.如权利要求1所述的方法,其特征在于,所述第一映射变换使用按l-value参考、按r-value参考或者按值中的一个来返回输出可索引类型。
6.如权利要求1所述的方法,其特征在于,所述数据平行源代码用具有数据平行扩展的高层通用编程语言编写。
7.如权利要求1所述的方法,其特征在于,所述数据平行源代码用高层数据平行编程语言编写。
8.如权利要求1所述的方法,其特征在于,所述一个或多个数据平行计算节点包括至少一个图形处理单元。
9.如权利要求1所述的方法,其特征在于,所述一个或多个数据平行计算节点包括至少一个通用处理器。
10.一种由计算机***中的编译器执行的方法,所述方法包括:
标识数据平行源代码中的第一映射变换,所述数据平行源代码被配置为用于在一个或多个数据平行计算节点上执行;以及
通过数据平行源代码生成数据平行可执行代码,从而数据平行可执行代码通过将第一数据平行算法应用于第一组一个或多个输入可索引类型来实现第一映射变换以生成第一输出可索引类型。
11.如权利要求10所述的方法,其特征在于,还包括:
标识数据平行源代码中的第二映射变换;以及
通过数据平行源代码生成数据平行可执行代码,从而数据平行可执行代码通过将第二数据平行算法应用于包括第一输出可索引类型的第二组的一个或多个输入可索引类型来实现第二映射变换以生成第二输出可索引类型。
12.如权利要求10所述的方法,其特征在于,还包括:
标识数据平行源代码中调用站点中的第一映射变换。
13.如权利要求12所述的方法,其特征在于,所述第一映射变换是调用站点中的自变量。
14.如权利要求12所述的方法,其特征在于,所述调用站点调用第二数据平行算法。
15.如权利要求10所述的方法,其特征在于,所述数据平行源代码用具有数据平行扩展的高层通用编程语言编写。
CN201110382436.8A 2010-11-17 2011-11-16 数据平行代码中的映射变换 Active CN102541612B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/947,989 US8402450B2 (en) 2010-11-17 2010-11-17 Map transformation in data parallel code
US12/947,989 2010-11-17

Publications (2)

Publication Number Publication Date
CN102541612A CN102541612A (zh) 2012-07-04
CN102541612B true CN102541612B (zh) 2014-07-09

Family

ID=46049033

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110382436.8A Active CN102541612B (zh) 2010-11-17 2011-11-16 数据平行代码中的映射变换

Country Status (6)

Country Link
US (1) US8402450B2 (zh)
EP (1) EP2646906A4 (zh)
KR (1) KR101842307B1 (zh)
CN (1) CN102541612B (zh)
CA (1) CA2815519A1 (zh)
WO (1) WO2012067803A2 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9489183B2 (en) 2010-10-12 2016-11-08 Microsoft Technology Licensing, Llc Tile communication operator
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US8713039B2 (en) * 2010-12-23 2014-04-29 Microsoft Corporation Co-map communication operator
US10558440B2 (en) * 2017-02-02 2020-02-11 Cisco Technology, Inc. Tightly integrated accelerator functions
US10936771B1 (en) * 2019-10-02 2021-03-02 Microsoft Technology Licensing, Llc Using a common fuse controller hardware design for different applications
CN113590193B (zh) * 2021-07-12 2024-03-22 苏州仰思坪半导体有限公司 一种运算装置、方法、介质及计算设备
CN113835688B (zh) * 2021-08-27 2024-04-12 河南理工大学 一种科学计算语言解释器的对象封装方法
US11762677B1 (en) * 2022-04-22 2023-09-19 International Business Machines Corporation High-level vectorization and scalarization of Java vector API library methods

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101657795A (zh) * 2007-04-11 2010-02-24 苹果公司 多处理器上的数据并行计算

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02205976A (ja) * 1989-02-03 1990-08-15 Omron Tateisi Electron Co プログラム生成装置
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US6026234A (en) * 1997-03-19 2000-02-15 International Business Machines Corporation Method and apparatus for profiling indirect procedure calls in a computer program
US6260036B1 (en) 1998-05-07 2001-07-10 Ibm Scalable parallel algorithm for self-organizing maps with applications to sparse data mining problems
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6708331B1 (en) * 2000-05-03 2004-03-16 Leon Schwartz Method for automatic parallelization of software
GB0215033D0 (en) * 2002-06-28 2002-08-07 Critical Blue Ltd Instruction set translation method
US7800620B2 (en) 2004-11-05 2010-09-21 Microsoft Corporation Optimizing automated shader program construction
US8261270B2 (en) 2006-06-20 2012-09-04 Google Inc. Systems and methods for generating reference results using a parallel-processing computer system
US8245212B2 (en) * 2008-02-22 2012-08-14 Microsoft Corporation Building call tree branches and utilizing break points
US8453134B2 (en) 2008-06-04 2013-05-28 Intel Corporation Improving data locality and parallelism by code replication
EP2350915A4 (en) 2008-09-30 2013-06-05 Exxonmobil Upstream Res Co METHOD FOR SOLVING STORAGE SIMULATION MATRIX COMPENSATION USING PARALLEL INCOMPLETE MULTILEVEL FACTORIZATION
US8195496B2 (en) 2008-11-26 2012-06-05 Sap Aktiengesellschaft Combining multiple objective functions in algorithmic problem solving
US8799629B2 (en) 2008-12-04 2014-08-05 Microsoft Corporation Parallel execution of a loop

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101657795A (zh) * 2007-04-11 2010-02-24 苹果公司 多处理器上的数据并行计算

Also Published As

Publication number Publication date
CN102541612A (zh) 2012-07-04
WO2012067803A2 (en) 2012-05-24
US20120124564A1 (en) 2012-05-17
US8402450B2 (en) 2013-03-19
WO2012067803A3 (en) 2012-07-12
KR101842307B1 (ko) 2018-03-26
CA2815519A1 (en) 2012-05-24
EP2646906A4 (en) 2014-12-24
EP2646906A2 (en) 2013-10-09
KR20130126616A (ko) 2013-11-20

Similar Documents

Publication Publication Date Title
CN102541612B (zh) 数据平行代码中的映射变换
CN102495723B (zh) 小块通信算子
CN102609244B (zh) 灵活通信算子
CN102566980B (zh) 可扩展的数据并行语义
US10282179B2 (en) Nested communication operator
US10620916B2 (en) Read-only communication operator
CN102637123B (zh) 共同映射通信算子
KR101632027B1 (ko) 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150422

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150422

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.