JP2005122481A - コンパイラ装置およびリンカ装置 - Google Patents

コンパイラ装置およびリンカ装置 Download PDF

Info

Publication number
JP2005122481A
JP2005122481A JP2003356921A JP2003356921A JP2005122481A JP 2005122481 A JP2005122481 A JP 2005122481A JP 2003356921 A JP2003356921 A JP 2003356921A JP 2003356921 A JP2003356921 A JP 2003356921A JP 2005122481 A JP2005122481 A JP 2005122481A
Authority
JP
Japan
Prior art keywords
objects
grouping
set number
cache memory
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.)
Granted
Application number
JP2003356921A
Other languages
English (en)
Other versions
JP4047788B2 (ja
Inventor
Yasuhiro Yamamoto
康博 山本
Hajime Ogawa
一 小川
Takehito Heiji
岳人 瓶子
Shohei Domoto
昌平 道本
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 Holdings Corp
Original Assignee
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2003356921A priority Critical patent/JP4047788B2/ja
Priority to US10/950,397 priority patent/US7689976B2/en
Priority to CNB2004100852667A priority patent/CN100365578C/zh
Publication of JP2005122481A publication Critical patent/JP2005122481A/ja
Application granted granted Critical
Publication of JP4047788B2 publication Critical patent/JP4047788B2/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

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)

Abstract

【課題】 キャッシュメモリのヒット率を向上させることができるコンパイラ装置を提供する。
【解決手段】 ソースプログラムに含まれる変数のうち、時間的に近いタイミングでアクセスされる変数のグループが3つあったとする(変数グループA〜C)。コンパイラ装置では、これら3つの変数グループがキャッシュメモリ3に書込みされる際には、異なるセット番号のブロックに書き込まれるような命令を生成する。例えば、変数グループA、BおよびCをキャッシュメモリ3のセット0、1および15のブロックにそれぞれ配置するものとすると、変数グループA、BおよびCは、キャッシュメモリ3に書き込まれた場合にセット0、1および15のブロックに書き込まれるようなメインメモリ2の記憶領域に記憶される。
【選択図】 図4

Description

本発明は、C++言語等の高級言語で記述されたソースプログラムを機械語で記述された実行プログラムに変換するコンパイラに関し、特に、キャッシュメモリを有するコンピュータ上で実行される実行プログラムに変換するコンパイラに関する。
従来、キャッシュメモリを有するコンピュータ用のコンパイラは種々提案されている。例えば、時間的に近いタイミングでアクセスされるデータ群(例えば、生存区間が重なり合うデータ群)をメインメモリ上で連続して配置するコンパイラが知られている(例えば、特許文献1参照。)。このように時間的に近いタイミングでアクセスされるデータ群をメインメモリ上で連続配置することにより、これらのデータ群がキャッシュメモリの同一ブロック上に一度に配置される。このため、キャッシュメモリのヒット率を向上させることができる。
特開平7−129410号公報
しかしながら、時間的に近いタイミングでアクセスされるデータ群を同一ブロック上に配置されるようにメインメモリ上のアドレスを決定すると、当該データ群のサイズがブロックサイズよりも大きい場合には、データ群に含まれるすべてのデータを1回で同一ブロックに書き込むことができない。このため、データ群に含まれるデータ同士でキャッシュメモリの同一ブロックにおける競合を発生させ、キャッシュミスが頻出する。この問題は、1つのセットに対して1つのブロックのみが対応付けられているダイレクトマッピング方式のキャッシュメモリにおいて顕著である。
本発明は、上述の課題を解決するためになされたもので、同一ブロックにおける競合を回避し、キャッシュメモリのヒット率を向上させることができるコンパイラ装置を提供することを目的とする。
上記目的を達成するために、本発明に係るコンパイラ装置は、キャッシュメモリを備えるコンピュータをターゲットとし、ソースプログラムをオブジェクトプログラムに変換するコンパイラ装置であって、ソースプログラムに含まれるオブジェクトをグループ分けするためのグループ分け情報を解析し、当該オブジェクトをグループ分けするグループ分け手段と、前記グループ分け手段によるグループ分け結果に基づいて、異なるグループに属するオブジェクト同士が前記キャッシュメモリの同じセット番号のブロックに配置されないようなオブジェクトプログラムを作成するオブジェクトプログラム作成手段とを備える。
この構成によると、例えば、グループ分け情報に生存区間が重なり合うオブジェクトを別のグループとするための情報が含まれていれば、その情報に基づいて、生存区間の重なり合うオブジェクトはキャッシュメモリの異なるセット番号に配置されることになる。このため、プログラムを実行した際に、生存区間が重なり合うオブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じなくなる。よって、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。なお、特許請求の範囲および本明細書中では、「オブジェクト」とは変数および配列などのデータを示すものとする。
また、前記グループ分け手段は、前記ソースプログラムに含まれるコンパイラ装置に対する指示を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けするようにしてもよい。好ましくは、前記指示は、指定されたオブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けするプラグマ指令であり、前記グループ分け手段は、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けする。
実行プログラムを実行した際、プラグマ指令に従いユーザが時間的に近いタイミングでアクセスされると考えるオブジェクトが、キャッシュメモリの異なるセット番号のブロックに配置される。このため、時間的に近いタイミングでアクセスされると考えられるオブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。よって、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
また、前記指示は、指定されたオブジェクトを独立したセット番号のブロックに配置させ、かつ、当該ブロックを独占的に使用させるプラグマ指令であり、前記グループ分け手段は、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクトを当該オブジェクトごとにグループ分けするグループ分け処理部と、グループ分けされたグループごとに異なるセット番号を設定するセット番号設定部とを有し、前記オブジェクトプログラム作成手段は、各グループに含まれるオブジェクトを前記キャッシュメモリの前記グループに対応するセット番号のブロックに配置し、かつ当該オブジェクトに当該ブロックを独占使用させるオブジェクトプログラムを作成するようにしてもよい。
プラグマ指令で指定されたオブジェクトにセット番号設定部で設定されたキャッシュのセット番号のブロックを独占させるようなオブジェクトプログラムが作成される。これにより、頻繁に使用されるオブジェクトにキャッシュメモリを独占使用させることができ、当該オブジェクトがキャッシュメモリから追い出されるのを防止し、高速に処理を実行させることが可能になる。
また、前記グループ分け手段は、前記ソースプログラムから生成される機械語命令列を実行した際に生成されるプロファイル情報を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けするようにしてもよい。好ましくは、前記プロファイル情報には、前記オブジェクトのアクセス頻度に関する情報が含まれ、前記グループ分け手段は、前記アクセス頻度が所定のしきい値以上のオブジェクトをそれぞれ独立したグループに分ける。
実行プログラムを実行した際、アクセス頻度の高いオブジェクトはそれぞれキャッシュメモリの異なるセット番号のブロックに配置される。このため、アクセス頻度の高いオブジェクトにキャッシュメモリのブロックを独占使用させることができ、頻繁に使用されるオブジェクトがキャッシュメモリから追い出されにくくすることにより、キャッシュミスを防止し、キャッシュメモリのヒット率を向上させることができる。
また、前記プロファイル情報には、前記オブジェクトの生存区間に関する情報が含まれ、前記グループ分け手段は、生存区間が重なり合うオブジェクトを異なるグループにグループ分けするようにしてもよい。
生存区間の重なり合いを有するオブジェクトはそれぞれ異なるセット番号のブロックに配置される。このため、同時期にアクセスされるオブジェクト同士で、同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。このため、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
さらに好ましくは、前記グループ分け手段は、前記ソースプログラムに基づいて、前記ソースプログラムに含まれるオブジェクトの生存区間の重なりを解析し、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする。
生存区間の重なり合いを有するオブジェクトはそれぞれ異なるセット番号のブロックに配置される。このため、同時期にアクセスされるオブジェクト同士で、同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。このため、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
なお、本発明は、このような特徴的なオブジェクトプログラムを生成するコンパイラ装置として実現することができるだけでなく、コンパイラ装置の特徴的な手段をステップとするコンパイル方法として実現したり、当該コンパイラ装置としてコンピュータを機能させるためのプログラムとして実現したりすることもできる。そして、そのようなプログラムは、CD−ROM等の記録媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
本発明によるとプログラム実行時にキャッシュメモリのヒット率を向上させることができる。
また、高速に処理を実行させることができる。
(実施の形態1)
(ハードウェア構成)
図1は、本発明の実施の形態1に係るコンパイラシステムがターゲットとするコンピュータのハードウェア構成の一部を示すブロック図である。コンピュータ10は、プロセッサ1と、メインメモリ2と、キャッシュメモリ3とを備えている。プロセッサ1およびメインメモリ2の構成は、通常のプロセッサ1およびメインメモリ2と同様であるため、その詳細な説明はここでは繰返さない。
図2は、キャッシュメモリ3のハードウェア構成を示すブロック図である。キャッシュメモリ3は、ダイレクトマッピング方式(1ウェイセットアソシアティブ方式)のキャッシュメモリであり、アドレスレジスタ20と、デコーダ30と、メモリ部31と、比較器32と、アンド回路33と、制御部38と、メモリI/F(インタフェース)部21とを備えている。
アドレスレジスタ20は、メインメモリ2へのアクセスアドレスを保持するレジスタである。このアクセスアドレスは32ビットであるものとする。同図に示すように、アクセスアドレスは、最上位ビットから順に、21ビットのタグアドレス、4ビットのセットインデックス(図中のSI)およびその他の7ビットの値を含む。ここで、タグアドレスはメインメモリ2とキャッシュメモリ3のメモリ部31との対応付けをするアドレスである。セットインデックス(SI)は、メモリ部31のセット(ライン)を指定するアドレスである。
メモリ部31は、セットインデックス(SI)のビット数が4ビットであるため、16個のセット(ここでは、フルアソシアティブ方式であるため16個のブロック)を有する。図3は、あるブロックにおけるビット構成を示す図である。同図に示すように、1つのブロックには、バリッドフラグV、21ビットのタグ、128バイトのラインデータ、およびダーティフラグDが含まれる。
バリッドフラグVは、そのブロックが有効か否かを示す。タグは21ビットのタグアドレスのコピーである。ラインデータは、アドレスレジスタ20に保持されたアドレスを開始アドレスとするメインメモリ2中の128バイトデータのコピーである。ダーティフラグDは、そのブロックに書き込みがあったか否か、すなわち当該ブロック中にキャッシュされたラインデータが、書き込みによりメインメモリ2中のデータと異なるためメインメモリ2に書き戻す必要があるか否かを示す。
ここで、タグアドレスはメモリ部31にマッピングされるラインデータの領域(そのサイズは、セット数×ラインデータのサイズである)を示す。この領域のサイズは、タグアドレスよりも下位の10ビットのアドレスで定まるサイズ、すなわち2kバイトである。また、セットインデックス(SI)は16個のセットのうちの1つを指す。タグアドレスおよびセットインデックス(SI)で特定されるセットは、リプレースの単位である。ラインデータのサイズは、セットインデックス(SI)よりも下位のアドレスビットで定まるサイズ、すなわち128バイトである。1ワードを4バイトとすると、1ラインデータは32ワードである。
図2に示されるデコーダ30は、セットインデックス(SI)の4ビットをデコードし、メモリ部31の16セット中の1つのセットを選択する。
比較器32は、アドレスレジスタ20中のタグアドレスと、セットインデックス(SI)により選択されたセットに含まれるタグとが一致するか否かを比較する。
アンド回路33は、バリッドフラグ(V)と比較器32の比較結果とが一致するか否かを比較する。比較結果が1である場合は、アドレスレジスタ20中のタグアドレスおよびセットインデックス(SI)に対応するラインデータが存在することを意味する。比較結果が0である場合は、ミスヒットしたことを意味する。
制御部38は、キャッシュメモリ3の全体の制御を行う。
(データの配置方法の概略説明)
図4は、本実施の形態に係るコンパイラシステムによるソースプログラム中のデータの配置方法の概略を説明するための図である。図4(a)に示すように、ソースプログラムに含まれる変数のうち、時間的に近いタイミングでアクセスされる変数(オブジェクト)のグループが3つあったとする(変数グループA〜C)。ここで、1つの変数グループに含まれるデータサイズは、キャッシュメモリ3のラインデータのサイズ、すなわち128バイトであるものとする。コンパイラシステムでは、これら3つの変数グループがキャッシュメモリ3に書込みされる際には、異なるセット番号のブロックに書き込まれるような機械語命令を生成する。例えば、変数グループA、BおよびCをキャッシュメモリ3のセット0、1および15のブロックにそれぞれ配置するものとすると、図4(b)に示されるように、変数グループA、BおよびCは、キャッシュメモリ3に書き込まれた場合にセット0、1および15のブロックに書き込まれるようなメインメモリ2の記憶領域に記憶される。このため、図4(c)に示されるように、変数グループA、BおよびCは、メインメモリ2からキャッシュメモリ3に書き込まれる際には、セット0、1および15のブロックにそれぞれ書き込まれることとなる。
(コンパイラシステム)
図5は、本実施の形態に係るコンパイラシステムの構成を示す機能ブロック図である。コンパイラシステム40は、ソースプログラム44を、図1に示したコンピュータ10で実行される機械語で記述された実行プログラム58に変換するシステムであり、コンパイラ部46と、アセンブラ部50と、リンカ部54と、シミュレータ部60と、プロファイラ部64とを備えている。各装置は、コンピュータ10のプロセッサ1上で動作するプログラムとして実現可能である。ただし、コンパイラシステム40は、コンピュータ10をターゲットとし、それ以外のコンピュータで実行されるクロスコンパイラシステムであってもよい。
コンパイラ部46は、C++言語等の高級言語で記述されたソースプログラム44と、キャッシュメモリ3に関するパラメータ情報(例えば、セット数や、ラインデータのサイズ等)からなるキャッシュパラメータ42と、実行プログラム58実行時の解析結果を示すプロファイルデータ66とを入力として受け、それらのデータに基づいてソースプログラム44をアセンブリ言語で記述されたアセンブラファイル48に変換する。
アセンブラ部50は、アセンブリ言語で記述されたアセンブラファイル48を機械語に置き換えたオブジェクトファイル52を作成する。
リンカ部54は、1つ以上のオブジェクトファイル52(図中では1つのオブジェクトファイル52のみを記述)を結合して実行形式の実行プログラム58を作成する。なお、リンカ部54にはアドレス設定部56が設けられており、時間的に近いタイミングでアクセスされるオブジェクト群(データ群または命令群)がキャッシュメモリ3の異なるセット番号のブロックに配置されるように、オブジェクト群が記憶されるメインメモリ2のアドレスが決定される。
シミュレータ部60は、実行プログラム58を仮想的に実行し、実行ログ62を出力する。
プロファイラ部64は、実行ログ62を解析することにより、変数のアクセス頻度や、変数の生存区間など最適な実行プログラム58を得るためのヒントとなるプロファイルデータ66を作成する。
(コンパイラ部)
図6は、コンパイラ部46の構成を示す機能ブロック図である。本実施の形態に係るコンパイラ部46は、キャッシュパラメータ42およびソースプログラム44に基づいて、ソースプログラム44をアセンブラファイル48に変換する処理部であり、パーサー部72と、アセンブラコード変換部76とを備えている。
パーサー部72は、コンパイルの対象となるソースプログラム44に対して、予約語(キーワード)等を抽出して字句解析する前置処理部であり、通常のコンパイラが備える解析機能に加えて、プラグマ指令を解析するプラグマ解析部74を有する。
なお、「プラグマ(又は、プラグマ指令)」とは、ソースプログラム44中にユーザが任意に指定(配置)することができるコンパイラ部46への指示であり、「#pragma」で始まる文字列である。
アセンブラコード変換部76は、パーサー部72から渡されたソースプログラム44の各ステートメントを中間コードに変換した後、アセンブリ言語のコードに変換し、アセンブラファイル48を出力する処理部であり、通常のコンパイラが備える変換機能に加えて、プラグマ解析部74で解析されたプラグマに応じて指定されたオブジェクトがキャッシュメモリ3の適切なセット番号のブロックに配置されるようなアセンブラコードを作成する配置セット情報設定部78を有する。
ここで、プラグマの種類としては、以下に示す3種類のプラグマが存在するものとする。
(1)#pragma _overlap_access_object a,b,c
(2)#pragma _cache_set_number=n a
ただし、nはセット番号(0〜15)
(3)#pragma _cache_set_monopoly a,b
(1)番目のプラグマは、オブジェクトa,bおよびcが時間的に近いタイミングでアクセスされることを示す。なお、オブジェクトの数は、1つ以上であればいくつであってもよい。このプラグマの意味については後述する。(2)番目のプラグマは、オブジェクトaをキャッシュメモリ3のn番目のセット番号のブロックに配置することを指定するためのものである。(3)番目のプラグマは、オブジェクトaおよびbをキャッシュメモリ3の別のセット番号のブロックに配置するとともに、かつ、それらのブロックをオブジェクトaおよびbに独占させる、すなわち、それらのブロックにはオブジェクトaおよびb以外のオブジェクトを配置させないことを指示するためのものである。
図7は、図6に示したプラグマ解析部74および配置セット情報設定部78が実行する処理のフローチャートである。
プラグマ解析部74は、ソースプログラム44に記述されたプラグマの種類を解析する(S1)。プラグマが上述の(1)番目のプラグマの場合には(S1で_overlap_access_object)、「#pragma _overlap_access_object」の次に指定されたオブジェクト群をキャッシュメモリ3の1セットのラインデータのサイズ(すなわち128バイト)以下となるように、グループ分けを行なう(S2)。以下にグループ分け処理(S2)をより具体的に説明する。
図8は、(1)番目のプラグマが記述されたソースプログラムの一例を示す図である。「#pragma _overlap_access_object a,b,c」というプラグマ指定により、整数型配列a[32]、b[32]およびc[32]が時間的に近いタイミングでアクセスされることがユーザにより明示的に示されている。配置セット情報設定部78は、このプラグマの指示により、上述のグループ分け処理(S2)を行なう。すなわち、配列a[32]、b[32]およびc[32]を1つのオブジェクト群とした場合に、これらを128バイトごとにグループ分けする。整数型変数は4バイトであるものとすると、配列a[32]、b[32]およびc[32]はそれぞれ128バイトである。このため、このオブジェクト群は、図9に示されるような3つのグループ(グループdata_a、data_bおよびdata_c)に分割され、グループdata_aには配列a[32]が含まれ、グループdata_bには配列b[32]が含まれ、グループdata_cには配列c[32]が含まれることとなる。
グループ分け処理(S2)の後、配置セット情報設定部78は、それぞれのグループに異なるセット番号が付す(図7のS3)。例えば、グループdata_a、data_bおよびdata_cにはセット番号0、1および2がそれぞれ付されるものとする。
その後、配置セット情報設定部78は、グループ番号設定処理(S3)で設定されたセット番号のキャッシュメモリ3のブロックにそのグループのオブジェクトが配置されるようなアセンブラコードを作成する(S4)。
図10は、図8に示したソースコードより作成されたアセンブラコードの一例を示す図である。最初の3行は、グループdata_aに含まれるオブジェクトがキャッシュメモリ3の0番目のセットに配置されるようなメインメモリ2の記憶領域に、当該オブジェクトを格納することを示しており、次の3行は、グループdata_bに含まれるオブジェクトがキャッシュメモリ3の1番目のセットに配置されるようなメインメモリ2の記憶領域に、当該オブジェクトを格納することを示しており、最後の3行はグループdata_cに含まれるオブジェクトがキャッシュメモリ3の2番目のセットに配置されるようなメインメモリ2の記憶領域に、当該オブジェクトを格納することを示している。
最初の3行について説明すると、1行目は、コマンド「SECTION」がグループの区切りであることを示しており、グループ名が「data_a」であることを示している。2行目は、3行目に示されるオブジェクトがキャッシュメモリ3の0番目のセットに配置されるようなメインメモリ2の記憶領域に、当該オブジェクトを格納することを示している。3行目は、そのオブジェクトを示しており、オブジェクトa(配列a)のデータサイズが128バイトであることを示している。4行目以降についても同様である。
プラグマが上述の(2)番目のプラグマの場合には(S1で_cache_set_number)、プラグマの指定に従いオブジェクトのグループ分けを行なうとともに(S5)、グループにセット番号を設定する(S6)。例えば、図11に示すような(2)番目のプラグマが記述されたソースプログラムの場合には、「#pragma _cache_set_number=0 i」というプラグマ指定により配列i[32]にはキャッシュメモリ3のセット番号として「0」が設定される。「#pragma _cache_set_number=1 j」および「#pragma _cache_set_number=2 k」についても同様である。
その後、配置セット情報設定部78は、グループ番号設定処理(S6)で設定されたセット番号のキャッシュメモリ3のブロックにそのグループのオブジェクトが配置されるようなアセンブラコードを作成する(S4)。
プラグマが上述の(3)番目のプラグマの場合には(S1で_cache_set_monopoly)、配置セット情報設定部78は、プラグマにより指定された複数のオブジェクトをそれぞれ独立したグループとする(S7)。その後、各グループに異なるセット番号を設定する(S8)。例えば、図12に示すような(3)番目のプラグマが記述されたソースプログラムの場合には、「#pragma _cache_set_monopoly x,y」というプラグマ指定により配列x[32]および配列y[32]にはキャッシュメモリ3の異なるセット番号が設定される。
その後、配置セット情報設定部78は、グループ番号設定処理(S8)で設定されたセット番号のキャッシュメモリ3のブロックにそのグループのオブジェクトが配置されるようなアセンブラコードを作成する(S4)。なお、(3)番目のプラグマが指定された場合には、プラグマ指定されたオブジェクトにグループ番号設定処理(S7)で設定されたキャッシュのセット番号のブロックを独占させるようなアセンブラコードが作成される。これにより、頻繁に使用されるオブジェクトにキャッシュメモリ3を独占使用させることができ、当該オブジェクトがキャッシュメモリ3から追い出されるのを防止し、高速に処理を実行させることが可能になる。
以上の処理(S1〜S8)をすべてのプラグマについて実行し(ループA)、アセンブラコードを作成する。なお、同一のオブジェクトに対して、(2)番目のプラグマ「#pragma _cache_set_number」と(3)番目のプラグマ「#pragma _cache_set_monopoly」とを同時に設定することも可能である。
(リンカ部)
図13は、図5に示したリンカ部54のアドレス設定部56が実行する処理のフローチャートである。図14は、当該処理を説明するための図である。以下、図13および図14を参照しながら、リンカ部54のアドレス設定部56が実行する処理について説明する。
アドレス設定部56は、1つ以上のオブジェクトファイル52を読み込み、オブジェクトファイル52に含まれるオブジェクトを、キャッシュメモリ3に配置するセット番号が確定しているオブジェクトと確定していないオブジェクトとに分割する(S11)。例えば、14(a)に示すようなセット番号が確定しているオブジェクトと、図14(b)に示すようなセット番号が未確定のオブジェクトとに分割される。
次に、アドレス設定部56は、オブジェクトをメインメモリ2に割り当てる(S12)。より詳細に説明すると、セット番号が確定しているオブジェクトを、キャッシュメモリ3のセット番号のブロックに配置されるようなメインメモリ2の領域に1つずつ配置していく。また、セット番号が未確定の領域を、オブジェクトに対してセット番号が設定されていない当該セット番号に対応するキャッシュメモリ3の領域に配置していく。この時点では、図14(c)に示すようにメインメモリ2の0x900000000番地から0x90000FFF番地までにオブジェクトが記憶されている。すなわち、図14(a)に示した2つのセット番号4のオブジェクトについては、そのうちの1つのみが設定されることになる。
次に、アドレス設定部56は、セット番号が確定しているオブジェクトをすべてメインメモリ2に配置したか否かを調べる(S13)。すべて配置していれば(S13でYES)、処理を終了する。未配置のものがあれば(S13でNO)、上述のオブジェクト配置処理(S12)と同様に、2つ目以降のオブジェクトについても同様にメインメモリ2に配置を行なっていく。その際、一度でもセット番号が確定しているオブジェクトを配置したセット番号に対応する領域は、空き領域として何も配置しないようにする(S14)。これにより、図14(c)に示すように、未配置のセット番号4のオブジェクトがメモリに配置され、0x90001000番地以降のセット番号0、1および4に対応する領域は空き領域とされる。
以上説明したように、本実施の形態によると、実行プログラムを実行した際、プラグマの指定に従いユーザが時間的に近いタイミングでアクセスされると考えるオブジェクトが、キャッシュメモリ3の異なるセット番号のブロックに配置される。このため、時間的に近いタイミングでアクセスされると考えられるオブジェクト同士でキャッシュメモリの同一セット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。よって、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
(実施の形態2)
本発明の実施の形態2に係るコンパイラシステムがターゲットするコンピュータのハードウェア構成の一部は、図1〜図3に示したものと同様である。また、本実施の形態に係るコンパイラシステムの構成は、図5に示したものと同様である。このため、それらの詳細な説明はここでは繰返さない。
図15は、本実施の形態に係るコンパイラ部46の構成を示す機能ブロック図である。本実施の形態に係るコンパイラ部46は、キャッシュパラメータ42、ソースプログラム44およびプロファイルデータ66に基づいて、ソースプログラム44をアセンブラファイル48に変換する処理部であり、パーサー部82と、アセンブラコード変換部86とを備えている。
パーサー部82は、コンパイルの対象となるソースプログラム44に対して、予約語(キーワード)等を抽出して字句解析する前置処理部であり、通常のコンパイラが備える解析機能に加えて、プロファイルデータ66を解析するプロファイルデータ解析部84を有する。プロファイルデータ66とは、実施の形態1で説明したように、オブジェクト(変数等)のアクセス頻度や、オブジェクトの生存区間など最適な実行プログラム58を得るためのヒントとなる情報のことである。
アセンブラコード変換部86は、パーサー部82から渡されたソースプログラム44の各ステートメントを中間コードに変換した後、アセンブリ言語のコードに変換し、アセンブラファイル48を出力する処理部であり、通常のコンパイラが備える変換機能に加えて、プロファイルデータ解析部84での解析結果に従い、オブジェクトがキャッシュメモリ3の適切なセット番号のブロックに配置されるようなアセンブラコードを作成する配置セット情報設定部88を有する。
図16は、図15に示したプロファイルデータ解析部84および配置セット情報設定部88が実行する処理のフローチャートである。
プロファイルデータ解析部84は、プロファイルデータ66に記述されたプロファイル情報の種類を解析する(S21)。プロファイルデータ66に記述された情報がオブジェクトのアクセス頻度に関する情報である場合には(S21でアクセス頻度情報)、配置セット情報設定部88は、所定のしきい値以上のアクセス頻度を有するオブジェクトをそれぞれ独立したグループとする(S22)。また、配置セット情報設定部88は、当該しきい値未満のアクセス頻度を有するオブジェクトを1つのグループとする(S23)。次に、配置セット情報設定部88は、グループ分け処理(S22およびS23)で求められたグループに対して、キャッシュメモリ3のそれぞれ異なるセット番号を設定する(S24)。その後、配置セット情報設定部88は、セット番号設定処理(S24)で設定されたセット番号のキャッシュメモリ3のブロックにそのグループのオブジェクトが配置されるようなメインメモリ2の領域に、当該オブジェクトを格納するアセンブラコードを作成する(S25)。
次に、アクセス頻度情報に基づくアセンブラコード作成処理(S22〜S25)について具体例を挙げながらより詳細に説明する。図17は、アクセス頻度情報に基づくアセンブラコード作成処理を説明するための図である。図17(a)に示されるようなアクセス頻度を有するプロファイル情報が与えられたものとする。ここでは、アクセス頻度として、全オブジェクトのアクセス回数に対する各オブジェクトのアクセス回数の割合を用いることとするが、例えば、総アクセス回数や、単位時間当たりのアクセス回数をアクセス頻度としてもよい。図17(b)は、図17(a)のグラフを数値化したものであり、オブジェクトa〜e(配列a[32]〜e[32])は、それぞれ70%、25%、2%、2%および1%のアクセス頻度を有することを示している。ここで、例えばしきい値を10%と設定すると、図17(c)に示されるように10%以上のアクセス頻度を有するオブジェクトaおよびbがそれぞれグループAおよびBに分類され(図16のS22)、10%未満のアクセス頻度を有するオブジェクトc〜eが1つのグループCに分類される(図16のS23)。また、グループA〜Cに対してそれぞれセット番号0〜2が設定される(図16のS24)。最終的には、オブジェクトaがキャッシュメモリ3のセット番号0のブロックに、オブジェクトbがキャッシュメモリ3のセット番号1のブロックに、オブジェクトc〜eがキャッシュメモリ3のセット番号2のブロックにそれぞれ配置されるようなメインメモリ2の領域に、オブジェクトa〜eを格納するアセンブラコードが生成される(図16のS25)。
プロファイルデータ66に記述された情報がオブジェクトの生存区間に関する情報である場合には(S21で生存区間情報)、配置セット情報設定部88は、オブジェクトの生存区間の重なりを調べる(S26)。次に、配置セット情報設定部88は、生存区間が重なり合いを有するオブジェクトが異なるグループとなるようなグループ分けを行なう(S27)。その後、配置セット情報設定部88は、グループ分け処理(S26およびS27)で求められたグループに対して、キャッシュメモリ3のそれぞれ異なるセット番号を設定する(S28)。その後、配置セット情報設定部88は、上述のアセンブラコード作成処理(S25)を実行する。
次に、生存区間情報に基づくアセンブラコード作成処理(S26〜S28およびS25)について具体例を挙げながらより詳細に説明する。図18は、生存区間に関するプロファイルデータ66の一例を示す図である。図18には、5つのオブジェクトa〜eに関する生存区間が示されており、例えば、1行目はオブジェクトaに関する生存区間を示しており、生存区間の開始タイミングを表すデータが「0x80000010」であり、生存区間の終了タイミングを表すデータが「0x800001ff」である。2行目以降も同様である。
この生存区間に関する情報を図示すると図19(a)のようになる。したがって、生存区間の重なりを、オブジェクトを節点とし、オブジェクト間の生存区間の重なりを枝で示した無向グラフで表すと、図19(b)および図19(c)のようになる。すなわち、オブジェクトa,bおよびdは相互に重なり合いを有し、オブジェクトcおよびeは相互に重なり合いを有することを示している(図16のS26)。
このような生存区間の重なりより、図20に示されるようなグループ分けが行なわれる(図16のS27)。すなわち、相互に重なり合いを有するオブジェクトa、bおよびdが異なるグループA、BおよびCにそれぞれ分類され、同様にオブジェクトcおよびeが異なるグループBおよびCにそれぞれ分類される。また、グループA〜Cに対してそれぞれセット番号0〜2が設定される(図16のS24)。最終的には、図21に示すように、オブジェクトaがキャッシュメモリ3のセット番号0のブロックに、オブジェクトbおよびcがキャッシュメモリ3のセット番号1のブロックに、オブジェクトdおよびeがキャッシュメモリ3のセット番号2のブロックにそれぞれ配置されるようなメインメモリ2の領域に、オブジェクトa〜eを格納するアセンブラコードが生成される(図16のS25)。なお、ここではオブジェクトbおよびcを同一グループとし、オブジェクトcおよびeを同一グループとしているが、それぞれ、別のグループにオブジェクトを配置してもよい。
以上説明したように本実施の形態によると、実行プログラムを実行した際、アクセス頻度の高いオブジェクトはそれぞれキャッシュメモリの異なるセット番号のブロックに配置される。また、アクセス頻度の低いオブジェクトはそれらとは別のセット番号のブロックに配置される。このため、アクセス頻度の高いオブジェクトにキャッシュメモリのブロックを独占使用させることができる。このため、頻繁に使用されるオブジェクトがキャッシュメモリから追い出されにくくなることにより、キャッシュミスを防止し、キャッシュメモリのヒット率を向上させることができる。
また、生存区間の重なり合いを有するオブジェクトはそれぞれ異なるセット番号のブロックに配置される。このため、同時期にアクセスされるオブジェクト同士で、同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。このため、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
(実施の形態3)
本発明の実施の形態3に係るコンパイラシステムがターゲットするコンピュータのハードウェア構成の一部は、図1〜図3に示したものと同様である。また、本実施の形態に係るコンパイラシステムの構成は、図5に示したものと同様である。このため、それらの詳細な説明はここでは繰返さない。
図22は、本実施の形態に係るコンパイラ部46の構成を示す機能ブロック図である。本実施の形態に係るコンパイラ部46は、キャッシュパラメータ42およびソースプログラム44に基づいて、ソースプログラム44をアセンブラファイル48に変換する処理部であり、パーサー部92と、アセンブラコード変換部86とを備えている。
パーサー部92は、コンパイルの対象となるソースプログラム44に対して、予約語(キーワード)等を抽出して字句解析する前置処理部であり、通常のコンパイラが備える解析機能に加えて、オブジェクト(変数等)の生存区間の重なりを解析する生存区間重なり解析部94を有する。アセンブラコード変換部86の構成は、実施の形態2と同様であるため、その詳細な説明はここでは繰返さない。
生存区間重なり解析部94は、ソースプログラム44を解析し、オブジェクトの生存区間の重なりを解析する。例えば、図23(a)に示すようなソースプログラム44が与えられた場合に、オブジェクトa〜fの生存区間を解析すると、図23(b)に示すようなグラフが生成される。生存区間重なり解析部94は、図23(b)に示されたグラフより、生存区間の重なりを、オブジェクトを節点とし、オブジェクト間の生存区間の重なりを枝で示した無向グラフで表すと、図23(c)のようになる。すなわち、オブジェクトa、b、eおよびfは相互に重なり合いを有し、オブジェクトa、cおよびdは相互に重なり合いを有することを示している。このようなオブジェクト間の生存区間の重なりに関する情報に基づいて、実施の形態2と同様の処理を実行することにより、図24に示すように、オブジェクトのグループ分けおよびキャッシュメモリ3のセット番号の設定が行われる。最終的には、図25に示されるようなアセンブラコードが生成される。
以上説明したように本実施の形態によると、生存区間の重なり合いを有するオブジェクトはそれぞれ異なるセット番号のブロックに配置される。このため、同時期にアクセスされるオブジェクト同士で、同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。このため、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
以上、本発明について実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではない。
例えば、キャッシュメモリとして、nウェイセットアソシアティブ方式のキャッシュメモリを用いてもよい。
本発明は、コンパイラに適用でき、特に、キャッシュメモリを有するコンピュータをターゲットとするコンパイラ等に適用できる。
本発明の実施の形態に係るコンパイラシステムがターゲットとするコンピュータのハードウェア構成の一部を示すブロック図である。 キャッシュメモリのハードウェア構成を示すブロック図である。 キャッシュメモリに含まれるあるブロックにおけるビット構成を示す図である。 コンパイラシステムによるソースプログラム中のデータの配置方法の概略を説明するための図である。 コンパイラシステムの構成を示す機能ブロック図である。 実施の形態1に係るコンパイラ部の構成を示す機能ブロック図である。 図6に示したプラグマ解析部および配置セット情報設定部が実行する処理のフローチャートである。 プラグマ「#pragma _overlap_access_object」が記述されたソースプログラムの一例を示す図である。 グループ分けされたオブジェクトの図である。 図8に示したソースコードより作成されたアセンブラコードの一例を示す図である。 プラグマ「#pragma _cache_set_number」が記述されたソースプログラムの一例を示す図である。 プラグマ「#pragma _cache_set_monopoly」が記述されたソースプログラムの一例を示す図である。 図5に示したリンカ部のアドレス設定部が実行する処理のフローチャートである。 図5に示したリンカ部のアドレス設定部が実行する処理を説明するための図である。 実施の形態2に係るコンパイラ部の構成を示す機能ブロック図である。 図15に示したプロファイルデータ解析部および配置セット情報設定部が実行する処理のフローチャートである。 アクセス頻度情報に基づくアセンブラコード作成処理を説明するための図である。 オブジェクトの生存区間に関するプロファイルデータの一例を示す図である。 オブジェクトの生存区間を表すグラフである。 オブジェクトをグループ分けした結果の図である。 図18に示したプロファイルデータより作成されたアセンブラコードの一例を示す図である。 実施の形態3に係るコンパイラ部の構成を示す機能ブロック図である。 オブジェクトの生存区間の重なりを説明するための図である。 オブジェクトのグループ分けおよびキャッシュメモリのセット番号の設定が行われた結果を説明するための図である。 図23に示したオブジェクトの生存区間の重なりに基づいて作成されたアセンブラコードの一例を示す図である。
符号の説明
1 プロセッサ
2 メインメモリ
3 キャッシュメモリ
10 コンピュータ
20 アドレスレジスタ
31 メモリ部
40 コンパイラシステム
42 キャッシュパラメータ
44 ソースプログラム
46 コンパイラ部
48 アセンブラファイル
50 アセンブラ部
52 オブジェクトファイル
54 リンカ部
56 アドレス設定部
58 実行プログラム
66 プロファイルデータ
72、82、92 パーサー部
74 プラグマ解析部
76、86 アセンブラコード変換部
78、88 配置セット情報設定部
84 プロファイルデータ解析部
94 生存区間重なり解析部

Claims (23)

  1. キャッシュメモリを備えるコンピュータをターゲットとし、ソースプログラムをオブジェクトプログラムに変換するコンパイラ装置であって、
    ソースプログラムに含まれるオブジェクトをグループ分けするためのグループ分け情報を解析し、当該オブジェクトをグループ分けするグループ分け手段と、
    前記グループ分け手段によるグループ分け結果に基づいて、異なるグループに属するオブジェクト同士が前記キャッシュメモリの同じセット番号のブロックに配置されないようなオブジェクトプログラムを作成するオブジェクトプログラム作成手段とを備える
    ことを特徴とするコンパイラ装置。
  2. 前記グループ分け手段は、前記ソースプログラムに含まれるコンパイラ装置に対する指示を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けする
    ことを特徴とする請求項1に記載のコンパイラ装置。
  3. 前記指示は、指定されたオブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けするプラグマ指令であり、
    前記グループ分け手段は、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けする
    ことを特徴とする請求項2に記載のコンパイラ装置。
  4. 前記指示は、指定されたオブジェクトを前記キャッシュメモリの指定されたセット番号のブロックに配置させるプラグマ指令であり、
    前記グループ分け手段は、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、指定された前記セット番号ごとに前記オブジェクトをグループ分けし、
    前記オブジェクトプログラム作成手段は、前記グループに属するオブジェクトが前記キャッシュメモリの前記プラグマ指令で指定された前記セット番号のブロックに配置されるようなオブジェクトプログラムを作成する
    ことを特徴とする請求項2に記載のコンパイラ装置。
  5. 前記指示は、指定されたオブジェクトを独立したセット番号のブロックに配置させ、かつ、当該ブロックを独占的に使用させるプラグマ指令であり、
    前記グループ分け手段は、
    前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクトを当該オブジェクトごとにグループ分けするグループ分け処理部と、
    グループ分けされたグループごとに異なるセット番号を設定するセット番号設定部とを有し、
    前記オブジェクトプログラム作成手段は、各グループに含まれるオブジェクトを前記キャッシュメモリの前記グループに対応するセット番号のブロックに配置し、かつ当該オブジェクトに当該ブロックを独占使用させるオブジェクトプログラムを作成する
    ことを特徴とする請求項2に記載のコンパイラ装置。
  6. 前記グループ分け手段は、前記ソースプログラムから生成される機械語命令列を実行した際に生成されるプロファイル情報を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けする
    ことを特徴とする請求項1に記載のコンパイラ装置。
  7. 前記プロファイル情報には、前記オブジェクトのアクセス頻度に関する情報が含まれ、
    前記グループ分け手段は、前記アクセス頻度が所定のしきい値以上のオブジェクトをそれぞれ独立したグループに分ける
    ことを特徴とする請求項6に記載のコンパイラ装置。
  8. 前記プロファイル情報には、前記オブジェクトの生存区間に関する情報が含まれ、
    前記グループ分け手段は、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする
    ことを特徴とする請求項6に記載のコンパイラ装置。
  9. 前記グループ分け手段は、前記ソースプログラムに基づいて、前記ソースプログラムに含まれるオブジェクトの生存区間の重なりを解析し、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする
    ことを特徴とする請求項1に記載のコンパイラ装置。
  10. 請求項1〜9のいずれか1項に記載のコンパイラ装置を用いて生成された1つ以上のオブジェクトプログラムを結合し、実行形式の実行プログラムを作成するリンカ装置であって、
    前記キャッシュメモリに配置される際のブロックのセット番号が確定しているオブジェクトに対しては、当該セット番号のブロックに前記オブジェクトが配置されるような前記コンピュータのメインメモリのアドレスを設定する第1のアドレス設定手段と、
    前記キャッシュメモリに配置される際のブロックのセット番号が確定していないオブジェクトに対しては、前記セット番号が確定しているオブジェクトの当該セット番号以外のセット番号のブロックに、前記セット番号が確定していないオブジェクトが配置されるような前記メインメモリのアドレスを設定する第2のアドレス設定手段とを備える
    ことを特徴とするリンカ装置。
  11. キャッシュメモリを備えるコンピュータをターゲットとし、ソースプログラムをオブジェクトプログラムに変換するコンパイル方法であって、
    ソースプログラムに含まれるオブジェクトをグループ分けするためのグループ分け情報を解析し、当該オブジェクトをグループ分けするグループ分けステップと、
    前記グループ分けステップによるグループ分け結果に基づいて、異なるグループに属するオブジェクト同士が前記キャッシュメモリの同じセット番号のブロックに配置されないようなオブジェクトプログラムを作成するオブジェクトプログラム作成ステップとを含む
    ことを特徴とするコンパイル方法。
  12. 前記グループ分けステップでは、前記ソースプログラムに含まれるコンパイル方法に対する指示を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けする
    ことを特徴とする請求項11に記載のコンパイル方法。
  13. 前記指示は、指定されたオブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けするプラグマ指令であり、
    前記グループ分けステップでは、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けする
    ことを特徴とする請求項12に記載のコンパイル方法。
  14. 前記指示は、指定されたオブジェクトを前記キャッシュメモリの指定されたセット番号のブロックに配置させるプラグマ指令であり、
    前記グループ分けステップでは、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、指定された前記セット番号ごとに前記オブジェクトをグループ分けし、
    前記オブジェクトプログラム作成ステップでは、前記グループに属するオブジェクトが前記キャッシュメモリの前記プラグマ指令で指定された前記セット番号のブロックに配置されるようなオブジェクトプログラムを作成する
    ことを特徴とする請求項12に記載のコンパイル方法。
  15. 前記指示は、指定されたオブジェクトを独立したセット番号のブロックに配置させ、かつ、当該ブロックを独占的に使用させるプラグマ指令であり、
    前記グループ分けステップは、
    前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクトを当該オブジェクトごとにグループ分けするグループ分け処理サブステップと、
    グループ分けされたグループごとに異なるセット番号を設定するセット番号設定サブステップとを含み、
    前記オブジェクトプログラム作成ステップでは、各グループに含まれるオブジェクトを前記キャッシュメモリの前記グループに対応するセット番号のブロックに配置し、かつ当該オブジェクトに当該ブロックを独占使用させるオブジェクトプログラムを作成する
    ことを特徴とする請求項12に記載のコンパイル方法。
  16. 前記グループ分けステップでは、前記ソースプログラムから生成される機械語命令列を実行した際に生成されるプロファイル情報を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けする
    ことを特徴とする請求項11に記載のコンパイル方法。
  17. 前記プロファイル情報には、前記オブジェクトのアクセス頻度に関する情報が含まれ、
    前記グループ分けステップでは、前記アクセス頻度が所定のしきい値以上のオブジェクトをそれぞれ独立したグループに分ける
    ことを特徴とする請求項16に記載のコンパイル方法。
  18. 前記プロファイル情報には、前記オブジェクトの生存区間に関する情報が含まれ、
    前記グループ分けステップでは、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする
    ことを特徴とする請求項16に記載のコンパイル方法。
  19. 前記グループ分けステップでは、前記ソースプログラムに基づいて、前記ソースプログラムに含まれるオブジェクトの生存区間の重なりを解析し、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする
    ことを特徴とする請求項11に記載のコンパイル方法。
  20. 請求項11〜19のいずれか1項に記載のコンパイル方法を用いて生成された1つ以上のオブジェクトプログラムを結合し、実行形式の実行プログラムを作成するリンク方法であって、
    前記キャッシュメモリに配置される際のブロックのセット番号が確定しているオブジェクトに対しては、当該セット番号のブロックに前記オブジェクトが配置されるような前記コンピュータのメインメモリのアドレスを設定する第1のアドレス設定ステップと、
    前記キャッシュメモリに配置される際のブロックのセット番号が確定していないオブジェクトに対しては、前記セット番号が確定しているオブジェクトの当該セット番号以外のセット番号のブロックに、前記セット番号が確定していないオブジェクトが配置されるような前記メインメモリのアドレスを設定する第2のアドレス設定ステップとを含む
    ことを特徴とするリンク方法。
  21. コンピュータに請求項11〜19のいずれか1項に記載のコンパイル方法に含まれるステップを実行させる
    ことを特徴とするプログラム。
  22. コンピュータに請求項20に記載のリンク方法に含まれるステップを実行させる
    ことを特徴とするプログラム。
  23. 請求項21または22に記載のプログラムを記録した
    ことを特徴とするコンピュータ読取可能な記録媒体。

JP2003356921A 2003-10-16 2003-10-16 コンパイラ装置およびリンカ装置 Expired - Lifetime JP4047788B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2003356921A JP4047788B2 (ja) 2003-10-16 2003-10-16 コンパイラ装置およびリンカ装置
US10/950,397 US7689976B2 (en) 2003-10-16 2004-09-28 Compiler apparatus and linker apparatus
CNB2004100852667A CN100365578C (zh) 2003-10-16 2004-10-18 编译装置及连接装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003356921A JP4047788B2 (ja) 2003-10-16 2003-10-16 コンパイラ装置およびリンカ装置

Publications (2)

Publication Number Publication Date
JP2005122481A true JP2005122481A (ja) 2005-05-12
JP4047788B2 JP4047788B2 (ja) 2008-02-13

Family

ID=34509811

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003356921A Expired - Lifetime JP4047788B2 (ja) 2003-10-16 2003-10-16 コンパイラ装置およびリンカ装置

Country Status (3)

Country Link
US (1) US7689976B2 (ja)
JP (1) JP4047788B2 (ja)
CN (1) CN100365578C (ja)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007048286A (ja) * 2005-08-05 2007-02-22 Fujitsu Ltd キャッシュにおける電力消費削減方法、論理装置及びシステム
JP2007048285A (ja) * 2005-08-05 2007-02-22 Fujitsu Ltd キャッシュにおける電力消費削減方法、論理装置及びシステム
WO2010010678A1 (ja) * 2008-07-22 2010-01-28 パナソニック株式会社 プログラム最適化方法
JP2011170439A (ja) * 2010-02-16 2011-09-01 Nec Corp コンパイラ、コンパイル方法、及びコンパイル実行プログラム
JP2012208615A (ja) * 2011-03-29 2012-10-25 Mitsubishi Electric Corp 命令実行分析装置及び命令実行分析方法及びプログラム
JP2013101563A (ja) * 2011-11-09 2013-05-23 Toshiba Corp プログラム変換装置、プログラム変換方法、および変換プログラム
JP2014002557A (ja) * 2012-06-18 2014-01-09 Fujitsu Ltd 試験データ生成方法、試験方法、試験データ生成装置、および試験データ生成プログラム
JP2015075776A (ja) * 2013-10-04 2015-04-20 富士通株式会社 データ管理プログラム、データ管理装置およびデータ管理方法
US9280475B2 (en) 2013-05-28 2016-03-08 Fujitsu Limited Variable updating device and variable updating method

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7616470B2 (en) * 2006-06-16 2009-11-10 International Business Machines Corporation Method for achieving very high bandwidth between the levels of a cache hierarchy in 3-dimensional structures, and a 3-dimensional structure resulting therefrom
US20120089774A1 (en) 2010-10-12 2012-04-12 International Business Machines Corporation Method and system for mitigating adjacent track erasure in hard disk drives
US8572315B2 (en) 2010-11-05 2013-10-29 International Business Machines Corporation Smart optimization of tracks for cloud computing

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3417984B2 (ja) * 1993-09-10 2003-06-16 株式会社日立製作所 キャッシュ競合削減コンパイル方法
JPH07129410A (ja) 1993-11-05 1995-05-19 Fujitsu Ltd コンパイラにおけるメモリ割り付け方法
US5649137A (en) * 1994-10-20 1997-07-15 Advanced Micro Devices, Inc. Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
JPH08212081A (ja) * 1995-02-08 1996-08-20 Hitachi Ltd メモリ割り付け方法、並びにコンパイル方法およびコンパイラ
US6301652B1 (en) * 1996-01-31 2001-10-09 International Business Machines Corporation Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
US5848275A (en) 1996-07-29 1998-12-08 Silicon Graphics, Inc. Compiler having automatic common blocks of memory splitting
JP3178403B2 (ja) 1998-02-16 2001-06-18 日本電気株式会社 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6530075B1 (en) * 1998-12-03 2003-03-04 International Business Machines Corporation JIT/compiler Java language extensions to enable field performance and serviceability
US6438655B1 (en) * 1999-04-20 2002-08-20 Lucent Technologies Inc. Method and memory cache for cache locking on bank-by-bank basis
US6549959B1 (en) * 1999-08-30 2003-04-15 Ati International Srl Detecting modification to computer memory by a DMA device
US6574682B1 (en) * 1999-11-23 2003-06-03 Zilog, Inc. Data flow enhancement for processor architectures with cache
JP2001273138A (ja) * 2000-03-24 2001-10-05 Fujitsu Ltd プログラム変換装置および方法
US6708330B1 (en) * 2000-06-13 2004-03-16 Cisco Technology, Inc. Performance improvement of critical code execution
US7107583B2 (en) * 2001-02-16 2006-09-12 Hewlett-Packard Development Company, L.P. Method and apparatus for reducing cache thrashing
US6704833B2 (en) * 2002-01-04 2004-03-09 Hewlett-Packard Development Company, L.P. Atomic transfer of a block of data

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007048286A (ja) * 2005-08-05 2007-02-22 Fujitsu Ltd キャッシュにおける電力消費削減方法、論理装置及びシステム
JP2007048285A (ja) * 2005-08-05 2007-02-22 Fujitsu Ltd キャッシュにおける電力消費削減方法、論理装置及びシステム
WO2010010678A1 (ja) * 2008-07-22 2010-01-28 パナソニック株式会社 プログラム最適化方法
JP2010026851A (ja) * 2008-07-22 2010-02-04 Panasonic Corp コンパイラによる最適化方法
JP2011170439A (ja) * 2010-02-16 2011-09-01 Nec Corp コンパイラ、コンパイル方法、及びコンパイル実行プログラム
JP2012208615A (ja) * 2011-03-29 2012-10-25 Mitsubishi Electric Corp 命令実行分析装置及び命令実行分析方法及びプログラム
JP2013101563A (ja) * 2011-11-09 2013-05-23 Toshiba Corp プログラム変換装置、プログラム変換方法、および変換プログラム
JP2014002557A (ja) * 2012-06-18 2014-01-09 Fujitsu Ltd 試験データ生成方法、試験方法、試験データ生成装置、および試験データ生成プログラム
US9280475B2 (en) 2013-05-28 2016-03-08 Fujitsu Limited Variable updating device and variable updating method
JP2015075776A (ja) * 2013-10-04 2015-04-20 富士通株式会社 データ管理プログラム、データ管理装置およびデータ管理方法

Also Published As

Publication number Publication date
CN1609804A (zh) 2005-04-27
CN100365578C (zh) 2008-01-30
US7689976B2 (en) 2010-03-30
JP4047788B2 (ja) 2008-02-13
US20050086651A1 (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
Peled et al. Semantic locality and context-based prefetching using reinforcement learning
US5815720A (en) Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
EP0449368B1 (en) Method for compiling computer instructions for increasing cache efficiency
US8037465B2 (en) Thread-data affinity optimization using compiler
US9946523B2 (en) Multiple pass compiler instrumentation infrastructure
EP0838755A2 (en) Binary program conversion apparatus and method
JP2006260096A (ja) プログラム変換方法およびプログラム変換装置
US20040205740A1 (en) Method for collection of memory reference information and memory disambiguation
JP4047788B2 (ja) コンパイラ装置およびリンカ装置
US8886887B2 (en) Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization
US20080052693A1 (en) Method of simd-ization through data reshaping, padding, and alignment
US7243195B2 (en) Software managed cache optimization system and method for multi-processing systems
WO2010010678A1 (ja) プログラム最適化方法
US6829760B1 (en) Runtime symbol table for computer programs
US20110145503A1 (en) On-line optimization of software instruction cache
CN100552650C (zh) 用于结合使用有效范围语句和动态缓存变量的方法
JP4044756B2 (ja) プログラム変換装置、プログラム変換方法、及び当該プログラム変換装置を実現するプログラム
JP5238797B2 (ja) コンパイラ装置
JP2014112327A (ja) 変換プログラム、変換装置及び変換方法
JPH10320212A (ja) キャッシュ向け最適化方法
JP3276479B2 (ja) コンパイル方式
JP3309810B2 (ja) プログラムリンクシステム、方法及び記録媒体
CN111309329B (zh) 一种指令地址自适应重定位方法及程序编译方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070724

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070921

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: 20071030

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20071122

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

Free format text: PAYMENT UNTIL: 20101130

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4047788

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: 20111130

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20121130

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20121130

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20131130

Year of fee payment: 6

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

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