CN102495723A - 小块通信算子 - Google Patents
小块通信算子 Download PDFInfo
- Publication number
- CN102495723A CN102495723A CN2011103202478A CN201110320247A CN102495723A CN 102495723 A CN102495723 A CN 102495723A CN 2011103202478 A CN2011103202478 A CN 2011103202478A CN 201110320247 A CN201110320247 A CN 201110320247A CN 102495723 A CN102495723 A CN 102495723A
- Authority
- CN
- China
- Prior art keywords
- index type
- data parallel
- type
- fritter
- computer
- 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
Links
- 238000004891 communication Methods 0.000 title claims abstract description 36
- 238000003860 storage Methods 0.000 claims description 27
- 238000000034 method Methods 0.000 claims description 24
- 230000004044 response Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 16
- 238000005538 encapsulation Methods 0.000 description 13
- 230000014509 gene expression Effects 0.000 description 11
- ORQBXQOJMQIAOY-UHFFFAOYSA-N nobelium Chemical compound [No] ORQBXQOJMQIAOY-UHFFFAOYSA-N 0.000 description 11
- 239000011159 matrix material Substances 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000000354 decomposition reaction Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000005457 optimization Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 2
- 230000000712 assembly Effects 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 238000009412 basement excavation Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000017105 transposition Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000008521 reorganization Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/453—Data distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/314—Parallel programming languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
- Communication Control (AREA)
Abstract
本发明公开了小块通信算子。高级编程语言提供了一种将计算空间分解成可被映射到数据并行计算节点的各执行结构(例如,线程组)的子空间(即,小块)的小块通信算子。具有秩和元素类型的可索引类型定义计算空间。对于输入可索引类型,小块通信算子产生具有与输入可索引类型相同的秩以及作为输入可索引类型的小块的元素类型的输出可索引类型。输出可索引类型提供了计算空间的局部视图结构,这使得能够在数据并行计算节点中接合全局存储器存取。
Description
技术领域
本发明涉及计算机技术,尤其涉及小块通信算子。
背景技术
计算机系统通常包括一个或多个通用处理器(例如,中央处理器(CPU))以及一个或多个专用数据并行计算节点(例如,图形处理单元(GPU)或CPU中的单指令多数据(SIMD)执行单元)。通用处理器通常在计算机系统上执行通用处理,并且数据并行计算节点通常在计算机系统上执行数据并行处理(例如图形处理)。通用处理器通常具有实现数据并行算法的能力,但这样做却没有在数据并行计算节点中发现的优化的硬件资源。结果,通用处理器在执行数据并行算法时可能比数据并行计算节点低效得多。
数据并行计算节点传统地在计算机系统上执行程序方面扮演通用处理器的辅助角色。随着为数据并行算法优化的硬件的角色由于数据并行计算节点处理能力的增强而增加,增强程序员对数据并行计算节点进行编程的能力并使对数据并行计算节点进行编程变得更为容易可能是合乎需要的。
计算线性代数中的一种常见技术是小块或块分解算法,其中,将计算空间划分成各子空间并且通过将每一小块或块如同它是一个点那样进行处理来递归地实现算法。然而,这样的分解涉及对索引的详细跟踪以及小块和块的相对几何学。结果,创建索引和几何学的过程可能是易于出错且难以实现的。
发明内容
提供本发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。
高级编程语言提供了一种将计算空间分解成可被映射到数据并行计算节点的各执行结构(例如,线程组)的各子空间(即,小块)的小块通信算子。具有秩和元素类型的可索引类型定义了计算空间。对于输入可索引类型,小块通信算子产生具有与输入可索引类型相同的秩以及作为输入可索引类型的小块的元素类型的输出可索引类型。输出可索引类型提供了计算空间的局部视图结构,其使得能够在数据并行计算节点中接合全局存储器存取。
附图说明
包括附图来提供了对各实施例的进一步理解,且这些附图被合并在本发明书内并构成其一部分。附图示出各实施例,并且与说明书一起用于解释本发明的原理。其他实施例和各实施例的许多预期优点将随着参考下面的详细描述进行更好的理解而得到认识。附图的元素不一定相对于彼此而缩放。相同的附图标记指代对应的类似部分。
图1是示出具有小块通信算子的代码的实施例的计算机代码图。
图2是示出了将小块通信算子应用到输入可索引类型的实施例的框图。
图3是示出生成具有小块通信算子的输出可索引类型的实施例的框图。
图4是示出实现小块通信算子的代码的实施例的计算机代码图。
图5是示出被配置成编译并执行包括小块通信算子的数据并行代码的计算机系统的实施例的框图。
具体实施方式
在以下具体实施方式中,对附图进行了参考,附图构成了实施例的一部分且在其中作为示例示出了可在其中实践本发明的各特定实施例。就此,诸如“顶部”、“底部”、“前方”、“后方”、“前导”、“尾部”等的方向性术语参考正在描述的附图的方向来使用。因为实施例的各组件可位于多个不同的方向,所以方向性术语出于说明的目的来使用而不是限制。可以理解,可以使用其它实施例并且可以做出结构上或逻辑上的改变而不背离本发明的范围。因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。应该理解,此处描述的各示例性实施例的特征可相互组合,除非另外具体注明。
图1是示出具有小块通信算子12的代码10的实施例的计算机代码图。在被编译和执行时,小块通信算子12将计算空间(由图1的实施例中的indexable_type<N,T>表示)分解成由程度(由图1的实施例中的_Extent表示)定义的子空间(即小块)。各小块可被映射到数据并行(DP)最优计算节点的执行结构(例如,线程组(DirectX)、线程块(CUDA)、工作组(OpenCL)或载波(AMD/ATI)),诸如图5所示的且在下文中更详细地描述的DP最优计算节点121。
节点10包括来自高级通用编程语言或数据并行编程语言的可被编译成一个或多个可执行代码(例如,DP可执行代码138)以便由一个或多个DP最优计算节点(例如,图5所示的DP最优计算节点)执行的指令序列。
在一个实施例中,代码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 GPGPU Accelerator、Brook+、CAL、APL、Fortran 90(以及更高版本)、Data Parallel C、DAPPLE或APL。在该实施例中,代码10可以表示任何合适类型的DP源代码,诸如应用、库函数或操作系统服务。
代码10包括被指定为在DP最优计算节点上执行的代码部分。在使用GP语言来编写代码10的图1的实施例中,GP语言允许程序员在定义矢量函数时使用注解26(例如,__declspec(vector)…)来指定GP源代码。注释26与旨在供在DP最优计算节点上执行的矢量函数的函数名27(例如vector_func)相关联。代码10还可包括在调用点(诸如,forall,reduce,scan,或sort)处对矢量函数的一个或多个调用28(例如,forall…,vector_func,…)。对应于调用点的矢量函数被称为内核函数。内核函数可调用代码10中的其他矢量函数(即,其他DP源代码),并可被视为矢量函数调用图中的根。内核函数还可使用由代码10所定义的类型(例如,类或结构体)。这些类型可以被注释为DP源代码或可以不被注释成DP源代码。在其他实施例中,可使用其他合适的编程语言结构体来将代码10的各部分指定为DP源代码和/或通用处理器代码。此外,在使用DP语言来编写代码10的实施例中,注释26可以被省略。
图2是示出将小块通信算子12应用于输入可索引类型14以产生输出可索引类型18的实施例的框图。如此处所使用的,可索引类型是实现带有为非负整数的秩以及被表示为element_type的类型的一个或多个指标算子的任何数据类型。如果index<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;
其中index_declarator采用以下中的至少一个形式:
const index<rank>&idx;
const index<rank>idx;
index<rank>&idx;
index<rank>idx.
在其他实施例中,算子可以是函数、函子或更通用的表示。具有给定秩和元素类型的可索引类型的种类具有被称为字段的初始对象。可索引类型具有多面体的形状—即,可索引类型可被代数地表示为由坐标轴的线性函数所形成的有限数量个半平面的交点。
参考图1和2,代码10的高级语言提供了小块通信算子12以便在数据并行计算环境中的输入可索引类型14上使用。输入可索引类型14具有秩(例如,图1的实施例中的秩N)和元素类型(例如,图1的实施例中的元素类型T)并且定义了可由小块通信算子12分解的计算空间。对于每一个输入可索引类型14,小块通信算子产生具有与输入可索引类型14相同的秩以及作为输入可索引类型14的小块的元素类型的输出可索引类型18。
图3是示出生成具有小块通信算子12的输出可索引类型18的实施例的框图。在图3的示例中,小块通信算子12使用2x2小块将4x4输入可索引类型14划分成2x2输出可索引类型18。作为另一示例(未示出),给定1024x1024矩阵的输入可索引类型14和64x64的小块,输出可索引类型18表示16x16小块(64*16=1024)。
小块通信算子12表示数据分解的范围模式。范围模式涉及可索引类型的集合。使Indexable<N>为秩N的任何输入可索引类型14,这意味着索引算子作用于类型index<N>的实例。指标算子的返回类型(即,元素类型)是Indexable<N>::element_type。
小块通信算子12的演算得到以下同构关系。对于小块tile<grid_tile>:Indexable<N>->range<N,Indexable<N>>并且range<N,Indexable<N>>是被限于由Indexable<N>/grid_tile索引的grid_tile的Indexable<N>的集合。更具体地,如果网格描述Indexable<N>的形状,则range<N,Indexable<N>>是被限于由grid_range=(grid+grid_tile-1)/grid_tile中的偏置所解释的grid_tile的Indexable<N>的集合。因此,当由tile<grid_tile>(Indexable<N>)创建时,grid_range是range<N,Indexable<N>>的形状。
由小块通信算子12构造的所有‘范围(range)’实例采用具有Indexable<N>的定义或形状的原始域,该原始域被称为Indexable<N>.grid而不丢失通用性。根据定义,Indexable<N>的索引算子作用于由Indexable<N>.grid描述的每一个Index<N>。在形成range<N1,Indexable<N2>>的过程中,形成Indexable<N>.grid的划分,且由range<N1,Indexable<N2>>定义的集合是限于N2-维度划分的原始Indexable<N>-由index<N1>的N1-维度集合参数化的集合。编译时由编译器推断的优化是:range<N,Indexable<N>>是原始Indexable<N>的划分。
在输入可索引类型14被定义为“范围”的一个示例中,在以下代码部分中可使用小块通信算子12“小块”将范围输入可索引类型14分块成输出可索引类型18。
在以上代码部分中,grid<Rank>(e)描述了作为小块集合的tile_range的形状。_Tile是tile_range采用的增加值或阶,即,‘下一小块’递增量为_Tile。最后一个参数:
Parent_type(grid<_Rank>(_Tile),_Parent)是_Parent的_Tile形状的子对象的表示。实际上,为使可索引类型允许分块,这意味着对于‘tile(…)’通信算子是有效的,它具有签名Parent_type(const grid<_Rank>&_Sub_grid,const_Parent_type&_Parent)的构造器就足够了。
在输入可索引类型14被定义为字段初始对象(即“字段”)的另一示例中,可使用以下代码部分中的小块通信算子12“小块”来将字段输入可索引类型14分块成输出可索引类型18。
在以上代码部分中,grid<_Rank>(e)描述了作为小块集合的tile_range的形状。_Tile是tile_range采用的增加值或阶,即,‘下一小块’递增量为_Tile。最后一个参数:
field<_Rank,_Element_type>(grid<_Rank>(Tile),_Parent)是field<_Rank,_Element_type>的_Tile形状的子对象的表示。
图4是示出实现小块通信算子12和输出可索引类型18的代码的实施例的计算机代码图示。在图4所示的代码中,数据结构“tile_range”为小块通信算子12“小块”形成输出可索引类型18(也被称为“伪字段”)。tile_range的索引算子采用:
const index<_Rank>&_Index并形成其程度为_Tile的字段或伪字段且其偏置为从中构建该字段或伪字段的_Parent内的_Index*m_multiplier。
输出可索引类型18提供了能够在DP最优计算代码中接合全局存储器存取的数据并行算法的计算空间(即,输入可索引类型14)的局部视图结构。数据并行算法的局部结构形成了与DP最优计算节点的执行结构(例如,线程组、线程块、工作组或波)相对应的调度模式。对于包括流SIMD扩展(SSE)计算引擎的DP最优计算节点,该局部结构与通过循环分小块或循环分块形成的带状挖掘程度相似。局部结构与DP最优计算节点的快速局部或共享存储器(例如,高效的高速暂存存储器或高速缓存)交互以产生对全局存储器存储的更高的算法存取。局部结构与分块的关系如下——小块可被设为局部结构常量的倍数以使得适合小块的局部结构的数量确定了执行结构的隐式循环维度的展开因子。这一关系可在局部视图分解中看见:
_index=_tileIndex*thread_group_dimensions+_localIndex
其中_tileIndex表示包含_index的小块(即,输入可索引类型14)的坐标而_localIndex该小块内的偏置。局部结构常量thread_group_dimensions可被设为与_Tile相同或者被这样设置以使得thread_group_dimensions的倍数(例如16)等于_Tile以使得能够在DP最优计算节点中接合全局存储器存取。由此,小块通信算子12提供了直接的、无差错且直观的DP最优计算节点的小块分解。
小块通信算子12可被递归地应用并且可与在可索引类型上操作的其他通信算子进行组合。
现在将参照矩阵乘法来说明小块通信算子12的使用。
不使用小块通信算子12,可如以下代码所示地对全局视图结构执行矩阵乘法。
假定存在由16x16线程组维度确定的局部视图结构。类似地,将矩阵A、B和C分块成16x16的小块。(暂时假定N被16整除——一般情况,检查边界条件并且当小块未完全地被包含在原始数据中时内核提前退出。)
带状挖掘以下循环:
for(int k=0;k<mA.get_extent(1);k++)
c+=mA(idx(0),k)*mB(k,idx(1));
以得到:
for(int k=0;k<mA.get_extent(1)/16;k++)
for(int x=0;x<16;x++)
c+=mA(idx(0),k*16+x)*mB(k*16+x,idx(1));
为对以上进行分块,分解:
idx=_tileIdx*_Tile+_localIdx.
随后将tiled_mA和tiled_mB进行组合以得到:
for(int k=0;k<tiled_mA.get_extent(1);k++)
for(int x=0;x<16;x++)
c+=tiled_mA(_tileIdx(0),k)(_localIdx(0),x)*
tiled_mB(k,_tileIdx(1))(x,_localIdx(1));
从以上分解中,可以看到:
mA(idx(0),k*16+x)==tiled_mA(_tileIdx(0),k)(_localIdx(0),x);
以及
mB(k*16+x,idx(1))==tiled_mB(k,_tileIdx(1))(x,_localIdx(1)).
对应关系从以下得出:
idx=_tileIdx*_Tile+_localIdx,
换言之,矩阵中的每一点具有到包含该点的小块以及小块内的偏置的唯一分解。为完成这一示例,可执行贯穿共享存储器的存储器接合。假设以上全局视图矩阵乘法形成了对于16x16的线程组维度分派的内核,这意味着256个线程在逻辑上同时执行该内核。只要一个线程需要来自其自己线程组的另一线程的结果,就可插入同步障碍:
group_barrier();
它阻塞线程组中的所有线程直到所有线程都到达了该障碍。
考虑存储器加载:
mA(idx(0),k)
mB(k,idx(1))//固定的k
线程组具有线程(i,j)其中0<=i,j<16。对于任意i,线程:
(i,0),(i,1),…,(i,15)
从全局存储器中读取连续的4字节地址以便完全地接合存取。具体地,线程(i,0)读取第一组4字节,线程(i,1)读取第二组4字节,线程(i,2)读取第三组4字节,以此类推。
按64或128字节组块从全局存储器存取存储器,并且实际上使用被存取的所有存储器是最优的。然而:
mA(idx(0),k)
只为线程((i,0),(i,1),…,(i,15))中的任何一行使用了4字节,所以大部分的全局存储器取数未被使用。而:
mB(k,idx(1))=mB(k,_tileIdx(1)*16+_localIdx(1))为64字节组块完全接合,因为_localIdx按(i,0),(i,1),…,(i,15)准确地变化。类似地,假定线程组和_Tile组维度为8x32,则:
mB(k,idx(1))=mB(k,_tileIdx(1)*32+_localIdx(1))为128字节组块完全接合,因为_localIdx按(i,0),(i,1),…,(i,31)准确地变化。
为了迫使所有存储器存取被完全接合,则按接合的方式来将全局存储器读入共享存储器中,因为接合的次序不是用来执行计算的次序,在组障碍处进行同步之后按所需次序从共享存储器进行存取。这导致存储器存取被完全接合以及一种值得的优化,因为DP最优计算节点中的共享存储器实质上具有单元存取速度。
sharedA[_localIdx]=tiled_mA(_tileIdx(0),k)[_localIdx];
以及
sharedB[_localIdx]=tiled_mB(k,tileIdx(1))[_localIdx];
将其全部组合在一起得到:
或
其中调用点:
小块通信算子12的使用基于完全接合的存储器存取可显著提高执行矩阵乘法的速度。另外,如果矩阵中的一个作为乘法的一部分被转置,小块通信算子12的使用基于完全接合的存储器存取可动态地提高执行矩阵乘法的速度。在A*转置(B)的情况下,存储器存取完全未接合以得到在不分块的情况下大约100次的执行命中。
图5是示出被配置成编译并执行包括小块通信算子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以生成如图5所示的且如上文中详细描述的输出可索引类型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 (15)
1.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在由计算机系统(100)执行时使得所述计算机系统执行一种方法,所述方法包括:
响应于被配置成供在一个或多个数据并行计算节点(121)上执行的数据并行源代码(10)中的小块通信算子(12),从输入可索引类型(14)中生成输出可索引类型(18);以及
使用所述输出可索引类型来执行数据并行算法。
2.如权利要求1所述的计算机可读存储介质,其特征在于,所述输入可索引类型具有秩和第一元素类型,且所述输出可索引类型具有所述秩和作为所述输入可索引类型的小块的第二元素类型。
3.如权利要求1所述的计算机可读存储介质,其特征在于,所述输入可索引类型具有秩和第一形状,且所述输出可索引类型具有所述秩和作为所述输入可索引类型的小块的第二形状。
4.如权利要求1所述的计算机可读存储介质,其特征在于,所述输出可索引类型映射到所述一个或多个数据并行计算节点的执行结构。
5.如权利要求1所述的计算机可读存储介质,其特征在于,所述输出可索引类型提供所述一个或多个数据并行计算节点上的输入可索引类型的局部视图结构。
6.如权利要求1所述的计算机可读存储介质,其特征在于,所述数据并行源代码是用具有数据并行扩展的编程语言编写的。
7.如权利要求1所述的计算机可读存储介质,其特征在于,所述一个或多个数据并行计算节点包括至少一个图形处理单元。
8.如权利要求1所述的计算机可读存储介质,其特征在于,所述一个或多个数据并行计算节点包括至少一个通用处理器。
9.一种由计算机系统(100)中的编译器(134)执行的方法,所述方法包括:
在被配置成供在一个或多个数据并行计算节点(121)上执行的数据并行源代码(10)中标识小块通信算子(12);以及
从所述数据并行源代码中生成数据并行可执行代码(138),以使得所述数据并行可执行代码通过将输入可索引类型(14)分解成输出可索引类型(18)来实现小块通信算子。
10.如权利要求9所述的方法,其特征在于,所述输入可索引类型具有秩和第一元素类型,且所述输出可索引类型具有所述秩和作为所述输入可索引类型的小块的第二元素类型。
11.如权利要求9所述的方法,其特征在于,所述输入可索引类型具有秩和第一形状,且所述输出可索引类型具有所述秩和作为所述输入可索引类型的小块的第二形状。
12.如权利要求9所述的方法,其特征在于,所述输出可索引类型映射到所述一个或多个数据并行计算节点的执行结构。
13.如权利要求9所述的方法,其特征在于,所述输出可索引类型提供所述一个或多个数据并行计算节点上的输入可索引类型的局部视图结构。
14.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在由计算机系统(100)执行时执行一种方法,所述方法包括:
应用小块通信算子(12)来将具有秩和第一元素类型的输入可索引类型(14)分解成具有所述秩和作为所述输入可索引类型的第二元素类型的输出可索引类型(18);以及
使用所述输出可索引类型来对所述输入可索引类型执行数据并行算法;
其中所述小块通信算子被包括在用带有数据并行扩展的高级通用编程语言编写的数据并行源代码(10)中,其中所述输出可索引类型映射到被配置成执行所述数据并行算法的一个或多个数据并行计算节点(121)的执行结构,且其中所述一个或多个数据并行计算节点包括至少一个图形处理单元(122)。
15.如权利要求14所述的计算机可读存储介质,其特征在于,所述第一元素类型具有第一形状,且所述第二元素类型具有作为小块的第二形状。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/902,404 | 2010-10-12 | ||
US12/902,404 US9489183B2 (en) | 2010-10-12 | 2010-10-12 | Tile communication operator |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102495723A true CN102495723A (zh) | 2012-06-13 |
CN102495723B CN102495723B (zh) | 2015-11-25 |
Family
ID=45926119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110320247.8A Active CN102495723B (zh) | 2010-10-12 | 2011-10-11 | 小块通信算子 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9489183B2 (zh) |
EP (1) | EP2628075A4 (zh) |
JP (1) | JP6092780B2 (zh) |
KR (1) | KR101740093B1 (zh) |
CN (1) | CN102495723B (zh) |
CA (1) | CA2813879A1 (zh) |
WO (1) | WO2012050796A2 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113553039A (zh) * | 2020-04-23 | 2021-10-26 | 杭州海康威视数字技术股份有限公司 | 算子的可执行代码的生成方法及装置 |
CN113553039B (zh) * | 2020-04-23 | 2024-05-31 | 杭州海康威视数字技术股份有限公司 | 算子的可执行代码的生成方法及装置 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
US9830133B1 (en) * | 2011-12-12 | 2017-11-28 | Significs And Elements, Llc | Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation |
CN102707932B (zh) * | 2012-05-16 | 2013-07-24 | 清华大学 | 一种用于地球系统模式的并行耦合方法 |
US9367293B2 (en) * | 2012-06-18 | 2016-06-14 | International Business Machines Corporation | System and method for compiler assisted parallelization of a stream processing operator |
US10255299B2 (en) * | 2012-06-21 | 2019-04-09 | Neha Bhatia | Polytope and convex body database |
CN104881326B (zh) * | 2015-05-26 | 2018-04-13 | 上海帝联信息科技股份有限公司 | 日志文件处理方法及装置 |
KR102034662B1 (ko) * | 2016-01-14 | 2019-11-18 | 서울대학교산학협력단 | 병렬 연산을 수행하는 장치 및 방법 |
DE102017209697A1 (de) * | 2016-06-13 | 2017-12-14 | Denso Corporation | Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung |
US10929143B2 (en) * | 2018-09-28 | 2021-02-23 | Intel Corporation | Method and apparatus for efficient matrix alignment in a systolic array |
EP3934751A1 (en) | 2019-03-08 | 2022-01-12 | Mevion Medical Systems, Inc. | Collimator and energy degrader for a particle therapy system |
CN112463218B (zh) * | 2020-11-27 | 2022-12-09 | 成都海光微电子技术有限公司 | 指令发射控制方法及电路、数据处理方法及电路 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1330314A (zh) * | 2000-06-20 | 2002-01-09 | 国际商业机器公司 | 并行软件处理系统 |
US20070294666A1 (en) * | 2006-06-20 | 2007-12-20 | Papakipos Matthew N | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
US20100005080A1 (en) * | 2004-06-18 | 2010-01-07 | Pike Robert C | System and method for analyzing data records |
Family Cites Families (94)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3601341B2 (ja) | 1999-02-09 | 2004-12-15 | 株式会社日立製作所 | 並列プログラム生成方法 |
US4156910A (en) | 1974-02-28 | 1979-05-29 | Burroughs Corporation | Nested data structures in a data driven digital data processor |
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 |
CA2078315A1 (en) | 1991-09-20 | 1993-03-21 | Christopher L. Reeve | Parallel processing apparatus and method for utilizing tiling |
US5551039A (en) | 1992-02-03 | 1996-08-27 | Thinking Machines Corporation | Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements |
US5710927A (en) | 1995-06-14 | 1998-01-20 | Kuck & Associates, Inc. | Method of replacing lvalues by variables in programs containing nested aggregates in an optimizing compiler |
US5812852A (en) | 1996-11-14 | 1998-09-22 | Kuck & Associates, Inc. | Software implemented method for thread-privatizing user-specified global storage objects in parallel computer programs via program transformation |
US5999729A (en) | 1997-03-06 | 1999-12-07 | Continuum Software, Inc. | System and method for developing computer programs for execution on parallel processing systems |
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 |
US6088511A (en) | 1998-05-13 | 2000-07-11 | Microsoft Corporation | Nested parallel 2D Delaunay triangulation method |
US6106575A (en) | 1998-05-13 | 2000-08-22 | Microsoft Corporation | Nested parallel language preprocessor for converting parallel language programs into sequential code |
US6018628A (en) | 1998-06-16 | 2000-01-25 | Sun Microsystems, Inc. | Method of implementing parameterized types to be compatible with existing unparameterized libraries |
GB2339036A (en) | 1998-07-03 | 2000-01-12 | Ibm | Set of objects for extracting data from a database, and visual builder |
US7103640B1 (en) | 1999-09-14 | 2006-09-05 | Econnectix, Llc | Network distributed tracking wire transfer protocol |
US6433802B1 (en) | 1998-12-29 | 2002-08-13 | Ncr Corporation | Parallel programming development environment |
US6560774B1 (en) | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
US6550059B1 (en) | 1999-10-04 | 2003-04-15 | Advanced Micro Devices, Inc. | Method for generating optimized vector instructions from high level programming languages |
US7233331B2 (en) | 2000-03-16 | 2007-06-19 | Square Enix Co., Ltd. | Parallel object task engine and processing method |
US20020019971A1 (en) | 2000-03-28 | 2002-02-14 | Zygmont David A. | System and method for metaprogramming software development environment |
US6901588B1 (en) | 2000-04-17 | 2005-05-31 | Codemesh, Inc. | Sharing components between programming languages by use of polymorphic proxy |
US6708331B1 (en) | 2000-05-03 | 2004-03-16 | Leon Schwartz | Method for automatic parallelization of software |
US7418470B2 (en) | 2000-06-26 | 2008-08-26 | Massively Parallel Technologies, Inc. | Parallel processing systems and method |
US6847370B2 (en) | 2001-02-20 | 2005-01-25 | 3D Labs, Inc., Ltd. | Planar byte memory organization with linear access |
US20030187853A1 (en) | 2002-01-24 | 2003-10-02 | Hensley Roy Austin | Distributed data storage system and method |
US6934940B2 (en) | 2002-01-30 | 2005-08-23 | International Business Machines Corporation | Source code transformation-temporary object reduction |
GB0215033D0 (en) | 2002-06-28 | 2002-08-07 | Critical Blue Ltd | Instruction set translation method |
US7257809B2 (en) | 2002-12-31 | 2007-08-14 | Intel Corporation | Estimation of type-cast sets |
US7096422B2 (en) | 2003-02-28 | 2006-08-22 | Microsoft Corporation | Markup language visual mapping |
US7210127B1 (en) | 2003-04-03 | 2007-04-24 | Sun Microsystems | Methods and apparatus for executing instructions in parallel |
US7254809B2 (en) | 2003-07-30 | 2007-08-07 | International Business Machines Corporation | Compilation of unified parallel C-language programs |
US7373640B1 (en) | 2003-07-31 | 2008-05-13 | Network Appliance, Inc. | Technique for dynamically restricting thread concurrency without rewriting thread code |
US20050071828A1 (en) | 2003-09-25 | 2005-03-31 | International Business Machines Corporation | System and method for compiling source code for multi-processor environments |
US7171544B2 (en) | 2003-12-15 | 2007-01-30 | International Business Machines Corporation | Run-time parallelization of loops in computer programs by access patterns |
US20050210023A1 (en) | 2004-03-18 | 2005-09-22 | Renato Barrera | Query optimizer using implied predicates |
US7624383B2 (en) | 2004-04-30 | 2009-11-24 | Cornell University | System for and method of improving discrete event simulation using virtual machines |
US7584465B1 (en) | 2004-09-20 | 2009-09-01 | The Mathworks, Inc. | Memory mapping for single and multi-processing implementations of code generated from a block diagram model |
US7464103B2 (en) | 2004-10-29 | 2008-12-09 | Microsoft Corporation | Multi-level nested open hashed data stores |
US7733347B2 (en) | 2004-11-05 | 2010-06-08 | Microsoft Corporation | Automated construction of shader programs |
US7800620B2 (en) | 2004-11-05 | 2010-09-21 | Microsoft Corporation | Optimizing automated shader program construction |
JP4783005B2 (ja) | 2004-11-25 | 2011-09-28 | パナソニック株式会社 | プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。 |
US7844691B2 (en) | 2004-12-30 | 2010-11-30 | Xstor Systems, Inc. | Scalable distributed storage and delivery |
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 |
US7689980B2 (en) | 2005-09-30 | 2010-03-30 | Intel Corporation | Splitting the computation space to optimize parallel code |
EP1783604A3 (en) | 2005-11-07 | 2007-10-03 | Slawomir Adam Janczewski | Object-oriented, parallel language, method of programming and multi-processor computer |
US7889922B2 (en) | 2005-11-14 | 2011-02-15 | Siemens Medical Solutions Usa, Inc. | Method and system for histogram calculation using a graphics processing unit |
US7926046B2 (en) | 2005-12-13 | 2011-04-12 | Soorgoli Ashok Halambi | Compiler method for extracting and accelerator template program |
US8387033B2 (en) | 2005-12-21 | 2013-02-26 | Management Services Group, Inc. | System and method for the distribution of a program among cooperating processing elements |
JP4923240B2 (ja) | 2006-01-17 | 2012-04-25 | 国立大学法人東京工業大学 | プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム |
US8261270B2 (en) | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
US7739466B2 (en) | 2006-08-11 | 2010-06-15 | Intel Corporation | Method and apparatus for supporting immutable memory |
US20080127146A1 (en) | 2006-09-06 | 2008-05-29 | Shih-Wei Liao | System and method for generating object code for map-reduce idioms in multiprocessor systems |
US8056047B2 (en) | 2006-11-20 | 2011-11-08 | International Business Machines Corporation | System and method for managing resources using a compositional programming model |
US8046745B2 (en) | 2006-11-30 | 2011-10-25 | International Business Machines Corporation | Method to examine the execution and performance of parallel threads in parallel programming |
US8010945B1 (en) | 2006-12-08 | 2011-08-30 | Nvidia Corporation | Vector data types with swizzling and write masking for C++ |
US7756845B2 (en) | 2006-12-28 | 2010-07-13 | Yahoo! Inc. | System and method for learning a weighted index to categorize objects |
US8799871B2 (en) | 2007-01-08 | 2014-08-05 | The Mathworks, Inc. | Computation of elementwise expression in parallel |
US8079023B2 (en) | 2007-03-22 | 2011-12-13 | Microsoft Corporation | Typed intermediate language support for existing compilers |
US7983890B2 (en) | 2007-06-18 | 2011-07-19 | Massachusetts Institute Of Technology | Method and apparatus performing automatic mapping for a multi-processor system |
US8127283B2 (en) | 2007-09-05 | 2012-02-28 | Intel Corporation | Enabling graphical notation for parallel programming |
US8453128B2 (en) | 2007-09-28 | 2013-05-28 | Oracle America, Inc. | Method and system for implementing a just-in-time compiler |
US7970872B2 (en) | 2007-10-01 | 2011-06-28 | Accenture Global Services Limited | Infrastructure for parallel programming of clusters of machines |
JP4339907B2 (ja) | 2007-10-24 | 2009-10-07 | 株式会社日立製作所 | マルチプロセッサ向け最適コード生成方法及びコンパイル装置 |
US8261249B2 (en) | 2008-01-08 | 2012-09-04 | International Business Machines Corporation | Distributed schemes for deploying an application in a large parallel system |
US8108653B2 (en) | 2008-01-09 | 2012-01-31 | Analog Devices, Inc. | Processor architectures for enhanced computational capability and low latency |
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 |
US8245212B2 (en) | 2008-02-22 | 2012-08-14 | Microsoft Corporation | Building call tree branches and utilizing break points |
US8806426B2 (en) | 2008-06-04 | 2014-08-12 | Microsoft Corporation | Configurable partitioning of parallel data for parallel processing |
US8453134B2 (en) | 2008-06-04 | 2013-05-28 | Intel Corporation | Improving data locality and parallelism by code replication |
US8286198B2 (en) | 2008-06-06 | 2012-10-09 | Apple Inc. | Application programming interfaces for data parallel computing on multiple processors |
JP4635082B2 (ja) | 2008-09-30 | 2011-02-16 | 株式会社東芝 | マルチプロセッサシステム及びグルーピング方法 |
BRPI0919457A2 (pt) | 2008-09-30 | 2015-12-01 | Exxonmobil Upstream Res Co | método para simular escoamento de fluido em um reservatório de hidrocarboneto |
US7979844B2 (en) | 2008-10-14 | 2011-07-12 | Edss, Inc. | TICC-paradigm to build formally verified parallel software for multi-core chips |
US8302076B2 (en) | 2008-11-12 | 2012-10-30 | Landmark Graphics Corporation | Systems and methods for improved parallel ILU factorization in distributed sparse linear systems |
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 |
US8060857B2 (en) | 2009-01-31 | 2011-11-15 | Ted J. Biggerstaff | Automated partitioning of a computation for parallel or other high capability architecture |
US8549496B2 (en) | 2009-02-27 | 2013-10-01 | Texas Tech University System | Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations |
JP2010204979A (ja) | 2009-03-04 | 2010-09-16 | Renesas Electronics Corp | コンパイル方法及びコンパイラ |
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 |
US8621446B2 (en) | 2010-04-29 | 2013-12-31 | International Business Machines Corporation | Compiling software for a hierarchical distributed processing system |
US8555265B2 (en) * | 2010-05-04 | 2013-10-08 | Google Inc. | Parallel processing of data |
US20110314256A1 (en) | 2010-06-18 | 2011-12-22 | Microsoft Corporation | Data Parallel Programming Model |
US8589867B2 (en) | 2010-06-18 | 2013-11-19 | Microsoft Corporation | Compiler-generated invocation stubs for data parallel programming model |
US8839214B2 (en) | 2010-06-30 | 2014-09-16 | Microsoft Corporation | Indexable type transformations |
WO2012053017A1 (en) | 2010-10-19 | 2012-04-26 | Istituto Di Ricerca Protos | Enzyme-catalyzed process for the preparation of sugar 6 -e sters |
US8402450B2 (en) | 2010-11-17 | 2013-03-19 | Microsoft Corporation | Map transformation in data parallel code |
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 |
-
2010
- 2010-10-12 US US12/902,404 patent/US9489183B2/en active Active
-
2011
- 2011-09-23 CA CA2813879A patent/CA2813879A1/en not_active Abandoned
- 2011-09-23 WO PCT/US2011/053017 patent/WO2012050796A2/en active Application Filing
- 2011-09-23 JP JP2013533869A patent/JP6092780B2/ja active Active
- 2011-09-23 KR KR1020137009251A patent/KR101740093B1/ko active IP Right Grant
- 2011-09-23 EP EP11832992.9A patent/EP2628075A4/en not_active Ceased
- 2011-10-11 CN CN201110320247.8A patent/CN102495723B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1330314A (zh) * | 2000-06-20 | 2002-01-09 | 国际商业机器公司 | 并行软件处理系统 |
US20100005080A1 (en) * | 2004-06-18 | 2010-01-07 | Pike Robert C | System and method for analyzing data records |
US20070294666A1 (en) * | 2006-06-20 | 2007-12-20 | Papakipos Matthew N | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
Non-Patent Citations (1)
Title |
---|
DOMAN ET AL: "PARADOCS:A highly parallel dataflow computer and its dataflow language", 《MICROPROCESSING AND MICROPROGRAMMING》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113553039A (zh) * | 2020-04-23 | 2021-10-26 | 杭州海康威视数字技术股份有限公司 | 算子的可执行代码的生成方法及装置 |
CN113553039B (zh) * | 2020-04-23 | 2024-05-31 | 杭州海康威视数字技术股份有限公司 | 算子的可执行代码的生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
JP6092780B2 (ja) | 2017-03-08 |
EP2628075A4 (en) | 2014-08-13 |
CA2813879A1 (en) | 2012-04-19 |
US20120089961A1 (en) | 2012-04-12 |
EP2628075A2 (en) | 2013-08-21 |
WO2012050796A3 (en) | 2012-05-31 |
WO2012050796A2 (en) | 2012-04-19 |
JP2013539888A (ja) | 2013-10-28 |
US9489183B2 (en) | 2016-11-08 |
KR20140001864A (ko) | 2014-01-07 |
CN102495723B (zh) | 2015-11-25 |
KR101740093B1 (ko) | 2017-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102495723B (zh) | 小块通信算子 | |
CN102609244B (zh) | 灵活通信算子 | |
CN102541612B (zh) | 数据平行代码中的映射变换 | |
CN102566980B (zh) | 可扩展的数据并行语义 | |
US10282179B2 (en) | Nested communication operator | |
CN102314370B (zh) | 可索引类型变换 | |
CN102637123B (zh) | 共同映射通信算子 | |
Davis et al. | Paradigmatic shifts for exascale supercomputing | |
Chien et al. | Techniques for efficient execution of fine-grained concurrent programs | |
Loring et al. | Extensions to the SENSEI In situ Framework for Heterogeneous Architectures | |
Bertozzi et al. | Tools for code optimization and system evaluation of the image processing system PAPRICA-3 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150723 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150723 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |