JP2002014868A - メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法 - Google Patents

メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法

Info

Publication number
JP2002014868A
JP2002014868A JP2000200088A JP2000200088A JP2002014868A JP 2002014868 A JP2002014868 A JP 2002014868A JP 2000200088 A JP2000200088 A JP 2000200088A JP 2000200088 A JP2000200088 A JP 2000200088A JP 2002014868 A JP2002014868 A JP 2002014868A
Authority
JP
Japan
Prior art keywords
memory
program
register
result
instruction
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.)
Pending
Application number
JP2000200088A
Other languages
English (en)
Inventor
Hiroyasu Nishiyama
博泰 西山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2000200088A priority Critical patent/JP2002014868A/ja
Priority to US09/645,406 priority patent/US6775740B1/en
Publication of JP2002014868A publication Critical patent/JP2002014868A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Abstract

(57)【要約】 【課題】キャッシュミスなどのメモリ参照動作の結果を
より低いオーバヘッドでプログラムから利用可能とす
る。 【解決手段】命令により参照されるデータがキャッシュ
304に存在するか否かが比較器103により判定され
る。メモリ参照動作の結果を取得する命令の実行時、比
較器103の出力が選択器105により選択されて演算
器106に与えられる。演算器では、命令で指定された
レジスタとの演算が行われ、その結果がメモリ参照動作
の結果としてレジスタファイル104内のレジスタに記
録される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、マイクロプロセッ
サおよびそのコンパイラに関する。さらに詳しくは、本
発明は、プログラムの実行時に、メモリの参照動作特性
に応じて、命令実行を動的に変更する機能を備えたマイ
クロプロセッサ、およびそのコンパイル方法に関する。
【0002】
【従来の技術】最近のマイクロプロセッサは、命令レベ
ル並列性の向上、動作周波数の向上などにより、大幅に
性能が向上している。これに対して,主記憶の性能はそ
れほど向上していない。このため,キャッシュミス時の
主記憶参照サイクルがプログラムの性能を低下させる主
要な要因の1つとなっている。
【0003】一般のマイクロプロセッサにおいて、キャ
ッシュメモリは、アプリケーションプログラムから透過
的に動作する。すなわち、キャッシュミスが発生したか
否かは、アプリケーションプログラムからは判断するこ
とができない。しかしながら、前述のように、キャッシ
ュミスなどのメモリ動作は、アプリケーションプログラ
ムの実行性能に大きな影響を与える。このため、実行時
の細かなメモリ参照動作に従ってアプリケーションプロ
グラムの実行を細かく制御することが望ましい。
【0004】メモリ参照時におけるキャッシュミスの回
数などをアプリケーションプログラムから参照可能とす
る技術に、性能モニタ機能がある。例えば、文献「Pent
iumファミリーディベロッパーズマニュアル下巻 - アー
キテクチャとプログラミングマニュアル,Intel」に
は、キャッシュミスの回数などを特殊なレジスタ上でカ
ウントアップし、その値を参照する機能が開示されてい
る。同様な機能は、文献「Power PC 604 User's Gui
de, IBM Microerectronics and Motorola」においても
開示されている。
【0005】これらの機能では,キャッシュミスなどの
発生をカウントアップするためのレジスタは、パフォー
マンスカウンタなど、特殊なレジスタとして定義されて
いる。個別のメモリ参照についてキャッシュミスなどが
発生したか否かを知るには、メモリ参照命令の前後で、
パフォーマンスカウンタを汎用レジスタに読み出し、そ
の値が変化したか否かを比較するなど、煩雑な処理が必
要とされる。
【0006】このような問題に対処し、低いオーバヘッ
ドでメモリ参照時の個別の動作状態を簡単に参照するた
めの技術が、文献「M.Horowitz他, Informing Memory O
perations: Providing Memory Performance Feedback i
n Modern Processors, In Proceedings of the 23rd
Annual International Symposium on Computer Archite
cture, 1996」に開示されている。ここでは、メモ
リ参照動作の1つであるキャッシュミスが発生したか否
かを各メモリ参照命令毎に判定し、キャッシュミス時に
ハンドラコードに分岐するための技術が開示されてい
る。本文献によれば、あるメモリ参照によりキャッシュ
ミスが生じたか否かの監視を行うために、以下の3つの
方式が提案されている。
【0007】(a)メモリ参照がキャッシュミスを生じた
場合、分岐条件コードを設定し、メモリ参照後にこの条
件コードを参照して条件分岐を行うコードを配置する。
この方式では、例えば、ロード命令を実行した際に、キ
ャッシュミスが生じたか否かを示すフラグが分岐フラグ
に格納される。続く命令で、分岐フラグを調べ、キャッ
シュミスが発生していればキャッシュミス時の処理を行
うルーチンが呼び出される。
【0008】(b)メモリ参照がキャッシュヒットした場
合、メモリ参照の次の命令を無効化する。この方式で
は、例えば、ロード命令の後ろにキャッシュミス時の処
理を行うルーチンの呼び出し命令が挿入される。ロード
命令の実行時にキャッシュミスが生じなければ、続く呼
び出し命令の実行が抑止される。キャッシュミスが生じ
た場合には、呼び出し命令が実行され、キャッシュミス
時の処理を行うルーチンが実行される。
【0009】(c)メモリ参照がキャッシュミスを発生し
た場合、例外を発生し、特殊レジスタに指定された例外
ハンドラルーチンに制御を移す。この方式では、例え
ば、キャッシュミスが生じた場合に実行すべきルーチン
(例外ハンドラルーチン)のアドレスが、特殊なレジス
タであるMHAR(Miss Handler Address Register)に予
め設定される。ロード命令の実行時に、キャッシュミス
が生じると、MHARに設定されたアドレスにある例外ハン
ドラルーチンが呼び出される。
【0010】これらの方式において、キャッシュミス時
に実行されるルーチンでは、例えば、キャッシュミスの
回数をカウントするカウンタの値を加算する、といった
処理が行われる。
【0011】
【発明が解決しようとする課題】上述した従来技術にお
いて説明した技術の内、方式(a)および(c)では、キャッ
シュミスを生じた場合に分岐が発生する。一般に、マイ
クロプロセッサは、分岐予測を行い、頻度が高いと予測
した1つの命令実行パスを予測的に実行するため、頻度
が低いと予測されたパスを実行する分岐命令は命令実行
にペナルティを生じる。
【0012】一方、上述した方式(b)では、直前の命令
のヒット/ミスによって後続する命令を実行するか否か
が決定されるため、ハードウェア/ソフトウェアの複雑
化を招くという問題がある。
【0013】また、上述した各方式は、メモリの参照と
その動作の検出が対になっているため、メモリ参照によ
るペナルティが常に生じることになる。従って、例え
ば、以前に発行したメモリ参照要求が完了したか否かを
メモリ参照を行わずに知ることができないという問題が
ある。
【0014】
【課題を解決するための手段】上記課題を解決するため
に、本発明によるプロセッサは、演算に使われるデー
タ、または演算結果のデータを格納する少なくとも1つ
のレジスタを有するレジスタファイルと、メモリに格納
されたデータの一部の写しを保持するためのキャッシュ
メモリと、参照命令によりアクセスされるデータがキャ
ッシュメモリに存在するか否か判定するヒット/ミス判
定回路と、ヒット/ミス判定回路における判定結果とレ
ジスタファイルから読み出されたデータとを入力して所
定の演算を行う演算器とを有する。演算器による演算の
結果は、参照動作を表わす情報としてレジスタファイル
内のレジスタに格納される。
【0015】本発明の好ましい態様において、プロセッ
サは、参照動作の結果をレジスタに取得する処理を伴う
参照命令を有する。
【0016】本発明の他の観点によれば、入力されたプ
ログラムから計算機により理解可能なプログラムコード
を生成するプログラムのコンパイル方法において、入力
されたプログラムを解析し、解析結果に基づいて、キャ
ッシュミスの発生により処理の遅延が生じる可能性のあ
るプログラムの部分が抽出される。抽出された部分に含
まれるメモリ参照命令は、メモリ参照動作の結果を取得
する参照命令に変換され、取得されたメモリ参照動作の
結果に基づいて動的に実行する処理を選択するコードが
生成される。
【0017】
【発明の実施の形態】以下、図面を参照しながら本発明
の実施形態について説明する。ただし、本発明は、以下
に説明する実施形態に限定されるわけではない。
【0018】図1は、本発明が適用された計算機システ
ムの簡略化された構成例を示すブロック図である。
【0019】図1において、プロセッサ301、及び主
記憶302が、バス303に接続されている。プロセッ
サ301は、バス303を介して主記憶302に保持さ
れたデータを参照する。なお、一般に、計算機システム
では、プロセッサや主記憶の他、キーボード、ディスプ
レイ、磁気ディスク装置などの周辺装置(I/O機
器)、及び/または、これら周辺装置を制御するための
コントローラなどが設けられるが、これらについては、
本発明と直接関係するものではなく、図示を省略してい
る。
【0020】プロセッサ301は、レジスタファイル3
06、キャッシュメモリ304、演算器305などを有
して構成される。プロセッサ301は、データを参照す
る場合、まずキャッシュメモリ304上に該当するデー
タが存在するか否か判定する。
【0021】該当するデータがキャッシュメモリ304
に存在すれば、プロセッサ301は、キャッシュメモリ
304に格納されたデータを参照する。他方、該当する
データがキャッシュメモリ304に存在しなければ、プ
ロセッサ301は、主記憶302からデータをキャッシ
ュメモリ304に転送し、そのデータを参照する。
【0022】キャッシュメモリ304にあるデータの参
照は、主記憶302にあるデータの参照よりも高速に行
える。このため、キャッシュメモリ304にデータを保
存しておくことで、次回以降、同一のデータに対する参
照が高速化されることになる。なお、主記憶302とプ
ロセッサ301の間に2次キャッシュなど下位レベルの
キャッシュメモリが設けられる場合もあるが、本発明の
実現に関しては本質的な制約ではなく、ここでは簡単の
ため上記のような構成を仮定して説明する。
【0023】図2は、キャッシュメモリの参照動作の結
果を汎用レジスタ上に保存するためにプロセッサが有す
る機構部の一例を示す部分ブロック図である。
【0024】参照対象アドレス101には、データ参照
時に、プロセッサにより参照されるデータの主記憶30
2上でのアドレスが設定される。主記憶302のアドレ
スは、タグ部1011とインデックス部1012を含ん
でいる。
【0025】キャッシュメモリ304は、インデックス
部1012により特定される複数のエントリを有してい
る。各エントリは、アドレスのタグ部の値を格納するタ
グ領域3041と、データを格納するデータ領域304
2とを含む。各エントリのデータ領域3042には、そ
のエントリが対応づけられたインデックス、及び、対応
するタグ領域3041に設定されているタグにより特定
される主記憶302の領域のデータが格納される。
【0026】比較器103は、参照対象アドレス101
のタグ部1011の値と、インデックス部1012で選
択されたキャッシュメモリ304のエントリのタグ領域
3041に設定されている値とが入力される。これら両
者が一致する場合、比較器103は、キャッシュヒット
を示す信号を出力し、両者が異なる場合、キャッシュミ
スを示す信号を出力する。プロセッサ301では、比較
器103の出力に基づいてキャッシュメモリ304のデ
ータを参照するか、主記憶302からキャッシュメモリ
304にデータを転送するかを決定してデータの参照を
行う。これを実現するための技術は従来公知の技術を用
いることができるので、ここでは説明を省略する。
【0027】本実施形態では、比較器103の出力は、
データの参照先を決定するために用いられる他に、選択
器105の一方の入力に与えられる。選択器105の他
方の入力には、レジスタファイル104から読み出され
た値が入力される。選択器105は、これらの入力を実
行される命令に応じて切り替え、選択的に出力する。つ
まり、後述するような、キャッシュメモリの参照動作の
結果を汎用レジスタ上に保存する処理の実行を伴うメモ
リの参照命令が実行されたときには、比較器103の出
力が選択されて、演算器106に入力される。
【0028】演算器106は、選択器105から出力さ
れた値と、レジスタファイル104から読み出された値
との演算を実行する。演算器106による演算結果は、
レジスタファイル104内のレジスタに格納される。
【0029】図3は、本実施形態において適用される参
照命令の一例であるロード命令の記述例を示す説明図で
ある。
【0030】701は、参照結果、すなわち参照された
データを格納するレジスタ、702は、メモリ参照動作
の結果を格納するレジスタを表している。703は、メ
モリの参照動作の監視方式を示している。具体的には、
監視の方式が、例えば、1次キャッシュのキャッシュミ
ス(L1キャッシュミス)の監視であるとか、2次キャ
ッシュのキャッシュミス(L2キャッシュミス)の監視
であるといったことが示される。704は、メモリ参照
動作の結果の記録方式を表す。指定されたレジスタへの
代入、あるいは、指定されたレジスタへの累算などの記
録方式が指定される。
【0031】図に示す命令が実行されると、配列A
[i]の値がレジスタ「r0」にロード(格納)され
る。メモリ参照動作として、このロード命令の実行時の
L2キャッシュミスが監視され、その結果がレジスタ
「r1」に累算される。具体的には、レジスタ「r1」
の値がレジスタファイル104から読み出されて演算器
106に与えられる。また、この命令の実行時に、選択
器105は、比較器103の出力を演算器106に入力
する。ロード命令で参照されるデータがキャッシュメモ
リ304(ここでは、キャッシュメモリ304をL2キ
ャッシュであると考える)に存在しない場合、キャッシ
ュミスを示す値「1」とレジスタ「r1」の値が演算器
106により加算される。この演算の結果として得られ
るキャッシュミスの累積値は、レジスタファイル104
内のレジスタ「r1」に書き込まれる。
【0032】なお、ここでは、キャッシュミスの累積値
を取得する場合について説明した。キャッシュミスの有
無を取得する場合は、演算器106に入力されるレジス
タファイルからの出力値として「0」を与えるか、ある
いは、比較器103の出力値をレジスタファイルに直接
書き込むようにすればよい。
【0033】図4は、図3に例示したロード命令の命令
フォーマットの一例を示す説明図である。
【0034】本実施形態におけるロード命令は、ロード
命令を意味する命令コード801、参照結果を格納する
レジスタを指定するコード802、メモリ参照動作の結
果を格納するレジスタを指定するコード803、監視対
象の動作を示すコード804、参照動作の結果の格納方
式を示すコード805、並びに、アドレス計算に使用す
るベース値及びオフセット値を保持するレジスタを指定
するコード806、807を有する。
【0035】本実施形態では、メモリ参照命令として、
ロード命令を例に説明しているが、ストア命令、データ
プリフェッチ命令などの命令に関しても同様の命令を用
意することが可能である。また、ここで説明した命令の
機能のうち、実際にデータをロードする機能を除き、キ
ャッシュミスなどのメモリ参照動作のチェックのみを行
う命令を設けることも可能である。このような命令を用
いれば、ロード/ストアなどのメモリ参照動作を行うこ
となく、メモリ参照動作を行った場合にキャッシュミス
などが発生するか否かを検査することができる。メモリ
参照動作のチェックのみを行う命令を利用することによ
り、例えば、それ以前に行ったメモリ参照動作が完了し
たか否かを知ることができる。
【0036】図5は、上述したメモリ参照動作の結果の
取得機能を適用したプログラムのコンパイラ生成コード
の一例を示すプログラムリストである。
【0037】図5に例示するプログラムは、キャッシュ
ミスの回数が一定値を越えた場合にスレッドを切り替
え、メモリ参照レイテンシを隠蔽する処理を実現するプ
ログラムである。ここで、スレッドとは、独立に動作す
るプログラムの実行単位を表す。あるスレッドを実行中
に、キャッシュミスなど、完了までに長いサイクルを要
する事象が発生した場合、実行するスレッドを別のスレ
ッドに切り替えることにより、システム全体としてのプ
ログラムの実行スループットを向上させることができ
る。
【0038】図6は、スレッドの切り替えによるスルー
プットの向上の様子を示すタイムチャートである。図6
は、2つのスレッドを実行中のスレッドの切り替えを行
わずに実行させた場合(方式1)と、キャッシュミスの
発生に応じてスレッドの切り替えを行った場合(方式
2)とを比較したものである。
【0039】ここでは、第1のスレッドを実行中、t1
の時点でキャッシュミスが発生することを仮定する。
【0040】第1の方式では、そのままスレッドの切り
替えを行わずに、主記憶302からのデータがロードさ
れるのを待って、第1のスレッドの実行を継続する。そ
して、第1のスレッドの実行が完了時点t3で、第2の
スレッドに切り替えられる。第2のスレッドは、t5の
時点で実行を完了する。
【0041】一方、方式2では、キャッシュミスが発生
したt1の時点で、実行されるスレッドが、第1のスレ
ッドから第2のスレッドに切り替えられる。第2のスレ
ッドの実行が完了すると(t2)、第1のスレッドへの
切り替えが行われ、再び第1のスレッドが実行され、継
続する処理が実施される。第1のスレッドは、t4で実
行を完了する。
【0042】方式2では、キャッシュミスが発生した時
に、第2のスレッドへ実行が切り替えられるため、キャ
ッシュミスサイクルが隠蔽される。このため、2つのス
レッドの合計実行時間が、方式1に比べ短縮されている
ことがわかる。
【0043】再び図5のプログラムの説明に戻る。
【0044】図5に例示するプログラムでは、まず、ラ
イン500で、カウンタとなるレジスタmcに値「0」
を設定する。ループ501中では、ロード命令、及びそ
のロード命令によりロードされたデータを用いた演算が
実行される。ロード命令として、上述したメモリ参照動
作の結果を取得するためのロード命令が用いられる。こ
れにより、ロード命令の実行時に、mcにキャッシュミ
ス回数が累積されていく。
【0045】キャッシュミスの回数が一定値(ここでは
βとする)を越えると、ライン502の実行により、ス
レッド切り替えコードが呼び出され、実行スレッドが切
り替えられる。
【0046】図7は、スレッド切り替えコードの生成ア
ルゴリズムを示すフローチャートである。
【0047】スレッドの切り替えコードの生成では、ま
ず、キャッシュミスの可能性の高いメモリ参照命令の集
合を変数Mに求める。キャッシュミスの可能性の高いメ
モリ参照命令を求める処理は、従来公知のコンパイラ最
適化における参照パターン解析や、メモリ参照プロファ
イルにより実現することができる(ステップ110
1)。
【0048】続いて、変数Mが空集合か否かを判定する
(ステップ1102)。変数Mが空集合であれば処理は
終了する。変数Mが空集合でない場合は、次に、カウン
タの初期化コード「mc=0」を最適化対象コードの入
り口に挿入し、変換したメモリ参照集合を保持する変数
Sを空集合に初期化する(ステップ1103)。
【0049】次に、変数mに変数Mから1要素を取り出
し、変数mに取り出した要素を累算型の監視付きメモリ
参照命令に変換する。その後、変数Sを変数S′にコピ
ーする(ステップ1104)。
【0050】変数S′が空集合か否か確かめる(ステッ
プ1105)。変数S′が空集合でない場合には、変数
S′から要素を1つ取り出し、変数sに保持する。そし
て、変数sと変数mの間で、変数mの要素が参照してい
るデータを参照する最初の文を変数dに求める(ステッ
プ1106)。
【0051】続いて、変数dに該当する文が存在するか
否か判定する(ステップ1107)。変数dに該当する
文が存在しなければ、ステップ1105に戻り、次の文
を処理する。変数dに該当する文が存在する場合、カウ
ンタmcの値が一定値(β)以上であるときに、スレッ
ドスイッチコードを呼び出す文「if(mc>β) call Switc
h」を変数dに保持された文の直前に挿入する。その後、
ステップ1105に戻り、次の文の処理を行う(ステッ
プ1108)。
【0052】ステップ1105の判定の結果、「S′=
φ」となり、処理すべき文がなくなった場合、集合Sに
文mを追加する(ステップ1109)。そして、処理す
べきメモリ参照集合Mの要素がさらに存在するか否か確
認する(ステップ1110)処理対象の要素が存在すれ
ばステップ1104に戻り、さらに処理を継続する。処
理すべきメモリ参照がなくなった場合、最後のメモリ参
照文mの後に、スレッドスイッチコードを呼び出す文
「if(mc>β) call Switch」を挿入し、処理を終了する
(ステップ1111)。
【0053】図8は、本実施形態にけるメモリ参照命令
を利用し、複数のプリフェッチ間のアドレス競合による
性能低下を回避するプログラムの一例を示すプログラム
リストである。
【0054】キャッシュメモリは、その容量が限られて
いる。このため、ダイレクトマップやセットアソシアテ
ィブ方式のキャッシュメモリでは、参照対象のアドレス
の一部をインデックスとして用い、このインデックスに
よりキャッシュメモリのエントリを決定する。これによ
り、複数のアドレスで同一のキャッシュメモリのエント
リを共有している。ループ中における複数の配列の参照
が同一のキャッシュラインを参照することになる場合、
一方の配列の参照でキャッシュメモリ上にロードされた
データが、別の配列の参照により追い出されてしまい、
プログラムの実行性能が大幅に低下してしまう。このよ
うな現象をキャッシュスラッシングと呼ぶ。
【0055】図8に示すプログラムでは、まず、ライン
800で、カウンタmcが0に初期化される。
【0056】ラベルL0で指定されるループ801は、
キャッシュミスの発生をカウントアップしながら配列の
参照を行う。カウンタmcにカウントアップされる値が
多い場合は、スラッシングが発生している可能性があ
る。このプログラムでは、このような状態が検出された
場合、ライン802の処理によりスラッシングを回避す
るコードL1(スラッシング回避コード)に処理が分岐
する。
【0057】スラッシング回避のコードでは、ループ中
で参照する配列のアドレスをずらすことにより、アドレ
スの競合を回避する。図8に例示したプログラムでは、
スラッシング回避のため、一方の配列参照の添字を2だ
けずらしている。
【0058】図9は、スラッシング回避コードの生成ア
ルゴリズムを示すフローチャートである。
【0059】スラッシング回避コードの生成では、ま
ず、ループ集合を変数Lに求める(ステップ130
1)。続いて、変数Lに求められたループ集合が空集合
であるか否か確かめる(ステップ1302)。変数Lに
求められたループ集合が、空集合であれば、処理すべき
ループが存在しないことになる。従って、この場合は、
スラッシング回避コードの生成処理を終了する。
【0060】変数Lに求められたループ集合が空集合で
ない場合には、変数Lから要素を1つ取り出し変数lに
格納する(ステップ1303)。次に、ループlの中で
行われる参照がスラッシングを生じる可能性があるか否
かを確かめる。ループがスラッシングを生じる可能性が
あるか否かの判定には、公知の技術である配列競合解析
処理や、メモリ参照プロファイル技術などを利用するこ
とができる(ステップ1304)。
【0061】ステップ1304における判定の結果、ス
ラッシングを生じないことが保証できる場合には、ステ
ップ1302の処理に戻り、次のループについて処理を
継続する。
【0062】ステップ1304における判定の結果、ス
ラッシングを生じる可能性があると判断された場合は、
l′にlのスラッシング回避コードを生成する。スラッ
シング回避コードの生成には、キャッシュ競合を回避す
るために、公知の最適化処理を適用することができる。
そして、ループlの前にカウンタ初期化コード「mc=
0」を挿入し、ループl中に、スラッシングの検出コー
ド「if(mc>β) goto L1」を挿入する(ここで、“L
1”はスラッシング回避コードl′のラベルである)。
これにより、ループlの実行中にスラッシングの発生が
検出されると、l′に制御が移り、スラッシングを回避
することができる(ステップ1305)。
【0063】以上の処理の後、再びステップ1302の
処理に戻り、次のループについて同様の処理が実施され
る。
【0064】次に、図8に例示したプログラムの適用効
果について検討する。ここで、主記憶の参照サイクルを
100サイクル、4回のループ繰り返しでキャッシュブ
ロック上のデータが使用され、理想的にプリフェッチが
実行されている場合には、主記憶の参照サイクルは完全
に隠蔽されるものと仮定する。また、理想状態での1回
あたりのループ実行サイクルはIIであるとする。
【0065】配列Bに対するプリフェッチにより、配列
Aに対するデータがキャッシュ上から追い出される場合
を考えると、配列Aの参照において、4回に1度キャッ
シュミスが発生することになる。したがって、ループの
実行性能は「II+25」に増加する。図8に示したコー
ドでは、最初の数回の繰り返しでは競合が発生する。し
かし、ライン802によりこの競合が検出され、参照ア
ドレスを調節したループが実行される。これにより、こ
れ以降の繰り返し処理では、スラッシングが回避され、
ほぼ理想性能で命令が実行される。
【0066】以上説明した実施形態によれば、スレッド
の動的な切り替え、キャッシュスラッシングの回避など
の処理を実行時に動的選択し、プログラムの実行性能を
向上することができる。
【0067】図10は、キャッシュメモリの参照動作の
結果を取得するためにプロセッサが有する機構部の他の
実施形態における構成例を示す部分ブロック図である。
【0068】図10に示す回路は、基本的には、図2に
示した回路と同様の構成を有する。したがって、図2と
同様の機能を有する部分については、図2と同じ参照番
号を用いて図示されている。
【0069】本実施形態の回路は、レジスタ104に付
加フィールド201が設けられている点で、図2に示し
た回路と相違する。本実施形態では、キャッシュメモリ
の参照動作の結果を取得する際、付加フィールドに保持
された値が演算器106の入力とされ、演算器106の
出力が、付加フィールド201に入れられる。
【0070】この場合、付加フィールド201に入れら
れた参照動作の結果を参照するためには、例えば、プロ
セッサの命令として、フィールド201を参照するため
の専用の命令を設けるか、あるいは、参照命令の一部と
して、参照先に付加フィールド201を指定可能な参照
命令を設ければよい。
【0071】このように、レジスタ104の付加フィー
ルド201にメモリ参照の結果を格納するようにした場
合、参照命令などにおいて、メモリ参照動作を格納する
レジスタを指定するフィールド(例えば、図4に示す命
令フォーマットにおけるフィールド803)が不要にな
る。したがって、本実施形態における回路構成は、プロ
セッサの命令フィールド長に制約がある場合に有効であ
る。
【0072】
【発明の効果】本発明によれば、メモリ参照動作の参照
を低いオーバヘッドで行うことができる。
【図面の簡単な説明】
【図1】本発明が適用された計算機システムの簡略化さ
れた構成例を示すブロック図である。
【図2】キャッシュメモリの参照動作の結果を汎用レジ
スタ上に保存するためにプロセッサが有する機構部の一
例を示す部分ブロック図である。
【図3】ロード命令の記述例を示す説明図である。
【図4】ロード命令の命令フォーマットの一例を示す説
明図である。
【図5】メモリ参照動作の結果の取得機能を適用したプ
ログラムのコンパイラ生成コードの一例を示すプログラ
ムリストである。
【図6】スレッドの切り替えによるスループットの向上
の様子を示すタイムチャートである。
【図7】スレッド切り替えコードの生成アルゴリズムを
示すフローチャートである。
【図8】複数のプリフェッチ間のアドレス競合による性
能低下を回避するプログラムの一例を示すプログラムリ
ストである。
【図9】スラッシング回避コードの生成アルゴリズムを
示すフローチャートである。
【図10】キャッシュメモリの参照動作の結果を取得す
るためにプロセッサが有する機構部の他の実施形態にお
ける構成例を示す部分ブロック図である。
【符号の説明】
103・・・比較器、104・・・レジスタファイル、105
・・・選択器、106・・・演算器、301・・・プロセッサ、
302・・・主記憶、303・・・バス、304・・・キャッシ
ュメモリ、305・・・演算器

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】外部に接続されるメモリに格納されたデー
    タを用いてプログラムにしたがった演算を行うプロセッ
    サにおいて、演算に使われるデータ、または演算結果の
    データを格納する少なくとも1つのレジスタを有するレ
    ジスタファイルと、前記メモリに格納されたデータの一
    部の写しを保持するためのキャッシュメモリと、参照命
    令によりアクセスされるデータが前記キャッシュメモリ
    に存在するか否か判定するヒット/ミス判定回路と、前
    記ヒット/ミス判定回路における判定結果と前記レジス
    タファイルから読み出されたデータとを入力して所定の
    演算を行う演算器とを有し、前記演算器による演算の結
    果が前記レジスタファイル内のレジスタに格納されるこ
    とを特徴とするプロセッサ。
  2. 【請求項2】前記メモリに格納されたデータを参照する
    参照命令であって、該参照命令によって参照されるデー
    タが前記キャッシュメモリに存在したか否かの結果を前
    記レジスタファイル内のレジスタに記録するための参照
    命令を有することを特徴とする請求項1記載のプロセッ
    サ。
  3. 【請求項3】前記参照命令は、前記結果を格納するレジ
    スタの指定を含むことを特徴とする請求項2記載のプロ
    セッサ。
  4. 【請求項4】前記演算器は、前記レジスタファイルから
    読み出されたデータと、前記判定結果との加算を行うこ
    とを特徴とする請求項3記載のプロセッサ。
  5. 【請求項5】前記演算器に入力される前記レジスタファ
    イルから読み出されたデータは、前記参照命令で指定さ
    れる前記結果を格納するレジスタから読み出されたデー
    タであることを特徴とする請求項4記載のプロセッサ。
  6. 【請求項6】前記ヒット/ミス判定回路の出力と、前記
    レジスタファイルから読み出されたデータとが入力さ
    れ、前記参照命令の実行時に、前記ヒット/ミス判定回
    路の出力を選択して前記演算器に与えるセレクタ回路を
    有することを特徴とする請求項3記載のプロセッサ。
  7. 【請求項7】前記レジスタは、汎用レジスタであること
    を特徴とする請求項6記載のプロセッサ。
  8. 【請求項8】前記レジスタは、実行される命令によりデ
    ータ処理に使用される前記レジスタファイル内のレジス
    タの付加フィールドとして設けられることを特徴とする
    請求項1乃至6のいずれかに記載のプロセッサ。
  9. 【請求項9】前記付加フィールドとして設けられた前記
    レジスタの値を参照するための命令を有することを特徴
    とする請求項8記載のプロセッサ。
  10. 【請求項10】入力されたプログラムから計算機により
    理解可能なプログラムコードを生成するプログラムのコ
    ンパイル方法において、入力されたプログラムを解析
    し、該解析結果に基づいて、キャッシュミスの発生によ
    り処理の遅延が生じる可能性のあるプログラムの部分を
    抽出し、抽出された部分に含まれるメモリ参照命令をメ
    モリ参照動作の結果を取得する参照命令に変換し、取得
    されたメモリ参照動作の結果に基づいて動的に実行する
    処理を選択するコードを生成することを特徴とするプロ
    グラムのコンパイル方法。
  11. 【請求項11】前記選択するコードは、スレッドの切り
    替えコードの呼び出しを行うコードであることを特徴と
    する請求項10記載のコンパイル方法。
  12. 【請求項12】前記プログラムの部分は、スラッシング
    の発生する可能性にある部分であって、前記コードは、
    スラッシングを回避するように当該部分の処理を変換し
    た処理への分岐コードであることを特徴とする請求項1
    0記載のコンパイル方法。
  13. 【請求項13】プログラムをコンピュータにより実行可
    能なコードにコンパイルするためにコンピュータにより
    実行されるコンパイルプログラムであって、入力された
    プログラムを解析する処理と、該解析処理の実行結果に
    基づいて、キャッシュミスの発生により処理の遅延が生
    じる可能性のあるプログラムの部分を抽出する処理と、
    抽出された部分に含まれるメモリ参照命令をメモリ参照
    動作の結果を取得する参照命令に変換する処理と、取得
    されたメモリ参照動作の結果に基づいて動的に実行する
    処理を選択するコードを生成する処理とを有するコンパ
    イラプログラムを保持した記録媒体。
JP2000200088A 2000-06-28 2000-06-28 メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法 Pending JP2002014868A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2000200088A JP2002014868A (ja) 2000-06-28 2000-06-28 メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法
US09/645,406 US6775740B1 (en) 2000-06-28 2000-08-25 Processor having a selector circuit for selecting an output signal from a hit/miss judgement circuit and data from a register file

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000200088A JP2002014868A (ja) 2000-06-28 2000-06-28 メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法

Publications (1)

Publication Number Publication Date
JP2002014868A true JP2002014868A (ja) 2002-01-18

Family

ID=18698006

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000200088A Pending JP2002014868A (ja) 2000-06-28 2000-06-28 メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法

Country Status (2)

Country Link
US (1) US6775740B1 (ja)
JP (1) JP2002014868A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011150691A (ja) * 2009-12-25 2011-08-04 Fujitsu Ltd 演算処理装置、情報処理装置及び制御方法
JP2016115213A (ja) * 2014-12-16 2016-06-23 富士通株式会社 情報処理装置、データ処理方法、およびデータ処理プログラム
JP2020534596A (ja) * 2017-09-19 2020-11-26 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation Set Table of Contents(TOC)Register命令

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060517A1 (en) * 2003-09-12 2005-03-17 Morrow Michael W. Switching processor threads during long latencies
US7389385B2 (en) * 2003-12-19 2008-06-17 Intel Corporation Methods and apparatus to dynamically insert prefetch instructions based on compiler and garbage collector analysis
US7457940B2 (en) * 2004-11-16 2008-11-25 International Business Machines Corporation System and method for managing data
JP5256948B2 (ja) * 2008-09-04 2013-08-07 富士通株式会社 キャッシュ論理検証装置、キャッシュ論理検証方法およびキャッシュ論理検証プログラム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5321823A (en) * 1988-07-20 1994-06-14 Digital Equipment Corporation Digital processor with bit mask for counting registers for fast register saves
US5201056A (en) * 1990-05-02 1993-04-06 Motorola, Inc. RISC microprocessor architecture with multi-bit tag extended instructions for selectively attaching tag from either instruction or input data to arithmetic operation output
US5774685A (en) * 1995-04-21 1998-06-30 International Business Machines Corporation Method and apparatus for biasing cache LRU for prefetched instructions/data based upon evaluation of speculative conditions
US5875294A (en) * 1995-06-30 1999-02-23 International Business Machines Corporation Method and system for halting processor execution in response to an enumerated occurrence of a selected combination of internal states
US6226738B1 (en) * 1997-08-01 2001-05-01 Micron Technology, Inc. Split embedded DRAM processor

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011150691A (ja) * 2009-12-25 2011-08-04 Fujitsu Ltd 演算処理装置、情報処理装置及び制御方法
JP2016115213A (ja) * 2014-12-16 2016-06-23 富士通株式会社 情報処理装置、データ処理方法、およびデータ処理プログラム
JP2020534596A (ja) * 2017-09-19 2020-11-26 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation Set Table of Contents(TOC)Register命令
JP7059361B2 (ja) 2017-09-19 2022-04-25 インターナショナル・ビジネス・マシーンズ・コーポレーション Set Table of Contents(TOC)Register命令

Also Published As

Publication number Publication date
US6775740B1 (en) 2004-08-10

Similar Documents

Publication Publication Date Title
US5941981A (en) System for using a data history table to select among multiple data prefetch algorithms
US7516306B2 (en) Computer program instruction architecture, system and process using partial ordering for adaptive response to memory latencies
US7293164B2 (en) Autonomic method and apparatus for counting branch instructions to generate branch statistics meant to improve branch predictions
US6061710A (en) Multithreaded processor incorporating a thread latch register for interrupt service new pending threads
JP4837305B2 (ja) マイクロプロセッサ及びマイクロプロセッサの制御方法
JP2810068B2 (ja) プロセッサシステム、コンピュータシステム及び命令処理方法
JP3871458B2 (ja) コンピュータ・システム
US20020144101A1 (en) Caching DAG traces
US6687812B1 (en) Parallel processing apparatus
JP6546584B2 (ja) 推論的ベクトル演算の実行を制御するためのデータ処理装置及び方法
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
US6772317B2 (en) Method and apparatus for optimizing load memory accesses
WO2001067239A2 (en) Method and apparatus for facilitating exception handling using a conditional trap instruction
EP0742517B1 (en) A program translating apparatus and a processor which achieve high-speed execution of subroutine branch instructions
US7290255B2 (en) Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware
KR100316710B1 (ko) 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치
US20040117606A1 (en) Method and apparatus for dynamically conditioning statically produced load speculation and prefetches using runtime information
US6735687B1 (en) Multithreaded microprocessor with asymmetrical central processing units
JP2002014868A (ja) メモリ参照動作検出機構を有するマイクロプロセッサおよびコンパイル方法
KR100431975B1 (ko) 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템
WO2000075770A1 (en) Method and apparatus for providing finer marking granularity for fields within objects
US7584464B2 (en) Software processing method and software processing system
KR100498486B1 (ko) 쓰레드 바이너리 컴파일러에 의하여 프로그램에서 여러개의 쓰레드를 다이내믹하게 추출하는 컴퓨터 시스템 및그 동시 다중 쓰레딩 방법
US6668306B2 (en) Non-vital loads
JP3765111B2 (ja) 分岐登録命令を有するプロセッサ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040218

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20060418

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060621

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060627

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20061024