CN102637123A - 共同映射通信算子 - Google Patents

共同映射通信算子 Download PDF

Info

Publication number
CN102637123A
CN102637123A CN2011104398442A CN201110439844A CN102637123A CN 102637123 A CN102637123 A CN 102637123A CN 2011104398442 A CN2011104398442 A CN 2011104398442A CN 201110439844 A CN201110439844 A CN 201110439844A CN 102637123 A CN102637123 A CN 102637123A
Authority
CN
China
Prior art keywords
index
data parallel
type
computer
index type
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.)
Granted
Application number
CN2011104398442A
Other languages
English (en)
Other versions
CN102637123B (zh
Inventor
P·F·林塞斯
Y·莱瓦诺尼
张玲莉
朱伟荣
D·J·麦克拉迪
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 CN102637123A publication Critical patent/CN102637123A/zh
Application granted granted Critical
Publication of CN102637123B publication Critical patent/CN102637123B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/314Parallel programming languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Processing Or Creating Images (AREA)
  • Telephonic Communication Services (AREA)

Abstract

本申请涉及共同映射通信算子。高级编程语言提供了根据函数将输入可索引类型映射到输出可索引类型的共同映射通信算子。该函数将对应于输出可索引类型的索引空间映射到对应于输入可索引类型的索引空间。通过这样做,共同映射的通信算子将索引空间上的函数提升到可索引类型上的函数以容许与其他通信算子的可组成性。

Description

共同映射通信算子
技术领域
本申请涉及共同映射(co-map)通信算子。
背景技术
计算机系统通常包括一个或多个通用处理器(例如,中央处理器(CPU))以及一个或多个专用数据并行计算节点(例如,图形处理单元(GPU)或CPU中的单指令多数据(SIMD)执行单元)。通用处理器通常在计算机系统上执行通用处理,而数据并行计算节点通常在计算机系统上执行数据并行处理(例如图形处理)。通用处理器通常具有实现数据并行算法的能力,但是在没有在数据并行计算节点中发现的优化的硬件资源的情况下这样做。结果,通用处理器在执行数据并行算法时可能比数据并行计算节点低效得多。
数据并行计算节点传统地在计算机系统上执行程序方面扮演通用处理器的辅助角色。随着为数据并行算法优化的硬件的角色由于数据并行计算节点处理能力的增强而增加,增强程序员对数据并行计算节点进行编程的能力并使对数据并行计算节点进行编程变得更为容易可能是合乎需要的。
数据并行算法经常在较大的计算空间上操作。计算空间一般包括某种形式的索引来容许访问个别的数据元素并在其上进行操作。然而,有时数据并行算法可通过在计算空间的索引结构上操作而不是在数据元素上操作而产生期望的结果。
发明内容
提供本发明内容以便以简化的形式介绍将在以下的具体实施方式中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
高级编程语言提供了根据函数将输入可索引的类型映射到输出可索引类型的共同映射的通信算子。该函数将对应于输出可索引类型的索引空间映射到对应于输入可索引类型的索引空间。通过这样做,共同映射的通信算子将索引空间上的函数提升到可索引类型上的函数以容许与其他通信算子的可组成性。
附图说明
包括附图来提供了对各实施例的进一步理解,且这些附图被合并在本发明书内并构成其一部分。附图示出各实施例,并且与说明书一起用于解释本发明的原理。其他实施例和各实施例的许多预期优点将随着参考下面的详细描述进行更好的理解而得到认识。附图的元素不一定相对于彼此而缩放。相同的附图标记指代对应的类似部分。
图1是示出具有共同映射通信算子的代码的实施例的计算机代码图。
图2是示出了将共同映射通信算子应用到输入可索引类型的实施例的框图。
图3A-3C是示出使用共同映射的通信算子的示例的框图。
图4是示出被配置成编译并执行包括共同映射通信算子的数据并行代码的计算机系统的实施例的框图。
具体实施方式
在以下具体实施例中,对附图进行了参考,附图构成了实施例的一部分且在其中作为示例示出了可在其中实践本发明的各特定实施例。就此,诸如“顶部”、“底部”、“前方”、“后方”、“前导”、“尾部”等的方向性术语参考正在描述的附图的方向来使用。因为实施例的各组件可位于多个不同的方向,所以方向性术语出于说明的目的来使用而不是限制。可以理解,可以使用其它实施例并且可以做出结构上或逻辑上的改变而不背离本发明的范围。因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。应该理解,此处描述的各示例性实施例的特征可相互组合,除非另外具体注明。
图1是示出具有共同映射通信算子12的代码10的实施例的计算机代码图。当被编译和执行的时候,共同映射通信算子12根据函数13将输入可映射类型14映射到输出可映射类型18(下文中定义)。函数13将对应于输出可索引类型18的索引空间15映射到对应于输入可索引类型14的索引空间17。通过这样做,共同映射的通信算子12将索引空间上的函数13提升到可索引类型14上的函数,以容许与其他通信算子的可组成性。
代码10包括来自高级通用或数据并行编程语言的可被编译成一个或多个可执行代码(例如,图4中所示的DP可执行代码138)用于由一个或多个DP最优计算节点(例如,图4所示的DP最优计算节点121)执行的指令序列。
在一个实施例中,代码10包括来自具有数据并行扩展的高级通用编程语言(之后称为GP语言)的指令序列,所述指令序列形成存储在一个或多个模块的集合中的程序。GP语言可允许程序被编写在不同部分(即模块)中,使得每个模块都可以被存储在可以由计算机系统访问的分开的文件或者位置中。GP语言提供用于对包括一个或多个通用处理器和一个或多个专用的DP最优计算节点的计算环境进行编程的单个语言。DP最优计算节点通常是通用处理器的图形处理单元(GPU)或SIMD单元,但也可包括通用处理器的标量或矢量执行单元、场可编程门矩阵(FPGA)或一些计算环境中的其他合适设备。使用GP语言,程序员可将通用处理器和DP源代码均包含在代码10中以便由通用处理器和DP计算节点分别执行,并协调通用处理器和DP源代码的执行。在该实施例中,代码10可以表示任何合适类型的代码,诸如应用、库函数或操作系统服务。
GP语言可以通过扩展诸如C或C++之类的广泛适用的高级且通用的编程语言以包括数据并行特征来形成。其中可出现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语言,程序员在代码10中生成旨在供在DP最优计算节点上执行的DP源代码。DP语言提供了利用DP最优计算节点的专用体系结构来允许数据并行操作比使用通用处理器更快或更有效地执行的编程工具。DP语言可以是现有的DP编程语言,诸如HLSL、GLSL、Cg、C、C++、NESL、Chapel、CUDA、OpenCL、Accelerator(加速器)、Ct、PGI GPGPU Accelerator(加速器)、CAPS GPGPUAccelerator(加速器)、Brook+、CAL、APL、Fortran 90(以及更高版本)、DataParallel C(数据并行C)、DAPPLE或APL。在该实施例中,代码10可以表示任何合适类型的DP源代码,诸如应用、库函数或操作系统服务。
代码10包括被指定为在DP最优计算节点上执行的代码部分。在使用GP语言来编写代码10的图1的实施例中,GP语言允许程序员在定义矢量函数时使用注释26(例如,__declspec(vector)...)来指定DP源代码。注释26与旨在供在DP最优计算节点上执行的矢量函数的函数名27(例如vector_func)相关联。代码10还可包括在调用点(诸如,foralll(对于全部),reduce(缩减),scan(扫描),或sort(排序))处对矢量函数的一个或多个调用28(例如,scan...,vector_func,...)。对应于调用点的矢量函数被称为内核函数。内核函数可调用代码10中的其他矢量函数(即,其他DP源代码),并可被视为矢量函数调用图中的根。内核函数还可使用由代码10所定义的用户定义的类型(例如,类或结构体)。这些类型可以被注释为DP源代码或可以不被注释成DP源代码。在其他实施例中,可使用其他合适的编程语言结构体来将代码10的各部分指定为DP源代码和/或通用处理器代码。此外,在使用DP语言来编写代码10的实施例中,注释26可以被省略。
图2是示出根据函数13将共同映射通信算子12应用于输入可索引类型14以产生输出可索引类型18的实施例的框图。可索引类型的下标算子此处也被称为索引算子。如此处所使用的,可索引类型是实现带有为非负整数的秩以及被表示为element_type的类型的一个或多个下标算子的任何数据类型。如果index<N>(索引<N>)是表示整数的N元组的类型(即,任何类型的整数数据类型),那么index<N>的实例就是N个整数的集合{i0,i1,...,im},其中m等于N-1(即,N元组)。秩N的索引算子采用index<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>(索引<秩>)的集合。可索引类型一般具有多面体的形状-即,可索引类型可被代数地表示为由坐标轴的线性函数所形成的有限数量个半空间的交点。
参看图1和图2,在数据并行计算环境中,代码10的高级语言提供了共同映射通信算子12,其根据函数13(如,图1示例中的函数f)和输入可索引类型14(如,图1示例中的可索引类型indexable_type2)来变换索引空间15(如,图1示例中的idx)以产生输出可索引类型18。输入可索引类型14具有秩(例如,图1示例中的秩N)和元素类型(例如,图1示例中的的元素类型T),其中输入可索引类型14的元素定义了函数“阿尔法”。
共同映射通信算子12将函数13应用到索引空间15来将索引空间15映射至索引空间17。例如,函数f可表示为从索引空间15的M个索引点i(1)到i(M)的集合(即,index<M>)到索引空间17的N个索引点j(1)到j(N)的集合(即,index<N>)的变换,其中M可以等于N或者可以不等于N,如下。
f:index<M>=>index<N>
共同映射通信算子12可被表示为:
co_map(f):indexable_type2=>indexable_type1
其中co_map(f)的定义是:
由于可索引类型是由其下标算子的行为唯一地定义的,所以令阿尔法是indexable_type2的元素,因此co_map(f)(alpha)是indexable_type1的元素,因此:
对于index<M>中的每一个idx,
co_map(f)(alpha)(idx)
被定义为等于
alpha(f(idx))。
上述被称为“f”的预先合成,注意“f”的方向是颠倒的。
共同映射通信算子12通过将函数13作为自变量而形成更高阶的函数。通过这样做,共同映射通信算子12将函数13提升到输入可索引类型14上的函数。如图2中所示,输入可索引类型14(即,indexable_type2)对应于索引空间17(即,index<N>),如虚线箭头19所表示,通过可索引类型的定义,这意味着indexable_type2具有如下的索引算子,其中‘’表示左值引用、右值应用或者按值返回的语义。
element-typeoperator[](const index<N>&idx);
类似地,输出可索引类型18(即,indexable_type1)对应于索引空间15(即,index<M>),如虚线箭头20所表示,通过可索引类型的定义,这意味着indexable_type1具有如下的索引算子,其中‘’表示左值引用、右值引用或者按值返回的语义。
element-typeoperator[](const index<M>&idx);
由于输出可索引类型18可由其他通信算子操作,所以共同映射通信算子12与其他通信算子是可组成的。为使共同映射通信算子12与其他通信算子完全地可组成,根据一个实施例可指定四个索引变换(即,transform(变换)、transform_offset(变换_偏移值)、transform_extent(变换_范围)以及co_transform_extent(补_变换_范围))。transform索引变换将索引空间15(即,index<_Rank1>)映射到索引空间17(即,index<_Rank2>),且可被表示如下,其中_Parent表示输入可索引类型14、_Index是索引空间15的元素、_Rank1表示输出可索引类型18的秩、_Rank2表示输入可索引类型14的秩、以及‘’表示左值引用、右值引用或者按值返回的语义。
//index op=>return_Parent[transform(_Index)];
const index<_Rank2>transform(const index<_Rank1>&_Index)const;
transform_offset索引变换将进入可索引类型14的偏移值变换为进入输出可索引类型18的偏移值,且可被表示如下。
//_Parent.offset=transform_offset(offset);
const index<_Rank2>transform_offset(const index<_Rank1>&_Index)const;
transform_extent索引变换将可索引空间14的范围变换成输出可索引类型18的范围,且可被表示如下。
//_Parent.extent=transform_extent(extent);
const extent<_Rank2>transform_extent(const extent<_Rank1>& ext)const;
co_transform_extent索引变换将输出可索引类型18的范围变换到可索引类型14的范围,且可被表示如下。
//extent=cotransform_extent(_Parent.extent);
const extent<_Rank1>cotransform_extent(const extent<_Rank2>& ext)const;
上述四个索引变换可出现在传送给共同映射通信算子12的_Transform_index对象中。transform_offset、transform_extent、以及co_transform_extent索引变换容许将可索引类型分小块、分节、或分区的通信算子与共同映射通信算子12组成起来。
使用模板元编程技术,输出可索引类型18(即,共同映射通信算子12的返回类型)的索引算子,当被应用到按左值引用返回的输入可索引类型14的时候按左值引用返回、当被应用到按右值引用返回的输入可索引类型14的时候按右值引用返回、或者当被应用到按值返回的输入可索引类型14的时候按值返回。
下面将描述共同映射通信算子12的示例实现。
作为如下第一个代码示例,使用索引变换来实现共同映射通信算子12来形成投射通信算子,_project,它将指定的维插入可索引类型中。例如:
_project<1>(17):(y,x)=>(y,17,x)
_project<0>(13):(y,x)=>(y,x,13)
另字段<2,_Element_type>是输入可索引类型。另f是输入可索引类型的元素。那么共同映射通信算子12可被表示如下。
co_map(_project<1>(17))(f):(y,x)=>f(_project<1>(17)(y,x))
co_map(_project<0>(13))(f):(y,x)=>f(_project<0>(13)(y,x))
这与以下相同:
co_map(_project<1>(17))(f):(y,x)=>f(y,17,x)
co_map(_project<0>(13))(f):(y,x)=>f(y,x,13)
带有索引变换的投射函子可被如下表示。
Figure BDA0000124143200000091
Figure BDA0000124143200000101
Figure BDA0000124143200000111
当性能是需要考虑的时候,可如以下示例所示地具体化transform或者transform_pattern。
Figure BDA0000124143200000121
第二个代码示例提供实现共同映射通信算子12来执行在一个维度中的输入可索引类型14的环形移位(即,c移位(cshift))的索引变换,如下。
Figure BDA0000124143200000122
Figure BDA0000124143200000131
在接下来的第三代码示例中,如在图3A-3C中所示,使用索引变换来实现共同映射通信算子12来形成在边界处将输入可索引类型14(1)截断由_Delta指定的量的内部通信算子。
Figure BDA0000124143200000132
使用形成如图3A中所示的6x6矩阵的输入可索引类型14(1),当_Delta具有对于每个分量为1的值时,内部(_Parent,_Delta)的输出被图示为图3B中的阴影区域。
extent<2>_Delta(1,1);
使用内部通信算子,transform索引变换是恒等式(identity),因为当从索引算子级别看来,没有任何改变。相应地,transform索引变换如下。
const index<_Rank>& transform(const index<_Rank>&_Index)const{
  return_Index;
}
transform_offset索引变换的目的是为了表示从父根(即,原始可索引类型,在这个示例中,是图3A中所示的6x6矩阵)的角度而言,对于可索引类型14(1)的阴影内部中的偏移向量发生了什么。图3B的阴影内部区域的子对象可用另一个内部通信算子来操作,以产生如图3C中所示的第二阴影内部区域。图3C中所示的第二阴影内部区域相对于父根的的偏移量是index<2>(2,2)。然而,当相对于如图3B中所示的第一阴影内部区域取值时,然而,偏移量是index<2>(1,1)。相应地,transform_offset索引变换如下。
const index<_Rank>transform_offset(const index<_Rank>&_Index)const{
   return_Index+_M_delta;//_M_delta=_Delta=(1,1)
}
transform_extent索引变换的目的是为了表示从如图3A中所示的父根的角度而言,对于如图3B中所示的可索引类型14(1)的第一阴影内部的范围发生了什么。在这个示例中,通过增加向量2*_Delta(即,6-4=2*1且6-4=2*1)来在4x4矩阵和6x6矩阵之间变换,如下。
const extent<_Rank>transform_extent(const extent<_Rank>&_Extent)const{
 return_Extent+2*_M_delta;//_M_delta=_Delta=(1,1)
}
cotransform_extent(补变换_范围)索引变换的目的是为了表示从如图3B中阴影内部所示的当前子的角度而言,对于如图3A中所示的父根的范围(即,6x6矩阵)发生了什么。在这个示例中,通过增加向量2*_Delta(即,4-6=-2*1且4-6=-2*1)来在4x4矩阵和6x6矩阵之间变换,如下。
const extent<_Rank>cotransform_extent(const extent<_Rank>&_Extent)const{
      return_Extent-2*_M_delta;//_M_delta=_Delta=(1,1)
}
在上述中,图3C中所示的第二阴影内部区域形成如图3B中所示的第一阴影内部区域的内部对象的子对象。为了创建内部对象的子对象,将内部对象变换回如图3A中所示的父根(如,_Parent),然后执行变换来映射回子对象级别(如,_Parent._Parent._Parent)。在一个实施例中,内部和其他共同映射通信算子的子对象构造函数(constructor)如下。
Figure BDA0000124143200000161
因此,当从图3A的6x6矩阵变换到图3B的4x4矩阵、变换到到图3C的2x2矩阵的时候(即,应用内部通信算子两次,每一次使用(1,1)的delta),如下
(2x2).set_offset(x,y)=>(4x4).set_offset(x+1,y+1)=>(6x6).set_offset(x+2,y+2)
以及
(2x2).set_extent(x,y)=>(4x4).set_extent(x+1,y+1)=>(6x6).set_extent(x+2,y+2)
相应地,可使用下列代码:
const extent<_Rank>get_extent()const{
   return m_transformer.cotransform_extent(_Parent_type::get_extent());
}
使用上述代码,child.get_extent(子.获取_范围)把子对象的范围表示为父根的范围的变换。由此:
(2x2).get_extent()=>(4x4).get_extent()-2*_Delta=>(6x6).get_extent()-2*_Delta-2*_Delta
可将使用上述索引变换的内部函子如下表达。
Figure BDA0000124143200000181
在下面的第四代码示例中,transform索引变换实现对换输入可索引类型14的维Dim1和Dim2的共同映射通信算子12。
Figure BDA0000124143200000182
在这个情况下,上述代码还是transform_offset、transform_extent、以及co_transform_extent索引变换的模式。
图4是示出被配置成编译并执行包括共同映射通信算子12的数据并行代码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)或固件(未示出)、操作系统(OS)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)、闪存驱动器和卡、以及诸如CD和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中。具体地,PE 122执行DP可执行代码138以将共同映射通信算子12应用于输入可索引类型14以生成如图4所示的且如上文中详细描述的输出可索引类型18。
具有一个或多个计算资源且该资源具有为数据并行计算(即,执行DP程序或算法)而优化的硬件体系结构的计算节点121被称为DP最优计算节点121。DP最优计算节点121的示例包括其中PE 122的集合包括一个或多个GPU的节点121,以及其中PE 122的集合包括通用处理器封装中的SIMD单元的集合的节点121。不具有带有为数据并行计算而优化的硬件体系结构的任何计算资源的计算节点121(例如,仅仅具有通用处理元件102的处理器封装)被称为非DP最优计算节点121。在每一计算节点121中,存储器124可与存储器系统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执行。在其中存储器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的指令集以供GPU的PE 122执行。
在另一实施例中,从一个或多个GPU(即,PE 122)的组合中形成计算引擎120,该一个或多个GPU被包括在具有一个或多个通用处理元件102以及包括存储器124的存储器系统104的一部分的处理器封装中。在该实施例中,可以在计算机系统100上提供附加软件来将DP可执行代码138的字节代码或某种其他中间表示(IL)转换成处理器封装中的GPU的指令集。
在另一实施例中,从一个或多个处理器封装中的一个或多个SIMD单元的组合中形成计算引擎120,该一个或多个处理器封装包括处理元件102以及包括存储器124的存储器系统104的一部分。在该实施例中,可以在计算机系统100上提供附加软件来将DP可执行代码138的字节代码或某种其他中间表示(IL)转换成处理器封装中的SIMD单元的指令集。
在又一实施例中,从一个或多个处理器封装中的一个或多个标量或矢量处理流水线的组合中形成计算引擎120,该一个或多个处理器封装包括处理元件102以及包括存储器124的存储器系统104的一部分。在该实施例中,可以在计算机系统100上提供附加软件来将DP可执行代码138的字节代码或某种其他中间表示(IL)转换成处理器封装中的标量处理流水线的指令集。
尽管此处说明并描述了具体实施例,但本领域技术人员可以理解,可用各种替换和/或等价实现来替换所示出并描述的具体实施例而不背离本发明的范围。本申请旨在覆盖此处讨论的具体实施例的任何改编或变型。因此,本发明旨在仅由权利要求书及其等效方案来限制。

Claims (20)

1.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在由计算机系统执行时使得所述计算机系统执行一种方法,所述方法包括:
响应于被配置为在一个或多个数据并行计算节点上执行的数据并行源代码中的第一共同映射通信算子,而根据第一索引空间上的函数,将输入可索引类型映射到输出可索引类型;以及
使用所述输出可索引类型来执行数据并行算法。
2.如权利要求1所述的计算机可读介质,其特征在于,所述输入可索引类型具有第一秩和第一元素类型,且所述输出可索引类型具有第二秩和第二元素类型。
3.如权利要求1所述的计算机可读介质,其特征在于,所述函数将所述第一索引空间映射到第二索引空间。
4.如权利要求3所述的计算机可读介质,其特征在于,所述第一索引空间对应于所述输出可索引类型,而所述第二索引空间对应于所述输入可索引类型。
5.如权利要求1所述的计算机可读存储介质,其特征在于,还包括:
对所述输出可索引类型应用第二通信算子。
6.如权利要求1所述的计算机可读存储介质,其特征在于,所述数据并行源代码是用具有数据并行扩展的编程语言编写的。
7.如权利要求1所述的方法,其特征在于,所述数据并行源代码是用高级数据并行编程语言编写的。
8.如权利要求1所述的计算机可读存储介质,其特征在于,所述一个或多个数据并行计算节点包括至少一个图形处理单元。
9.如权利要求1所述的计算机可读存储介质,其特征在于,所述一个或多个数据并行计算节点包括至少一个通用处理器。
10.一种由计算机系统中的编译器执行的方法,所述方法包括:
在被配置成供在一个或多个数据并行计算节点上执行的数据并行源代码中标识第一共同映射通信算子;以及
从所述数据并行源代码中产生数据并行可执行代码,以使所述数据并行可执行代码通过根据在第一索引空间上的函数从输入可索引类型产生输出可索引类型来实现所述第一共同映射通信算子。
11.如权利要求10所述的方法,其特征在于,所述输入可索引类型具有第一秩和第一元素类型,且所述输出可索引类型具有第二秩和第二元素类型。
12.如权利要求10所述的方法,其特征在于,所述函数将所述第一索引空间映射到第二索引空间。
13.如权利要求12所述的方法,其特征在于,所述第一索引空间对应于所述输出可索引类型,而所述第二索引空间对应于所述输入可索引类型。
14.如权利要求10所述的方法,其特征在于,还包括:
从所述数据并行源代码中产生数据并行可执行代码,以使所述数据并行可执行代码将第二通信算子应用到所述输出可索引类型。
15.如权利要求10所述的方法,其特征在于,所述数据并行源代码是用带有数据并行扩展的高级通用编程语言编写的。
16.如权利要求10所述的方法,其特征在于,所述数据并行源代码是用高级数据并行编程语言编写的。
17.如权利要求10所述的方法,其特征在于,所述一个或多个数据并行计算节点包括至少一个图形处理单元。
18.如权利要求10所述的方法,其特征在于,所述一个或多个数据并行计算节点包括至少一个通用处理器。
19.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在由计算机系统执行时执行一种方法,所述方法包括:
根据第一索引空间上的函数,将共同映射通信算子应用于具有第一秩和第一元素类型的输入可索引类型,来产生具有第二秩和第二元素类型的输出可索引类型,其中所述输出可索引类型对应于所述第一索引空间;以及
使用所述输出可索引类型来执行数据并行算法;
其中所述共同映射通信算子被包括在用带有数据并行扩展的高级通用编程语言编写的数据并行源代码中。
20.如权利要求19所述的计算机可读存储介质,其特征在于,所述数据并行源代码被设置为在包括至少一个图形处理单元的一个或多个数据并行计算节点上执行。
CN201110439844.2A 2010-12-23 2011-12-23 共同映射通信算子 Active CN102637123B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/977,406 US8713039B2 (en) 2010-12-23 2010-12-23 Co-map communication operator
US12/977,406 2010-12-23

Publications (2)

Publication Number Publication Date
CN102637123A true CN102637123A (zh) 2012-08-15
CN102637123B CN102637123B (zh) 2014-09-24

Family

ID=46314972

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110439844.2A Active CN102637123B (zh) 2010-12-23 2011-12-23 共同映射通信算子

Country Status (5)

Country Link
US (1) US8713039B2 (zh)
EP (1) EP2656202A4 (zh)
CN (1) CN102637123B (zh)
HK (1) HK1172409A1 (zh)
WO (1) WO2012088510A2 (zh)

Families Citing this family (5)

* 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
US11074269B2 (en) * 2018-01-10 2021-07-27 Reservoir Labs, Inc. Systems and methods for configuring system memory for extraction of latent information from big data

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080162385A1 (en) * 2006-12-28 2008-07-03 Yahoo! Inc. System and method for learning a weighted index to categorize objects
CN101739281A (zh) * 2008-11-07 2010-06-16 埃森哲环球服务有限公司 用于机器集群的并行编程的架构

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6433802B1 (en) * 1998-12-29 2002-08-13 Ncr Corporation Parallel programming development environment
AU2001249553A1 (en) * 2000-03-28 2001-10-08 Metanology Corporation System and method for metaprogramming software development environment
US7254809B2 (en) * 2003-07-30 2007-08-07 International Business Machines Corporation Compilation of unified parallel C-language programs
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US7260495B2 (en) * 2005-06-06 2007-08-21 International Business Machines Corporation System and method for test generation for system level verification using parallel algorithms
US8453128B2 (en) 2007-09-28 2013-05-28 Oracle America, Inc. Method and system for implementing a just-in-time compiler
US7953957B2 (en) 2008-02-11 2011-05-31 International Business Machines Corporation Mapping and distributing parallel algorithms to compute nodes in a parallel computer based on temperatures of the compute nodes in a hardware profile and a hardware independent application profile describing thermal characteristics of each parallel algorithm
US8595702B2 (en) * 2009-03-13 2013-11-26 Microsoft Corporation Simultaneously displaying multiple call stacks in an interactive debugger
US8209664B2 (en) 2009-03-18 2012-06-26 Microsoft Corporation High level programming extensions for distributed data parallel processing
US20100241893A1 (en) 2009-03-18 2010-09-23 Eric Friedman Interpretation and execution of a customizable database request using an extensible computer process and an available computing environment
US8904366B2 (en) 2009-05-15 2014-12-02 International Business Machines Corporation Use of vectorization instruction sets
US8555265B2 (en) * 2010-05-04 2013-10-08 Google Inc. Parallel processing of data
US8402450B2 (en) * 2010-11-17 2013-03-19 Microsoft Corporation Map transformation in data parallel code

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080162385A1 (en) * 2006-12-28 2008-07-03 Yahoo! Inc. System and method for learning a weighted index to categorize objects
CN101739281A (zh) * 2008-11-07 2010-06-16 埃森哲环球服务有限公司 用于机器集群的并行编程的架构

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
KUEI-PING SHIH ET AL.: "Efficient Index Generation for Compiling Two-Level Mappings in Data-Parallel Programs", 《JOURNAL OF PARALLEL AND DISTRIBUTED COMPUTING》, vol. 60, no. 2, 29 February 2000 (2000-02-29) *

Also Published As

Publication number Publication date
WO2012088510A3 (en) 2012-08-16
WO2012088510A2 (en) 2012-06-28
HK1172409A1 (zh) 2013-04-19
EP2656202A2 (en) 2013-10-30
CN102637123B (zh) 2014-09-24
US20120166444A1 (en) 2012-06-28
US8713039B2 (en) 2014-04-29
EP2656202A4 (en) 2016-03-30

Similar Documents

Publication Publication Date Title
CN102495723B (zh) 小块通信算子
CN102609244B (zh) 灵活通信算子
CN102541612B (zh) 数据平行代码中的映射变换
CN102566980B (zh) 可扩展的数据并行语义
CN102298535B (zh) 绑定数据并行设备源代码
US10282179B2 (en) Nested communication operator
CN102314370B (zh) 可索引类型变换
CN102637123B (zh) 共同映射通信算子
Jain et al. Charm++ and MPI: Combining the best of both worlds
Meredith et al. A distributed data-parallel framework for analysis and visualization algorithm development
Schmidt et al. Tight coupling of r and distributed linear algebra for high-level programming with big data
Fumero et al. accull: An user-directed approach to heterogeneous programming
Ejjaaouani et al. InKS: a programming model to decouple algorithm from optimization in HPC codes
Calinescu BSP scheduling of regular patterns of computation
Diaconescu et al. User-defined data distributions in high-level programming languages

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1172409

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1172409

Country of ref document: HK

ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150428

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

Effective date of registration: 20150428

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.