JP3218932B2 - データプリフェッチコード生成方法 - Google Patents

データプリフェッチコード生成方法

Info

Publication number
JP3218932B2
JP3218932B2 JP17067495A JP17067495A JP3218932B2 JP 3218932 B2 JP3218932 B2 JP 3218932B2 JP 17067495 A JP17067495 A JP 17067495A JP 17067495 A JP17067495 A JP 17067495A JP 3218932 B2 JP3218932 B2 JP 3218932B2
Authority
JP
Japan
Prior art keywords
instruction
prefetch
prefetch instruction
loop
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.)
Expired - Fee Related
Application number
JP17067495A
Other languages
English (en)
Other versions
JPH0922361A (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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP17067495A priority Critical patent/JP3218932B2/ja
Priority to US08/675,964 priority patent/US5950007A/en
Publication of JPH0922361A publication Critical patent/JPH0922361A/ja
Application granted granted Critical
Publication of JP3218932B2 publication Critical patent/JP3218932B2/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/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はデータプリフェッチ方法
に関し、さらに詳しくは、ループに対してプリフェッチ
命令をスケジュールすることによりデータのプリフェッ
チを行ないプログラムの実行時間を短縮するために有効
なコンパイル方法に関する。
【0002】
【従来の技術】計算機上でのプログラムの実行において
は、命令間の依存関係によって生じる待ちと,メモリ参
照によって生じる待ちが、実行時間の多くを占めてい
る。
【0003】ループ内の命令間の依存関係による待ち
は、ソフトウェアパイプライニンングと呼ばれるスケジ
ューリング手法によってかなり低減できる。ソフトウェ
アパイプライニングとは,例えば、ラマクリシュナン、
ソフトウエア パイプライニング イン PA−RISC
コンパイラ、ヒュ−レットパッカ−ドジャ−ナル、39
−45頁、1992年(S. Ramakrishnan, Software pip
elining in PA-RISC compilers, Hewlett-Packard Jour
nal, pp.39-45,1992)に述べられているように、ループ
の異なる繰り返しを重ね合わせて実行することにより命
令間の依存関係による待ちを減少させ、命令実行の並列
度を高める方式である。ソフトウェアパイプライニング
が適用されたループでは、ループの実行開始前にプロロ
ーグと呼ばれる初期化処理を行なうコードを実行し、カ
ーネルと呼ばれるコードを繰り返すことによりループ本
体の実行を行ない、ループの実行を終了した時点でエピ
ローグと呼ばれるコードを実行して終了処理を行い、か
つ、1回前の繰り返しの完了を待たずに後続する繰り返
しの実行を開始することをその特徴とする。
【0004】命令間の依存関係による待ちに対して、メ
モリ参照による待ちはソフトウェアによる手法のみでは
低減することが難しい。そのため、多くの計算機システ
ムにおいては、メモリ参照による待ちを減少するため
に、キャッシュと呼ばれる高速少容量の記憶装置を主記
憶とプロセッサの間に配置し、最近参照されたデータを
キャッシュ上に置いて高速に参照できるようにしてい
る。ただし、キャッシュを付加した場合においても、デ
ータの再利用がない場合などには、キャッシュミスが発
生した場合の待ちは避けられない。
【0005】そこで、例えば、モウリ−他、デザイン
アンド エバリュエ−ション オブ アコンパイラ アルゴ
リズム フォ プリフェッチング、プロシ−ディング オ
ブ ザ5 インタ−ナショナル コンファレンス オン ア
−キテクチュアル サポ−トフォ プログラミング ラン
ゲ−ジ アンド オペレ−ティング システム、62−7
3頁、1992年(T.C.Mowry, et al., Design and Eva
luation of a Compiler Algorithm for Prefetching,Pr
oceedings of the 5th International Conference on A
rchitectural Support for Programming Languages and
Operating Systems, pp.62-73,1992)に述べられている
ように、主記憶からキャッシュにデータを先行的に移動
(プリフェッチ)する命令を利用することによって、メモ
リ参照による待ちを低減することが試みられている。
【0006】
【発明が解決しようとする課題】上記従来技術では、プ
リフェッチ命令をスケジュールするための方式として,
プリフェッチ命令の遅延をループ本体の最短パスの長さ
で割った値以上の最小の整数回分だけ前の繰り返し前に
プリフェッチ命令が発行されるようにソフトウェアパイ
プライニングを適用とすると述べられているが,実現の
詳細については明らかにされていない。
【0007】そこで、本発明の目的は、プリフェッチ命
令を含んだループにおけるプログラム実行時のメモリ参
照による待ちと命令間の依存関係による待ちを低減でき
る効率的な命令スケジューリング方法を提供することに
ある。
【0008】
【課題を解決するための手段】本発明の目的を達成する
ため、本発明では、プログラムのコンパイルの際に、以
下に示す3種の方式のいずれかにより、プログラム中の
ループに対してプリフェッチ命令のスケジューリングを
行なう。
【0009】キャッシュへのデータのプリフェッチはデ
ータの値に変更を加えない。このため、一般的なデータ
の定義と使用の関係に従うと、キャッシュへのデータの
プリフェッチと、ロード命令やストア命令によるメモリ
の参照との間には依存関係は存在しない。ただし、メモ
リ参照による待ちを隠蔽するには、プリフェッチ命令に
よるキャッシュへのデータの転送の完了後にメモリ参照
命令を発行しなければならないという制約から、プリフ
ェッチ命令とメモリ参照を行なう命令の間に、暗黙の依
存関係があるとみなすと既存のスケジューリング方式を
そのまま適用でき都合が良い。そこで、方式1では以下
のように、プリフェッチ命令とメモリ参照命令の間に依
存関係を設けてスケジューリングを行なう。
【0010】方式1: (1)キャッシュミスを生じると予想されるメモリ参照命
令のそれぞれに対してプリフェッチ命令を生成する。
【0011】(2)上記(1)で生成したプリフェッチ命令
と、対応するメモリ参照命令の間に枝を持つ依存グラフ
を生成する。この際、プリフェッチ命令が発行されてか
ら、プリフェッチ命令によるキャッシュへのデータ転送
に要するサイクル数を経た後でメモリ参照命令が発行さ
れるよう、プリフェッチ命令とメモリ参照命令との間の
遅延を、プリフェッチ命令によるキャッシュへのデータ
転送に要するサイクル数以上に設定する。
【0012】(3)上記(2)で構成した依存グラフに対し
て、ソフトウェアパイプライニングを適用し、命令スケ
ジュールを得る。上記のように、ソフトウェアパイプラ
イニングとはループの異なる繰り返しを重ね合わせて実
行することにより、命令間の依存関係による待ちを減少
させる方式であり、これを上記(2)で構成した依存グラ
フへ適用することによって、プリフェッチ命令と対応す
るメモリ参照命令の間を十分離すことができる。
【0013】主記憶からキャッシュへのデータの転送単
位が一般的には32バイトや128バイトといった単位であ
るのに対して、ループ中での配列などの参照は4バイト
や8バイトといった、より小さな単位で行なわれること
が多い。このため、ループ中で配列などに対して連続的
なメモリ参照を行なう場合には、一度のプリフェッチ命
令によって、複数回分の繰り返しの実行で参照するデー
タを主記憶からキャッシュへ移動することができる場合
が多い。すなわち、一度のプリフェッチ命令によってN
回分の繰り返しの実行で参照するデータを主記憶からキ
ャッシュへ移動することができるとすると、プリフェッ
チ命令の発行はN回に1度行なえばよいことになる。
【0014】方式1で生成したスケジュールでは、繰り
返し1回毎にプリフェッチ命令を発行するため、冗長な
プリフェッチ命令が多数発行されることになってしま
う。そこで、方式2および方式3では、ループ本体を展
開し冗長なプリフェッチ命令がなるべく発行されないよ
うにプリフェッチ命令をスケジュールする。
【0015】まず、方式2では、上記方式1の(1)から
(3)までの処理によって生成されたソフトウェアパイプ
ライン化されたプリフェッチ命令を含むループのカーネ
ル部を展開し、冗長なプリフェッチ命令を取り除くこと
で無駄なプリフェッチ命令が発行されないようにする。
【0016】方式2: (4)プリフェッチ命令の発行は、一回のプリフェッチ命
令でプリフェッチできるデータ数をNとすると、N回の
繰り返し毎に行なえばよいので、まず、上記(3)で構成
されたソフトウェアパイプライン化されたスケジュール
のカーネル部を展開し、その展開数がNの倍数となるよ
うにする。
【0017】(5)上記(4)の展開コードでは、カーネル
部がNの倍数回展開され、展開されたカーネル部の1回
の繰り返しで元のループのNの倍数回分の繰り返しが実
行されることになる。そこで、展開されたコードから、
N回に一回プリフェッチ命令が発行されるよう、冗長な
プリフェッチ命令を削除すれば、無駄なプリフェッチ命
令の発行がなくなる。
【0018】方式2では、プリフェッチ命令にソフトウ
ェアパイプライニングを適用した後で無駄なプリフェッ
チ命令を削除するので、プリフェッチ命令を削除したこ
とによって命令間の距離がソフトウェアパイプライニン
グを適用した際に期待したものよりも短くなり、これに
よって命令間の依存などによる待ちが生じやすくなって
しまう可能性がある。
【0019】そこで、方式3では、ループをソフトウェ
アパイプライン化してスケジュールを得た後でカーネル
部を展開するすることを考慮して、まず、複数のプリフ
ェッチ命令をまとめて1つの仮想的なプリフェッチ命令
に置き換え、この仮想的なプリフェッチ命令を含んだ依
存グラフを作成する。ただし、方式1や方式2の場合と
異なり、方式3では仮想的なプリフェッチ命令と、対応
するメモリ参照命令との間に依存は設けなくともよい。
【0020】次に、ソフトウェアパイプライニングを依
存グラフに適用し、ソフトウェアパイプライン化された
スケジュールを得、カーネル部の展開数が一度のプリフ
ェッチ命令でプリフェッチできるデータ数の倍数となる
ように必要に応じてル−プを展開する。展開された仮想
的なプリフェッチ命令を元のプリフェッチ命令に置き換
え、プリフェッチ命令が,対応するメモリ参照命令より
も十分前の繰り返しで発行されるよう、プリフェッチ命
令が参照するアドレスを調節する。
【0021】これにより、方式2で命令を削除したこと
によって発生した命令間の依存を減少させる。
【0022】方式3: (1)キャッシュミスを生じると予想されるメモリ参照命
令それぞれに対してプリフェッチ命令を生成する。
【0023】(2)上記(1)で生成したプリフェッチ命令
を複数個組にして仮想的なプリフェッチ命令に置き換え
る。
【0024】(3)元のループボディーの命令と上記(2)
で生成した仮想的なプリフェッチ命令からなる依存グラ
フを作成して、ソフトウェアパイプライニングを適用す
る。依存グラフの作成を行なう場合には、仮想的なプリ
フェッチ命令と、対応するメモリ参照命令との間の依存
は考えなくとも良い。
【0025】(4)上記(3)で構成されたカーネル部の展
開数が、一度のプリフェッチ命令でデータをプリフェッ
チできる繰り返し数の倍数となるように必要に応じてル
ープの展開を行なう。展開後のスケジュールにおいて、
仮想的なプリフェッチ命令は元のプリフェッチ命令を挿
入する候補となる命令スロットを表している。
【0026】(5)上記(4)の展開コード中にスケジュー
ルされた仮想的なプリフェッチ命令を、元のプリフェッ
チ命令に置き換える。この置き換えは、一度のプリフェ
ッチ命令でデータをプリフェッチできる繰り返し数の倍
数毎に、同一のプリフェッチ命令が発行されるようにす
る。これによって無駄なプリフェッチ命令の発行が抑制
される。
【0027】(6)上記(5)で置き換えたプリフェッチ命
令が参照するアドレスをプリフェッチ命令によるデータ
の転送が完了するのに十分先の繰り返しで参照されるデ
ータのアドレスとする。
【0028】
【作用】本発明の方法によれば、メモリの参照が連続的
でない場合には、方式1によってプリフェッチ命令と対
応するメモリ参照命令の間を十分離してソフトウェアパ
イプライニングを適用することができる。また、メモリ
の参照が連続的である場合には、方式2によってソフト
ウェアパイプライニングを適用した後で命令の削除を行
なうか、方式3によって複数のプリフェッチ命令を仮想
的なプリフェッチ命令に置き換えてソフトウェアパイプ
ライニングを適用し、その後、元のプリフェッチ命令に
復元することで無駄なプリフェッチ命令を発行を抑制し
効率的にスケジュールすることができる。これにより本
発明の目的を達成できる。
【0029】
【実施例】以下、図面を参照しながら本発明の一実施例
について説明する。
【0030】図2は本発明の方法を実施する計算機の1
つの例である。この例では、CPU201上で動作するコンパ
イラが外部記憶装置202からソースコード203を読み込
み、これをオブジェクトコード204へ変換し外部記憶装
置202へ格納する。
【0031】図3は、本発明によるデータのプリフェッ
チ方法を適用する計算機の1つの例である。CPU301で通
常のメモリ参照命令の実行を行なう場合には、まず、キ
ャッシュ 302に参照対象のデータがあるかどうかを調
べ、キャッシュ302にデータが存在すればそのデータを
参照し、キャッシュ302に参照対象のデータが存在しな
ければ主記憶303上の当該データを参照すると共に、当
該データの属するキャッシュブロックをキャッシュ302
に置く。キャッシュの参照は主記憶の参照に比べて高速
であり、参照対象のデータがキャッシュにあればメモリ
参照によって発生する待ちを低減できる。
【0032】プリフェッチ命令は、他の命令の実行と同
時に主記憶303からキャッシュ302へ参照対象のデータが
属するキャッシュブロックを移動する命令である。主記
憶303からキャッシュ302へキャッシュブロックを移動す
るのに十分なサイクル数だけ前にプリフェッチ命令を発
行しておけば、主記憶303からキャッシュ302へのデータ
の転送を行なっている間に他の命令を実行できるので、
当該データを参照するための待ちは無くなる。
【0033】図1に本発明の一実施例の構成を示す。図
1において、スケジューリング処理部101はループ本体
に対する中間語102を入力し、プリフェッチ命令を含ん
だメモリ間の依存およびメモリ参照による待ちの少ない
命令スケジュール103を出力する。処理117および118は
本発明に特徴的な処理であり、処理117ではプリフェッ
チ命令の生成と、スケジューリングの前処理を行ない、
処理118では無駄なプリフェッチ命令の除去やプリフェ
ッチアドレスの調整などの後処理を行なう。
【0034】始めに、方式1によりループをスケジュー
ルする場合の実施例を示す。図4は方式1によってプリ
フェッチ命令のスケジュールを行なう場合の命令スケジ
ューラの構成図である。方式1では、プリフェッチ命令
生成部109が中間語102を入力し、ループ本体の中間語に
含まれるメモリ参照命令のうち、キャッシュミスを起こ
す可能性の高いものについてプリフェッチ命令を生成し
て、プリフェッチ命令を加えた中間語104を構成する。
【0035】ここで、あるメモリ参照命令に対してキャ
ッシュミスが起きる可能性があるかどうかについては、
例えば、モウリ−他、デザイン アンド エバリュエ−シ
ョンオブ ア コンパイラ アルゴリズム フォ プリフェ
ッチング、プロシ−ディングオブ ザ 5 インタ−ナシ
ョナル コンファレンス オン ア−キテクチュアル サポ
−ト フォ プログラミング ランゲ−ジ アンド オペレ
−ティング システム、62−73頁、1992年(T.C.
Mowry他, Design and Evaluation of a Compiler Algor
ithm for Prefetching, Proceedings of the 5th Inter
national Conference on Architectural Support for P
rogramming Languages and Operating Systems,pp.62-7
3, 1992)で述べられている公知技術やプログラムの実行
のトレースを用いて推測することができる。生成するプ
リフェッチ命令がプリフェッチするアドレスは、対応す
るメモリ参照命令と同じとする。
【0036】すなわち、ループ中のロード命令、 LOAD X[i] がキャッシュミスを起こしやすいとすると、同一要素を
プリフェッチする命令、 FETCH X[i] を作り、これを中間語に加える。
【0037】次に、依存グラフ作成部111では、プリフ
ェッチ命令を含んだ中間語104を入力として依存グラフ1
05を作成する。この際、プリフェッチ命令と対応するメ
モリ参照命令との間に必要な遅延が主記憶からキャッシ
ュへキャッシュブロックを転送するのに要する時間以上
であることを表す枝を、プリフェッチ命令と対応するメ
モリ参照命令との間に設ける。次に、依存グラフ105に
対してソフトウェアパイプライニング部112 でソフトウ
ェアパイプライニングを適用して、ソフトウェアパイプ
ライン化された命令スケジュール 103を得る。
【0038】以上のように、プリフェッチ命令と対応す
るメモリ参照命令の間に、必要な遅延が主記憶からキャ
ッシュへキャッシュブロックを転送するのに要する時間
以上であることを表す枝を設けた依存グラフを作成する
ことにより、ソフトウェアパイプライニングを適用する
際に、プリフェッチ命令とそれに対応するメモリ参照命
令との間が、主記憶からキャッシュへキャッシュブロッ
クを転送するのに要する時間だけ離れることが保証され
るので、メモリ参照による待ちが隠蔽されるようプリフ
ェッチ命令をスケジュールすることができる。
【0039】上記説明におけるプリフェッチ命令生成部
109を、図7に示す動作フローチャートを参照しつつ説明
する。まず、ステップ701では処理すべきメモリ参照命
令が残っているかどうかを判定し、あればステップ702
へ制御を移し、なければ処理を終了する。 ステップ702
では、処理すべきメモリ参照命令を選択して変数MIに記
憶する。ステップ703では、MIに記憶されたメモリ参照
命令がキャッシュミスを起こす可能性が高いかどうかを
判定し、キャッシュミスを起こす可能性が高いならばス
テップ704 へ制御を移し、低い場合にはステップ701へ
制御を移して次のメモリ参照命令を処理する。ステップ
704ではMIに記憶したメモリ参照命令と同じアドレスを
参照するプリフェッチ命令を作成する。
【0040】次に、方式2によりループをスケジュール
する場合の実施例を説明する。方式2では、方式1の処
理に加えて、以下のような処理を行なう。まず、方式1
の処理によって得られたソフトウェアパイプライン化さ
れた命令スケジュール 106のカーネル部を、ループ展開
部113 で複数回展開して、命令スケジュール107を得
る。このループ展開数は、1度のプリフェッチ命令の実
行で主記憶からキャッシュへ移動可能なキャッシュブロ
ックの大きさをB、メモリ参照命令によって参照される
要素の大きさをD、配列参照の要素の増分値をNとする
と、例えば、B/DとNの最小公倍数とすればよい。
【0041】ループの展開を行なうと、続いて、プリフ
ェッチ命令削除部114により、ループを展開して得られ
た命令スケジュール 107から冗長なプリフェッチ命令を
削除する。これにより、冗長なプリフェッチ命令を含ま
ない最終的な命令スケジュール103が得られる。この冗
長なプリフェッチ命令の削除に関しては、プリフェッチ
命令はB/D回に1度発行すれば十分であることから、
展開された各々のプリフェッチ命令に対して、B/D個
おきにプリフェッチ命令が発行されるよう、それ以外の
命令を削除する。
【0042】以上に述べた方式では、ループ展開数が多
くなる場合もあり得るので、ループ展開数を低く押えた
い場合には、例えば、適当な回数だけループを展開し
て、先に述べたように、B/D個回の繰り返しおきにプ
リフェッチ命令が発行されるように、それ以外の命令を
削除すれば、多少冗長なプリフェッチ命令が発行される
こととなるが、展開数が大きくなるのを防ぐことができ
る。
【0043】上記説明におけるプリフェッチ命令削除部
114の動作を,図8に示すフローチャートを参照しつつ
説明する。まず、ステップ801ではキャッシュブロック
の大きさを定数B、参照対象要素の大きさを定数Dとし
て設定する。ステップ802では、未処理プリフェッチ命
令が残っているかどうかを判定し、あればステップ803
へ制御を移し、なければ処理を終了する。ステップ803
では、図1におけるループ展開部113によってコピーさ
れた同一の未処理プリフェッチ命令を順に変数PFi(0≦i
≦n)に記録する。ステップ804では、0≦i≦nに対して、
(1をB/Dで割った余り:(i mod (B/D)) ≠ 0)な
らば、すなわちiがB/Dの整数倍でなければプリフェ
ッチ命令PFiを削除し、ステップ802へ制御を移して次の
プリフェッチ命令を処理する。これにより、プリフェッ
チ命令がB/D回の繰り返しおきに発行されることにな
る。
【0044】次に、方式3によりループをスケジュール
する場合の実施例を説明する。方式3によりループをス
ケジュールする場合には、まず、方式1と同様にプリフ
ェッチ命令生成部109で、入力となる中間語102から、キ
ャッシュミスを起こす可能性の高いメモリ参照命令に対
するプリフェッチ命令を生成し、プリフェッチ命令を加
えた中間語104を得る。
【0045】次に、プリフェッチ命令置換部110におい
て、プリフェッチ命令生成部109で生成した複数のプリ
フェッチ命令を組にして仮想的なプリフェッチ命令に置
き換える。この置き換えは、1度のプリフェッチ命令の
実行で主記憶からキャッシュへ移動可能なキャッシュブ
ロックの大きさをB、メモリ参照命令によって参照され
る要素の大きさをD、中間語104に含まれるプリフェッ
チ命令の数をMとすると、例えば、M/(B/D)以上の最
小の整数個の仮想的なプリフェッチ命令を作成し、B/
D個毎のプリフェッチ命令と1つの仮想的なプリフェッ
チ命令を対応させる。仮想的なプリフェッチ命令を作成
すると、中間語104中の元のプリフェッチ命令を削除
し、新たに生成した仮想的なプリフェッチ命令を加え
る。
【0046】次に、依存グラフ作成部111では、中間語1
04を入力として依存グラフ105を生成する。この場合に
は、方式1および2の場合と異なり、仮想的なプリフェ
ッチ命令とメモリ参照命令の間には依存は設けない。続
いて、依存グラフ105を入力として、ソフトウェアパイ
プライニング部112でループに対してソフトウェアパイ
プライニングを適用し、ソフトウェアパイプライン化さ
れた命令スケジュール106を得る。方式3では方式1お
よび2の場合と異なり、プリフェッチ命令と対応するメ
モリ参照命令との間に依存関係を設けないので、ソフト
ウェアパイプライニングを適用する際の命令配置の自由
度が高くなる。
【0047】次に、ソフトウェアパイプライン化された
命令スケジュール106 をループ展開部113で複数回展開
し、命令スケジュール107を得る。この展開数は、方式
2の場合と同様に、1度のプリフェッチ命令の実行で主
記憶からキャッシュへ移動可能なキャッシュブロックの
大きさをB、メモリ参照命令によって参照される要素の
大きさをD、配列参照の要素の増分値をNとすると、例
えば、B/DとNの最小公倍数とすればよい。ループ展
開部113によるループ展開処理が終了すると、得られた
命令スケジュール107に含まれる仮想的なプリフェッチ
命令を、プリフェッチ命令復元部115においてプリフェ
ッチ命令置換部110で置き換えた対応するプリフェッチ
命令に復元する。ある仮想的プリフェッチ命令VPに、n
個のプリフェッチ命令 PF1,PF2,...,PFnが対応してお
り、仮想的プリフェッチ命令VPが,ループ展開部113に
よってm個の仮想的プリフェッチ命令VP1,VP2,...,VPm
に展開されているものとすると、この復元処理は、例え
ば、以下のように行なわれる。
【0048】n=B/Dの場合、j=i mod (B/D)とす
ると、VPiをPFjに置き換える。n<B/Dの場合、j=i
mod (B/D)とすると、1 ≦ j ≦ nならばVPiをPFj
に置き換え、n < jならば、VPiを削除する。
【0049】これによって、元のプリフェッチ命令から
なる命令スケジュール108が得られる。
【0050】次に、プリフェッチアドレス調整部116 に
よって、プリフェッチ命令によるデータの転送が完了す
るのに十分先の繰り返しでデータがプリフェッチされる
よう、命令スケジュール108のプリフェッチ命令の参照
対象のアドレスを調節し、冗長なプリフェッチ命令を含
まない命令スケジュール103を得る。
【0051】このアドレスの調節は、例えば、配列Xに
対して、 FETCH X[i] というプリフェッチ命令があった場合、次のように行な
われる。
【0052】すなわち、スケジュールされたループの1
回あたりの実行に要するサイクル数をL、プリフェッチ
命令によって主記憶からキャッシュへ対象データのキャ
ッシュブロックを転送するのに要するサイクル数をMと
すると、M/L+(B/D)より以上の最小の整数回先繰り
返しで参照する配列要素をプリフェッチするようにすれ
ば良い。
【0053】すなわち、この繰り返し数をαとすると、
上記のプリフェッチ命令の参照アドレスを、 FETCH X[i+α] のように調節すれば良い。
【0054】以下、上記方式3におけるプリフェッチ命
令置換部110とプリフェッチ命令復元部115の処理につい
て、フローチャートを参照しつつ説明する。
【0055】図9は、図1におけるプリフェッチ命令置
換部110の動作フローチャートである。まず、ステップ9
01では、キャッシュブロックの大きさを定数B、参照対
象要素の大きさを定数D、プリフェッチ命令の数を記録
するための変数nの値を0として設定する。ステップ90
2では、プリフェッチ命令が残っているかどうか判定
し、残っていればステップ903へ制御を移し、残ってい
なければ処理を終了する。ステップ903では、変数nの
値が0かどうか判定し、真であればステップ904へ制御
を移し、偽であればステップ906へ制御を移す。ステッ
プ904では、新たに仮想的なプリフェッチ命令を生成
し、これを変数VPFに記憶する。ステップ905では変数VP
Fに記憶された仮想的プリフェッチ命令を中間語列に挿
入する。
【0056】ステップ906ではプリフェッチ命令を選択
し、変数PFに記憶する。ステップ907では変数PFに記録
したプリフェッチ命令と変数VPFに記録した仮想的なプ
リフェッチ命令を対応させる。ステップ908では中間語
列から変数PFに記録したプリフェッチ命令を削除する。
ステップ909では変数nの値を1だけ増す。ステップ910
では、nの値がB/Dに等しいかどうか判定し、真であ
ればステップ911へ制御を移し、偽であればステップ902
へ制御を移して次のプリフェッチ命令を処理する。ステ
ップ911では、nの値を0に設定し、ステップ902へ制御
を移して次のプリフェッチ命令を処理する。これによっ
て、プリフェッチ命令がB/D個に1個の割合で仮想的
プリフェッチ命令に置き換えられる。
【0057】図10は、図1におけるプリフェッチ命令
復元部115の動作フローチャートである。まず、ステッ
プ1001ではキャッシュブロックの大きさを定数B、参照
対象要素の大きさを定数Dとして設定する。ステップ10
02では仮想的プリフェッチ命令が残っているかどうか判
定し、残っていればステップ1003へ制御を移し、残って
いなければ処理を終了する。ステップ1003では、図1に
おけるループ展開部113によってコピーされた同一の仮
想的プリフェッチ命令を順に変数VPi(0≦i<m)に記憶す
る。ステップ1004では、VPiに対応する元のプリフェッ
チ命令を変数PFj(0 ≦j<n)に記憶する。
【0058】ステップ1005では、プリフェッチ命令PFj
の数nがB/Dであるかどうかを判定し、真であればス
テップ1006へ、偽であればステップ1007へ制御を移す。
ステップ1006では、各VPiに対して、j=i mod (B/D)
とすると、VPiをPFjに置き換え、制御をステップ1002へ
移して次の仮想的プリフェッチ命令を処理する。ステッ
プ1007では、各VPiに対して、j=i mod (B/D)とする
と、0≦j<nならばVPiをPFjに置き換え、n≦jならばVPi
を削除して、制御をステップ1002へ移して次の仮想的プ
リフェッチ命令を処理する。これによって、仮想的なプ
リフェッチ命令が元のプリフェッチ命令に復元されると
共に、各プリフェッチ命令がB/D回の繰り返しが1度
実行されるようになる。
【0059】図11は、図1におけるプリフェッチアド
レス調整部116の動作フローチャートである。まず、ス
テップ1101ではキャッシュブロックの大きさを定数B、
参照対象要素の大きさを定数D、ループ1回あたりの実
行サイクルをL、主記憶からキャッシュへデータを転送
するのに要するサイクル数をM、プリフェッチ命令を先
行して発行すべき繰り返し数αをM/L+(B/D)以上の
最小の整数として設定する。ステップ1102では、未処理
プリフェッチ命令が残っているかを判定し、残っていれ
ばステップ1103へ制御を移し、残っていなければ処理を
終了する。ステップ1103では、未処理のプリフェッチ命
令を選択し、変数PFへ記録する。ステップ1104では、変
数PFへ記憶したプリフェッチ命令で参照するアドレスを
α回先の繰り返しで参照するアドレスへ変更する。これ
によって、メモリ参照命令が発行されるよりも十分先に
プリフェッチ命令が発行されることになり、メモリ参照
による待ちを隠蔽することができる。
【0060】続いて、具体例を用いて各方式の一実施例
によるスケジューリングの効果について説明する。図1
2は実施例の説明に用いるFORTRANプログラムのループ
の例である。このプログラムのループ本体から、例えば
図13に示すような中間語が構成される。以下では、こ
の中間語を入力とした場合の各方式によるプリフェッチ
命令のスケジュールの例を示す。
【0061】図13の例では、命令1301、1302、1303で
メモリ参照が行なわれるが、このうち命令1301と命令13
03が参照するアドレスは同一であるので、配列Xおよび
配列Yそれぞれについて1つづつプリフェッチ命令を作
成する。なお、この例ではメモリ参照命令およびプリフ
ェッチ命令と演算命令を並列に実行できるスーパスカラ
型のプロセッサを仮定する。ただし、本発明はスーパス
カラ型のプロセッサのみに適用可能というわけではな
く、逐次型のプロセッサや超多長命令形式 (VLIW) のプ
ロセッサについても適用可能である。なお、以下の例で
は、一度のプリフェッチで4回分の繰り返しで使用する
データをキャッシュに転送可能であり、主記憶からキャ
ッシュへのデータの転送には50サイクル必要であると仮
定する。
【0062】方式1: (1)プリフェッチ命令の生成 配列Xおよび配列Yについて、プリフェッチ命令を生成
する。プリフェッチ命令を付加した中間語は図14に示
すようになる。この図で、命令1401および命令1402はそ
れぞれ配列Xおよび配列Yに対するプリフェッチ命令で
ある。
【0063】(2)依存グラフの生成 図15にプリフェッチ命令を加えた中間語に対する依存
グラフを示す。この図で、ノードは命令を表し、ノード
間のエッジは依存関係を表している。各エッジの右に付
加している数字は命令間を離すべきサイクル数を表して
いる。この図に示すように、配列Xに対するプリフェッ
チ命令1501と配列Xに対するロード命令1503との間、お
よび、配列Yに対するプリフェッチ命令1502と配列Yの
ロード命令1504との間に主記憶からキャッシュへデータ
を転送するのに必要な50サイクルの遅延を持つ依存関係
を設ける。
【0064】(3)ソフトウェアパイプライニング 図15の依存グラフに対して、ソフトウェアパイプライ
ニングを適用する。ソフトウェアパイプライン化された
スケジュールは図16のようになる。図16に示すスケ
ジュ−ルは、ループの初期化を行なうプロローグ部160
1、ループの繰り返しを行なうカーネル部1602、ループ
の終了処理を行なうエピローグ部1603からなり、図16
の各エントリは各サイクルに対応する命令スロットを表
している。プリフェッチ命令は命令スロット1604および
1605に割り当てられており、ソフトウェアパイプライニ
ングによって、対応するメモリ参照命令の10回前の繰り
返しで実行されるようにスケジュールされている。以上
のように、ソフトウェアパイプライニングによって各命
令間の依存を満たすようなスケジュールが得られたの
で、メモリ参照に伴う待ちが除去されることになる。
【0065】方式2:上記方式1の実施例では、1回の
繰り返しにつき2つのプリフェッチ命令が発行されるこ
とになる。プリフェッチ命令では4回分の繰り返しで利
用するデータをプリフェッチすることが可能なので、毎
回プリフェッチ命令を発行するのは無駄である。そこ
で、方式2では以下の処理を方式1の結果に適用するこ
とで、無駄なプリフェッチ命令の発行を抑制する。
【0066】(4)ループ展開 方式1の(3)で構成されたソフトウェアパイプライン化
されたループのカーネル部を展開する。本実施例では、
一度のプリフェッチで4回分の繰り返しで参照するデー
タをキャッシュへ転送可能であると仮定しているので、
繰り返し4回に1回の割合でプリフェッチ命令を発行す
れば良い。そこで、カーネルを4回展開すると、図17
に示すようなスケジュールが得られる。図17に示すス
ケジュ−ルは、プロローグ部1701、展開されたカーネル
部1702、及びエピローグ部1703からなる。カーネル部17
02において配列Xに対するプリフェッチ命令は、命令ス
ロット1704、1706、1708、1710に展開され、配列Yに対
するプリフェッチ命令は、命令スロット1705、1707、17
09、1711に展開されている。
【0067】(5)冗長なプリフェッチの削除 ループ展開された図17の命令スケジュールに対して、
プリフェッチ命令の発行が4回の繰り返し毎に行なわれ
るよう配列Xおよび配列Yに対する冗長なプリフェッチ
命令を削除する。これによって無駄なプリフェッチ命令
の発行が抑制され、図18に示すようなスケジュールが
得られる。図18において、プロローグ部1802では冗長
なプリフェッチ命令1805、1806、1807、1808、1810、18
11が削除され、配列Xに対しては命令スロット1804、配
列Yに対しては命令スロット1809のそれぞれのプリフェ
ッチ命令によって、4回分の繰り返しのデータが無駄な
くプリフェッチされるようになる。
【0068】方式3:方式3では、無駄なプリフェッチ
命令を発行しないことを考慮して以下のようにプリフェ
ッチ命令のスケジュールを行なう。
【0069】(1)プリフェッチ命令の生成 プリフェッチ命令の生成は方式1の場合と同様に行な
う。
【0070】(2)プリフェッチ命令の置換と依存グラフ
の作成 上記(1)で生成した複数のプリフェッチ命令を命令をま
とめて仮想的なプリフェッチ命令を生成し、依存グラフ
を構成する。結果の依存グラフを図19に示す。図19
に示すように、配列Xに対するプリフェッチ命令1901
と、配列Yに対するプリフェッチ命令1902をまとめて仮
想的なプリフェッチ命令1903に置き換える。方式1や方
式2の場合と異なり、方式3では仮想的なプリフェッチ
命令と対応するメモリ参照命令の間に依存関係は設けな
い。
【0071】(3)ソフトウェアパイプライニング 仮想的なプリフェッチ命令を加えたループ本体にソフト
ウェアパイプライニングを適用する。この結果、例え
ば、図20に示すようなソフトウェアパイプライン化さ
れたスケジュールが得られる。図20に示すスケジュ−
ルは、プロローグ部2001、カーネル部2002、及びエピロ
ーグ部2003からなる。カーネル部2002の命令発行スロッ
ト2004には仮想的なプリフェッチ命令がスケジュールさ
れている。
【0072】(4)ループ展開 方式2の場合と同様に上記(3)で構成したソフトウェア
パイプライン化されたスケジュールのカーネル部を4回
分展開する。これにより、図21のようなスケジュール
が得られる。図21にしめすスケジュ−ルは、プロロー
グ部2101、展開されたカーネル部2102、及びエピローグ
部2103からなる。ループ展開によってカーネル部2103に
スケジュールされた仮想的なプリフェッチ命令は命令発
行スロット2104、2105、2106、2107に展開されている。
【0073】(5)プリフェッチ命令の復元 図21のカーネル部2102の命令スロット2104、2105、21
06、2107に展開された仮想的プリフェッチ命令を元のプ
リフェッチ命令に置き換える。この結果を図22に示
す。図21の命令スロット2104、2105、2106、2107に展
開された仮想的プリフェッチ命令は配列Xおよび配列Y
に対するプリフェッチ命令を置き換えたものであるの
で、各々の配列に対するプリフェッチ命令が4回の繰り
返しに1回発行されるように、図22の命令スロット22
04および命令スロット2206にプリフェッチ命令を挿入し
する。この場合、元のプリフェッチ命令数が一度のプリ
フェッチで主記憶からキャッシュへ転送可能なデータを
参照する繰り返し数に満たないので、展開された仮想的
なプリフェッチ命令に対応する命令スロット2205と2207
については空きスロットとする。
【0074】(6)プリフェッチアドレスの調節 プリフェッチ命令の発行とプリフェッチ命令によってキ
ャッシュに転送されるデータを参照する命令の発行と
が、主記憶からキャッシュへのキャッシュブロックの転
送が終了するのに十分なサイクル数だけ離れて行なわれ
るようプリフェッチ対象のアドレスを調整する。ここ
で、主記憶からキャッシュへキャッシュブロックを転送
するのに要するサイクルは50サイクルで、1回あたりの
繰り返しに要するサイクルは4サイクルであるので、図
22に示すように、ここでは14回先の繰り返しで参照
されるデータをプリフェッチするようにプリフェッチ命
令の参照先を変更している。
【0075】以上の説明により、図1の中間語102を入
力としてスケジューラ101によりプリフェッチ命令を含
んだ命令スケジュール103を作成することができる。す
なわち、ループ繰り返しにおいて、データの参照が連続
的でない場合には方式1を用いることで、プリフェッチ
命令と対応するメモリ参照命令を、主記憶からキャッシ
ュへデータを転送するのに必要なサイクル数だけ離して
発行することができるので、メモリ参照に伴う待ちを隠
蔽することができる。また、データの参照が連続的な場
合には、方式2および3を用いることで、冗長なプリフ
ェッチ命令の発行を抑制することができる。さらに、方
式3では方式2と比較して、仮想的なプリフェッチ命令
とメモリ参照命令との間に依存関係を設けないので、命
令配置の自由度が高くなり、また、カーネル部の展開を
考慮してソフトウェアパイプライニングを適用するので
命令間の依存などによる待ちの発生を低く押えることが
できる。
【0076】
【発明の効果】本発明によれば、プリフェッチ命令を効
果的にスケジュールし、プログラムの実行時のメモリ参
照等による待ちを減少することができる。これにより計
算機プログラムの実行の高速化に効果がある。
【0077】すなわち、本発明の方法によれば、メモリ
の参照が連続的でない場合には、方式1によってプリフ
ェッチ命令と対応するメモリ参照命令の間を十分離して
ソフトウェアパイプライニングを適用することができ
る。また、メモリの参照が連続的である場合には、方式
2によってソフトウェアパイプライニングを適用した後
で命令の削除を行なうか、方式3によって複数のプリフ
ェッチ命令を仮想的なプリフェッチ命令に置き換えてソ
フトウェアパイプライニングを適用し、その後、元のプ
リフェッチ命令に復元することで無駄なプリフェッチ命
令を発行を抑制し効率的にスケジュールすることができ
る。
【図面の簡単な説明】
【図1】プリフェッチ命令をスケジュールする命令スケ
ジューラの構成図である。
【図2】本発明を実施する計算機システムの例である。
【図3】本発明の対象とする計算機システムの例であ
る。
【図4】方式1による命令スケジューラの構成図であ
る。
【図5】方式2による命令スケジューラの構成図であ
る。
【図6】方式3による命令スケジューラの構成図であ
る。
【図7】プリフェッチ命令生成部のフローチャートであ
る。
【図8】プリフェッチ命令削除部のフローチャートであ
る。
【図9】プリフェッチ命令置換部のフローチャートであ
る。
【図10】プリフェッチ命令復元部のフローチャートで
ある。
【図11】プリフェッチアドレス調節部のフローチャー
トである。
【図12】FORTRANソースプログラムの例である。
【図13】中間語の例である。
【図14】プリフェッチ命令を含んだ中間語の例であ
る。
【図15】方式1の依存グラフの例である。
【図16】方式1のソフトウェアパイプライン化された
スケジュールの例である。
【図17】方式2の展開したスケジュールの例である。
【図18】方式2の冗長なプリフェッチ命令削除を行な
ったスケジュールの例である。
【図19】方式3の依存グラフの例である。
【図20】方式3のソフトウェアパイプライン化された
スケジュールの例である。
【図21】方式3の展開したスケジュールの例である。
【図22】方式3のプリフェッチ命令の置換えを行なっ
たスケジュールの例である。
【符号の説明】
101:ループに対するスケジューリング処理部 109:プリフェッチ命令生成部 110:プリフェッチ命令置換部 111:依存グラフ作成部 112:ソフトウェアパイプライニング部 113:ループ展開部 114:プリフェッチ命令削除部 115:プリフェッチ命令復元部 116:プリフェッチアドレス調整部
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 Mowry,T.C.「Stanfo rd CSL−TR−94−628」”To lerating Latency T hrough Software−Co trolled Data Prefe tching”,P.67−71(1994− 6) (58)調査した分野(Int.Cl.7,DB名) G06F 9/45

Claims (3)

    (57)【特許請求の範囲】
  1. 【請求項1】他の命令の実行と並列して主記憶からキャ
    ッシュメモリにデータを転送するプリフェッチ命令を有
    する計算機上で実行されるプログラムをコンパイルする
    コンパイラにおけるデータプリフェッチコード生成方法
    であって、 (a)プログラム中のループのソースプログラムを中間
    コードへ変換し、 (b)プログラム中のループに含まれる複数のプリフェ
    ッチ命令を1つの仮想的なプリフェッチ命令に置き換
    え、 (c)前記中間コードに基づいて、前記仮想的なプリフ
    ェッチ命令とメモリ参照を行なう命令との間に枝を持つ
    依存グラフを生成し、 (d)前記依存グラフにソフトウエアパイプライニング
    を適用して命令スケジューリングを行ない、 (e)前記命令スケジューリングに対してループ展開を
    適用することを特徴とするデータプリフェッチコード生
    方法。
  2. 【請求項2】前記方法の前記ステップ(e)において、 (e1)得られたスケジュールを複数回ループ展開し、 (e2)前記ループ展開により複写された仮想的なプリ
    フェッチ命令を元の複数のプリフェッチ命令に置き換え
    ることを特徴とする請求項1記載のデータプリフェッチ
    コード生成方法。
  3. 【請求項3】前記方法の前記ステップ(e)は、さら
    に、 前記置き換えられたプリフェッチ命令が参照するアドレ
    スを、前記プリフェッチ命令によるデータの転送が完了
    する繰り返しよりも先を参照するように調節することを
    特徴とする請求項2記載のデータプリフェッチコード生
    方法。
JP17067495A 1995-07-06 1995-07-06 データプリフェッチコード生成方法 Expired - Fee Related JP3218932B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP17067495A JP3218932B2 (ja) 1995-07-06 1995-07-06 データプリフェッチコード生成方法
US08/675,964 US5950007A (en) 1995-07-06 1996-07-05 Method for compiling loops containing prefetch instructions that replaces one or more actual prefetches with one virtual prefetch prior to loop scheduling and unrolling

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP17067495A JP3218932B2 (ja) 1995-07-06 1995-07-06 データプリフェッチコード生成方法

Publications (2)

Publication Number Publication Date
JPH0922361A JPH0922361A (ja) 1997-01-21
JP3218932B2 true JP3218932B2 (ja) 2001-10-15

Family

ID=15909288

Family Applications (1)

Application Number Title Priority Date Filing Date
JP17067495A Expired - Fee Related JP3218932B2 (ja) 1995-07-06 1995-07-06 データプリフェッチコード生成方法

Country Status (2)

Country Link
US (1) US5950007A (ja)
JP (1) JP3218932B2 (ja)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69739404D1 (de) * 1997-12-10 2009-06-25 Hitachi Ltd Optimiertes speicherzugriffsverfahren
US6341370B1 (en) * 1998-04-24 2002-01-22 Sun Microsystems, Inc. Integration of data prefetching and modulo scheduling using postpass prefetch insertion
US6260116B1 (en) 1998-07-01 2001-07-10 International Business Machines Corporation System and method for prefetching data
US6389591B1 (en) * 1998-09-03 2002-05-14 Microsoft Corporation Method and apparatus for determining preferred controls for an upgradable operating system
US6728726B1 (en) * 1999-03-05 2004-04-27 Microsoft Corporation Prefetching and caching persistent objects
US6820250B2 (en) * 1999-06-07 2004-11-16 Intel Corporation Mechanism for software pipelining loop nests
US6675374B2 (en) * 1999-10-12 2004-01-06 Hewlett-Packard Development Company, L.P. Insertion of prefetch instructions into computer program code
US6801203B1 (en) * 1999-12-22 2004-10-05 Microsoft Corporation Efficient graphics pipeline with a pixel cache and data pre-fetching
US6564297B1 (en) * 2000-06-15 2003-05-13 Sun Microsystems, Inc. Compiler-based cache line optimization
US6651245B1 (en) * 2000-10-03 2003-11-18 Sun Microsystems, Inc. System and method for insertion of prefetch instructions by a compiler
US7107583B2 (en) * 2001-02-16 2006-09-12 Hewlett-Packard Development Company, L.P. Method and apparatus for reducing cache thrashing
US6988266B2 (en) * 2001-05-08 2006-01-17 Sun Microsystems, Inc. Method of transforming variable loops into constant loops
CA2392122A1 (en) * 2002-06-28 2003-12-28 Ibm Canada Limited-Ibm Canada Limitee An unrolling transformation on nested loops
US7058936B2 (en) * 2002-11-25 2006-06-06 Microsoft Corporation Dynamic prefetching of hot data streams
US7140008B2 (en) * 2002-11-25 2006-11-21 Microsoft Corporation Dynamic temporal optimization framework
US20040143821A1 (en) * 2003-01-21 2004-07-22 Sun Microsystems, Inc. Method and structure for converting data speculation to control speculation
US7343598B2 (en) * 2003-04-25 2008-03-11 Microsoft Corporation Cache-conscious coallocation of hot data streams
US7302425B1 (en) 2003-06-09 2007-11-27 Microsoft Corporation Distributed pre-cached query results and refresh method
US7587709B2 (en) 2003-10-24 2009-09-08 Microsoft Corporation Adaptive instrumentation runtime monitoring and analysis
CA2453685A1 (en) * 2003-12-17 2005-06-17 Ibm Canada Limited - Ibm Canada Limitee Method and system for code modification based on cache structure
JPWO2005078579A1 (ja) * 2004-02-12 2007-10-18 松下電器産業株式会社 プログラム変換装置およびプログラム変換方法
US7711928B2 (en) * 2004-03-31 2010-05-04 Oracle America, Inc. Method and structure for explicit software control using scoreboard status information
US20050223385A1 (en) * 2004-03-31 2005-10-06 Christof Braun Method and structure for explicit software control of execution of a thread including a helper subthread
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
US7493611B2 (en) * 2004-08-30 2009-02-17 International Business Machines Corporation Pinning internal slack nodes to improve instruction scheduling
US7260693B2 (en) * 2004-12-30 2007-08-21 Microsoft Corporation Adaptive disk layout techniques and tools
US7673294B2 (en) * 2005-01-18 2010-03-02 Texas Instruments Incorporated Mechanism for pipelining loops with irregular loop control
US7607119B2 (en) * 2005-04-26 2009-10-20 Microsoft Corporation Variational path profiling
US7681188B1 (en) * 2005-04-29 2010-03-16 Sun Microsystems, Inc. Locked prefetch scheduling in general cyclic regions
US7770153B2 (en) * 2005-05-20 2010-08-03 Microsoft Corporation Heap-based bug identification using anomaly detection
US7912877B2 (en) * 2005-05-20 2011-03-22 Microsoft Corporation Leveraging garbage collection to dynamically infer heap invariants
JP2006338616A (ja) * 2005-06-06 2006-12-14 Matsushita Electric Ind Co Ltd コンパイラ装置
US20060294223A1 (en) * 2005-06-24 2006-12-28 Microsoft Corporation Pre-fetching and DNS resolution of hyperlinked content
US7529891B2 (en) * 2005-09-19 2009-05-05 Microsoft Corporation Balanced prefetching exploiting structured data
US7962901B2 (en) 2006-04-17 2011-06-14 Microsoft Corporation Using dynamic analysis to improve model checking
US7640353B2 (en) * 2006-04-27 2009-12-29 Microsoft Corporation Guided random seek support for media streaming
US7926043B2 (en) * 2006-06-20 2011-04-12 Microsoft Corporation Data structure path profiling
JP5576605B2 (ja) * 2008-12-25 2014-08-20 パナソニック株式会社 プログラム変換装置およびプログラム変換方法
US8380680B2 (en) * 2010-06-23 2013-02-19 International Business Machines Corporation Piecemeal list prefetch
US8856452B2 (en) 2011-05-31 2014-10-07 Illinois Institute Of Technology Timing-aware data prefetching for microprocessors
WO2013130548A2 (en) * 2012-02-27 2013-09-06 University Of Virginia Patent Foundation Method of instruction location randomization (ilr) and related system
US10585801B2 (en) 2012-11-26 2020-03-10 Advanced Micro Devices, Inc. Prefetch kernels on a graphics processing unit
US9239712B2 (en) * 2013-03-29 2016-01-19 Intel Corporation Software pipelining at runtime
US9282160B2 (en) * 2013-07-15 2016-03-08 Neustar, Inc. Method, apparatus, and computer readable medium for flexible caching of resource oriented web services
JP6252348B2 (ja) * 2014-05-14 2017-12-27 富士通株式会社 演算処理装置および演算処理装置の制御方法
JP6341045B2 (ja) * 2014-10-03 2018-06-13 富士通株式会社 演算処理装置および演算処理装置の制御方法
US10216501B2 (en) * 2015-06-04 2019-02-26 The Mathworks, Inc. Generating code in statically typed programming languages for dynamically typed array-based language
JP6974722B2 (ja) * 2018-01-24 2021-12-01 富士通株式会社 コンパイラプログラム、コンパイル方法及びコンパイルする情報処理装置
JP2022107377A (ja) * 2021-01-08 2022-07-21 富士通株式会社 情報処理装置、コンパイル方法、及びコンパイルプログラム
US11714620B1 (en) 2022-01-14 2023-08-01 Triad National Security, Llc Decoupling loop dependencies using buffers to enable pipelining of loops

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3032031B2 (ja) * 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
US5367651A (en) * 1992-11-30 1994-11-22 Intel Corporation Integrated register allocation, instruction scheduling, instruction reduction and loop unrolling
US5819088A (en) * 1993-03-25 1998-10-06 Intel Corporation Method and apparatus for scheduling instructions for execution on a multi-issue architecture computer
US5557761A (en) * 1994-01-25 1996-09-17 Silicon Graphics, Inc. System and method of generating object code using aggregate instruction movement
US5491823A (en) * 1994-01-25 1996-02-13 Silicon Graphics, Inc. Loop scheduler
US5704053A (en) * 1995-05-18 1997-12-30 Hewlett-Packard Company Efficient explicit data prefetching analysis and code generation in a low-level optimizer for inserting prefetch instructions into loops of applications
US5835776A (en) * 1995-11-17 1998-11-10 Sun Microsystems, Inc. Method and apparatus for instruction scheduling in an optimizing compiler for minimizing overhead instructions
US5664193A (en) * 1995-11-17 1997-09-02 Sun Microsystems, Inc. Method and apparatus for automatic selection of the load latency to be used in modulo scheduling in an optimizing compiler
US5809308A (en) * 1995-11-17 1998-09-15 Sun Microsystems, Inc. Method and apparatus for efficient determination of an RMII vector for modulo scheduled loops in an optimizing compiler
US5797013A (en) * 1995-11-29 1998-08-18 Hewlett-Packard Company Intelligent loop unrolling
US5761515A (en) * 1996-03-14 1998-06-02 International Business Machines Corporation Branch on cache hit/miss for compiler-assisted miss delay tolerance
US5752037A (en) * 1996-04-26 1998-05-12 Hewlett-Packard Company Method of prefetching data for references with multiple stride directions
WO1998006038A1 (en) * 1996-08-07 1998-02-12 Sun Microsystems, Inc. Architectural support for software pipelining of loops

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Mowry,T.C.「Stanford CSL−TR−94−628」"Tolerating Latency Through Software−Cotrolled Data Prefetching",P.67−71(1994−6)

Also Published As

Publication number Publication date
JPH0922361A (ja) 1997-01-21
US5950007A (en) 1999-09-07

Similar Documents

Publication Publication Date Title
JP3218932B2 (ja) データプリフェッチコード生成方法
JP5882950B2 (ja) ステージド・ループ命令
JP3317825B2 (ja) ループ最適化翻訳処理方法
US7185323B2 (en) Using value speculation to break constraining dependencies in iterative control flow structures
JP3546341B2 (ja) 多重ループ向けデータプリフェッチ方法およびプログラム生成方法
JPH05282265A (ja) 自己スケジューリング式並列コンピュータ・システムおよびその方法
JP2003108386A (ja) 間接参照データプリフェッチ方法
US7076777B2 (en) Run-time parallelization of loops in computer programs with static irregular memory access patterns
JP3477137B2 (ja) 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
US6564372B1 (en) Critical path optimization-unzipping
US6954927B2 (en) Hardware supported software pipelined loop prologue optimization
Weiss et al. A study of scalar compilation techniques for pipelined supercomputers
JP3729644B2 (ja) ループ並列化方法
JP3032030B2 (ja) ループ最適化方法及び装置
JP3887097B2 (ja) コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体
Olander et al. Preliminary experience in developing a parallel thin-layer Navier Stokes code and implications for parallel language design
Akturan et al. FDRA: A software-pipelining algorithm for embedded VLIW processors
JPH06290057A (ja) ループ最適化方法
JPH10283192A (ja) プリフェッチコード生成方式
Gupta code Optimization as a side effect of instruction scheduling
Yang et al. Exploiting loop-dependent stream reuse for stream processors
Aiken et al. Modulo Scheduling
JP3743155B2 (ja) パイプライン制御型計算機
JPH07306790A (ja) ループ最適化方式
JPH1196015A (ja) キャッシュ最適化による言語処理方法およびその言語処理を記録した記録媒体

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20070810

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20080810

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20080810

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20090810

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20100810

Year of fee payment: 9

LAPS Cancellation because of no payment of annual fees