JPH0298741A - マルチプロセッサコンピュータにおいてネスト式ループを実行する階層的方法 - Google Patents

マルチプロセッサコンピュータにおいてネスト式ループを実行する階層的方法

Info

Publication number
JPH0298741A
JPH0298741A JP1196497A JP19649789A JPH0298741A JP H0298741 A JPH0298741 A JP H0298741A JP 1196497 A JP1196497 A JP 1196497A JP 19649789 A JP19649789 A JP 19649789A JP H0298741 A JPH0298741 A JP H0298741A
Authority
JP
Japan
Prior art keywords
processor
iteration
loop
outer loop
loop iteration
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.)
Pending
Application number
JP1196497A
Other languages
English (en)
Inventor
Kevin W Harris
ケヴィン ダブリュー ハリス
William B Noyce
ウィリアム ビー ノイス
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.)
Digital Equipment Corp
Original Assignee
Digital Equipment 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 Digital Equipment Corp filed Critical Digital Equipment Corp
Publication of JPH0298741A publication Critical patent/JPH0298741A/ja
Pending 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/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

【発明の詳細な説明】 産業上の利用分野 本発明は、一般に、デジタルデータ処理システムの分野
に係り、より詳細には、デジタルデータ処理システムの
多数のプロセッサによってコンピュータプログラムの部
分部分を並列に実行できるようにするシステムに係る。
従来の技術 多数のプロセッサを含むデジタルデータ処理システムは
、コンピュータプログラムを並列に処理することにより
コンピュータプログラムの処理を著しく速く実行できる
能力を有している。しかしながら、処理速度の潜在的な
増加を実現するには、プロセッサによって処理されるプ
ログラムを最適化しなければならない。順次処理するよ
うに元々書かれているプログラムはマルチプロセッサシ
ステムに直接転送することができず、並列アーキテクチ
ャの全利点を取り入れるようにしばしば書き込みし直さ
なければならない、それ故1例えば、フォートランやC
又はパスカルのような公知の言語で書かれたプログラム
を、例えば、種々のプロセッサによる処理を効果的に調
整する命令を挿入することにより、マルチプロセッサア
ーキテクチャに直接匹敵する形態に直接変換するような
コンパイラプログラムを提供することが望まれる。
最初に、プログラマ又はコンパイラは、並列に実行でき
るプログラムの部分を識別し、そしてコンピュータが単
一プロセッサシステムにおいて実行した場合に得られる
ものと同じ結果を生じなければならない、単一プロセッ
サを含むコンピュータにおいては、プログラムの初期の
部分において計算されてメモリに記憶された値は、メモ
リが読み取られてそれらの値が計算に使用されるプログ
ラムの後部分に利用できるように確保される。
しかしながら、これらの部分は多数のプロセッサを有す
るコンピュータシステムでは並列に処理され、一般に、
計算の順序を予想することができない。
ループとして知られている重要なコンピュータプログラ
ミングコード構造体は、この点につぃて特別な問題をも
たらす。ループは、ある終了基準が満足されるまで、同
じ一連のプログラム命令を繰り返し実行することを必要
とする。プログラムが並列に実行されるときにそれが直
列に実行された時と同じ結果を与えるよう確保するため
には、並列形態において、それが直列形態で行なわれた
ときと同じ順序でメモリの参照を行なうようにしなけれ
ばならない。例えば、ループの繰り返しにおいである機
能がその手前の繰り返し中に計算された結果を必要とす
る場合には、マルチプロセッサでの並列処理機構におい
て最初にその手前の繰り返しを実行しなければならない
が、単一のプロセッサが直列処理機構においてそのプロ
グラムを処理する場合にはこれが適切な順序で自動的に
行なわれる。
同じメモリ位置に対して2つの参照がありそしてその参
照の少なくとも1つが書き込みであるときには、2つの
参照間に“依存性″が存在し、これらが適切な順序で生
じなければならない。別の繰り返しにおいて必要とされ
るべき値を計算する繰り返しは、依存性の“ソース”と
称され、そしてその値を読み出して計算に使用する繰り
返しは、依存性の“シンク”と称される。上記したよう
にループの別々の繰り返しにおいて生じることのある2
つの参照間に依存性がある場合には、そのループが“依
存性を保持する″と言われ、そして最終的に、あるルー
プの1つの繰り返しにおいて計算された結果がそのルー
プのその手前の繰り返しにおいて同じステートメントに
よって計算された値に依存する場合には、その依存性が
“再発(recurrencs)”と称するものを形成
する。依存性を指示するループ構造体は特殊な動作なし
に並列に実行することができない、というのは、並列に
処理するときにループの繰り返しの処理のタイミングが
上記したようにしばしば予想できないからである。
マルチプロセッサシステムで並列に実行されるプログラ
ムにおいてループ構造体によって保持される依存性及び
再発性の存在を考慮することは。
別のループをプログラミングステップとして含むループ
によって更に7MHなものとなる。というのは、依存性
は、外側及び内側の両ループの別の繰り返しにおいて計
算される値を伴うからである。
この構造は、ネスト式ループとして知られている。
マルチプロセッサシステムに適合するループ構造を形成
する従来の方法は一般に2つの分類に分けられる。ハイ
パープレーン方法(llyparplanea+eth
od)及びフードレプリケーション(Code Rep
lication)のような技術を含む第1の方法にお
いては、結果として得られたプログラムが依存性を保持
しないループを含むようにプログラムが変換される。コ
ードレプリケーション技術は、再発性を保持するループ
に使用することができない。
しかし、ハイパープレーン方法は、ネスト式ループ構造
体において生じるものを含む依存性を取り扱うことがで
きると分かっている。この技術においては、ネスト式ル
ープ構造体の外側のループが各々の使用できるプロセッ
サにおいて直列に実行され、そして内側のループがある
プロセッサに指定されたある繰り返しと共に並列に実行
される。しかしながら、この方法は、不都合なことに、
適切な計算順序を確保するために多数のループスタート
及び再同期コマンドの実行を必要とする。
これらのコマンドは本来速度の遅いものであり。
従って、多数のプロセッサを効率的に使用できないこと
になる。更に、ハイパープレーン技術を実行するときに
は、プロセッサが予測できない遅延を受けやすくなる。
これらの遅延は、例えば、ページ欠陥によって生じたり
、あるいはより優先順位の高いユーザがあらかじめ占有
することによって生じたりするもので、プロセッサ遅延
の和だけプログラムの実行を遅らせるとになる。
第2種類の技術においては、あるプロセッサを別のプロ
セッサに対して待機させることにより依存性が主張され
る。しかしながら、これらの技術は、単一のループにし
か適応されていない、ネスト式ループにおいては、内側
のループより成る繰り返しが並列に実行され、外側のル
ープより成る繰り返しが直列に実行されている。或いは
又、処理されているデータにフラグを挿入してアクセス
をそれと同期させてもよい。しかしながら、必要とされ
るフラグの数は、おおよそ内側ループの繰り返し数と外
側ループの繰り返し数との積になる。典型的なネスト式
ループは実際には直列で実行される。というのは、シス
テムは、内側のループ全体が1つのプロセッサにおいて
実行されてしまうのを待機し、その後に別のプロセッサ
においてそれを開始するからである。
本発明は、特許請求の範囲に特に指摘する。
本発明の上記及び更に別の効果は、添付図面を参照とし
た以下の詳細な説明から理解されよう。
実施例 夏1 本発明は、ネスト式ループを有するコンパイラプログラ
ムにおいて、デジタルデータ処理システムの多数のプロ
セッサによって並列にプログラムを実行できるようにす
るコードを発生するコンパイラを備えた新たなシステム
を提供するものである。上記のコードにより、システム
は、次のように動作することができる。コンパイラは、
1組のネスト式ループの外側ループの1つの繰り返しを
処理するように各々のプロセッサを指定することのでき
るコードを発生する。外側のループがシステム内のプロ
セッサより多数の繰り返しを含む場合には、外側ループ
の最初の繰り返しがプロセッサに最初に指定され、各プ
ロセッサがその外側ループの繰り返しの処理を終了する
たびに、次の未指定の外側ループの繰り返しが指定され
る。外側ループの全ての繰り返しが処理されてしまうま
でこの手順が繰り返される。
各々の外側ループの繰り返しを処理する間に。
各プロセッサは内側ループの繰り返しを直列に実行する
。依存性を主張するために、各プロセッサは、内側ルー
プ繰り返しの処理を完了した後に。
内側ループ繰り返しの処理におけるその進行状態を次に
続く外側ループの繰り返しを実行しているプロセッサに
報告する。このプロセッサは、その報告を行なうプロセ
ッサが選択された数の外側ループ繰り返しよりも選択さ
れた数の内側ループ繰り返しだけ少なくとも進むかまた
はせいぜいそれだけ遅れるまで待機する。上記数は、依
存性のソースとシンクとの間にある内側ループ繰り返し
数と外側ループ繰り返し数とによって決定され、その依
存性が主張されることを確保するように選択される。
本発明のこの新規な方法は、計算速度をほぼ直線的に高
める。更に、この方法は、ループ本体において同一でな
い作業が行なわれることや又は時分割環境または割込み
処理において予めの占有がなされるために生じることの
ある遅延に対して比較的余裕をもつことができる。1つ
のプロセッサが遅れても、プログラム全体が保留される
ことはなく、その後の外側ループ繰り返しを実行するプ
ロセッサのみが保留されるだけである。更に、別のプロ
セッサに遅延が生じても、最初に遅延が生じたプロセッ
サが必ずしも保留されることにはならない。
本発明は、内側ループの繰り返しを処理するプロセッサ
の動作を制御し且つ同期し、外側ループの各繰り返しに
対し内側ループに繰り返しが完了したことをプロセッサ
によって容易に報告できるように、少なくとも外側ルー
プの繰り返し数に対応する多数の制御構造体を含むこと
ができる。
本発明の第2の特徴においては、外側ループの繰り返し
数ではなくてプロセッサの数に基づく制御構造体によっ
て報告が行なわれる0本発明のこの第2の特徴において
は、制御構造体は、プラグに各々関連した進行カウンタ
を備え、プラグ及び進行カウンタの数はプロセッサの数
に関連づけされる。
各進行カウンタは、内側のループ繰り返しをシーケンシ
ングするときにその指定された外側のループ繰り返しの
進行状態を指示するためにプロセッサによって増加され
る。各外側のループ繰り返しの処理中に、内側のループ
繰り返しによって定められた計算を実行する前に、プロ
セッサは、その手前の外側のループ繰り返しを処理して
いるプロセッサによって増加される進行カウンタを検査
して、そのプロセッサがその内側のループ繰り返しを処
理できるに充分なほど進行していることを指示するかど
うか判断する。もしそうならば。
プロセッサは内側のループ繰り返しによって定ぬれられ
た計算を実行し、その進行カウンタを増加する。
いかなる所与の時間にも、2つのプロセッサ、即ち1手
前の内側ループ繰り返しを処理するために進行カウンタ
を検査するプロセッサと、内側ループ繰り返しが処理を
完了したことを報告するために進行カウンタを増加する
プロセッサとが所与の進行カウンタを使用するだけであ
ることが理解されよう0両方のプロセッサが進行カウン
タの使用を完了すると(これはその検査しているプロセ
ッサが内側ループ繰り返しを完了するまで生じない)、
その進行カウンタは別の外側ループ繰り返しに対して再
び使用できるようになる。従って、必要とされる進行カ
ウンタの数は、少なくともプロセッサの数に1を加えた
数である。この付加的な進行カウンタは、プロセッサが
最初の外側ループ繰り返しを処理するために最初に設け
られ、即ちこの進行カウンタは、その最初の外側ループ
繰り返しを処理しているプロセッサがその最初の外側ル
ープ繰り返しを含む全ての内側ループ繰り返しを処理で
きるよう確保する値に初期化される。
進行カウンタに加えて、制御構造体は、進行カウンタを
再使用できるかどうかを指示する終了フラグと、使用で
きない最初の進行カウンタを指示する最後ポインタとを
備えている。所与の進行カウンタを通して報告を行なう
プロセッサが外側ループ繰り返しの内側ループ繰り返し
を処理し終わったときには、その進行カウンタの値をそ
のカウンタが許容できる最も大きな値まで増加し、これ
により、それより小さい進行カウンタの値により検査を
行なっているプロセッサがその内側ループの繰り返しを
終了しないよう禁止される。更に、その検査を行なって
いるプロセッサが内側ループの繰り返しを終了して、進
行カウンタを更に検査する必要がないときには、その進
行カウンタに関連した終了フラグをセットし、これを再
指定できることを指示する。
進行カウンタは円形の形態で指定され、従って、上記最
後のカウンタによって指示される進行カウンタまでの全
ての手前の進行カウンタが再指定に使用できるようにな
る。検査を行なっている各プロセッサが進行カウンタの
使用を終了しそしてそれに関連した終了フラグをセット
するときには5次の進行カウンタを指示するようにその
最後のポインタを増加する。更に、各プロセッサが外側
ループの繰り返しを処理し終えたときには、終了フラグ
がセットされた次の進行カウンタが再指定される(その
終了ポインタがそれを指示していない場合)。
詳細な腹匪 第1図は、ネスト式ドウ・ループ(Do Loop)と
して知られているフォートランコード構造体を含む次の
ようなコードフォーマットを参照してコンピュータシス
テムの動作を示している。
Do J = 1.N          (1〕Do
 I =l、M         (2)A(I、J)
=A(I、J)+A(I、J−P)  (3)End 
Do           (4)End Do   
              [5]このコード部分に
おいては、ループインデックスJで識別された外側のル
ープがライン[1〕及び〔5〕によって定められ、これ
らのラインはJ=1からJ=NまでのN個の外側ループ
繰り返しを必要とする。外側ループの各繰り返しのたび
に、ライン〔2〕及び〔4〕は、ループインデックスI
によって定められた内側ループを定め、これはI=1か
らI=MまでのM個の内側ループ繰り返しを有する。
ネスト式ドウ・ループのライン〔3〕は、メモリ位置A
 (1,J−P)の値を、換言すれば内側ループの対応
する繰り返し■、即塾手前の繰り返し、ひいては外側ル
ープの繰り返しJ−Pの間に計算された計算値を必要と
する計算を定める。
外側ループの繰り返しJ−Pの間に計算された値は、こ
れらの繰り返しJの間に読み取られてその外側のループ
繰返し中に内側ループの計算に用いられる同じメモリ位
置に記憶される。従って、現在のドウ・ループ構造体は
、依存性もしくは2つの基準を各々の記憶位置へ搬送し
、第1の基準は。
後の外側ループ繰り返しによって第2の基準の間に読み
取られてその後の外側ループ繰り返しにおいて計算に使
用される位置に結果を書き込むものである。多数のプロ
セッサを有するコンピュータシステムにおいてコード部
分を並列に処理するためには、システムは、外側ループ
繰り返しJ−Pを処理するプロセッサが内側ループの繰
り返し■を完了して値A (I、J−P)を与えるよう
に確保しなければならない。
以下の説明においては、PoないしPnによって識別さ
れたN+1個のプロセッサを有するコンピュータシステ
ムでネスト式ドウ・ループが並列に処理されるものと仮
定する。上記“n ”の値は外側ループ繰り返しの数L
I N I+に関連している必要はない。
第1図及び第2図を参照すれば、新規なコンパイラは、
プロセッサがそれらの指定の外側ループ操り返しを並列
に実行できる一方、依存性が維持されるように確保する
コードを発生する。ステップ10において、このコード
は、各プロセッサPo−Pnが外側ループの単一繰り返
しを実行できるようにする6また。このコードは、各プ
ロセッサPj(j=oからn)が(I)で定められた内
側ループ繰り返しを直列に実行できるようにしくステッ
プ18ないし26)、各プロセッサPjは最初に待機ス
テップ(ステップ20)を実行し。
やがて1手前の外側ループ繰り返しを実行するプロセッ
サは少なくとも所定数の内側ループ繰り返しだけ進むか
又はせいぜいその数だけ遅れることになる。次いで、プ
ロセッサは、内側ループ計算(ステップ22)を実行し
、そして次の外側ループ繰り返し、即ち繰り返しJ+1
を実行しているプロセッサに繰り返し■を完了したこと
を報告する(ステップ24)、プロセッサPjが全ての
内側ループ繰り返しを完了した後(ステップ26)、別
の外側ループ繰り返しくステップ30)を自由に実行す
ることを指示しくステップ30)、そして次の未指定の
外側ループ繰り返しを実行するように指定され、ステッ
プ20.22及び24を繰り返すか、又は全ての外側ル
ープ繰り返しが指定された場合には終了となる。
第1図に示された動作を容易にするために、コンパイラ
は、第2図に示す種々のデータ構造体を確立できるよう
にするコードを発生する。第2図は、参照番号38で一
般的に示された複数のプロセッサPa−Pnを示してお
り、これらは並列プロセッサシステムを構成する。プロ
セッサ38は。
外側ループの繰り返しを並列に処理し、そして全ての内
側ループ繰り返しを直列に処理する。外側ループ繰り返
しの間に、各プロセッサ38には、進行カウンタ32及
びそれに関連した終了プラグ34が指定される。報告動
作(ステップ24)においては、プロセッサ38が各々
の内側ループ繰り返しの後に指定の進行カウンタ32を
更新する。
プロセッサは、全ての内側ループ繰り返しの完了時にそ
の進行カウンタ32を最も高い値に増加し、これは、全
ての内側ループ繰り返しの処理後に生じるか、又は内側
ループから退出できるようにする終了基準を満たしたと
判断した場合にはそれ以前に生じる。
待機動作(ステップ20)においては、プロセッサ38
は、その直前の外側ループ繰り返しを処理しているプロ
セッサ38に指定された進行カウンタ32の値を検査す
る。進行カウンタ32は。
手前の外側ループ繰り返しを処理しているプロセッサが
少なくとも所定数の内側ループ繰り返しだけその検査中
プロセッサ38より進んでいるかまたはせいぜいその数
だけ遅れていることを指示する。報告するプロセッサは
、その外側ループ繰り返しを終了したときに、進行カウ
ンタの値を最も高い値にセットし、これにより、それよ
り小さい進行カウンタの値によってプロセッサ38がそ
の外側ループ繰り返しの内側ループ繰り返しを終了する
ことのないようにされる。プロセッサ38は、その外側
ループ繰り返しの処理を終了した後に。
それが検査した進行カウンタ32に関連した終了フラグ
34をセットする。更に、プロセッサ38はその進行カ
ウンタ32を最も大きな考えられる値に調整する。
第2図には、プロセッサ38よりも少なくとも1つ多い
進行カウンタ32及び終了フラグ34が示されている。
これらの進行カウンタは、実際上、プロセッサ38に円
形で指定される。プロセッサ38に最後に指定された進
行カウンタ32及び終了フラグ34を指示するポインタ
36が設けられる。外側ループの繰り返し数がプロセッ
サの数よりも大きい場合には、最後のポインタ36の値
は、その増加時に、プロセッサの数プラス1のモジュロ
係数をとり、最初の使用不能な終了フラグ34及び進行
カウンタ32を指示する。
コンパイラによって発生されたコードは、各々のプロセ
ッサ38が、内側ループ繰り返しの処理において手前の
外側ループ繰り返しを実行しているプロセッサの進行状
態をIilを察できるようにする。より詳細には、この
コードは、各プロセッサ38が、その直前の外側ループ
繰り返しを処理しているプロセッサ38によって更新さ
れる進行カウンタ32のカウントを[9できるようにす
る。
待機コマンドの実行中に(ステップ20)、各プロセッ
サは、外側ループの直前の繰り返しを処理しているプロ
セッサが、内側ループ繰り返しの処理において選択され
た数(K)の繰り返しだけ少なくとも進んでいるか或い
はせいぜいその数だけ遅れるまで遅延し、ここで、上記
数にはいかなる依存性も満足されるように選択される。
Kの値を決定するために、コンパイラは、外側ループに
よって保持された依存性に各々関連した距離ベクトル(
DJ、di)を発生し、ここでベクトル成分Djは、所
与の依存性に対し、メモリ位置に対するある基準から同
じメモリ位置に対する別の基準までの外側ループ繰り返
しの数を表し、そしてベクトル成分diは、同じ依存性
に対し、同じ基準間での内側ループ繰り返し間の距離を
表す、ベクトル成分Djの符号は、外側ループの依存性
が手前の外側ループの手前の繰り返しに対するものであ
る場合に正であり、そしてこれがその後方の外側ループ
の繰り返しに対するものである場合は負である。同様に
、ベクトル成分diの符号は、内側ループの依存性が手
前の内側ループの繰り返しに対するものである場合は正
であり、その後の内側ループの繰り返しに対するもので
ある場合は負である。距離ベクトル成分が第2図に概略
的に示されている1例えば、値A (J−1,l−1)
が内側ループの計算に使用されるべき場合には、距離ベ
クトルが(+1.+2)である。
各依存性に対するKDの値は、所与のプロセッサによっ
て処理されている内側ループ繰り返しと、直前の外側ル
ープ繰り返しを処理しているプロセッサによって処理さ
れている内側ループ繰り返しとを分離する内側ループ繰
り返しの数を表している。KOの値は、各プロセッサP
j38が別の繰り返し中に計算された値を使用して計算
を実行するときに、必要な値が既に計算されてしまって
いることを確保するように選択される。更に、値KDは
、その直前の外側ループ繰り返しを処理しているプロセ
ッサ38に関連した進行カウンタ32から、その依存性
が満足されることを決定するだけでよい。
依存性に関連した依存ベクトル(DJldl)が正の値
の成分Djを有する場合、即ち、成分Djが手前の外側
ループ繰り返しに対する依存性を識別しそして成分di
が正の値を有する場合、ひいては成分diが手前の内側
ループ繰り返しを識別する場合には、外側ループ繰り返
しを処理するプロセッサは、依存性をもたらす値が計算
される内側ループ繰り返しとそれが使用される内側ルー
プ繰り返しとの間の内側ループ繰り返しの数に対応する
量だけ、手前の外側ループ繰り返しを実行するプロセッ
サより進むことができるということが明らかである。し
かしながら、プロセッサが直前の外側ループ繰り返しを
処理するプロセッサの進行のみをw4祭できるようにす
るために、diの値をDjの値で除算することにより生
じる最大の整数に対応する内側ループ繰り返しの数だけ
プロセッサがその直前の外側ループ繰り返しを処理する
プロセッサより進むことができる場合に、依存性が主張
される。各々のプロセッサ38は、その直前の内側ルー
プ繰り返しを処理しているプロセッサによって処理され
る前に内側ループ繰り返しを処理することができるので
、その値を使用するプロセッサ;38間に許された進み
量の和により、依存性が主張されるよう確保される。
同様に、依存性に関連した依存ベクトル(Djl d 
l)が正の値の成分Djを有する場合、即ち、成分Dj
が手前の外側ループ繰り返しに対する依存性と、0また
は負の値の成分diとを識別する場合、換言すれば、成
分diが同じ又は次の内側ループ繰り返しを識別する場
合には、外側ループ繰り返しを処理しているプロセッサ
は、依存性を生じる値が計算される内側ループ繰り返し
とそれを使用する内側ループ繰り返しとの間にある内側
ループ繰り返しの数に対応する量だけ、その手前の外側
ループ繰り返しを実行するプロセッサよりも遅れること
が必要である。しかしながら、プロセッサがその直前の
外側ループ繰り返しを処理しているプロセッサの進行の
みを観察できるようにするために、プロセッサが、di
の値をDiの値で除算することにより生じる最大の整数
に対応する内側ループ繰り返しの数だけ、その直前の外
側ループ繰り返しを処理しているプロセッサより強制的
に遅らされる場合に、依存性が主張される。プロセッサ
38の各々は、内側ループ繰り返しの処理を、その直前
の内側ループ繰り返しを処理しているプロセッサによる
処理よりも同じ量だけ強制的に遅らされるので、その値
を計算するプロセッサ38とその値を使用するプロセッ
サ38との開に許された進み量の和によってその依存性
が主張されるように確保される。
一方、その依存性に関連した依存性ベクトル(DJld
l)が負の値の成分Djを有する場合、即ち、成分Dj
がその後の外側ループ繰り返しに対する依存性と正の値
の成分diとを識別する場合、換言すれば、成分diが
手前の内側ループ繰り返しを識別する場合には、外側ル
ープ繰り返しを処理しているプロセッサは、その依存性
を生じる値が計算される内側ループ繰り返しとそれを使
用する内側ループ繰り返しとの間の内側ループ繰り返し
の数lこ対応する斌だけ、その後の外側ループ繰り返し
を実行するプロセッサより進むことができる、しかしな
がら、プロセッサがその直前の外側ループ繰り返しを処
理しているプロセッサの進行のみを観察できるようにす
るために、プロセッサが、diの値をDjの値で除算す
ることにより得られた最大の整数に対応する内側ループ
繰り返しの数だけ、その直前の外側ループ繰り返しを処
理しているプロセッサより進むことができる場合に、そ
の依存性が主張される。プロセッサ38の各々はその直
前の内側ループ繰り返しを処理しているプロセッサによ
る処理より前に内側ループ繰り返しを処理できるので、
その値を計算するプロセッサ38とその値を使用するプ
ロセッサ38との間に許される進み量の和によりその依
存性が主張されるように確保される。
更に、依存性に関連した依存性ベクトル(Djp d 
l)が負の値の成分Djを有する場合、即ち。
成分Djがその後の外側ループ繰り返しに対する依存性
と0または負の値の成分diとを識別する場合、換言す
れば、成分diが同じ又はその後の内側ループ繰り返し
を識別する場合には、外側ループ繰り返しを処理してい
るプロセッサは、その依存性を生じる値が計算される内
側ループ繰り返しとそれを使用する内側ループ繰り返し
との間の内側ループ繰り返しの数に対応する量だけその
後の内側ループ繰り返しを実行しているプロセッサより
も遅れることが必要である。しかしながら、プロセッサ
がその直前の外側ループ繰り返しを処理しているプロセ
ッサの進行のみを観察できるようにするためには、プロ
セッサが、diの値をDjの値で除算することにより生
じた最大の整数に対応する内側ループ繰り返しの数だけ
、その直前の外側ループ繰り返しを処理するプロセッサ
よりも強制的に遅らされる場合に、その依存性が主張さ
れる。プロセッサ38の各々は、その直前の内側ループ
繰り返しを処理するプロセッサによる処理から同じ量だ
け内側ループ繰り返しの処理を強制的に遅らされるので
、その値を計算するプロセッサ38と値を使用するプロ
セッサ38との間に許される進み量の和により、その依
存性が主張されるよう確保される。
従って、値KDが、所与の依存性に対し、最小の遅延フ
ァクタ、即ち、プロセッサPj38とその直前の外側ル
ープ繰り返しを処理しているプロセッサ38とによって
処理される内側ループ繰返し間の最小の差を表わす場合
には、KDの値が次の関係を満足する最小で且つ最大の
整数値となる。
KD*Dj+di≧ODjが正の場合、又はKD*Dj
+diSODjが負の場合。
内側ループの計算が多数の依存性を含む場合には、コン
パイラは上記した各々の依存性に対しDjの値を決定し
そしてその最も大きなKDをKとして選択することが明
らかである。
第3図及び第4図は、第2図を参照して上記した進行カ
ウンタ32.終了フラグ34及び最後ポインタ36に関
連してネスト式ループ構造体を処理する際にプロセッサ
Po−Pn38によって実行される動作を詳細に示して
いる。
第3図を参照すれば、コンパイラによって発生されるコ
ードは、進行カウンタ32(第2図)及びそれに関連し
た終了フラグ34(第2図)及び最後のポインタ36を
確立できるようにする。
制御プロセッサは、まず、これらの構造体を初期化しく
ステップ74)そして第1の順次の外側ループ繰り返し
をプロセッサPo−Pnに指定する(ステップ76)、
この動作においては、各プロセッサPa−Pn38が制
御値JO及びJlを受は取る。値JOはプロセッサPi
によって処理される外側ループ繰り返しを識別し、値J
1はその直前の外側ループ繰り返しを実行している外側
ループ繰り返しによって処理される外側の内側ループ繰
り返しを識別する。
全てのプロセッサに外側ループ繰り返しが指定されると
、これらプロセッサは一緒に処理を開始しくステップ7
8)、第4図について以下に述べる動作を実行する。各
プロセッサ38は、外側ループ繰り返しを終了すると、
全ての外側ループ繰り返しが計算されたかどうか判断す
る(ステップ80)、もしそうならば、プログラムの計
算が終了し、プロセッサ38が動作を終了する。しかし
ながら、プロセッサ38は、ステップ80において全て
の外側ループ繰り返しが処理されていないと判断すると
、最後ポインタ36によって指示されない限り終了フラ
グ34に関連した進行カウンタ38を選択し、次の未処
理の外側ループ繰り返しの処理を開始する。進行カウン
タが最後ポインタ36によって指示された場合には、プ
ロセッサは、第1進行カウンタを使用する前に最後ポイ
ンタが次の進行カウンタ32を指すように増加されるま
で待機する。
第4図は、外側ループ繰り返しを処理する際にプロセッ
サPi38によって実行される動作を示している。プロ
セッサ38は、先ず、内側ループインデックス■とその
終了基準とを確立する(ステップ88)。次いで、プロ
セッサは、待機動作(ステップ90)を実行して、値J
1により識別された外側ループ繰り返しを処理している
プロセッサ38によって増加される進行カウンタ32、
即ち、直前の外側ループ繰り返しを計算しているプロセ
ッサに関連した進行カウンタ32を検査して、上記した
ように全ての依存性が満足されるよう確保する少なくと
も繰り返しI+Kを通してその内側ループ繰り返しをい
つ完了したかを判断する。この条件に満足すると、プロ
セッサは内側ループの計算を実行しくステップ92)そ
してその進行カウンタ32を更新する。この更新動作の
作用は、外側ループの直後の繰り返しを処理しているプ
ロセッサにその進行を報告することである。プロセッサ
P138は終了基準をテストする。
内側ループの終了基準を満たさない場合には(ステップ
96)、プロセッサはステップ90に復帰して、次の内
側ループ繰り返しの計算を開始する。
一方、プロセッサPj38がステップ96において内側
ループの終了基準が満足されたことを決定した場合には
、その考えられる最大値を報告するために用いる進行カ
ウンタ32をセットする。
更に、Kが正である場合には、それが検査する進行カウ
ンタに関連した終了フラグ34をセットしくステップ9
8)モしてKが負である場合には、報告するために用い
る進行カウンタ32に関連した終了フラグをセットし、
その進行カウンタを指定できることを指示する(ステッ
プ100)、プロセッサP138は1次の外側ループ繰
り返しに対し最後カウンタ36及び値JO及びJlを更
新する(ステップ102)。
以上の説明は1本発明の特定の実施例に限定された。し
かしながら0種々の変更及び修正を行なっても、本発明
の効果の幾つか又は全部を達成できることが明らかであ
ろう。それ故1本発明の真の精神及び範囲内に入る全て
の変更及び修正は特許請求の範囲内に包含されるものと
する。
【図面の簡単な説明】
第1図は、再発性を保持するネスト式ループ構造の簡単
な例に対する本発明の方法の段階を示すフローチャート
。 第2図は1本発明によるネスト式ループ構造を実行する
多数のプロセッサを示す図、第3図は、本発明によるプ
ロセッサ制御機能を示すフローチャート、そして 第4図は、各プロセッサにおいて実行される方法の段階
を示すフローチャートである。 ]、0.18.20.22.24,28.30・・・プ
ロセスステップ 、−フーイ5デ・、フ、λ、工 )f 164璋%4LJ3 ;19−

Claims (1)

    【特許請求の範囲】
  1. (1)複数のプロセッサによって並列に処理するように
    外側ループ構造体及び内側ループ構造体を含むネスト式
    ループ構造体をコンパイルするコンパイラであって、上
    記内側ループ構造体は計算を定めるものであり、各プロ
    セッサは、外側ループ繰り返しより成る内側ループ繰り
    返しを直列に処理し、上記コンパイラは、 a)各プロセッサが少なくとも1つの内側ループ繰り返
    しより成る外側ループ繰り返しを処理できるようにする
    ためのコードを発生する外側ループ部分と、 b)内側ループ部分とを具備し、該部分は、 i)各プロセッサが遅延のための待機動作を実行できる
    ようにするコードを、手前の外側ループ繰り返しを実行
    しているプロセッサがプロセッサによって実行されてい
    る内側ループ繰り返しより前の所定数の内側ループ繰り
    返しに到達するまで、発生するための特機部分と、 ii)待機動作に続いて、内側ループ構造体によって定
    められた計算を各プロセッサが実行できるようにするコ
    ードを発生するための計算部分と、 iii)上記計算の完了に続いて、その後の外側ループ
    繰り返しを実行しているプロセッサに対して完了した内
    側ループ繰り返しを各プロセッサが報告できるようにす
    るコードを発生するための報告部分とを備えたことを特
    徴とするコンパイラ。
JP1196497A 1988-07-29 1989-07-28 マルチプロセッサコンピュータにおいてネスト式ループを実行する階層的方法 Pending JPH0298741A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US22625788A 1988-07-29 1988-07-29
US226257 1988-07-29

Publications (1)

Publication Number Publication Date
JPH0298741A true JPH0298741A (ja) 1990-04-11

Family

ID=22848179

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1196497A Pending JPH0298741A (ja) 1988-07-29 1989-07-28 マルチプロセッサコンピュータにおいてネスト式ループを実行する階層的方法

Country Status (6)

Country Link
US (1) US5481723A (ja)
EP (1) EP0352899B1 (ja)
JP (1) JPH0298741A (ja)
AT (1) ATE125966T1 (ja)
CA (1) CA1319757C (ja)
DE (1) DE68923666T2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04155576A (ja) * 1990-10-19 1992-05-28 Fujitsu Ltd コンパイル処理方式
KR100907530B1 (ko) * 2008-01-25 2009-07-14 최성수 높이 조절이 가능한 보조 난간
WO2021070322A1 (ja) * 2019-10-10 2021-04-15 日本電信電話株式会社 秘密多重反復計算装置、方法及びプログラム

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2921190B2 (ja) * 1991-07-25 1999-07-19 日本電気株式会社 並列実行方式
US5802375A (en) * 1994-11-23 1998-09-01 Cray Research, Inc. Outer loop vectorization
JP2669603B2 (ja) * 1994-12-15 1997-10-29 インターナショナル・ビジネス・マシーンズ・コーポレイション コンパイラにおけるコード生成方法及びコンパイラ
US5710913A (en) * 1995-12-29 1998-01-20 Atmel Corporation Method and apparatus for executing nested loops in a digital signal processor
GB2323190B (en) * 1997-03-14 2001-09-19 Nokia Mobile Phones Ltd Executing nested loops
US6301706B1 (en) * 1997-12-31 2001-10-09 Elbrus International Limited Compiler method and apparatus for elimination of redundant speculative computations from innermost loops
US6292822B1 (en) 1998-05-13 2001-09-18 Microsoft Corporation Dynamic load balancing among processors in a parallel computer
US6106575A (en) * 1998-05-13 2000-08-22 Microsoft Corporation Nested parallel language preprocessor for converting parallel language programs into sequential code
US6192515B1 (en) * 1998-07-17 2001-02-20 Intel Corporation Method for software pipelining nested loops
US6269440B1 (en) * 1999-02-05 2001-07-31 Agere Systems Guardian Corp. Accelerating vector processing using plural sequencers to process multiple loop iterations simultaneously
CA2288614C (en) * 1999-11-08 2004-05-11 Robert J. Blainey Loop allocation for optimizing compilers
US7337437B2 (en) * 1999-12-01 2008-02-26 International Business Machines Corporation Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code
JP3477137B2 (ja) * 2000-03-03 2003-12-10 松下電器産業株式会社 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
US8176108B2 (en) * 2000-06-20 2012-05-08 International Business Machines Corporation Method, apparatus and computer program product for network design and analysis
US7278137B1 (en) * 2001-12-26 2007-10-02 Arc International Methods and apparatus for compiling instructions for a data processor
US7210128B2 (en) * 2002-10-14 2007-04-24 Fujitsu Limited Event-driven observability enhanced coverage analysis
US7089545B2 (en) * 2002-12-17 2006-08-08 International Business Machines Corporation Detection of reduction variables in an assignment statement
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
KR100806274B1 (ko) * 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
US7926046B2 (en) * 2005-12-13 2011-04-12 Soorgoli Ashok Halambi Compiler method for extracting and accelerator template program
KR100681199B1 (ko) * 2006-01-11 2007-02-09 삼성전자주식회사 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치
US8291396B1 (en) * 2006-01-17 2012-10-16 Altera Corporation Scheduling optimization of aliased pointers for implementation on programmable chips
US8443351B2 (en) * 2006-02-23 2013-05-14 Microsoft Corporation Parallel loops in a workflow
JP5102576B2 (ja) * 2007-10-10 2012-12-19 Nok株式会社 アキュムレータ
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
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
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
JP5714622B2 (ja) * 2013-02-21 2015-05-07 トヨタ自動車株式会社 制御装置
US20150268993A1 (en) * 2014-03-21 2015-09-24 Qualcomm Incorporated Method for Exploiting Parallelism in Nested Parallel Patterns in Task-based Systems
DE102017209697A1 (de) * 2016-06-13 2017-12-14 Denso Corporation Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4468736A (en) * 1982-06-08 1984-08-28 Burroughs Corporation Mechanism for creating dependency free code for multiple processing elements
US4829427A (en) * 1984-05-25 1989-05-09 Data General Corporation Database query code generation and optimization based on the cost of alternate access methods
US4794521A (en) * 1985-07-22 1988-12-27 Alliant Computer Systems Corporation Digital computer with cache capable of concurrently handling multiple accesses from parallel processors
US4710872A (en) * 1985-08-07 1987-12-01 International Business Machines Corporation Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops
JPH0814817B2 (ja) * 1986-10-09 1996-02-14 株式会社日立製作所 自動ベクトル化方法
US5093916A (en) * 1988-05-20 1992-03-03 International Business Machines Corporation System for inserting constructs into compiled code, defining scoping of common blocks and dynamically binding common blocks to tasks

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04155576A (ja) * 1990-10-19 1992-05-28 Fujitsu Ltd コンパイル処理方式
KR100907530B1 (ko) * 2008-01-25 2009-07-14 최성수 높이 조절이 가능한 보조 난간
WO2021070322A1 (ja) * 2019-10-10 2021-04-15 日本電信電話株式会社 秘密多重反復計算装置、方法及びプログラム
JPWO2021070322A1 (ja) * 2019-10-10 2021-04-15
CN114514569A (zh) * 2019-10-10 2022-05-17 日本电信电话株式会社 秘密多重迭代计算装置、方法以及程序
AU2019469404B2 (en) * 2019-10-10 2023-02-02 Nippon Telegraph And Telephone Corporation Secret multiple repetition calculation apparatus, method and program
CN114514569B (zh) * 2019-10-10 2024-03-01 日本电信电话株式会社 秘密多重迭代计算装置、方法以及记录介质

Also Published As

Publication number Publication date
DE68923666D1 (de) 1995-09-07
CA1319757C (en) 1993-06-29
US5481723A (en) 1996-01-02
EP0352899B1 (en) 1995-08-02
DE68923666T2 (de) 1996-03-21
EP0352899A1 (en) 1990-01-31
ATE125966T1 (de) 1995-08-15

Similar Documents

Publication Publication Date Title
JPH0298741A (ja) マルチプロセッサコンピュータにおいてネスト式ループを実行する階層的方法
US20140157287A1 (en) Optimized Context Switching for Long-Running Processes
JP5398375B2 (ja) ユニプロセッサ・システム上のプリエンプタブルな読み取り・コピー・更新のための猶予期間検出の最適化
Melani et al. Schedulability analysis of conditional parallel task graphs in multicore systems
US7793278B2 (en) Systems and methods for affine-partitioning programs onto multiple processing units
US7458065B2 (en) Selection of spawning pairs for a speculative multithreaded processor
JPH01108638A (ja) 並列化コンパイル方式
JP4988789B2 (ja) シミュレーション・システム、方法及びプログラム
TWI507990B (zh) 多核心指令集模擬之高平行化同步方法
Nicely et al. Improved parallel resampling methods for particle filtering
JP6427054B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
JP2009524866A (ja) プログラムの並列実行のためのシステム及び方法
WO2008050094A1 (en) Diagnostic apparatus and method
Yip et al. Programming and timing analysis of parallel programs on multicores
Eles et al. Synthesis of VHDL concurrent processes
Kazi et al. Coarse-grained speculative execution in shared-memory multiprocessors
Jeremiassen et al. Static analysis of barrier synchronization in explicitly parallel programs
Birk et al. Parallelizing FPGA placement using transactional memory
Belwal et al. Determining actual response time in P-FRP using idle-period game board
Kazi et al. Coarse-grained thread pipelining: A speculative parallel execution model for shared-memory multiprocessors
KR20150040663A (ko) 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
CN112015692A (zh) 一种面向Simulink自动生成多线程代码的核间通信优化方法
Wang et al. Code transformations for enhancing the performance of speculatively parallel threads
Zorin Scheduling signal processing tasks for antenna arrays with simulated annealing
Cornelis et al. The pipeline performance model: a generic executable performance model for GPUs