JP2011014137A - Mpiソースコードプログラムからmpiスレッドベースプログラムへの自動変換 - Google Patents

Mpiソースコードプログラムからmpiスレッドベースプログラムへの自動変換 Download PDF

Info

Publication number
JP2011014137A
JP2011014137A JP2010140737A JP2010140737A JP2011014137A JP 2011014137 A JP2011014137 A JP 2011014137A JP 2010140737 A JP2010140737 A JP 2010140737A JP 2010140737 A JP2010140737 A JP 2010140737A JP 2011014137 A JP2011014137 A JP 2011014137A
Authority
JP
Japan
Prior art keywords
thread
mpi
program
source code
component
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
JP2010140737A
Other languages
English (en)
Other versions
JP5111567B2 (ja
Inventor
Alexander V Supalov
ヴイ. スパロブ、アレクサンダー
Der Wijngaart Robert F Van
エフ.ヴァン デア ウイジンゴルト、ロバート
Stanley J Whitlock
ジェイ. ホイットロック、スタンレー
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 JP2011014137A publication Critical patent/JP2011014137A/ja
Application granted granted Critical
Publication of JP5111567B2 publication Critical patent/JP5111567B2/ja
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ソースコードプログラムおよびコマンドが入力されると、グローバル変数をスレッドプライベート変数として宣言して、第1のスレッド210用の第1のプライベート変数212および第2のスレッド220用の第2のプライベート変数222を生成する。MPIスレッドベースプログラム実行中にスレッドへの変換プロセスをサポートするべく特定したライブラリを用いてMPIスレッドベースプログラムの実行バージョンをビルドする。特定したライブラリのコードは、MPIスレッドベースプログラムが実行されている場合に、新しいプロセスのインスタンス化を特定すると共に、これに応じて、MPIスレッドベースプログラム用の対応するスレッドをインスタンス化させる。
【選択図】図2

Description

<著作権表示>
本文献の内容は著作権で保護されるべきものである。著作権保持者は、特許商標庁の特許のファイルまたは記録に示されている人物が特許開示をファクシミリで複製することには異存がないが、それ以外については著作権に関する全ての権利を有する。
本開示は概して、メッセージ・パッシング・インフラストラクチャ(Message Passing Infrastructure)で実行されるようにコンピュータプログラムを自動変換することに関する。
計算関連の問題の多くは、独立したタスクまたは緩やかな依存関係を持つタスクに分類され、一群を構成している複数のプロセッサまたはシステム間で分配して並列に実行することができる。この技術によれば、全てのタスクを1つのプロセッサまたはシステムで実行する場合に比べて、主要な問題をより早く解決できることが多い。場合によっては、サブタスクを処理しているプロセッサまたはシステムの数に比例して、処理時間を短縮することができる。各プロセスは、別のタスクとデータを交換する必要がある場合を除いて、独立して計算を行うことができる。
協働する複数のプロセッサおよびシステムは、両者の間でメッセージを送信することで、必要に応じて連係させることができる。また、メッセージを用いて、作業の分配および結果の収集を行うこともできる。問題の分割または分解によっては、多数のメッセージの送受信またはメッセージ内での大量のデータの転送のために、メッセージ・パッシング・インフラストラクチャに対する要求が非常に大きくなる場合がある。
プロセス間でのメッセージの転送は、複数の異なる通信チャネルまたは「ファブリック」を介して行われるとしてよい。例えば、物理的に同一のマシンで実行されているプロセス同士は、マルチプロセッサマシン上のポイント・ツー・ポイント・プロセッサ・インターコネクトまたは共有メモリを用いて、効率よく通信することができる。別のマシンで実行されているプロセス同士の場合、InfiniBand(InfiniBand Trade Associationの登録商標)、Myrinet(米国、カリフォルニア州、アルカディア、Myricom,Inc.社の登録商標)、スケーラブル・コヒーレント・インターフェース(Scalable Coherent Interface:SCI)、または、QSNet(英国、ブリストル、Quadrics,Ltd.社)といった高速ネットワークを介して通信し得る。こういったネットワークは、ファブリックで利用可能な機能全てを出すネイティブ動作モード、および、ネットワークをレガシーソフトウェアで利用できるようにするエミュレーションモードを持つとしてよい。プロセス同士は、イーサネット(登録商標)等の従来のネットワークを介して通信を行うとしてもよい。
一連の標準的なメッセージ・パッシング関数を定義して、標準的な関数をそれぞれの種類のファブリック上で実行するべくライブラリを設けるとしてよい。メッセージ・パッシング・インターフェース(MPI)は、メッセージ・パッシングに関して、分散型メモリシステムおよび共有メモリシステムをプログラミングするための基本的なアプリケーション・プログラミング・インターフェース(API)を定めている業界標準である。MPI規格は、MPIフォーラムのメンバーによって定められたものである(MPI:メッセージ・パッシング・インターフェース規格、バージョン2.1、メッセージ・パッシング・インターフェース・フォーラム、2008年6月23日、xwwwx.mpi−forum.org/docs/を参照のこと、尚、本明細書中でアクティブリンクを避けるべく、URL中では「www」の代わりに「xwwwx」を使用している)。MPI(または同様の)ライブラリによって、1以上のファブリックにおける標準的な関数が提供され得る。
1つのプロセス内の複数のスレッドを用いてメモリ等のリソースを共有することがあり、スレッド同士は通信するのにメッセージ・パッシング・メカニズムを利用する必要がないという利点がある。スレッドは特に、マルチプロセッサシステムにおいて複数の異なるプロセッサコアを利用する場合に有用である。マルチプロセッサシステムのオペレーティングシステムは、複数の異なるプロセッサコアで実行されている複数のスレッド間でタスクを割り当てて、1つの共通アドレス空間内で実行されている複数のスレッドについて、マルチプロセッサ環境下で利用可能なプロセッサ・インターコネクトによって可能となるデータ共有化を利用する。
しかし、MPI環境では、1つのプロセス内の複数のスレッドは、特別な実装方法に従って実行する必要がある。MPI規格の場合、各MPIプロセスは通常、一意的なオペレーティングシステムプロセスにマッピングされている。1つのプロセスのアドレス空間は、別のプロセスがMPIライブラリ関数を呼び出すことによってのみ、アクセスすることができる。MPI−2仕様書、セクション12.4「MPIおよびスレッド」で指摘されているように、プロセス内の各スレッドはMPI呼び出しを発行することができるが、送信呼び出しまたは受信呼び出しのパラメータは、スレッドではなくプロセスを特定するので、スレッドはそれぞれを別個にアドレス指定することができない。あるプロセスに送信されたメッセージは、このプロセス内のどのスレッドによっても受信され得る。プロセスがマルチスレッドプロセスであっても、当該プロセスの対外インターフェースには影響がない。
MPI−2仕様書、セクション12.4「MPIおよびスレッド」に記載されているMPI規格に従う場合、スレッド準拠型実装では、全てのMPI呼び出しがスレッドに対応可能であることと、MPI呼び出しをブロックする場合、呼び出しスレッドのみをブロックして、もし存在すればその他のスレッドは実行可能とすることとを保証しなければならない。しかし、この規格を満たすためには、MPI呼び出しを行うスレッドが利用するスタティック変数およびグローバル変数を、例えば、1度に1つのスレッドのみがアクセスすることを許可する相互排除プリミティブを用いて保護する必要がある。スレッド準拠型実装では通常、Posixスレッド等の技術を用いて、または、MPI/OpenMP混合規格に従って、プログラマによってソースコードプログラムを書き換える必要がある。このような高度なプログラミングパラダイムによって、プログラムの複雑性が増してしまうと同時にプログラム性能が全体的に低下してしまう。このような実装では、共有メモリメカニズムを介したメッセージの送信というオーバーヘッドを発生させることなく通信するべくスタティック変数およびグローバル変数を利用することができるという、スレッドを利用する場合の利点の1つが失われてしまう。
共有メモリセグメントを用いた、MPIインフラストラクチャで実行されているプロセス間でのデータ転送を示す図である。 本発明の一実施形態に応じて、スレッドに変換されたプロセス間でのデータ転送を示す図である。 本発明の一実施形態に係る、MPIソースコードプログラムからMPIスレッドベースプログラムへのコンバータの動作を示す流れ図である。 本発明の一実施形態に係る図3のコンバータの動作を説明するためのフローチャートである。 本発明の実施形態例の特定の側面が実施される適切なデータ処理環境を示すブロック図である。
本発明の実施形態は、MPIソースコードプログラムを自動的にMPIスレッドベースプログラムに変換する方式を含む。MPIスレッドベースプログラムは、スレッドのデータ転送高速化機能を利用することを可能としつつ、他のMPI機能も引き続き利用できるようにする。また、非スレッド型MPIプログラムをMPIスレッドベースプログラムに自動的に変換することによって、マルチプロセッサ環境を利用することができない多くのレガシーMPIプログラムを、プログラマの介入なしに、自動的に変換することができるようになる。このように自動的に変換することによって、企業は、自動的且つ低コストで、MPIソースコードプログラム群をマルチプロセッサ環境に移植することができるようになる。
コンバータは、MPIソースコードプログラムおよびコマンドが入力されると、MPIソースコードプログラムのグローバル変数をスレッドプライベート変数として宣言して、第1のスレッド用の第1のプライベート変数および第2のスレッド用の第2のプライベート変数を生成する。MPIスレッドベースプログラム実行中にスレッドへの変換プロセスをサポートするべくライブラリを特定して、特定したライブラリを用いてMPIスレッドベースプログラムの実行バージョンをビルドする。特定したライブラリは、コードを含むとしてよく、当該コードは、MPIスレッドベースプログラムが実行されている場合に新しいプロセスのインスタンス化を特定すると共に、これに応じて、MPIスレッドベースプログラム用の対応するスレッドをインスタンス化させる。データを所与のスレッドから別のスレッドに転送するには、グローバル変数に対応する所与のスレッドのプライベート変数の内容を直接別のスレッドに提供する。このようなデータ転送方式では、スレッド間のデータ転送に共有メモリセグメントを利用しない。
図1は、共有メモリセグメントを用いた、MPIインフラストラクチャで実行されているプロセス間でのデータ転送を示す図である。通常の実装では、MPIプログラムは、図1ではプロセス110、120、および130として示しているが、n個のプロセス0からn−1のインスタンスを生成する。これらのプロセスはそれぞれ、対応するアドレス空間を有しており、プロセス110はプロセスアドレス空間112、プロセス120はプロセスアドレス空間122、プロセス130はプロセスアドレス空間132を有している。データ102をプロセス110からプロセス120へと転送する場合、プロセス110がデータ102をプロセスアドレス空間112から共有メモリセグメント140へと転送して、プロセス120がデータ102を共有メモリセグメント140からプロセスアドレス空間122へと複製する必要がある。このようなデータ転送処理では、メモリ複製処理が2回必要となる。
共有メモリセグメント140は、複数のプロセスで共有され、より大きいメインメモリの一部であって、複数の異なるプロセスによるアクセスを調整する部分であってよい。共有メモリ140に対するアクセスは、1つのプロセスが、他のプロセスがアクセス可能な領域をランダムアクセスメモリ内に作成するプロセス間通信を用いて、または、仮想メモリマッピングを用いて、通常であれば1つのデータの複数の複製に対する複数のアクセスを1つのインスタンスへと移動させることによって、制御されるとしてよい。共有メモリ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内のアドレスへと直接転送することができる。このように、スレッド210、220、および230は共有プロセスアドレス空間250内のアドレスを共有しているので、図1に示した共有メモリセグメント140のような共有メモリセグメントを介して間接的にではなく、直接的にデータ転送を行うことができる。複製処理を2回行う必要がなく、直接データ転送されると、プログラムの性能が一躍高まる。
図3は、本発明の一実施形態に係る、MPIソースコードプログラムから実行可能MPIスレッドベースプログラムへのコンバータの動作を示す流れ図である。コンバータ360は、入力としてMPIソースコードプログラム362およびコマンド364を受け取り、出力として実行可能MPIスレッドベースプログラム366を提供する。コマンド364は、例えば、MPIソースベースプログラムをMPIスレッドベースプログラムとしてコンパイルするようコンバータ360に指示するコマンドであってよい。例えば、ソースコードプログラム「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」の部分によって、当該コマンドはコンパイラに供給され、実行可能MPIスレッドベースプログラムとして出力されるプログラム「test_mpi_thread」が生成される。
コンバータ360は、コマンド364に応じて、MPIソースコードプログラムのグローバル変数をスレッドプライベート変数として宣言して、第1のスレッド用の第1のプライベート変数および第2のスレッド用の第2のプライベート変数を作成する。本明細書で用いる場合、「グローバル変数」という用語は、プロセス内での範囲がグローバルである変数、例えば、グローバル変数またはスタティック変数として宣言された変数を意味する。MPIスレッドベースプログラム366を実行すると、グローバル変数に対応するあるスレッドのプライベート変数の内容を、直接別のスレッドへと提供することで、スレッド間でデータを転送することができる。このデータ転送方式では、スレッド間でのデータ転送に、共有メモリセグメントを利用しない。MPIスレッドベースプログラム366は、スレッドのデータ転送高速化機能を利用することを可能としつつ、他のMPI機能も引き続き利用できるようにする。
図4は、本発明の一実施形態に係る図3のコンバータの動作を説明するためのフローチャートである。上述したように、コンバータ360は、入力として、MPIソースコードプログラム362およびコマンド364を受け取る。処理は、「MPIソースコードプログラムをMPIスレッドベースプログラムに変換するコマンドに応じて、問題コードを示す条件があるか否かMPIソースコードを調べる」ステップ410から開始される。このステップでは、コンバータ360は、MPIプロセスをスレッドに変換する際に問題となる複数の異なる条件があるか否か、MPIソースコードプログラム362を調べる。例えば、MPIアプリケーションの構築で多く用いられる、FortranおよびC言語等、一部の言語には、プロセス内で実行されるスレッドでは適切に処理されないメモリ管理機能がある。例えば、Fortranの場合、無名共通ブロックのデータは、Fortranソースコードプログラムのコンポーネントまたはサブルーチン毎に、サイズおよびレイアウトが異なる場合がある。無名共通ブロック内のデータは、1つのMPIプロセス内で実行される複数のスレッド間で共有される種類のグローバル変数である。各プロセスが、自身のバージョンの無名共通ブロックを持つスレッドに変換されると、コンポーネント毎に異なるサイズおよびレイアウトは、各コンポーネントに持ち越されない場合がある。Fortranコンパイラは通常、各コンポーネントまたはサブルーチンを別個にコンパイルするので、コンバータ360は、MPIソースコードの全てのコンポーネントまたはサブルーチンを調べて、問題コードを特定する必要がある。
コンバータ360は、このような機能を特定するべく、無名共通ブロック内のデータが、MPIソースコードプログラムの第1のコンポーネントによってアクセスされた場合には第1のサイズを持ち、MPIソースコードプログラムの第2のコンポーネントによってアクセスされた場合には第2のサイズを持ち、第1のサイズおよび第2のサイズは互いに異なるという条件があるか否か、MPIソースコードプログラムを調べる。コンバータ360は、このような条件を見つけると、スレッドベース実装への変換に際して問題を引き起こすコードとして当該コードを特定する。コンバータ360はさらに、無名共通ブロック内のデータがMPIソースコードプログラムの第1のコンポーネントによってアクセスされた場合には第1のレイアウトを持ち、MPIソースコードプログラムの第2のコンポーネントによってアクセスされた場合には第2のレイアウトを持ち、第1のレイアウトおよび第2のレイアウトは互いに異なるという条件があるか否か、MPIソースコードプログラムを調べるとしてもよい。コンバータ360は、このような条件を見つけると、スレッドベース実装への変換に際して問題を引き起こすコードとして当該コードを特定する。
コンバータ360が検索するその他の種類の問題コードには、あるコンポーネントのあるインスタンスから当該コンポーネントの次のインスタンスへとデータをセーブするコードが含まれる。例えば、Fortranは、コンポーネントが有する変数には、当該コンポーネントが同一スレッド内でインスタンス化されるか否かに関わりなく、当該コンポーネントのあるインスタンスから次のインスタンスへと当該変数の値が維持される変数があるという機能を持つ。コンバータ360は、このような機能を見つけるべく、第1のインスタンスから第2のインスタンスへと値を維持する変数を持つコンポーネントがあるか否か、MPIソースコードプログラムを調べる。コンバータ360は、このような条件を見つけると、スレッドベース実装への変換に際して問題を引き起こすコードとして当該コードを特定する。
コンバータ360が検索するその他の種類の問題コードには、プロセッサまたはプロセッサの制御ワードの状態に依存するコードが含まれる。例えば、浮動小数点演算を処理するべく特定の状態または特定の制御ワードで動作するプロセッサに依存するコードは、プログラムの結果がプロセッサの複数の異なる設定で動作する複数の異なるMPIプロセスに依存している場合、スレッドベース実装に適切に変換されない場合がある。コンバータ360は、このような条件を見つけると、スレッドベース実装への変換に際して問題を引き起こすコードとして当該コードを特定する。
コンバータ360は、スレッドベース実装への変換に際して問題となるコードを示す条件を見つけたことに応じて、「問題コードを示す条件あり?」という判断ポイント420を「YES」へと進む。そして、「MPIソースコードプログラムを変換するコマンドを拒否して、MPIソースコードプログラム用のオブジェクトコードを通常通り生成」するステップ425へと進む。上述したような条件が見つかったことに応じてMPIソースコードプログラムを変換するコマンドは拒否されて、MPIソースコードプログラム用のオブジェクトコードが通常通り生成される。別の実施形態によると、コンバータ360は、MPIソースコードプログラム用のオブジェクトコードを生成するのではなく、MPIソースコードプログラムを変換するコマンドを拒否して、MPIソースコードプログラムの実行バージョンを生成することなく終了するとしてもよい。
コンバータ360は、問題コードを示す条件が見つからなかったことに応じて、「問題コードを示す条件あり?」という判断ポイント420を「NO」へと進む。そして、「オブジェクトコードを生成して、MPIソースコードプログラムのグローバル変数をスレッドプライベート変数として宣言」するステップ430へと進む。コンバータ360は、このステップで、オブジェクトコードを生成して、MPIソースコードプログラムの各グローバル変数をスレッドプライベート変数として宣言する。このように宣言することによって、図2の共通プロセスアドレス空間250内のスレッドプライベート変数212、222、および232と同様に、1つの共通の親プロセスアドレス空間内の各スレッドについて別個のプライベート変数が作成される。スレッドプライベート変数が有効であることを保証するためには、MPIソースコードプログラムによってインスタンス化される各プロセスを、コンバータ360が生成するMPIスレッドベースプログラム内の対応するスレッドによってインスタンス化する必要がある。
MPIスレッドベースプログラムを実行した場合にMPIプロセスではなくスレッドがインスタンス化されることを保証するためには、適切なライブラリを用いてMPIスレッドベースプログラムの実行バージョンをビルドしなければならない。このため、「オブジェクトコードを生成して、MPIソースコードプログラムのグローバル変数をスレッドプライベート変数として宣言」するステップ430から、「適切なライブラリを特定して実行コードをビルド」するステップ440へと進む。例えば、MPIスレッドベースプログラムの実行バージョンをビルドするべく利用される各ライブラリは、マルチスレッディングをサポートする必要がある。マルチスレッドシステムライブラリを用いることによって、オペレーティングシステムは、1つのマルチコアプロセッサ内の複数のコアを利用して、複数の異なるスレッドのインスタンスを作成してタスクを実行できるので、MPIスレッドベースプログラムの実行が高速化される。
MPIスレッドベースプログラムを適切に処理するには、MPIプロセスをスレッドに変換することを可能とする特定のライブラリを利用する必要があると考えられる。このようなライブラリには、MPIプロセスを初期化する際、または、MPI実行環境をビルドする際に特定の機能を呼び出すコードが含まれ得る。例えば、ライブラリ内のコードを用いて、MPIスレッドベースプログラムの実行中の新しいプロセスのインスタンス化を特定するとしてよい。ライブラリは、新しいプロセスのインスタンス化が特定されたことに応じて、MPIスレッドベースプログラム用の対応するスレッドをインスタンス化するためのコードを呼び出すとしてよい。新しいプロセスのインスタンス化は、MPIプロセスを発生させるMPI_Initコマンドに応じて起こることによって特定されるとしてよい。MPI_Initコマンド用のコードは、新しいMPIプロセスを発生させる代わりに、スレッドをインスタンス化することができる。そして、スレッドは、元のMPIソースコードプログラムで初期化されているMPIプロセスによって実行されるはずであった機能を実行することができる。
MPIプロセスに変わってMPI機能を実行するスレッドは、MPI_Initコマンドに応じて、または、これよりも早くMPI実行環境がビルドされた場合に、作成することができる。例えば、mpiexecコマンドを用いてMPI実行環境を初期化するとしてよく、mpiexecコマンドに応じて多くのスレッドをインスタンス化することができる。これらのスレッドがインスタンス化された後、MPI_Initが呼び出されて新しいプロセスをインスタンス化すると、MPI_Initコマンド用のコードが、既にあるスレッドのうち1つをマッピングして、MPIプロセスの代わりに機能を実行することができる。
MPIプロセスのスレッドベース実装で問題となり得る別の種類の条件に、ファイル入出力(I/O)がある。複数の異なるプロセスが1つの共通のファイルに対して読み書きを行うと、オペレーティングシステムのファイルシステムコンポーネントが通常、ファイルI/Oの調整を行って、複数の異なるプロセスによる動作の順序を適切に決定する。これらのプロセスがスレッドに変換されると、ファイルI/Oユニットへのアクセス試行または複数の異なるスレッドによる処理は、アプリケーションレベルにおける複数の異なるファイルに関連するもののように扱う必要がある。ファイルI/Oを調整するためには適切なライブラリによるサポートが必要となり得る。このようなライブラリには、例えば、第1のスレッドによる第1のファイルに対するアクセスを特定して、第1のスレッドには第1のファイルハンドルを介して第1のファイルにアクセスさせて、第2のスレッドによる第1のファイルへのアクセスを特定して、第2のスレッドには第2のファイルハンドルを介して第1のファイルにアクセスさせるコードが含まれ得る。尚、第1のファイルハンドルおよび第2のファイルハンドルは、互いに異なる。
問題コードが特定されてMPIソースコードプログラム用のオブジェクトコードが通常通り生成される場合、「MPIソースコードプログラムを変換するコマンドを拒否して、MPIソースコードプログラム用のオブジェクトコードを通常通り生成」するステップ425から、「実行コードをビルドするのに適切なライブラリを特定」するステップ440に進む。この場合、使用されるライブラリは、マルチスレッディング機能を持つ必要はなく、MPIソースコードプログラムの実行バージョンをビルドする際に通常必要とされるライブラリでなければならない。
そして、「実行コードをビルドするのに適切なライブラリを特定」するステップ440から、「特定されたライブラリを用いて実行コードをビルド」するステップ450に進む。MPIソースコードプログラムの実行バージョンは、特定されたライブラリを用いてビルドされる。MPIソースコードプログラムの実行バージョンは、問題コードが見つからなかった場合には、MPIスレッドベースプログラムであってよい。または、実行バージョンは、問題コードが見つかった場合には、MPIソースコードプログラム用に通常生成されるオブジェクトコードからビルドされるとしてもよい。
複数の別個のMPIプロセスではなくスレッドがインスタンス化されると、図2を参照しつつ説明したように、スレッド間で直接データを転送することができ、図1を参照しつつ説明したように共有メモリセグメントとの間で複製動作を実行する必要がなくなる。第1のスレッドから第2のスレッドへのデータ転送は、MPIスレッドベースプログラムの実行バージョンの実行中に、第1のプライベート変数の内容を第2のスレッドに直接提供することによって行われるとしてよい。このような第1のスレッドから第2のスレッドへのデータ転送は、データ転送に共有メモリセグメントを利用しない。
本発明に係るコンバータが実行する変換プロセスは自動である。図3のMPIソースコードプログラム362用のソースコードは、MPIスレッドベースプログラム366としてスレッドを用いた実行可能プログラムを生成する上で、変更する必要がない。MPIソースコードプログラム362をスレッドベースパラダイムに自動変換することによって、MPIスレッドベースプログラム366は、マルチプロセッサ環境で提供されているスレッディング機能を始めとするスレッド間データ転送の効果を得ることができる。この自動変換は、現在の技術水準において通常必要とされている技術とは対照的に、上述したようにMPIソースコードプログラムを書き換えることによって、スレッディング機能を利用するべく、MPIソースコードプログラムを変換する。例えば、共有メモリまたはクラスタの環境においてMPI機能を実現する試みにおいて、カリフォルニア大学サンタバーバラ校の研究者は、MPI環境におけるスレッディングについてコンパイル時間および実行時間が共にサポートされているTMPIと呼ばれる技術を開発した。コンパイル時間の変換には、C言語コードにおいてグローバル変数およびスタティック変数の利用を避けるべく、スレッド固有データ構造を採用する。実行時間サポートは、ロック・フリー・キュー管理方式に基づくポイント・ツー・ポイント通信プロトコルを含む。しかし、このポイント・ツー・ポイント通信プロトコルを利用するにはソースコードプログラムを修正しなければならず、修正されていないソースコードプログラムを自動変換して、スレッディング機能を用いるMPI環境で実行することはできない。
図5は、本発明の実施形態例の特定の側面が実施される適切なデータ処理環境501を示すブロック図である。データ処理環境501は、図5ではプロセッサ510Aおよび510Bとして図示されている1以上のプロセッサまたは中央演算処理装置(CPU)を有する処理システム500を備える。図示しているプロセッサは2つであるが、処理システム500のプロセッサ機能は1つのプロセッサまたは任意の数のプロセッサによって提供されるとしてもよいことは当業者であれば想到するであろう。プロセッサ510Aおよび510Bはそれぞれ、シングルコアプロセッサまたはマルチコアプロセッサであってよい。プロセッサ510Aおよび510Bは、1以上のシステムバス540またはその他の通信経路あるいは通信媒体を介して、メモリ520を含むほかのさまざまな構成要素と通信可能に結合されるものとして図示されている。また、プロセッサ510Aおよび510Bは、HyperTransportリンクまたはインテルのQuickPath Interconnect(QPI)といったポイント・ツー・ポイントプロセッサインターコネクト511を介して接続されるものとしても図示されている。
コンバータ560は、図3および図4を参照しつつ上述したように、MPIソースコードプログラムをMPIスレッドベースプログラムへと変換する。コンバータ560は、メモリ520内でプロセッサ510Aおよび/またはプロセッサ510Bに実行される命令として実装されるとしてよい。
本明細書で用いる場合、「処理システム」および「データ処理システム」といった用語は、1つのマシンまたは共に動作する互いに通信可能に結合された複数のマシンまたはデバイスを含むシステムを広く含むものとする。処理システムの例を挙げると、これらに限定されないが、分散型演算システム、スーパーコンピュータ、高性能演算システム、演算クラスタ、メインフレームコンピュータ、ミニコンピュータ、クライアント−サーバシステム、パーソナルコンピュータ、ワークステーション、サーバ、ポータブル・コンピュータ、ノート型コンピュータ、タブレット、電話、携帯情報端末(PDA)、ハンドヘルドデバイス、オーディオデバイスおよび/またはビデオデバイス等の娯楽用デバイス、ならびにその他の情報処理デバイスまたは情報伝送デバイスが含まれる。
処理システム500は、従来の入力デバイス、例えば、キーボード、マウス等からの入力によって、および/または、別のマシン、バイオメトリクスフィードバック、あるいはその他の入力源または入力信号から受信するコマンドによって、少なくとも部分的に、制御されるとしてよい。処理システム500は、例えば、ネットワークインターフェースコントローラ(NIC)550、モデム、または、その他の通信ポートあるいは通信結合部等を介して、1以上のリモートデータ処理システム(不図示)に対する1以上の接続を利用するとしてよい。
処理システム500は、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)、イントラネット、インターネット等の物理ネットワークおよび/または論理ネットワーク502を用いて、別の処理システム(不図示)に相互接続されるとしてもよい。ネットワーク502を介した通信は、さまざまな有線形式および/または無線形式の短距離または長距離用キャリアおよびプロトコルを利用するとしてよく、高周波(RF)通信、衛星通信、マイクロ波通信、米国電気電子学会(IEEE)802.11、Bluetooth(登録商標)、光通信、赤外線通信、ケーブル通信、レーザ通信等が含まれる。
処理システム500内において、プロセッサ510Aおよび510Bは、メモリ520等、1以上の揮発性または不揮発性のデータ格納デバイスと通信可能に結合されているとしてもよい。プロセッサ510Aおよび510Bは、システムバス540およびインターコネクト541a、541b、および541mを介して、メモリ520に接続されている。メモリ520は、RAM(ランダムアクセスメモリ)、ROM(リードオンリーメモリ)、IDE(Integrated Drive Electronics)ハードドライブ等の大容量記憶装置、および/または、その他のデバイスあるいは媒体、例えば、フロッピー(登録商標)ディスク、光学ストレージ、テープ、フラッシュメモリ、メモリスティック、デジタルビデオディスク、生物学的ストレージ等を含むとしてよい。本開示では、「ROM」という用語は概して、EPROM(消去可能プログラム可能ROM)、EEPROM(登録商標)(電気的消去可能プログラム可能ROM)、フラッシュROM、フラッシュメモリ等の不揮発性メモリデバイスを意味するべく用いられるとしてよい。プロセッサ510Aおよび510Bはさらに、ビデオコントローラ、小型計算機システムインターフェース(SCSI)コントローラ、ネットワークコントローラ、ユニバーサルシリアルバス(USB)コントローラ、キーボードおよびマウス等の入力デバイス等の追加構成要素に通信可能に結合されているとしてもよい。処理システム500はさらに、さまざまなシステム構成要素を互いに通信可能に結合するべく、メモリコントローラハブ、入出力(I/O)コントローラハブ、PCIルートブリッジ等の1以上のブリッジまたはハブを有するとしてよい。本明細書で使用する場合、「バス」という用語は、共通通信経路およびポイント・ツー・ポイント経路を意味するべく利用されるとしてよい。システムバス540はさらに、インターコネクト541nを介して、ネットワークインターフェース550に対するアクセスを提供する。
例えばNIC等、一部の構成要素は、バスと通信するためのインターフェース(例えば、PCIコネクタ)を有するアダプタカードとして実現されるとしてよい。一実施形態によると、1以上のデバイスは、プログラム可能あるいはプログラム不可能なロジックデバイスあるいはロジックアレイ、特定用途向け集積回路(ASIC)、組み込みコンピュータ、スマートカード等の構成要素を用いて、組み込みコントローラとして実現されるとしてよい。
本明細書に開示したメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはこのような実装技術の組み合わせによって実装されるとしてよい。本発明の実施形態は、少なくとも1つのプロセッサと、データストレージシステム(揮発性および不揮発性のメモリおよび/またはストレージ素子を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラム可能なシステムで実行されるコンピュータプログラムとして実装されるとしてよい。
プログラムコードを入力データに適用して、本明細書に記載した機能を実行して出力情報を生成するとしてよい。本発明の実施形態はさらに、本発明に係る処理を実行するための命令を格納している機械アクセス可能媒体、または、本明細書に記載した構造、回路、装置、プロセッサ、および/またはシステム特徴を定義しているHDL等の設計データを格納している機械アクセス可能媒体を含む。このような実施形態をプログラム製品と呼ぶとしてもよい。
上述した機械アクセス可能格納媒体は、これらに限定されないが、マシンまたはデバイスによって製造または形成された粒子の有形な配列を含むとしてよい。例えば、ハードディスク等の格納媒体、フロッピー(登録商標)ディスク、光ディスク、CD−ROM(コンパクトディスクリードオンリーメモリ)、CR−RW(コンパクトディスクリライタブル)、および光磁気ディスクを含む任意のその他の種類のディスク、ROM(リードオンリーメモリ)等の半導体デバイス、DRAM(ダイナミックランダムアクセスメモリ)およびSRAM(スタティックランダムアクセスメモリ)等のRAM(ランダムアクセスメモリ)、EPROM(消去可能プログラム可能リードオンリーメモリ)、FLASH(フラッシュプログラム可能メモリ)、EEPROM(登録商標)(電気的消去可能プログラム可能リードオンリーメモリ)、磁気カードあるいは光カード、または、電子的な命令を格納するのに適している任意のその他の種類の媒体を含むとしてよい。
出力情報は、公知の方法で、1以上の出力デバイスに適用されるとしてよい。本願では、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを備えるシステムであればどのようなものも含む。
プログラムは、処理システムと通信するべく、高級プロシージャプログラミング言語またはオブジェクト指向型プログラミング言語で実装されるとしてよい。また、プログラムは、所望の場合は、アセンブリ言語またはマシン語で実装されるとしてもよい。実際には、本明細書に記載したメカニズムの範囲は、任意の特定のプログラミング言語に限定されるものではない。いずれの場合も、コンパイラ型言語またはインタープリタ型言語であってよい。
本明細書では、MPIソースコードプログラムからMPIスレッドベースプログラムへの変換を自動的に行う方法およびシステムの実施形態を提示している。本発明の具体的な実施形態を図示および説明しているが、本願特許請求の範囲から逸脱することなくそれらの実施形態を多くの点で変更、変形、修正することができるのは、当業者には明らかである。したがって、当業者であれば、本発明をより広く見た場合、その範囲から逸脱することなく、変更および変形が可能であることに想到するであろう。本願特許請求の範囲は、本発明の真の範囲および精神に含まれる変更、変形、および修正をすべて包含するものとする。

Claims (15)

  1. MPIソースコードプログラムをMPIスレッドベースプログラムに変換するコマンドに応じて、プロセッサで実行されるコンバータが、
    前記MPIソースコードプログラムのグローバル変数をスレッドプライベート変数として宣言して、第1のスレッドについて第1のプライベート変数を作成し、第2のスレッドについて第2のプライベート変数を作成して、
    前記MPIスレッドベースプログラムの実行バージョンをビルドするべく利用されるライブラリを特定して、
    特定された前記ライブラリを用いて前記MPIスレッドベースプログラムの前記実行バージョンをビルドする
    ことを含む方法。
  2. 第2のプロセッサ上で前記MPIスレッドベースプログラムの前記実行バージョンが実行されている間に、前記第1のプライベート変数の内容を前記第2のスレッドに直接提供することによって、前記第1のスレッドから前記第2のスレッドへとデータを転送することをさらに含む請求項1に記載の方法。
  3. 前記第1のスレッドから前記第2のスレッドへと前記データを転送する場合において、前記データの転送には共有メモリセグメントを利用しない請求項2に記載の方法。
  4. 特定された前記ライブラリは、マルチスレッディングをサポートする請求項1に記載の方法。
  5. 無名共通ブロック内のデータが、前記MPIソースコードプログラムの第1のコンポーネントによってアクセスされた場合には第1のサイズを持ち、前記MPIソースコードプログラムの第2のコンポーネントによってアクセスされた場合には第2のサイズを持ち、前記第1のサイズおよび前記第2のサイズは互いに異なるという第1の条件、
    無名共通ブロック内のデータが、前記MPIソースコードプログラムの第1のコンポーネントによってアクセスされた場合には第1のレイアウトを持ち、前記MPIソースコードプログラムの第2のコンポーネントによってアクセスされた場合には第2のレイアウトを持ち、前記第1のレイアウトおよび前記第2のレイアウトは互いに異なるという第2の条件、
    前記MPIソースコードプログラムのコンポーネントが、前記コンポーネントの第1のインスタンスから前記コンポーネントの第2のインスタンスへと値を維持する変数を持つという第3の条件、
    前記プロセッサの状態に依存する第4の条件、および
    前記プロセッサの制御ワードの状態に依存する第5の条件
    のうち1つがあるか否か、前記MPIソースコードプログラムを調べることと、
    前記第1、第2、第3、第4、および第5の条件のうち1つを見つけると、前記MPIソースコードプログラムを変換する前記コマンドを拒否することと
    をさらに含む請求項1に記載の方法。
  6. 特定された前記ライブラリはコードを含み、前記コードは、前記MPIスレッドベースプログラムが実行されている間に、
    前記第1のスレッドによる第1のファイルへのアクセスを特定して、
    第1のファイルハンドルを介して前記第1のスレッドに前記第1のファイルへとアクセスさせ、
    前記第2のスレッドによる前記第1のファイルへのアクセスを特定して、
    第2のファイルハンドルを介して前記第2のスレッドに前記第1のファイルへとアクセスさせ、
    前記第1のファイルハンドルおよび前記第2のファイルハンドルは互いに異なる請求項1に記載の方法。
  7. 特定された前記ライブラリはコードを含み、前記コードは、前記MPIスレッドベースプログラムが実行されている間に、
    新しいプロセスのインスタンス化を特定して、
    前記新しいプロセスの前記インスタンス化を特定することに応じて、前記MPIスレッドベースプログラム用の対応するスレッドをインスタンス化させる請求項1に記載の方法。
  8. 少なくとも1つのプロセッサと、
    前記プロセッサ上で実行されるコンバータ用の命令を有するメモリと
    を備え、
    前記命令は、MPIソースコードプログラムをMPIスレッドベースプログラムに変換するコマンドに応じて、
    前記MPIソースコードプログラムのグローバル変数をスレッドプライベート変数として宣言して、第1のスレッドについて第1のプライベート変数を作成し、第2のスレッドについて第2のプライベート変数を作成して、
    前記MPIスレッドベースプログラムの実行バージョンをビルドするべく利用されるライブラリを特定して、
    特定された前記ライブラリを用いて前記MPIスレッドベースプログラムの前記実行バージョンをビルドする
    ための命令であるシステム。
  9. 前記メモリはさらに、第2のプロセッサ上で前記MPIスレッドベースプログラムの前記実行バージョンが実行されている間に、前記第1のプライベート変数の内容を前記第2のスレッドに直接提供することによって、前記第1のスレッドから前記第2のスレッドへとデータを転送するための命令を有する請求項8に記載のシステム。
  10. 前記第1のスレッドから前記第2のスレッドへと前記データを転送する場合において、前記データの転送には共有メモリセグメントを利用しない請求項9に記載のシステム。
  11. 特定された前記ライブラリは、マルチスレッディングをサポートする請求項8に記載のシステム。
  12. 前記コンバータ用の前記命令はさらに、
    無名共通ブロック内のデータが、前記MPIソースコードプログラムの第1のコンポーネントによってアクセスされた場合には第1のサイズを持ち、前記MPIソースコードプログラムの第2のコンポーネントによってアクセスされた場合には第2のサイズを持ち、前記第1のサイズおよび前記第2のサイズは互いに異なるという第1の条件、
    無名共通ブロック内のデータが、前記MPIソースコードプログラムの第1のコンポーネントによってアクセスされた場合には第1のレイアウトを持ち、前記MPIソースコードプログラムの第2のコンポーネントによってアクセスされた場合には第2のレイアウトを持ち、前記第1のレイアウトおよび前記第2のレイアウトは互いに異なるという第2の条件、
    前記MPIソースコードプログラムのコンポーネントが、前記コンポーネントの第1のインスタンスから前記コンポーネントの第2のインスタンスへと値を維持する変数を持つという第3の条件、
    前記プロセッサの状態に依存する第4の条件、および
    前記プロセッサの制御ワードの状態に依存する第5の条件
    のうち1つがあるか否か、前記MPIソースコードプログラムを調べ、
    前記第1、第2、第3、第4、および第5の条件のうち1つを見つけることに応じて、前記MPIソースコードプログラムを変換する前記コマンドを拒否するための命令を含む請求項8に記載のシステム。
  13. 特定された前記ライブラリはコードを含み、前記コードは、前記MPIスレッドベースプログラムが実行されている間に、
    前記第1のスレッドによる第1のファイルへのアクセスを特定して、
    第1のファイルハンドルを介して前記第1のスレッドに前記第1のファイルへとアクセスさせ、
    前記第2のスレッドによる前記第1のファイルへのアクセスを特定して、
    第2のファイルハンドルを介して前記第2のスレッドに前記第1のファイルへとアクセスさせ、
    前記第1のファイルハンドルおよび前記第2のファイルハンドルは互いに異なる請求項8に記載のシステム。
  14. 特定された前記ライブラリはコードを含み、前記コードは、前記MPIスレッドベースプログラムが実行されている間に、
    新しいプロセスのインスタンス化を特定して、
    前記新しいプロセスの前記インスタンス化を特定することに応じて、前記MPIスレッドベースプログラム用の対応するスレッドをインスタンス化させる請求項8に記載のシステム。
  15. MPIソースコードプログラムをMPIスレッドベースプログラムに変換するコマンドに応じる手段
    を備え、
    前記手段は、
    前記MPIソースコードプログラムのグローバル変数をスレッドプライベート変数として宣言して、第1のスレッドについて第1のプライベート変数を作成し、第2のスレッドについて第2のプライベート変数を作成する手段と、
    前記MPIスレッドベースプログラムの実行バージョンをビルドするべく利用されるライブラリを特定する手段と、
    特定された前記ライブラリを用いて前記MPIスレッドベースプログラムの前記実行バージョンをビルドする手段と
    を有する装置。
JP2010140737A 2009-06-30 2010-06-21 Mpiソースコードプログラムからmpiスレッドベースプログラムへの自動変換 Expired - Fee Related JP5111567B2 (ja)

Applications Claiming Priority (2)

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

Publications (2)

Publication Number Publication Date
JP2011014137A true JP2011014137A (ja) 2011-01-20
JP5111567B2 JP5111567B2 (ja) 2013-01-09

Family

ID=42768120

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010140737A Expired - Fee Related JP5111567B2 (ja) 2009-06-30 2010-06-21 Mpiソースコードプログラムからmpiスレッドベースプログラムへの自動変換

Country Status (4)

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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015125503A (ja) * 2013-12-25 2015-07-06 富士通株式会社 マルチプロセッサ用プログラム生成方法、マルチプロセッサ装置およびマルチプロセッサ用ファームウェア

Families Citing this family (12)

* 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
CN103019844B (zh) * 2012-12-05 2016-05-04 北京奇虎科技有限公司 一种支持多线程调用mpi函数的方法和装置
CN103019843B (zh) * 2012-12-05 2016-05-11 北京奇虎科技有限公司 Mpi函数调用方法和装置
US9250877B2 (en) * 2013-09-20 2016-02-02 Cray Inc. Assisting parallelization of a computer program
EP3274829A4 (en) 2015-03-26 2018-11-21 Intel Corporation Cross-level prefetch for shared multi-level libraries
CN106445656B (zh) * 2016-09-06 2019-10-11 北京邮电大学 一种实现线程本地存储的方法及装置
CN108733432B (zh) * 2017-04-14 2021-12-21 创新先进技术有限公司 编程环境下私有方法的实现方法、调用方法及其装置
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 프로그램 변환 방법 및 장치
US10963323B2 (en) * 2018-10-25 2021-03-30 Sangyung University Industry-Academy Cooperation Foundation Method and apparatus for transformation of MPI programs for memory centric computers
CN112202628B (zh) * 2020-09-08 2022-09-02 杭州涂鸦信息技术有限公司 一种WiFi模块串口协议自动化测试系统及方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0816429A (ja) * 1994-04-28 1996-01-19 Toshiba Corp 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置
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
JP2004164582A (ja) * 2002-09-24 2004-06-10 Ricoh Co Ltd 情報処理装置およびプログラム生成方法
JP2008123315A (ja) * 2006-11-14 2008-05-29 Sony Corp 情報処理装置およびその方法、並びにプログラム
JP2009514098A (ja) * 2005-10-26 2009-04-02 マイクロソフト コーポレーション 静的に検証可能なプロセス間通信の分離プロセス

Family Cites Families (20)

* 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
US6782537B1 (en) * 1999-09-23 2004-08-24 International Business Machines Corporation Establishing a communicator across multiple processes in a multithreaded computing environment
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
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
CN1300699C (zh) * 2004-09-23 2007-02-14 上海交通大学 并行程序可视化调试方法
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
US8286196B2 (en) * 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
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
JP5624480B2 (ja) * 2008-03-11 2014-11-12 ユニバーシティ・オブ・ワシントン 効率的な決定論的マルチプロセッシング(deterministicmultiprocessing)
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 (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0816429A (ja) * 1994-04-28 1996-01-19 Toshiba Corp 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置
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
JP2004164582A (ja) * 2002-09-24 2004-06-10 Ricoh Co Ltd 情報処理装置およびプログラム生成方法
JP2009514098A (ja) * 2005-10-26 2009-04-02 マイクロソフト コーポレーション 静的に検証可能なプロセス間通信の分離プロセス
JP2008123315A (ja) * 2006-11-14 2008-05-29 Sony Corp 情報処理装置およびその方法、並びにプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015125503A (ja) * 2013-12-25 2015-07-06 富士通株式会社 マルチプロセッサ用プログラム生成方法、マルチプロセッサ装置およびマルチプロセッサ用ファームウェア

Also Published As

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

Similar Documents

Publication Publication Date Title
JP5111567B2 (ja) Mpiソースコードプログラムからmpiスレッドベースプログラムへの自動変換
Huang et al. Programming and runtime support to blaze FPGA accelerator deployment at datacenter scale
Kotni et al. Faastlane: Accelerating {Function-as-a-Service} Workflows
EP2143001B1 (en) Master and subordinate operating system kernels for heterogeneous multiprocessor systems
Nightingale et al. Helios: heterogeneous multiprocessing with satellite kernels
JP6006230B2 (ja) 組み合わせたcpu/gpuアーキテクチャシステムにおけるデバイスの発見およびトポロジーのレポーティング
US8239524B2 (en) Techniques for dynamically assigning jobs to processors in a cluster based on processor workload
US9396021B2 (en) Techniques for dynamically assigning jobs to processors in a cluster using local job tables
US9384042B2 (en) Techniques for dynamically assigning jobs to processors in a cluster based on inter-thread communications
US20080244507A1 (en) Homogeneous Programming For Heterogeneous Multiprocessor Systems
Fumero et al. Dynamic application reconfiguration on heterogeneous hardware
US8122132B2 (en) Techniques for dynamically assigning jobs to processors in a cluster based on broadcast information
US20080244222A1 (en) Many-core processing using virtual processors
US8972702B2 (en) Systems and methods for power management in a high performance computing (HPC) cluster
JP5957006B2 (ja) 拡張可能なデータ並列セマンティクス
EP1955157A1 (en) Compiler-based scheduling optimizations for user-level threads
US9122541B2 (en) System and method for thread protected testing
US20130061231A1 (en) Configurable computing architecture
KR20060045952A (ko) 다중-프로세서 구조에서 데이터 처리 수행성능을증가시키기 위한 분산 운영 시스템 및 그 방법
KR20230138031A (ko) 다중 아키텍처 이기종 컴퓨팅을 위한 실행 코드의 동적 할당
Thomadakis et al. Toward runtime support for unstructured and dynamic exascale-era applications
Diehl et al. Integration of CUDA Processing within the C++ Library for Parallelism and Concurrency (HPX)
JP2009211167A (ja) プログラム実行システム
Cabezas et al. Runtime and architecture support for efficient data exchange in multi-accelerator applications
Barbalace et al. Towards operating system support for heterogeneous-isa platforms

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120502

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120529

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120822

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120911

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121009

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151019

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees