JP5428476B2 - プリフェッチ生成プログラムおよびコンパイラ装置 - Google Patents

プリフェッチ生成プログラムおよびコンパイラ装置 Download PDF

Info

Publication number
JP5428476B2
JP5428476B2 JP2009090519A JP2009090519A JP5428476B2 JP 5428476 B2 JP5428476 B2 JP 5428476B2 JP 2009090519 A JP2009090519 A JP 2009090519A JP 2009090519 A JP2009090519 A JP 2009090519A JP 5428476 B2 JP5428476 B2 JP 5428476B2
Authority
JP
Japan
Prior art keywords
prefetch
loop
determined
cache memory
source
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.)
Active
Application number
JP2009090519A
Other languages
English (en)
Other versions
JP2010244208A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009090519A priority Critical patent/JP5428476B2/ja
Publication of JP2010244208A publication Critical patent/JP2010244208A/ja
Application granted granted Critical
Publication of JP5428476B2 publication Critical patent/JP5428476B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、プリフェッチ命令を生成するプリフェッチ生成プログラムおよびコンパイラ装置に関する。
従来より、CPUとメモリの間にメモリよりも高速なキャッシュメモリを用意し、実際のメモリアクセス命令が動く前にあらかじめデータをキャッシュメモリに持つことで、メモリへのアクセスレイテンシを隠蔽する技術が知られている。このようなキャッシュメモリを効率的に利用するために、コンパイラの最適化の技術として、ソフトウェアプリフェッチの最適化とループブロッキングの最適化とが実施されている。
ソフトウェアプリフェッチの最適化とは、図13に例示するような多重ループに対して、図14に示すように最内の次元の観点でプリフェッチ命令(図14の例では、IがXX回転後のデータをプリフェッチするプリフェッチ命令)を生成する。プリフェッチ命令とは、あるデータを実際に使用する前にキャッシュメモリにそのデータをあらかじめ持っていき、実際のメモリへのアクセスレイテンシを隠蔽するために用いられる。なお、図14に示す「XX回転」は、メモリアクセスレイテンシに依存する。
また、ループブロッキング最適化とは、アクセスするメモリ領域をいくつかのブロックに分け、メモリアクセスに局所性を持たせる技術である。ここで、ソフトウェアプリフェッチの最適化について詳しく説明する前に、メモリアクセスの順とキャッシュメモリの状態について説明する。
例えば、メモリは、図15に示すように、メモリアクセスを行う順番を配列として割り付けられている。つまり、図15の例では、「1,1」、「2,1」、「3,1」・・・の順でメモリアクセスが順次行われる。このため、メモリ上ではA(1,1)とA(2,1)が隣り合って並んでいるが、A(1,1)とA(1,2)が離れた位置に割り付けられていることとなる。
ここで、図16および図17を用いて、配列A、配列Bのメモリアクセスの順とキャッシュメモリの状態をそれぞれ説明する。配列Aのアクセスでは、(1,1)の後すぐにアクセスする(2,1)〜(4,1)がキャッシュメモリヒットするので、4回に1回のメモリアクセスで済んでいる。
一方、配列Bのアクセスでは、(1,1)の後すぐに、Iが変化することで飛び飛びのアクセスとなり、キャッシュメモリをすぐに全て使用してしまい、メモリへのアクセス数が多くなってしまう。例えば、図17に例示するように、B(1,1)のアクセスをした時にキャッシュメモリが保持するB(2,1)について、B(1,17)のアクセスをした時に、B(1,1)のキャッシュメモリのデータを上書きしてしまう。
そして、B(2,1)のアクセス時には、すでに上書きされてしまった後であるため再びメモリアクセスすることとなる。つまり、配列Bのアクセスは全てメモリアクセスとなり、キャッシュメモリの効率化を図れていない。
このため、ループブロッキング最適化を行って、アクセスするメモリ領域をいくつかのブロックに分け、メモリアクセスに局所性を持たせる。つまり、図18に例示するように、ループを変形することで、配列Bのメモリアクセスが局所性を持ちたせる。なお、図18に示すブロック数は、キャッシュメモリのサイズに依存している。
ここで、図19および図20を用いて、「変数YY=4」の場合における配列Aと配列Bのメモリアクセス順番と、配列Bのキャッシュメモリの状態について説明する。図19に示すように、メモリ領域がブロック「(1)」、「(2)」、「(3)」・・としてそれぞれ分けられ、「(1)」、「(2)」、「(3)」・・の順番で各ブロックが順次アクセスされる。
その結果、図20に示すように、配列B(1,1)のアクセスで載せたB(1,1)〜B(4,1)までのキャッシュメモリのデータを局所的にアクセスするようになり、B(2,1)、B(3,1)、B(4,1)が上書きされる前に使用することができるため図17の例と比べてメモリへのアクセス数が減り、キャッシュメモリの効率化が図れる。
なお、ソフトウェアプリフェッチの最適化とループブロッキングの最適化とは、それぞれ独立して動作している。つまり、図21に示すように、両方の最適化を行った場合には、プリフェッチ最適化とループブロッキング最適化の両方がそれぞれ独立して動作するオブジェクトが生成される。
特開平8−286914号公報 特開平10−293692号公報
ところで、上記したプリフェッチ最適化とループブロッキング最適化とを両方行う技術では、それぞれ独立して動作するので、キャッシュメモリ上の必要なデータが上書きされる結果、キャッシュを効率よく利用できていないという課題があった。
つまり、ソフトウェアプリフェッチ最適化とは、メモリアクセスの連続性が長いレンジで継続することを前提とした最適化である。このため、ループブロッキング最適化とソフトウェアプリフェッチ最適化が両方動作した場合には、プリフェッチしたデータが使用されないばかりか、必要なデータを上書きしてしまう場合がある。
例えば、図22の例を用いて説明すると、「XX=24」とした場合の配列Bに対するプリフェッチ命令は、実際に実行されるロード命令と比べて、24回転先に使用するデータをキャッシュメモリに載せる。この場合に、図23に例示するように、II=1、2、3、4と動く時にプリフェッチされるB(1,25)、B(1,26)、B(1,27)、B(1,28)のキャッシュメモリ上の配置は、ii=9、10、11、12時のロード命令のB(1,9)、B(1,10)、B(1,11)、B(1,12)と競合する。
そのため、ii=25、26、27、28時のロード命令がアクセスするタイミングに、キャッシュメモリ上の必要なデータが上書きされる結果、ロード命令がメモリアクセスになってしてしまい、キャッシュを効率よく利用できていないという問題があった。
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、キャッシュメモリ上の必要なデータの上書きを防ぎ、キャッシュメモリの利用効率を向上することを目的とする。
上述した課題を解決し、目的を達成するため、この装置は、ソースコードを解析し、ループブロッキングのパターンに該当するか判定し、ループブロッキングのパターンに該当すると判定された場合には、次に処理するブロックに対してプリフェッチ命令を生成することを要件とする。
開示の装置は、ループブロッキングのパターンに該当すると判定された場合には、次に処理するブロックに対してプリフェッチ命令を生成するので、キャッシュメモリ上の必要なデータの上書きを防ぐ結果、キャッシュメモリの利用効率を向上することができるという効果を奏する。
図1は、実施例1に係るコンパイラ装置の構成を示すブロック図である。 図2は、ブロック数が静的に分からないケースのプログラムを示す図である。 図3は、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があるか判定するための計算例を示す図である。 図4は、ハードウェア情報の一例を示す図である。 図5は、生成されたオブジェクトの一例を示す図である。 図6は、ロード命令とプリフェッチ命令との関係を示す図である。 図7は、生成されたオブジェクトの一例を示す図である。 図8は、キャッシュメモリのイメージ図である。 図9は、実施例1に係るコンパイラ装置の処理全体の動作を示すフローチャートである。 図10は、実施例1に係るコンパイラ装置の解析処理の動作を示すフローチャートである。 図11は、実施例1に係るコンパイラ装置の二重生成処理の動作を示すフローチャートである。 図12は、プリフェッチ生成プログラムを実行するコンピュータを示す図である。 図13は、多重ループの説明をするための図である。 図14は、ソフトウェアプリフェッチの最適化の説明をするための図である。 図15は、メモリに割り付けられる順番について説明するための図である。 図16は、メモリアクセスの順番について説明するための図である。 図17は、キャッシュメモリの状態について説明するための図である。 図18は、ループブロッキング最適化について説明するための図である。 図19は、メモリアクセスの順番について説明するための図である。 図20は、キャッシュメモリの状態を説明するための図である。 図21は、プリフェッチ最適化とループブロッキング最適化の両方が動作した状態を説明するための図である。 図22は、ロード命令とプリフェッチ命令との関係を示す図である。 図23は、プリフェッチ最適化とループブロッキング最適化の両方が動作した状態を説明するための図である。
以下に添付図面を参照して、この発明に係るプリフェッチ生成プログラムおよびコンパイラ装置の実施例を詳細に説明する。
以下の実施例では、実施例1に係るコンパイラ装置の構成および処理の流れを順に説明し、最後に実施例1による効果を説明する。
[コンパイラ装置の構成]
まず最初に、図1を用いて、コンパイラ装置10の構成を説明する。図1は、実施例1に係るコンパイラ装置10の構成を示すブロック図である。同図に示すように、このコンパイラ装置10は、制御部12を有する。
制御部12は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行するが、特に、ソース解析部12a、最適化部12b、コード生成部12cを有する。以下にこれらの各部の処理を説明する。
ソース解析部12aは、ソースプログラム11を解析し、ループブロッキングのパターンにソースコードが該当するか判定する。具体的には、ソース解析部12aは、ソースプログラム11を取得し、取得されたソースプログラム11を解析してループがあるか判定する。例えば、ソース解析部12aは、ソースプログラム11内に「DO文」があるか解析し、「DO文」がある場合には、ループがあると判定する。
そして、ソース解析部12aは、ループがあると判定した場合には、多重ループであるか判定する。例えば、ソース解析部12aは、ソースプログラム11内に複数の「DO文」が連続してあるか解析し、「DO文」が連続してある場合には、多重ループであると判定する。この判定の結果、ソース解析部12aは、多重ループがあると判定した場合には、ループブロッキング最適化動作解析処理を行う。
ソース解析部12aは、ループブロッキング最適化動作解析処理として、内側ループの初期値が外側ループの誘導変数を使用しているか判定する。その結果、ソース解析部12aは、内側ループの初期値が外側ループの誘導変数を使用していると判定した場合には、内側ループの回転数が外側ループの増分値と同じであるか判定する。
この結果、ソース解析部12aは、内側ループの回転数が外側ループの増分値と同じであると判定した場合には、ループブロッキングのブロックサイズが静的に分かるか判定する。ブロックサイズが静的に分かるか判定する処理として、ソース解析部12aは、ブロックサイズについてソースプログラム内に定義されているか検索し、ブロックサイズについてソースプログラム内に定義されている場合に、ブロックサイズが静的に分かると判定している。
例えば、ソースプログラム内にブロックサイズを示す情報として「BLOCK=5」と定義されている場合には、ブロックサイズが静的に分かると判定する。ここで、ループブロッキングのブロックサイズが静的に分かるか否かの判定処理について、図2のソースプログラムの例を用いて説明する。図2は、ブロック数が静的に分からないケースのプログラムを示す図である。図2のソースプログラムの例では、ソース解析部12aは、ソースプログラム内にブロックサイズを示す情報が定義されていないので、ブロック数が静的に分からないと判定することとなる。
この判定の結果、ソース解析部12aは、ブロック数が静的に分かると判定した場合には、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があるか判定する。例えば、ソース解析部12aは、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があるか判定処理として、図3に例示する計算を行って、ループをプリフェッチ対象にするか判断する。
具体的な例を挙げて説明すると、ソース解析部12aは、図3に例示するように、最内ループで使用されている配列の数と配列サイズとブロッキング動作ループそれぞれのブロック数を乗算した値の2倍がキャッシュメモリサイズの容量よりも小さいか判定する。この結果、ソース解析部12aは、小さいと判定した場合には、ループをプリフェッチ対象と判断する。
ここで、ソース解析部12aは、図4に例示するように、上記した計算を行うため、ハードウェア情報の例として、キャッシュメモリの容量を示す「キャッシュメモリサイズ」およびメモリアクセスを一回にした場合にキャッシュメモリへ格納される単位である「キャッシュラインサイズ」を使用している。
この判定の結果、ソース解析部12aは、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があると判定した場合には、プリフェッチ命令を生成する旨の指示を最適化部12bに通知する。また、ソース解析部12aは、キャッシュメモリにプリフェッチ命令を生成するだけの余裕がないと判定した場合には、ソフトウェアプリフェッチを抑止する旨の指示を最適化部12bに通知する。
また、ソース解析部12aは、ブロック数が静的に分からないと判定した場合には、プリフェッチ生成ルートとプリフェッチ未生成ルートの二重生成処理を行う旨の指示を通知する。プリフェッチ生成ルートとプリフェッチ未生成ルートの二重生成処理については、後に図11を用いて詳述する。
最適化部12bは、ループブロッキングのパターンに該当すると判定された場合には、次に処理するブロックに対してプリフェッチ命令を生成する。具体的には、最適化部12bは、ソース解析部12aからプリフェッチ命令を生成する旨の指示を受け付けると、図5に例示するように、次に行うブロックに対してソフトウェアプリフェッチ命令を生成する。また、最適化部12bは、ソフトウェアプリフェッチを抑止する旨の指示を受け付けると、ソフトウェアプリフェッチを抑止する。
また、最適化部12bは、ソース解析部12aから二重生成処理を行う旨の指示を受け付けると、オリジナルループのコピーを行う(図7参照)。そして、最適化部12bは、プリフェッチをする余地が残る最大ブロック数を算出する。例えば、最適化部12bは、プリフェッチをする余地が残る最大ブロック数の計算式として、「最大ブロック数=キャッシュメモリサイズ÷最内ループで使用されている配列の数÷配列サイズ÷2」を算出する。
そして、最適化部12bは、算出された最大ブロック数よりも実際のブロック数が小さいかどうか動的に調べる判定処理を作成し、作成された判定処理において、算出された最大ブロック数よりも小さかったルートのループに対してプリフェッチ命令の生成処理を実施する。つまり、最適化部12bは、ブロック数が静的に判断できないため、図7に例示するように、プリフェッチ生成ルートとプリフェッチ未生成ルートの二重生成を行う。
コード生成部12cは、最適化部12bによって最適化されたソースプログラムをループ単位で処理して、オブジェクトファイル13を生成する。ここで、最適化されたソースプログラムを動作した時に、「II=1、2、3、4」と変化した時の配列Bの実際のロード命令とそのロード命令と同じタイミングで生成されるプリフェッチ命令を図6に示し、その時のキャッシュメモリの状況を図8に示す。
つまり、コンパイラ装置10では、図6に示すように、II=1、2、3、4と動く時にプリフェッチされるB(1,5)、B(1,6)、B(1,7)のキャッシュメモリ上の配置は、次に処理されるブロックである。このため、図8に示すように、ブロック(1)をアクセスしているときに、次に処理されるブロックであるブロック(2)をソフトウェアプリフェッチするので、実際のロード命令がブロック(2)を実行するときにはキャッシュメモリミスが起きない。
このように、コンパイラ装置10では、ループブロッキング最適化動作ループに対して、従来の連続性を意識したソフトウェアプリフェッチ命令を生成するのではなく、次に行うブロックに対してソフトウェアプリフェッチ命令を生成する。その結果、コンパイラ装置10では、ソフトウェアプリフェッチ命令でキャッシュメモリに載せたデータが従来の技術よりも早くに使用される。さらに、コンパイラ装置10では、ソフトウェアプリフェッチ命令でキャッシュメモリ上の必要なデータの上書きを防ぐことができる。
[コンパイラ装置による処理]
次に、図9〜図11を用いて、実施例1に係るコンパイラ装置10による処理の流れを説明する。図9は、実施例1に係るコンパイラ装置の処理全体の動作を示すフローチャートである。図10は、実施例1に係るコンパイラ装置の解析処理の動作を示すフローチャートである。図11は、実施例1に係るコンパイラ装置の二重生成処理の動作を示すフローチャートである。
図9に示すように、コンパイラ装置10のソース解析部12aは、ソースプログラムを取得し、取得されたソースプログラムを解析してループがあるか判定する(ステップS101)。その結果、ループがないと判定された場合には(ステップS101否定)、コード生成部12cは、オブジェクトファイル13を生成して(ステップS105)、処理を終了する。
一方、ソース解析部12aは、ループがあると判定した場合には(ステップS101肯定)、多重ループであるか判定する(ステップS102)。その結果、ソース解析部12aは、多重ループがないと判定した場合には(ステップS102否定)、次のループの取り出しを行い(ステップS104)、S101に戻る。
また、ソース解析部12aは、多重ループがあると判定した場合には(ステップS102肯定)、解析処理(後に、図10を用いて詳述)を行い(ステップS103)、その後、次のループの取り出しを行って(ステップS104)、S101の処理に戻る。
次に、図10を用いて、実施例1に係るコンパイラ装置10による解析処理の流れを説明する。図10に示すように、コンパイラ装置10のソース解析部12aは、内側ループの初期値が外側ループの誘導変数を使用しているか判定する(ステップS201)。その結果、ソース解析部12aは、内側ループの初期値が外側ループの誘導変数を使用していないと判定した場合には(ステップS201否定)、そのまま解析処理を終了する。
また、ソース解析部12aは、内側ループの初期値が外側ループの誘導変数を使用していると判定した場合には(ステップS201肯定)、内側ループの回転数が外側ループの増分値と同じであるか判定する(ステップS202)。
この結果、ソース解析部12aは、内側ループの回転数が外側ループの増分値と同じでないと判定した場合には(ステップS202否定)、そのまま解析処理を終了する。また、ソース解析部12aは、内側ループの回転数が外側ループの増分値と同じであると判定した場合には(ステップS202肯定)、ループブロッキングのブロックサイズが静的に分かるか判定する(ステップS203)。
この結果、ソース解析部12aは、ブロック数が静的に分かると判定した場合には(ステップS203肯定)、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があるか判定する(ステップS204)。この結果、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があると判定された場合には(ステップS204肯定)、最適化部12bは、次に行うブロックに対してソフトウェアプリフェッチ命令を生成する(ステップS205)。
また、キャッシュメモリにプリフェッチ命令を生成するだけの余裕がないと判定された場合には(ステップS204否定)、最適化部12bは、ソフトウェアプリフェッチを抑止する(ステップS206)。
ステップS203の処理に戻って、ブロック数が静的に分からないと判定された場合には(ステップS203否定)、最適化部12bは、プリフェッチ生成ルートとプリフェッチ未生成ルートの二重生成処理(後に図11を用いて詳述)を行う(ステップS207)。
次に、図11を用いて、実施例1に係るコンパイラ装置10による二重生成処理の流れを説明する。図11に示すように、コンパイラ装置10の最適化部12bは、オリジナルループのコピーを行う(ステップS301)。そして、最適化部12bは、プリフェッチをする余地が残る最大ブロック数を算出する(ステップS302)。
そして、最適化部12bは、算出された最大ブロック数よりも実際のブロック数が小さいかどうか動的に調べる判定処理を作成し(ステップS303)、作成された判定処理において、算出された最大ブロック数よりも小さかったルートのループに対してプリフェッチ命令の生成処理を実施する(ステップS304)。
[実施例1の効果]
上述してきたように、コンパイラ装置10は、ソースプログラムを解析し、アクセスするメモリ領域を所定のブロックに分割するループブロッキングのパターンにソースプログラムが該当するか判定する。そして、コンパイラ装置10は、ループブロッキングのパターンに該当すると判定された場合には、次に処理するブロックに対してプリフェッチ命令を生成する。このため、コンパイラ装置10では、キャッシュメモリ上の必要なデータの上書きを防ぎ、キャッシュメモリの利用効率を向上することが可能である。
また、実施例1によれば、コンパイラ装置10は、ソースプログラムを解析し、ループブロッキングのパターンにソースプログラムが該当するとともに、ブロックのサイズが静的に判断できるか判定し、静的に判断できると判定した場合には、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があるか判定する。そして、コンパイラ装置10は、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があると判定された場合には、次に処理するブロックに対してプリフェッチ命令を生成し、キャッシュメモリにプリフェッチ命令を生成するだけの余裕がないと判定された場合には、プリフェッチを抑止する。このため、キャッシュメモリ上の必要なデータの上書きを防ぎキャッシュメモリの利用効率を向上させる。
また、実施例1によれば、コンパイラ装置10は、ソースプログラムを解析し、ループブロッキングのパターンにソースプログラムが該当するとともに、ブロックのサイズが静的に判断できるか判定する。そして、コンパイラ装置10は、静的に判断できないと判定された場合には、ソフトウェアプリフェッチ生成ループおよびソフトウェアプリフェッチ未生成ループを生成する。このため、ブロックのサイズが静的に判断できない場合には、ソフトウェアプリフェッチ生成ループおよびソフトウェアプリフェッチ未生成ループの2ルートを生成し、いずれルートを用いるか動的に判断する。この結果、プリフェッチ命令を生成するか否かを動的に判断して、キャッシュメモリ上の必要なデータの上書きを防ぎ、キャッシュメモリの利用効率を向上することが可能である。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
(1)システム構成等
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ソース解析部12aと最適化部12bを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
(2)プログラム
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをコンピュータで実行することによって実現することができる。そこで、以下では、図12を用いて、上記の実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図12は、プリフェッチ生成プログラムを実行するコンピュータを示す図である。
同図に示すように、コンパイラ装置としてのコンピュータ600は、HDD610、RAM620、ROM630およびCPU640をバス650で接続して構成される。
そして、ROM630には、上記の実施例と同様の機能を発揮するプリフェッチ生成プログラム、つまり、図12に示すように、ソース解析プログラム631、最適化プログラム632、コード生成プログラム633が予め記憶されている。なお、プログラム631〜633については、図1に示したコンパイラ装置の各構成要素と同様、適宜統合または分散してもよい。
そして、CPU640が、これらのプログラム631〜633をROM630から読み出して実行することで、図12に示すように、各プログラム631〜633は、ソース解析プロセス641、最適化プロセス642、コード生成プロセス643として機能するようになる。各プロセス641〜643は、図1に示したソース解析部12a、最適化部12b、コード生成部12cにそれぞれ対応する。
10 コンパイラ装置
11 ソースプログラム
12 制御部
12a ソース解析部
12b 最適化部
12c コード生成部
13 オブジェクトファイル
600 コンパイラ装置
610 HDD
620 RAM
630 ROM
631 ソース解析プログラム
632 最適化プログラム
633 コード生成プログラム
640 CPU
641 ソース解析プロセス
642 最適化プロセス
643 コード生成プロセス
650 バス

Claims (4)

  1. ソースコードの解析結果に基づいて、アクセスするメモリ領域を所定のデータサイズのブロックに分割するループブロッキングのパターンが前記ソースコードに含まれるとともに、前記ブロックのデータサイズが静的に判断できるかを判定し、静的に判断できると判定された場合には、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があるか判定し、
    前記キャッシュメモリに前記プリフェッチ命令を生成するだけの余裕があると判定された場合には、前記ソースコードにおける前記ループブロッキングにおいて次に処理されるブロックに含まれるメモリ領域に対する前記プリフェッチ命令を生成し、前記キャッシュメモリに前記プリフェッチ命令を生成するだけの余裕がないと判定された場合には、プリフェッチを抑止する
    ことをコンピュータに実行させることを特徴とするプリフェッチ生成プログラム。
  2. ソースコードの解析結果に基づいて、アクセスするメモリ領域を所定のデータサイズのブロックに分割するループブロッキングのパターンが前記ソースコードに含まれるとともに、前記ブロックのデータサイズが静的に判断できるかを判定し、
    前記ブロックのデータサイズが静的に判断できないと判定された場合には、プリフェッチ生成ループおよびプリフェッチ未生成ループを生成する
    ことをコンピュータに実行させることを特徴とするプリフェッチ生成プログラム。
  3. ソースコードの解析結果に基づいて、アクセスするメモリ領域を所定のデータサイズのブロックに分割するループブロッキングのパターンが前記ソースコードに含まれるとともに、前記ブロックのデータサイズが静的に判断できるかを判定し、静的に判断できると判定された場合には、キャッシュメモリにプリフェッチ命令を生成するだけの余裕があるか判定するソース解析部と、
    前記ソース解析部によって前記キャッシュメモリに前記プリフェッチ命令を生成するだけの余裕があると判定された場合には、前記ソースコードにおける前記ループブロッキングにおいて次に処理されるブロックに含まれるメモリ領域に対する前記プリフェッチ命令を生成し、前記ソース解析部によって前記キャッシュメモリに前記プリフェッチ命令を生成するだけの余裕がないと判定された場合には、プリフェッチを抑止するプリフェッチ命令生成部と、
    を備えることを特徴とするコンパイラ装置。
  4. ソースコードの解析結果に基づいて、アクセスするメモリ領域を所定のデータサイズのブロックに分割するループブロッキングのパターンが前記ソースコードに含まれるとともに、前記ブロックのデータサイズが静的に判断できるかを判定するソース解析部と、
    前記ソース解析部によって前記ブロックのデータサイズが静的に判断できないと判定された場合には、プリフェッチ生成ループおよびプリフェッチ未生成ループを生成するプリフェッチ命令生成部と、
    を備えることを特徴とするコンパイラ装置。
JP2009090519A 2009-04-02 2009-04-02 プリフェッチ生成プログラムおよびコンパイラ装置 Active JP5428476B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009090519A JP5428476B2 (ja) 2009-04-02 2009-04-02 プリフェッチ生成プログラムおよびコンパイラ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009090519A JP5428476B2 (ja) 2009-04-02 2009-04-02 プリフェッチ生成プログラムおよびコンパイラ装置

Publications (2)

Publication Number Publication Date
JP2010244208A JP2010244208A (ja) 2010-10-28
JP5428476B2 true JP5428476B2 (ja) 2014-02-26

Family

ID=43097180

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009090519A Active JP5428476B2 (ja) 2009-04-02 2009-04-02 プリフェッチ生成プログラムおよびコンパイラ装置

Country Status (1)

Country Link
JP (1) JP5428476B2 (ja)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2677482B2 (ja) * 1992-03-18 1997-11-17 富士通株式会社 計算機言語処理方法
JPH10283192A (ja) * 1997-04-09 1998-10-23 Hitachi Ltd プリフェッチコード生成方式
JP3546341B2 (ja) * 1997-04-17 2004-07-28 株式会社日立製作所 多重ループ向けデータプリフェッチ方法およびプログラム生成方法
JPH10320212A (ja) * 1997-05-21 1998-12-04 Hitachi Ltd キャッシュ向け最適化方法
JPH11306167A (ja) * 1998-04-15 1999-11-05 Fujitsu Ltd ベクトルレジスタ制御処理装置および記録媒体
JP2000155689A (ja) * 1998-11-20 2000-06-06 Hitachi Ltd ループ展開方法及び装置
JP2000207224A (ja) * 1999-01-14 2000-07-28 Hitachi Ltd ソフトウェアプリフェッチ方法
JP3681647B2 (ja) * 2001-02-21 2005-08-10 株式会社半導体理工学研究センター キャッシュメモリシステム装置
JP4934267B2 (ja) * 2003-10-17 2012-05-16 パナソニック株式会社 コンパイラ装置
WO2005078579A1 (ja) * 2004-02-12 2005-08-25 Matsushita Electric Industrial Co., Ltd. プログラム変換装置およびプログラム変換方法

Also Published As

Publication number Publication date
JP2010244208A (ja) 2010-10-28

Similar Documents

Publication Publication Date Title
US7350029B2 (en) Data stream prefetching in a microprocessor
US7716427B2 (en) Store stream prefetching in a microprocessor
JP6458682B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP5934094B2 (ja) データ並列スレッドを有する処理論理の複数のプロセッサにわたるマッピング
JP3739491B2 (ja) プリフェッチ命令を用いるハーバードアーキテクチャキャッシュメモリの調和したソフトウェア制御
KR20180124709A (ko) 공간 메모리 스트리밍 트레이닝을 위한 장치 및 방법
KR20120025612A (ko) 컴퓨터 스레드들의 이종 리소스들로의 맵핑
JP2013500539A (ja) 分散型プレディケート予測を実現するための方法、システム、およびコンピュータによってアクセス可能な媒体
EP2804099B1 (en) Apparatus and method managing power based on data
CN107844380B (zh) 一种支持指令预取的多核缓存wcet分析方法
JP2009528612A (ja) データ処理システム並びにデータ及び/又は命令のプリフェッチ方法
JP2011013864A (ja) 命令制御装置、命令制御方法および演算回路
US20030084433A1 (en) Profile-guided stride prefetching
TW201629775A (zh) 在程式偵測時動態更新硬體預取特性為互斥或共享的裝置與方法
JP2007233615A (ja) アドレス変換装置
JP2014115851A (ja) データ処理装置及びその制御方法
JP2011150691A (ja) 演算処理装置、情報処理装置及び制御方法
US10719441B1 (en) Using predictions of outcomes of cache memory access requests for controlling whether a request generator sends memory access requests to a memory in parallel with cache memory access requests
JP5630281B2 (ja) ベクトル命令制御回路及びリストベクトルの追い越し制御方法
JP5428476B2 (ja) プリフェッチ生成プログラムおよびコンパイラ装置
US20030154342A1 (en) Evaluation and optimisation of code
CN112395000B (zh) 一种数据预加载方法和指令处理装置
Kyriacou et al. Cacheflow: A short-term optimal cache management policy for data driven multithreading
JP2000207224A (ja) ソフトウェアプリフェッチ方法
JP2008015668A (ja) タスク管理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111205

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130215

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130312

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130513

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130611

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130809

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130903

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131015

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131118

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5428476

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150