JPH0830561A - プログラムの並列化実行方法及び並列化実行コンパイラ - Google Patents

プログラムの並列化実行方法及び並列化実行コンパイラ

Info

Publication number
JPH0830561A
JPH0830561A JP6154942A JP15494294A JPH0830561A JP H0830561 A JPH0830561 A JP H0830561A JP 6154942 A JP6154942 A JP 6154942A JP 15494294 A JP15494294 A JP 15494294A JP H0830561 A JPH0830561 A JP H0830561A
Authority
JP
Japan
Prior art keywords
loop
communication
vector
execution
data
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
JP6154942A
Other languages
English (en)
Other versions
JP2634144B2 (ja
Inventor
Hideaki Komatsu
秀昭 小松
Kazuaki Ishizaki
一明 石崎
Osamu Goda
修 郷田
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP6154942A priority Critical patent/JP2634144B2/ja
Priority to US08/489,196 priority patent/US5852734A/en
Priority to EP95304672A priority patent/EP0691607A2/en
Publication of JPH0830561A publication Critical patent/JPH0830561A/ja
Application granted granted Critical
Publication of JP2634144B2 publication Critical patent/JP2634144B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • 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/451Code distribution
    • G06F8/452Loops

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)

Abstract

(57)【要約】 【目的】 ループを複数のプロセッサに分割して並列に
実行することにより、プログラムの実行を高速化する。 【構成】 先ず、ソース・プログラム中の並列化の対象
となるループが見出される。次にこのループに対して、
データ依存性の解析が行われ、これによってデータ依存
性ベクタが計算される。次に、ループが実行するインデ
ックスの領域のすべての領域が分割され、複数のプロセ
ッサに割り当てられる。さらに、個々のプロセッサで、
他のプロセッサとの間のデータのやり取りの必要性が解
析される。次に、配列のインデックス空間に基づいて通
信ベクタの計算が行われ、データ依存性ベクタと通信ベ
クタとの論理積により通信依存ベクタの計算が行われ、
通信依存ベクタの値に応じてオペランドの通信形態の判
定、及びループの実行形態の判定が行われる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、複数のプロセッサ上に
メモリを分散してもつコンピュータにおいて、ループを
複数のプロセッサに分割して並列に実行することによ
り、プログラムの実行を高速化するための技法に関す
る。
【0002】
【従来の技術】従来より、並列性抽出の技法は、与えら
れたプログラムの意味を保ちながら並列に実行できるた
めの先行制約を求めることによって行われている。先行
制約には、データ依存と制御依存がある。一般に、大規
模な並列性を考慮するためには、ループを解析し、その
データ依存性を解析し、その結果から並列性を抽出する
必要がある。ループを並列化する際に考慮すべきもっと
も重要なデータ依存性は以下の2つである。
【0003】 ・true dependence データの生産−>消費間の制
約 ・anti dependence データの消費−>生産間の制
【0004】尚、true dependenceは「フロー依存」、a
nti dependenceは「逆依存」とも呼ばれるが、以下の説
明では、true dependence、anti dependenceという用語
で統一する。
【0005】true dependenceは、計算に必要なデータ
が前もって計算されなければならないという制約であ
り、anti dependenceは、計算に必要なデータが再計算
される前に使用されなくてはならないという制約であ
る。ループ並列性において、どちらの依存性も依存距離
という値で表現される。これは、依存のある実行の距離
をそのループ変数の値の差で表現したものである。依存
距離についてもう少し説明を補足すると、
【0006】例えば、 のループで、データ依存関係によって、(I,J) = (1,1)
を実行した後に(1,2)を実行しなければならない場合
は、(1,2) - (1,1) = (0,1)の依存距離があるという。
また、データ依存関係によって、(I,J) = (2,2)を実行
した後に(3,1)を実行しなければならない場合は、(3,1)
- (2,2) = (1,-1)の依存距離があるという。特に、(3,
1) - (2,2) = (1,-1)のように、依存距離のある要素が
負の値を持つとき、依存距離が負の値をとる、と称す
る。
【0007】
【数3】
【0008】このプログラムでは、A(I)を計算するため
にはA(I-1)の読み出しが必要であり、そのためには、A
(I)の計算の時点で、A(I-1)の計算が終了していなけれ
ばならない。これが、true dependenceである。
【0009】また、A(I+1)の読み出しは、A(I+1)の計算
に先立って実行されなくてはならない。これがanti dep
endenceであり、その依存距離もやはり1である。これ
らの依存性を分析することによって、ループは、以下の
2つの並列性に大別される。
【0010】・do all ・do across
【0011】do all型のループとは、ループの繰り返し
間にまたがったデータ依存がないループ、即ち、true d
ependenceと、anti dependenceのどちらにも依存しない
ループであり、並列に実行することができる。do all型
のループの例を示すと以下のとおりである。
【0012】
【数4】
【0013】一方、do across型のループは、true depe
ndenceか、anti dependenceのどちらかもしくは両方と
も存在するループ、即ち、ループの繰り返し間にまたが
ったデータ依存があるループであり、何等かの最適化を
施さないと単純には並列化できないものである。
【0014】do across型のループのインデックス空間
を変形することによって依存性をなくすような最適化技
法(uni-modula変換に代表されるようなループ変換)が
従来より知られており、これは、メモリを共有するマル
チ・プロセッサには有効な手法である。しかし、このよ
うな並列化の手法は、メモリを共有しない分散型のマル
チ・プロセッサ・システムでは、インデックス空間の変
形に合わせて、個々のプロセッサが所有する配列を再分
配しなくてはならない。分散型のマルチ・プロセッサ・
システムでは、この種の処理は非常にコストがかかって
しまうので、場合によっては並列化によるメリットを打
ち消してしまうことがある。というのは、メモリを共有
しない分散型のマルチ・プロセッサでは、個々のプロセ
ッサが所有する配列を再分配するということは、プロセ
ッサ間通信を行なって個々のプロセッサが必要な配列要
素を、他のプロセッサから受けとることを意味するから
である。メモリを共有しない分散型のマルチ・プロセッ
サでは、個々のプロセッサが持つ配列のアクセス時間に
比べて、プロセッサ間通信による時間は非常に大きなペ
ナルティになる。
【0015】一方、分散型マルチ・プロセッサのための
do acrossループの最適化手段として、以下の2つがあ
る。 ・パイプライン法 ・プリフェッチ法
【0016】プリフェッチ法は、anti dependenceの依
存性に対して、ループの実行に必要となるすべてのデー
タを予め送受信しておくことによって、データの依存性
を回避するものである。これによって、anti dependenc
eのあるプログラムを並列に実行できる。
【0017】パイプライン法は、true dependenceの依
存性に対して、必要となるデータの計算終了の後に、必
要とするプロセッサに通信を送り、受信プロセッサは、
このメッセージの到着によって処理を開始する方法であ
る。
【0018】パイプライン法のメリットは、 (1)処理がパイプライン化されるため、メッセージを
受信したプロセッサは、次の処理を開始することができ
る。 (2)多重ループにおけるパイプライン実行では、直接
依存関係がないプロセッサは、並列に実行が可能とな
る。
【0019】
【数5】
【0020】プログラム例3では、2つのオペランドA
(I-1,J),A(I,J-1)のそれぞれにtruedependenceが存在す
る。さらに実行を終えたプロセッサは別の処理を行うと
いうパイプライン並列性も存在する。尚、この例で、
「*HPF$ PROCESSORS P(10,10)」というステートメント
は、プロセッサを10x10の2次元に配置し、そのプロセ
ッサ配置にPという名前を付けることを意味する。ま
た、「*HPF$ DISTRIBUTE A(BLOCK,BLOCK) onto P」とい
うステートメントは、すでに宣言されているAという配
列を、1次元方向、2次元方向、それぞれ格子状に分割
し、Pというプロセッサに配置(この場合は10x10のプロ
セッサ・メッシュ)することを意味する。
【0021】尚、ループを複数のプロセッサに分割して
並列に実行することにより、プログラムの実行を高速化
するための技法に関するものとして次のような刊行物が
ある。
【0022】特開昭61−182161号公報は、複数
のCPUと、複数のメモリとを基本構成要素とするマル
チプロセッサ計算機システムにおいて、各プロセッサを
ループ状に結合したストリーム・バスと、各プロセッサ
内部に設けられ、ストリーム・バスに対して一定方向に
メッセージを逆受する手段を有し、メッセージを上記各
プロセッサに送りながら、1つの処理を進めることを開
示する。
【0023】特開平4−184540号公報は、複数の
並列実行可能なプロセッサからなる並列計算機システム
に対して、与えられたソース・プログラムからオブジェ
クト・プログラムを生成するコンパイラにおいて、上記
ソース・プログラムを字句に分解して解析し、該解析結
果に基づき構文を認識し中間コードを生成し、その中間
コードからループ構造を検出して並列実行可能部分を抽
出し、該ループが多重ループである場合に、各ループに
関してデータ参照関係を解析し、ループ間でデータ参照
関係の生じないループに関して並列実行処理を行うこと
を開示する。
【0024】特開平5−158895号公報は、複数の
計算機が結合された並列計算機システムにおいて、ルー
プ間に値の参照を含む依存関係を有するループ計算機に
おける複数の連続ループ計算を分担し、依存関係により
他の計算機で必要とするデータを該他の計算機に通信す
ることを開示する。
【0025】その他にも、"A Loop Transformation The
ory and an Algorithm to MaximizeParalleism", IEEE
Transactions on Parallel and Distrubited System Vo
l.2No.4 Oct. 1991 などがある。
【0026】従来の方法は、プログラムのデータ依存の
みによって並列性を抽出しており、この手法は、対象と
するマルチ・プロセッサの構成を限定しない汎用なもの
である。しかし、この方法によって得られる並列実行可
能性は、分散メモリをもつマルチ・プロセッサにおける
並列実行可能性と等価ではない。すなわち、データ依存
のみを考慮した並列性では、すべてのオペランドがデー
タ依存性をもたない場合しか並列実行可能でない。一
方、分散メモリをもつマルチ・プロセッサでは、データ
のプリフェッチやパイプライン実行などの技法を利用す
ると、より大きな並列性を引き出すことが可能になる。
分散型マルチ・プロセッサにおける並列実行可能性は、
ループ中に含まれる各オペランドのデータ依存性によっ
て決定される。具体的には、以下の4種類のオペランド
によって構成されたループは並列実行が可能である。
【0027】(1)データ依存がないオペランド (2)データ依存がプロセッサ間(分割されたメモリ
間)に依存しないオペランド (3)プロセッサ間にまたがるanti dependenceのみが
存在するオペランド (4)プロセッサ間にまたがるtrue dependence vector
のみが存在し、実際にプロセッサ間をよぎる次元のtrue
dependence vectorの要素が負の依存距離をもたないオ
ペランド
【0028】(1)の場合は通常のdo all型のループで
あり、分散メモリ型のマルチ・プロセッサ・システムに
おいても、当然並列実行可能である。 (2)の場合、データの依存性は同一のプロセッサ内で
閉じているため、プロセッサ内で依存性を保てば、各プ
ロセッサは並列実行が可能となる。
【0029】ループ内に依存するすべてのデータ依存性
において、その依存距離が負の値をとらなければ、その
ループは、full permutable loopであると呼ばれ、どの
ループ・ネストの順番も自由に交換することが可能であ
る。このようなループ中のオペランドは、データ依存距
離が正の値しかとらないため、true dependenceをもっ
たオペランドに対しては、パイプライン法を適用でき
る。
【0030】分散型マルチ・プロセッサに対しては、
(3)や(4)のようなより拡張した定義が可能とな
る。例えば、(3)では、ループ中のあるオペランドが
anti dependenceをもつ場合、プリフェッチ法を適用す
ることが可能となる。
【0031】
【発明が解決しようとする課題】この発明の目的は、マ
ルチプロセッサ環境において、プログラムにおいて従来
技術では並列化できないようなanti dependenceまたはt
rue dependenceをもつループに対しても並列化を可能な
らしめる、コンパイラにおける拡張された並列化技法を
提供することにある。
【0032】この発明の他の目的は、anti dependence
またはtrue dependenceをもつループに対して、パイプ
ライン法またはプリフェッチ法を効果的に適用する技法
を提供することにある。
【0033】
【課題を解決するための手段】本発明では、これらの分
散マルチ・プロセッサにおける並列性を抽出するため
に、データ依存性を拡張した、プロセッサ間のデータ依
存性を表現する通信依存性(communication dependenc
e)を導入し、以下の目的を同時に達成する。
【0034】(1)各オペランドの最適な通信方法を検
出する。 (2)最大の並列実行可能なループを検出する。
【0035】本発明の技法は、主として、以下の5つの
フェーズにより構成される。
【0036】・対象ループ設定部 ここでは、ソース・プログラム中の並列化の対象となる
ループが見出される。 ・データ依存性解析部 ここでは、対象ループ設定部で決定されたループに対し
て、データ依存性の解析が行われ、これによってデータ
依存性ベクタが計算される。 ・イタレーション空間分割部 ここでは、ループが実行するインデックスの領域のすべ
ての領域が分割される。 ・通信解析部 ここでは、個々のプロセッサで、他のプロセッサとの間
のデータのやり取りの必要性が解析される。 ・通信依存性解析部 ここでは、通信ベクタの計算、通信依存ベクタの計算、
オペランドの通信形態の判定、及びループの実行形態の
判定、という本発明の骨子となる処理が行われる。
【0037】
【実施例】以下、図面を参照して本発明について説明す
る。 A.ハードウェア構成 本発明を実施するためには、互いにデータをやり取りす
るように相互接続された複数のプロセッサからなる、マ
ルチプロセッサ・システムが必要である。大別すると、
マルチプロセッサ・システムには、図1に示す分散メモ
リ型マルチプロセッサ・システムと、図2に示す共有メ
モリ型マルチプロセッサ・システムとがある。
【0038】図1を参照すると、分散メモリ型マルチプ
ロセッサ・システムは、複数のCPU102、104、
106・・・に、ローカル・バス122、124、12
6・・・を介して、それぞれ個別にメモリ112、11
4、116・・・が接続され、さらに各々のローカル・
バス122、124、126・・・は、個別の通信装置
132、134、136・・・及びディジタル・ネット
ワークを介して互いに接続されているようなシステムで
ある。
【0039】ディジタル・ネットワークは、典型的には
LANであるけれども、ISDN回線を通じてWAN
(広域ネットワーク)として構成されたものでもよい。
従って、分散メモリ型マルチプロセッサ・システムにお
いては、互いに相互接続し得るCPUの個数は、実質的
に無制限であり、このため、好適に分散処理のプログラ
ムを形成することにより、巨大な配列の行列計算などを
処理することも可能となる。
【0040】但し、分散メモリ型マルチプロセッサ・シ
ステムでは、LANまたはWANなどの通信回線を介し
てCPU間のデータのやり取りが行われるため、この通
信のための処理コストが負担になる可能性がある。
【0041】図2を参照すると、共有メモリ型マルチプ
ロセッサ・システムの典型的な構成が示されている。共
有メモリ型マルチプロセッサ・システムにおいては、複
数のCPU202、204、206・・・が、ローカル
・バス210を介して互いに接続され、また、ローカル
・バス210は、共有メモリ220に接続されている。
共有メモリ220の領域は、例えば個別のCPUによっ
て占有される排他的な領域と、複数のCPUによって共
通にアクセスされる共通の領域とを含む。
【0042】共有メモリ型マルチプロセッサ・システム
の利点は、CPUが互いにローカル・バスで相互接続さ
れているため、CPU間の通信コストが少なくて済むこ
とである。しかし、ある限定された筐体に複数のCPU
をパッケージする必要があるためと、共有バスに対する
複数CPUによるアクセスを調停する必要性とから、共
有メモリ型マルチプロセッサ・システムにおいて接続可
能なCPUの個数は自ずと制限がある。
【0043】本発明は、分散メモリ型マルチプロセッサ
・システムや共有メモリ型マルチプロセッサ・システム
などのCPUの接続形態に限定されることなく、複数の
CPUが互いに通信可能に構成された任意のシステムに
適用可能である。
【0044】B.処理部 本発明は、1つの実施例では、並列処理を行うためのコ
ードを生成し得るFORTRANコンパイラの機能の一
部として実現される。コンパイラにおいて本発明に関連
する処理を行う処理部は、大きく分けると、図3に示す
ように、対象ループ設定部302、データ依存性解析部
304、イタレーション空間分割部306、通信解析部
308、及び通信依存性解析部310からなる。以下、
これらについて詳細に説明する。
【0045】(1)対象ループ設定部302 ここでは、最大の並列性を抽出し、且つ、データのプリ
フェッチをループの最も外側で可能とするために、プロ
グラムにおける最も外側のループから最適化の対象とす
る。これにより設定されたループに含まれているオペラ
ンドの個々に通信依存性を求めることによって、それら
が必要とする通信形態が判断できる。また、個々の通信
形態によってループ全体の並列性を検出することも可能
となる。もし、ループが並列に実行できない場合には、
対象とするループを1レベル縮小して解析を実行してい
く。これによって最大の並列性が抽出される。
【0046】また、並列に実行できない場合でも、すべ
てのオペランドのうちプリフェッチ可能なオペランド
は、そのループのネスト・レベルでプリフェッチ通信が
可能であるため、ここにその通信を生成し、より小さな
レベルの検出の対象から除外する。これによって、 ・通信するデータをループの並列性よりも大きな単位で
ベクトル化できる。 ・同じデータを複数回通信することを避けられる。 ・内側のループのデータ依存性を減らすことによってよ
り並列性が向上する。 ・内部ループでテストすべきオペランドが減るため、処
理が高速になる。 というメリットを実現できる。実際のテストを行うのが
以下の4つのフェーズである。
【0047】尚、対象ループとしては、一般的にFOR
TRANのDOで記述されるループに限定される訳ではな
く、FORTRAN90におけるアレイ表現や、SPREA
D、CSHIFTなどの組み込み変換関数(TIF)も含む。
なぜなら、特願平5−296269号明細書に記載され
ているように、FORTRAN90におけるアレイ表現
やTIFは、DOループに展開可能だからである。FOR
TRAN90自体のより詳しい仕様については、Jeanne
C. Adams et al. "FORTRAN90 HANDBOOK Complete ANS
I/ISO Reference", McGraw Hill Inc.などに記載されて
いる。
【0048】(2)データ依存性解析部304 これは、(1)の対象ループ設定部によって決定された
ループに対して、通常のデータ依存性の解析を行うもの
である。その結果として、データ依存性ベクタ(data d
ependence vector)を生成する。data dependence vect
orは、true dependenceと、anti dependenceによるiter
ation間の依存の方向を、+/-/0であらわしたものであ
り、特に、true dependenceに関するものを、true depe
ndence vector、anti dependenceに関するものを、anti
dependence vectorと呼ぶ。
【0049】
【数6】
【0050】プログラム例4では、A(I+1,J)に対してan
ti(0,1)、A(I,J-1)に対して、true(1,0)というデータ依
存性ベクタを検出できる。データ依存性ベクタは、配列
のインデックスの次元の順序でなく、ループ・インデク
ックスの次元で表記されるため、配列Aの1次元目のイ
ンデックスIに対する依存性は、データ依存性ベクタの
2次元目の値として表記されている。
【0051】(3)イタレーション空間分割部306 ループを並列に実行するためには、ループの実行するイ
ンデックスのすべての領域(イタレーション空間)を分
割する必要がある。この手法として、"owner computes
rule"と呼ばれるイタレーション空間分割方法が知られ
ており、本発明の実施例もこの手法を使用する。尚、"o
wner computes rule"の詳細は、A. Rogers and K. Ping
ali. Process Decomposition through locality of ref
erence.In Proceedings of the SIGPLAN '89 Conferenc
e on Program Language Designand Implementation, Ju
ne 1989 に記述されている。これは、要するに、ルー
プのイタレーション空間を代入文の左辺のデータの分割
方法にあわせて行う方法である。これによって必ずしも
最適な解が得られる訳ではないが、かなりよい結果を期
待できる。尚、本発明は、イタレーション空間分割方法
として、"owner computes rule"を使用することを必須
の要件としている訳ではなく、その他の任意の適当なイ
タレーション空間分割方法を使用することが可能であ
る。
【0052】このようにしてイタレーション空間分割が
達成され、各々のCPUに分割されたインデックスの領
域がそれぞれ割り当てられると、図1の構成では、特定
のCPU(例えばCPU102とする)に割り当てられ
たインデックスをもつ配列変数は、メモリ112に配置
されることになる。一方、図2の構成では、特定のCP
U(例えばCPU202とする)に割り当てられたイン
デックスをもつ配列変数は、共有メモリ220におけ
る、CPU202に割り当てられた領域に配置されるこ
とになる。
【0053】上記例3に対して、この"owner computes
rule"を適用すると、配列Aは1次元のみに4プロセッ
サに分割されているので、配列Aの1次元目のインデッ
クス変数であるIのとり得る範囲は次のように分割され
る。
【数7】 Processor1 = 2..25 Processor2 = 26..50 Processor3 = 51..75 Processor4 = 76..99
【0054】(4)通信解析部308 通信解析部は、各プロセッサが並列に実行できるように
分割されたイタレーション空間を実行するために、どの
データを読み込む必要があるかを解析し、自分の持ち分
と比較し、通信しなければならないデータの領域を決め
るものである。通信するデータは、配列のインデックス
で表現された情報である。
【0055】プログラム例4では、1つ目の右辺のオペ
ランドが1次元方向に1ずれた領域を後ろのプロセッサ
から読み込みをする必要がある。また、2つ目の右辺の
オペランドに対しては、2次元方向に1ずれているけれ
ども、配列Aは、2次元方向には分割されていないた
め、通信は必要ない。
【0056】(5)通信依存性解析部310 通信依存性解析部では、以下の4つの手順で処理を行
う。 ・通信ベクタの計算 ・通信依存ベクタの計算 ・オペランドの通信形態の判定 ・ループの実行形態の判定
【0057】(通信ベクタの計算)通信解析部の結果で
ある、各プロセッサの通信の情報から、通信ベクタ(co
mmunication vector)を生成する。これは、プロセッサ
間の通信の有無を、ループ・ネスト毎に、1/0で示した
ベクタである。通信ベクタの求め方は、以下のとおりで
ある。先ず、通信するデータは、配列のインデックスで
表現された情報であり、通信ベクタは、ループ・インデ
ックス空間における通信の発生を求めたものであり、配
列のインデックス式と通信情報から、計算可能である。
【0058】例えば、上記例4のプログラムでは、1つ
目の右辺のオペランドの通信は、ループ・インデックス
Iが変化することによって発生し、ループ・インデック
スJの変化に対しては発生しない。また、ループ・イン
デックスIは、ループ・ネストにおける2次元に対応し
ている。そこで、A(I-1,J)に対してcomm(0,1)という通
信ベクタが計算できる。また、A(I,J+1)に対しては全く
通信が必要ないため、通信ベクタは、comm(0,0)とな
る。
【0059】(通信依存ベクタの計算)次に、(2)の
データ依存解析部で得られた、データ依存性ベクタであ
る、true dependence vectorと、anti dependence vect
orから、通信依存性ベクタを生成する。通信依存性ベク
タは、true communication dependence vectorと、anti
communication dependence vectorの2つであり、それ
ぞれ、true dependencevectorと、anti dependence vec
torに対して、communication vectorで論理積をとるこ
とによって計算される。
【数8】 true communication dependence vector = true dependence vector & communication vector anti communication dependence vector = anti dependence vector & communication vector
【0060】この論理積 & の真理値表は、以下のよう
になっている。
【数9】 + & 1 = + + & 0 = 0 0 & 1 = 0 0 & 0 = 0 - & 1 = - - & 0 = 0
【0061】この論理積演算は、通常の論理積演算と少
し異なるので、説明を補足すると、通信依存ベクタは、
配列の次元ごとの通信の有り/無しを1/0で示す。通
信依存ベクタの計算の論理積の意味は、通信依存ベクタ
の値が1であるループネスト次元についてはデータ依存
性ベクタの値をそのまま用いて、0であるループネスト
の次元については0にする。データ依存性ベクタの各次
元の要素は、既に依存距離に関して説明したように、正
の値/0/負の値をとる。従って、ここでは、各次元の
要素の符号が意味を持つので、+/0/−と表記されて
いる。
【0062】例4のプログラムでは、1つ目のオペラン
ドA(I+1,J)に対して、 データ依存性ベクタ anti(0,1) 通信ベクタ comm(0,1) よって、 通信依存性ベクタ anti_comm(0,1) 同様にして2つ目のオペランドA(I,J-1)に対して、 データ依存性ベクタ true(0,1) 通信ベクタ comm(0,0) よって、 通信依存性ベクタ true_comm(0,0) のように、通信依存性ベクタが計算される。
【0063】(オペランド通信形態の判定)このように
して計算されたデータより、各オペランドがどのように
通信されるのが最適であるのかを判定する。基本的な通
信形態は、以下の4種類である。 ・no communication 通信なし ・prefetch communication 実行前にプリフェッチ可能 ・pipeline communication パイプライン実行のトリガ
として使用 ・synchrnous communication 1要素ずつループの実行
に併せて通信 各オペランドの通信を決定する論理は以下のようにな
る。
【0064】
【数10】 if communication vector = 0 then "no communication" else if true dependence = 0 & anti dependence = 0 then "prefetch communication" else if true dependence = 0 & anti dependence <> 0 then "prefetch communication" else if true dependence <> 0 & anti dependence = 0 & true communication dependenceが負の値をもっていない then "pipeline communication" else "synchronous communication"
【0065】(ループ実行方式の決定) ループの実行は以下の3種類に分類される。 ・DO PARALLEL 並列実行可能ループ ・DO PIPELINE パイプライン実行可能ルー
プ ・DO SYNCHRONOUS 並列化不可能ループ
【0066】ループ内のすべてのオペランドが"no comm
unication"か"prefetch communication"に分類されたな
ら、そのループは並列実行が可能である。
【0067】ループ内のすべてのオペランドが"no comm
unication"か"prefetch communication"か1つ以上の"p
ipeline communication"を含んでいる場合には、そのル
ープはパイプライン実行可能である。すべてのパイプラ
イン実行可能オペランドのtrue communication depende
nce vecotorの論理和をとることによって、パイプライ
ン実行を行うすべてのループ・インデックスを求めるこ
とが可能である。ここで論理和をとる理由について説明
すると、true communication dependence vectorがルー
プ内に存在する場合、パイプライン通信が可能になる。
このとき、ループの実行前後で発生するパイプライン通
信を行なう次元方向を決定する必要があるので、ループ
の中に存在する全てのtrue communication dependence
vectorの論理和をとって、パイプライン通信が必要な次
元を求めるのである。
【0068】ループ内のオペランドの1つでも"synchro
nous communication"を含んでいる場合には、並列化が
不可能である。
【0069】一般的なループにおいて本発明を適用する
と、最内ループでは、ほとんど並列実行が可能となる。
なぜなら、最内ループは当然1次元ループであり、1次
元ループにおけるデータ依存の依存距離は必ず正の値を
とるからである。
【0070】C.処理手順 次に図4を参照して、ソース・プログラムを並列化する
処理について説明する。先ず、ステップ404では、ソ
ース・プログラムが入力される。この実施例では、FO
RTRANのプログラムを想定している。
【0071】次に、ステップ404では、図3の対象ル
ープ設定部の働きによって、並列化対象ループ設定処理
が行われる。
【0072】並列化対象ループが設定されると、ステッ
プ406では、図3のイタレーション空間分割部306
によって、各プロセッサの計算領域が解析され、続いて
ステップ408では、通信解析部308の処理によって
各プロセッサの通信領域の解析が行われ、この結果を以
てステップ410では、通信依存性解析部310で通信
ベクタが計算される。
【0073】一方、ステップ406とは独立に、ステッ
プ412では、設定された並列化対象ループに基づき、
データ依存性解析部304によって、ループ間のデータ
依存性の解析が行われる。この結果に基づき、ステップ
414では、データ依存性ベクタが計算される。
【0074】次に、ステップ416では、ステップ41
0で計算された通信ベクタと、ステップ418で計算さ
れたデータ依存性ベクタとから、通信依存性の解析が行
われる。具体的には、ステップ416では、通信ベクタ
とデータ依存性ベクタとの間の論理積が計算され、こう
して、ステップ418では、通信依存性ベクタが得られ
る。
【0075】ステップ420では、このようにして計算
された通信依存性ベクタに基づき並列実行ループ及び通
信の決定が行われる。
【0076】ステップ422では、ステップ420での
判定結果に基づき、すべてのオペランドが並列実行かど
うかのチェックが行われ、もしそうなら、ステップ43
0で、並列実行ループを設定するコードを生成する。
【0077】ステップ422での判断が否定的なら、ス
テップ424で、多重ネスト・ループかどうかの判断が
行われる。もしそうなら、プリフェッチ可能なオペラン
ドを対象ループから外す。この処理は、すなわち、プリ
フェッチ可能なオペランドにつき、ループの外に、その
オペランドをプリフェッチ通信する処理を指定するコー
ドを挿入することを意味する。この処理については、下
記のプログラム例5に関してより詳細に説明される。
【0078】ステップ428の後は、ステップ404に
戻り、多重ネスト・ループの1つ内側のループについ
て、ステップ406以下及びステップ412以下の処理
がそれぞれ適用される。
【0079】ステップ424に戻って、多重ネスト・ル
ープでない場合は、ステップ426で、逐次実行ループ
を指定するコードが生成される。
【0080】D.具体的な例 以下、本発明を用いた、プログラムからの並列性の抽出
方法を具体例によって示す。
【数11】
【0081】プログラム例5は、SOR法(差分法)に
よって、偏微分方程式を解くためのコードの一部であ
る。一般的なプログラムは、前後左右との差分を求めて
いくが、このプログラムは、斜め方向のセルを対象とす
る、複雑なデータ依存をもったものである。実行するプ
ロセッサは10台で、配列Aを2次元方向に分割してい
る。
【0082】先ず、対象ループとして、全体としての並
列性の抽出を行う。この場合の対象ループは、(TIME,J,
I)の3重ループに対して並列性抽出の処理を行う。
【0083】各オペランドのデータ依存性は、
【数12】 A(I-1,J-1) true(+, 1, 1) anti(+,-1,-1) A(I-1,J+1) true(+, 1,-1) anti(+,-1, 1) A(I+1,J-1) true(+,-1, 1) anti(+, 1,-1) A(I+1,J+1) true(+,-1,-1) anti(+, 1, 1) となる。
【0084】次に、通信ベクタを求める。
【数13】 A(I-1,J-1) comm(0,1,0) A(I-1,J+1) comm(0,1,0) A(I+1,J-1) comm(0,1,0) A(I+1,J+1) comm(0,1,0) となる。
【0085】これにより、通信依存ベクタは、以下のよ
うになる。
【数14】 A(I-1,J-1) true_comm(0,1,0) anti_comm(0,-1,0) A(I-1,J+1) true_comm(0,1,0) anti_comm(0,-1,0) A(I+1,J-1) true_comm(0,-1,0) anti_comm(0,1,0) A(I+1,J+1) true_comm(0,-1,0) anti_comm(0,1,0)
【0086】これにより、4つのオペランドのどれ
も、"synchronous communication"に分類されるため、
このループは、"do synchronous"に分類される。さら
に、どのオペランドもプリフェッチ可能でないため、こ
のネスト・レベルでは、プリフェッチ通信ができず、さ
らに、ネストを1段小さくした解析の対象として、オペ
ランドのどれも外すことはできない。
【0087】次に、内側の2重ループ(I,J)に対して、
並列性抽出を行う。この場合、データ依存性ベクタは以
下のようになる。
【数15】 A(I-1,J-1) true(1,1) A(I-1,J+1) true(1,-1) A(I+1,J-1) anti(1,-1) A(I+1,J+1) anti(1,1)
【0088】さらに、通信ベクタは、以下のようにな
る。
【数16】 A(I-1,J-1) comm(1,0) A(I-1,J+1) comm(1,0) A(I+1,J-1) comm(1,0) A(I+1,J+1) comm(1,0)
【0089】これにより、通信依存ベクタは、
【数17】 A(I-1,J-1) true_comm(1,0) A(I-1,J+1) true_comm(1,0) A(I+1,J-1) anti_comm(1,0) A(I+1,J+1) anti_comm(1,0)
【0090】となり、これらの結果より、個々のオペラ
ンドの通信形態を決定する。
【数18】
【0091】この2つのオペランドは、パイプライン通
信が可能なオペランドである。
【数19】
【0092】この2つのオペランドはプリフェッチが可
能なオペランドであることから、ループ全体はパイプラ
イン実行が可能であることが分かる。また、このパイプ
ライン通信可能な2つのオペランドのtrue communicati
on dependence vectorの論理和|をとると、
【数20】 true_comm(1,0) | true_comm(1,0) --> true_comm(1,0)
【0093】となり、Jループのみで、パイプラインす
ればよいことが分かる。これにより、次のように分散型
マルチ・プロセッサ用に並列化されたコードを生成する
ことが可能となる。
【数21】
【0094】但し、この式で、ProcIDは、個々のプロセ
ッサ番号を示すものであり、個々のプロセッサにおい
て、LB(ProcID)及びUB(ProcID)は、以下の表に従い、イ
ンデックスの値に置換される。
【表1】
【0095】このプログラムは、10個のプロセッサ全
てを並列に実行させることが可能である。
【0096】尚、上記マルチ・プロセッサ用に並列化さ
れたコードにおいて、 A(I+1,J-1)と、A(I+1,J+1)をプリフェッチ通信 A(I-1,J-1)と、A(I-1,J+1)をパイプライン受信 A(I-1,J-1)と、A(I-1,J+1)をパイプライン送信 の部分のインデックスの範囲は、記述を省略しているけ
れども、Iは、2と99の間の値である。また、Jについて
は、表1に示すように、個別のプロセッサに応じて実行
するインデックスが異なることに留意されたい。
【0097】プリフェッチ通信と記述されている処理
は、それぞれ1つのプロセッサが、2重ループ内の処理
をプリフェッチ不要に行うために、他のプロセッサか
ら、2重ループの外で、予め必要なインデックスに関連
する配列データを通信しておくことを指定するものであ
る。
【0098】パイプライン受信と記述されている処理
は、1つのプロセッサが、パイプライン処理を行うた
め、パイプラインの列の1つ前のプロセッサから必要な
インデックスに関連する配列データを受信しておくため
の処理である。
【0099】パイプライン送信と記述されている処理
は、1つのプロセッサが、処理を完了した後、パイプラ
インの列の1つ後のプロセッサに、必要なインデックス
に関連する配列データを送信し、1つ後のプロセッサに
処理を渡すための処理である。これによって、処理を完
了したプロセッサは、別の処理に進むことが可能とな
る。
【0100】
【発明の効果】従来の方法では、データ依存による先行
制約のみによって並列性を抽出していたのに対し、本発
明では、それに加えて、分散メモリ環境における通信を
考慮した、通信依存性に着目し、これを有効に活用する
ことで、 ・各オペランドの最適な通信方法を検出する。 ・最大の並列実行可能なループを抽出する。 の2つを同時に達成することが可能となった。
【0101】尚、上記実施例では、ユーザーがデータの
分割を指定しているため、データ依存ベクタ、通信ベク
タ、通信依存ベクタの順で計算を行うことによって並列
性を抽出する例を説明したが、 ・データ依存ベクタ ・並列化可能通信依存ベクタ ・通信ベクタ ・プロセッサ分割 の順で計算することによって、並列性を最大にするよう
な自動データ分割の機能を提供することも可能である。
【0102】この場合には、先ずデータ依存ベクタを求
め、並列に実行できない原因となっている次元を検出
し、これをマスクすることによって、並列化可能通信依
存ベクタを生成する。さらに、このマスク情報は通信ベ
クタになる。
【0103】この際に、対象となるプログラムが、パイ
プライン化によって、十分プロセッサの並列化を引き出
せるかを検討する必要がある。これは、対象とするルー
プの実行後にパイプライン実行可能ループか、並列実行
可能ループに到達するかによって、テストできる。
【0104】さらに、決定した通信ベクタと配列のイン
デックス式により、プロセッサ分割を計算することが可
能である。この方式でも、上記実施例と同様に、対象ル
ープを外側から内側に向かって並列化可能になるまで繰
り返すことによって、最大の並列性を抽出することがで
きる。
【0105】また、上記実施例では、HPF(FORT
RAN90をベースとする並列処理言語)に基づき説明
を行ったが、本発明はこのような特定のプログラミング
言語に限定されるものではなく、APL、C*(Cをベ
ースとする並列言語)などの、マルチプロセッサ環境に
おける並列処理をサポートする任意の言語処理系に適用
可能である。
【図面の簡単な説明】
【図1】 分散メモリ型マルチプロセッサの構成を示す
ブロック図である。
【図2】 共有メモリ型マルチプロセッサの構成を示す
ブロック図である。
【図3】 本発明の処理部のブロック図である。
【図4】 本発明の処理の手順を示すフローチャートの
図である。
フロントページの続き (72)発明者 石崎 一明 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 (72)発明者 郷田 修 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内

Claims (18)

    【特許請求の範囲】
  1. 【請求項1】複数のプロセッサをもつコンピュータにお
    いて、ソース・プログラムにおけるループを複数のプロ
    セッサに分割して並列に実行させることにより、プログ
    ラムの実行を高速化するための方法であって、(a) ソー
    ス・プログラムを読み込む段階と、(b) 上記ソース・プ
    ログラムにおいて、並列化すべきループを設定する段階
    と、(c) 上記設定されたループに関して、true depende
    nce及びanti dependenceを示すデータ依存性ベクタを決
    定する段階と、(d) 上記ループのイタレーション空間を
    分割して、上記複数のプロセッサに割り当てる段階と、
    (e) 上記複数のプロセッサに割り当てられた各々のイタ
    レーション空間において、並列処理のため他のプロセッ
    サからデータを読み込む必要がある部分を決定する段階
    と、(f) 上記イタレーション空間において他のプロセッ
    サからデータを読み込む必要があると決定された領域に
    関する情報に基づき、通信ベクタを計算する段階と、
    (g) 上記データ依存性ベクタと上記通信ベクタに基づ
    き、通信依存性ベクタを計算する段階と、(h) 上記通信
    依存性ベクタの値に基づき、通信形態を判定する段階
    と、(i) 上記判定された通信形態に基づき、各オペラン
    ド間の通信方法を検出することによって、通信方法及び
    ループ実行方法を指定するコードを生成する段階を有す
    る、 プログラムの並列化実行方法。
  2. 【請求項2】上記ループがネストしたループである場合
    に、上記段階(e)乃至(i)を、外側のループから内側のル
    ープに順次適用する段階を有する、請求項1に記載のプ
    ログラムの並列化実行方法。
  3. 【請求項3】上記ネストしたループにおいて、プリフェ
    ッチ可能なループが見出だされたことに応答して、該プ
    リフェッチ可能なオペランドを対象ループから外し、上
    記ネストしたループの外側に、該プリフェッチ可能なオ
    ペランドをプリフェッチすることを指定するコードを挿
    入する段階を有する、請求項2に記載のプログラムの並
    列化実行方法。
  4. 【請求項4】上記通信方法は、プリフェッチ通信、パイ
    プライン送信、パイプライン受信のうちのどれかであ
    る、請求項1に記載のプログラムの並列化実行方法。
  5. 【請求項5】上記ループ実行方法は、並列実行、パイプ
    ライン実行、並列化不可能実行のうちのどれかである、
    請求項1に記載のプログラムの並列化実行方法。
  6. 【請求項6】上記ソース・プログラムは、使用するプロ
    セッサの個数と、ループ中の配列を該プロセッサに割り
    当てるステートメントを含むものである、請求項1に記
    載のプログラムの並列化実行方法。
  7. 【請求項7】上記データ依存性ベクタと上記通信ベクタ
    に基づき、通信依存性ベクタを計算する段階は、上記デ
    ータ依存性ベクタと上記通信ベクタとの論理積を計算す
    る段階を有する、請求項1に記載のプログラムの並列化
    実行方法。
  8. 【請求項8】上記論理積は、データ依存性ベクタの成分
    が取り得る値を+,-,0、通信ベクタの成分が取り得る値
    を1,0としたとき、 【数1】 + & 1 = + + & 0 = 0 0 & 1 = 0 0 & 0 = 0 - & 1 = - - & 0 = 0 の真理値表で示される規則に従い計算される、請求項7
    に記載のプログラムの並列化実行方法。
  9. 【請求項9】複数のプロセッサをもつコンピュータにお
    いて、ソース・プログラムにおけるループを複数のプロ
    セッサに分割して並列に実行させることにより、プログ
    ラムの実行を高速化する処理部を含むコンパイラであっ
    て、(a) ソース・プログラムを読み込む手段と、(b) 上
    記ソース・プログラムにおいて、並列化すべきループを
    設定する手段と、(c) 上記設定されたループに関して、
    true dependence及びanti dependenceを示すデータ依存
    性ベクタを決定する手段と、(d) 上記ループのイタレー
    ション空間を分割して、上記複数のプロセッサに割り当
    てる手段と、(e) 上記複数のプロセッサに割り当てられ
    た各々のイタレーション空間において、並列処理のため
    他のプロセッサからデータを読み込む必要がある部分を
    決定する手段と、(f) 上記イタレーション空間において
    他のプロセッサからデータを読み込む必要があると決定
    された領域に関する情報に基づき、通信ベクタを計算す
    る手段と、(g) 上記データ依存性ベクタと上記通信ベク
    タに基づき、通信依存性ベクタを計算する手段と、(h)
    上記通信依存性ベクタの値に基づき、通信形態を判定す
    る手段と、(i) 上記判定された通信形態に基づき、各オ
    ペランド間の通信方法を検出することによって、通信方
    法及びループ実行方法を指定するコードを生成する手段
    を具備する、 コンパイラ。
  10. 【請求項10】上記ループがネストしたループである場
    合に、上記段階(e)乃至(i)を、外側のループから内側の
    ループに順次適用する段階を有する、請求項9に記載の
    コンパイラ。
  11. 【請求項11】上記通信方法は、プリフェッチ通信、パ
    イプライン送信、パイプライン受信のうちのどれかであ
    る、請求項9に記載のコンパイラ。
  12. 【請求項12】上記ループ実行方法は、並列実行、パイ
    プライン実行、並列化不可能実行のうちのどれかであ
    る、請求項9に記載のコンパイラ。
  13. 【請求項13】上記データ依存性ベクタと上記通信ベク
    タに基づき、通信依存性ベクタを計算する段階は、上記
    データ依存性ベクタと上記通信ベクタとの論理積を計算
    する段階を有する、請求項9に記載のコンパイラ。
  14. 【請求項14】上記論理積は、データ依存性ベクタの成
    分が取り得る値を+,-,0、通信ベクタの成分が取り得る
    値を1,0としたとき、 【数2】 + & 1 = + + & 0 = 0 0 & 1 = 0 0 & 0 = 0 - & 1 = - - & 0 = 0 の真理値表で示される規則に従い計算される、請求項1
    3に記載のコンパイラ。
  15. 【請求項15】上記ソース・プログラムは、使用するプ
    ロセッサの個数と、ループ中の配列を該プロセッサに割
    り当てるステートメントを含むものである、請求項9に
    記載のコンパイラ。
  16. 【請求項16】上記ソース・プログラムは、FORTR
    ANのコードである、請求項15に記載のコンパイラ。
  17. 【請求項17】上記ソース・プログラムは、FORTR
    AN90のコードである、請求項16に記載のコンパイ
    ラ。
  18. 【請求項18】上記並列化すべきループを設定する手段
    は、ソース・プログラム中のアレイ表現及びTIFをル
    ープとして設定する手段を有する、請求項17に記載の
    コンパイラ。
JP6154942A 1994-07-06 1994-07-06 プログラムの並列化実行方法及び並列化実行コンパイラ Expired - Fee Related JP2634144B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP6154942A JP2634144B2 (ja) 1994-07-06 1994-07-06 プログラムの並列化実行方法及び並列化実行コンパイラ
US08/489,196 US5852734A (en) 1994-07-06 1995-06-09 Method and compiler for parallel execution of a program
EP95304672A EP0691607A2 (en) 1994-07-06 1995-07-04 Data processing system and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP6154942A JP2634144B2 (ja) 1994-07-06 1994-07-06 プログラムの並列化実行方法及び並列化実行コンパイラ

Publications (2)

Publication Number Publication Date
JPH0830561A true JPH0830561A (ja) 1996-02-02
JP2634144B2 JP2634144B2 (ja) 1997-07-23

Family

ID=15595306

Family Applications (1)

Application Number Title Priority Date Filing Date
JP6154942A Expired - Fee Related JP2634144B2 (ja) 1994-07-06 1994-07-06 プログラムの並列化実行方法及び並列化実行コンパイラ

Country Status (3)

Country Link
US (1) US5852734A (ja)
EP (1) EP0691607A2 (ja)
JP (1) JP2634144B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010191506A (ja) * 2009-02-16 2010-09-02 Fujitsu Ltd コンパイル装置およびコンパイルプログラム
US9195444B2 (en) 2014-03-27 2015-11-24 Fujitsu Limited Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6074433A (en) * 1995-08-25 2000-06-13 Fujitsu Limited Optimization control apparatus and optimization control method for array descriptions
US6247173B1 (en) * 1997-09-24 2001-06-12 Hewlett-Packard Company Computer compiler optimizer for reducing computer resource consumption during dependence analysis after loop unrolling
US6745384B1 (en) 1998-05-29 2004-06-01 Microsoft Corporation Anticipatory optimization with composite folding
US6820250B2 (en) * 1999-06-07 2004-11-16 Intel Corporation Mechanism for software pipelining loop nests
US6507947B1 (en) * 1999-08-20 2003-01-14 Hewlett-Packard Company Programmatic synthesis of processor element arrays
US6374403B1 (en) * 1999-08-20 2002-04-16 Hewlett-Packard Company Programmatic method for reducing cost of control in parallel processes
US6438747B1 (en) * 1999-08-20 2002-08-20 Hewlett-Packard Company Programmatic iteration scheduling for parallel processors
US20040006667A1 (en) * 2002-06-21 2004-01-08 Bik Aart J.C. Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions
US7827017B2 (en) * 2002-12-17 2010-11-02 Cadence Design Systems, Inc. Method and system for implementing circuit simulators
US7581215B1 (en) * 2003-06-30 2009-08-25 Sun Microsystems, Inc. Dependency analysis system and method
US20060048122A1 (en) * 2004-08-30 2006-03-02 International Business Machines Corporation Method, system and computer program product for hierarchical loop optimization of machine executable code
US7673294B2 (en) * 2005-01-18 2010-03-02 Texas Instruments Incorporated Mechanism for pipelining loops with irregular loop control
US7823141B1 (en) * 2005-09-30 2010-10-26 Oracle America, Inc. Using a concurrent partial inspector loop with speculative parallelism
KR100806274B1 (ko) * 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
GB0601566D0 (en) * 2006-01-26 2006-03-08 Codeplay Software Ltd A parallelization system and compiler for use in such a system
US8443351B2 (en) * 2006-02-23 2013-05-14 Microsoft Corporation Parallel loops in a workflow
JP4784827B2 (ja) * 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US8146071B2 (en) * 2007-09-18 2012-03-27 International Business Machines Corporation Pipelined parallelization of multi-dimensional loops with multiple data dependencies
US11048765B1 (en) 2008-06-25 2021-06-29 Richard Paiz Search engine optimizer
US8209525B2 (en) * 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
CN102292709B (zh) * 2009-04-28 2014-05-21 国际商业机器公司 用于变换在多线程上工作的程序的程序代码的方法和系统
US8645935B2 (en) * 2009-05-01 2014-02-04 University Of Maryland Automatic parallelization using binary rewriting
WO2011080054A1 (en) * 2009-12-30 2011-07-07 International Business Machines Corporation Extraction of data parallelism
US8572359B2 (en) 2009-12-30 2013-10-29 International Business Machines Corporation Runtime extraction of data parallelism
US9696995B2 (en) 2009-12-30 2017-07-04 International Business Machines Corporation Parallel execution unit that extracts data parallelism at runtime
US8464026B2 (en) * 2010-02-17 2013-06-11 International Business Machines Corporation Method and apparatus for computing massive spatio-temporal correlations using a hybrid CPU-GPU approach
US8683185B2 (en) 2010-07-26 2014-03-25 International Business Machines Corporation Ceasing parallel processing of first set of loops upon selectable number of monitored terminations and processing second set
US8701099B2 (en) * 2010-11-02 2014-04-15 International Business Machines Corporation Accelerating generic loop iterators using speculative execution
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
US11741090B1 (en) 2013-02-26 2023-08-29 Richard Paiz Site rank codex search patterns
US11809506B1 (en) 2013-02-26 2023-11-07 Richard Paiz Multivariant analyzing replicating intelligent ambience evolving system
US10282275B2 (en) 2016-09-22 2019-05-07 Microsoft Technology Licensing, Llc Method and system for managing code
US10372441B2 (en) 2016-11-28 2019-08-06 Microsoft Technology Licensing, Llc Build isolation system in a multi-system environment

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61182161A (ja) * 1985-02-08 1986-08-14 Hitachi Ltd マルチプロセツサ処理方式
JPH04184540A (ja) * 1990-11-20 1992-07-01 Matsushita Electric Ind Co Ltd 並列化コンパイル方式
JP3032031B2 (ja) * 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
US5450585A (en) * 1991-05-15 1995-09-12 International Business Machines Corporation Compiler with delayed conditional branching
JPH05158895A (ja) * 1991-12-05 1993-06-25 Fujitsu Ltd 並列計算機システムにおけるループ計算の効率向上方式
US5274818A (en) * 1992-02-03 1993-12-28 Thinking Machines Corporation System and method for compiling a fine-grained array based source program onto a course-grained hardware
JPH05296269A (ja) 1992-04-14 1993-11-09 Sumitomo Electric Ind Ltd フルディスクタイプブレーキ摩擦板
US5367651A (en) * 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
US5522074A (en) * 1992-12-14 1996-05-28 Nec Corporation Vectorization system for vectorizing loop containing condition induction variables
US5485619A (en) * 1993-12-29 1996-01-16 International Business Machines Corporation Array variable transformation system employing subscript table mapping to scalar loop indices
US5491823A (en) * 1994-01-25 1996-02-13 Silicon Graphics, Inc. Loop scheduler
US5457799A (en) * 1994-03-01 1995-10-10 Digital Equipment Corporation Optimizer for program loops

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010191506A (ja) * 2009-02-16 2010-09-02 Fujitsu Ltd コンパイル装置およびコンパイルプログラム
US9195444B2 (en) 2014-03-27 2015-11-24 Fujitsu Limited Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction

Also Published As

Publication number Publication date
EP0691607A2 (en) 1996-01-10
JP2634144B2 (ja) 1997-07-23
US5852734A (en) 1998-12-22

Similar Documents

Publication Publication Date Title
JP2634144B2 (ja) プログラムの並列化実行方法及び並列化実行コンパイラ
US8656347B2 (en) Generation of parallelized program based on program dependence graph
US5230053A (en) Processor scheduling method for iterative loops
Kim et al. Performance analysis and tuning for general purpose graphics processing units (GPGPU)
US6016397A (en) Method and apparatus for compilation of a data parallel language
US8893103B2 (en) Automatic asynchronous offload to many-core coprocessors
US20190079805A1 (en) Execution node selection method and information processing apparatus
JP3053092B2 (ja) 並列化コンパイル方法
Dong et al. Characterizing the microarchitectural implications of a convolutional neural network (cnn) execution on gpus
US20150269225A1 (en) System and method for parallelizing grid search method facilitating determination of pk-pd parameters
Kong et al. Compiler/runtime framework for dynamic dataflow parallelization of tiled programs
Chowdhury et al. Provably efficient scheduling of cache-oblivious wavefront algorithms
US7076777B2 (en) Run-time parallelization of loops in computer programs with static irregular memory access patterns
US20070157184A1 (en) Statement shifting to increase parallelism of loops
US20030126589A1 (en) Providing parallel computing reduction operations
Yan et al. Homp: Automated distribution of parallel loops and data in highly parallel accelerator-based systems
JP5120778B2 (ja) 分散メモリ型マルチプロセッサシステム、マスク付き逆シフト通信方法及びプログラム
Saussard et al. A novel global methodology to analyze the embeddability of real-time image processing algorithms
CN113326137A (zh) 深度学习计算方法、装置、芯片及介质
Löff et al. Combining stream with data parallelism abstractions for multi-cores
Chen et al. Redundant computation partition on distributed-memory systems
JPH07244647A (ja) 間接参照ループの並列化方法、並列化装置、並列実行方法および並列実行装置
González-Domínguez et al. Fast parallel construction of correlation similarity matrices for gene co-expression networks on multicore clusters
Chandraiah et al. Designer-controlled generation of parallel and flexible heterogeneous MPSoC specification
Jammer Characterization and translation of OpenMP use cases to MPI using LLVM

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees