JP3601341B2 - 並列プログラム生成方法 - Google Patents
並列プログラム生成方法 Download PDFInfo
- Publication number
- JP3601341B2 JP3601341B2 JP03156899A JP3156899A JP3601341B2 JP 3601341 B2 JP3601341 B2 JP 3601341B2 JP 03156899 A JP03156899 A JP 03156899A JP 3156899 A JP3156899 A JP 3156899A JP 3601341 B2 JP3601341 B2 JP 3601341B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- loop
- intermediate language
- processor
- program
- 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 - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/451—Code distribution
- G06F8/452—Loops
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
- Complex Calculations (AREA)
Description
【発明の属する技術分野】
本発明は、ソースプログラムから並列化コンパイラを用いて並列プログラムを生成する方法に係わり、特にデータ分散によるデータローカリティ最適化を行うことが可能な並列プログラム生成方法およびそのプログラムを格納した記録媒体に関する。
【0002】
【従来の技術】
分散共有メモリ型並列計算機の論理共有物理分散メモリを実現する方法の一つとして、論理共有の仮想メモリ空間をページと呼ばれる単位毎に切り分けて、物理的に分散されたメモリに割り付ける方法がある。このとき、どのページをどのプロセッサに割り付けるかを決定する方法として、以下の2つが知られている。その1つは、データが初めて参照された時にそのデータ含むページをそのデータを参照したプロセッサのメモリに割り付けるファーストタッチ方式と呼ばれるデータ分散方法である。もう1つは、明示的にデータ分散指示文によりデータ分散形状を指定するデータ分散方法である。
例えば、図9に示すような逐次実行用ソースプログラム11が入力された場合、プロセッサ数を4台とし、ページサイズを配列要素5つ分としてファーストタッチ方式のデータ分散に従うと、配列Aの各要素は初めて参照される手続きinitの初期化ループ(図9の23行目から25行目)により、図10(a)に示すようにpe0にA(1:25)、pe1にA(26:50)、pe2にA(51:75)、pe3にA(76:100)が割り付けられる。なお、pe0はプロセッサ0を示し、pe1はプロセッサ1を示し、pe2はプロセッサ2を示し、pe3はプロセッサ3を示す。このように、従来のデータの分散状況は、1:100ページサイズを各プロセッサpe0〜3に平等に分散している。
【0003】
また、データ分散指示文”c$distribute A(block)”をプログラムの宣言部(例えば、後述の図11の4行目から7行目を、1:25、26:50、51:75、76:100に指定した場合)に挿入すれば、図10(a)と同様に各プロセッサpe0〜pe3に平等のデータ分散がされる。
上記のファーストタッチ方式によるデータ分散方法、及びデータ分散指示文によるデータ分散方法は、例えば、文献、Rohit Chandra, Ding−Kai Chen, Robert Cox, Dror E. Maydan, Nedeljkovic, Jennifer M. Anderson著の”Data Distribution Support on Distributed Shared Memory Multiprocessors”, SIGPLAN’97 Conference on Programming Language Design and Implementation, (PLDI)Las Vegas, NV, june 15−18, 1997, pp.334−345に記載されている。
【0004】
【発明が解決しようとする課題】
上述のように、従来のファーストタッチ方式データ分散方法では、初期化ループでのデータアクセスパターンがカーネルループ(全プログラムの中で最も実行時間の長いループ)でのデータアクセスパターンと一致しない場合は、カーネルループでのデータローカリティを悪化させ、並列プログラムの処理速度向上を妨げる原因の一つとなっていた。例えば、図11(a)に示すようにプログラムが4つのプセッサpe0〜3に平等に分散されている場合、特に図9の33行目から35行目の1:60のカーネルループのサブルーチンが10000回繰り返し実行されるときには、これらが全て実行するプロセッサpeの場所に配置されていないと、遠い場所にアクセスして取り込まなければならないため、処理速度は遅くなる。
【0005】
また、上記従来のデータ分散指示文によるデータ分散方法では、指示文で表現することが困難なデータ分散が存在し、最適なデータ分散を実現することができないため、データローカリティを悪化させ、並列プログラムの処理速度向上を妨げる原因の一つとなっていた。
例えば、図9に示すような逐次実行用ソースプログラム11が入力された場合、プロセッサ数4台でファーストタッチ方式データ分散に従えば、配列Aの各要素は初めて参照される手続きinitの初期化ループ(図9の23行目から25行目)により、図10(a)に示すようにpe0にA(1:25)、pe1にA(26:50)、pe2にA(51:75)、pe3にA(76:100)が割り付けられる。ところが、手続きkernelのカーネルループ(図9の33行目から35行目)の配列Aの参照範囲は、図10(b)に示すようにpe0がA(41:55)、pe1がA(56:70)、pe2がA(71:85)、pe3がA(86:100)となり、図10(c)に示すように配列Aの(41:70)、及び(76:85)が他のプロセッサに割り付けられたデータの参照、すなわちリモート参照(R)になり、カーネルループ中の全参照の66.7%がリモート参照(R)になってしまう。図10(b)の場合、自分のプロセッサに割り付けられたデータを参照するリモート参照(L)は極めて少なく、PE3の全部とPE2の一部分のみである。
また、データ分散指示文では、図10(b)に示すようなデータ分散を指示することは困難である。
【0006】
そこで、本発明の目的は、このような従来の課題を解決し、カーネルループでの最適なデータ分散が、従来のファーストタッチ方式データ分散や、データ分散指示文によるデータ分散で実現できない場合にも、カーネルループでの最適なデータ分散を実現し、それにより、データローカリティを向上させて並列プログラムの処理速度を高速化できる並列プログラム生成方法を提供することである。
【0007】
【課題を解決するための手段】
上記目的を達成するため、本発明の並列プログラム生成方法では、並列化実施ループを検出し、カーネルループを検出し、次にファーストタッチ制御コードを生成し、そのファーストタッチ制御コードを実行文の先頭、又はカーネルループの直前に挿入した並列プログラムを生成する。これにより、図9に示すような逐次実行用ソースプログラム11が入力された場合、図10(d)に示すようにプロセッサpe0にA(1:25)、及びA(41:55)、pe1にA(26:40)、及びA(56:70)、pe2にA(71:85)、pe3にA(86:100)が割り付けられる。これにより、カーネルループでのデータローカリティを向上させることができ、その結果、並列プログラムの処理速度を高速化できる。
また、本発明の並列プログラム生成方法では、プロファイル情報、又はコンパイラ静的解析情報、又はユーザ指示情報を取得し、ファーストタッチ制御コードを生成し、ファーストタッチ制御コードを実行文の先頭に挿入した並列プログラムを生成する。
さらに、本発明の並列プログラム生成方法では、プロファイル情報、又はコンパイラ静的解析情報、又はユーザ指示情報を取得し、ページ割り付け情報を生成し、ページ割り付け情報を挿入したオブジェクトプログラムを生成する。
【0008】
【発明の実施の形態】
(用語と図面の対応関係)
最初に、以下の実施例で用いる用語、および図面との対応関係について説明する。
▲1▼並列化コンパイラ2とは、高級言語で記述された逐次実行用ソースプログラム1を入力し、並列実行用の並列プログラム3を出力するコンパイラを示す(図1参照)。
▲2▼プログラム先頭版ファーストタッチ制御方法とは、カーネルループと同じデータアクセスパターンを再現するループを、実行文の先頭に挿入してファーストタッチ方式データ分散を制御する方法を指す(図2参照)(第1の実施例)。
▲3▼ループ直前版ファーストタッチ制御方法とは、カーネルループと同じデータアクセスパターンを再現しながら、データ分散対象配列のデータをデータ分散対象配列と同じ配列形状を有するクローン配列にコピーするループを、カーネルループの直前に挿入することによりファーストタッチ方式データ分散を制御する方法を指す(図3参照)(第2の実施例)。
【0009】
▲4▼プロファイル情報版ファーストタッチ制御方法とは、プロファイル情報を基に各ページの最も参照回数の多いプロセッサに参照させるループを、実行文の先頭に挿入してファーストタッチ方式データ分散を制御する方法を指す(図4参照)(第3の実施例)。なお、プロファイル情報とは、1回実行させて取得した種々の情報であり、どの点を参照したかを示す情報である。
▲5▼静的解析情報版ファーストタッチ制御方法とは、コンパイラの静的解析情報を基に各プロセッサに割り付けたいページの配列要素を参照させるループを、実行文の先頭に挿入してファーストタッチ方式データ分散を制御する方法を指す(図5参照)(第4の実施例)。なお、静的解析情報とは、コンパイラを実行させなくても判別できる解析情報である。
▲6▼ユーザ指示情報版ファーストタッチ制御方法とは、ユーザ指示情報を基に各プロセッサに割り付けたいページの配列要素を参照させるループを、実行文の先頭に挿入してファーストタッチ方式データ分散を制御する方法を指す(図5参照)(第5の実施例)。なお、ユーザ指示情報とは、コンパイラが自分で解析しなくても、ユーザから指示してもらう情報である。静的解析情報版ファーストタッチ制御方法とは、同じフローでよく、静的解析情報の代りにユーザ指示の配列参照範囲テーブル等を参照することにより行う。
【0010】
▲7▼プロファイル情報版データ分散制御方法とは、プロファイル情報から得た各ページの最も参照回数の多いプロセッサの情報をオブジェクトコードに挿入してオペレーティングシステムに最適なデータ分散を実現させる方法を指す(図6参照)(第6の実施例)。この方法は、オブジェクトコードをプログラムコードの下欄に挿入することにより、OS(オペレーティングシステム)はそれに従って割り付ける。
▲8▼静的解析情報版データ分散制御方法とは、コンパイラの静的解析情報から得た各プロセッサに割り付けたいページの情報をオブジェクトコードに挿入してオペレーティングシステムに最適なデータ分散を実現させる方法を指す(図7参照)(第7の実施例)。この方法は、上記プロファイル情報の代りに静的解析情報を用いてオブジェクトコードに挿入する点のみが異なる。
▲9▼ユーザ指示情報版データ分散制御方法とは、ユーザ指示情報から得た各プロセッサに割り付けたいページの情報をオブジェクトコードに挿入してオペレーティングシステムに最適なデータ分散を実現させる方法を指す(図7参照)(第8の実施例)。この方法は、上記静的解析情報の代りにユーザ指示情報を用いてオブジェクトコードに挿入する点のみが異なる。
【0011】
(実施例)
以下、本発明の実施例を、図面により詳細に説明する。
図1は、本発明の並列化コンパイラの一実施例を示す構成図である。
本発明は、計算機上で実施され、ソースプログラム1を入力として、並列プログラム3を生成する並列化コンパイラの機能、すなわち並列プログラム生成方法である。
図1において、並列化コンパイラ2は、高級言語で記述された逐次実行用ソースプログラム1を入力し、並列実行用の並列プログラム3を生成・出力し、その処理の過程で中間語25を生成する。なお、並列化コンパイラ2の出力は、以下の例ではソースプログラム形式で示すが、一般にはソースプログラム形式とは限らない。並列化コンパイラ2は、逐次ソースプログラム1を読み込み構文解析を行って中間語25を生成する構文解析部21と、中間語25から逐次ソースプログラム1のカーネルループを検出し、ファーストタッチ制御コードを生成し、ファーストタッチ制御コードを挿入して中間語25を複数個のプロセッサで並列に処理する構造を持った中間語25に変換する並列化部22と、変換された中間語25から並列プログラム3を生成して出力するコード生成部23から構成されている。
【0012】
また、並列化部22内には、入力した逐次ソースプログラム1のループ繰り返し範囲を分散する並列化実施ループの中から最も逐次実行時間が大きいカーネルループを検出するカーネルループ検出部4と、解析情報24として入力プログラムを並列実行して得たページ毎の参照回数や配列参照範囲を取得する解析情報取得部5と、解析情報24から各プロセッサへのデータ割り付け情報を生成するデータ割り付け情報生成部6とファーストタッチを制御するコードを生成するファーストタッチ制御コード生成部7と、ファーストタッチを制御するコードを挿入するファーストタッチ制御コード挿入部8とデータ割り付け情報を挿入するデータ割り付け情報挿入部9とを有している。
【0013】
(第1の実施例)
図2は、本発明の第1の実施例を示すプログラム先頭版ファーストタッチ制御方法の動作フローチャートである。
並列化部22が実施するプログラム先頭版ファーストタッチ制御方法を、図2に従って説明する。ここでは、図9に示す逐次ソースプログラム11が入力された場合を例に述べる。並列化部22では、まず、処理ステップ41で入力した逐次ソースプログラム11のループ繰り返し範囲を分散する並列化実施ループを検出し、並列化実施ループの中から最も逐次実行時間が大きいカーネルループを検出する。なお、処理ステップ41は、図1に示すカーネルループ検出部4で実行される。
図8は、図1におけるカーネルループ検出部の動作フローチャートであり、図18は、カーネルループ検出の際に作成されるループテーブルの図である。
図8を用いて、図2に示す処理ステップ41のカーネルループ検出処理を説明する。まず、処理ステップ411で図9の入力プログラム11中の行番号22に示すループ並列化指示文”c$para”を検出し、行番号23から行番号25の並列化実施ループを検出する。次に、処理ステップ412では、図18に示す第1番目のループテーブル812を生成する。1番目のループテーブル812には、テーブル番号911、NEXTテーブル912、ループポインタ913、カーネルループフラグ914、ファーストタッチ制御方法番号915、逐次実行時間916の各情報が含まれる。本実施例では、第1番目のループテーブル812の各項目の値として、テーブル番号911に1、NEXTテーブル912は未登録、ループポインタ913に23(図9の23行目参照)、カーネルループフラグ914にfalse、ファーストタッチ制御方法番号915は未登録、逐次実行時間916は未登録(最初の動作)が設定される。
次に、処理ステップ413で当ループの逐次実行時間を検出する(図9の23行目参照)。実行時間は、代入文を単位1として表し、ループ繰り返し回数が100であることから1×100=100とする。よって、第1番目のループテーブル812の逐次実行時間916に100を設定する。次に、処理ステップ414で他のループが存在するか否かを判定し、他にループが存在するため、処理ステップ411に戻り、上記処理を繰り返す。処理ステップ411で入力プログラム11中の行番号32に示すループ並列化指示文”c$para”を検出し、行番号33から行番号35の並列化実施ループを検出する。次に、処理ステップ412で、図18に示すような第2番目のループテーブル813を生成する。
【0014】
本例では、第2番目のループテーブル813の各項目の値として、テーブル番号911に2、NEXTテーブル912は未登録、ループポインタ913に33、カーネルループフラグ914にfalse、ファーストタッチ制御方法番号915は未登録、逐次実行時間916は未登録を設定し、第1番目ループテーブル812のNEXTテーブル912に2を設定する。次に、処理ステップ413で当ループの逐次実行時間を検出する。実行時間は、代入文を単位1として表し、ループ繰り返し回数が当手続きkernelで60、当手続きkernelの呼び出し元手続きmainにおける手続きkernelの手続き呼び出し文を含むループの繰り返し回数が10000であることから1×60×10000=600000とする。よって、第2番目のループテーブル813の逐次実行時間916に600000を設定する。
次に、処理ステップ414で他のループが存在するか否かを判定し、他にループが存在しないため、処理ステップ415に進む。処理ステップ415では、逐次実行時間が最大のループテーブル813を検出し、第2番目のループテーブル813のカーネルループフラグ914にtrueを設定し、入力プログラム11中にプログラム先頭版ファーストタッチ制御方法を指示する指示文”c$ft1”が含まれるため、図18の第2番目ループテーブル813のファーストタッチ制御方法番号915に1を設定し、本カーネルループ検出処理を終了する。
【0015】
図12は、第1の実施例で作成される出力プログラムのフォーマット図である。
再び図2に戻り、処理ステップ42でカーネルループと同じネスト(同じループ構造)、及び同じループ長となるループ構造を有するループを生成する。処理ステップ42では、図12に示す出力プログラム31の43行目に示すようなループを生成する。次に、処理ステップ43で出力プログラム31の44行目に示すようなデータ分散対象配列Aが右辺に含まれる代入文を生成し、ループ本体に挿入する。この代入文は、ファーストタッチさせるためのダミーの参照点になる。なお、処理ステップ42、及び処理ステップ43は、図1のファーストタッチ制御コード生成部7で実施される。次に、処理ステップ44では、生成した手続きft1の手続き呼び出し文を出力プログラム31の10行目に示すような実行文の先頭に挿入し、実引数はカーネル手続き呼び出しに合わせてA(41)とする。ここで、41は出力プログラム31の41行目(要素番号)を指している。 なお、処理ステップ44は、図1のファーストタッチ制御コード挿入部8で実施される。以上で、第1の実施例であるプログラム先頭版ファーストタッチ制御方法の説明を終了する。
この実施例によれば、ファーストタッチ制御コードを挿入することにより、カーネルループと同構造のループによってデータがファーストタッチで割り付けられるため、データローカリティが向上し、並列プログラムの処理速度が高速化される。
【0016】
(第2の実施例)
図3は、本発明の第2の実施例を示す並列プログラム生成方法の処理フローチャートであり、図13は並列化コンパイラが生成した出力プログラムのフォーマット図である。
以下、図1の並列化部22が実施するループ直前版ファーストタッチ制御方法について説明する。ここでは、図9に示す逐次ソースプログラム11が入力された場合を想定する。並列化部22では、まず、処理ステップ51で入力した逐次ソースプログラム11のループ繰り返し範囲を分散する並列化実施ループを検出し、並列化実施ループの中から最も逐次実行時間が大きいカーネルループを検出する。本例では、処理ステップ51は前述の処理ステップ41と同様の処理を行い、図18に示すループテーブル812、及び813を生成する。なお、処理ステップ51は、図1のカーネルループ検出部4で実施される。次に、処理ステップ52では、カーネルループと同じネスト、及び同じループ長となるループ構造を有するループを2つ生成する。処理ステップ52では、図13に示す出力プログラム32の63行目に示すようなループ、及び73行目に示すようなループを生成する。次に、処理ステップ53では、出力プログラム32の61行目、及び71行目に示すようなデータ分散対象配列Aと同じ配列形状を有するクローン配列cloneAを生成する。次に、処理ステップ54では、出力プログラム32の64行目に示すようなクローン配列cloneAが左辺、データ分散対象配列Aが右辺に含まれる代入文を生成し、1つ目のループ本体に挿入する(図13の64行目)。
【0017】
次に、処理ステップ55では、出力プログラム32の74行目に示すようなクローン配列cloneAが右辺、データ分散対象配列Aが左辺に含まれる代入文を生成し、2つ目のループ本体に挿入する(図13の74行目)。なお、処理ステップ52から処理ステップ55までは、図1のファーストタッチ制御コード生成部7で実施される。次に、処理ステップ56では、生成した手続きft21の手続き呼び出し文を、出力プログラム32中の11行目に示すようなカーネルループの直前に挿入する。次に、処理ステップ57では、出力プログラム32の13行目に示すように、手続き呼び出しの実引数をクローン配列cloneAに置換する。次に、処理ステップ58では、生成した手続きft22の手続き呼び出し文を出力プログラム32中の15行目に示すようなカーネルループの直後に挿入し、本ループ直前版ファーストタッチ制御方法を終了する。このように、第2の実施例では、クローン配列として別の1次的な配列を作り、そこに移してカーネループで行う作業を実施した後、元の配列に戻すことになる。
なお、処理ステップ56から処理ステップ58は、図1のファーストタッチ制御コード挿入部8で実施される。
本実施例によれば、ファーストタッチ制御コードを挿入することにより、カーネルループと同構造のループによってデータがファーストタッチで割り付けられるため、データローカリティが向上し、並列プログラムの処理速度が高速化される。
【0018】
(第3の実施例)
図4は、本発明の第3の実施例を示す並列プログラム生成方法の処理フローチャートであり、図14は、並列コンパイラが作成した出力プログラムのフォーマット図である。
以下、図1の並列化部22が実施するプロファイル情報版ファーストタッチ制御方法の概要を説明する。プロファイル情報とは、1回実行させて取得した種々の情報のことである。ここでは、図9に示す逐次ソースプログラム11が入力された場合を想定する。並列化部22では、まず、処理ステップ61で、プロファイル情報として図19に示す形式のページ毎の各プロセッサの参照回数を示す参照回数テーブル241を取得する。なお、参照回数テーブル241は、図1の解析情報24に含まれており、処理ステップ61は、図1の解析情報取得部5で実施される。例えば、入力プログラム11を並列に実行する際のプロセッサ数を4とし、ページサイズを配列要素5つ分の40Byteとし、さらに、配列A(1:100)は、論理共有の仮想メモリアドレスの0番地から792番地に割り付けられているとする。ページサイズは40Byteであるため、各ページの先頭アドレスは0番地、40番地、80番地、・・・と40おきになる。入力プログラム11を並列実行した場合、カーネルループにおける先頭アドレス320のページの参照回数は、pe0で50000回、pe1で0回、pe2で0回、pe3で0回となる。同様にして得られた各ページの参照回数が、参照回数テーブル241に登録されている。
【0019】
なお、参照回数テーブル241は、ページアドレス831、pe0の参照回数832、pe1の参照回数833、pe2の参照回数834、pe3の参照回数835の各情報を含み、先頭アドレス320番地のページの各プロセッサの参照回数932、先頭アドレス360番地のページの各プロセッサの参照回数933のように各ページの参照回数が含まれる。次に、処理ステップ62では、図19の参照回数テーブルから図20に示すような割り付けページアドレステーブル242を生成する。図20の割り付けページアドレステーブル242は、pe0が最も参照回数の多かったページの先頭アドレス821、pe1が最も参照回数の多かったページの先頭アドレス822、pe2が最も参照回数の多かったページの先頭アドレス823、pe3が最も参照回数の多かったページの先頭アドレス824のような情報を含む。本実施例では、図20の821にページ先頭アドレス320、360、400が登録され、図20の822にページ先頭アドレス440、480、520が登録され、図20の823にページ先頭アドレス560、600、640が登録され、図20の824にページ先頭アドレス680、720、760が登録される。
【0020】
なお、処理ステップ62は、データ割り付け情報生成部6で実施される。次に、処理ステップ63では、図14に示す出力プログラム33の52行目から57行目に示すような2重ループを生成し、52行目の外側ループのループ範囲をプロセッサ数4に合わせて0から3とし、53行目の内側ループのループ長にページ数3を設定する。次に、処理ステップ64では、出力プログラム33の54行目、55行目に示す割り付けページアドレステーブル242(図20)に登録されたページアドレスを参照する命令コードを生成し、ループ本体に挿入する。なお、処理ステップ63から処理ステップ64は、図1のファーストタッチ制御コード生成部7で実施される。次に、処理ステップ65では、生成した手続きft3の手続き呼び出し文を出力プログラム33中の3行目に示すような実行文の先頭に挿入し、プロファイル情報版ファーストタッチ制御方法を終了する。なお、処理ステップ65は、ファーストタッチ制御コード挿入部8で実施される。
本実施例によれば、ファーストタッチ制御コードを挿入することにより、各ページが最も参照回数の多いプロセッサにファーストタッチで割り付けられるため、データローカリティが向上し、並列プログラムの処理速度が高速化される。
【0021】
(第4の実施例)
図5は、本発明の第4の実施例を示す並列プログラム生成方法の処理フローチャートであり、図15は、並列化コンパイラが作成した出力プログラムのフォーマット図である。
以下、図1の並列化部22が実施する静的解析情報版ファーストタッチ制御方法の概要を説明する。ここでは、図9に示す逐次ソースプログラム11が入力された場合を想定する。並列化部22では、まず、処理ステップ71でコンパイラの静的解析情報として図21に示す形式の各プロセッサの配列参照範囲を示す配列参照範囲テーブル243を取得する。なお、配列参照範囲テーブル243は、図1の解析情報24に含まれており、処理ステップ71は、図1の解析情報取得部5で実施される。例えば、入力プログラム11を並列に実行する際のプロセッサ数が4の場合、配列参照範囲テーブル243には、各プロセッサの配列参照範囲として、pe0にA(41:55)、pe1にA(56:70)、pe2にA(71:85)、pe3にA(86:100)が登録されている。次に、処理ステップ72では、図21の配列参照範囲テーブルから図22に示すような割り付け添字テーブル244を生成する。図22の割り付け添字テーブル244は、pe0が参照するページの先頭添字841、pe1が参照するページの先頭添字842、pe2が参照するページの先頭添字843、pe3が参照するページの先頭添字844のような情報を含む。本実施例では、ページサイズを配列要素5つ分としているので、pe0が参照するページは、先頭添字が41、46、51であるような3ページである。したがって、図22の841にページ先頭添字41、46、51が登録される。
【0022】
同様にして、図22の842にページ先頭添字56、61、66が登録され、図22の843にページ先頭添字71、76、81が登録され、図22の844にページ先頭添字86、91、96が登録される。なお、処理ステップ72は、図1のデータ割り付け情報生成部6で実施する。次に、処理ステップ73では、図15に示す出力プログラム34の32行目から36行目に示すような2重ループを生成し、32行目の外側ループのループ範囲をプロセッサ数4に合わせて0から3とし、33行目の内側ループのループ長にページ数3を設定する。次に、処理ステップ74では、出力プログラム34の34行目に示す割り付け添字テーブル244に登録された添字を参照する命令コードを生成し、ループ本体に挿入する。なお、処理ステップ73から処理ステップ74は、図1のファーストタッチ制御コード生成部7で実施される。次に、処理ステップ75では、生成した手続きft4の手続き呼び出し文を出力プログラム34中の10行目に示すような実行文の先頭に挿入し、静的解析情報版ファーストタッチ制御方法を終了する。なお、処理ステップ75は、図1のファーストタッチ制御コード挿入部8で実施される。
本実施例によれば、ファーストタッチ制御コードを挿入することにより、各プロセッサにカーネルループで各プロセッサが参照するページをファーストタッチで割り付けられるため、データローカリティが向上し、並列プログラムの処理速度が高速化される。
【0023】
(第5の実施例)
次に、本発明の第5の実施例の並列プログラム生成方法を説明する。
第4の実施例と同じ図5を用いて、並列化部22が実施するユーザ指示情報版ファーストタッチ制御方法の概要を説明する。ここでは、図11に示す逐次ソースプログラム12が入力された場合を想定する。第5の実施例が第4の実施例と異なるのは、第4の実施例がコンパイラが自分で解析していたのに対して、第5の実施例では、ユーザから教えてもらうことによりコンパイラの解析を不要にしている点である。
並列化部22では、まず、処理ステップ71の代わりにユーザ指示情報として図21に示す形式の各プロセッサの配列参照範囲を示す配列参照範囲テーブル243を取得する。なお、配列参照範囲テーブル243は、図1の解析情報24に含まれており、本処理ステップは、図1の解析情報取得部5で実施される。本実施例の場合、入力プログラム12(図11)の4行目から7行目までのユーザ指示文により、配列参照範囲テーブル243には、各プロセッサの配列参照範囲として、pe0にA(41:55)、pe1にA(56:70)、pe2にA(71:85)、pe3にA(86:100)が登録されている。次に、処理ステップ72から処理ステップ75を実施し、ユーザ指示情報版ファーストタッチ制御方法を終了する。なお、処理ステップ72は、図1のデータ割り付け情報生成部6で実施され、処理ステップ73から処理ステップ74は、図1のファーストタッチ制御コード生成部7で実施され、処理ステップ75は、図1のファーストタッチ制御コード挿入部8で実施される。
本実施例によれば、ファーストタッチ制御コードを挿入することにより、各プロセッサにカーネルループで各プロセッサが参照するページをファーストタッチで割り付けられるため、データローカリティが向上し、並列プログラムの処理速度が高速化される。
【0024】
(第6の実施例)
図6は、本発明の第6の実施例を示す並列プログラム生成方法の処理フローチャートであり、図16は、第6の実施例で作成されるオブジェクトコードに付加されたテーブル例の図である。
以下、図1の並列化部22が実施するプロファイル情報版データ分散制御方法の概要を説明する。ここでは、図9に示す逐次ソースプログラム11が入力された場合を想定する。並列化部22では、まず、処理ステップ81で処理ステップ61(図4)と同様にプロファイル情報として図19に示す形式のページ毎の各プロセッサの参照回数を示す参照回数テーブル241を取得する。なお、参照回数テーブル241は、図1の解析情報24に含まれており、処理ステップ81は、図1の解析情報取得部5で実施される。次に、処理ステップ82では、処理ステップ62(図4)と同様に図20に示すような割り付けページアドレステーブル242を生成する。なお、処理ステップ82は、データ割り付け情報生成部6で実施される。次に、処理ステップ83では、図16に示すような形式で出力オブジェクトコード35に割り付けページアドレステーブル242の情報を挿入し、プロファイル情報版データ分散制御方法を終了する。ここで、オブジェクトコード内のalloc_hintの部分は、オペレーティングシステムがプログラムを実行開始するときに、ページ割り付けのためのヒントとして用いられる。例えば、1行目の0:320、360、400;は、pe0にアドレス320、360、400で指定されるページを割り付けるべきであることを意味する。なお、処理ステップ83は、図1のデータ割り付け情報挿入部9で実施される。
本実施例によれば、オペレーティングシステムにより、各ページが最も参照回数の多いプロセッサに割り付けられるため、データローカリティが向上し、並列プログラムの処理速度が高速化される。
【0025】
(第7の実施例)
図7は、本発明の第7の実施例を示す並列プログラム生成方法の処理フローチャートであり、図17は、第7の実施例で作成されたオブジェクトコードの後に挿入される付加コードの図である。
以下、図1の並列化部22が実施する静的解析情報版データ分散制御方法の概要を説明する。ここでは、図9に示す逐次ソースプログラム11が入力された場合を想定する。並列化部22では、まず、処理ステップ91で処理ステップ71(図5)と同様にコンパイラの静的解析情報として図21に示す形式の各プロセッサの配列参照範囲を示す配列参照範囲テーブル243を取得する。なお、配列参照範囲テーブル243は、図1の解析情報24に含まれており、処理ステップ91は、図1の解析情報取得部5で実施される。次に、処理ステップ92では、処理ステップ72(図5)と同様に図22に示すような割り付け添字テーブル244を生成する。なお、処理ステップ92は、データ割り付け情報生成部6で実施される。次に、処理ステップ93では、図17に示すような形式で出力オブジェクトコード36に割り付け添字テーブル244の情報を挿入し、静的解析情報版データ分散制御方法を終了する。ここで、オブジェクトコード内の$A+41*8は、配列Aの先頭アドレス$Aから41*8=328バイト上位のアドレスを表す。41は配列添字、8は1要素の長さである。なお、処理ステップ93は、図1のデータ割り付け情報挿入部9で実施される。
本実施例によれば、オペレーティングシステムにより、各プロセッサにカーネルループで各プロセッサが参照するページを割り付けられるため、データローカリティが向上し、並列プログラムの処理速度が高速化される。
【0026】
(第8の実施例)
次に、本発明の第8の実施例の並列プログラム生成方法を説明する。
第7の実施例と同じ図7を用いて、並列化部22が実施するユーザ指示情報版データ分散制御方法の概要を説明する。なお、第7の実施例と異なる点は、静的に解析して情報を取得することなく、ユーザからの指示により情報を設定すればよいことである。ここでは、図11に示す逐次ソースプログラム12が入力された場合を想定する。並列化部22では、まず、処理ステップ91に代わってユーザ指示情報として図21に示す形式の各プロセッサの配列参照範囲を示す配列参照範囲テーブル243を取得する。なお、配列参照範囲テーブル243は、図1の解析情報24に含まれており、本処理ステップは、図1の解析情報取得部5で実施される。次に、処理ステップ92から処理ステップ93を実施し、ユーザ指示情報版データ分散制御方法を終了する。なお、処理ステップ92は、図1のデータ割り付け情報生成部6で実施され、処理ステップ93は、図1のデータ割り付け情報挿入部9で実施される。図17に示すように、オブジェクトコードの後にテーブルを与えることにより、オペレーティングシステムがそれに従って割り付けてくれる。
本実施例によれば、オペレーティングシステムにより、各プロセッサにカーネルループで各プロセッサが参照するページを割り付けられるため、データローカリティが向上し、並列プログラムの処理速度が高速化される。
【0027】
以上、第1〜第8実施例を説明したが、これらの各ステップをプログラムに変換したものが、それぞれ並列プログラム生成用コンパイラである。このコンパイラをそれぞれCD−ROMや磁気ディスク等の記録媒体に格納することにより、その記録媒体を任意の場所に設置されたコンピュータにインストールして実行させれば、本発明を実現することができる。
【0028】
【発明の効果】
以上説明したように、本発明によれば、カーネルループでの最適データ分散を実現するファーストタッチ制御コードを挿入した最適並列プログラムを生成することができるので、データのローカリティが向上し、並列プログラムの処理速度が高速化できる。
【図面の簡単な説明】
【図1】本発明の一実施例を示す並列化コンパイラのブロック図である。
【図2】本発明の第1の実施例を示すプログラム先頭版ファーストタッチ制御方法の処理フロチャートである。
【図3】本発明の第2の実施例を示すループ直前版ファーストタッチ制御方法の処理フロチャートである。
【図4】本発明の第3の実施例を示すプロファイル情報版ファーストタッチ制御方法の処理フロチャートである。
【図5】本発明の第4および第5の実施例を示す静的解析情報版およびユーザ指示情報版ファーストタッチ制御方法の処理フロチャートである。
【図6】本発明の第6の実施例を示すプロファイル情報版データ分散制御方法の処理フロチャートである。
【図7】本発明の第7および第8の実施例を示す静的解析情報版およびユーザ指示情報版データ分散制御方法の処理フロチャートである。
【図8】本発明におけるカーネルループを検出する処理のフロチャートである。
【図9】本発明の入力となる逐次実行用ソースプログラムの説明図(第6の実施例以外の実施例)である。
【図10】本発明および従来における配列Aのデータ分散状況、及び参照範囲の説明図である。
【図11】本発明の入力となる逐次実行用ソースプログラムの説明図(第6の実施例)である。
【図12】本発明の出力となる並列実行用ソースプログラムの説明図(第1の実施例)である。
【図13】本発明の出力となる並列実行用ソースプログラムの説明図(第2の実施例)である。
【図14】本発明の出力となる並列実行用ソースプログラムの説明図(第3の実施例)である。
【図15】本発明の出力となる並列実行用ソースプログラムの説明図(第4の実施例)である。
【図16】本発明の出力となるオブジェクトプログラムの説明図(第7の実施例)である。
【図17】本発明の出力となるオブジェクトプログラムの説明図(第8の実施例)である。
【図18】本発明で用いられるループテーブルの説明図である。
【図19】本発明で用いられるページ毎参照回数テーブルの説明図である。
【図20】本発明で用いられる割り付けページアドレステーブルの説明図である。
【図21】本発明で用いられる配列参照範囲テーブルの説明図である。
【図22】本発明で用いられる割り付け添字テーブルの説明図である。
【符号の説明】
1…逐次プログラム、2…並列化コンパイラ、3…並列プログラム、
4…カーネルループ検出部、5…解析情報取得部、
6…データ割り付け情報生成部、7…ファーストタッチ制御コード生成部、
8…ファーストタッチ制御コード挿入部、9…データ割り付け情報挿入部、
21…構文解析部、22…並列化部、23…コード生成部、24…解析情報、
25…中間語、11,12…入力プログラム、31〜34…出力プログラム、
35,36…オブジェクトコード、812,813…ループテーブル、
911…テーブル番号、912…NEXTテーブル、
913…ループポインタ、914…カーネルループフラグ、
915…FI制御方法番号、916…逐次実行時間、
241…ページ毎参照回数テーブル、
242…割り付けページアドレステーブル、243…配列参照範囲テーブル、
244…割り付け添字テーブル。
Claims (5)
- 逐次実行用プログラムを入力して構文解析を行い中間語を出力するステップと、該中間語を並列化変換するステップと、該中間語を入力して並列実行用プログラムを出力するステップとを含む分散共有メモリ型並列計算機用の並列化コンパイラにおいて、
上記中間語を並列化変換するステップは、
(a)該中間語を入力して、ループ繰り返し範囲を分散する並列化実施ループの中から最も逐次実行時間が大きいカーネルループを検出するステップと、
上記分散共有メモリ型並列計算機のデータ分散方法のうち、データが初めて参照されたときに該データを含むメモリ上の1連続領域を該データを参照したプロセッサの物理メモリに割り付けるファーストタッチ方式データ分散を、上記カーネルループと同じデータアクセスパターンを再現することにより制御するコードを生成するステップと、
該コードを実行文の先頭に挿入するステップと
を含むことを特徴とする並列プログラム生成方法。 - 逐次実行用プログラムを入力して構文解析を行い中間語を出力するステップと、該中間語を並列化変換するステップと、該中間語を入力して並列実行用プログラムを出力するステップとを含む分散共有メモリ型並列計算機用の並列化コンパイラにおいて、
上記中間語を並列化変換するステップは、
(b)該中間語を入力して、ループ繰り返し範囲を分散する並列化実施ループの中から最も逐次実行時間が大きいカーネルループを検出するステップと、分散共有メモリ型並列計算機のデータ分散方法のうち、データが初めて参照されたときに該データを含むメモリ上の1連続領域を該データを参照したプロセッサの物理メモリに割り付けるファーストタッチ方式データ分散を、上記カーネルループのループ本体で参照されるカーネル配列のデータをカーネル配列と同じ配列形状を有するクローン配列に代入することにより制御するコードを生成し、該コードを該カーネルループの直前に挿入するステップと、該カーネルループ内のカーネル配列の参照をクローン配列の参照に置換するステップとを含むか、あるいは、
(c)該中間語を入力して、プロファイル情報として入力プログラムを並列実行して得たメモリ上の連続領域毎の各プロセッサの参照回数を取得し、分散共有メモリ型並列計算機のデータ分散方法のうち、データが初めて参照されたときに該データを含むメモリ上の1連続領域を該データを参照したプロセッサの物理メモリに割り付けるファーストタッチ方式データ分散を、各メモリ上の連続領域を最も参照回数の多いプロセッサにアクセスさせることにより制御するコードを生成するステップと、該コードを実行文の先頭に挿入するステップとを含むことを特徴とする並列プログラム生成方法。 - 逐次実行用プログラムを入力して構文解析を行い中間語を出力するステップと、該中間語を並列化変換するステップと、該中間語を入力して並列実行用プログラムを出力するステップとを含む分散共有メモリ型並列計算機用の並列化コンパイラにおいて、
上記中間語を並列化変換するステップは、
(d)該中間語を入力して、上記コンパイラの静的解析情報から得たカーネルループの各プロセッサの参照範囲を取得し、分散共有メモリ型並列計算機のデータ分散方法のうち、データが初めて参照されたときに該データを含むメモリ上の1連続領域を該データを参照したプロセッサの物理メモリに割り付けるファーストタッチ方式データ分散を、各プロセッサに割り付けたいメモリ上の連続領域の配列要素を参照させることにより制御するコードを生成するステップと、該コードを実行文の先頭に挿入するステップとを含むか、あるいは、
(e)該中間語を入力して、ユーザ指示情報から得たカーネルループの各プロセッサの参照範囲を取得し、分散共有メモリ型並列計算機のデータ分散方法のうち、データが初めて参照されたときに該データを含むメモリ上の1連続領域を該データを参照したプロセッサの物理メモリに割り付けるファーストタッチ方式データ分散を、各プロセッサに割り付けたいメモリ上の連続領域の配列要素を参照させることにより制御するコードを生成するステップと、該コードを実行文の先頭に挿入するステップとを含むことを特徴とする並列プログラム生成方法。 - 逐次実行用プログラムを入力して構文解析を行い中間語を出力するステップと、該中間語を並列化変換するステップと、該中間語を入力して並列実行用プログラムを出力するステップとを含む分散共有メモリ型並列計算機用の並列化コンパイラにおいて、
上記中間語を並列化変換するステップは、
(f)該中間語を入力して、プロファイル情報として入力プログラムを並列実行して得たメモリ上の連続領域毎の各プロセッサの参照回数を取得し、各メモリ上の連続領域の最も参照回数の多いプロセッサの情報テーブルを生成してオブジェクトコードに挿入することにより、オペレーティングシステムに連続領域番号とプロセッサ番号の組み合わせによるメモリ上の連続領域割り付け情報を与えるステップを含むか、あるいは、
(g)該中間語を入力して、上記コンパイラの静的解析情報から得たカーネルループの各プロセッサの参照範囲を取得し、メモリ上の各連続領域を割り付けたいプロセッサの情報テーブルを生成してオブジェクトコードに挿入することにより、オペレーティングシステムに連続領域番号とプロセッサ番号の組み合わせによるページ割り付け情報を与えるステップを含むか、あるいは、
(h)該中間語を入力して、ユーザ指示情報から得たカーネルループの各プロセッサの参照範囲を取得し、メモリ上の各連続領域を割り付けたいプロセッサの情報テーブルを生成してオブジェクトコードに挿入することにより、オペレーティングシステムに連続領域番号とプロセッサ番号の組み合わせによるメモリ上の連続領域割り付け情報を与えるステップを含むことを特徴とする並列プログラム生成方法。 - 請求項1,請求項2,請求項3又は請求項4に記載の各ステップをプログラムに変換した並列プログラム生成用コンパイラを格納したことを特徴とする記録媒体。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP03156899A JP3601341B2 (ja) | 1999-02-09 | 1999-02-09 | 並列プログラム生成方法 |
| US09/500,079 US6622301B1 (en) | 1909-02-09 | 2000-02-08 | Parallel program generating method |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP03156899A JP3601341B2 (ja) | 1999-02-09 | 1999-02-09 | 並列プログラム生成方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2000231545A JP2000231545A (ja) | 2000-08-22 |
| JP3601341B2 true JP3601341B2 (ja) | 2004-12-15 |
Family
ID=12334793
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP03156899A Expired - Lifetime JP3601341B2 (ja) | 1909-02-09 | 1999-02-09 | 並列プログラム生成方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US6622301B1 (ja) |
| JP (1) | JP3601341B2 (ja) |
Families Citing this family (36)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3641997B2 (ja) * | 2000-03-30 | 2005-04-27 | 日本電気株式会社 | プログラム変換装置及び方法並びに記録媒体 |
| US7418470B2 (en) | 2000-06-26 | 2008-08-26 | Massively Parallel Technologies, Inc. | Parallel processing systems and method |
| EP1251429A1 (de) * | 2001-04-19 | 2002-10-23 | ABB Schweiz AG | Erzeugung von redundanten Computerprogrammmodulen |
| EP2256622A1 (en) * | 2002-02-07 | 2010-12-01 | Sap Ag | Method and apparatus for parallel distributed compilation |
| US7603664B2 (en) * | 2002-10-22 | 2009-10-13 | Sun Microsystems, Inc. | System and method for marking software code |
| US7346902B2 (en) * | 2002-10-22 | 2008-03-18 | Sun Microsystems, Inc. | System and method for block-based concurrentization of software code |
| US7765532B2 (en) * | 2002-10-22 | 2010-07-27 | Oracle America, Inc. | Inducing concurrency in software code |
| US7222218B2 (en) | 2002-10-22 | 2007-05-22 | Sun Microsystems, Inc. | System and method for goal-based scheduling of blocks of code for concurrent execution |
| US7756919B1 (en) | 2004-06-18 | 2010-07-13 | Google Inc. | Large-scale data processing in a distributed and parallel processing enviornment |
| US7590620B1 (en) | 2004-06-18 | 2009-09-15 | Google Inc. | System and method for analyzing data records |
| US8397224B2 (en) * | 2004-09-13 | 2013-03-12 | The Mathworks, Inc. | Methods and system for executing a program in multiple execution environments |
| US8533402B1 (en) | 2004-09-13 | 2013-09-10 | The Mathworks, Inc. | Caching and decaching distributed arrays across caches in a parallel processing environment |
| US8108845B2 (en) * | 2007-02-14 | 2012-01-31 | The Mathworks, Inc. | Parallel programming computing system to dynamically allocate program portions |
| US8752006B1 (en) * | 2007-07-02 | 2014-06-10 | Cisco Technology, Inc. | System and method and apparatus for automatically generating computer code for remote procedure calls |
| WO2009152233A2 (en) * | 2008-06-10 | 2009-12-17 | Board Of Regents, The University Of Texas System | Programming model and software system for exploiting parallelism in irregular programs |
| US9189233B2 (en) | 2008-11-24 | 2015-11-17 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
| US10621092B2 (en) | 2008-11-24 | 2020-04-14 | Intel Corporation | Merging level cache and data cache units having indicator bits related to speculative execution |
| US9672019B2 (en) * | 2008-11-24 | 2017-06-06 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
| EP2361408A4 (en) | 2008-12-01 | 2012-05-23 | Kpit Cummins Infosystems Ltd | METHOD AND SYSTEM FOR PARALLELIZING SEQUENCEL COMPUTER PROGRAM CODES |
| US8701098B2 (en) * | 2009-04-02 | 2014-04-15 | International Business Machines Corporation | Leveraging multicore systems when compiling procedures |
| US8510538B1 (en) | 2009-04-13 | 2013-08-13 | Google Inc. | System and method for limiting the impact of stragglers in large-scale parallel data processing |
| US8549506B2 (en) | 2010-04-27 | 2013-10-01 | Microsoft Corporation | Resumable methods |
| US8661424B2 (en) | 2010-09-02 | 2014-02-25 | Honeywell International Inc. | Auto-generation of concurrent code for multi-core applications |
| US9489183B2 (en) | 2010-10-12 | 2016-11-08 | Microsoft Technology Licensing, Llc | Tile communication operator |
| US9430204B2 (en) | 2010-11-19 | 2016-08-30 | Microsoft Technology Licensing, Llc | Read-only communication operator |
| US9507568B2 (en) * | 2010-12-09 | 2016-11-29 | Microsoft Technology Licensing, Llc | Nested communication operator |
| US9395957B2 (en) | 2010-12-22 | 2016-07-19 | Microsoft Technology Licensing, Llc | Agile communication operator |
| EP2754033A2 (en) * | 2011-09-07 | 2014-07-16 | Massively Parallel Technologies, Inc. | Parallel processing development environment extensions |
| WO2013048468A1 (en) | 2011-09-30 | 2013-04-04 | Intel Corporation | Instruction and logic to perform dynamic binary translation |
| US9244828B2 (en) * | 2012-02-15 | 2016-01-26 | Advanced Micro Devices, Inc. | Allocating memory and using the allocated memory in a workgroup in a dispatched data parallel kernel |
| US9880842B2 (en) | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
| US9483171B1 (en) * | 2013-06-11 | 2016-11-01 | Amazon Technologies, Inc. | Low latency touch input rendering |
| US9891936B2 (en) | 2013-09-27 | 2018-02-13 | Intel Corporation | Method and apparatus for page-level monitoring |
| US9946522B1 (en) | 2016-12-16 | 2018-04-17 | International Business Machines Corporation | Generating code for real-time stream processing |
| JP6992911B2 (ja) * | 2018-10-30 | 2022-01-13 | 日本電信電話株式会社 | オフロードサーバおよびオフロードプログラム |
| JP7653021B2 (ja) * | 2021-05-28 | 2025-03-28 | 富士通株式会社 | コンパイラ、コンパイル方法、及びコンパイラ装置 |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH04211830A (ja) * | 1990-02-05 | 1992-08-03 | Matsushita Electric Ind Co Ltd | 並列化コンパイル方式 |
| US5978583A (en) * | 1995-08-07 | 1999-11-02 | International Business Machines Corp. | Method for resource control in parallel environments using program organization and run-time support |
| US6339840B1 (en) * | 1997-06-02 | 2002-01-15 | Iowa State University Research Foundation, Inc. | Apparatus and method for parallelizing legacy computer code |
| US6292822B1 (en) * | 1998-05-13 | 2001-09-18 | Microsoft Corporation | Dynamic load balancing among processors in a parallel computer |
-
1999
- 1999-02-09 JP JP03156899A patent/JP3601341B2/ja not_active Expired - Lifetime
-
2000
- 2000-02-08 US US09/500,079 patent/US6622301B1/en not_active Expired - Lifetime
Also Published As
| Publication number | Publication date |
|---|---|
| JP2000231545A (ja) | 2000-08-22 |
| US6622301B1 (en) | 2003-09-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3601341B2 (ja) | 並列プログラム生成方法 | |
| Verdoolaege et al. | Polyhedral parallel code generation for CUDA | |
| JP6236093B2 (ja) | 並列パイプラインにおいてブランチを分岐するためのハードウェアおよびソフトウェアソリューション | |
| US7926046B2 (en) | Compiler method for extracting and accelerator template program | |
| Anderson et al. | Data and computation transformations for multiprocessors | |
| Bauer et al. | Singe: Leveraging warp specialization for high performance on gpus | |
| US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
| US20030066056A1 (en) | Method and apparatus for accessing thread-privatized global storage objects | |
| WO2007041122A1 (en) | Thread-data affinity optimization using compiler | |
| Hormati et al. | Macross: Macro-simdization of streaming applications | |
| Lashgar et al. | Employing software-managed caches in OpenACC: Opportunities and benefits | |
| Krolik et al. | rndn: Fast query compilation for nvidia gpus | |
| JP4787456B2 (ja) | 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム | |
| Liu et al. | Improving the performance of OpenMP by array privatization | |
| Maskit et al. | A message‐driven programming system for fine‐grain multicomputers | |
| Matz et al. | Automated partitioning of data-parallel kernels using polyhedral compilation | |
| Benitez et al. | Target-specific global code improvement: Principles and applications | |
| Oden et al. | Implementation and evaluation of CUDA-unified memory in Numba | |
| Shei et al. | MATLAB parallelization through scalarization | |
| Papadimitriou et al. | Automatically exploiting the memory hierarchy of gpus through just-in-time compilation | |
| Basu et al. | Array index allocation under register constraints in DSP programs | |
| Shen et al. | Assessing one-to-one parallelism levels mapping for openmp offloading to gpus | |
| van der Spek et al. | Automatic restructuring of linked data structures | |
| Shterenlikht et al. | Cellular automata beyond 100k cores: MPI vs Fortran coarrays | |
| Hamel et al. | An optimizing C* compiler for a hypercube multicomputer |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 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: 20040831 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040913 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081001 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091001 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091001 Year of fee payment: 5 |
|
| S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313114 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091001 Year of fee payment: 5 |
|
| R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091001 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101001 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101001 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111001 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111001 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121001 Year of fee payment: 8 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131001 Year of fee payment: 9 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313117 |
|
| R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
| EXPY | Cancellation because of completion of term |