JP4787456B2 - 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム - Google Patents

並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム Download PDF

Info

Publication number
JP4787456B2
JP4787456B2 JP2002373318A JP2002373318A JP4787456B2 JP 4787456 B2 JP4787456 B2 JP 4787456B2 JP 2002373318 A JP2002373318 A JP 2002373318A JP 2002373318 A JP2002373318 A JP 2002373318A JP 4787456 B2 JP4787456 B2 JP 4787456B2
Authority
JP
Japan
Prior art keywords
loop
page
array
processor
parallel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2002373318A
Other languages
English (en)
Other versions
JP2004206314A (ja
Inventor
祥治 西村
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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP2002373318A priority Critical patent/JP4787456B2/ja
Publication of JP2004206314A publication Critical patent/JP2004206314A/ja
Application granted granted Critical
Publication of JP4787456B2 publication Critical patent/JP4787456B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラムに関し、特に逐次実行用ソースプログラムである逐次プログラムから分散共有メモリ型並列計算機向けの並列実行用ソースプログラムまたは並列実行用オブジェクトプログラムである並列プログラムを生成する並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラムに関する。
【0002】
【従来の技術】
複数のプロセッサのそれぞれにメモリを設けて構成される分散共有メモリ型並列計算機の論理共有物理分散メモリ(物理的に分散したメモリを論理的に1つのメモリとして扱う)技術の1つとして、論理共有の仮想メモリ空間をページと呼ばれる単位ごとに切り分け、物理的に分散されたメモリに割り付けるものがある。
【0003】
この技術において、どのページをどのプロセッサに割り付けるかを決定する技術として、プログラムを解析して各ページをそのページへの参照回数が最も多いプロセッサへ割り付けるものがある。
【0004】
このページ割付け技術を用いて並列プログラムを生成する従来技術の一例として、プログラム中で最も逐次実行時間の長いカーネルループを検出し、カーネルループと同じデータアクセスパターンを再現することにより、ファーストタッチ方式データ分離を制御するコードを生成し、ファーストタッチ制御コードを並列プログラムに挿入するようにした技術が知られている(例えば、特許文献1参照)。
【0005】
この従来の並列プログラム生成方法は、図4に示す逐次プログラム150aに適用する場合、以下のように動作する。ここで、逐次プログラム150aは、4行15列の2次元配列aを参照(アクセス)する2重ループを含み、この2重ループの内側のループを並列実行するプログラムである。ただし、この例では、ターゲットマシンとする分散共有メモリ型並列計算機のプロセッサ台数は4台、ページサイズは2次元配列aの配列要素4つ分、2次元配列aは1次元目(添字jの次元)がメモリ上でデータが連続する次元(以下、データ連続次元と略記する)であり、その配列要素は行優先順序で仮想メモリ空間のページに配置され、各ページが割り付けられるプロセッサが決定されるものとする。
【0006】
従来技術では、まず、逐次プログラム150aの11行目の指示文#pragma parallelにより、12行目のループ変数jのforループ(以下、単にjループと表記する)が並列化可能ループであることを検出する。次に、この並列化可能ループをプロセッサ4台で並列化するために、jループのループ繰返し範囲j=0〜14を、プロセッサ0にはループ繰返し範囲j=0〜3、プロセッサ1にはループ繰返し範囲j=4〜7、プロセッサ2にはループ繰返し範囲j=8〜11、プロセッサ3にはループ繰返し範囲j=12〜14というように分けて、並列化可能ループを複数の分割ループに分割する。図26(b)は、各プロセッサ0〜3が各分割ループのループ繰返し範囲で2次元配列aのどの配列要素を参照するか表す配列要素参照範囲を示す。次に、各分割ループにおいて、2次元配列aの配列要素を配置した各ページがどのプロセッサに何回参照されるかを調べ、各ページを最も参照回数が多いプロセッサにページ割付けするコードを生成する。図26(a)は、このときのページ割付け状況を示す。
【0007】
ここで注目すべきことは、2次元配列aのデータ連続次元(添字jの次元)における配列要素数が15であり、またページサイズは配列要素4つ分であるため、ページの途中で行の終端がきてしまうことである。すなわち、仮想アドレス空間における論理的なページ境界と各プロセッサのメモリにおける物理的なデータ分散境界とが異なって、行にまたがるページが出てくることである。このため、2次元配列aの配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループを分割した各分割ループの実行割当て先のプロセッサとが一致せず、図23(c)に示すようにリモート参照となる領域が生じていた。リモート参照になると、プロセッサ間通信が発生し、並列プログラムの処理速度を著しく低下させる原因となっていた。
【0008】
このような状況が起こるのは、並列化可能ループを並列化する際、各プロセッサのメモリにおける物理的なデータ分散境界の幅を、仮想アドレス空間における論理的なページ当たりの2次元配列aのデータ連続次元の配列要素数に比べて大きくとることができない場合である。このような状況は、比較的起こりやすい。それは、分散共有メモリ型並列計算機上のメモリ容量は無限ではないため、多次元配列を扱う場合、次元数を増やすほど多次元配列の各次元の配列要素数は小さくなるため、多次元配列の配列要素をデータ連続次元で配置することができるページの数は小さくなるからである。また、計算時間を短縮するためにプロセッサ台数を増やすと、1プロセッサ当たりの扱うデータ量が小さくなるため、データ分散境界の幅は小さくなるからである。
【0009】
また、別の従来技術として、このような2次元配列aの行にまたがるページを避ける場合、図27に示すように、2次元配列aのデータ連続次元(添字jの次元)の配列要素数を擬似的に増やしてダミーデータを格納し、2次元配列aの各行の終端と各行最後のページの終端とを一致させるものがあった(例えば、非特許文献1参照)。しかし、この方法は、2次元配列aの配列要素を配置する各ページのページ割付け先のプロセッサと並列化可能ループを分割した各分割ループの実行割当て先のプロセッサとを一致させることができたが、2次元配列aの配列要素のデータ連続性を破壊した。このため、プログラムのある部分で多次元配列を1次元配列とみなして操作するような配列の配列要素のデータ連続性を仮定するプログラムには、この方法を用いることができなかった。
【0010】
さらに、他の従来技術では、並列化可能ループのループ繰返し範囲において変数の参照を有する配列,配列宣言寸法が変数の配列,あるいは引数配列がある場合であっても、データ分散対象配列の配列要素が配置された各ページの割り付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割り当て先のプロセッサとの不一致を削減するようにして、データローカリティを向上させるようにしたものがあった(例えば、特許文献2参照)。しかし、この方法は、並列化可能ループでデータ分散対象配列が参照されるが、配列要素のどこからどこまで参照されるのかが実行時までわからない(コンパイル時にはわからない)ことを前提としたものであり、データ分散対象配列の各次元の配列要素数が事前に分かっていることを前提とする本発明とは異なるものである。
【0011】
【特許文献1】
特開2000−231545号公報(第7〜8頁、図1〜図2)
【非特許文献1】
デビッド・エフ・ベイコン,ジーハング・コウ,ディズチェング・アール・ジュ,カルヤン・マスクマー,ヴィヴェク・サーカー著“ア コンパイラ フレームワーク フォー リストラクチャリング データ デクラレーションズ トゥ エンハンス キャッシュ アンド ティーエルビー エフェクティブネス”,キャスコン94,第270頁〜第282頁,1994(David F. Bacon, Jyh-Herng Chow, Dz-ching R. Ju, Kalyan Muthukumar, Vivek Sarkar “A CompilerFramework for Restructuring Data Declarations to Enhance Cache and TLBEffectiveness”, CASCON’94, pp. 270-282, 1994)
【特許文献2】
特開2001−297068号公報(第7〜8頁、図1〜図2)
【0012】
【発明が解決しようとする課題】
第1の問題点は、従来技術によって生成される分散共有メモリ型並列計算機をターゲットマシンとする並列プログラムは、データ分散対象配列の配列要素をデータ連続次元で複数のプロセッサにデータ分散する場合、特にデータ分散対象配列が多次元配列である場合、データ分散対象配列の配列要素が配置された各ページの割り付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割り当て先のプロセッサとの不一致を多く生じ、プロセッサ間通信が多発して、並列プログラムの処理速度を著しく低下させることである。
【0013】
その理由は、従来技術では、並列化可能ループを並列化する際、まず並列化可能ループを分割し、各ページを最も参照するプロセッサに割り付けるようにするために、仮想アドレス空間における論理的なページ境界を考慮していないからである。このため、データ分散対象配列の配列要素をデータ連続次元で複数のプロセッサにデータ分散する場合、データ分散対象配列の各次元の配列要素数,ページサイズ,またはプロセッサ台数によっては、ページ境界をまたぐ分割ループのループ繰返し範囲の数が多くなるからである。
【0014】
第2の問題点は、従来技術では、仮想アドレス空間における論理的なページ境界を各プロセッサのメモリにおける物理的なデータ分散境界に一致させるためにダミーデータを挿入するようにしていたので、データ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させる際に、データ分散対象配列の配列要素のデータ連続性を破壊することである。
【0015】
本発明の目的は、逐次実行用ソースプログラムでなる逐次プログラムに含まれる並列化可能ループを並列化する際、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させることで、データローカリティを高めて、並列プログラムの処理速度を高速化する並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラムを提供することにある。
【0016】
また、本発明の他の目的は、上記の目的を、並列化可能ループ内で参照されるデータ分散対象配列の配列要素のデータ連続性を破壊することなく実現する並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラムを提供することにある。
【0017】
【課題を解決するための手段】
本発明の並列プログラム生成装置は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定手段と、前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定手段とを備えることを特徴とする。
【0018】
また、本発明の並列プログラム生成装置は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出手段と、前記並列化可能ループ検出手段により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出手段と、前記データ分散対象配列検出手段により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定手段と、前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定手段とを備えることを特徴とする。
【0019】
さらに、本発明の並列プログラム生成装置は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析手段と、前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出手段と、前記並列化可能ループ検出手段により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出手段と、前記データ分散対象配列検出手段により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定手段と、前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定手段により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定手段と、前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成手段とを備えることを特徴とする。
【0020】
さらにまた、本発明の並列プログラム生成装置は、前記ページ割付け決定手段が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数,ページサイズおよびプロセッサ台数に応じて、1ページまたは数ページずつのラウンドロビンで行うことを特徴とする。
【0021】
また、本発明の並列プログラム生成装置は、前記ループスケジューリング決定手段が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする。
【0022】
さらに、本発明の並列化プログラム生成装置は、前記ページ割付け決定手段が、データ分散対象配列の各次元の配列要素数,ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする。
【0023】
さらにまた、本発明の並列プログラム生成装置は、前記コード生成手段が、ソースプログラム形式の並列プログラムを生成することを特徴とする。
【0024】
また、本発明の並列プログラム生成装置は、前記コード生成手段が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする。
【0025】
一方、本発明の並列プログラム生成方法は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを含むことを特徴とする。
【0026】
また、本発明の並列プログラム生成方法は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを含むことを特徴とする。
【0027】
さらに、本発明の並列プログラム生成方法は、逐次プログラムから分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成方法において、逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析工程と、前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定工程と、前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定工程と、前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成工程とを含むことを特徴とする。
【0028】
さらにまた、本発明の並列プログラム生成方法は、前記ページ割付け決定工程が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数,ページサイズおよびプロセッサ台数に応じて、1ページまたは数ページずつのラウンドロビンで行うことを特徴とする。
【0029】
また、本発明の並列プログラム生成方法は、前記ループスケジューリング決定工程が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする。
【0030】
さらに、本発明の並列化プログラム生成方法は、前記ページ割付け決定工程が、データ分散対象配列の各次元の配列要素数,ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする。
【0031】
さらにまた、本発明の並列プログラム生成方法は、前記コード生成工程が、ソースプログラム形式の並列プログラムを生成することを特徴とする。
【0032】
また、本発明の並列プログラム生成方法は、前記コード生成工程が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする。
【0033】
他方、本発明の並列プログラム生成プログラムは、コンピュータに、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを実行させることを特徴とする。
【0034】
また、本発明の並列プログラム生成プログラムは、コンピュータに、逐次プログラムに含まれる並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定工程と、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定工程とを実行させることを特徴とする。
【0035】
さらに、本発明の並列プログラム生成プログラムは、コンピュータに、逐次プログラムの構文解析を行い、中間語を生成して中間語記憶部に格納する構文解析工程と、前記中間語記憶部に格納されている中間語を解析して並列化可能ループを検出する並列化可能ループ検出工程と、前記並列化可能ループ検出工程により検出された並列化可能ループ内で参照される配列の中で配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出するデータ分散対象配列検出工程と、前記データ分散対象配列検出工程により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定し、ページ割付け情報をページ割付け情報記憶部に格納し、この結果を実現する中間語を生成して前記中間語記憶部に格納するページ割付け決定工程と、前記ページ割付け情報記憶部に格納されているデータ分散対象配列の配列要素のページ割付け情報から、前記ページ割付け決定工程により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、前記並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定し、この結果を実現する中間語を生成して前記中間語記憶部に格納するループスケジューリング決定工程と、前記中間語記憶部に格納されている中間語から並列プログラムを生成するコード生成工程とを実行させることを特徴とする。
【0036】
さらにまた、本発明の並列プログラム生成プログラムは、前記ページ割付け決定工程が、前記データ分散対象配列の配列要素が配置された各ページを割り付けるプロセッサの決定を、データ分散対象配列の各次元の配列要素数,ページサイズおよびプロセッサ台数に応じて、1ページまたは数ページずつのラウンドロビンで行うことを特徴とする。
【0037】
また、本発明の並列プログラム生成プログラムは、前記ループスケジューリング決定工程が、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定することを特徴とする。
【0038】
さらに、本発明の並列化プログラム生成プログラムは、前記ページ割付け決定工程が、データ分散対象配列の各次元の配列要素数,ページサイズおよびプロセッサ台数に応じて、各ページを割り付けるプロセッサの順番を示すページ割付け系列を複数生成し、これらのページ割付け系列を順次切り替えながらページ割付けの決定を行うことを特徴とする。
【0039】
さらにまた、本発明の並列プログラム生成プログラムは、前記コード生成工程が、ソースプログラム形式の並列プログラムを生成することを特徴とする。
【0040】
また、本発明の並列プログラム生成プログラムは、前記コード生成工程が、オブジェクトプログラム形式の並列プログラムを生成することを特徴とする。
【0041】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【0042】
[第1の実施の形態]
図1は、本発明の第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100の構成を表すブロック図である。この並列化コンパイル装置100は、計算機システム(図3参照)上で実施され、高級言語で記述された逐次実行用ソースプログラムである逐次プログラム150を入力して、並列実行用オブジェクトプログラムである並列プログラム151を生成する並列化コンパイラの機能を実現するものである。図1において、並列化コンパイル装置100は、逐次プログラム150を読み込んで構文解析し中間語を生成する構文解析部101と、中間語から並列化した中間語を生成する並列化部102と、並列化した中間語から並列プログラム151を生成するコード生成部103と、並列化部102において解析されたページ割付け情報を格納するページ割付け情報記憶部104と、並列化コンパイル装置100内部で生成される中間語を記憶する中間語記憶部105とを備えている。
【0043】
並列化部102は、中間語から並列化可能ループを検出する並列化可能ループ検出部111と、並列化可能ループ内で参照される配列で配列要素がデータ連続次元で複数のプロセッサにデータ分散される配列(データ分散対象配列)を検出するデータ分散対象配列検出部112と、データ分散対象配列検出部112により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定するページ割付け決定部113と、ページ割付け決定部113により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定部114とを備えている。
【0044】
これらの各部は、それぞれ次のように動作する。
【0045】
構文解析部101は、逐次プログラム150の構文解析を行い、並列化コンパイル装置100の内部で使用する中間語を生成し、それを中間語記憶部105に格納する。
【0046】
並列化可能ループ検出部111は、中間語記憶部105に格納されている中間語を解析し、並列化可能ループを検出する。
【0047】
データ分散対象配列検出部112は、並列化可能ループ検出部111により検出された並列化可能ループ内で参照される配列を調べ、配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列を検出する。
【0048】
ページ割付け決定部113は、データ分散対象配列検出部112により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定する。このとき、ページ割付け決定部113は、データ分散対象配列の各次元の配列要素数,ページサイズおよびプロセッサ台数からデータ分散対象配列の配列要素のページ割付け状況を決定し、ページ割付け情報としてページ割付け情報記憶部104に格納する。また、ページ割付け決定部113は、ページ割付け状況を実現する中間語を生成して中間語記憶部105に格納する。
【0049】
ループスケジューリング決定部114は、ページ割付け情報記憶部104に格納されているデータ分散対象配列の配列要素のページ割付け情報から、ページ割付け決定部113により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループ検出部111により検出された並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定する。また、ループスケジューリング決定部114は、この結果を実現する中間語を生成して中間語記憶部105に格納する。
【0050】
コード生成部103は、中間語記憶部105に格納されている中間語から並列プログラム151を生成する。
【0051】
図2を参照すると、第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100の処理は、逐次プログラム構文解析ステップ201と、未解析ループ有無判定ステップ202と、並列化可能ループ検出ステップ203と、未解析配列有無判定ステップ204と、データ分散対象配列検出ステップ205と、ページ割付け決定ステップ206と、並列化可能ループ分割・分割ループ実行割当てプロセッサ決定ステップ207と、並列プログラム生成ステップ208とからなる。
【0052】
次に、このように構成された第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100の動作について、図1および図2を参照しながら詳細に説明する。
【0053】
まず、構文解析部101は、逐次プログラム150を読み込んで構文解析し、並列化コンパイル装置100内で使用する中間語に変換して中間語記憶部105に格納する(ステップ201)。
【0054】
次に、並列化可能ループ検出部111は、中間語記憶部102に格納されている中間語からまだ解析していないループを探す(ステップ202)。
【0055】
まだ解析していないループが見つかれば、並列化可能ループ検出部111は、そのループが並列化可能ループであるかを検出する(ステップ203)。
【0056】
並列化可能ループであれば、データ分散対象配列検出部112は、ステップ203により検出した並列化可能ループの本体を解析し、まだ解析していない配列があるかどうかを調べる(ステップ204)。
【0057】
まだ解析していない配列が見つかれば、データ分散対象配列検出部112は、この配列が、配列要素がデータ連続次元で複数のプロセッサにデータ分散されるデータ分散対象配列であるかを検出する(ステップ205)。
【0058】
データ分散対象配列であれば、ページ割付け決定部113は、ステップ205により検出されたデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定する(ステップ206)。また、ページ割付け決定部113は、このページ割付け状況をページ割付け情報としてページ割付け情報記憶部104に格納する。ここで、配列要素が配置された各ページを割り付けるプロセッサの決定は、例えば、データ分散対象配列の各次元の配列要素数,ページサイズおよびプロセッサ台数に応じて、1ページずつのラウンドロビンで決定してもよく、数ページずつのラウンドロビンで決定してもよい。また、ユーザからの指示によってページを割り付けるプロセッサを決定してもよいし、その他の決定基準によってページを割り付けるプロセッサを決定してもよい。
【0059】
次に、ループスケジューリング決定部114は、ページ割付け情報記憶部104に格納されているデータ分散対象配列の配列要素のページ割付け情報を参照して、ページ割付け決定部113により自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループ検出部111により検出された並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定する(ステップ207)。また、ループスケジューリング決定部114は、この結果を実現する中間語を生成して中間語記憶部105に格納する。
【0060】
最後に、コード生成部103は、中間語記憶部105に格納されている中間語から並列プログラム151を生成する(ステップ208)。
【0061】
次に、第1の実施の形態の効果について説明する。
【0062】
第1の実施の形態では、並列化可能ループ内で参照されるデータ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定してから、そのページ割付け状況に従って自プロセッサにページ割付けされたページに配置された配列要素を参照するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定するように構成されているため、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させることができ、並列プログラムのデータローカリティを向上させ、プロセッサ間通信の発生を削減して、並列プログラムの処理速度を高速化することができる。
【0063】
さらに、第1の実施の形態では、データ分散対象配列の配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサを決定する際に、仮想アドレス空間における論理的なページ境界と各プロセッサのメモリにおける物理的なデータ分散境界とを一致させるためにダミーデータを挿入しないように構成されているため、データ分散対象配列の配列要素のデータ連続性を破壊せずに、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させることができ、並列プログラムのデータローカリティを向上させ、プロセッサ間通信の発生を削減して、並列プログラムの処理速度を高速化することができる。
【0064】
図3は、図1に示した並列化コンパイル装置100を実現する計算機システムの構成例を示したブロック図である。図3において、300はプロセッサ301およびメモリ302から構成されるパーソナルコンピュータやワークステーション等からなる情報処理装置、311は液晶ディスプレイやCRT(CathodeRay Tube)ディスプレイ等からなる表示装置、312はマウスやキーボード等からなる入力装置、313はハードディスクドライブ等からなる外部記憶装置、314はネットワークインタフェースカードやモデム等からなる通信装置、315はCD−ROM(Compact Disc−Read Only Memory)やフレキシブルディスク等からなる記憶媒体、316は記憶媒体315に記録されたデータを読み出すための駆動装置である。
【0065】
情報処理装置300により記憶媒体315に格納されたプログラムおよびデータを、駆動装置316を介して外部記憶装置313にインストール、または通信装置314を介してネットワーク上からダウンロードすることにより外部記憶装置313にインストールした後、外部記憶装置313からメモリ302に読み込み、プロセッサ301で処理することで、図1に示す並列化コンパイル装置100の各機能が構成される。
【0066】
次に、具体的な実施例を用いて、第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100の動作をより詳細に説明する。
【0067】
ここでは、図4に示すような逐次プログラム150aが与えられた場合の、並列化部102の動作を説明する。
【0068】
並列化可能ループ検出部111は、逐次プログラム150aの11行目のユーザによる指示文#pragma parallelによって12行目のループ変数jのforループ(以下、jループと表記する)が並列化可能ループであることを検出する(ステップ203)。
【0069】
次に、データ分散対象配列検出部112は、逐次プログラム150aの12行目以降の並列化可能ループの本体を調べ、逐次プログラム150aの13行目に2次元配列aを見つける(ステップ204でイエス)。ここで、2次元配列aの添字がループ変数jである次元がデータ連続次元だったとする。すると、逐次プログラム150aの12行目のループ変数jが13行目の2次元配列aでデータ連続次元の添字であることから、データ分散対象配列検出部112は、2次元配列aはデータ連続次元で配列要素が複数のプロセッサにデータ分散されるデータ分散対象配列であることを検出する(ステップ205)。
【0070】
続いて、ページ割付け決定部113は、2次元配列aの配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページを割り付けるプロセッサをラウンドロビンで決定する(ステップ206)。このようなページ割付けの決定は、例えば、図7に示す並列プログラム151aの5行目のようなライブラリ関数round_robbin_allocate(a)を呼び出す文を生成することで実現できる。round_robbin_allocate(a)関数は、データ分散対象配列aの配列要素が配置された各ページをラウンドロビンで各プロセッサに割り付ける関数である。
【0071】
図5(a)は、この実施例におけるページサイズが2次元配列aの配列要素4つ分であるとしたときの、2次元配列aの配列要素が配置された各ページのプロセッサ0〜3へのページ割付け状況を示す。
【0072】
次に、ページ割付け決定部113は、各プロセッサに2次元配列aのどの配列要素が配置されているページが割り付けられているかを表すページ割り付け状況を、例えば図6のようなテーブル形式のページ割付け情報としてページ割付け情報記憶部104に格納する。
【0073】
なお、この実施例では、データ分散対象配列aの配列要素が配置された各ページを割り付けるプロセッサを1ページずつラウンドロビンで決定したが、データ分散対象配列の各次元の配列要素数に応じて数ページずつラウンドロビンで決定してもよい。このとき、round_robin_allocate関数は、引数で渡された配列の配列要素が配置された先頭のページから順にn番目のページまでを割り付けるプロセッサをプロセッサ台数Pを法とするページ番号nの剰余(nmod P)として決定する。すなわち、プロセッサ0には0番目,P番目,2*P番目,…のページを、プロセッサ1には1番目,P+1番目,2*P+1番目,…のページを、…割り付けることを決定する。
【0074】
次に、ループスケジューリング決定部114は、逐次プログラム150aの12行目の並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、各分割ループの実行を割り当てるプロセッサおよびそのスケジュールを決定する(ステップ207)。この実施例では、図5(a)に示すように、プロセッサ0には、i=0の時にj=0〜3の配列要素が配置されたページを、i=1の時にj=1〜4の配列要素が配置されたページを、…割り付けることが決定される。
【0075】
続いて、ループスケジューリング決定部114は、並列化可能ループ内で参照されるデータ分散対象配列aの配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させるために、例えば、逐次プログラム150aの10行目のiループにおいて、i=0の時にプロセッサ0に実行を割り当てられる分割ループのループ繰返し範囲をj=0〜3とし、i=1の時にプロセッサ0に実行を割り当てられる分割ループのループ繰返し範囲をj=1〜4とするように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割する。このようなループ分割は、例えば、図7の並列プログラム151aの11行目のように、各プロセッサが12行目のjループで実行を割り当てられたループ変数jの開始点および終了点を与えるライブラリ関数j_rangeをjループの直前に入れることで実現できる。
【0076】
j_range関数は、プロセッサ番号peおよび外側のforループのループ変数iを受け取り、プロセッサ番号peのプロセッサが実行を割り当てられたjループのループ繰返し範囲j=js〜jeを設定する関数である。j_range関数自身は、プロセッサ番号peのプロセッサがループ変数iについてjループのループ繰り返し範囲がまだ残っている間は真を返し、ない場合は偽を返す。例えば、図4の逐次プログラム150aで図5(a)ようにページ割付け状況が決定された場合、pe=0,i=0ならば、j_range関数はjsに0、jeに3を設定し、j_range関数自身は、i=0においてプロセッサ0が他に実行を割り当てるべき分割ループがないので偽を返す。また、pe=3,i=1ならば、j_range関数はjsに0、jeに0を設定し、j_range関数自身は、i=1においてプロセッサ3がループ繰返し範囲j=13〜14の実行が割り当てられているので真を返す。もう一度pe=3,i=1でj_range関数を呼び出すと、jsに13、jeに14が設定され、j_range関数自身は偽を返す。
【0077】
図5(b)は、上記のようにループスケジューリングした場合の各プロセッサ0〜3の配列要素参照範囲を示し、図5(c)は、各プロセッサ0〜3のリモート参照範囲を示す。図5(c)からもわかるように、分散共有メモリ型並列計算機の各プロセッサ0〜3は、並列プログラム151a中の並列化可能ループをすべてローカル参照だけで並列実行することができる。
【0078】
なお、2次元配列aの配列要素が添字iの次元に関して依存関係がある場合、図8の並列プログラム151a1の16行目に示すような、プロセッサ間の同期をとる同期コードsyncを挿入する必要がある。
【0079】
ところで、第1の実施の形態では、並列プログラム生成装置を並列化コンパイル装置100として説明したが、図7に示した並列プログラム151aがソースプログラム形式で記述されていることからも分かるように、並列プログラム生成装置をコンパイル装置の前段に実行されるプレコンパイル装置として実現することもできる(以下の各実施の形態においても同様)。この場合には、並列プログラム生成装置は、逐次実行用ソースプログラムである逐次プログラム150を入力して、並列実行用ソースプログラムである並列プログラム151を出力することになる。
【0080】
[第2の実施の形態]
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。
【0081】
図9は、本発明の第2の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100aの構成を表すブロック図である。この並列化コンパイル装置100aは、図1に示した第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100におけるループスケジューリング決定部114を、並列化可能ループ内で参照されるデータ分散対象配列が多次元配列である場合にプロセッサ間の同期回数を削減するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定するループスケジューリング決定部114aに置き換えた構成を有するものである。よって、その他の特に言及しない対応部分については、第1の実施の形態におけるのと同一の符号を付して、それらの詳しい説明を省略する。
【0082】
第2の実施の形態における並列化コンパイル装置100aの動作の概要を示すフローチャートは、図2に示した第1の実施の形態における並列化コンパイル装置100の動作の概要を示すフローチャートと同様である。
【0083】
図10は、第2の実施の形態におけるループスケジューリング決定部114aの動作を示すフローチャートである。ループスケジューリング決定部114aの動作は、依存関係次元抽出ステップ400と、スケジューリングブロック構成ステップ401と、ループスケジューリングステップ402と、同期コード挿入ステップ403とからなる。
【0084】
次に、このように構成された第2の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100aの動作について、第1の実施の形態における並列化コンパイル装置100の動作との相違点を中心に説明する。
【0085】
ここでは、第2の実施の形態におけるループスケジューリング決定部114aの動作について、図9および図10を用いて説明する。
【0086】
ページ割付け決定部113によるページ割付けの決定が完了すると、ループスケジューリング決定部114aは、並列化可能ループ内で参照されるデータ分散対象配列(多次元配列)の依存関係がある次元を抽出する(ステップ400)。ここで、「依存関係」とは、実行順序を変更すると元の実行結果と異なってしまう2つの命令間の関係である。また、「依存関係がある次元」とは、その次元で並列化すると実行順序が変更され、並列化しないときと実行結果が異なってしまう次元である。依存関係がある次元を抽出する方法は、並列化可能ループ内で参照されるデータ分散対象配列の各配列要素の読み書きの順序を調べ、並列化する前と並列化した後とでその順序が変わるかどうかを調べる。
【0087】
次に、ループスケジューリング決定部114aは、ページ割付け情報記憶部104に格納されているデータ分散対象配列の配列要素のページ割付け情報を解析し、並列化可能ループ内で参照されるデータ分散対象配列が多次元配列である場合にプロセッサ間の同期回数を削減するように、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成する(ステップ401)。詳しくは、あるプロセッサが実行を割り当てられた分割ループすべてが未選択集合に入っているものとし、まず、未選択集合から分割ループを1つ取り出し、スケジューリングブロックに含める。次に、そのスケジューリングブロックに含まれる分割ループと依存関係がある次元方向に併合可能な分割ループを未選択集合から取り出し、そのスケジューリングブロックに含める。この操作ができなくなるまで繰り返す。まだ未選択集合に分割ループが残っているようならば、新たなスケジューリングブロックを構成する。未選択集合が空になれば終了する。
【0088】
「依存関係がある次元方向に併合可能な」とは、2つの分割ループX,Yがあり、分割ループXで参照される配列要素それぞれが分割ループYで参照される配列要素のどれかに直接依存する、または分割ループYで参照される配列要素それぞれに直接依存する配列要素すべてを分割ループXで参照することをいう。ここで、配列要素Aと配列要素Bとがあり、配列要素Bの値が配列要素Aの値によって求められる時、配列要素Bは配列要素Aに直接依存するという。
【0089】
「スケジューリングブロック」とは、同一プロセッサが実行を割り当てられた分割ループのループ繰返し範囲の集合で、スケジューリングブロックに含まれる任意の分割ループのループ繰返し範囲は、少なくとも1つは依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲をそのスケジューリングブロック内にもつ。スケジューリングブロックは、分割ループを2つ以上含んでいる場合、あるスケジューリングブロックに含まれる任意の分割ループXは、それと依存関係がある次元方向に併合可能な分割ループYを必ず1つはそのスケジューリングブロックに含む。
【0090】
続いて、ループスケジューリング決定部114aは、構成された各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定し、並列化コードを生成する(ステップ402)。
【0091】
最後に、ループスケジューリング決定部114aは、スケジューリングブロック間にある依存関係がある場合、その計算順序を保証するように同期コードsyncを挿入する(ステップ403)。
【0092】
次に、第2の実施の形態の効果について説明する。
【0093】
第2の実施の形態では、ページ割付けの決定が完了すると、依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成し、各スケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定するように構成されているため、並列化可能ループの外側のループにおいて依存関係がある場合、分割ループ単位でなく、スケジューリングブロック単位で同期をとることができ、これにより並列プログラム151における同期回数を削減でき、プロセッサ間通信の発生を削除することにより、並列プログラム151の処理速度の高速化を図ることができる。
【0094】
次に、具体的な実施例を用いて、第2の実施の形態におけるループスケジューリング決定部114aの動作をより詳しく説明する。
【0095】
ここでは、図11の逐次プログラム150a1の10行目のループ変数iのforループ(以下、単にiループと表記する)がループ繰返し間で依存関係がある場合を逐次プログラム例とし、ページ割付け決定部113によって13行目の2次元配列aの配列要素が配置されたページが図5(a)のようにページ割付けされた時の、ループスケジューリング決定部114aの動作について説明する。
【0096】
ループスケジューリング決定部114aは、図5(a)の2次元配列aの配列要素が配置されたページのページ割付け状況を解析し、2次元配列aのiループにおけるループ繰返し範囲を決定する。
【0097】
次に、ループスケジューリング決定部114aは、並列化可能ループをループ繰返し範囲で分けて複数の分割ループに分割し、逐次プログラム150aの10行目のiループの依存関係を保証する同期回数を減らすために、プロセッサ毎に依存関係がある次元方向に併合可能な分割ループのループ繰返し範囲を併合してスケジューリングブロックを構成する(ステップ401)。このスケジューリングブロックは、例えば、次のようにして、構成することができる。
【0098】
まず、ループスケジューリング決定部114は、図12(a)に示すように、各分割ループのループ繰返し範囲をi=0のときのページ境界に合わせて再分割する。この例では、プロセッサ0のi=1のループ繰返し範囲はj=1〜4であるが、これをループ繰返し範囲j=1〜3とループ繰返し範囲j=4だけとの2つに再分割している。
【0099】
次に、ループスケジューリング決定部114は、各プロセッサに実行を割り当てられた分割ループのループ繰返し範囲を依存関係がある次元方向iに併合可能であれば併合してスケジューリングブロックを構成する。この例では、プロセッサ0に実行を割り当てられたi=0の分割ループのループ繰返し範囲901とi=1の分割ループのループ繰返し範囲902とは、j=1〜3において併合可能なので同一のスケジューリングブロックに入れる。一方、プロセッサ0に実行を割り当てられたi=0の分割ループのループ繰返し範囲901とi=1の分割ループのループ繰返し範囲903とは併合可能でないので、別のスケジューリングブロックに入れる。上記の操作を繰り返して、図12(a)のすべての分割ループのループ繰返し範囲に対して、スケジューリングブロックを構成したものが、図12(b)である。図13は、このようにして構成されたスケジューリングブロックのテーブルを示す。
【0100】
続いて、ループスケジューリング決定部114は、上記で構成したスケジューリングブロックの実行を割り当てるプロセッサおよびそのスケジュールを決定する(ステップ402)。この実施例においては、まず、図12(b)に示すスケジューリングブロック間の依存関係を解析する。図11の逐次プログラム150a1において、いま0行目のiループに関して依存関係があることにしているから、スケジューリングブロック911とスケジューリングブロック915、スケジューリングブロック912とスケジューリングブロック916、スケジューリングブロック913とスケジューリングブロック917、スケジューリングブロック914とスケジューリングブロック918のそれぞれの間に依存関係がある。そこで、ループスケジューリング決定部114は、プロセッサ0がスケジューリングブロック916の実行を、プロセッサ1がスケジューリングブロック912の実行を終了してから実行するように、プロセッサおよびそのスケジュールを決定する。つまり、この実施例では、プロセッサ0は1回同期をとるだけでよい。もし、この実施例のようにスケジューリングブロックを構成しなかったならば、プロセッサ0はiループのループ回数分、すなわち4回分の同期が必要だった。
【0101】
次に、ループスケジューリング決定部114は、並列化可能ループを複数の分割ループに分割してスケジューリングブロックを構成した中間語を生成し、結果を中間語記憶部105に格納する。
【0102】
最後に、ループスケジューリング決定部114aは、スケジューリングブロック間にある依存関係がある場合、その計算順序を保証するように同期コードsyncを挿入する(ステップ403)。
【0103】
図14は、図11の逐次プログラム150a1に対する並列プログラム151a1の一例を示す。すなわち、図12(b)のようにスケジューリングブロックを構成して並列化した並列プログラム例である。
【0104】
図14の並列プログラム151a1の10行目中のライブラリ関数next_blockは、プロセッサ番号peのプロセッサが次に実行すべきスケジューリングブロックの範囲を与える関数である。引数にプロセッサ番号peを与えると、iループの開始値isおよび終了値ieと、各iループの繰返し範囲におけるjループの開始値jsおよび終了値jeとを設定する。next_block関数自体は、次に実行すべきスケジューリングブロックがあるときは真を、ないときは偽を返す。
【0105】
なお、第2の実施の形態を用いない場合の逐次プログラム150a1に対する並列プログラム例は、図15の並列プログラム151a2となる。
【0106】
この実施例では、分割ループのループ繰返し範囲をあらかじめ再分割しておくことで部分的に併合可能なループ繰返し範囲の組ができないようにした。スケジューリングブロックを構成する際に、部分的に併合可能なループ繰返し範囲の組があるたびに、ループ繰返し範囲の再分割を行ってもよい。ここで、あるプロセッサに実行を割り当てられた分割ループのループ繰返し範囲の中で2つのループ繰り返し範囲A,Bがあり、ループ繰り返し範囲Bとループ繰り返し範囲Aとは一部だけ直接依存している時、部分的に併合可能という。ループ繰り返し範囲Aとループ繰り返し範囲Bとが部分的に併合可能な場合、ループ繰り返し範囲A,Bどちらかを直接依存しているところと直接依存していないところとで再分割すると併合可能にすることができる。
【0107】
[第3の実施の形態]
次に、本発明の第3の実施の形態について図面を参照して詳細に説明する。
【0108】
図16は、本発明の第3の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100bの構成を表すブロック図である。この並列化コンパイル装置100bは、図9に示した第2の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100aにおけるページ割付け決定部113を、より大きなスケジューリングブロックの構成を実現するためのページ割付けの決定を行うページ割付け決定部113aに置き換えた構成を有するものである。よって、その他の特に言及しない対応部分については、第2の実施の形態におけるのと同一の符号を付して、それらの詳しい説明を省略する。
【0109】
第2の実施の形態における並列化コンパイル装置100bの動作の概要を示すフローチャートは、図2に示した第1の実施の形態における並列化コンパイル装置100の動作の概要を示すフローチャートと同様である。
【0110】
図17は、本発明の第3の実施の形態におけるページ割付け決定部113aの動作を示すフローチャートである。このページ割付け決定部113aの動作は、ページ数設定ステップ501と、カウンタ初期化ステップ502と、ページ割付け系列作成ステップ503と、ページ割付け決定ステップ504と、ページ割付け済み判定ステップ505と、カウンタインクリメントステップ506とからなる。
【0111】
第3の実施の形態におけるループスケジューリング決定部114aの動作を示すフローチャートは、図10に示した第2の実施の形態におけるループスケジューリング決定部114aの動作を示すフローチャートと同様である。
【0112】
次に、このように構成された第3の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100bの動作について、第1および第2の実施の形態における並列化コンパイル装置100および100aの動作との相違点を中心に説明する。
【0113】
ここでは、より大きなスケジューリングブロックの構成を実現するためのページ割付けの決定を行うページ割付け決定部113aの動作について、図16および図17を用いて説明する。
【0114】
データ分散対象配列検出部112によりデータ分散対象配列が検出されると、ページ割付け決定部113aは、データ分散対象配列のデータ連続次元における配列要素数Nと1ページ当たりの配列要素数Mとからデータ連続次元の1行に必要なページ数n(NをMで割って小数点第1位以下を四捨五入したもの)、すなわちn=[N/M](鉤括弧はガウス記号)を調べる(ステップ501)。また、第3の実施の形態では、ページ数nがプロセッサ台数Pで割り切れない場合に対応しているから、プロセッサ台数Pを調べる。図21では、n=5,P=4のケースを表している。ページ数nがプロセッサ台数Pで割り切れない場合、ページをラウンドロビンでプロセッサに割り付けると、図21中の分割ループのループ繰返し範囲1301の直下(i=1におけるj=0〜3)の配列要素は、分割ループのループ繰返し範囲1301の実行を割り当てられたのと同じプロセッサ0に割り当てられない。なお、ページ数nがプロセッサ台数Pで割り切れるケースとしては、例えば、図12(a)に示すような、ページ数nが4,プロセッサ台数Pが4である場合がある。
【0115】
次に、ページ割付け決定部113aは、カウンタpを0に初期化し(ステップ502)、データ分散対象配列のデータ連続次元の1行に必要なページ数nとカウンタpとからページ割付け系列Sを作成する(ステップ503)。「ページ割付け系列S」とは、ページ割付けを決定する際、各ページをどのようなプロセッサ順で割り付けるかを示したプロセッサ番号の並びである。例えば、ページ割付け系列S=(PE0→PE1→PE2→PE3)ならば、0番目のページはプロセッサ0,1番目のページはプロセッサ1,…,3番目のページはプロセッサ3,4番目のページはプロセッサ0,…と割り付ける。ここで、「ページ割付け系列Sの長さ」についても定義する。「ページ割付け系列Sの長さ」とは、そのページ割付け系列Sに含まれるプロセッサ番号の数である。つまり、ページ割付け系列S=(PE0→PE1→ PE2→PE3)ならば、その長さは4である。この実施例におけるページ割付け系列Sを作成するには、ページ割付け系列Sの先頭となるプロセッサ番号peとその長さnとを与える必要がある。いま、プロセッサ台数をPとする。まず、カウンタpだけを含んだページ割付け系列Sを用意する。次に、そのページ割付け系列Sの最後のプロセッサ番号に1増やしてPを法として剰余をとったプロセッサ番号をページ割付け系列Sの末尾に追加する。このとき、このページ割付け系列Sの長さがnでないならば、この操作を繰り返す。もし、このページ割付け系列Sの長さがnならば、このページ割付け系列Sが作成したいページ割付け系列である。例えば、P=4,p=0,n=5→(PE0→PE1→PE2→PE3→PE0)、P=4,p=1,n=5→(PE1,PE2,PE3,PE0,PE1)。
【0116】
続いて、ページ割付け決定部113aは、ステップ503で作成したページ割付け系列Sで、データ分散対象配列のデータ連続次元のM行分のページ割付けを決定する(ステップ504)。1ページ当たりの配列要素数がMで、データ連続次元のM行分のページ割付けを決定すれば、i=(M―1)の行の終端とページ境界とが必ず一致するという数学的性質がある。例えば、図19を参照すると、このとき1ページ当たりの配列要素数Mは4である。このとき、先頭(i=0,j=0)から4行分のページ割付けを決定すると、4行目の終端(i=3,j=20)はページの終端と一致していることがわかる。
【0117】
この操作を、ページ割付け決定部113aは、カウンタpの再設定(ステップ506)をしながら、データ分散対象配列のすべての配列要素のページ割付けが決定されるまで繰り返す(ステップ505)。
【0118】
次に、第3実施の形態の効果について説明する。
【0119】
第3の実施の形態によるページ割付けの決定は、同期回数を削減する各分割ループのループスケジューリングをするループスケジューリング決定部114aを適用する際、より大きなスケジューリングブロックを構成させることができる。それは、データ連続次元の1行に必要なページ数nとプロセッサ台数Pとが等しくない場合、第3の実施の形態を用いると、ループスケジューリング決定部114aでスケジューリングブロックを構成する際、分割ループのループ繰返し範囲の併合がよりできるようになり、より大きなスケジューリングブロックを構成することができ、同期が必要となる箇所を減らすことができるからである。
【0120】
次に、具体的な実施例を用いて、第3の実施の形態の動作を説明する。
【0121】
図18に示す逐次プログラム150bを与えられた場合を例にとって、ページ割付け決定部113aの動作を説明する。ここで、プロセッサ台数は4台、1ページは配列要素4つ分とする。この実施例では、図18の逐次プログラム150b中の2次元配列bのデータ連続次元における配列要素数Nは21、1ページ当たりの配列要素数Mは4、データ連続次元の1行に必要なページ数nは5になる。p=0(初期値),n=5より、ページ割付け系列S=(PE0→PE1→PE2→PE3→PE0)となる。このページ割付け系列Sで2次元配列bの配列要素の4行分についてページ割り付けを決定したときのページ割付け状況が、図19(a)である。次のページ割付け系列Sは、p=1,n=5より、(PE1→PE2→PE3→PE0→PE1)になる。このページ割付け系列Sで2次元配列bの配列要素をi=4からページ割付けを決定した時のページ割付け状況が、図19(b)である。以下同様に、2次元配列bの配列要素の4行分についてページ割付けを決定するごとに新たなページ割付け系列Sを作り、2次元配列bの配列要素の最後までページ割付けを決定する。
【0122】
図20は、図18の逐次プログラム150bに対する並列プログラム151b1の一例を示す。並列プログラム151b1の5行目のライブラリ関数round_robin_ext_allocateは、第3の実施の形態におけるページ割付け決定部113aのページ割付けを実現する関数である。round_robin_ext_allocate(np, b, 16, 21)は、round_robin_ext_allocate関数にプロセッサ台数np,ページ割付けをしたい2次元配列b,2次元配列bの各次元の配列要素数16,21を与えると、図17のフローチャートに示した手順に従って、2次元配列bの配列要素のページ割付けを決定する。
【0123】
図21は、第3の実施の形態を用いずに2次元配列bの配列要素をデータ連続次元で仮想アドレス空間に連続配置し、配列要素が配置された各ページをラウンドロビンで割り付けるプロセッサを決定した時のページ割付け状況を表したものである。図21のようにページがプロセッサに割り付けられた場合、分割ループのループ繰返し範囲1301に対して併合可能な分割ループのループ繰返し範囲はない。しかし、本実施例を用いた場合、図19に示すように、分割ループのループ繰返し範囲を再分割してから併合して、スケジューリングブロック1201を構成することができる。
【0124】
図22は、第3の実施の形態を用いない場合の逐次プログラム150bに対する並列プログラム151b2の一例を示す。すなわち、図21に示すようにページ割付けの決定が行われた場合の並列プログラム例である。
【0125】
[第4の実施の形態]
図23は、本発明の第4の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100の構成を示すブロック図である。本実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100は、図1に示した第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100に対して並列プログラム生成プログラム(並列化コンパイラ)1000を付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付してそれらの詳しい説明を省略する。
【0126】
並列プログラム生成プログラム(並列化コンパイラ)1000は、コンピュータでなる並列化コンパイル装置100に読み込まれ、並列化コンパイル装置100の動作を構文解析部101,並列化部102(並列化可能ループ検出部111,データ分散対象配列検出部112,ページ割付け決定部113,ループスケジューリング決定部114),およびコード生成部103として制御する。並列プログラム生成プログラム(並列化コンパイラ)1000の制御による並列化コンパイル装置100の動作は、第1の実施の形態における並列化コンパイル装置100の動作と全く同様になるので、その詳しい説明を割愛する。
【0127】
なお、第4の実施の形態では、並列プログラム生成プログラム1000を並列化コンパイラとして説明したが、並列プログラム生成装置をコンパイル装置の前段に実行されるプレコンパイル装置として実現した場合には、プレコンパイラとすることもできる(以下の各実施の形態においても同様)。この場合には、並列プログラム生成装置は、逐次実行用ソースプログラムである逐次プログラム150を入力して、並列実行用ソースプログラムである並列プログラム151を出力することになる。
【0128】
[第5の実施の形態]
図24は、本発明の第5の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100aの構成を示すブロック図である。本実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100aは、図9に示した第2の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100aに対して並列プログラム生成プログラム(並列化コンパイラ)1000aを付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付してそれらの詳しい説明を省略する。
【0129】
並列プログラム生成プログラム(並列化コンパイラ)1000aは、コンピュータでなる並列化コンパイル装置100aに読み込まれ、並列化コンパイル装置100aの動作を構文解析部101,並列化部102(並列化可能ループ検出部111,データ分散対象配列検出部112,ページ割付け決定部113,ループスケジューリング決定部114a),およびコード生成部103として制御する。並列プログラム生成プログラム(並列化コンパイラ)1000aの制御による並列化コンパイル装置100aの動作は、第2の実施の形態における並列化コンパイル装置100aの動作と全く同様になるので、その詳しい説明を割愛する。
【0130】
[第6の実施の形態]
図25は、本発明の第6の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100bの構成を示すブロック図である。本実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100bは、図16に示した第3の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置100bに対して並列プログラム生成プログラム(並列化コンパイラ)1000bを付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付してそれらの詳しい説明を省略する。
【0131】
並列プログラム生成プログラム(並列化コンパイラ)1000bは、コンピュータでなる並列化コンパイル装置100bに読み込まれ、並列化コンパイル装置100bの動作を構文解析部101,並列化部102(並列化可能ループ検出部111,データ分散対象配列検出部112,ページ割付け決定部113a,ループスケジューリング決定部114a),およびコード生成部103として制御する。並列プログラム生成プログラム(並列化コンパイラ)1000bの制御による並列化コンパイル装置100bの動作は、第3の実施の形態における並列化コンパイル装置100bの動作と全く同様になるので、その詳しい説明を割愛する。
【0132】
【発明の効果】
第1の効果は、逐次実行用ソースプログラムでなる逐次プログラムに含まれる並列化可能ループを並列化する際、データローカリティを高めて、プロセッサ間通信の発生を削減し、並列プログラムの処理速度を高速化できることにある。その理由は、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとを一致させるようにページ割付けの決定およびループスケジューリングの決定を行うようにしたからである。
【0133】
第2の効果は、並列化可能ループ内で参照されるデータ分散対象配列の配列要素のデータ連続性を破壊することなく、第1の効果を実現できることにある。その理由は、並列化可能ループ内で参照されるデータ分散対象配列の配列要素が配置された各ページのページ割付け先のプロセッサと並列化可能ループをループ繰返し範囲で分割した各分割ループの実行割当て先のプロセッサとの相違を解消する方法として、配列を拡張してダミーデータを挿入する必要がないからである。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図2】第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の動作を示すフローチャートである。
【図3】第1の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の具体例を示す図である。
【図4】図1中の逐次プログラムの具体例を示す説明図である。
【図5】第1の実施例におけるページ割付け状況,配列要素参照範囲およびリモート参照範囲を説明するための図である。
【図6】図1中のページ割付け情報記憶部に格納されるページ割付け情報の具体例を示す図である。
【図7】図1における並列プログラムの具体例を示す図である。
【図8】図1における並列プログラムの具体例を示す図である。
【図9】本発明の第2の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図10】第2の実施の形態におけるループスケジューリング決定部の動作を示すフローチャートである。
【図11】図9中の逐次プログラムの具体例を示す説明図である。
【図12】第2の実施例におけるループ繰返し範囲の再分割およびスケジューリングブロックの構成を説明する図である。
【図13】図12に示したスケジューリングブロックのテーブルを示す図である。
【図14】図9中の並列プログラムの具体例を示す図である。
【図15】スケジューリングブロックなしの並列プログラムの具体例を示す図である。
【図16】本発明の第3の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図17】第3の実施の形態におけるページ割付け決定部の動作を示すフローチャートである。
【図18】図16中の逐次プログラムの具体例を示す図である。
【図19】第3の実施例におけるページ割付け状況を説明するための図である。
【図20】図16中の並列プログラムの具体例を示す図である。
【図21】第3の実施例を用いない場合のページ割付け状況を説明する図である。
【図22】第3の実施例を用いない場合の並列プログラムの具体例を示す図である。
【図23】本発明の第4の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図24】本発明の第5の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図25】本発明の第6の実施の形態に係る並列プログラム生成装置である並列化コンパイル装置の構成を示すブロック図である。
【図26】従来技術におけるページ割付け状況,配列要素参照範囲およびリモート参照範囲を説明する図である。
【図27】従来技術におけるページ割付け状況を説明する図である。
【符号の説明】
100,100a,100b 並列化コンパイル装置
101 構文解析部
102 並列化部
103 コード生成部
104 ページ割付け情報記憶部
105 中間語記憶部
111 並列化可能ループ検出部
112 データ分散対象配列検出部
113 ページ割付け決定部
114 ループスケジューリング決定部
150 逐次プログラム
151 並列プログラム
201 逐次プログラム構文解析ステップ
202 未解析ループ有無判定ステップ
203 並列化可能ループ検出ステップ
204 未解析配列有無判定ステップ
205 データ分散対象配列検出ステップ
206 ページ割付け決定ステップ
207 並列化可能ループ分割・分割ループ実行割当てプロセッサ決定ステップ
208 並列プログラム生成ステップ
300 情報処理装置
301 プロセッサ
302 メモリ
311 表示装置
312 入力装置
313 外部記憶装置
314 通信装置
315 記憶媒体
316 駆動装置
400 依存関係次元抽出ステップ
401 スケジューリングブロック構成ステップ
402 ループスケジューリングステップ
403 同期コード挿入ステップ
501 ページ数設定ステップ
502 カウンタ初期化ステップ
503 ページ割付け系列作成ステップ
504 ページ割付け決定ステップ
505 ページ割付け済み判定ステップ
506 カウンタインクリメントステップ
901〜903,911〜918,1201 スケジューリングブロック
1000,1000a,1000b 並列プログラム生成プログラム(並列化コンパイラ)

Claims (1)

  1. 逐次プログラムから、複数のプロセッサのそれぞれに物理メモリを設けて構成されるとともに前記複数の物理メモリを論理的に一つの仮想メモリとして扱う分散共有メモリ型並列計算機向けに並列プログラムを生成する並列プログラム生成装置において、
    前記逐次プログラムの中から、前記各プロセッサで並列に実行させる並列化可能ループを検出する並列化可能ループ検出手段と、
    前記並列化可能ループ内で参照される多次元配列を構成する各配列要素が物理メモリに記憶される際の並び順で前記各配列要素を前記仮想メモリの各アドレスと対応付け、前記仮想メモリを所定のデータサイズ毎に分割してなる複数のページと、前記複数のプロセッサと、をそれぞれ対応付けるページ割付け決定手段と、
    前記並列化可能ループをループ繰返し範囲で複数の分割ループに分割し、前記多次元配列における次元方向であって並列化すると実行順序が変更され並列化しないときと実行結果が異なってしまう次元方向に併合可能な分割ループのループ繰返し範囲を前記プロセッサ毎に併合したスケジューリングブロックを構成するループスケジューリング決定手段と
    を備えることを特徴とする並列プログラム生成装置。
JP2002373318A 2002-12-25 2002-12-25 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム Expired - Fee Related JP4787456B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002373318A JP4787456B2 (ja) 2002-12-25 2002-12-25 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002373318A JP4787456B2 (ja) 2002-12-25 2002-12-25 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム

Publications (2)

Publication Number Publication Date
JP2004206314A JP2004206314A (ja) 2004-07-22
JP4787456B2 true JP4787456B2 (ja) 2011-10-05

Family

ID=32811626

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002373318A Expired - Fee Related JP4787456B2 (ja) 2002-12-25 2002-12-25 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム

Country Status (1)

Country Link
JP (1) JP4787456B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2257874A4 (en) 2008-03-27 2013-07-17 Rocketick Technologies Ltd DESIGN SIMULATION ON THE BASIS OF PARALLEL PROCESSORS
JP5733860B2 (ja) * 2008-07-10 2015-06-10 ロケティック テクノロジーズ リミテッド 依存問題の効率的並列計算
US9032377B2 (en) 2008-07-10 2015-05-12 Rocketick Technologies Ltd. Efficient parallel computation of dependency problems
JP2012221135A (ja) * 2011-04-07 2012-11-12 Hitachi Ltd Numaアーキテクチャ向け並列化プログラムの生成方法
US9128748B2 (en) 2011-04-12 2015-09-08 Rocketick Technologies Ltd. Parallel simulation using multiple co-simulators
JP2016224812A (ja) * 2015-06-02 2016-12-28 富士通株式会社 並列計算装置、並列処理方法、並列処理プログラムおよびコンパイルプログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001297068A (ja) * 2000-04-11 2001-10-26 Hitachi Ltd 並列プログラム生成方法およびその記録媒体

Also Published As

Publication number Publication date
JP2004206314A (ja) 2004-07-22

Similar Documents

Publication Publication Date Title
Yang et al. A GPGPU compiler for memory optimization and parallelism management
JP3601341B2 (ja) 並列プログラム生成方法
JP5733860B2 (ja) 依存問題の効率的並列計算
JP3551353B2 (ja) データ再配置方法
US8572588B2 (en) Thread-local memory reference promotion for translating CUDA code for execution by a general purpose processor
US8776030B2 (en) Partitioning CUDA code for execution by a general purpose processor
Bauer et al. Singe: Leveraging warp specialization for high performance on gpus
EP0867808A2 (en) Method and apparatus for size optimisation of storage units
JP2011527788A5 (ja)
JP6432450B2 (ja) 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム
JP6236093B2 (ja) 並列パイプラインにおいてブランチを分岐するためのハードウェアおよびソフトウェアソリューション
Dehne et al. Exploring the limits of gpus with parallel graph algorithms
JP4787456B2 (ja) 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム
US7979853B2 (en) Compiler device, method, program and recording medium
Lobeiras et al. Designing efficient index-digit algorithms for CUDA GPU architectures
Shei et al. MATLAB parallelization through scalarization
Sakdhnagool et al. RegDem: Increasing GPU performance via shared memory register spilling
KR101118321B1 (ko) 리타게팅된 그래픽 프로세서 가속 코드의 범용 프로세서에 의한 실행
KR101117430B1 (ko) 범용 프로세서에 의해 실행하기 위한 어플리케이션 프로그램의 리타게팅
Fostier BLAMM: BLAS-based algorithm for finding position weight matrix occurrences in DNA sequences on CPUs and GPUs
Fumero et al. Using compiler snippets to exploit parallelism on heterogeneous hardware: a Java reduction case study
Fitzgerald et al. Update-in-place analysis for true multidimensional arrays
Fobel et al. GPU Approach to FPGA placement based on star+
van der Spek et al. A compile/run-time environment for the automatic transformation of linked list data structures
Gutiérrez et al. Data partitioning‐based parallel irregular reductions

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20050120

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080410

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080602

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080801

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080828

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20080929

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20080930

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081029

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20081104

A912 Removal of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20081128

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20090508

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110601

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20110705

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: 20110715

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: 20140722

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees