JP4934267B2 - コンパイラ装置 - Google Patents

コンパイラ装置 Download PDF

Info

Publication number
JP4934267B2
JP4934267B2 JP2003357323A JP2003357323A JP4934267B2 JP 4934267 B2 JP4934267 B2 JP 4934267B2 JP 2003357323 A JP2003357323 A JP 2003357323A JP 2003357323 A JP2003357323 A JP 2003357323A JP 4934267 B2 JP4934267 B2 JP 4934267B2
Authority
JP
Japan
Prior art keywords
instruction
program
machine language
intermediate code
source program
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 - Lifetime
Application number
JP2003357323A
Other languages
English (en)
Other versions
JP2005122506A (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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co 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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2003357323A priority Critical patent/JP4934267B2/ja
Priority to US10/944,831 priority patent/US7571432B2/en
Priority to CNB2004100852686A priority patent/CN1302385C/zh
Publication of JP2005122506A publication Critical patent/JP2005122506A/ja
Application granted granted Critical
Publication of JP4934267B2 publication Critical patent/JP4934267B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

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

Description

本発明は、C言語等の高級言語で記述されたソースプログラムを機械語プログラムに変換するコンパイラ装置に関し、特に、コンパイラによる最適化についての指示に関する。
従来、高級言語で記述されたソースプログラムを機械語命令列にコンパイルする高級言語用コンパイラは各種提案されている(例えば、特許文献1参照。)。
このような高級言語で記述されたソースプログラムを機械語命令列にコンパイルする高級言語用コンパイラでは、キャッシュメモリ等のハードウェア構成を考慮して、実行速度の向上等を図るための機械語命令列の最適化を実現することができなかった。
このため、ハードウェア構成を考慮した機械語命令列を作成するためには、アセンブリ言語でプログラムを作成したり、ハードウェア構成を考慮したアルゴリズムを作成し、そのアルゴリズムに基づいてソースプログラムを作成したりしている。
特開2003−99269号公報
しかしながら、アセンブリ言語でプログラムを開発するには、開発工数が非常にかかるという課題がある。
また、アセンブリ言語で記述されたプログラムは移植性に乏しいため、資産性が低いという課題もある。
さらに、ハードウェアが大規模化、複雑化している今日においては、ハードウェアを考慮したアルゴリズムを人手で作成して性能をチューニングするのは非常に困難であるという課題もある。
本発明は、上述の課題を解決するためになされたもので、プログラムの開発工数がかからないコンパイラ装置を提供することを第1の目的とする。
また、プログラムの資産性が高いコンパイラ装置を提供することを第2の目的とする。
さらに、人手で性能をチューニングする必要のないコンパイラ装置を提供することを第3の目的とする。
上記目的を達成するために、本発明に係るコンパイラ装置は、高級言語で記述されたソースプログラムを機械語プログラムに翻訳するコンパイラ装置であって、生成する機械語プログラムを最適化する旨の指示を取得する指示取得手段と、前記ソースプログラムを解析するパーサー手段と、前記パーサー手段における解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換手段と、前記指示に従って、前記中間コードを最適化する最適化手段と、前記中間コードを前記機械語プログラムに変換するコード生成手段とを備え、前記機械語プログラムを実行するプロセッサは、キャッシュメモリを利用するプロセッサであり、前記指示取得手段は、前記ソースプログラムの中において、特定のループ処理で実行されるループの回数を当該ループ処理で処理される配列データのオブジェクトが所定の容量ごとに前記キャッシュメモリに配置されるようなループの回数に分割して1つのループ処理を構成するよう、前記特定のループ処理を複数のループ処理に分割する旨の指示を取得し、前記最適化手段は、前記指示取得手段によって取得された指示の対象となったループ処理を前記指示に従い複数のループ処理に分割する。
この構成によると、最適化のための指示に基づいて、中間コードの最適化が行なわれる。このため、アセンブリ言語でプログラムを開発しなくても、指示を与えるだけで、キャッシュメモリを効率よく利用可能な機械語プログラムを生成することができる。そのため、アセンブリ言語でプログラムを開発する場合に比べ、開発工数がかからない。また、ソースプログラムは高級言語で記述され、かつ上述のように指示を与えるだけで、キャッシュメモリを効率よく利用可能な機械語プログラムを生成することができる。このため、指示を様々に変えることにより、様々な最適化が行なわれる。このため、プログラムの資産性が向上する。さらに、人手で性能をチューニングする必要もなくなる。
ループ処理に含まれるオブジェクトがキャッシュメモリに一度に配置されるように、ループ分割が行なわれる。このため、大量のオブジェクトを一度に処理しようとするために、それらのオブジェクトをキャッシュメモリに一度に乗せることができないために起こるヒットミスを防ぐことができる。
さらに好ましくは、前記指示取得手段は、前記ソースプログラムの中において、特定のオブジェクトを、当該オブジェクト参照時までに前記キャッシュメモリに予め格納する旨の指示を取得し、前記最適化手段は、前記オブジェクトを当該オブジェクト参照時までに前記キャッシュメモリに予め格納させる。
この指示を行なうことにより、プログラム実行時に利用しようとするオブジェクトがキャッシュメモリに記憶されていないために起こるヒットミスを防ぐことができる。
さらに好ましくは、前記指示取得手段は、前記ソースプログラムの中において、特定のオブジェクトを前記キャッシュメモリのラインデータのサイズごとにグループ分けし、異なるグループに含まれるオブジェクトは前記キャッシュメモリの異なるセット番号のキャッシュエントリーに配置する旨の指示と、前記特定のオブジェクトの名前とを取得し、前記最適化手段は、前記特定のオブジェクトを前記キャッシュメモリのラインデータのサイズごとにグループ分けし、異なるグループに属するオブジェクト同士が前記キャッシュメモリの同じセット番号のキャッシュエントリーに配置されないようにする。
時間的に近いタイミングでアクセスされるオブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態によるヒットミスを防ぐことができる。
さらに好ましくは、前記キャッシュメモリに含まれる複数のキャッシュエントリーの各々は、前記キャッシュエントリーに格納されたオブジェクトの追い出しやすさを示す値を記憶するウィークフラグを有し、前記プロセッサが使用するメインメモリは、記憶されているオブジェクトが前記キャッシュメモリに配置されるとともに、当該配置の際に前記ウィークフラグに前記オブジェクトを追い出しやすくする値が設定されるウィーク空間と、記憶されているオブジェクトが前記キャッシュメモリに配置されるとともに、当該配置の際に前記ウィークフラグに前記オブジェクトを追い出しやすくする値が設定されないキャッシャブル空間とを有し、前記指示取得手段は、前記ソースプログラムの中において、特定のオブジェクトを前記ウィーク空間または前記キャッシャブル空間のいずれに配置するかを示す配置情報に基づいて、前記特定のオブジェクトを前記ウィーク空間または前記キャッシャブル空間に配置する指示と、前記特定のオブジェクトの名前と、前記配置情報とを取得し、前記最適化手段は、特定のオブジェクトを前記配置情報に従い前記ウィーク空間または前記キャッシャブル空間のいずれに配置させる。
オブジェクトを適切な空間に配置することにより、例えば、ウィーク空間を利用することにより、あまり利用されないオブジェクトにウィークビットを立て、優先的に追い出すようにすることもできる。これにより、オブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態によるヒットミスを防ぐことができる。
さらに好ましくは、前記指示取得手段は、前記ソースプログラムの中において、前記キャッシュメモリを制御するキャッシュメモリ制御手段の専用コマンドを前記キャッシュメモリ制御手段に実行させる指示を取得し、前記最適化手段は、前記指示に基づいて前記専用コマンドを前記キャッシュメモリ制御手段に実行させる。
キャッシュメモリ制御手段が実行する専用コマンドを指定できるようにすることにより、キャッシュメモリの細かな制御をユーザが指定することができ、キャッシュメモリにおけるヒットミスを防ぐことができる。
なお、本発明は、このような特徴的な手段を備えるコンパイラ装置として実現することができるだけでなく、コンパイラ装置に含まれる特徴的な手段をステップとするコンパイル方法として実現したり、コンパイラ装置が備える各手段としてコンピュータを機能させるためのプログラムとして実現したりすることもできる。そして、そのようなプログラムは、CD−ROM等の記録媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
アセンブリ言語でプログラムを開発する場合に比べ、開発工数がかからない。
また、プログラムの資産性が向上する。
さらに、人手で性能をチューニングする必要もなくなる。
さらにまた、オブジェクトをキャッシュメモリに一度に乗せることができないために起こるヒットミスを防ぐことができる。
また、プログラム実行時に利用しようとするオブジェクトがキャッシュメモリに記憶されていないために起こるヒットミスを防ぐことができる。
さらに、オブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態によるヒットミスを防ぐことができる。
図1は、本発明の実施の形態に係るコンパイルシステムがターゲットとするコンピュータのハードウェア構成の一部を示すブロック図である。コンピュータ10は、プロセッサ1と、メインメモリ2と、キャッシュメモリ3と、サブキャッシュメモリ4と、キャッシュ制御部5とを備えている。プロセッサ1は、機械語プログラムを実行する処理部であり、通常のプロセッサが有する機能に加えて、後述する専用レジスタ6(専用レジスタDPTEL)を有している。
メインメモリ2は、プロセッサ1で実行される機械語命令や各種データなどを記憶するメモリである。
キャッシュメモリ3は、4ウェイセットアソシアティブ方式に従い動作し、メインメモリ2よりも高速にデータの読み書きが可能なメモリである。なお、キャッシュメモリ3の記憶容量は、メインメモリ2のそれに比べて少ない。
サブキャッシュメモリ4は、ダイレクトマッピング方式に従い動作し、メインメモリ2よりも高速にデータの読み書きが可能なメモリである。なお、サブキャッシュメモリ4の記憶容量は、キャッシュメモリ3のそれに比べて少ない。
キャッシュ制御部5は、キャッシュメモリ3およびサブキャッシュメモリ4を制御するための処理部であり、後述する専用レジスタ7〜9(専用レジスタTACM、TACSZおよびTACSTAD)を有している。
図2は、キャッシュメモリ3のハードウェア構成を示すブロック図である。同図のように、キャッシュメモリ3は、4ウェイセットアソシアティブ方式のキャッシュメモリであり、アドレスレジスタ20と、デコーダ30と、4つのウェイ31a〜31d(以下ウェイ0〜3と略す)と、4つの比較器32a〜32dと、4つのアンド回路33a〜33dと、オア回路34と、セレクタ35と、デマルチプレクサ37とを備える。
アドレスレジスタ20は、メインメモリ2へのアクセスアドレスを保持するレジスタである。このアクセスアドレスは32ビットであるものとする。同図に示すように、アクセスアドレスは、最上位ビットから順に、21ビットのタグアドレスと、4ビットのセットインデックス(図中のSI)とを含む。ここで、タグアドレスはウェイにマッピングされるメモリ中の領域を指す。セットインデックス(SI)はウェイ0〜3に跨る複数セットの1つを示す。このセット数は、セットインデックス(SI)が4ビットなので16セットである。タグアドレスおよびセットインデックス(SI)で特定されるブロックは、リプレース単位であり、キャッシュメモリに格納されている場合はラインデータ又はラインとも呼ばれる。ラインデータのサイズは、セットインデックス(SI)よりも下位のアドレスビットで定まるサイズ、すなわち128バイトである。1ワードを4バイトとすると、1ラインデータは32ワードである。アドレスレジスタ20中の最下位から7ビットは、ウェイのアクセス時には無視される。
デコーダ30は、セットインデックス(SI)の4ビットをデコードし、4つのウェイ0〜3に跨る16セット中の1つを選択する。
4つのウェイ0〜3は、同じ構成を有し、合計4×2kバイトの容量を有する。ウェイ0は、16個のキャッシュエントリーを有する。
図3に1つのキャッシュエントリーにおける詳細なビット構成を示す。同図のように、1つのキャッシュエントリーは、バリッドフラグV、21ビットのタグ、128バイトのラインデータ、ウィークフラグWおよびダーティフラグDを保持する。バリッドフラグVは、そのキャッシュエントリーが有効か否かを示す。タグは21ビットのタグアドレスのコピーである。ラインデータは、タグアドレスおよびセットインデックス(SI)により特定されるブロック中の128バイトデータのコピーである。ダーティフラグDは、そのキャッシュエントリーに書き込みがあったか否か、つまりキャシュエントリー中にキャッシュされたデータが書き込みによりメモリ中のデータと異なるためメモリに書き戻すこと(ライトバックすること)が必要か否かを示す。ウィークフラグWは、キャッシュエントリーからの追い出し対象を示すフラグであり、キャッシュミスを起こした場合に、ウィークフラグWが1のキャッシュエントリーから優先的にデータが追い出される。
ウェイ1〜3についても、ウェイ0と同様である。セットインデックス(SI)の4ビットによってデコーダ30を介して選択される4ウェイに跨る4つのキャッシュエントリーは、「セット」と呼ばれる。
比較器32aは、アドレスレジスタ20中のタグアドレスと、セットインデックス(SI)により選択されたセットに含まれる4つのタグ中のウェイ0のタグとが一致するか否かを比較する。比較器32b〜32cについても、ウェイ31b〜31dに対応すること以外は同様である。
アンド回路33aは、バリッドフラグVと比較器32aの比較結果とが一致するか否かを比較する。この比較結果をh0をする。比較結果h0が1である場合は、アドレスレジスタ20中のタグアドレスおよびセットインデックス(SI)に対応するラインデータが存在すること、すなわちウェイ0においてヒットしたことを意味する。比較結果h0が0である場合は、ミスヒットしたことを意味する。アンド回路33b〜33dについても、ウェイ31b〜31dに対応すること以外は同様である。その比較結果h1〜h3は、ウェイ1〜3でヒットしたかミスヒットしたかを意味する。
オア回路34は、比較結果h0〜h3の論理和をとる。この論理和をhitとする。hitは、キャッシュメモリ3にヒットしたか否かを示す。
セレクタ35は、選択されたセットにおけるウェイ0〜3のラインデータのうち、ヒットしたウェイのラインデータを選択する。
デマルチプレクサ37は、キャッシュエントリーにデータを書き込む際に、ウェイ0〜3の1つに書き込みデータを出力する。
図4は、サブキャッシュメモリ4のハードウェア構成を示すブロック図である。同図のように、サブキャッシュメモリ4は、ダイレクトマッピング方式(1ウェイセットアソシアティブ方式)のキャッシュメモリであり、アドレスレジスタ44と、デコーダ40と、1つのウェイ41と、比較機42と、アンド回路43とを備える。
アドレスレジスタ44は、メインメモリ2へのアクセスアドレスを保持するレジスタである。このアクセスアドレスは32ビットであるものとする。同図に示すように、アクセスアドレスは、最上位ビットから順に、21ビットのタグアドレスと、1ビットのセットインデックス(図中のSI)とを含む。ここで、タグアドレスはウェイにマッピングされるメモリ中の領域を指す。ウェイ41のセット数は、セットインデックス(SI)が1ビットなので2セットである。タグアドレスおよびセットインデックス(SI)で特定されるブロックは、リプレース単位であり、キャッシュメモリに格納されている場合はラインデータ又はラインとも呼ばれる。ラインデータのサイズは、128バイトである。1ワードを4バイトとすると、1ラインデータは32ワードである。アドレスレジスタ20中の最下位から10ビットは、ウェイのアクセス時には無視される。
デコーダ40は、セットインデックス(SI)の1ビットをデコードし、2セット中の1つを選択する。1つのキャッシュエントリーは、図3に示したものと同様である。
比較器42は、アドレスレジスタ44中のタグアドレスと、セットインデックス(SI)により選択されたセットに含まれるタグとが一致するか否かを比較する。
アンド回路43は、バリッドフラグVと比較器42の比較結果とが一致するか否かを比較する。この比較結果をhitとする。比較結果hitが1である場合は、アドレスレジスタ44中のタグアドレスおよびセットインデックス(SI)に対応するラインデータが存在すること、すなわちヒットしたことを意味する。比較結果hitが0である場合は、ミスヒットしたことを意味する。
図5は、メインメモリ2に含まれる記憶領域の種類を説明するための図である。当該記憶領域は、キャッシャブル空間と、ウィーク空間と、サブキャッシュ空間と、アンキャッシャブル空間との4種類の記憶領域を有する。キャッシャブル空間およびウィーク空間に配置された命令またはデータは、キャッシュメモリ3との間で読み書きされる。特に、ウィーク空間に配置されたデータは、キャッシュメモリ3に配置される際にウィークビットWに1が設定される。サブキャッシュ空間に配置された命令またはデータはサブキャッシュメモリ4との間で読み書きされる。アンキャッシャブル空間に配置された命令またはデータは、キャッシュメモリ3およびサブキャッシュメモリ4には配置されずプロセッサ1との間で直接やり取りされる。
図6は、コンピュータ10のプロセッサ1において実行される機械語プログラムを開発するプログラム開発システム50の構成を示すブロック図である。プログラム開発システム50は、デバッガ52と、シミュレータ54と、プロファイラ56と、コンパイラ58とを備えている。
コンパイラ58は、ソースプログラムおよびプロファイラ56より出力されるプロファイル情報64を読み込み、機械語プログラムへ変換するためのプログラムであり、機械語命令を最適化するための最適化部68をその内部に備えている。コンパイラ58の詳細については、後に詳述する。
デバッガ52は、コンパイラ58におけるソースプログラムのコンパイル時に見つかったバグの位置や原因を特定するためのプログラムである。シミュレータ54は、機械語プログラムを仮想的に実行するプログラムであり、実行結果は実行ログ情報62として出力される。なお、シミュレータ54は、キャッシュメモリ3およびサブキャッシュメモリ4のヒットおよびミスヒット等のシミュレート結果を実行ログ情報62に含めて出力するキャッシュメモリ用シミュレータ60を内部に備えている。
プロファイラ56は、実行ログ情報62を解析するとともに、コンパイラ58における最適化等のヒント情報となるプロファイル情報64を出力するプログラムである。
図7は、コンパイラ58の構成を示す機能ブロック図である。このコンパイラはC言語やC++言語等の高級言語で記述されたソースプログラム72を、上述のプロセッサ1をターゲットプロセッサとする機械語プログラム92に変換するクロスコンパイラであり、パーソナルコンピュータ等のコンピュータ上で実行されるプログラムによって実現され、大きく分けて、パーサー部76と、中間コード変換部78と、最適化部68と、コード生成部90とから構成される。
なお、パーサー部76は、コンパイルの対象となるソースプログラム72に対して、予約語(キーワード)等を抽出して字句解析する前置処理部である。
中間コード変換部78は、パーサー部76から渡されたソースプログラム72の各ステートメントを一定規則に基づいて中間コードに変換する処理部である。ここで、中間コードは、典型的には、関数呼び出しの形式で表現されるコード(例えば、「+(int a, int b)」を示すコード;「整数aに整数bを加算する」ことを示す。)である。ただし、中間コードには、このような関数呼び出し形式のコードだけでなく、プロセッサ1の機械語命令も含まれる。中間コード変換部78は、中間コードを生成する際に、プロファイル情報64を参照して、最適な中間コードを生成する。
最適化部68は、中間コード変換部78より出力された中間コードについて、命令結合、冗長除去、命令並べ替え、レジスタ割り付け等の処理を行なうことにより、実行速度の向上やコードサイズの削減等を行なう処理部であり、通常の最適化処理に加え、本コンパイラ58特有の最適化を行なう処理部(タイリング部84、プリフェッチ命令挿入部86、配置セット情報設定部87、キャッシュコマンド挿入部88)を有する。タイリング部84、プリフェッチ命令挿入部86、配置セット情報設定部87、キャッシュコマンド挿入部88の実行する処理については後に詳述する。なお、最適化部68は、キャッシュメモリ3のキャッシュミスに関する情報など、ユーザがソースプログラム72を再作成する際のヒントとなるチューニングヒント情報94を合わせて出力する。
コード生成部90は、最適化部68から出力された中間コードに対して、内部に保持する変換テーブル等を参照することで、全てのコードを機械語命令に置き換えることで、機械語プログラム92を生成する。
コンパイラ58では、特に、キャッシュメモリ3におけるキャッシュミスを削減することを狙いとしている。キャッシュミスは、(1)初期ミス、(2)容量性ミスおよび(3)競合性ミスの3つに大きく分けることができる。「初期ミス」とは、プログラム実行時に利用しようとするオブジェクトがキャッシュメモリ3に記憶されていないために起こるヒットミスを指す。「容量性ミス」とは、大量のオブジェクトを一度に処理しようとするために、それらのオブジェクトをキャッシュメモリ3に一度に乗せることができないために起こるヒットミスを指す。「競合性ミス」とは、キャッシュメモリ3中のキャッシュエントリーを異なるオブジェクトが同時に使用しようとして、互いにキャッシュエントリーからの追い出し合いを行なうことにより発生するヒットミスを指す。
次に、以上のように構成されたコンパイラ58の特徴的な動作について、具体的な例を示しながら説明する。
(1)タイリング処理
タイリング処理とは、ループ処理において、容量性ミスが生じている場合に、1つのループを複数のループに分割することにより、一度に処理されるオブジェクトの容量をキャッシュメモリ3の容量以下に抑える手法である。このタイリング処理は、タイリング部84において実行される。
図8は、タイリング処理を説明するための図である。
図8(a)および図8(b)は、タイリング処理の実行を指定するためのプラグマの一例を示す図である。なお、「プラグマ(又は、プラグマ指令)」とは、ソースプログラム72中にユーザが任意に指定(配置)することができるコンパイラ58への指示であり、「#pragma」で始まる文字列である。
図8(a)で示されるプラグマ指令は、ループ処理で使用されるオブジェクトの容量が一定(NUMで指定されたバイト容量)となるようなタイリング処理の実行を指定する。なお、容量NUMを指定しなかった場合には、予め定められた(デフォルトの)容量となるようなタイリング処理の実行の指定となる。
図8(b)で示されるプラグマ指令は、ループ処理のループ回数が一定(NUMで指定された回数)となるようなタイリング処理の実行を指定する。なお、回数NUMを指定しなかった場合には、デフォルトの回数となるようなタイリング処理の実行の指定となる。
なお、上述のプラグマ指令では、プラグマ指令の直後に記載されたループ処理が処理の対象となる。
図8(c)は、プラグマ指令を含まないループ処理の一例を示す図である。図8(d)は、このループ処理におけるループカウンタの値の変化を模式的に示す図である。図8(d)に示すように、このループ処理では、ループカウンタiが1ずつ増加するたびに、ループカウンタjが0から999まで1ずつ増加する。したがって、オブジェクトcがメインメモリ2のキャッシャブル空間またはウィーク空間に配置されている場合には、オブジェクトc(1000個の配列要素)を一度にキャッシュメモリ3に配置しようとし、容量性ミスを発生させてしまう。
このため、図8(e)に示すように、ソースプログラム72の2番目のループ処理の直前に「#pragma _loop_tiling_times=100」というプラグマ指令を挿入することにより、図8(c)に示すソースプログラム72が図8(f)に示すようなソースプログラム72に変換される。すなわち、ループカウンタjを0から999まで1ずつ1000回増加させる代わりに、ループカウンタkを100回増加させる処理を10回ループさせる処理に変換される。図8(g)は、変換後のループカウンタの値の変化を模式的に示す図である。図8(g)に示すように、ループカウンタkを100回ずつ増加させる処理を10回繰返す。これにより、キャッシュメモリ3に一度に配置されるオブジェクトを配列cの100個の要素に減らすことができ、容量性ミスの発生を防ぐことができる。なお、タイリング処理は、上述のようにタイリング部84が行なっている。このため、図8(e)に示すソースプログラム72から図8(f)に示すソースプログラム72への変換は、実際には中間コード形式において実行される。
なお、プラグマ指令によれば、キャッシュメモリ3の容量等のハードウェア構成が変更になった場合であっても、容量NUMまたは回数NUMの値を変えて、再コンパイルするだけでよい。このため、ソースプログラムの資産性を向上させることが可能である。
なお、タイリング部84に、容量性ミスが発生していないかどうかをチェックさせるようにしてもよい。図9は、容量性ミス発生のチェック処理を説明するための図である。たとえば、容量性ミスが発生しているか否かの情報をチューニングヒント情報94として出力させるためのプラグマを図9(a)のように定義し、このプラグマをソースプログラム72のチェックしたいループの直前に記載することにより、指定されたループに対して容量性ミスが発生しているか否かの情報がチューニングヒント情報94として出力される。
図9(b)は、ループ処理を含むソースプログラム72の一例を示す図であり、図9(c)は、図9(b)に示したソースプログラム72に含まれる2つのループの直前に図9(a)に示したプラグマ指令を挿入したソースプログラム72の一例である。図9(d)に示すように、図9(c)に示したソースプログラムをコンパイルすることにより、2つのループ処理において、容量性ミスが発生しているか否かの情報がチューニングヒント情報94に出力される。ユーザは、出力されたチューニングヒント情報94を参照することにより、容量性ミスが発生しているか否かを知ることができ、図8(a)または図8(b)に示したプラグマ指令をソースプログラム72中に挿入することにより、タイリング処理を実行させ、容量性ミスを防ぐことができる。
なお、図8(a)または図8(b)に示したプラグマ指令と図9(a)に示したプラグマ指令とを同じループに対して同時に指定することも可能である。
なお、図9(a)に示したプラグマ指令をループの直前に挿入することにより、タイリング部84が、容量性ミスが発生しているか否かを調べるとともに、容量性ミスが発生しないように、自動的にタイリング処理を実行するようにしてもよい。
(2)プリフェッチ命令挿入処理
プリフェッチ命令挿入処理とは、メインメモリ2に記憶された指定された領域のオブジェクトを予めキャッシュメモリ3にプリフェッチするための命令を、中間コードに挿入するための処理である。このプリフェッチ層命令挿入処理は、プリフェッチ命令挿入部86において実行される。
図10および図11は、プリフェッチ命令挿入処理の指定方法を説明するための図である。図10(a)〜図10(d)は、特定の変数に対するプリフェッチ命令挿入処理の指定の仕方を示している。
図10(a)および図10(b)は、プラグマ指令によるプリフェッチ命令挿入処理の指定を示しており、指定した変数名の値を予めキャッシュメモリ3にプリフェッチする命令の挿入指示である。なお、図10(b)に示すようにサイクル数を指定した場合には、指定した変数が参照されるよりも当該サイクル数だけ前にプリフェッチ命令が挿入される。図10(a)に示すようにサイクル数が指定されなかった場合には、指定された変数が参照されるよりも予め定められたサイクル数(デフォルトサイクル数)だけ前にプリフェッチ命令が挿入される。すなわち、図10(e)に示すように、例えば、実際に変数aがアクセスされるよりも指定サイクル数またはデフォルトサイクル数だけ前に変数aをプリフェッチするプリフェッチ命令が挿入される。
図10(c)および図10(d)は、組み込み関数によるプリフェッチ命令挿入処理の指定を示しており、アドレスとサイズを引数することにより、当該アドレスをスタートアドレスとするメインメモリ2中の当該サイズで指定される領域の値を予めキャッシュメモリ3にプリフェッチする命令の挿入指示である。なお、図10(d)に示すようにサイクル数を指定した場合には、図10(b)のプラグマ指令と同様の処理が行なわれ、図10(c)に示すようにサイクル数を指定しなかった場合には、図10(a)のプラグマ指令と同様の処理が行なわれる。
図11(a)および図11(b)は、プラグマ指令によるループ内の配列に対するプリフェッチ命令挿入処理の指定の仕方を示している。プラグマ指令の直後に記載されたループ処理が処理の対象となる。図11(b)に示すように、サイクル数を指定した場合には、キャッシュメモリ3のレイテンシを考慮して、実際に配列の要素が参照されるよりも、指定されたサイクル数だけ前に当該要素をプリフェッチするような命令が挿入される。図11(a)に示すように、サイクル数が指定されなかった場合には、デフォルトサイクル数だけ前に当該要素をプリフェッチするような命令が挿入される。
図12は、ループ内の配列に対するプラグマ指令によるプリフェッチ命令挿入処理を説明するための図である。図12(a)に示すようなソースプログラム72のループ処理において、図12(b)に示すように配列aをプリフェッチするプラグマを記載した場合には、図12(c)に示すようにプリフェッチ命令挿入コマンドdpref()が挿入される。「dpref(&a[0])」および「dpref(&a[4])」が実行されることにより、ループカウンタiがi=0およびi=1のときに参照される配列の値a[0]〜a[7]がキャッシュメモリ3にプリフェッチされる。その後、ループ処理が開始され、「dpref(&a[i+1])」を実行することにより、2回後のループ処理で使用される配列の要素がキャッシュメモリ3にプリフェッチされる。このように、ループ処理の繰り返し(イタレーション)を跨いで要素がプリフェッチされる。すなわち、配列の要素が参照されるイタレーションよりも前のイタレーションにおいて当該要素がプリフェッチされる。なお、実際には、プリフェッチ命令挿入部86は、中間コードに対してプリフェッチ命令を挿入する。
以上説明したような、プリフェッチ命令挿入処理を実行することにより、初期ミスを防ぐことができる。
なお、プロファイル情報64を利用してプリフェッチ命令を自動挿入するようにしてもよい。図13は、プロファイル情報64を利用したプリフェッチ命令挿入処理の指定方法を説明するための図である。
図13(a)は、コンパイルオプションによる指定方法である。コンパイル時にこのオプションが付いていた場合には、プロファイル情報64より初期ミスを起こしているオブジェクトが調べられ、当該オブジェクトをプリフェッチする命令が挿入される。なお、このコンパイルオプションでは、上述の指定方法と同様に、プリフェッチ命令を挿入する位置のサイクル数を指定することも可能である。
図13(b)〜図13(d)は、プラグマによる指定方法である。図13(e)に示されるように、図13(b)に示すプラグマと図13(c)に示すプラグマとは対となって使用され、「#pragma _prof_insert_dpref on」と「#pragma _prof_insert_dpref off」とで区切られた範囲について、プロファイル情報64に基づいてプリフェッチ命令が挿入される。
図13(d)に示すプラグマがソースプログラム72中で指定された場合には、それ以降の命令は、コンパイルオプションに従うことを示している。すなわち、図13(a)に示したコンパイルオプションが設定されている場合には、そのオプションに従い、プロファイル情報64に基づいてプリフェッチ命令が挿入されるが、コンパイルオプションが設定されていない場合には、プリフェッチ命令の挿入は行なわれない。なお、図13(b)〜(d)に示すプラグマは、組み込み関数として書いてもよい。
図13(f)および図13(g)は、組み込み関数による指定方法である。アドレスとサイズを引数することにより、当該アドレスをスタートアドレスとするメインメモリ2中の当該サイズで指定される領域が、初期ミスを起こしている場合には、当該領域の値を予めキャッシュメモリ3にプリフェッチする命令の挿入指示である。なお、図13(g)に示すように、上述の指定方法と同様に、プリフェッチ命令を挿入する位置のサイクル数を指定することも可能である。これらの指定は、プラグマ指令としてもよい。
以上説明したように、プリフェッチ命令を挿入することにより、キャッシュメモリ3のレイテンシを考慮して、特定のオブジェクトに対する初期ミスを防止することができる。特に、プロファイル情報64を考慮したプリフェッチ命令の挿入処理においては、例えばプリフェッチされる変数がアクセスされるよりも前に他の命令が無いような場合には、指定されたサイクル数またはデフォルトサイクル数を空けてプリフェッチ命令を挿入することができない。このため、そのような場合には、プリフェッチ命令を挿入しても無駄であるため、当該命令の挿入は行なわれない。また、すでにキャッシュメモリ3に格納されているオブジェクトについては、プリフェッチする必要がないため、その場合にもプリフェッチ命令の挿入は行なわれない。これらの情報は、プロファイル情報64を見ることにより分かる。
(3)データ配置指定処理
図14は、データ配置処理の概略を説明するための図である。図14(a)に示すように、ソースプログラムに含まれる変数のうち、時間的に近いタイミングでアクセスされる変数(例えば生存区間が重なり合う変数)のグループが3つあったとする(変数グループA〜C)。ここで、1つの変数グループに含まれるデータサイズは、キャッシュメモリ3のラインデータのサイズ、すなわち128バイトであるものとする。コンパイルシステムでは、これら3つの変数グループがキャッシュメモリ3に書込みされる際には、異なるセット番号のブロックに書き込まれるような機械語命令を生成する。例えば、変数グループA、BおよびCをキャッシュメモリ3のセット0、1および15のブロックにそれぞれ配置するものとすると、図14(b)に示されるように、変数グループA、BおよびCは、キャッシュメモリ3に書き込まれた場合にセット0、1および15のブロックに書き込まれるようなメインメモリ2の記憶領域に記憶される。このため、図14(c)に示されるように、変数グループA、BおよびCは、メインメモリ2からキャッシュメモリ3に書き込まれる際には、セット0、1および15のブロックにそれぞれ書き込まれることとなる。このようにすることにより、時間的に近いタイミングでアクセスされるオブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。よって、競合性ミスを低減させることができる。
図15は、データ配置の指定に関する方法を説明するための図である。図15(a)に示すプラグマによりオブジェクト名を並べて指定した場合には、これらのオブジェクトサイズの総和がラインデータのサイズ(128バイト)以下の場合には、キャッシュメモリ3の同一のセットにそれらのオブジェクトを配置するような最適化が行なわれる。128以上の場合には、128バイトごとにオブジェクトをグループ分けし、異なるグループのオブジェクトはキャッシュメモリ3の異なるセットに配置されるような最適化が行なわれる。
例えば、図16に示されるように、「#pragma _overlap_access_object a,b,c」というプラグマ指定により、整数型配列a[32]、b[32]およびc[32]が時間的に近いタイミングでアクセスされることがユーザにより明示的に示されている。配置セット情報設定部87は、このプラグマの指示により、配列a[32]、b[32]およびc[32]を1つのオブジェクト群とした場合に、これらを128バイトごとにグループ分けする。整数型変数は4バイトであるものとすると、配列a[32]、b[32]およびc[32]はそれぞれ128バイトである。このため、このオブジェクト群は、図17に示されるような3つのグループ(グループdata_a、data_bおよびdata_c)に分割され、グループdata_aには配列a[32]が含まれ、グループdata_bには配列b[32]が含まれ、グループdata_cには配列c[32]が含まれることとなる。
グループ分け処理の後、配置セット情報設定部87は、それぞれのグループに異なるセット番号が付す。例えば、グループdata_a、data_bおよびdata_cにはセット番号0、1および2がそれぞれ付されるものとする。
その後、配置セット情報設定部87は、設定されたセット番号のキャッシュメモリ3のブロックにそのグループのオブジェクトが配置されるよう中間コードを生成する。
図15(b)に示すプラグマによりオブジェクトが配置されるキャッシュメモリ3のセット番号を指定することも可能である。例えば、図18に示すように、ソースプログラム72中にプラグマ「#pragma _cache_set_number=0 i」、「#pragma _cache_set_number=1 j」および「#pragma _cache_set_number=2 k」が指定されている場合には、配列i、jおよびkはそれぞれキャッシュメモリ3のセット番号0、1および2のセットに配置されるような中間コードが生成される。
図15(c)に示すプラグマによると、オブジェクト名と番地とを指定することにより、配置セット情報設定部87は、当該オブジェクトをメインメモリ2の指定された番地に格納する中間コードを生成する。例えば、プロファイル情報64やチューニングヒント情報94によりオブジェクトを格納するとよい番地が予め分かっているような場合には、この指定方法を利用する。
図15(d)に示すコンパイルオプションによる指定を行なった場合には、配置セット情報設定部87は、プロファイル情報64に基づいて、生存区間の重なり合うオブジェクトが異なるキャッシュメモリ3のセットに配置されるように、オブジェクトのキャッシュメモリ3上のアドレスを決定し、当該アドレスにオブジェクトを配置するような中間コードを生成する。
以上のようなデータ配置指定処理により、オブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態を生じさせないようにすることができる。よって、競合性ミスを低減させることができる。
(4)メモリ空間指定処理
上述したようにメインメモリ2には4種類のメモリ空間(キャッシャブル空間、ウィーク空間、サブキャッシュ空間およびアンキャッシャブル空間)を有している。図19は、オブジェクトを特定の空間に配置するための指定方法を示す図である。上述のようにプロセッサ1は、専用レジスタ6(専用レジスタDPTEL)を有している。図20は、専用レジスタDPTELに格納される情報を示す図である。専用レジスタDPTELには、メインメモリ2のページアドレスと、サブキャッシュ空間であるかウィーク空間であるかを示すS/Wフラグとが記憶されている。なお、専用レジスタDPTELは4つ存在し、0番から3番まで番号が付けられているものとする。
図19(a)に示すプラグマがソースプログラム72中で指定されている場合には、配置セット情報設定部87は、指定された変数を、指定された番号の専用レジスタDPTELに含まれるページアドレスに配置する中間コードを生成する。なお、当該ページアドレスの種類は専用レジスタDPTELに含まれるS/Wフラグにより、サブキャッシュ空間であるかウィーク空間であるかが指定されている。例えば、S/Wフラグの値が1であればサブキャッシュ空間を指定し、0であればウィーク空間を指定するようにしてもよい。
図19(b)に示すコンパイルオプションがコンパイル時に指定されている場合には、配置セット情報設定部87は、プロファイル情報64に基づいて、メインメモリ2のサブキャッシュ空間、ウィーク空間またはアンキャッシャブル空間に配置すると有効な変数を当該空間に配置する中間コードを生成する。例えば、大きな配列を1回だけ参照するような場合には、当該配列はアクセス頻度が少ないため、サブキャッシュ空間に配置する中間コードを生成する。
図19(c)に示すプラグマがソースプログラム72中で指定されている場合には、配置セット情報設定部87は、プロファイル情報64に基づいて、プラグマで指定された変数を特定の空間に配置すると有効か否かを調べ、有効な場合には、当該空間に指定された変数を配置する中間コードを生成する。
このように、オブジェクトを適切な空間に配置することにより、競合性ミスを防ぐことができる。例えば、サブキャッシュ空間を利用することにより、キャッシュメモリ3で頻繁に使用されるオブジェクトを追い出したりすることがなくなる。また、ウィーク空間を利用することにより、あまり利用されないオブジェクトにウィークビットWを立て、優先的に追い出すようにすることもできる。
(5)キャッシュコマンド挿入処理
以下では、キャッシュ制御部5が実行する専用コマンドをソースプログラム72において指定するようにする組み込み関数について説明する。
図21は、組み込み関数の一覧を示す図である。
図21(a)に示される関数は、引数で指定されるメインメモリ2の領域を事前にキャッシュメモリ3に先読みする処理(以下、「fill処理」ともいう。)と、ライトバックが必要なラインデータをライトバックする処理(以下、「writeback処理」ともいう。)とをキャッシュ制御部5に実行させる関数である。なお、引数では、変数名(変数の先頭アドレス)またはアドレスと、当該アドレスからのサイズとによりメインメモリ2の領域が指定される。
図21(b)に示される関数は、fill処理と、ウィークフラグWに1を設定する処理(以下、「weaken処理」ともいう。)とをキャッシュ制御部5に実行させる関数である。
図21(c)に示される関数は、引数で指定されるメインメモリ2に対応するキャッシュエントリーを事前に確保するのみの処理(以下、「touch処理」ともいう。)と、writeback処理とをキャッシュ制御部5に実行させる関数である。
図21(d)に示される関数は、touch処理と、weaken処理とをキャッシュ制御部5に実行させる関数である。
図21(e)に示される関数は、writeback処理と、引数で指定されたメインメモリ2の領域に対応するキャッシュメモリ3のキャッシュエントリーを無効にする処理(以下、「invalidate処理」ともいう。)とをキャッシュ制御部5に実行させる関数である。
図21(f)に示される関数は、invalidate処理をキャッシュ制御部5に実行させる関数である。
図21(g)に示される関数は、touch処理をキャッシュ制御部5に実行させる関数である。
図21(h)に示される関数は、fill処理をキャッシュ制御部5に実行させる関数である。
図21(a)〜図21(h)に示される関数がソースプログラム72中に含まれる場合には、キャッシュコマンド挿入部88は、上述した処理をキャッシュ制御部5に実行させるための中間コードを生成する。
キャッシュ制御部5に専用コマンドを実行させるためには、キャッシュ制御部5の専用レジスタTACSTADに対象となるメインメモリ2の領域の開始アドレスを登録し、専用レジスタTACTSZに開始アドレスからのサイズを登録し、専用レジスタTACMにコマンドを登録すればよい。
したがって、キャッシュコマンド挿入部88は、例えば、図22に示すような中間コードを生成する。なお、この中間コードは、VLIW(Very Long Instruction Word)アーキテクチャを持つプロセッサ1を想定して記述されたものである。まず、コマンドが一旦汎用レジスタr0に書き込まれた後、専用レジスタTACMに書き込まれる。それと同時にサイズが汎用レジスタr1に書き込まれる。専用レジスタTACMへの書込みが成功した場合には、フラグC0に1が設定され、フラグC1に0が設定される。書込みが失敗した場合には、フラグC0に0が設定され、フラグC1に1が設定される。したがって、専用レジスタTACMへの書込みが成功した場合には、3行目および4行目のコマンドが実行され、専用レジスタTACSZおよび専用レジスタTACSTADにそれぞれサイズおよびスタートアドレスが設定される。専用レジスタTACMへの書込みが失敗した場合には5行目の処理が実行され、再度1行目から処理が実行される。
以上説明したように、キャッシュ制御部5が実行するコマンドをユーザが指定できるようにすることにより、キャッシュメモリ3の細かな制御をユーザが指定をすることができ、初期ミス、容量性ミスおよび競合性ミスを防止することができる。
なお、fill処理を実行する組み込み関数の場合には、プリフェッチ命令挿入処理の場合と同様に、指定サイクル数またはデフォルトサイクル数前にfill処理を実行するような枠組みを設けてもよい。
また、プロファイル情報64を確認することにより、キャッシュ制御部5が実行するコマンドが有効に機能しているか否かを調べるような組み込み関数を設けてもよい。図23は、図21に示した組み込み関数が有効に機能しているか否かを調べるための組み込み関数の一覧を示す図である。すなわち、図23(a)〜図23(h)に示した組み込み関数は、図21(a)〜図21(h)に示した組み込み関数と同じ処理をそれぞれ実行するとともに、各組み込み関数が有効に機能しているか否かをチューニングヒント情報94として、出力する。また、図23(a)〜図23(h)に示した組み込み関数は、自動的に無効なキャッシュコマンド(キャッシュ制御部5に実行させるための中間コード)を削除したり、当該中間コード配置位置を調整したりするようにしてもよい。ユーザは、出力されたチューニングヒント情報94を参照することにより、最適な組み込み関数をソースプログラム中に挿入することができ、キャッシュメモリ3を効率的に利用することができるようになる。
図24は、以上説明した(1)〜(5)の処理を実行する際に、コンパイラ58に対して各種情報の入出力を行なうための指定方法を説明するための図である。図24(a)は、コンパイラ58へキャッシュメモリ3に関する情報を入力させるためのコンパイルオプションであり、図24(b)に示すように記述することにより、使用される。なお、図24(c)は、キャッシュメモリ3に関する情報の一例を示しており、キャッシュメモリ3のサイズや、ラインデータのサイズ、キャッシュメモリ3のレイテンシのサイクル数などが示されている。
図24(d)は、コンパイラ58に入力されるプロファイル情報64のファイル名を指定するためのコンパイルオプションである。図24(e)は、コンパイラ58より出力されるチューニングヒント情報94の出力ファイル名を指定するためのコンパイルオプションである。
以上説明したように本実施の形態に係るコンパイルシステムによると、キャッシュメモリ3における初期ミス、容量性ミスおよび競合性ミスを防止することが各種指定方法により可能となる。
なお、本発明は上述の実施の形態には限定されない。例えば、上述したプラグマ指令によるコンパイラに対する指示を、組み込み関数またはコンパイルオプションを用いてすることができる場合には、そのような指示を行なってもよい。組み込み関数またはコンパイルオプションによるコンパイラに対する指示の場合も同様である。
本発明は、コンパイラに適用でき、特に、キャッシュメモリを利用するプロセッサをターゲットとするコンパイラ等に適用できる。
本発明の実施の形態に係るコンパイルシステムがターゲットとするコンピュータのハードウェア構成の一部を示すブロック図である。 キャッシュメモリのハードウェア構成を示すブロック図である。 キャッシュエントリーにおける詳細なビット構成を示す図である。 サブキャッシュメモリのハードウェア構成を示すブロック図である。 メインメモリに含まれる記憶領域の種類を説明するための図である。 機械語プログラムを開発するプログラム開発システムの構成を示すブロック図である。 コンパイラの構成を示す機能ブロック図である。 タイリング処理を説明するための図である。 容量性ミス発生のチェック処理を説明するための図である。 プリフェッチ命令挿入処理の指定方法を説明するための図である。 プリフェッチ命令挿入処理の指定方法を説明するための図である。 ループ内の配列に対するプラグマ指令によるプリフェッチ命令挿入処理を説明するための図である。 プロファイル情報を利用したプリフェッチ命令挿入処理の指定方法を説明するための図である。 データ配置処理の概略を説明するための図である。 データ配置の指定に関する方法を説明するための図である。 データ配置を指定するプラグマ指令を含むソースプログラムの一例を示す図である。 グループ分けされたオブジェクトの図である。 データ配置を指定するプラグマ指令を含むソースプログラムの一例を示す図である。 オブジェクトを特定の空間に配置するための指定方法を示す図である。 専用レジスタDPTELに格納される情報を示す図である。 組み込み関数の一覧を示す図である。 キャッシュコマンド挿入部により生成される中間コード一例を示す図である。 図21に示した組み込み関数が有効に機能しているか否かを調べるための組み込み関数の一覧を示す図である。 コンパイラに対して各種情報の入出力を行なうための指定方法を説明するための図である。
符号の説明
1 プロセッサ
2 メインメモリ
3 キャッシュメモリ
4 サブキャッシュメモリ
5 キャッシュ制御部
10 コンピュータ
50 プログラム開発システム
52 デバッガ
54 シミュレータ
56 プロファイラ
58 コンパイラ
60 キャッシュメモリ用シミュレータ
62 実行ログ情報
64 プロファイル情報
68 最適化部
72 ソースプログラム
76 パーサー部
78 中間コード変換部
84 タイリング部
86 プリフェッチ命令挿入部
87 配置セット情報設定部
88 キャッシュコマンド挿入部
90 コード生成部
92 機械語プログラム
94 チューニングヒント情報

Claims (6)

  1. 高級言語で記述されたソースプログラムを機械語プログラムに翻訳するコンパイラ装置であって、
    生成する機械語プログラムを最適化する旨の指示を取得する指示取得手段と、
    前記ソースプログラムを解析するパーサー手段と、
    前記パーサー手段における解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換手段と、
    前記指示に従って、前記中間コードを最適化する最適化手段と、
    前記中間コードを前記機械語プログラムに変換するコード生成手段とを備え、
    前記機械語プログラムを実行するプロセッサは、キャッシュメモリを利用するプロセッサであり、
    前記指示取得手段は、前記ソースプログラムの中において、特定のループ処理で実行されるループの回数を当該ループ処理で処理される配列データのオブジェクトが所定の容量ごとに前記キャッシュメモリに配置されるようなループの回数に分割して1つのループ処理を構成するよう、前記特定のループ処理を複数のループ処理に分割する旨の指示を取得し、
    前記最適化手段は、前記指示取得手段によって取得された指示の対象となったループ処理を前記指示に従い複数のループ処理に分割する
    ことを特徴とするコンパイラ装置。
  2. 高級言語で記述されたソースプログラムを機械語プログラムに翻訳するコンパイラ装置であって、
    生成する機械語プログラムを最適化する旨の指示を取得する指示取得手段と、
    前記ソースプログラムを解析するパーサー手段と、
    前記パーサー手段における解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換手段と、
    前記指示に従って、前記中間コードを最適化する最適化手段と、
    前記中間コードを前記機械語プログラムに変換するコード生成手段とを備え、
    前記機械語プログラムを実行するプロセッサは、キャッシュメモリを利用するプロセッサであり、
    前記指示取得手段は、前記ソースプログラムの中において、特定のループ処理で実行されるループの回数を当該ループ処理で処理される配列データのオブジェクトが指定された容量ごとに前記キャッシュメモリに配置されるようなループの回数に分割して1つのループ処理を構成するよう、前記特定のループ処理を複数のループ処理に分割する旨の指示を取得し、
    前記最適化手段は、前記指示取得手段によって取得された指示の対象となったループ処理を前記指示に従い複数のループ処理に分割する
    ことを特徴とするコンパイラ装置。
  3. 高級言語で記述されたソースプログラムを機械語プログラムに翻訳するコンパイラ装置であって、
    生成する機械語プログラムを最適化する旨の指示を取得する指示取得手段と、
    前記ソースプログラムを解析するパーサー手段と、
    前記パーサー手段における解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換手段と、
    前記指示に従って、前記中間コードを最適化する最適化手段と、
    前記中間コードを前記機械語プログラムに変換するコード生成手段とを備え、
    前記機械語プログラムを実行するプロセッサは、キャッシュメモリを利用するプロセッサであり、
    前記指示取得手段は、前記ソースプログラムの中において、特定のオブジェクトを、当該オブジェクト参照時までに前記キャッシュメモリに予め格納する旨の指示とサイクル数とを取得し、
    前記最適化手段は、前記オブジェクトを前記キャッシュメモリに予め格納させる命令を前記オブジェクト参照時より前記指示取得手段で取得されたサイクル数だけ前に実行させるように、当該命令を生成する
    ことを特徴とするコンパイラ装置。
  4. 高級言語で記述されたソースプログラムを機械語プログラムに翻訳するコンパイラ装置であって、
    生成する機械語プログラムを最適化する旨の指示を取得する指示取得手段と、
    前記ソースプログラムを解析するパーサー手段と、
    前記パーサー手段における解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換手段と、
    前記指示に従って、前記中間コードを最適化する最適化手段と、
    前記中間コードを前記機械語プログラムに変換するコード生成手段とを備え、
    前記機械語プログラムを実行するプロセッサは、キャッシュメモリを利用するプロセッサであり、
    前記指示取得手段は、前記ソースプログラムの中において、ループ処理内で使用される特定の配列を、当該配列の要素参照時までに前記キャッシュメモリに予め格納する旨の指示とサイクル数とを取得し、
    前記最適化手段は、前記配列の要素を前記キャッシュメモリに予め格納させる命令を当該要素参照時より前記指示取得手段で取得されたサイクル数だけ前に実行させるように、当該命令を生成する
    ことを特徴とするコンパイラ装置。
  5. 高級言語で記述されたソースプログラムを機械語プログラムに翻訳するコンパイラ装置であって、
    生成する機械語プログラムを最適化する旨の指示を取得する指示取得手段と、
    前記ソースプログラムを解析するパーサー手段と、
    前記パーサー手段における解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換手段と、
    前記指示に従って、前記中間コードを最適化する最適化手段と、
    前記中間コードを前記機械語プログラムに変換するコード生成手段とを備え、
    前記機械語プログラムを実行するプロセッサは、キャッシュメモリを利用するプロセッサであり、
    前記指示取得手段は、前記ソースプログラムを翻訳する旨の指示とともに、前記機械語プログラムの実行解析結果に基づいて前記キャッシュメモリへのヒットミスを起こしていると定められる特定のオブジェクトを、当該オブジェクト参照時までに前記キャッシュメモリに予め格納する旨のコンパイル時指示を取得し
    前記指示取得手段は、さらに、サイクル数を取得し、
    前記最適化手段は、前記特定のオブジェクトを前記キャッシュメモリに予め格納させる命令を当該オブジェクト参照時より前記サイクル数だけ前に実行させるように、当該命令を生成する
    ことを特徴とするコンパイラ装置。
  6. 請求項1〜5のいずれか1項に記載のコンパイラ装置の各手段としてコンピュータを機能させるためのプログラム。
JP2003357323A 2003-10-17 2003-10-17 コンパイラ装置 Expired - Lifetime JP4934267B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2003357323A JP4934267B2 (ja) 2003-10-17 2003-10-17 コンパイラ装置
US10/944,831 US7571432B2 (en) 2003-10-17 2004-09-21 Compiler apparatus for optimizing high-level language programs using directives
CNB2004100852686A CN1302385C (zh) 2003-10-17 2004-10-18 编译装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003357323A JP4934267B2 (ja) 2003-10-17 2003-10-17 コンパイラ装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2010283836A Division JP5238797B2 (ja) 2010-12-20 2010-12-20 コンパイラ装置

Publications (2)

Publication Number Publication Date
JP2005122506A JP2005122506A (ja) 2005-05-12
JP4934267B2 true JP4934267B2 (ja) 2012-05-16

Family

ID=34509826

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003357323A Expired - Lifetime JP4934267B2 (ja) 2003-10-17 2003-10-17 コンパイラ装置

Country Status (3)

Country Link
US (1) US7571432B2 (ja)
JP (1) JP4934267B2 (ja)
CN (1) CN1302385C (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3847672B2 (ja) * 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
JP3973597B2 (ja) * 2003-05-14 2007-09-12 株式会社ソニー・コンピュータエンタテインメント プリフェッチ命令制御方法、プリフェッチ命令制御装置、キャッシュメモリ制御装置、オブジェクトコードの生成方法および装置
JP2006107338A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置
US7647514B2 (en) * 2005-08-05 2010-01-12 Fujitsu Limited Reducing power consumption at a cache
US20070083783A1 (en) * 2005-08-05 2007-04-12 Toru Ishihara Reducing power consumption at a cache
US8490065B2 (en) * 2005-10-13 2013-07-16 International Business Machines Corporation Method and apparatus for software-assisted data cache and prefetch control
JP4860240B2 (ja) * 2005-11-11 2012-01-25 パナソニック株式会社 翻訳方法および実行通知命令の埋め込み方法
CN1859591B (zh) * 2005-12-28 2010-06-02 华为技术有限公司 一种智能网服务应用方法和系统
US8266605B2 (en) * 2006-02-22 2012-09-11 Wind River Systems, Inc. Method and system for optimizing performance based on cache analysis
JP4784827B2 (ja) * 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US7836096B2 (en) * 2006-12-14 2010-11-16 International Business Machines Corporation Method and system using date/time mutation to return data to Java applications
JP4940996B2 (ja) * 2007-02-23 2012-05-30 富士通セミコンダクター株式会社 プロファイリング装置およびプロファイリングプログラム
US8886887B2 (en) * 2007-03-15 2014-11-11 International Business Machines Corporation Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization
JP5226328B2 (ja) * 2007-03-27 2013-07-03 パナソニック株式会社 コード変換装置
CN101335960B (zh) * 2007-06-26 2013-05-01 英华达(上海)电子有限公司 一种实现手机自动测试的方法和系统
US8359586B1 (en) * 2007-08-20 2013-01-22 The Mathworks, Inc. Code generation
US8122442B2 (en) * 2008-01-31 2012-02-21 Oracle America, Inc. Method and system for array optimization
US8561043B2 (en) * 2008-03-28 2013-10-15 International Business Machines Corporation Data transfer optimized software cache for irregular memory references
US8136103B2 (en) * 2008-03-28 2012-03-13 International Business Machines Corporation Combining static and dynamic compilation to remove delinquent loads
US8527974B2 (en) * 2008-03-28 2013-09-03 International Business Machines Corporation Data transfer optimized software cache for regular memory references
US8561044B2 (en) * 2008-10-07 2013-10-15 International Business Machines Corporation Optimized code generation targeting a high locality software cache
JP5576605B2 (ja) * 2008-12-25 2014-08-20 パナソニック株式会社 プログラム変換装置およびプログラム変換方法
US8701098B2 (en) * 2009-04-02 2014-04-15 International Business Machines Corporation Leveraging multicore systems when compiling procedures
JP5428476B2 (ja) * 2009-04-02 2014-02-26 富士通株式会社 プリフェッチ生成プログラムおよびコンパイラ装置
JP2011170439A (ja) * 2010-02-16 2011-09-01 Nec Corp コンパイラ、コンパイル方法、及びコンパイル実行プログラム
US9081586B2 (en) * 2011-11-29 2015-07-14 Futurewei Technologies, Inc. Systems and methods for customizing optimization/transformation/ processing strategies
US9134980B1 (en) * 2012-05-01 2015-09-15 Amazon Technologies, Inc. Compiler optimization in a computing environment
US9411715B2 (en) * 2012-12-12 2016-08-09 Nvidia Corporation System, method, and computer program product for optimizing the management of thread stack memory
CN104063258B (zh) * 2013-03-21 2017-05-03 国际商业机器公司 用于调试过程中的代码动态切换的方法和系统
JP6201788B2 (ja) * 2014-01-29 2017-09-27 富士通株式会社 ループ分割検出プログラム及びループ分割検出方法
KR102063966B1 (ko) * 2015-10-21 2020-01-09 엘에스산전 주식회사 Plc 명령어 컴파일 최적화 방법
JP6981087B2 (ja) * 2017-08-03 2021-12-15 富士通株式会社 情報処理装置、方法、及びプログラム
CN108021370B (zh) * 2017-12-26 2020-05-12 网易(杭州)网络有限公司 字节码的优化方法、装置、存储介质、处理器及终端
JP6890557B2 (ja) * 2018-01-17 2021-06-18 株式会社日立製作所 分析モデル作成システム、プログラミング装置および分析モデル作成方法
JP7335591B2 (ja) * 2019-07-22 2023-08-30 コネクトフリー株式会社 コンピューティングシステムおよび情報処理方法
CN112333482B (zh) * 2019-08-05 2023-01-06 广州虎牙科技有限公司 一种列表的处理方法、装置、设备和存储介质
US11080029B2 (en) 2019-08-28 2021-08-03 Red Hat, Inc. Configuration management through information and code injection at compile time
CN110865814B (zh) * 2019-10-30 2021-11-16 上海天数智芯半导体有限公司 一种支持异构计算核架构的编译器实现方法和系统
US11347486B2 (en) * 2020-03-27 2022-05-31 Advanced Micro Devices, Inc. Compiler-initiated tile replacement to enable hardware acceleration resources

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03184126A (ja) * 1989-12-13 1991-08-12 Hitachi Ltd コンパイラおよびプログラムの命令コードの配置方法
US5303377A (en) * 1990-03-27 1994-04-12 North American Philips Corporation Method for compiling computer instructions for increasing instruction cache efficiency
JPH04365133A (ja) * 1991-06-13 1992-12-17 Fujitsu Ltd プレロード命令実行装置及びプログラム修正装置
JPH05120029A (ja) * 1991-10-29 1993-05-18 Hitachi Ltd 最適化方法
JP2677482B2 (ja) * 1992-03-18 1997-11-17 富士通株式会社 計算機言語処理方法
JP3186867B2 (ja) * 1992-10-30 2001-07-11 株式会社日立製作所 キャッシュメモリ構成判別方法および計算機システム
US5452457A (en) * 1993-01-29 1995-09-19 International Business Machines Corporation Program construct and methods/systems for optimizing assembled code for execution
JP2636665B2 (ja) * 1993-02-26 1997-07-30 日本電気株式会社 実行情報採取装置
JP3417984B2 (ja) * 1993-09-10 2003-06-16 株式会社日立製作所 キャッシュ競合削減コンパイル方法
JPH0883213A (ja) * 1994-09-14 1996-03-26 Mitsubishi Electric Corp キャッシュメモリを含む記憶装置
JPH08166884A (ja) * 1994-10-13 1996-06-25 Hudson Soft Co Ltd コンパイラ方式
JPH08328870A (ja) * 1995-05-30 1996-12-13 Fujitsu Ltd コンパイル処理装置
EP0752645B1 (en) * 1995-07-07 2017-11-22 Oracle America, Inc. Tunable software control of Harvard architecture cache memories using prefetch instructions
JPH10285146A (ja) 1997-03-31 1998-10-23 Ando Electric Co Ltd ビット誤り測定回路
JP3156761B2 (ja) * 1997-06-04 2001-04-16 日本電気株式会社 ノンブロッキングキャッシュ対応のコードスケジューリング方式及びそのプログラムを記録した記憶媒体
JPH1173329A (ja) * 1997-06-24 1999-03-16 Matsushita Electric Ind Co Ltd ソフトウエア開発支援システム
JP3177950B2 (ja) * 1997-09-19 2001-06-18 日本電気株式会社 キャッシュ最適化処理方法およびキャッシュ最適化処理プログラムを記録した記録媒体
US6401187B1 (en) * 1997-12-10 2002-06-04 Hitachi, Ltd. Memory access optimizing method
JP3178403B2 (ja) * 1998-02-16 2001-06-18 日本電気株式会社 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP3913895B2 (ja) * 1998-04-17 2007-05-09 富士通株式会社 命令キャッシュ制御装置および記録媒体
KR100285734B1 (ko) * 1998-06-23 2001-04-02 윤종용 기지국시스템의다중섹터화장치
JP2000207224A (ja) * 1999-01-14 2000-07-28 Hitachi Ltd ソフトウェアプリフェッチ方法
US6341371B1 (en) * 1999-02-23 2002-01-22 International Business Machines Corporation System and method for optimizing program execution in a computer system
US6367071B1 (en) * 1999-03-02 2002-04-02 Lucent Technologies Inc. Compiler optimization techniques for exploiting a zero overhead loop mechanism
JP2002024029A (ja) * 2000-07-11 2002-01-25 Toshiba Corp コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
WO2002008911A1 (fr) * 2000-07-24 2002-01-31 Hitachi,Ltd Systeme de traitement de donnees
US20060206874A1 (en) * 2000-08-30 2006-09-14 Klein Dean A System and method for determining the cacheability of code at the time of compiling
JP2002099427A (ja) * 2000-09-25 2002-04-05 Toshiba Corp プログラムの開発方法、プログラムの開発システム及びマイクロプロセッサ
US6587920B2 (en) * 2000-11-30 2003-07-01 Mosaid Technologies Incorporated Method and apparatus for reducing latency in a memory system
JP2002182926A (ja) * 2000-12-12 2002-06-28 Hitachi Ltd コンパイル方法及びコンピュータ読み取り可能な記録媒体
US6499085B2 (en) * 2000-12-29 2002-12-24 Intel Corporation Method and system for servicing cache line in response to partial cache line request
JP2003099269A (ja) 2001-09-26 2003-04-04 Hitachi Ltd コンパイル方法、コンパイル装置およびコンパイルを行うプログラム
JP2004021425A (ja) * 2002-06-13 2004-01-22 Hitachi Ltd コンパイラにおけるメモリ配置方式
US7237064B2 (en) * 2003-10-10 2007-06-26 Intel Corporation Method and apparatus for feedback-based management of combined heap and compiled code caches

Also Published As

Publication number Publication date
CN1302385C (zh) 2007-02-28
CN1609805A (zh) 2005-04-27
US7571432B2 (en) 2009-08-04
JP2005122506A (ja) 2005-05-12
US20050086653A1 (en) 2005-04-21

Similar Documents

Publication Publication Date Title
JP4934267B2 (ja) コンパイラ装置
US5805863A (en) Memory pattern analysis tool for use in optimizing computer program code
JP2006260096A (ja) プログラム変換方法およびプログラム変換装置
US6970985B2 (en) Statically speculative memory accessing
US9798528B2 (en) Software solution for cooperative memory-side and processor-side data prefetching
US6721943B2 (en) Compile-time memory coalescing for dynamic arrays
JP4844971B2 (ja) インタープリタの最適化をプログラム・コード変換の間に実行する方法及び装置
US20040205740A1 (en) Method for collection of memory reference information and memory disambiguation
US20060206874A1 (en) System and method for determining the cacheability of code at the time of compiling
US7243195B2 (en) Software managed cache optimization system and method for multi-processing systems
US20050071572A1 (en) Computer system, compiler apparatus, and operating system
US8886887B2 (en) Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization
US20060048121A1 (en) Method and apparatus for a generic language interface to apply loop optimization transformations
JPH09330233A (ja) 最適目的コード生成方法
US8266605B2 (en) Method and system for optimizing performance based on cache analysis
CN111159062A (zh) 一种缓存数据的调度方法、装置、cpu芯片及服务器
US6260191B1 (en) User controlled relaxation of optimization constraints related to volatile memory references
JP4047788B2 (ja) コンパイラ装置およびリンカ装置
JP5238797B2 (ja) コンパイラ装置
US20110145503A1 (en) On-line optimization of software instruction cache
US7313787B2 (en) Compiler and method for optimizing object codes for hierarchical memories
Lee et al. A code isolator: Isolating code fragments from large programs
JP2014112327A (ja) 変換プログラム、変換装置及び変換方法
JPH08161169A (ja) Vliw方式の計算機システム及びvliwの解釈・実行方法
Besnard et al. A framework for automatic and parameterizable memoization

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060726

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090114

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100118

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100928

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101220

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20101224

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20110121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120116

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120220

R150 Certificate of patent or registration of utility model

Ref document number: 4934267

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20150224

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term