JP3156761B2 - ノンブロッキングキャッシュ対応のコードスケジューリング方式及びそのプログラムを記録した記憶媒体 - Google Patents
ノンブロッキングキャッシュ対応のコードスケジューリング方式及びそのプログラムを記録した記憶媒体Info
- Publication number
- JP3156761B2 JP3156761B2 JP14648297A JP14648297A JP3156761B2 JP 3156761 B2 JP3156761 B2 JP 3156761B2 JP 14648297 A JP14648297 A JP 14648297A JP 14648297 A JP14648297 A JP 14648297A JP 3156761 B2 JP3156761 B2 JP 3156761B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- cache
- profile data
- scheduling
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing 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)
Description
【0001】
【発明の属する技術分野】本発明は、ノンブロッキング
キャッシュ機構を採用する計算機システム用のコードを
生成するコンパイラのコードスケジューリング方式に関
する。
キャッシュ機構を採用する計算機システム用のコードを
生成するコンパイラのコードスケジューリング方式に関
する。
【0002】
【従来の技術】現在、計算機システムは、CPUとメモ
リの間に高速、小容量のキャッシュメモリを配置し、メ
モリに置かれたデータへのアクセスの高速化を図ってい
るものが一般的となっている。
リの間に高速、小容量のキャッシュメモリを配置し、メ
モリに置かれたデータへのアクセスの高速化を図ってい
るものが一般的となっている。
【0003】計算機システムは、キャッシュを配置する
ことにより、必要なデータがキャッシュ上に存在する場
合に、より低速な主記憶にアクセスする必要がないた
め、実行性能が向上する。 しかし、計算機システム
は、単純なキャッシュ機構では逆に必要なデータがキャ
ッシュ上に存在しない(キャッシュミス)場合、データ
の主記憶からキャッシュへの読み込みを完了するまでC
PUが停止するため実行性能が低下するという問題が存
在する。
ことにより、必要なデータがキャッシュ上に存在する場
合に、より低速な主記憶にアクセスする必要がないた
め、実行性能が向上する。 しかし、計算機システム
は、単純なキャッシュ機構では逆に必要なデータがキャ
ッシュ上に存在しない(キャッシュミス)場合、データ
の主記憶からキャッシュへの読み込みを完了するまでC
PUが停止するため実行性能が低下するという問題が存
在する。
【0004】そこで、その対策として、計算機システム
は、キャッシュミスが発生した場合でもCPUの動作は
停止せず、またキャッシュミスが存在しても他の命令に
よるキャッシュへのアクセスが可能なノンブロッキング
キャッシュ機構が考案され、今後は、この機構を採用す
るものが主流となると思われる。 [参考文献:COMPUTER ARCHITECTURE: A QUANTATIVE AP
PROACH (John L. Henessy & David A. Patterson, 199
6, p414-416)] しかし、現在の計算機システムは、依然としてキャッシ
ュミスに起因する実行性能低下が残っており、この性能
低下を低減する方法が提案されている。
は、キャッシュミスが発生した場合でもCPUの動作は
停止せず、またキャッシュミスが存在しても他の命令に
よるキャッシュへのアクセスが可能なノンブロッキング
キャッシュ機構が考案され、今後は、この機構を採用す
るものが主流となると思われる。 [参考文献:COMPUTER ARCHITECTURE: A QUANTATIVE AP
PROACH (John L. Henessy & David A. Patterson, 199
6, p414-416)] しかし、現在の計算機システムは、依然としてキャッシ
ュミスに起因する実行性能低下が残っており、この性能
低下を低減する方法が提案されている。
【0005】特開平3−282734号公報には、パイ
プライン処理を行うCPUとメモリの間に高速、小容量
のキャッシュを持つ計算機での命令実行時のキャッシュ
ミスペナルティを小さくするための命令再配置を行う方
法が記載されている。
プライン処理を行うCPUとメモリの間に高速、小容量
のキャッシュを持つ計算機での命令実行時のキャッシュ
ミスペナルティを小さくするための命令再配置を行う方
法が記載されている。
【0006】ここでキャッシュミスペナルティとは、主
記憶からレジスタにデータをロードする場合にデータが
キャッシュ上に存在しない場合に、主記憶からキャッシ
ュへのデータの読み込み(これをキャッシュ置き換えと
呼ぶ)が完了するまでCPUが停止し、実行効率が低下
することを意味する。
記憶からレジスタにデータをロードする場合にデータが
キャッシュ上に存在しない場合に、主記憶からキャッシ
ュへのデータの読み込み(これをキャッシュ置き換えと
呼ぶ)が完了するまでCPUが停止し、実行効率が低下
することを意味する。
【0007】つぎに図9を参照して、特開平3−282
734号公報に記載された方法の構成を説明する。プロ
グラム91はコンパイル部93によりコンパイルされ機
械語命令に変換される。命令再配置最適化部94は、出
力された命令を調べ、キャッシュミスの発生する命令を
見つけだし、メモリからキャッシュへの読み込みを行っ
ている時間に実行でき、かつその実行に複数サイクルを
要する命令をその命令の直前に配置することで、キャッ
シュミスの結果としてメモリからキャッシュへの読み込
みを実行している間もCPUを無駄に止めないようにす
る。
734号公報に記載された方法の構成を説明する。プロ
グラム91はコンパイル部93によりコンパイルされ機
械語命令に変換される。命令再配置最適化部94は、出
力された命令を調べ、キャッシュミスの発生する命令を
見つけだし、メモリからキャッシュへの読み込みを行っ
ている時間に実行でき、かつその実行に複数サイクルを
要する命令をその命令の直前に配置することで、キャッ
シュミスの結果としてメモリからキャッシュへの読み込
みを実行している間もCPUを無駄に止めないようにす
る。
【0008】この方法に関し、上記公報は、メモリのア
クセスパターンが比較的予想しやすい命令フェッチ実行
時の命令キャッシュへのアクセスに関して述べられてお
り、データへのアクセスについては、命令フェッチの場
合と同様に主記憶を逐次的に参照する場合のみしか述べ
られていない。また、ノンブロッキングキャッシュに関
しても考慮されていない。
クセスパターンが比較的予想しやすい命令フェッチ実行
時の命令キャッシュへのアクセスに関して述べられてお
り、データへのアクセスについては、命令フェッチの場
合と同様に主記憶を逐次的に参照する場合のみしか述べ
られていない。また、ノンブロッキングキャッシュに関
しても考慮されていない。
【0009】また、特開平4−44139号公報には、
プログラムの処理上必要とするデータについて、そのデ
ータがキャツシュに存在するか否かを調べ、存在しない
場合にはデータのキャッシュへの読み込みを他の命令の
実行と同時に行なうことが可能なプリフェッチ命令を命
令セットに追加し、そのデータ参照の前方にプリフェッ
チ命令を挿入することでメモリへのデータ参照の処理効
率を上げる方法が記載されている。しかし、公報にはプ
リフェッチ命令をハードウェアとして実現する方法につ
いて述べられているが、プリフェッチ命令をどのように
配置するかについては述べられていない。 また、COMP
UTER ARCHITECTURE: A QUANTATIVE APPROACH (John L.
Henessy & David A. Patterson, 1996, p402-404)にお
いて、ノンブロッキングキャッシュ機構について考慮し
た方法としては、ループ中で後のループの繰り返し(こ
れをイタレーションと呼ぶ)で使うデータをプリフェッ
チするという方法が記載されているが、これはループ内
のデータ参照に限られている。
プログラムの処理上必要とするデータについて、そのデ
ータがキャツシュに存在するか否かを調べ、存在しない
場合にはデータのキャッシュへの読み込みを他の命令の
実行と同時に行なうことが可能なプリフェッチ命令を命
令セットに追加し、そのデータ参照の前方にプリフェッ
チ命令を挿入することでメモリへのデータ参照の処理効
率を上げる方法が記載されている。しかし、公報にはプ
リフェッチ命令をハードウェアとして実現する方法につ
いて述べられているが、プリフェッチ命令をどのように
配置するかについては述べられていない。 また、COMP
UTER ARCHITECTURE: A QUANTATIVE APPROACH (John L.
Henessy & David A. Patterson, 1996, p402-404)にお
いて、ノンブロッキングキャッシュ機構について考慮し
た方法としては、ループ中で後のループの繰り返し(こ
れをイタレーションと呼ぶ)で使うデータをプリフェッ
チするという方法が記載されているが、これはループ内
のデータ参照に限られている。
【0010】
【発明が解決しようとする課題】従来の命令キャッシュ
のミスペナルティを小さくするためのスケジューリング
方法は、ループ内にないロード命令でキャッシュミスを
起こし、そのデータのキャッシュへの読み込みが終らな
いうちに、そのデータを参照する命令が実行されるよう
にスケジューリングされる場合に、キャッシュミスペナ
ルティ(これをAccess Before Refillと呼び、以後AB
Rと表す)が依然として発生すると言う問題がスケジュ
ーリング方法に残っている。
のミスペナルティを小さくするためのスケジューリング
方法は、ループ内にないロード命令でキャッシュミスを
起こし、そのデータのキャッシュへの読み込みが終らな
いうちに、そのデータを参照する命令が実行されるよう
にスケジューリングされる場合に、キャッシュミスペナ
ルティ(これをAccess Before Refillと呼び、以後AB
Rと表す)が依然として発生すると言う問題がスケジュ
ーリング方法に残っている。
【0011】また、John L. Henessy & David A. Patte
rsonによるノンブロッキングキャッシュを考慮したスケ
ジューリング方法は、ノンブロッキングキャッシュ機構
にある種の条件を必要とする。彼らの提案したループ内
でプリフェッチを行うスケジューリング方法は、一般に
ループの繰り返しで、ロード命令が多数回実行されるこ
とにより、多重にキャッシュミスが発生し易いため、多
数回キャッシュミスが発生しても引き続きキャッシュへ
のアクセスを許す機構が必要となる。このノンブロツキ
ングキャッシュ機構の特性は、1 hit under n miss(n
は整数)と呼ばれ、キャッシュミスがn個起こっている
状態でも後続の命令がキャッシュをアクセス可能である
が、そこでさらにキャッシュミスが起こると、以前にキ
ャッシュミスしたデータのキャッシュへの読み込みが終
わらない限り後続の命令がキャッシュをアクセスできな
いことを意味する。
rsonによるノンブロッキングキャッシュを考慮したスケ
ジューリング方法は、ノンブロッキングキャッシュ機構
にある種の条件を必要とする。彼らの提案したループ内
でプリフェッチを行うスケジューリング方法は、一般に
ループの繰り返しで、ロード命令が多数回実行されるこ
とにより、多重にキャッシュミスが発生し易いため、多
数回キャッシュミスが発生しても引き続きキャッシュへ
のアクセスを許す機構が必要となる。このノンブロツキ
ングキャッシュ機構の特性は、1 hit under n miss(n
は整数)と呼ばれ、キャッシュミスがn個起こっている
状態でも後続の命令がキャッシュをアクセス可能である
が、そこでさらにキャッシュミスが起こると、以前にキ
ャッシュミスしたデータのキャッシュへの読み込みが終
わらない限り後続の命令がキャッシュをアクセスできな
いことを意味する。
【0012】彼らの提案したスケジューリング方法は、
許されるキャッシュミスの回数が少ない機構(特に1 hi
t under 1 miss)を採用するCPUにおいては、逆にペ
ナルティが大きくなる可能性がある。そのスケジューリ
ング方法は、最も制限の厳しい1 hit under 1 miss特性
を持つCPUの場合、ロード命令がキャッシュミスを起
こした後、キャッシュの置き替えが終らないうちに、再
度キャッシュへアクセスを行なった場合、さらにキャッ
シュミスが発生する(これをDouble Cache Miss と呼
び、以後DCMと表す)場合のキャッシュミスペナルテ
ィの問題がスケジューリング方法に存在する。以後、1
hit under 1 missの場合を想定して説明するが、1 hit
under n missの場合も同様に扱うことができる。
許されるキャッシュミスの回数が少ない機構(特に1 hi
t under 1 miss)を採用するCPUにおいては、逆にペ
ナルティが大きくなる可能性がある。そのスケジューリ
ング方法は、最も制限の厳しい1 hit under 1 miss特性
を持つCPUの場合、ロード命令がキャッシュミスを起
こした後、キャッシュの置き替えが終らないうちに、再
度キャッシュへアクセスを行なった場合、さらにキャッ
シュミスが発生する(これをDouble Cache Miss と呼
び、以後DCMと表す)場合のキャッシュミスペナルテ
ィの問題がスケジューリング方法に存在する。以後、1
hit under 1 missの場合を想定して説明するが、1 hit
under n missの場合も同様に扱うことができる。
【0013】以後、単にキャッシュミスペナルティと記
述した場合には、キャッシュミスペナルティは上記の2
つ(ABR,DCM)のキャッシュミスペナルティを指
すこととする。
述した場合には、キャッシュミスペナルティは上記の2
つ(ABR,DCM)のキャッシュミスペナルティを指
すこととする。
【0014】本発明の目的は、ノンブロッキングキャツ
シュ機構を採用する計算機システム用のコンパイラにお
いて、キャッシュミスペナルティを軽減することで実行
速度の速い目的コードを生成することのできるコードス
ケジューリング方式及びそのプログラムを記録した記憶
媒体を提供することである。
シュ機構を採用する計算機システム用のコンパイラにお
いて、キャッシュミスペナルティを軽減することで実行
速度の速い目的コードを生成することのできるコードス
ケジューリング方式及びそのプログラムを記録した記憶
媒体を提供することである。
【0015】
【課題を解決するための手段】本発明のノンブロッキン
グキャッシュ対応のコードスケジューリング方法及びそ
のプログラムを記録した記憶媒体は、CPUとメモリの
間に高速、小容量のノンブロッキングキャッシュを配置
し、ソースプログラムを入力して字句解析、構文解析を
行なうフロントエンドと、フロントエンドの解析結果と
目的コードをマシン上もしくはシミュレータ上で実行し
得られるCPU動作を記録したプロファイルデータとを
基に、コードスケジューリング部と目的コード生成部を
含み、目的コードを生成するバックエンドとを有する言
語処理コンパイラにおけるコードスケジューリング方式
において、コードスケジューリング部に、解析結果とプ
ロファイルデータを基に、実行速度を低下させるキャッ
シュミスペナルティを検出するプロファイルデータ解析
部と、プロファイルデータ解析部により検出されるキャ
ッシュミスするデータの先読みを行なう命令コードの挿
入を行なうコードスケジューリング実行部とを有し、プ
ロファイルデータはターゲットマシン上もしくはシミュ
レータ上でのプログラム実行時のキャッシュミスペナル
ティとキャッシュの置き換えの発生情報を含み、プロフ
ァイルデータ解析部は、プロファイルデータを解析して
キャッシュミスペナルティの発生以前においてキャッシ
ュ置換えの発生していない最長の区間を検出する手段を
有し、命令コードは最長の区間の直前に挿入する、こと
を特徴とする。
グキャッシュ対応のコードスケジューリング方法及びそ
のプログラムを記録した記憶媒体は、CPUとメモリの
間に高速、小容量のノンブロッキングキャッシュを配置
し、ソースプログラムを入力して字句解析、構文解析を
行なうフロントエンドと、フロントエンドの解析結果と
目的コードをマシン上もしくはシミュレータ上で実行し
得られるCPU動作を記録したプロファイルデータとを
基に、コードスケジューリング部と目的コード生成部を
含み、目的コードを生成するバックエンドとを有する言
語処理コンパイラにおけるコードスケジューリング方式
において、コードスケジューリング部に、解析結果とプ
ロファイルデータを基に、実行速度を低下させるキャッ
シュミスペナルティを検出するプロファイルデータ解析
部と、プロファイルデータ解析部により検出されるキャ
ッシュミスするデータの先読みを行なう命令コードの挿
入を行なうコードスケジューリング実行部とを有し、プ
ロファイルデータはターゲットマシン上もしくはシミュ
レータ上でのプログラム実行時のキャッシュミスペナル
ティとキャッシュの置き換えの発生情報を含み、プロフ
ァイルデータ解析部は、プロファイルデータを解析して
キャッシュミスペナルティの発生以前においてキャッシ
ュ置換えの発生していない最長の区間を検出する手段を
有し、命令コードは最長の区間の直前に挿入する、こと
を特徴とする。
【0016】また、本発明のノンブロッキングキャッシ
ュ対応のコードスケジューリング方法及びそのプログラ
ムを記録した記憶媒体は、CPUとメモリの間に高速、
小容量のノンブロッキングキャッシュを配置し、ソース
プログラムを入力して字句解析、構文解析を行なうフロ
ントエンドと、フロントエンドの解析結果から目的コー
ドを生成する目的コード生成部を含む言語処理コンパイ
ラからの一時目的コードとスケジューリング用データを
受け、フロントエンドの解析結果と一時目的コードをマ
シン上もしくはシミュレータ上で実行し得られるCPU
動作を記録したプロファイルデータとを基に行うコード
スケジューリング方式において、解析結果とプロファイ
ルデータを基に、実行速度を低下させるキャッシュミス
ペナルティを検出するプロファイルデータ解析部と、プ
ロファイルデータ解析部により検出されるキャッシュミ
スするデータの先読みを行なう命令コードの挿入を行な
うコードスケジューリング実行部とを有し、プロファイ
ルデータはターゲットマシン上もしくはシミュレータ上
でのプログラム実行時のキャッシュミスペナルティとキ
ャッシュの置き換えの発生情報を含み、プロファイルデ
ータ解析部は、プロファイルデータを解析してキャッシ
ュミスペナルティの発生以前においてキャッシュ置換え
の発生していない最長の区間を検出する手段を有し、命
令コードは最長の区間の直前に挿入する、ことを特徴と
する。
ュ対応のコードスケジューリング方法及びそのプログラ
ムを記録した記憶媒体は、CPUとメモリの間に高速、
小容量のノンブロッキングキャッシュを配置し、ソース
プログラムを入力して字句解析、構文解析を行なうフロ
ントエンドと、フロントエンドの解析結果から目的コー
ドを生成する目的コード生成部を含む言語処理コンパイ
ラからの一時目的コードとスケジューリング用データを
受け、フロントエンドの解析結果と一時目的コードをマ
シン上もしくはシミュレータ上で実行し得られるCPU
動作を記録したプロファイルデータとを基に行うコード
スケジューリング方式において、解析結果とプロファイ
ルデータを基に、実行速度を低下させるキャッシュミス
ペナルティを検出するプロファイルデータ解析部と、プ
ロファイルデータ解析部により検出されるキャッシュミ
スするデータの先読みを行なう命令コードの挿入を行な
うコードスケジューリング実行部とを有し、プロファイ
ルデータはターゲットマシン上もしくはシミュレータ上
でのプログラム実行時のキャッシュミスペナルティとキ
ャッシュの置き換えの発生情報を含み、プロファイルデ
ータ解析部は、プロファイルデータを解析してキャッシ
ュミスペナルティの発生以前においてキャッシュ置換え
の発生していない最長の区間を検出する手段を有し、命
令コードは最長の区間の直前に挿入する、ことを特徴と
する。
【0017】また、プロファイルデータ解析部は、ター
ゲットマシン上もしくはシミュレータ上でのプログラム
実行時のキャッシュミスペナルティとキャッシュの置き
換えの発生情報を含むCPUの動作を記録したプロファ
イルデータを基に、プロファイルデータに含まれるキャ
ッシュミス情報とキャッシュミスペナルティの発生以前
のキャッシュ置き換えの発生状況を解析する手段と、解
析によりキャッシュ置換えの発生していない最長の区間
を検出する手段を有する。
ゲットマシン上もしくはシミュレータ上でのプログラム
実行時のキャッシュミスペナルティとキャッシュの置き
換えの発生情報を含むCPUの動作を記録したプロファ
イルデータを基に、プロファイルデータに含まれるキャ
ッシュミス情報とキャッシュミスペナルティの発生以前
のキャッシュ置き換えの発生状況を解析する手段と、解
析によりキャッシュ置換えの発生していない最長の区間
を検出する手段を有する。
【0018】更に、コードスケジューリング実行部は、
キャッシュミスペナルティを発生するメモリアクセス命
令の前方にあらかじめキャッシュにデータを格納してお
くためのプリフェッチ命令を挿入する手段を有する。
キャッシュミスペナルティを発生するメモリアクセス命
令の前方にあらかじめキャッシュにデータを格納してお
くためのプリフェッチ命令を挿入する手段を有する。
【0019】
【発明の実施の形態】次に本発明の第1の実施の形態に
ついて図面を参照して詳細に説明する。図1(a)は、
本発明の第1の実施例における構成を示すブロック図で
ある。本実施例のコードスケジューリング方式は、図1
(a)に示すように、フロントエンド11とバツクエン
ド12を含むコンパイラ2によって実現される。コンパ
イラ2は、入力コード1を入力とし、目的コード3を出
力とする。
ついて図面を参照して詳細に説明する。図1(a)は、
本発明の第1の実施例における構成を示すブロック図で
ある。本実施例のコードスケジューリング方式は、図1
(a)に示すように、フロントエンド11とバツクエン
ド12を含むコンパイラ2によって実現される。コンパ
イラ2は、入力コード1を入力とし、目的コード3を出
力とする。
【0020】フロントエンド11は、入力コードである
プログラムについて字句解析、構文解祈を行ない、中問
言語コードを出力する。バツクエンド12は、コードス
ケジューリング部13と目的コード生成部14を含む。
プログラムについて字句解析、構文解祈を行ない、中問
言語コードを出力する。バツクエンド12は、コードス
ケジューリング部13と目的コード生成部14を含む。
【0021】コードスケジューリング部13は、中間言
語コードに対してキャッシュミスペナルティをできるだ
け小さくするためにコードのスケジューリングを行な
う。目的コード生成部14は、中間言語コードから目的
コードを生成する。
語コードに対してキャッシュミスペナルティをできるだ
け小さくするためにコードのスケジューリングを行な
う。目的コード生成部14は、中間言語コードから目的
コードを生成する。
【0022】次に、図1(b)を参照してコードスケジ
ューリング部13の詳細な構成を説明する。コードスケ
ジューリング部13は、プロファイルデータ解析部15
とコードスケジューリング実行部16とを含む。
ューリング部13の詳細な構成を説明する。コードスケ
ジューリング部13は、プロファイルデータ解析部15
とコードスケジューリング実行部16とを含む。
【0023】プロファイルデータ解析部15は、プロフ
ァイルデータ4を解析し、キャッシュミスペナルティ発
生部分を検出する。また同時に、コードスケジューリン
グ実行部16で利用するためのキャッシュ動作情報を解
析する。ここで、キャッシュ動作情報とはキャッシュミ
スしたデータを主記憶からキャッシュに読み込む動作を
各動作クロックで行なっているか、いないかを表す。
ァイルデータ4を解析し、キャッシュミスペナルティ発
生部分を検出する。また同時に、コードスケジューリン
グ実行部16で利用するためのキャッシュ動作情報を解
析する。ここで、キャッシュ動作情報とはキャッシュミ
スしたデータを主記憶からキャッシュに読み込む動作を
各動作クロックで行なっているか、いないかを表す。
【0024】コードスケジューリング実行部16は、プ
ロファイルデータ解析部15により得られたキャッシュ
動作情報を基にプロファイルデータ解析部15で検出し
たキャッシュミスペナルティを軽減するためのコードス
ケジューリングを行なう。
ロファイルデータ解析部15により得られたキャッシュ
動作情報を基にプロファイルデータ解析部15で検出し
たキャッシュミスペナルティを軽減するためのコードス
ケジューリングを行なう。
【0025】次に、このように構成された本実施例のコ
ードスケジューリング方式の動作について説明する。
ードスケジューリング方式の動作について説明する。
【0026】まず、図1(a)に示すコンパイラの概略
的な動作について説明する。フロントエンド11は、入
力コード1を入力として字句解析、構文解析を行ない中
間言語コードに変換し、結果をバックエンド12に渡
す。バックエンド12においては、まずコードスケジュ
ーリング部13がフロントエンド11から渡された中間
言語コードに対してキャッシュミスペナルティを小さく
するようにコードスケジューリングを行なう。さらに目
的コード生成部14は中間言語コードを目的コードに変
換し、コンパイラ2の出力である目的コード3を出力す
る。
的な動作について説明する。フロントエンド11は、入
力コード1を入力として字句解析、構文解析を行ない中
間言語コードに変換し、結果をバックエンド12に渡
す。バックエンド12においては、まずコードスケジュ
ーリング部13がフロントエンド11から渡された中間
言語コードに対してキャッシュミスペナルティを小さく
するようにコードスケジューリングを行なう。さらに目
的コード生成部14は中間言語コードを目的コードに変
換し、コンパイラ2の出力である目的コード3を出力す
る。
【0027】次に、図1、2(a)を参照して、コード
スケジューリング部13における動作について説明す
る。最初に、コンパイラは、コンパイラのコードスケジ
ューリング部13を無効にした上で、入力コード21を
入力としてコードスケジューリング前のコードである一
時目的コード23の生成を行なう。ターゲットとしてい
る計算機上もしくはその振舞いをシミュレートするシミ
ュレータは得られた一時目的コード23を実行し、プロ
ファイルデータ25を得る。
スケジューリング部13における動作について説明す
る。最初に、コンパイラは、コンパイラのコードスケジ
ューリング部13を無効にした上で、入力コード21を
入力としてコードスケジューリング前のコードである一
時目的コード23の生成を行なう。ターゲットとしてい
る計算機上もしくはその振舞いをシミュレートするシミ
ュレータは得られた一時目的コード23を実行し、プロ
ファイルデータ25を得る。
【0028】次に、コンパイラは、プロファイルデータ
25と入力コード21を用いてコードスケジューリング
部13を有効にした上で、コンパイルを実行26し目的
コード27を得る。
25と入力コード21を用いてコードスケジューリング
部13を有効にした上で、コンパイルを実行26し目的
コード27を得る。
【0029】図3、4、5(a)を参照してプロファイ
ルデータ25について説明する。
ルデータ25について説明する。
【0030】プロファイルデータ25は、目的コード実
行時のCPUの動作状況を動作クロックごとに記録した
ものである。ここで、CPUの動作状況は、実行した命
令と、オペランドと、実行開始クロックと、キャッシュ
動作情報と、キャッシュミスの発生を含み、さらにメモ
リ参照命令の場合には、そのアドレスも含む。図3は、
キャッシュ動作情報、キャッシュミス発生、その他の情
報の例を示している。図5(a)は、その詳細な例であ
る。
行時のCPUの動作状況を動作クロックごとに記録した
ものである。ここで、CPUの動作状況は、実行した命
令と、オペランドと、実行開始クロックと、キャッシュ
動作情報と、キャッシュミスの発生を含み、さらにメモ
リ参照命令の場合には、そのアドレスも含む。図3は、
キャッシュ動作情報、キャッシュミス発生、その他の情
報の例を示している。図5(a)は、その詳細な例であ
る。
【0031】図5(a)に示すように、キャッシュミス
情報に示されている“*”は、ロード命令52でキャッ
シュミスが発生していることを示すマークであり、ロー
ド命令52でデータがロードされるレジスタr15を直
後の加算命令で参照しているため、キャッシュ置き換え
が完了しロード命令52が完了するまで次の加算命令が
実行できずCPUが停止している。“ストール”はCP
Uが停止していることを示している。
情報に示されている“*”は、ロード命令52でキャッ
シュミスが発生していることを示すマークであり、ロー
ド命令52でデータがロードされるレジスタr15を直
後の加算命令で参照しているため、キャッシュ置き換え
が完了しロード命令52が完了するまで次の加算命令が
実行できずCPUが停止している。“ストール”はCP
Uが停止していることを示している。
【0032】プロファイルデータ25には、図4に示す
ような入力コードの制御構造とプロファイルデータの実
行された各命令、目的コードとの対応を知るためのデー
タも含まれる。
ような入力コードの制御構造とプロファイルデータの実
行された各命令、目的コードとの対応を知るためのデー
タも含まれる。
【0033】図2(b)は図2(a)のスケジューリン
グ部を有効にしてコンパイルを実行26した場合のコー
ドスケジューリング部の処理13の流れを詳細に説明し
たものである。以下これに沿ってコードスケジューリン
グ部13の処理の流れを説明する。
グ部を有効にしてコンパイルを実行26した場合のコー
ドスケジューリング部の処理13の流れを詳細に説明し
たものである。以下これに沿ってコードスケジューリン
グ部13の処理の流れを説明する。
【0034】処理ステツプ210にて、図1のコードス
ケジューリング部13において、最初に、プロファイル
データ解析部15は、プロファイルデータ4を走査し、
キャッシュミスペナルティが発生する部分(以後これを
キャッシュミスペナルティ部と呼ぶ)の検出を行なう。
さらにプロファイルデータ解析部15は、キャッシュ動
作情報に関してキャッシュの置き換えが起こっていない
連続した期間(図3のキャッシュ動作情報における斜線
部以外の部分)のクロック数の解析も行なう。
ケジューリング部13において、最初に、プロファイル
データ解析部15は、プロファイルデータ4を走査し、
キャッシュミスペナルティが発生する部分(以後これを
キャッシュミスペナルティ部と呼ぶ)の検出を行なう。
さらにプロファイルデータ解析部15は、キャッシュ動
作情報に関してキャッシュの置き換えが起こっていない
連続した期間(図3のキャッシュ動作情報における斜線
部以外の部分)のクロック数の解析も行なう。
【0035】次に、コードスケジューリング実行部16
は、プロファイルデータ解析部15の検出したキャッシ
ュミスペナルティの各々について、その実行順にキャッ
シュミスペナルティを軽減するためのコードスケジュー
リングを行なう。具体的には、処理ステップ211に
て、最初のキャッシュミスペナルティ部を特定し、処理
ステップ212〜216によりコードスケジューリング
を行ない、処理ステツプ217にて、全てのキャッシュ
ミスペナルティ部について処理を完了したか否かを判断
し、処理すべきキャッシュミスペナルティ部が存在すれ
ば、そのキャッシュミスペナルティ部を次の対象として
処理を繰り返す。
は、プロファイルデータ解析部15の検出したキャッシ
ュミスペナルティの各々について、その実行順にキャッ
シュミスペナルティを軽減するためのコードスケジュー
リングを行なう。具体的には、処理ステップ211に
て、最初のキャッシュミスペナルティ部を特定し、処理
ステップ212〜216によりコードスケジューリング
を行ない、処理ステツプ217にて、全てのキャッシュ
ミスペナルティ部について処理を完了したか否かを判断
し、処理すべきキャッシュミスペナルティ部が存在すれ
ば、そのキャッシュミスペナルティ部を次の対象として
処理を繰り返す。
【0036】図5、6、7を参照してコードスケジュー
リングの処理ステップ212から216の動作について
説明する。
リングの処理ステップ212から216の動作について
説明する。
【0037】まず処理ステツプ212において、コード
スケジューリング実行部16は、検出したキャッシュミ
スペナルティ51の原因となったロード命令の実行52
からプロファイルデータを時間的に遡り、キャッシュ置
き換えを行なっていない最長の期間53(以後これを最
長キャッシュ不変期間と呼ぶ)を決定する。
スケジューリング実行部16は、検出したキャッシュミ
スペナルティ51の原因となったロード命令の実行52
からプロファイルデータを時間的に遡り、キャッシュ置
き換えを行なっていない最長の期間53(以後これを最
長キャッシュ不変期間と呼ぶ)を決定する。
【0038】ここで、コードスケジューリング実行部1
6は、キャッシュミスを起こすロード命令実行からその
データを参照する命令もしくはDCMを起こすロード命
令の実行までの期間(以後これを下限期間と呼ぶ)より
最長キャッシュ不変期間が短い場合には、キャッシュミ
スペナルティを軽減するためのコードスケジューリング
を行なわない。さらに、コードスケジューリング実行部
16は、キャッシュ置き換えの発生しない最長の期間が
ループ回数不定のループ構造内である場合も同様にコー
ドスケジューリングを行なわない。これは、後に行なう
ループ展開においてループ回数がコンパイル時に確定し
ている必要があるためである。
6は、キャッシュミスを起こすロード命令実行からその
データを参照する命令もしくはDCMを起こすロード命
令の実行までの期間(以後これを下限期間と呼ぶ)より
最長キャッシュ不変期間が短い場合には、キャッシュミ
スペナルティを軽減するためのコードスケジューリング
を行なわない。さらに、コードスケジューリング実行部
16は、キャッシュ置き換えの発生しない最長の期間が
ループ回数不定のループ構造内である場合も同様にコー
ドスケジューリングを行なわない。これは、後に行なう
ループ展開においてループ回数がコンパイル時に確定し
ている必要があるためである。
【0039】また、そのロード命令が間接参照である場
合には、参照するメモリのアドレスがベ−スレジスタ
(図5では、レジスタ112が相当する)に依存するた
め、最長キャッシュ不変期間はそのレジスタ値が設定さ
れるレジスタ位置54以降になければならない。
合には、参照するメモリのアドレスがベ−スレジスタ
(図5では、レジスタ112が相当する)に依存するた
め、最長キャッシュ不変期間はそのレジスタ値が設定さ
れるレジスタ位置54以降になければならない。
【0040】次に、コードスケジューリング実行部16
は、そのロード命令が参照するデータをキャッシュに先
読みするためのロード命令(以後ダミーロード命令とす
る)を最長キャッシュ不変期間の直前に挿入する。
は、そのロード命令が参照するデータをキャッシュに先
読みするためのロード命令(以後ダミーロード命令とす
る)を最長キャッシュ不変期間の直前に挿入する。
【0041】これにより得られる効果を、図5を参照し
て説明する。
て説明する。
【0042】ダミーロード命令の挿入方法は、最長キャ
ッシュ不変期間がループ構造中にある場合とそうでない
場合で処理方法が異なる。
ッシュ不変期間がループ構造中にある場合とそうでない
場合で処理方法が異なる。
【0043】最初に最長キャッシュ不変期間がループ構
造中にない場合(処理ステップ214)を説明する。具
体的な動作の説明のため、本実施例のコンパイラがター
ゲットとする計算機システムは、キャッシュ置き換えに
30クロックかかると仮定する。図5(a)に示したプ
ロファイルデータは、ロード命令52の実行においてキ
ャッシュミスが発生し、さらに、その直後にそのデータ
を参照する命令(add r15,r14)が配置され
ているために、レジスタrl5にデータが読み込まれる
クロック番号176までCPUが停止していることを示
している。ここで、プロファイルデータは、ロード命令
52の前方に、mov命令55から始まる40クロック
の最長キャッシュ不変期間53を持っているとする。コ
ードスケジューリング実行部16は、前述の方法に従い
mov命令55の直前にロード命令52と同アドレスを
読み込むダミーロード命令56を挿入する。その結果得
られたコードは、ダミーロード命令56の実行によりキ
ャッシュミスが発生するが、その際のキャッシュ置き換
え実行中にも他の命令が実行され、またもとのロード命
令52でのキャッシュミスの発生をも回避することがで
きダミロード命令56挿入以前のプロファイルデータの
クロック番号176で実行されていたmov命令がダミ
ロード命令56挿入後のプロファイルデータのクロック
番号149で実行される。従って、スケジューリング後
には、コードの実行時間は27クロック数分処理が速ま
る。
造中にない場合(処理ステップ214)を説明する。具
体的な動作の説明のため、本実施例のコンパイラがター
ゲットとする計算機システムは、キャッシュ置き換えに
30クロックかかると仮定する。図5(a)に示したプ
ロファイルデータは、ロード命令52の実行においてキ
ャッシュミスが発生し、さらに、その直後にそのデータ
を参照する命令(add r15,r14)が配置され
ているために、レジスタrl5にデータが読み込まれる
クロック番号176までCPUが停止していることを示
している。ここで、プロファイルデータは、ロード命令
52の前方に、mov命令55から始まる40クロック
の最長キャッシュ不変期間53を持っているとする。コ
ードスケジューリング実行部16は、前述の方法に従い
mov命令55の直前にロード命令52と同アドレスを
読み込むダミーロード命令56を挿入する。その結果得
られたコードは、ダミーロード命令56の実行によりキ
ャッシュミスが発生するが、その際のキャッシュ置き換
え実行中にも他の命令が実行され、またもとのロード命
令52でのキャッシュミスの発生をも回避することがで
きダミロード命令56挿入以前のプロファイルデータの
クロック番号176で実行されていたmov命令がダミ
ロード命令56挿入後のプロファイルデータのクロック
番号149で実行される。従って、スケジューリング後
には、コードの実行時間は27クロック数分処理が速ま
る。
【0044】また、ゲートとする計算機システムは、最
長キャッシュ不変期間53がキャツシュ置き換えの期間
より短い場合には、DCMが発生することになるが、最
長キャッシュ不変期間53が下限期間より長いので、ダ
ミーロード命令56を挿入しない場合と比べてキャッシ
ュ置き換えと並行して、より多くの命令を最長キャッシ
ュ不変期間53中に実行できる。
長キャッシュ不変期間53がキャツシュ置き換えの期間
より短い場合には、DCMが発生することになるが、最
長キャッシュ不変期間53が下限期間より長いので、ダ
ミーロード命令56を挿入しない場合と比べてキャッシ
ュ置き換えと並行して、より多くの命令を最長キャッシ
ュ不変期間53中に実行できる。
【0045】図6を参照して具体的に説明する。
【0046】図6(a)、(b)は、それぞれ本発明適
用前のプロファイルデータ、適用後のプロファイルデー
タの例である。
用前のプロファイルデータ、適用後のプロファイルデー
タの例である。
【0047】図6(a)では、プロファイルデータは、
クロック番号120、124でキャッシュミスが発生し
DCMが検出されている。ここで下限期間は3クロック
であり、1命令の実行に1クロックかかるとすると、こ
の期間の間に3命令実行されている。
クロック番号120、124でキャッシュミスが発生し
DCMが検出されている。ここで下限期間は3クロック
であり、1命令の実行に1クロックかかるとすると、こ
の期間の間に3命令実行されている。
【0048】つぎに、プロファイルデータ解析部が、ロ
ード命令61の前方にクロック番号80から始まる10
クロックの最長キャッシュ不変期間を検出したとする。
先と同様にターゲットとする計算機システムがキャッシ
ュ置き換えに30クロックかかると仮定すると、ダミー
ロード命令63を挿入した場合に、図6(b)のよう
に、実行されたプロファイルデータは、クロック番号9
1のロード命令64でDCMが発生している。しかし、
先と同様に考えるとコードは、ロード命令64でのDC
Mの発生までに10命令実行されている。この結果、本
発明適用前のストール期間62は25クロックである
が、適用後のストール期間65は18クロックと短縮さ
れる。また、クロック番号124で発生していたDCM
は、ダミーロード命令63によるデータの先読みにより
解消されているためここでのストールも同時に解消され
ている。これはクロック番号124から発生していたD
CMによるストールがクロック番号91のロード命令で
のDCMに起因するストールへ移動しただけではある
が、DCMが発生するまでにより多くの命令が実行され
ることでDCMによるストール期間が短縮され、実行速
度が向上している。
ード命令61の前方にクロック番号80から始まる10
クロックの最長キャッシュ不変期間を検出したとする。
先と同様にターゲットとする計算機システムがキャッシ
ュ置き換えに30クロックかかると仮定すると、ダミー
ロード命令63を挿入した場合に、図6(b)のよう
に、実行されたプロファイルデータは、クロック番号9
1のロード命令64でDCMが発生している。しかし、
先と同様に考えるとコードは、ロード命令64でのDC
Mの発生までに10命令実行されている。この結果、本
発明適用前のストール期間62は25クロックである
が、適用後のストール期間65は18クロックと短縮さ
れる。また、クロック番号124で発生していたDCM
は、ダミーロード命令63によるデータの先読みにより
解消されているためここでのストールも同時に解消され
ている。これはクロック番号124から発生していたD
CMによるストールがクロック番号91のロード命令で
のDCMに起因するストールへ移動しただけではある
が、DCMが発生するまでにより多くの命令が実行され
ることでDCMによるストール期間が短縮され、実行速
度が向上している。
【0049】つまり、目的コードの実行時間は、DCM
が発生しCPUが停止するという点では変わりないが、
最長キャッシュ不変期間が、下限期間より長いという条
件から、ダミーロード命令のためのキャッシュ置き換え
を行なっている時間に、下限期間に実行される命令より
も多くの命令を最長キャッシュ不変期間に実行でき、結
果としてDCMによるCPUの停止期間が短くなるので
実行時間が短くなる。
が発生しCPUが停止するという点では変わりないが、
最長キャッシュ不変期間が、下限期間より長いという条
件から、ダミーロード命令のためのキャッシュ置き換え
を行なっている時間に、下限期間に実行される命令より
も多くの命令を最長キャッシュ不変期間に実行でき、結
果としてDCMによるCPUの停止期間が短くなるので
実行時間が短くなる。
【0050】次に、最長キャッシュ不変期間がループ構
造中にある場合(処理ステツプ215、216)の処理
について説明する。
造中にある場合(処理ステツプ215、216)の処理
について説明する。
【0051】この場合には、ループ不変期間が図7
(a)のようにループの特定のイタレーション中に存在
する可能性があるため、コードスケジューリング実行部
16は、単純にダミーロード命令をループ中に挿入でき
ないので、ループ構造を変形することが必要となる。
(a)のようにループの特定のイタレーション中に存在
する可能性があるため、コードスケジューリング実行部
16は、単純にダミーロード命令をループ中に挿入でき
ないので、ループ構造を変形することが必要となる。
【0052】この場合の処理について図7を参照して説
明する。
明する。
【0053】図7(a)のようなプロファイルデータが
得られ、最長キャッシュ不変期間71が見つかつたとす
る。ここでloop(n)はループのn回目のイタレー
ションの実行部分を示す。説明のため最長キャッシュ不
変期間を含むループが、10回ループを繰り返す構造を
持っているとする。最長キャッシュ不変期間71はlo
op(2)の途中から始まっており、最長キャッシュ不
変期間の直前にダミーロード命令を挿入するためには3
回目のイタレーション以降に一度だけ実行されるように
ダミーロード命令を挿入しなければならない。このた
め、コードスケジューリング実行部16は、図7(c)
のように元のループの前方に2イタレーション分のルー
プ72を展開する。コードスケジューリング実行部16
は、残り8イタレーション分のループ本体74と展開し
たループ72の間にダミーロード命令73を挿入する。
図7(b)はダミーロード命令73挿入後のプロファイ
ルデータであり、ターゲットとする計算機システムは、
ダミーロード命令73のキャッシュミスによるキャッシ
ュ置き換えが実行されている間にも3回目以降のループ
イタレーションが並行して実行されている。
得られ、最長キャッシュ不変期間71が見つかつたとす
る。ここでloop(n)はループのn回目のイタレー
ションの実行部分を示す。説明のため最長キャッシュ不
変期間を含むループが、10回ループを繰り返す構造を
持っているとする。最長キャッシュ不変期間71はlo
op(2)の途中から始まっており、最長キャッシュ不
変期間の直前にダミーロード命令を挿入するためには3
回目のイタレーション以降に一度だけ実行されるように
ダミーロード命令を挿入しなければならない。このた
め、コードスケジューリング実行部16は、図7(c)
のように元のループの前方に2イタレーション分のルー
プ72を展開する。コードスケジューリング実行部16
は、残り8イタレーション分のループ本体74と展開し
たループ72の間にダミーロード命令73を挿入する。
図7(b)はダミーロード命令73挿入後のプロファイ
ルデータであり、ターゲットとする計算機システムは、
ダミーロード命令73のキャッシュミスによるキャッシ
ュ置き換えが実行されている間にも3回目以降のループ
イタレーションが並行して実行されている。
【0054】ターゲットとする計算機システムは、この
ダミーロード命令の実行により、意図的にキャッシュミ
スを起こし、キャッシュへのデータ読み込みが行なわれ
ている間に、後続の命令を並行して実行する。同時に、
目的コードの実行時間は、もとのロード命令でのキャッ
シュミスを回避できるので目的ヒードの実行時間が短く
なる。
ダミーロード命令の実行により、意図的にキャッシュミ
スを起こし、キャッシュへのデータ読み込みが行なわれ
ている間に、後続の命令を並行して実行する。同時に、
目的コードの実行時間は、もとのロード命令でのキャッ
シュミスを回避できるので目的ヒードの実行時間が短く
なる。
【0055】次に本発明の第2の実施例について図1
(a)、8を参照して説明する。
(a)、8を参照して説明する。
【0056】第2の実施例の実施の形態は、第1の実施
例と比較してバックエンド12にはコードスケジューリ
ング部13が含まれないという点で異なる。そのため、
コンパイラ82は第1の実施例においてコンパイラ内部
でコードスケジューリングを行なうことにより得られて
いた入力コード1の制御構造、目的コード3とプロファ
イルデータ4の対応を知るためのデータをスケジューリ
ング用データ86として出力し、コードスケジューリン
グ部88は一時目的コード85、スケジューリング用デ
ータ86及びプロファイルデータ87を入力としてスケ
ジューリングを行ない、目的コード86を生成する。
例と比較してバックエンド12にはコードスケジューリ
ング部13が含まれないという点で異なる。そのため、
コンパイラ82は第1の実施例においてコンパイラ内部
でコードスケジューリングを行なうことにより得られて
いた入力コード1の制御構造、目的コード3とプロファ
イルデータ4の対応を知るためのデータをスケジューリ
ング用データ86として出力し、コードスケジューリン
グ部88は一時目的コード85、スケジューリング用デ
ータ86及びプロファイルデータ87を入力としてスケ
ジューリングを行ない、目的コード86を生成する。
【0057】次に第2の実施例の動作について、図2、
8を参照して説明する。第1の実施例では、コンパイラ
は、一時目的コード23を出力するためにコードスケジ
ューリング部13を無効にしてコンパイルを実行22
し、目的コードを得るためにプロファイルデータ25と
入力コード21を入力としてスケジューリング部13を
有効にして再度コンパイルを実行26する。これに対し
て第2の実施例では、コンパイラ82は、一時目的コー
ド85を得る際にのみコンパイルを実行する。コンパイ
ラ82は、出力として一時目的コード85に加えて、ス
ケジューリング用データ86を出力する。
8を参照して説明する。第1の実施例では、コンパイラ
は、一時目的コード23を出力するためにコードスケジ
ューリング部13を無効にしてコンパイルを実行22
し、目的コードを得るためにプロファイルデータ25と
入力コード21を入力としてスケジューリング部13を
有効にして再度コンパイルを実行26する。これに対し
て第2の実施例では、コンパイラ82は、一時目的コー
ド85を得る際にのみコンパイルを実行する。コンパイ
ラ82は、出力として一時目的コード85に加えて、ス
ケジューリング用データ86を出力する。
【0058】次に、コードスケジューリング部88は、
第1の実施例と同様にして得られたプロファイルデータ
87、一時目的コード85、およびスケジューリング用
データ86を入力として第1の実施例と同様にコードス
ケジューリングを行ない目的コード89を出力する。
第1の実施例と同様にして得られたプロファイルデータ
87、一時目的コード85、およびスケジューリング用
データ86を入力として第1の実施例と同様にコードス
ケジューリングを行ない目的コード89を出力する。
【0059】コードスケジューリング部88の動作の第
1の実施例との違いを図2、8を参照して説明する。
1の実施例との違いを図2、8を参照して説明する。
【0060】第1の実施例との違いは、第1の実施例で
は入力コード21、プロファイルデータ25を入力とし
コンパイラを実行し入力コード21を字句解析、構文解
析することで内部的に得ていたスケジューリング用デー
タ86を第2の実施例ではコードスケジューリング部8
8で利用するためにコンパイラ82が出力する点であ
る。
は入力コード21、プロファイルデータ25を入力とし
コンパイラを実行し入力コード21を字句解析、構文解
析することで内部的に得ていたスケジューリング用デー
タ86を第2の実施例ではコードスケジューリング部8
8で利用するためにコンパイラ82が出力する点であ
る。
【0061】第1の実施例との他の違いは、第1の実施
例ではフロントエンドから出力される中間言語を入力と
してコードスケジューリング処理を行なうが、第2の実
施例では、コンパイラ82から出力される一時目的コー
ドを入力としてコードスケジューリング処理を行なう点
である。
例ではフロントエンドから出力される中間言語を入力と
してコードスケジューリング処理を行なうが、第2の実
施例では、コンパイラ82から出力される一時目的コー
ドを入力としてコードスケジューリング処理を行なう点
である。
【0062】その他の第2の実施例の動作は第1の実施
例の動作と同じである。
例の動作と同じである。
【0063】
【発明の効果】本発明によれば、コンパイラは、“デー
タを先読みすることによりキャッシュミスを意図的に早
めに起こし、主記憶からキャッシュへの読み込みを行っ
ている間も別の命令を実行するようにスケジューリング
を行うこと”で実行効率を高めることができる。
タを先読みすることによりキャッシュミスを意図的に早
めに起こし、主記憶からキャッシュへの読み込みを行っ
ている間も別の命令を実行するようにスケジューリング
を行うこと”で実行効率を高めることができる。
【0064】上記の効果が得られる理由は、ABRとD
CMの2つのキャッシュミスペナルティについて、キャ
ツシュへのデータの先読みを行なうダミーのロード命令
をキャッシュミスによるキャッシュ置き換えの発生しな
い期間に挿入することで、データのキャッシュへの読み
込みとダミーロード命令の後続命令とを並行に実行で
き、同時にもとのロード命令でのキャッシュミスを回避
できるためである。
CMの2つのキャッシュミスペナルティについて、キャ
ツシュへのデータの先読みを行なうダミーのロード命令
をキャッシュミスによるキャッシュ置き換えの発生しな
い期間に挿入することで、データのキャッシュへの読み
込みとダミーロード命令の後続命令とを並行に実行で
き、同時にもとのロード命令でのキャッシュミスを回避
できるためである。
【図1】本発明のノンブロツキングキャッシュ対応コー
ドスケジューリング方法の第1の実施例の構成を示すブ
ロツク図である(特に、図1(b)は、コードスケジュ
ーリング部の構成を詳細に示すブロツク図である)。
ドスケジューリング方法の第1の実施例の構成を示すブ
ロツク図である(特に、図1(b)は、コードスケジュ
ーリング部の構成を詳細に示すブロツク図である)。
【図2】本発明のノンブロツキングキャッシュ対応コー
ドスケジューリング方法の第1の実施例の処理の流れを
示すブロツク図である。(特に、図2(b)は、コード
スケジューリング部の処理の流れを詳細に示すブロック
図である)。
ドスケジューリング方法の第1の実施例の処理の流れを
示すブロツク図である。(特に、図2(b)は、コード
スケジューリング部の処理の流れを詳細に示すブロック
図である)。
【図3】図1(a)に示すプロファイルデータの構成を
示す図である。
示す図である。
【図4】本発明においてプロファイルデータに要求され
るプロファイルデータ、目的コード、入力コードの対応
について説明するための図である。
るプロファイルデータ、目的コード、入力コードの対応
について説明するための図である。
【図5】図1(a)に示すノンブロツキングキャッシュ
対応コードスケジューリング方法の動作を説明するため
の図である。図5(a)は図2に示すプロファイルデー
タ25の一例、図5(b)は図5(a)の例に対して本
発明の第1の実施例におけるコードスケジューリングを
実施した結果得られる目的コードのプロファイルデータ
を示すための図である。
対応コードスケジューリング方法の動作を説明するため
の図である。図5(a)は図2に示すプロファイルデー
タ25の一例、図5(b)は図5(a)の例に対して本
発明の第1の実施例におけるコードスケジューリングを
実施した結果得られる目的コードのプロファイルデータ
を示すための図である。
【図6】本発明のコードスケジューリング方法により挿
入されたダミーロード命令によるDCMの発生について
説明した図である。
入されたダミーロード命令によるDCMの発生について
説明した図である。
【図7】図1(b)に示すコードスケジューリング実行
部において最長キャッシュ不変期間がループ中にあった
場合の処理を説明するための図である。図7(a)は最
長キャッシュ不変期間がルーブ中に存在した場合のプロ
ファイルデータの一例:図7(b)は図7(a)に対し
て本発明の第1の実施例におけるコードスケジューリン
グを実施した結果得られる目的コードのプロファイルデ
ータ、図7(c)は、図7(a)に対して本発明の第1
の実施例におけるコードスケジューリングを実施する際
のループ展開の方法について示した図である。
部において最長キャッシュ不変期間がループ中にあった
場合の処理を説明するための図である。図7(a)は最
長キャッシュ不変期間がルーブ中に存在した場合のプロ
ファイルデータの一例:図7(b)は図7(a)に対し
て本発明の第1の実施例におけるコードスケジューリン
グを実施した結果得られる目的コードのプロファイルデ
ータ、図7(c)は、図7(a)に対して本発明の第1
の実施例におけるコードスケジューリングを実施する際
のループ展開の方法について示した図である。
【図8】本発明のノンブロッキングキャッシュ対応コー
ドスケジューリング方法の第2の実施例の構成を示すブ
ロック図である。
ドスケジューリング方法の第2の実施例の構成を示すブ
ロック図である。
【図9】従来のコードスケジューリング方法を示すブロ
ック図である。
ック図である。
1 入力コード 2 コンパイラ 3 目的コード 4 プロファイルデータ 11 フロントエンド 12 バックエンド 13 コードスケジューリング部 14 目的コード生成部 15 プロファイルデータ解析部 16 コードスケジューリング実行部 21 入力コード 23 一時目的コード 25 プロファイルデータ 27 目的コード 51 キャッシュミスペナルティ 52 ld命令 53 最長キャッシュ不変期間 54 ベースレジスタ位置 55 mov命令 56 ダミーロード命令 61 ロード命令 62 ストール期間 63 ダミーロード命令 64 ロード命令 65 ストール期間 71 最長キャッシュ不変期間 72 展開したループ 73 ダミーロード命令 74 ループ本体 81 入力コード 82 コンパイラ 83 フロントエンド 84 目的コード生成部 85 一時目的コード 86 スケジューリング用データ 87 プロファイルデータ 88 コードスケジューリング部 89 目的コード
フロントページの続き (56)参考文献 特開 平4−44139(JP,A) 特開 平2−176938(JP,A) 特開 平2−64833(JP,A) 特開 平3−282734(JP,A) 特開 平8−263372(JP,A) S.Mcfarling,”Prog ram OPtimization f or Instruction Cac hes”,Proceedings o f the Third Intern ational Conference on Architectural Support for Progra mming Languages an d Operating System s,1989,p183−191 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45 G06F 12/08
Claims (6)
- 【請求項1】 CPUとメモリの間に高速、小容量のノ
ンブロッキングキャッシュを配置し、ソースプログラム
を入力して字句解析、構文解析を行なうフロントエンド
と、前記フロントエンドの解析結果と目的コードをマシ
ン上もしくはシミュレータ上で実行し得られるCPU動
作を記録したプロファイルデータとを基に、コードスケ
ジューリング部と目的コード生成部を含み、目的コード
を生成するバックエンドとを有する言語処理コンパイラ
におけるコードスケジューリング方式において、 前記コードスケジューリング部に、前記解析結果と前記
プロファイルデータを基に、実行速度を低下させるキャ
ッシュミスペナルティを検出するプロファイルデータ解
析部と、 前記プロファイルデータ解析部により検出されるキャッ
シュミスするデータの先読みを行なう命令コードの挿入
を行なうコードスケジューリング実行部とを有し、前記プロファイルデータはターゲットマシン上もしくは
シミュレータ上でのプログラム実行時のキャッシュミス
ペナルティとキャッシュの置き換えの発生情報を含み、 前記プロファイルデータ解析部は、前記プロファイルデ
ータを解析してキャッシュミスペナルティの発生以前に
おいてキャッシュ置換えの発生していない最長の区間を
検出する手段を有し、 前記命令コードは前記最長の区間の直前に挿入する、 ことを特徴とするノンブロッキングキャッシュ対応のコ
ードスケジューリング方式。 - 【請求項2】 CPUとメモリの間に高速、小容量のノ
ンブロッキングキャッシュを配置し、ソースプログラム
を入力して字句解析、構文解析を行なうフロントエンド
と、前記フロントエンドの解析結果から目的コードを生
成する目的コード生成部とを含む言語処理コンパイラか
らの一時目的コードとスケジューリング用データを受
け、前記フロントエンドの解析結果と一時目的コードを
マシン上もしくはシミュレータ上で実行し得られるCP
U動作を記録したプロファイルデータとを基に行うコー
ドスケジューリング方式において、 前記解析結果と前記プロファイルデータを基に、実行速
度を低下させるキャッシュミスペナルティを検出するプ
ロファイルデータ解析部と、 前記プロファイルデータ解析部により検出されるキャッ
シュミスするデータの先読みを行なう命令コードの挿入
を行なうコードスケジューリング実行部とを有し、前記プロファイルデータはターゲットマシン上もしくは
シミュレータ上でのプログラム実行時のキャッシュミス
ペナルティとキャッシュの置き換えの発生情報を含み、 前記プロファイルデータ解析部は、前記プロファイルデ
ータを解析してキャッシュミスペナルティの発生以前に
おいてキャッシュ置換えの発生していない最長の区間を
検出する手段を有し、 前記命令コードは前記最長の区間の直前に挿入する、 ことを特徴とするノンブロッキングキャッシュ対応のコ
ードスケジューリング方式。 - 【請求項3】 前記コードスケジューリング実行部が、 前記キャッシュミスペナルティを発生するメモリアクセ
ス命令の前方にあらかじめキャッシュにデータを格納し
ておくためのプリフェッチ命令を挿入する手段を有する
請求項1または2記載のノンブロッキングキャッシュ対
応のコードスケジューリング方式。 - 【請求項4】 CPUとメモリの間に高速、小容量のノ
ンブロッキングキャッシュを配置し、ソースプログラム
を入力して字句解析、構文解析を行なうフロントエンド
と、前記フロントエンドの解析結果と目的コードをマシ
ン上もしくはシミュレータ上で実行し得られるCPU動
作を記録したプロファイルデータとを基に、コードスケ
ジューリング部と目的コード生成部を含み、目的コード
を生成するバックエンドとを有する言語処理コンパイラ
プログラムを記録した記憶媒体において、 前記コードスケジューリング部に、前記解析結果と前記
プロファイルデータを基に、実行速度を低下させるキャ
ッシュミスペナルティを検出するプロファイルデータ解
析部と、 前記プロファイルデータ解析部により検出されるキャッ
シュミスするデータの先読みを行なう命令コードの挿入
を行なうコードスケジューリング実行部とを有し、前記プロファイルデータはターゲットマシン上もしくは
シミュレータ上でのプログラム実行時のキャッシュミス
ペナルティとキャッシュの置き換えの発生情報を含み、 前記プロファイルデータ解析部は、前記プロファイルデ
ータを解析してキャッシュミスペナルティの発生以前に
おいてキャッシュ置換えの発生していない最長の区間を
検出する手段を有し、 前記命令コードは前記最長の区間の直前に挿入する、 ことを特徴とするノンブロッキングキャッシュ対応のコ
ードスケジューリング方式のプログラムを記録した記録
媒体。 - 【請求項5】 CPUとメモリの間に高速、小容量のノ
ンブロッキングキャッシュを配置し、ソースプログラム
を入力して字句解析、構文解析を行なうフロントエンド
と、前記フロントエンドの解析結果から目的コードを生
成する目的コード生成部とを含む言語処理コンパイラか
らの一時目的コードとスケジューリング用データを受
け、前記フロントエンドの解析結果と一時目的コードを
マシン上もしくはシミュレータ上で実行し得られるCP
U動作を記録したプロファイルデータとを基に行うコー
ドスケジューリング方式のプログラムを記録した媒体に
おいて、 前記解析結果と前記プロファイルデータを基に、実行速
度を低下させるキャッシュミスペナルティを検出するプ
ロファイルデータ解析部と、 前記プロファイルデータ解析部により検出されるキャッ
シュミスするデータの先読みを行なう命令コードの挿入
を行なうコードスケジューリング実行部とを有し、前記プロファイルデータはターゲットマシン上もしくは
シミュレータ上でのプログラム実行時のキャッシュミス
ペナルティとキャッシュの置き換えの発生情報を含み、 前記プロファイルデータ解析部は、前記プロファイルデ
ータを解析してキャッシュミスペナルティの発生以前に
おいてキャッシュ置換えの発生していない最長の区間を
検出する手段を有し、 前記命令コードは前記最長の区間の直前に挿入する、 ことを特徴とするノンブロッキングキャッシュ対応のコ
ードスケジューリング方式のプログラムを記録した記録
媒体。 - 【請求項6】 前記コードスケジューリング実行部が、 前記キャッシュミスペナルティを発生するメモリアクセ
ス命令の前方にあらかじめキャッシュにデータを格納し
ておくためのプリフェッチ命令を挿入する手段を有する
請求項5または6記載のノンブロッキングキャッシュ対
応のコードスケジューリング方式のプログラムを記録し
た記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14648297A JP3156761B2 (ja) | 1997-06-04 | 1997-06-04 | ノンブロッキングキャッシュ対応のコードスケジューリング方式及びそのプログラムを記録した記憶媒体 |
EP19980110237 EP0883059A2 (en) | 1997-06-04 | 1998-06-04 | Compiler applicable to nonblocking cache memory and code scheduling method thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14648297A JP3156761B2 (ja) | 1997-06-04 | 1997-06-04 | ノンブロッキングキャッシュ対応のコードスケジューリング方式及びそのプログラムを記録した記憶媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10333916A JPH10333916A (ja) | 1998-12-18 |
JP3156761B2 true JP3156761B2 (ja) | 2001-04-16 |
Family
ID=15408644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP14648297A Expired - Fee Related JP3156761B2 (ja) | 1997-06-04 | 1997-06-04 | ノンブロッキングキャッシュ対応のコードスケジューリング方式及びそのプログラムを記録した記憶媒体 |
Country Status (2)
Country | Link |
---|---|
EP (1) | EP0883059A2 (ja) |
JP (1) | JP3156761B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9748721B2 (en) | 2013-12-26 | 2017-08-29 | Dai-Ichi Seiko Co., Ltd. | Method of fabricating connector terminals |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6421826B1 (en) * | 1999-11-05 | 2002-07-16 | Sun Microsystems, Inc. | Method and apparatus for performing prefetching at the function level |
US6427235B1 (en) | 1999-11-05 | 2002-07-30 | Sun Microsystems, Inc. | Method and apparatus for performing prefetching at the critical section level |
US6651245B1 (en) * | 2000-10-03 | 2003-11-18 | Sun Microsystems, Inc. | System and method for insertion of prefetch instructions by a compiler |
JP4934267B2 (ja) * | 2003-10-17 | 2012-05-16 | パナソニック株式会社 | コンパイラ装置 |
WO2008093399A1 (ja) | 2007-01-30 | 2008-08-07 | Fujitsu Limited | 情報処理システムおよび情報処理方法 |
JP2014112327A (ja) * | 2012-12-05 | 2014-06-19 | Fujitsu Ltd | 変換プログラム、変換装置及び変換方法 |
CN108228183B (zh) * | 2018-01-12 | 2022-07-12 | 北京三快在线科技有限公司 | 前端界面代码生成方法、装置、电子设备及存储介质 |
CN113127065B (zh) * | 2021-04-19 | 2022-07-08 | 之江实验室 | 一种基于纯缺失检测方法的存算一体程序划分方法及装置 |
CN115686522A (zh) * | 2021-07-31 | 2023-02-03 | 华为技术有限公司 | 一种程序源码的编译优化方法及相关产品 |
-
1997
- 1997-06-04 JP JP14648297A patent/JP3156761B2/ja not_active Expired - Fee Related
-
1998
- 1998-06-04 EP EP19980110237 patent/EP0883059A2/en not_active Withdrawn
Non-Patent Citations (1)
Title |
---|
S.Mcfarling,"Program OPtimization for Instruction Caches",Proceedings of the Third International Conference on Architectural Support for Programming Languages and Operating Systems,1989,p183−191 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9748721B2 (en) | 2013-12-26 | 2017-08-29 | Dai-Ichi Seiko Co., Ltd. | Method of fabricating connector terminals |
Also Published As
Publication number | Publication date |
---|---|
EP0883059A2 (en) | 1998-12-09 |
JPH10333916A (ja) | 1998-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5960198A (en) | Software profiler with runtime control to enable and disable instrumented executable | |
JP3707727B2 (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
US5901308A (en) | Software mechanism for reducing exceptions generated by speculatively scheduled instructions | |
US5797013A (en) | Intelligent loop unrolling | |
Suganuma et al. | A dynamic optimization framework for a Java just-in-time compiler | |
US5530964A (en) | Optimizing assembled code for execution using execution statistics collection, without inserting instructions in the code and reorganizing the code based on the statistics collected | |
US7571432B2 (en) | Compiler apparatus for optimizing high-level language programs using directives | |
Chen et al. | The effect of code expanding optimizations on instruction cache design | |
JP5473768B2 (ja) | マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム | |
US20040093591A1 (en) | Method and apparatus prefetching indexed array references | |
US20020066081A1 (en) | Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator | |
US7383402B2 (en) | Method and system for generating prefetch information for multi-block indirect memory access chains | |
WO2001093028A2 (en) | Marking memory elements based upon access information during speculative execution | |
JP2003029977A (ja) | コンピュータ装置、その例外処理プログラム及び変換プログラム、並びにコンパイル方法 | |
US5812854A (en) | Mechanism for integrating user-defined instructions with compiler-generated instructions and for optimizing the integrated instruction stream | |
US20080229028A1 (en) | Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization | |
JP3156761B2 (ja) | ノンブロッキングキャッシュ対応のコードスケジューリング方式及びそのプログラムを記録した記憶媒体 | |
JPH10293692A (ja) | 多重ループ向けデータプリフェッチ方法、プロセッサおよびプログラム生成方法 | |
Anderson et al. | Checked load: Architectural support for javascript type-checking on mobile processors | |
US20030088863A1 (en) | Method and apparatus for selecting references for prefetching in an optimizing compiler | |
US7383401B2 (en) | Method and system for identifying multi-block indirect memory access chains | |
Peterson | Architectural and compiler support for effective instruction prefetching: a cooperative approach | |
Chang et al. | Using predicated execution to improve the performance of a dynamically scheduled machine with speculative execution | |
EP1190318A1 (en) | Marking fields within objects with timestamps in order to improve efficiency | |
US7313787B2 (en) | Compiler and method for optimizing object codes for hierarchical memories |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |