CN101937367A - Mpi源代码程序到基于mpi线程的程序的自动转换 - Google Patents

Mpi源代码程序到基于mpi线程的程序的自动转换 Download PDF

Info

Publication number
CN101937367A
CN101937367A CN2010102212961A CN201010221296A CN101937367A CN 101937367 A CN101937367 A CN 101937367A CN 2010102212961 A CN2010102212961 A CN 2010102212961A CN 201010221296 A CN201010221296 A CN 201010221296A CN 101937367 A CN101937367 A CN 101937367A
Authority
CN
China
Prior art keywords
thread
mpi
program
source code
situation
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
CN2010102212961A
Other languages
English (en)
Other versions
CN101937367B (zh
Inventor
A·V·索巴洛夫
R·F·范德韦恩加特
S·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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of CN101937367A publication Critical patent/CN101937367A/zh
Application granted granted Critical
Publication of CN101937367B publication Critical patent/CN101937367B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F8/457Communication
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

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)

Abstract

一种方法、系统和包含指令的计算机程序产品,用于将MPI源代码程序自动地转换为基于MPI线程的程序。响应于MPI源代码程序的形式的输入和命令,转换器将所述MPI源代码程序的全局变量声明为线程私有变量,以创建用于第一线程的第一私有变量和用于第二线程的第二私有变量。识别用于支持在基于MPI线程的程序的执行期间将进程转换为线程的库,并且使用所述识别的库建立所述基于MPI线程的程序的可执行版本。所述识别的库可以包括用于以下操作的代码:在基于MPI线程的程序执行时识别新进程的实例化,并且作为响应,使得用于基于MPI线程的程序的对应线程被实例化。

Description

MPI源代码程序到基于MPI线程的程序的自动转换
版权声明
本文包含的内容是受到版权保护的。当专利公开出现在专利商标局的专利文件或记录中时,版权所有者不反对任何人复制本专利公开,但是在其它情况下保留对版权的所有权利。
技术领域
本公开总体上涉及将在消息传递基础结构中运行的计算机程序的自动转换。
背景技术
许多计算问题可以被细分为独立的或松散依赖的任务,这些任务可以分布在一组处理器或系统中并且可以并行地执行。该技术通常允许比在由单个处理器或系统执行所有任务时更快地解决主要问题。有时,处理时间可以与在子任务上工作的处理器或系统的数量成比例地降低。除了当需要与其它任务交换数据时,每个进程可以独立地计算。
可以根据需要,通过在协作的处理器和系统之间发送消息来协调所述处理器和系统。消息还可以用于分发工作以及收集结果。对问题的一些划分和分解会极大地需要消息传递基础结构,或者通过发送和接收大量的消息,或者通过在消息内传输大量的数据。
可以将消息通过许多不同的通信信道或“结构(fabric)”从一个进程传输到另一个进程。例如,在同一物理机器上执行的进程能够使用多处理器机器上的共享存储器或点对点处理器互连有效地进行通信。在不同机器上的进程可以通过高速网络进行通信,例如:
Figure BSA00000182338600011
(InfiniBand贸易协会的注册商标)、
Figure BSA00000182338600012
(Myricom公司(Arcadia,California)的注册商标)、可缩放相干接口(“SCI”)、或由Quadrics有限公司(Bristol,United Kingdom)提供的QSNet。这些网络可以提供自然操作模式(native operational mode)以及仿真模式(emulation mode),自然操作模式暴露可从结构获得的所有特征,仿真模式允许由遗留软件(legacy software)使用网络。进程还可以经由传统网络(例如以太网)来通信。
可以定义一组标准的消息传递函数,并且可以提供库以在每种类型的结构上执行标准函数。消息传递接口(“MPI”)是定义基本应用编程接口(API)的工业标准,用于在消息传递方面对分布式存储器和共享存储器系统进行编程。由MPI论坛的成员定义了MPI标准(参见MPI:“A Message-Passing Interface Standard”(2.1版,消息传递接口论坛,2008年6月23日),其可从xwwwx.mpi-forum.org/docs/获得,其中,在URL中用“xwwwx”替换了“www”以避免从该文档内的有效链接)。MPI(或类似的)库可以提供在一个或多个结构上的标准函数。
在进程内的多个线程有时用于共享资源,例如存储器,这具有以下优点:线程不需要使用消息传递机制来进行通信。线程在利用多处理器系统中的不同处理器核心方面特别有用。多处理器系统中的操作系统可以在运行于不同处理器核心上的线程之间分配任务,并且可以利用对于线程可行的数据共享,所述线程运行在公共地址空间内,并且在多处理器环境内有处理器互连可用。
但是,在MPI环境中,在一个进程内的多个线程需要遵循特定的实现技术。在MPI标准下,每个MPI进程通常被映射到唯一的操作系统进程。进程的地址空间仅可以由另一个进程通过调用MPI库函数来访问。如在MPI-2规范的12.4节“MPI和线程”中所指出的,在进程内的每个线程可以发出MPI调用;但是,线程不是独立可寻址的,因为在发送或接收调用中的参数识别进程而不是线程。发送到一进程的消息可以由该进程中的任何线程接收。进程具有多线程的事实不影响进程的外部接口。
为了遵守MPI标准,如在MPI-2规范的12.4节“MPI和线程”中所规定的,适应线程的实现必须确保所有MPI调用是线程安全的并且阻塞MPI调用仅阻塞调用线程,允许其它线程执行,如果有的话。但是,为了满足该标准,需要使用例如允许一次仅由一个线程进行访问的互斥原语(primitive)来保护由发出MPI调用的线程使用的静态和全局变量。适应线程的实现通常需要由程序员使用例如Posix线程这样的技术或根据混合的MPI/OpenMP标准来写源代码程序。这些复杂的编程模式(programing paradigm)增加了程序复杂性,并且会降低整体的程序性能。这种实现将抵销使用线程的多个优点中的一个优点,线程可以使用静态和全局变量进行通信,而没有通过共享存储器机制发送消息的开销。
附图说明
图1示出了在使用共享存储器段的MPI基础结构中运行的进程之间的数据传输。
图2说明了根据本发明的一个实施例的、在转换为线程的进程之间的数据传输。
图3是示出了根据本发明的一个实施例的、MPI源代码程序到基于MPI线程的程序的转换器的操作的流程图。
图4是根据本发明的一个实施例的、图3的转换器的操作的流程图。
图5是描述了一个适当的数据处理环境的框图,其中,可以实现本发明的示例性实施例的某些方面。
具体实施方式
本发明的实施例包括用于将MPI源代码程序自动地转换为基于MPI线程的程序(MPI thread-based program)的方案。基于MPI线程的程序可用在不损害利用其它MPI功能的能力的情况下,利用线程的更快的数据传输能力。此外,通过将非线程化的MPI程序自动地转换为基于MPI线程的程序,可以在程序员不参与的情况下,自动地转换在此之前不能利用多处理器环境的许多遗留的MPI程序。该自动转换可以使得公司能够自动地并且便宜地将它们的MPI源代码程序库存移植到多处理器环境。
响应于MPI源代码程序形式的输入和命令,转换器将所述MPI源代码程序的全局变量声明为线程私有变量,以创建用于第一线程的第一私有变量和用于第二线程的第二私有变量。识别用于支持在基于MPI线程的程序的执行期间将进程转换为线程的库,并且使用所述识别的库建立所述基于MPI线程的程序的可执行版本。所述识别的库可以包括用于以下操作的代码:当基于MPI线程的程序执行时识别新进程的实例化,并且作为响应,使得用于基于MPI线程的程序的对应线程被实例化。可以通过将与全局变量相对应的线程的相应私有变量的内容直接提供给其它线程,从而将数据从一个线程传输到另一个线程。该数据传输不使用共享存储器段在线程之间传输所述数据。
图1示出了在使用共享存储器段的MPI基础结构中运行的进程之间的数据传输。在通常的实现中,MPI程序实例化n个进程0到n-1,在图1中显示为进程110、120和130。这些进程中的每一个具有其各自的地址空间,进程110具有进程地址空间112,进程120具有进程地址空间122,并且进程130具有进程地址空间132。为了将数据102从进程110传输到进程120,必须由进程110将数据102从进程地址空间112传输到共享存储器段140,然后必须由进程120将数据102从共享存储器段140复制到进程地址空间122。这种数据传输操作需要两个存储器复制操作。
共享存储器段140在进程之间被共享,并且可以是更大的主存储器的一部分,由不同进程对该部分的访问被协调。可以使用进程间通信来控制对共享存储器140的访问,其中,一个进程在随机存取存储器中创建其它进程可以访问的区域;或者可以通过使用虚拟存储器映射,将对通常是一段数据的多个副本的访问指引到单个实例来控制对共享存储器140的访问。可以由例如操作系统和/或虚拟化软件这样的资源来提供对共享存储器140的协调的访问。
图2示出了根据本发明的一个实施例的、在转换为线程的进程之间的数据传输。n个进程0到n-1被实例化为公共进程地址空间250内的线程0到n-1。线程210、220和230中的每一个具有各自的一组私有变量,其中,线程210具有私有变量212,线程220具有私有变量222,线程230具有私有变量232。为了完成将数据102从线程210传输到线程220,可以将数据102从私有变量212内的地址直接传输到私有变量222内的地址。可以直接地来执行该数据传输,而不是间接地通过共享存储器段(例如图1的共享存储器段140)来进行,这是因为在公共进程地址空间250内的地址由线程210、220和230共享。执行直接传输而不是需要两个复制操作直接增加了程序的性能。
图3是示出了根据本发明的一个实施例的、MPI源代码程序到可执行的基于MPI线程的程序的转换器的操作的流程图。转换器360将MPI源代码程序362和命令364作为输入,并且提供可执行的基于MPI线程的程序366作为输出。命令364可以是例如到转换器360的、将基于MPI源代码的程序编译为基于MPI线程的程序的命令。例如,假设用如下命令来调用编译器以编译源代码程序:test.c $ mpicc-o test_mpi_process test.c。在响应于该命令编译完test.c之后,输出程序test_mpi_process将作为基于进程的传统MPI应用来执行。相反,用类似于如下形式的命令调用本发明的转换器以编译源代码程序:test.c:$ mpicc-mpi_on_threads-o test_test_mpi thread test.c。命令中的-mpi_on_threads这一部分将命令提供给编译器以产生输出程序test_mpi_thread作为可执行的基于MPI线程的程序。
响应于命令364,转换器360将MPI源代码程序的全局变量声明为线程私有变量,以创建用于第一线程的第一私有变量和用于第二线程的第二私有变量。如本文所使用的,术语“全局变量”用于描述在进程内具有全局范围的变量,例如被声明为全局或静态变量的变量。当基于MPI线程的程序366被执行时,可以通过将与全局变量相对应的线程的相应私有变量的内容直接提供给其它线程,将数据从一个线程传输到另一个线程。这种数据传输不使用共享存储器段在线程之间传输数据。基于MPI线程的程序366可以在不损害利用其它MPI功能的能力的情况下,利用线程的更快的数据传输能力。
图4是根据本发明的一个实施例的、图3的转换器的操作的流程图。如上所述,转换器360接收MPI源代码程序362和命令364作为输入。处理在“响应于将MPI源代码程序转换为基于MPI线程的程序的命令,检查MPI源代码以发现指示问题代码的状况”的步骤410处开始。在该步骤中,转换器360检查MPI源代码程序362,以发现当将MPI进程转换为线程时有问题的多个不同状况。例如,通常用于建立MPI应用程序的一些语言(例如,Fortran和C)提供了可能不会被在进程内运行的线程正确处理的存储器管理特征。例如在Fortran中,在Fortran源代码程序的不同组件或子例程之间,在空白公共块中的数据在大小和格式(layout)方面可以改变。在空白公共块中的数据是在MPI进程内运行的线程之间共享的一种类型的全局变量。如果每个进程被转换为具有其自己版本的空白公共块的线程,则不同的组件之间的这种不同大小和格式可能不会被贯彻到每个组件。因为Fortran编译器通常独立地编译每个组件或子例程,所以转换器360需要检查MPI源代码以发现所有组件或子例程,以识别这种问题代码。
为了识别这种特征,转换器360检查MPI源代码程序以发现以下状况:其中,当由MPI源代码程序的第一组件访问时,在空白公共块中的数据具有第一大小,当由MPI源代码程序的第二组件访问时,在空白公共块中的数据具有第二大小,其中,所述第一大小和第二大小不同。在发现这种状况后,转换器360会将这种代码识别为对于到基于线程的实现的转换是有问题的。转换器360还可以检查MPI源代码程序以发现以下状况:其中,当由MPI源代码程序的第一组件访问时,在空白公共块中的数据具有第一格式,并且当由MPI源代码程序的第二组件访问时,在空白公共块中的数据具有第二格式,其中,所述第一格式和第二格式不同。在发现这种状况时,转换器360会将这种代码识别为对于到基于线程的实现的转换是有问题的。
转换器360搜索的其它类型的问题代码包括:将数据从组件的一个实例保存到组件的下一实例中的代码。例如,Fortran提供了如下特征:其中,组件可以拥有如下所述的变量,即,不管是否在同一线程内对组件进行实例化,所述变量都将它们的值从组件的一个实例保留到下一个实例。为了发现这种特征,转换器360检查MPI源代码程序,以发现MPI源代码程序的具有如下变量的组件,所述变量将来自该组件的第一实例的值保留到该组件的第二实例。在发现这种状况后,转换器360会将这种代码识别为对于到基于线程的实现的转换是有问题的。
转换器360搜索的其它类型的问题代码包括:依赖于处理器的状态或其控制字(control word)的代码。例如,如果程序的结果依赖于利用处理器的不同设置而工作的不同的MPI进程,那么如下所述的代码可能无法正确地转换为基于线程的实现,所述代码依赖于在特定状态中操作、或者以特定控制字操作以处理浮点操作的处理器。在发现这种状况后,转换器360会将这种代码识别为对于到基于线程的实现的转换是有问题的。
响应于发现了指示问题代码的状况,转换器360进行到“指示问题代码的状况?”决定点420的“是”分支,其中,所述问题代码针对到基于线程的实现的转换。控制进行到“拒绝转换MPI源代码程序的命令并且正常地生成MPI源代码程序的目标代码”步骤425。响应于发现所述状况,转换MPI源代码程序的命令被拒绝,并且正常地生成MPI源代码程序的目标代码。在另一个实施例中,不是生成MPI源代码程序的目标代码,而是转换器360可以拒绝转换MPI源代码程序的命令,并且在不产生MPI源代码程序的可执行版本的情况下终止。
响应于未发现指示了问题代码的状况,转换器360进行到“指示了问题代码的状况?”决定点420的“否”分支。控制进行到“生成目标代码以将MPI源代码程序的全局变量声明为线程私有变量”步骤430。在该步骤,转换器360生成目标代码以将MPI源代码程序的每一个全局变量声明为线程私有变量。这种声明的结果是:将为在公共父进程地址空间内的每一个线程创建单独的私有变量,类似于图2的公共进程地址空间250内的线程私有变量212、222和232。为了确保线程私有变量是有效的,应当由转换器360所产生的基于MPI线程的程序中的对应的线程来实例化由MPI源代码程序来实例化的每一个进程。
为了确保当执行基于MPI线程的程序时,线程而不是MPI进程被实例化,必须使用合适的库以建立基于MPI线程的程序的可执行版本。因此,控制从“生成目标代码以将MPI源程序的全局变量声明为线程私有变量”步骤430进行到“识别合适的库以建立可执行代码”步骤440。例如,用于建立基于MPI线程的程序的可执行版本的每一个库应当支持多线程。通过使用多线程系统库,操作系统可以利用多核处理器内的多个核心来实例化不同线程,以执行任务,由此加速了基于MPI线程的程序的执行。
还预见到,正确地处理基于MPI线程的程序可能需要使用特定的库以使得能够将MPI进程转换为线程。这些库可以包括:用于使得特定功能将在初始化MPI进程或在建立MPI执行环境时被调用的代码。例如,在库内的代码可以用于在基于MPI线程的程序的执行期间识别新进程的实例化。响应于识别到新进程的实例化,所述库可以调用代码以使得用于基于MPI线程的程序的对应线程被实例化。新进程的实例化可以被识别为响应于MPI_Init命令而发生,该命令产生MPI进程。代替产生一新的MPI进程,针对MPI_Init命令的代码可以实例化一线程。然后,该线程可以执行本应由原始的MPI源代码程序中的正被初始化的MPI进程执行的功能。
或者可以响应于MPI_Init命令,或者可以更早地在建立MPI执行环境时,来创建替代MPI进程执行MPI功能的线程。例如,mpiexec命令可以用于初始化MPI执行环境,并且响应于mpiexec命令可以实例化许多线程。在线程被实例化之后,当调用MPI_Init以实例化新进程时,针对MPI_Init命令的代码可以映射已经存在的线程中的一个线程以代替MPI进程执行功能。
在MPI进程的基于线程的实现中可能有问题的另一个类型的状况是文件输入/输出(I/O)。当不同的进程读和写公共文件时,通常操作系统的文件系统组件处理文件I/O的协调,以确保由不同进程进行的操作的正确排序。如果这些进程被转换为线程,则由不同线程对访问文件I/O单元或句柄的尝试应当被当做它们在应用层与不同的文件有关来处理。可能需要来自合适的库的支持,以处理文件I/O的协调。这种库可以包括例如用于以下操作的代码:识别由第一线程对第一文件的访问,使得第一线程通过第一文件句柄来访问第一文件,识别由第二线程对第一文件的访问,并且使得第二线程通过第二文件句柄访问第一文件,其中,所述第二文件句柄不同于所述第一文件句柄。
在问题代码被识别并且MPI源代码程序的目标代码被正常地生成的情况下,控制从“拒绝转换MPI源代码程序的命令并且正常地生成MPI源代码程序的目标代码”步骤425进行到“识别合适的库以建立可执行代码”步骤440。在该情况下,将被使用的库不需要具有多线程的能力,而应当是为建立MPI源代码程序的可执行版本而正常需要的库。
从“识别合适的库以建立可执行代码”步骤440,控制进行到“使用识别的库以建立可执行代码”步骤450。使用识别的库来建立MPI源代码程序的可执行版本。如果没有发现问题代码,那么MPI源代码程序的可执行版本可以是基于MPI线程的程序,或者如果发现了问题代码,那么可以根据MPI源代码程序的正常生成的目标代码来建立可执行版本。
一旦是线程而不是不同的MPI进程被实例化,就可以如参照图2所描述的在线程之间直接传输数据,而无需执行如参照图1所描述的到共享存储器段的复制操作以及从其进行的复制操作。在基于MPI线程的程序的可执行版本的执行期间,通过将第一私有变量的内容直接提供给第二线程,可以将数据从第一线程传输到第二线程。这种从第一线程到第二线程的数据传输不使用共享存储器段来传输数据。
根据本发明的由转换器执行的转换过程是自动的。不需要为了产生具有基于MPI线程的程序366的形式的、使用线程的可执行程序,而对图3的MPI源代码程序362的源代码进行改变。通过自动地将MPI源代码程序362转换为基于线程的模式,基于MPI线程的程序366可以利用在多处理器环境中提供的线程功能以及在线程之间的数据传输的其它功效。该自动转换与当前通常需要的、用于通过重写上述MPI源代码程序来转换MPI源代码程序以使用线程功能的技术形成对比。例如,在对在共享存储器或集群(cluster)环境中实现MPI功能的尝试中,加利福尼亚大学圣巴巴拉分校的研究人员已经开发了称为TMPI的技术,其包括了针对MPI环境中的线程的编译时间和运行时间支持。编译时间转换采用线程特定数据结构来消除C代码中的全局和静态变量的使用。运行时间支持包括基于无锁队列管理方案的点对点通信协议。但是,源代码程序必须被修改以使用该点对点通信协议,并且不能对将使用线程功能在MPI环境中运行的未修改的源代码程序进行自动转换。
图5是描述了合适的数据处理环境501的框图,在该环境中可以实现本发明的示例性实施例的某些方面。数据处理环境501包括处理系统500,其包括一个或多个处理器或中央处理单元(CPU),在图中显示为处理器510A和510B。本领域的技术人员将意识到,虽然示出了两个处理器,但是单个处理器或任意数量的多个处理器可以向处理系统500提供处理器功能。处理器510A和510B中的每一个可以是单核的或多核的处理器。处理器510A和510B被显示为经由一个或多个系统总线540或其它通信路径或介质可通信地耦合到包括存储器520在内的各种其它部件。处理器510A和510B还被显示为经由点对点处理器互连511而连接,所述互连511例如HyperTransport链路或Intel快速路径互连(QPI)。
如以上参照图3和4所描述的,转换器560将MPI源代码程序转换为基于MPI线程的程序。转换器560可以被实现为在存储器520内的、由处理器510A和/或处理器510B所执行的指令。
如本文所使用的,术语“处理系统”和“数据处理系统”旨在广泛地涵盖单个机器或可通信地耦合在一起并一同工作的机器或设备的系统。示例性处理系统包括:分布式计算系统、超级计算机、高性能计算系统、计算集群、大型计算机、小型计算机、客户服务器系统、个人计算机、工作站、服务器、便携式计算机、膝上型计算机、平板电脑、电话、个人数字助理(PDA)、手持设备、诸如音频和/或视频设备这样的娱乐设备、以及用于处理或传送信息的其它设备,但是处理器系统不限于此。
可以至少部分地由来自传统的输入设备(例如,键盘、鼠标等)的输入和/或由从另一个机器、生物反馈(biometric feedback)或其它输入源或信号接收的命令,来控制处理系统500。处理系统500可以使用到一个或多个远程数据处理系统(没有示出)的一个或多个连接,例如通过网络接口控制器(NIC)550、调制解调器、或其它通信端口或耦合。
可以通过物理和/或逻辑网络502(例如,局域网(LAN)、广域网(WAN)、内联网、互联网等)将处理系统500互连到其它处理系统(没有示出)。涉及网络502的通信可以使用各种有线和/或无线短距离或长距离载波和协议,包括射频(RF)、卫星、微波、电气和电子工程师协会(IEEE)802.11、蓝牙、光、红外线、电缆、激光等。
在处理系统500内,处理器510A和510B可以被可通信地耦合到一个或多个易失性的或非易失性的数据存储设备,例如存储器520。处理器510A和510B经由系统总线540和互连541a、541b和541m连接到存储器520。存储器520可以包括随机存取存储器(RAM)、只读存储器(ROM)、大容量存储设备,例如集成驱动电子设备(IDE)硬盘驱动器,和/或其它设备或介质,例如软盘、光存储、磁带、闪速存储器、记忆棒、数字视频盘、生物存储等。为了该公开,术语“ROM”通常可以用于指非易失性存储器设备,例如可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存ROM、闪速存储器等。处理器510A和510B还可以可通信地耦合到另外的部件,例如视频控制器、小型计算机系统接口(SCSI)控制器、网络控制器、通用串行总线(USB)控制器、输入设备,例如键盘和鼠标等。处理系统500还可以包括一个或多个桥或中心,例如存储器控制器中心、输入/输出(I/O)控制器中心、PCI根桥(PCI root bridge)等,它们用于可通信地耦合各种系统部件。如本文所使用的,术语“总线”可以用于指共享的通信路径,以及点对点路径。系统总线540还提供了经由互连541n的对网络接口550的访问。
一些部件(例如NIC)可以被实现为具有用于与总线进行通信的接口(例如,PCI连接器)的适配器卡。在一个实施例中,使用例如可编程或不可编程逻辑器件或阵列、专用集成电路(ASIC)、嵌入式计算机、智能卡等的部件,可以将一个或多个设备实现为嵌入式控制器。
可以用硬件、软件、固件或这些实现方式的组合来实现本文公开的装置的实施例。本发明的实施例可以被实现为在可编程系统上执行的计算机程序,所述可编程系统包括至少一个处理器、数据存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备,以及至少一个输出设备。
可以将程序代码应用到输入数据以执行本文描述的功能并且生成输出信息。本发明的实施例还包括包含指令或包含设计数据的机器可访问介质,所述指令用于执行本发明的操作,所述设计数据例如是HDL,其定义了本文描述的结构、电路、装置、处理器和/或系统特征。这些实施例还可以被称为程序产品。
这种机器可访问存储介质可以包括由机器或设备制造或形成的粒子的有形排列,包括存储介质,例如硬盘,任何其它类型的盘(包括软盘、光盘、光盘只读存储器(CD-ROM)、可重写光盘(CD-RW)和磁光盘)、半导体设备(例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)这样的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪速可编程存储器(FLASH)、电可擦除可编程只读存储器(EEPROM))、磁卡或光卡、或适合于存储电子指令的任何其它类型的介质,但机器可访问存储介质并不限于此。
可以按照已知的方式将输出信息应用到一个或多个输出设备。为了该应用,处理系统包括具有处理器的任何系统,处理器例如:数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
可以用高级过程式或面向对象编程语言来实现程序以与处理系统进行通信。如果期望的话,还可以以汇编或机器语言来实现程序。事实上,本文描述的机制在范围上并不限于任何特定的编程语言。在任何情况下,语言可以是编译的或是解释的语言。
本文呈现了用于将MPI源代码程序自动地转换为基于MPI线程的程序的方法和系统的实施例。虽然已经示出并描述了本发明的特定实施例,但是对本领域的技术人员来说显而易见的是,可以在不脱离所附权利要求的范围的情况下,进行大量改变、修改和更改。因此,本领域的技术人员将意识到,在不脱离本发明的更宽的方面的情况下,可以进行改变和更改。所附权利要求将在它们的范围内包括落入本发明的真实范围和精神内的所有这种改变、修改和更改。

Claims (15)

1.一种方法,包括:
响应于将MPI源代码程序转换为基于MPI线程的程序的命令,由处理器执行的转换器来执行以下操作:
将所述MPI源代码程序的全局变量声明为线程私有变量,以创建用于第一线程的第一私有变量和用于第二线程的第二私有变量;
识别用于建立所述基于MPI线程的程序的可执行版本的库;以及
使用所述识别的库建立所述基于MPI线程的程序的可执行版本。
2.根据权利要求1所述的方法,还包括:
在所述基于MPI线程的程序的可执行版本在第二处理器上执行期间,通过将所述第一私有变量的内容直接提供给所述第二线程,从而将数据从所述第一线程传输到所述第二线程。
3.根据权利要求2所述的方法,其中,
将所述数据从所述第一线程传输到所述第二线程不使用共享存储器段来传输所述数据。
4.根据权利要求1所述的方法,其中
所述识别的库支持多线程。
5.根据权利要求1所述的方法,还包括:
检查所述MPI源代码程序以发现下列状况中的一个:
第一状况,其中,当被所述MPI源代码程序的第一组件访问时,空白公共块中的数据具有第一大小,并且当被所述MPI源代码程序的第二组件访问时,所述空白公共块中的数据具有第二大小,其中,所述第一大小和所述第二大小不同;
第二状况,其中,当被所述MPI源代码程序的第一组件访问时,空白公共块中的数据具有第一格式,并且当被所述MPI源代码程序的第二组件访问时,所述空白公共块中的数据具有第二格式,其中,所述第一格式和所述第二格式不同;
第三状况,其中,所述MPI源代码程序的组件具有一变量,该变量将来自所述组件的第一实例的值保留到所述组件的第二实例;
第四状况,其依赖于所述处理器的状态;以及
第五状况,其依赖于所述处理器的控制字的状态;以及
响应于发现了所述第一、第二、第三、第四和第五状况中的一个状况,拒绝转换所述MPI源代码程序的命令。
6.根据权利要求1所述的方法,其中
所述识别的库包括代码以在所述基于MPI线程的程序的执行期间执行以下操作:
识别由所述第一线程对第一文件的访问;
使得所述第一线程通过第一文件句柄来访问所述第一文件;
识别由所述第二线程对所述第一文件的访问;
使得所述第二线程通过第二文件句柄来访问所述第一文件,其中,所述第二文件句柄不同于所述第一文件句柄。
7.根据权利要求1所述的方法,其中
所述识别的库包括代码以在所述基于MPI线程的程序的执行期间执行以下操作:
识别新进程的实例化;
响应于识别到新进程的实例化,使得用于所述基于MPI线程的程序的对应线程被实例化。
8.一种系统,包括:
至少一个处理器;以及
存储器,其包括用于使在所述处理器上执行的转换器响应于将MPI源代码程序转换为基于MPI线程的程序的命令来执行以下操作的指令:
将所述MPI源代码程序的全局变量声明为线程私有变量,以创建用于第一线程的第一私有变量和用于第二线程的第二私有变量;
识别用于建立所述基于MPI线程的程序的可执行版本的库;以及
使用所述识别的库建立所述基于MPI线程的程序的可执行版本。
9.根据权利要求8所述的系统,其中,所述存储器还包括用于执行以下操作的指令:
在所述基于MPI线程的程序的可执行版本在第二处理器上执行期间,通过将所述第一私有变量的内容直接提供给所述第二线程,从而将数据从所述第一线程传输到所述第二线程。
10.根据权利要求9所述的系统,其中
将所述数据从所述第一线程传输到所述第二线程不使用共享存储器段来传输所述数据。
11.根据权利要求8所述的系统,其中
所述识别的库支持多线程。
12.根据权利要求8所述的系统,其中,用于所述转换器的指令还包括用于执行以下操作的指令:
检查所述MPI源代码程序以发现下列状况中的一个:
第一状况,其中,当被所述MPI源代码程序的第一组件访问时,空白公共块中的数据具有第一大小,并且当被所述MPI源代码程序的第二组件访问时,所述空白公共块中的数据具有第二大小,其中,所述第一大小和所述第二大小不同;
第二状况,其中,当被所述MPI源代码程序的第一组件访问时,空白公共块中的数据具有第一格式,并且当被所述MPI源代码程序的第二组件访问时,所述空白公共块中的数据具有第二格式,其中,所述第一格式和所述第二格式不同;
第三状况,其中,所述MPI源代码程序的组件具有一变量,该变量将来自所述组件的第一实例的值保留到所述组件的第二实例;
第四状况,其依赖于所述处理器的状态;以及
第五状况,其依赖于所述处理器的控制字的状态;以及
响应于发现了所述第一、第二、第三、第四和第五状况中的一个状况,拒绝转换所述MPI源代码程序的命令。
13.根据权利要求8所述的系统,其中,
所述识别的库包括用于在所述基于MPI线程的程序的执行期间执行以下操作的代码:
识别由所述第一线程对第一文件的访问;
使得所述第一线程通过第一文件句柄来访问所述第一文件;
识别由所述第二线程对所述第一文件的访问;
使得所述第二线程通过第二文件句柄来访问所述第一文件,其中,所述第二文件句柄不同于所述第一文件句柄。
14.根据权利要求8所述的系统,其中,
所述识别的库包括用于在所述基于MPI线程的程序的执行期间执行以下操作的代码:
识别新进程的实例化;
响应于识别到新进程的实例化,使得用于所述基于MPI线程的程序的对应线程被实例化。
15.一种装置,包括:
用于响应于将MPI源代码程序转换为基于MPI线程的程序的命令的模块,所述模块包括:
用于将所述MPI源代码程序的全局变量声明为线程私有变量,以创建用于第一线程的第一私有变量和用于第二线程的第二私有变量的模块;
用于识别用于建立所述基于MPI线程的程序的可执行版本的库的模块;以及
用于使用所述识别的库建立所述基于MPI线程的程序的可执行版本的模块。
CN201010221296.1A 2009-06-30 2010-06-30 Mpi源代码程序到基于mpi线程的程序的自动转换 Expired - Fee Related CN101937367B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/459,314 US8539456B2 (en) 2009-06-30 2009-06-30 Automatic conversion of MPI source code programs into MPI thread-based programs
US12/459,314 2009-06-30

Publications (2)

Publication Number Publication Date
CN101937367A true CN101937367A (zh) 2011-01-05
CN101937367B CN101937367B (zh) 2014-09-24

Family

ID=42768120

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010221296.1A Expired - Fee Related CN101937367B (zh) 2009-06-30 2010-06-30 Mpi源代码程序到基于mpi线程的程序的自动转换

Country Status (4)

Country Link
US (1) US8539456B2 (zh)
EP (1) EP2273366A1 (zh)
JP (1) JP5111567B2 (zh)
CN (1) CN101937367B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103019844A (zh) * 2012-12-05 2013-04-03 北京奇虎科技有限公司 一种支持多线程调用mpi函数的方法和装置
CN105930210A (zh) * 2012-12-05 2016-09-07 北京奇虎科技有限公司 Mpi函数调用方法和装置
CN106445656A (zh) * 2016-09-06 2017-02-22 北京邮电大学 一种实现线程本地存储的方法及装置
CN108733432A (zh) * 2017-04-14 2018-11-02 阿里巴巴集团控股有限公司 编程环境下私有方法的实现方法、调用方法及其装置
CN111104119A (zh) * 2018-10-25 2020-05-05 祥明大学校产学协力团 用于存储器中心型计算机的mpi程序转换方法及装置

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2282264A1 (en) * 2009-07-24 2011-02-09 ProximusDA GmbH Scheduling and communication in computing systems
US8924946B2 (en) * 2010-11-24 2014-12-30 International Business Machines Corporation Systems and methods for automatically optimizing high performance computing programming languages
US9250877B2 (en) * 2013-09-20 2016-02-02 Cray Inc. Assisting parallelization of a computer program
JP6217386B2 (ja) * 2013-12-25 2017-10-25 富士通株式会社 マルチプロセッサ用プログラム生成方法
US10664272B2 (en) 2015-03-26 2020-05-26 Intel Corporation Cross-level prefetch for shared multi-level libraries
US10691434B2 (en) 2018-02-09 2020-06-23 Macrosoft, Inc. System and method for converting a first programming language application to a second programming language application
KR102126896B1 (ko) * 2018-10-25 2020-06-25 상명대학교산학협력단 메모리 중심 컴퓨터를 위한 mpi 프로그램 변환 방법 및 장치
CN112202628B (zh) * 2020-09-08 2022-09-02 杭州涂鸦信息技术有限公司 一种WiFi模块串口协议自动化测试系统及方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US6782537B1 (en) * 1999-09-23 2004-08-24 International Business Machines Corporation Establishing a communicator across multiple processes in a multithreaded computing environment
CN1588323A (zh) * 2004-09-23 2005-03-02 上海交通大学 并行程序可视化调试方法
US20080276262A1 (en) * 2007-05-03 2008-11-06 Aaftab Munshi Parallel runtime execution on multiple processors

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5249133A (en) * 1991-04-10 1993-09-28 Sun Microsystems, Inc. Method for the hierarchical comparison of schematics and layouts of electronic components
CA2078315A1 (en) * 1991-09-20 1993-03-21 Christopher L. Reeve Parallel processing apparatus and method for utilizing tiling
US5568639A (en) * 1993-11-24 1996-10-22 Menai Corporation Method and apparatus for providing an object-oriented file structuring system on a computer
JP4050339B2 (ja) * 1994-04-28 2008-02-20 株式会社東芝 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置
US6920635B1 (en) * 2000-02-25 2005-07-19 Sun Microsystems, Inc. Method and apparatus for concurrent propagation of data between software modules
US6880151B2 (en) * 2001-09-27 2005-04-12 International Business Machines Corporation Apparatus and method of providing common distributed services for system management applications across heterogeneous environments
JP4246560B2 (ja) * 2002-09-24 2009-04-02 株式会社リコー 情報処理装置、情報処理方法、プログラム、及び記録媒体
CA2406866A1 (en) * 2002-10-04 2004-04-04 Sun Microsystems, Inc. System and method for migrating software
US7681237B1 (en) * 2004-05-13 2010-03-16 Symantec Corporation Semi-synchronous scanning of modified files in real time
US20060294312A1 (en) * 2004-05-27 2006-12-28 Silverbrook Research Pty Ltd Generation sequences
US8166483B2 (en) * 2004-08-06 2012-04-24 Rabih Chrabieh Method and apparatus for implementing priority management of computer operations
US20070094495A1 (en) * 2005-10-26 2007-04-26 Microsoft Corporation Statically Verifiable Inter-Process-Communicative Isolated Processes
US7630389B1 (en) * 2005-12-14 2009-12-08 Nvidia Corporation Multi-thread FIFO memory generator
US8024708B2 (en) * 2006-06-20 2011-09-20 Google Inc. Systems and methods for debugging an application running on a parallel-processing computer system
US8136102B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
JP2008123315A (ja) * 2006-11-14 2008-05-29 Sony Corp 情報処理装置およびその方法、並びにプログラム
US8234652B2 (en) * 2007-08-28 2012-07-31 International Business Machines Corporation Performing setup operations for receiving different amounts of data while processors are performing message passing interface tasks
US7885969B2 (en) * 2007-09-17 2011-02-08 International Business Machines Corporation System and method for executing compute-intensive database user-defined programs on an attached high-performance parallel computer
US8448154B2 (en) * 2008-02-04 2013-05-21 International Business Machines Corporation Method, apparatus and software for processing software for use in a multithreaded processing environment
WO2009114645A1 (en) * 2008-03-11 2009-09-17 University Of Washington Efficient deterministic multiprocessing
US8122132B2 (en) * 2008-12-16 2012-02-21 International Business Machines Corporation Techniques for dynamically assigning jobs to processors in a cluster based on broadcast information

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US6782537B1 (en) * 1999-09-23 2004-08-24 International Business Machines Corporation Establishing a communicator across multiple processes in a multithreaded computing environment
CN1588323A (zh) * 2004-09-23 2005-03-02 上海交通大学 并行程序可视化调试方法
US20080276262A1 (en) * 2007-05-03 2008-11-06 Aaftab Munshi Parallel runtime execution on multiple processors

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HONG TANG, KAI SHEN, TAO YANG: "Program Transformation and Runtime Support for Threaded MPI Execution on Shared-Memory Machines", 《ACM TRANSACTIONS ON PROGRAMMING LANGUAGES AND SYSTEMS》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103019844A (zh) * 2012-12-05 2013-04-03 北京奇虎科技有限公司 一种支持多线程调用mpi函数的方法和装置
CN103019844B (zh) * 2012-12-05 2016-05-04 北京奇虎科技有限公司 一种支持多线程调用mpi函数的方法和装置
CN105930210A (zh) * 2012-12-05 2016-09-07 北京奇虎科技有限公司 Mpi函数调用方法和装置
CN105930210B (zh) * 2012-12-05 2019-02-26 北京奇虎科技有限公司 Mpi函数调用方法和装置
CN106445656A (zh) * 2016-09-06 2017-02-22 北京邮电大学 一种实现线程本地存储的方法及装置
CN106445656B (zh) * 2016-09-06 2019-10-11 北京邮电大学 一种实现线程本地存储的方法及装置
CN108733432A (zh) * 2017-04-14 2018-11-02 阿里巴巴集团控股有限公司 编程环境下私有方法的实现方法、调用方法及其装置
CN111104119A (zh) * 2018-10-25 2020-05-05 祥明大学校产学协力团 用于存储器中心型计算机的mpi程序转换方法及装置

Also Published As

Publication number Publication date
US8539456B2 (en) 2013-09-17
CN101937367B (zh) 2014-09-24
JP5111567B2 (ja) 2013-01-09
JP2011014137A (ja) 2011-01-20
US20100333074A1 (en) 2010-12-30
EP2273366A1 (en) 2011-01-12

Similar Documents

Publication Publication Date Title
CN101937367B (zh) Mpi源代码程序到基于mpi线程的程序的自动转换
CN104951296A (zh) 允许一种架构的代码模块使用另一种架构的库模块的架构间兼容模块
Li et al. Density matrix quantum circuit simulation via the BSP machine on modern GPU clusters
Liao et al. Concurrency bugs in multithreaded software: Modeling and analysis using Petri nets
JP5957006B2 (ja) 拡張可能なデータ並列セマンティクス
Heller et al. Closing the performance gap with modern c++
CN105740036B (zh) 用于支持代码的编译时间定制的编译器的系统和方法
JP2023518833A (ja) ハードウェアアクセラレーションリソースを有効にするためのコンパイラ主導のタイル置換
CN104050415A (zh) 用于系统调用的稳健且高性能的指令
Goli et al. Accelerated machine learning using TensorFlow and SYCL on OpenCL Devices
Gruber et al. HPC@ Green it: Green high performance computing methods
Kinzer et al. A computational stack for cross-domain acceleration
Friedline et al. OpenACC 2.5 validation testsuite targeting multiple architectures
US20160147559A1 (en) Modification of context saving functions
Sandrieser et al. Explicit platform descriptions for heterogeneous many-core architectures
US20240232622A9 (en) Apparatus, articles of manufacture, and methods for managing processing units
WO2022140332A2 (en) Preventing garbage object accumulation on minimal runtimes
Ghane et al. Towards a portable hierarchical view of distributed shared memory systems: challenges and solutions
van Tol et al. Extending and implementing the self-adaptive virtual processor for distributed memory architectures
Almeida et al. JCL: a high performance computing Java middleware
Harvey A linguistic approach to concurrent, distributed, and adaptive programming across heterogeneous platforms
Nürnberger et al. Shared memory in the many-core age
Amatya Parallel processes in HPX: designing an infrastructure for adaptive resource management
US20230244525A1 (en) Methods and apparatus for an xpu-aware dynamic compute scheduling framework
Ali et al. A Pragmatic comparison of four different 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
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: 20140924

Termination date: 20210630