CN101799760B - 生成任意目标架构的并行单指令多数据代码的系统和方法 - Google Patents
生成任意目标架构的并行单指令多数据代码的系统和方法 Download PDFInfo
- Publication number
- CN101799760B CN101799760B CN2010101176188A CN201010117618A CN101799760B CN 101799760 B CN101799760 B CN 101799760B CN 2010101176188 A CN2010101176188 A CN 2010101176188A CN 201010117618 A CN201010117618 A CN 201010117618A CN 101799760 B CN101799760 B CN 101799760B
- Authority
- CN
- China
- Prior art keywords
- target architecture
- source code
- parallel
- application
- definition
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 28
- 238000004891 communication Methods 0.000 claims description 18
- 230000001360 synchronised effect Effects 0.000 claims description 16
- 238000012546 transfer Methods 0.000 claims description 10
- 230000008901 benefit Effects 0.000 claims description 9
- 238000013507 mapping Methods 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 4
- 230000004888 barrier function Effects 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 claims description 2
- 230000005540 biological transmission Effects 0.000 abstract description 15
- 230000006870 function Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000013501 data transformation Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000003339 best practice Methods 0.000 description 2
- 238000005352 clarification Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013139 quantization Methods 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/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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
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)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了生成任意目标架构的并行单指令多数据代码的系统和方法,其中揭示了在数据传输、同步和SIMD操作这三个主要功能区域自动化生成并行SIMD本机源代码的技术。定义了注释标准,其独立于本机编译器,并与提供了数据传输、同步和SIMD操作的高层抽象的源到源编译器相结合,缓和了程序员以硬件指定的方式工作的需要,同时解决了并行SIMD计算环境中的效率以及可移植性的问题。
Description
技术领域
本发明的实施例一般涉及编译器。更具体地说,本发明的实施例涉及自动化生成用于任意目标架构的并行SIMD本机源代码(native source code)的技术。
背景技术
很多现代处理器支持单指令多数据(SIMD)扩展。SIMD表示在多个数据项上并行操作的单个指令。例如,“加(add)”SIMD指令可以并行加8个16比特值。这些指令通过在一个指令内完成多个操作,显著地提高了执行速度。SIMD指令的示例包括多媒体扩展(“MMX”)指令、SSE指令以及矢量化多媒体扩展(“VMX”)指令。
虽然计算机硬件已经支持多种形式的并行性很多年了,但公认的是,程序员不能一直非常有效地使用这些性能特征。这可能是因为缺少标准化、以及将非并行算法转换为并行架构的困难,所述困难是由于在处理新的计算架构的编程语言内缺乏足够的软件抽象(software abstraction)而导致的。典型地,供应方用独特的抽象和命名方案来实现其自己的并行编程版本。程序员不能非常有效地使用这些性能特征也可能是因为缺少计算机编程语言的支持,这是由于很多流行的语言是在并行性被广泛可用之前开发的(如C、C++),且致力于在单个机器中利用单个执行线程。新语言面对接受度的困难。没有广泛的用户基础,新语言(即使是专门为可移植并行性能有效性设计的)可能会变得不易于移植,执行地更慢,且比硬件指定的方法更阻碍编程者的效率。
发明内容
本发明的一个实施例包括用于生成用于并行计算架构的源代码的方法。所述方法一般可以包括接收根据预定义的注释标准注释的带注释的源代码。所述预定义的注释标准可被用来指定:(i)用于并行应用程序的目标架构;和(ii)用于当在目标架构上运行时执行的并行应用程序的一个或多个并行应用操作。可以从至少数据传输操作、同步操作以及单指令多数据(SIMD)操作中选择所述并行应用操作。所述方法也可以包括:解析带注释的源代码,以识别用于所述并行应用程序的目标架构、以及一个或多个并行应用操作;以及生成一个或多个标记,其中每个标记描述所述一个或多个并行应用操作之一。该方法可以还包括:从一个或多个标记生成并行应用源代码,其被配置为在目标架构上执行所述一个或多个并行应用操作。
本发明的另一个实施例包括计算机可读的存储介质,其包含程序,当运行时,该程序执行生成用于目标架构的并行SIMD源代码的操作。所述操作一般包括接收根据预定义的注释标准注释的带注释的源代码。所述预定义的注释标准可被用来指定:(i)用于并行应用程序的目标架构;和(ii)用于当在目标架构上运行时执行的并行应用程序的一个或多个并行应用操作。可以从至少数据传输操作、同步操作以及单指令多数据(SIMD)操作中选择所述并行应用操作。所述操作也可以包括:解析带注释的源代码,以识别用于所述并行应用程序的目标架构、以及一个或多个并行应用操作;以及生成一个或多个标记,其中每个标记描述所述一个或多个并行应用操作之一。该操作可以还包括:从一个或多个标记生成并行应用源代码,其被配置为在目标架构上执行所述一个或多个并行应用操作。
本发明的又一个实施例包括一种具有处理器和存储器的系统,所述存储器包含源到源编译器应用,当被所述处理器运行时,其被配置生成用于目标架构的源代码。所述编译器应用一般也被配置为接收根据预定义的注释标准注释的带注释的源代码。所述预定义的注释标准可被用来指定:(i)用于并行应用程序的目标架构;和(ii)用于当在目标架构上运行时执行的并行应用程序的一个或多个并行应用操作。可以从至少数据传输操作、同步操作以及单指令多数据(SIMD)操作中选择所述并行应用操作。所述编译器应用也可以被配置为:解析带注释的源代码,以识别用于所述并行应用程序的目标架构、以及一个或多个并行应用操作;以及生成一个或多个标记,其中每个标记描述所述一个或多个并行应用操作之一。该编译器应用也可以被配置为:从一个或多个标记生成并行应用源代码,其被配置为在目标架构上执行所述一个或多个并行应用操作。
附图说明
因此,获得并详细了解上述列举的本发明的特征、优点和目标的方式,一种对简要归纳如上的本发明更确切的描述可以参考附图中关于所述实施例而说明。
然而,需要注意的是,附图说明仅仅说明本发明的典型实施例,所以不应该认为其限制了它的范围,因为本发明对于其它同样有效的实施例也是认可的。
图1是说明根据本发明的一个实施例的在异类并行计算环境中执行的并行应用的框图。
图2是说明根据本发明的一个实施例的如何将带注释的并行应用源代码编译成用于各个目标架构的目标代码的框图。
图3说明根据本发明的一个实施例的示例的带注释的并行应用源文件。
图4是说明根据本发明的一个实施例的在异类并行计算环境中的父母-孩子通信和同步、以及对等方通信(peer communication)和同步的框图。
图5是说明根据本发明的一个实施例的生成用于目标架构的并行SIMD源代码的方法的流程图。
图6是说明根据本发明的一个实施例的生成用于目标架构的并行SIMD源代码的示例注释标准的表。
具体实施方式
本发明的实施例提供了自动生成并行SIMD本机源代码的技术。在一个实施例中,源到源编译器可以被配置为生成用于由为各种并行架构编译的并行应用程序执行的数据传输、同步和SIMD操作的机器指定代码。而且,在此描述的源到源编译器解决了效率和可移植性的问题。程序员利用注释标准,指定用于并行应用的数据传输、同步和SIMD操作,而不是以硬件指定的方式工作。这样做允许开发者指定特定并行架构、以及要在该架构上执行的操作两者。这使得程序员可以致力于应用的特定应用逻辑,而不是指定并行架构的特定机制。而且,代码可移植性显著地增加,这是因为,一旦所述应用被开发,则注释可以被修改,以生成能够由所述注释标准所描述的、用于任意特定并行架构的源代码。
在一个实施例中,所述源到源编译器接收利用预定义的注释标准注释的源代码。所述注释标准独立于由并行计算系统的不同节点使用的一组本机编译器(例如,用于x86处理器的一个编译器和用于Cell BE处理器的另一个编译器)。所述注释标准允许开发者指定作为并行应用的一部分、要执行什么传输、同步和SIMD操作,且所述源到源编译器生成用于特定的目标架构的合适的源代码。所述注释标准可以支持多种不同的语法、目标架构定义、代码块定义、共享的变量定义、数据传输功能、同步功能以及SIMD功能。虽然C++编程语言在此被用作示例,但本领域的普通技术人员应该意识到,在此描述的实施例可以适用于各种编程语言。例如,在此描述的实施例可以适用于解释型语言,其中,可以发生动态代码生成和及时编译。
更进一步,通过使所述带注释的源代码独立于本机编译器,也解决了标准化问题。本机编译器忽略作为注解的注释,并把带注释的源代码视为串行程序。所述源到源编译器生成代码,其随后可以以本机方式被编译为用于特定目标架构的并行应用。
此外,通过利用所述源到源编译器而生成用于不同架构的源代码,保持了在用于不同架构的源代码之间的一致性。例如,在为两个、三个或更多个并行系统编译器生成的代码中,数组大小、类型以及对齐方式(alignment)经常需要确切地一致。例如,对于Cell处理器,电源处理单元(PPU)和协处理单元(SPU)经常利用相同的数据工作,即使PPU代码是用PPU编译器编译的,而SPU代码是用SPU编译器编译的。保持这种一致性是错误的根源、以及程序员效率的损失。
下面,参考本发明的实施例。然而,应该理解,本发明不限于特定描述的实施例。相反,以下特征和元素的任意组合,不管是否与不同的实施例相关,都可以被考虑用于实现和实践本发明。而且,在各种实施例中,本发明提供了相对于当前技术的大量优势。然而,尽管本发明的实施例可以获得相对于其他可能的解决方案和/或当前技术的优势,但是,给定的实施例是否获得特定的优势并不是本发明的限制。因此,以下方面、特征、实施例和优势仅仅是说明性的,且并不能被视为对附加的权利要求的元素或限制,除非在权利要求中有明确说明。类似地,提到“本发明”不应该被理解成在此揭示的任意发明主题的泛化,也不应该认为是附加的权利要求的元素或限制,除非在权利要求中有明确说明。
本发明的一个实施例作为计算机系统使用的程序产品被实施。所述程序产品的程序定义了实施例的功能(包括在此描述的方法)且可以被多种计算机可读存储介质包含。说明性的计算机可读存储介质包括,但不局限于:(i)非可写存储介质(例如,计算机内的只读存储设备,如可被CD-ROM驱动器读取的CD-ROM磁盘),在其上永久存储信息;(ii)可写存储介质(例如,软盘驱动器或硬盘驱动器内的盘),其上存储了可变的信息。当承载指向本发明的功能的计算机可读指令时,这些计算机可读存储介质是本发明的实施例。其他介质包括通过其将信息传送到计算机的通信介质,如通过计算机或电话网络,包括无线通信网络。后者的实施例具体地包括向/从因特网和其他网络传输信息。当承载指向本发明的功能的计算机可读指令时,这些通信介质是本发明的实施例。从广义上说,计算机可读存储介质和通信介质在此可以被称为计算机可读介质。
一般地,实施本发明的实施例所要执行的例程可能是操作系统或指定的应用、部件、程序、模块、对象或指令序列的一部分。本发明的所述计算机程序典型地可以由本地计算机翻译成机器可读格式,然后是可执行指令。另外,程序由变量和数据结构组成,其可以驻留在程序本地或在存储器或存储设备上。再者,下文描述的各程序可能会基于所述应用进行标识,因为该应用在本发明的指定实施例中实现这些程序。然而,应该理解,以下任何特定程序的命名法都仅仅是为了方便使用,因此本发明不应该受限于仅仅使用在这些命名法所标识和/或暗示的任何指定应用中。
图1是说明根据本发明的一个实施例的在异类并行计算环境100中执行的并行应用123、145、146的框图。如图所示,异类并行计算环境100包括计算机120、140和网络160。在一个实施例中,在环境100中图解的计算机系统可以包括现有计算机系统,如桌面计算机、服务器计算机、膝上型计算机、平板计算机等等。然而,图1中图解的计算环境100仅仅是一种计算环境的示例。本发明的实施例可以利用其他环境实施,不管所述计算机系统是否是复杂的多用户计算系统(例如通过高速网络连接的单独计算机的集群)、单用户工作站、还是缺少非易失性存储器的网络设备。而且,图1中图解和在此描述的软件应用可以通过利用在诸如桌面计算机、服务器计算机、膝上型计算机、平板计算机等的现有计算机系统上运行的计算机软件应用来实施。然而,在此描述的软件应用不局限于任何当前存在的计算环境或编程语言,在它们变得可用时,还可能适合于利用新的计算系统。
如图所示,每个计算机120、140包括处理器121、141、142,其从存储器122、144和任意存储设备(如,硬盘驱动器、闪存、或计算机可读存储介质,如CD或DVD-ROM)中获取指令和数据。每个处理器121、141、142都是可编程逻辑器件,在计算机内执行所有指令、逻辑运算和数学处理。每个存储器存储用于由各个计算机120、140使用的应用程序和数据。存储器包括硬盘驱动器、闪存驱动器、光学介质等等。所述计算机120、140与网络160可操作地连接。存储器122、144包括并行可执行程序(executable)123、145、146、共享的缓冲器147、以及操作系统(未显示)。操作系统是用于管理计算机120、140的操作的软件。操作系统的示例包括UNIX、微软操作系统版本以及操作系统的发布版。(注意:Linux是Linus Torvalds在美国和其他国家的商标。)
在一个实施例中,异类并行应用以并行可执行程序123、145、146的形式在异类目标架构上运行。如图1所示的示例,异类目标架构包括两个计算机系统120、140,其在网络160上通信以执行并行任务123、145、146。在这个示例中,特别地,x86计算机120以x86目标架构为特征,而Cell BE计算机141以Cell PPU和Cell SPU目标架构为特征。
在这个示例中,Cell BE计算机141包括电源处理器元件(PPE),其具有处理器(PPU)和它的L1和L2高速缓存。所述Cell BE计算机141也包括多个协处理元件(SPE),其每个都提供了协处理单元(SPU)和本地存储装置、以及高带宽内部元件互联总线(EIB)。示例中未显示的其他目标架构可以广义地考虑在内。
说明性地,x86处理器121执行所述x86并行可执行程序123,并通过网络160与Cell PPU 141通信,Cell PPU 141执行Cell PPU可执行程序145。所述Cell PPU 141和Cell SPU 142使用共享的缓冲器147,并分别执行CellPPU并行可执行程序145和Cell SPU并行可执行程序146,其通过元件互联总线143通信。
图2是说明根据本发明的一个实施例的将带注释的并行应用源代码210编译成用于给定的目标架构的目标代码的数据流程的框图。说明性地,自动化并行代码生成器(APCG)源到源编译器220接收带注释的并行应用源代码210。在一个实施例中,利用预定义的注释标准注释所述带注释的并行应用源代码210。利用所述预定义的注释标准,用户可以指定生成源代码的期望环境。也就是,所述注释标准允许开发者为给定的目标架构描述层级。例如,系统可以包括x86处理器,其被多个加速处理器(作为子处理器(children))(例如,矢量处理器的集合)所支持,并被组织成父子层级。
所述APCG源到源编译器220可以(根据预定义的注释标准)评估带注释的并行应用源代码210中的注释,并生成用于注释所描述的目标架构的本机并行应用源代码。在图2所示的示例中,目标架构是x86,Cell PPU以及Cell SPU。当然,这个示例中没有显示的多种目标架构可以被广泛地考虑在内。而且,所述APCG源到源编译器生成合适的最佳实践(best-practice)的本机代码。所得到的并行应用源代码230、232、234还可以由程序员开发、或利用本机编译器立即编译。如所示出的,本机并行应用源代码230、232、234分别由本机编译器240、242、244接收,本机编译器240、242、244生成用于各个目标架构的各个目标代码250、252和254。
图3说明根据本发明的一个实施例的带注释的并行应用源文件300的示例。说明性地,注释以C++常规的单行注释记号“//APCG”(双斜线)的方式出现。解释型注解出现在C++常规的长注解记号“/*...*/”(斜线星号)内,以将解释型注解区别于注释。注释320用于定义目标架构,针对其,源到源编译器生成源代码。在这个示例中,每个定义指定名称、父母名称、通信协议和目标架构类型。说明性地,所述三个定义的架构包括目标Cell SPU架构“CHILD”,其利用libspe2通信协议从“PARENT”连接;目标Cell PPU架构PARENT,其利用TCP协议从“HOST”连接;以及目标x86架构HOST。注释340、352、360、380被用于划定代码块。每个块提供了目标指向相应块的架构的连续(contiguous)代码区域。例如,在340,块被命名为“test(测试)”,且其目标指向CHILD,其允许最大6个执行线程。类似地,注释360定义用于PARENT的程序“test2”,其允许最大1个执行线程,而注释380定义用于HOST的程序“test3”,其也允许最大1个执行线程。所述源到源编译器利用注释320、340来生成三个单独的源代码文件(包含代码块),所指定的目标架构中的每个使用一个(源代码文件)。
注释342被用于定义共享的变量。所述源到源编译器利用共享的变量定义,来生成指定的目标架构本地的相应定义。在这个示例中,每个定义指定变量名、变量类型和数组大小(array size)。例如,注释342声明了类型为“vfloat4”的共享变量“A”,其数组大小为128。PARENT根据指定的大小(在这个示例中为数组大小128)为每个CHILD线程(在这个示例中最大为6个CHILD线程)保留存储区域。SIMD操作注释344和348执行SIMD操作,如矢量splat操作(即,将值复制到矢量寄存器的所有元素)和矢量加法。数据传送注释346、350利用在注释320中指定的libspe2协议,PUT(放置)和GET(获取)所述矢量变量A。
所述源到源编译器也生成指定的目标架构本地的同步代码。图4是说明根据本发明的一个实施例的在异类并行计算环境中的父母-孩子通信和同步、以及对等方通信和同步的框图。在这个示例中,目标架构定义注释定义了x86-Cell-PPU-Cell-SPU、“HOST-PARENT-CHILD”目标架构。HOST(主机)420利用TCP 430与PARENT(父母)440通信,而PARENT 440利用libspe2450与CHILD(孩子)460通信。对等方通信和同步发生在CHILD线程之间;父母-孩子通信和同步发生在PARENT和CHILD之间;而多级通信和同步发生在PARENT之间。由源到源编译器分别利用用于通信和同步的注释,来生成用于通信和同步的源代码。
图5说明是根据本发明的一个实施例的生成用于目标架构的并行SIMD源代码的方法500的流程图。为了说明,将方法500与图2的系统结合描述。然而,本领域的技术人员应该理解,被配置为以任何顺序执行方法500的步骤的任何系统都在本发明的范围内。
如图所示,方法500由步骤510开始,其中,源到源编译器接收根据预定义的注释标准注释的并行SIMD源代码。在步骤520,源到源编译器评估所述并行SIMD源代码,以创建多个注释标记(annotation token)。标记一般指的是编程语言中的最小词法单元。在一个实施例中,源到源编译器将注释转换为表示用于与在注释中指定的动作相对应的源代码的程序结构的一组标记。而且,可以基于注释所指定的目标架构生成所述标记。根据一个实施例,在步骤530,源到源编译器解析多个注释,并确定执行给定的标记所指定的动作所需的合适源代码,所述动作例如为:建立将要传送的变量的内部表示,或将主源文件分成多个功能块,或用于由APCG注释所指定的目标架构的其他数据传输、同步和SIMD操作。
在步骤540,源到源编译器生成用于目标架构的本机并行SIMD源代码。例如,源到源编译器可以利用以由APCG注释所指定的目标架构的格式构成的数据传输、同步和SIMD操作,来创建多个源文件作为输出。说明性地,给定注释标记和目标架构,所述源到源编译器可以使用映射表,来确定用于执行目标架构中的注释相对应的本地语法和数据类型。所述源到源编译器利用注释标记和映射表查找,来生成用于数据传输、同步和SIMD操作的本机源代码。在步骤540之后,方法500终止。
如上所述,源到源编译器接收利用预定义的注释标准注释的源代码。图6是说明根据本发明的一个实施例的生成用于目标架构的并行SIMD源代码的示例注释标准的表。如上所述,注释标准允许用户指定针对其生成源代码的目标架构。此外,注释标准允许用户以独立于编译器的方式指定数据传输功能、同步功能和SIMD功能。再者,注释标准允许源到源编译器生成用于多个不同的目标架构的本机代码,以执行数据传输、同步和SIMD操作。说明性地,在块604,图6显示了用于具有Cell PPU架构的目标“PARENT”的定义,该目标“PARENT”利用TCP作为通信协议与“HOST”连接。代码块定义604的示例为CHILD定义了代码块“test”的开始与结束,允许最大数目的6个线程。共享的变量定义606为每个CHILD线程、最多6个CHILD线程保留大小为128的vfloat4数组。
数据传输功能块608包括PUT、GET、SCATTER和GATHER操作的示例。一般地,SCATTER操作等价于“PUT到所有线程”操作,但具有改进的性能。类似地,GATHER操作等价于“从所有线程GET”操作,但具有改进的性能。在本发明的一个实施例中,考虑到PUT、GET、SCATTER和GATHER操作还可以附加地允许指定通信协议(例如,“//APCG PUT(A,协议名称)”)。另外,数据传输和同步相互牵连。有时,数据传输与同步相结合(阻塞通信),而其余时候,同步被单独执行。同步功能块610提供WAIT(等待)操作的示例,其发送消息并等待直到所有对等方(peer)都已经达到它们执行中的这个BARRIER(阻碍)。最后,SIMD功能块612提供SIMD(例如,矢量)操作的示例,用于通过暗示循环的加、减、乘、乘加、计算平方根、以及splat单个矢量变量和矢量变量数组等。在本发明的一个实施例中,考虑到对矢量变量数组的SIMD操作可以伴随有在所述矢量变量的所有(或一些)数据元素上的暗示循环。而且,用户可以指定“simd_add(A,B,pattern_array)”,其中pattern_array是样式数组,其表示将要处理数组的哪些元素。所有前述的操作以预定义的注释标准中的通用形式表达。在一个实施例中,源到源编译器在输出的源代码中将这些操作转译成合适的本机语法和数据类型。
有利地,本发明的实施例提供了被配置为生成用于数据传输、同步和SIMD操作的机器指定代码的源到源编译器。在一个实施例中,所述源到源编译器接收利用预定义的注释标准注释的源代码。所述注释标准独立于本机编译器,且支持目标架构定义、代码块定义、共享变量定义、数据传输功能、同步功能和SIMD功能。当然,在此描述的实施例是为了说明而不是限制本发明,且其他实施例可以被广泛地考虑在内。本领域的技术人员应该意识到,例如,其他编程语言,像C和Java,可以被本发明的实施例所支持。此外,考虑到预定义注释标准,在数据传输、同步和SIMD操作的区域内的其他句法、语法以及操作等都被广义地考虑在内。最后,本发明的实施例可以支持任意异类并行架构。
尽管前文是针对本发明的一些实施例,但本发明其余的和进一步的实施例可以在不脱离本发明的基本范围的基础上设计并实现,而本发明的范围由所附权利要求确定。
Claims (15)
1.一种用于生成用于并行计算架构的源代码的计算机实现的方法,包括:
接收并行应用程序的源代码,其中所述源代码为基于用户的输入根据预定义的注释标准进行注释的;
解析所述源代码,基于所述接收的源代码和所述预定义的注释标准识别:(i)用于所述并行应用程序的目标架构;和(ii)用于当在该目标架构上运行时执行的所述并行应用程序的一个或多个并行应用操作,并且,其中,从至少数据传输操作、同步操作以及单指令多数据操作中选择所述一个或多个并行应用操作,所述预定义的注释标准独立于目标架构;
对于识别出来的目标架构,基于识别出来的一个或多个并行应用操作以及预定义的一组映射,生成对于该识别出来的目标架构的本机并行应用程序源代码,其中所述映射是在识别出来的一个或多个并行应用操作和相应的本地语法之间的映射。
2.如权利要求1所述的方法,其中,该目标架构指定处理元件的层级,所述处理元件包括至少一个通用处理元件和一个专用处理元件,该专用处理元件被配置为支持所述通用处理元件。
3.如权利要求1所述的方法,还包括:经由可用于目标架构的一个或多个本机编译器,编译所生成的并行应用源代码,以创建所述并行应用。
4.如权利要求1所述的方法,其中,所述预定义的注释标准包括用于指定目标架构定义的语法,其中,目标架构定义指定用于目标架构的两个或更多个处理元件的目标名称、架构类型、父母名称、以及通信协议。
5.如权利要求1所述的方法,其中,所述预定义的注释标准包括用于指定代码块定义的语法,其中,该代码块定义指定目标名称、代码块名称以及用来执行所述代码块的最大线程数。
6.如权利要求1所述的方法,其中,所述预定义的注释标准包括用于指定共享的变量定义的语法,其中,所述共享的变量定义指定所述共享的变量的变量名称、变量类型以及数组大小。
7.如权利要求1所述的方法,其中,所述并行应用操作包括数据传输操作和同步操作之一,其中,数据传输操作指定放置操作和获取操作之一,且其中,同步操作指定等待操作和障碍操作之一。
8.如权利要求1所述的方法,其中,并行应用操作包括从用于单个矢量变量的加、减、乘、splat和开方操作中的至少一个选择的单指令多数据操作。
9.一种用于生成用于并行计算机构的源代码的装置,包括:
用于接收并行应用程序的源代码的模块,其中,所述源代码为基于用户的输入根据预定义的注释标准进行注释的;
用于解析所述源代码,基于所述接收的源代码和所述预定义的注释标准识别的模块,该识别包括:(i)用于所述并行应用程序的目标架构;和(ii)用于当在该目标架构上运行时执行的所述并行应用程序的一个或多个并行应用操作,并且,其中,从至少数据传输操作、同步操作以及单指令多数据操作中选择所述一个或多个并行应用操作,所述预定义的注释标准独立于目标架构;
用于对于识别出来的目标架构,基于识别出来的一个或多个并行应用操作以及预定义的一组映射,生成对于该识别出来的目标架构的本机并行应用程序源代码的模块,其中所述映射是在识别出来的一个或多个并行应用操作和相应的本地语法之间的映射。
10.如权利要求9所述的装置,其中,该装置还包括:用于经由可用于目标架构的一个或多个本机编译器,编译所生成的并行应用源代码,以创建所述并行应用的模块。
11.如权利要求9所述的装置,其中,所述预定义的注释标准包括用于指定目标架构定义的语法,其中,目标架构定义指定用于目标架构的两个或更多个处理元件的目标名称、架构类型、父母名称、以及通信协议。
12.如权利要求9所述的装置,其中,所述预定义的注释标准包括用于指定代码块定义的语法,其中,该代码块定义指定目标名称、代码块名称以及用来执行所述代码块的最大线程数。
13.如权利要求9所述的装置,其中,所述预定义的注释标准包括用于指定共享的变量定义的语法,其中,所述共享的变量定义指定所述共享的变量的变量名称、变量类型以及数组大小。
14.如权利要求9所述的装置,其中,所述并行应用操作包括数据传输操作和同步操作之一,其中,数据传输操作指定放置操作和获取操作之一,且其中,同步操作指定等待操作和障碍操作之一。
15.如权利要求9所述的装置,其中,并行应用操作包括从用于单个矢量变量的加、减、乘、splat和开方操作中的至少一个选择的单指令多数据操作。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/368,424 US8418155B2 (en) | 2009-02-10 | 2009-02-10 | Generating parallel SIMD code for an arbitrary target architecture |
US12/368,424 | 2009-02-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101799760A CN101799760A (zh) | 2010-08-11 |
CN101799760B true CN101799760B (zh) | 2013-04-24 |
Family
ID=42541439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101176188A Expired - Fee Related CN101799760B (zh) | 2009-02-10 | 2010-02-10 | 生成任意目标架构的并行单指令多数据代码的系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8418155B2 (zh) |
JP (1) | JP5551939B2 (zh) |
CN (1) | CN101799760B (zh) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9298427B2 (en) | 2010-01-06 | 2016-03-29 | Microsoft Technology Licensing, Llc. | Creating inferred symbols from code usage |
US8756590B2 (en) * | 2010-06-22 | 2014-06-17 | Microsoft Corporation | Binding data parallel device source code |
US9841958B2 (en) * | 2010-12-23 | 2017-12-12 | Microsoft Technology Licensing, Llc. | Extensible data parallel semantics |
WO2012164439A1 (en) * | 2011-06-02 | 2012-12-06 | International Business Machines Corporation | Handling cross-thread method calls |
US9436469B2 (en) * | 2011-12-15 | 2016-09-06 | Intel Corporation | Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table |
US10216500B2 (en) * | 2012-02-10 | 2019-02-26 | Oracle International Corporation | Method and apparatus for synchronization annotation |
KR101893796B1 (ko) | 2012-08-16 | 2018-10-04 | 삼성전자주식회사 | 동적 데이터 구성을 위한 방법 및 장치 |
US9134974B2 (en) * | 2012-11-12 | 2015-09-15 | Signalogic, Inc. | Source code separation and generation for heterogeneous central processing unit (CPU) computational devices |
US9110672B2 (en) | 2013-11-07 | 2015-08-18 | International Business Machines Corporation | Compiler generation of thunking code |
CN103631632B (zh) * | 2013-11-29 | 2017-08-04 | 华为技术有限公司 | 移植方法及源到源编译器 |
CN104035767A (zh) * | 2014-05-30 | 2014-09-10 | 中原智慧城市设计研究院有限公司 | 一种提高计算机并行计算编程自动化程度的方法 |
US10140104B2 (en) | 2015-04-14 | 2018-11-27 | Micron Technology, Inc. | Target architecture determination |
CN107851002A (zh) * | 2015-08-31 | 2018-03-27 | 华为技术有限公司 | 一种代码编译方法及代码编译器 |
US20170168792A1 (en) * | 2015-12-15 | 2017-06-15 | Futurewei Technologies, Inc. | Space and time aware organization and isolation of components in real time systems |
CN107305527B (zh) * | 2016-04-22 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 代码文件的处理方法和装置 |
CN106325860B (zh) * | 2016-08-16 | 2019-11-12 | 北京控制工程研究所 | 一种航天嵌入式软件接口数据的自动化维护方法 |
US10474461B2 (en) | 2016-09-22 | 2019-11-12 | Qualcomm Incorporated | Instruction-based synchronization of operations including at least one SIMD scatter operation |
CN107203406B (zh) * | 2017-06-26 | 2020-11-06 | 西安微电子技术研究所 | 一种面向分布式存储结构的处理方法 |
US11513840B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor |
US11256522B2 (en) | 2019-11-22 | 2022-02-22 | Advanced Micro Devices, Inc. | Loader and runtime operations for heterogeneous code objects |
US11467812B2 (en) * | 2019-11-22 | 2022-10-11 | Advanced Micro Devices, Inc. | Compiler operations for heterogeneous code objects |
JP7295466B2 (ja) * | 2019-12-02 | 2023-06-21 | 富士通株式会社 | クラス生成プログラム及びクラス生成方法 |
CN113391842A (zh) | 2020-03-13 | 2021-09-14 | 华为技术有限公司 | 一种单指令多数据simd指令的生成、处理方法以及相关设备 |
US11354267B1 (en) * | 2021-01-11 | 2022-06-07 | Lilac Cloud, Inc. | Compiler for a command-aware hardware architecture |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04209029A (ja) * | 1990-12-04 | 1992-07-30 | Fujitsu Ltd | 並列処理プログラム翻訳処理装置 |
CA2078315A1 (en) * | 1991-09-20 | 1993-03-21 | Christopher L. Reeve | Parallel processing apparatus and method for utilizing tiling |
JPH05257709A (ja) * | 1992-03-16 | 1993-10-08 | Hitachi Ltd | 並列化判別方法およびそれを用いた並列化支援方法 |
US5774728A (en) * | 1995-12-27 | 1998-06-30 | International Business Machines Corporation | Method and system for compiling sections of a computer program for multiple execution environments |
US5815720A (en) * | 1996-03-15 | 1998-09-29 | Institute For The Development Of Emerging Architectures, L.L.C. | Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system |
JPH11316688A (ja) * | 1998-05-06 | 1999-11-16 | Mitsubishi Electric Corp | プログラミング言語処理装置、プログラミング言語処理方法および記録媒体 |
JP2001147819A (ja) * | 1999-11-19 | 2001-05-29 | Fujitsu Ltd | 最適化装置および記録媒体 |
US6738967B1 (en) * | 2000-03-14 | 2004-05-18 | Microsoft Corporation | Compiling for multiple virtual machines targeting different processor architectures |
US7398376B2 (en) * | 2001-03-23 | 2008-07-08 | International Business Machines Corporation | Instructions for ordering execution in pipelined processes |
US7707544B2 (en) * | 2002-12-05 | 2010-04-27 | Bea Systems, Inc. | System and method for generating and reusing software application code with source definition files |
US7707564B2 (en) * | 2003-02-26 | 2010-04-27 | Bea Systems, Inc. | Systems and methods for creating network-based software services using source code annotations |
US7434213B1 (en) * | 2004-03-31 | 2008-10-07 | Sun Microsystems, Inc. | Portable executable source code representations |
US7475392B2 (en) * | 2004-06-07 | 2009-01-06 | International Business Machines Corporation | SIMD code generation for loops with mixed data lengths |
US7367026B2 (en) * | 2004-06-07 | 2008-04-29 | International Business Machines Corporation | Framework for integrated intra- and inter-loop aggregation of contiguous memory accesses for SIMD vectorization |
US7386842B2 (en) * | 2004-06-07 | 2008-06-10 | International Business Machines Corporation | Efficient data reorganization to satisfy data alignment constraints |
US20060123401A1 (en) * | 2004-12-02 | 2006-06-08 | International Business Machines Corporation | Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system |
US7966602B1 (en) * | 2006-03-16 | 2011-06-21 | Oracle America, Inc. | Incremental modification detector, and methods, systems, and apparatus for implementing the same |
US8201159B2 (en) * | 2006-08-04 | 2012-06-12 | International Business Machines Corporation | Method and apparatus for generating data parallel select operations in a pervasively data parallel system |
US7962906B2 (en) * | 2007-03-15 | 2011-06-14 | International Business Machines Corporation | Compiler method for employing multiple autonomous synergistic processors to simultaneously operate on longer vectors of data |
-
2009
- 2009-02-10 US US12/368,424 patent/US8418155B2/en not_active Expired - Fee Related
-
2010
- 2010-01-14 JP JP2010005604A patent/JP5551939B2/ja not_active Expired - Fee Related
- 2010-02-10 CN CN2010101176188A patent/CN101799760B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20100205580A1 (en) | 2010-08-12 |
CN101799760A (zh) | 2010-08-11 |
JP5551939B2 (ja) | 2014-07-16 |
US8418155B2 (en) | 2013-04-09 |
JP2010186468A (ja) | 2010-08-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101799760B (zh) | 生成任意目标架构的并行单指令多数据代码的系统和方法 | |
US7941791B2 (en) | Programming environment for heterogeneous processor resource integration | |
US8832672B2 (en) | Ensuring register availability for dynamic binary optimization | |
US8527971B2 (en) | Parallel program generation method | |
CN101681294B (zh) | 用于存储器事务分组的方法和系统 | |
TWI806550B (zh) | 處理器操作方法、相關電腦系統、及非暫時性電腦可存取儲存媒體 | |
US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
US11900113B2 (en) | Data flow processing method and related device | |
CN103858099A (zh) | 用于在异构计算机上编译和运行高级程序的技术 | |
US7941790B2 (en) | Data processing apparatus, system and method | |
US9645802B2 (en) | Technique for grouping instructions into independent strands | |
CN103729235A (zh) | Java虚拟机的编译方法和Java虚拟机 | |
Li et al. | Warp-consolidation: A novel execution model for gpus | |
Ziogas et al. | Productivity, portability, performance: Data-centric Python | |
JP2021501947A (ja) | メモリ・ネットワーク・プロセッサ | |
Metcalf | The seven ages of fortran | |
Ahmed et al. | Managing genomic variant calling workflows with Swift/T | |
US11573777B2 (en) | Method and apparatus for enabling autonomous acceleration of dataflow AI applications | |
US10922061B2 (en) | Information processing apparatus, information processing method and storage medium storing program related to instruction selection of a compiler | |
WO2020142195A1 (en) | Techniques for scheduling instructions in compiling source code | |
Dardaillon et al. | Compilation for heterogeneous SoCs: Bridging the gap between software and target-specific mechanisms | |
CN106250200A (zh) | 一种用于计算机划分至少一个软件应用段的执行方法 | |
WO2023183139A1 (en) | Schedule instructions of a program of data flows for execution in tiles of a coarse grained reconfigurable array | |
Mengting et al. | Minimizing code size via page selection optimization on partitioned memory architectures | |
Bai et al. | Packing/unpacking using MPI user-defined datatypes for efficient data redistribution |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130424 Termination date: 20190210 |