JP3693503B2 - 命令キャッシュへの書き込み機構を備えたプロセッサ - Google Patents
命令キャッシュへの書き込み機構を備えたプロセッサ Download PDFInfo
- Publication number
- JP3693503B2 JP3693503B2 JP20026698A JP20026698A JP3693503B2 JP 3693503 B2 JP3693503 B2 JP 3693503B2 JP 20026698 A JP20026698 A JP 20026698A JP 20026698 A JP20026698 A JP 20026698A JP 3693503 B2 JP3693503 B2 JP 3693503B2
- Authority
- JP
- Japan
- Prior art keywords
- cache
- instruction
- data
- write
- main memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、プロセッサに関し、特に、実行時に動的に機械語命令プログラムを生成して実行を行う仮想マシンインタプリタ等を実行するのに適したマイクロプロセッサに関する。
【0002】
【従来の技術】
従来のマイクロプロセッサでは、主記憶(メインメモリ)とCPUとの間に、高速な中間記憶装置として、キャッシュを設けることが多い。このキャッシュは、その構成上、データキャッシュと命令キャッシュを分離した非統合型キャッシュと、データキャッシュと命令キャッシュを統合した統合型キャッシュとに分類することができる。前者の非統合型キャッシュは、後者の統合型キャッシュと比較して、データキャッシュと命令キャッシュのそれぞれに、独立に高いデータ供給バンド幅を与えることができるので、一般に高い性能を得ることができる。このため、ハイエンドのマイクロプロセッサでは、非統合型のキャッシュが利用されることが多い。
【0003】
一方、このようなマイクロプロセッサで実行されるプログラムを記述するプログラミング言語として、Java(Javaは、米国 Sun Microsystems, Inc.の商標)やSmalltalkといったものが知られている。これらのプログラミング言語で記述されたプログラムは、バイトコードと呼ばれる仮想的な計算機の命令に一旦変換され、バイトコードは、通常、仮想マシンインタプリタと呼ばれるソフトウェアによって実行される。
【0004】
しかし、このような仮想マシンインタプリタによる実行は、仮想マシン命令の解釈実行などのオーバヘッドが大きい。従って、JavaやSmalltalkで記述されたプログラムは、CやFORTRANといった従来のコンパイラ型言語で記述された場合に比べて、一般に、その実行速度は低速になる。これに対して、例えば、L.P. Deutsch と A.M. Chiffmanによる ”Efficient Implementation of the Smalltalk-80 System”(In Proceedings of the 11th Annual ACM Symposium on Principles of Programming Languages pp.297-302, 1984)に示されているように、実行対象の仮想マシン命令列に対して、それと等価な処理を行う機械語命令を実行時に生成し、生成した機械語命令を直接実行することでインタプリタ実行の高速化を行う手法が用いられる。このような手法は、機械語命令を実行時に動的に生成することから動的コンパイル、または実行を行おうとした時点でコンパイルを行うことからJIT(ジャストインタイム:Just-In-Time)コンパイルと呼ばれ、Java仮想マシンの高速化などに利用されている。
【0005】
【発明が解決しようとする課題】
このような実行時に命令を動的に生成するJITコンパイル技術は、仮想マシンインタプリタなどの高速化には有効であるが、非統合型のキャッシュ機構を採用したマイクロプロセッサで利用することを考えた場合、実行時に生成された命令を、実行時に主記憶へ書き込むことが必要になることから、次のような問題が生じることになる。
【0006】
動的に生成された命令の主記憶への書き込みは、プロセッサから見た場合、通常のデータの書き込みと変わらないので、非統合型キャッシュを採用したプロセッサでは、データキャッシュを介して行われることになる。このため、生成された命令をデータキャッシュを介してメモリへ書き込んだ直後に、書き込んだ当該命令を実行しようとしても、命令キャッシュとデータキャッシュの整合性が保たれていないので、そのまま実行することができない。すなわち、命令キャッシュの更新が行われていないために、そのままでは予期しない命令を実行してしまう可能性がある。そこで、ほとんどのマイクロプロセッサでは、指定したデータキャッシュ上のデータを主記憶に書き戻したり、命令キャッシュ上のキャッシュブロックを無効化するための命令を備えている。そして、主記憶へ書き込んだ命令を実行する前に、このような命令を使って、書き込んだアドレスに対応する命令キャッシュ上のデータを破棄(無効化)するとともに、ライトバック(write-back)型のキャッシュであれば、変更が主記憶に反映されるように、書き込んだアドレスに対応するデータキャッシュ上のデータを主記憶に書き戻す。
【0007】
つまり、動的な命令の生成・実行処理は、以下のような流れで行われる。
【0008】
1.書き込み対象アドレス(以下、アドレスAという)に対応するデータキャッシュのキャッシュブロックへの、動的に生成された機械語命令の書き込み
2. アドレスAに対応する命令キャッシュのキャッシュブロックの破棄
3. アドレスAに対応するデータキャッシュのキャッシュブロックの主記憶への書き戻し(ライトバック型のキャッシュの場合)
4. 主記憶のアドレスAから命令キャッシュの対応するキャッシュブロックへの読み出し
5.命令キャッシュからの命令の読み出し及び実行
以上述べたように、非統合型キャッシュを採用したマイクロプロセッサにおいて、実行時に動的に命令を生成し、当該生成された命令を実行しようとすると、動的に生成された命令は、データキャッシュに書き込まれた後、主記憶へ書き出され、その後、命令キャッシュへ読み出す必要があるため、主記憶への書き込みや読み出しを伴うことになり、このことは、実行速度の低下要因となりうる。
【0009】
特に、プロセッサ内での命令レベル並列度や動作周波数が向上し、主記憶参照に要する時間で、多数の命令を処理可能なハイエンドマイクロプロセッサでは、主記憶参照に要するオーバヘッドにより動的な命令生成処理を行うプログラムの動作性能が低下してしまうといった問題が深刻化するおそれがある。
【0010】
なお、CやFORTRANといった従来の静的なコンパイラ型言語では、機械語命令への変換がプログラム実行前にあらかじめ行われ、実行時に動的に命令を生成することがないため、分離型のキャッシュ構成であっても、大きな問題とはならなかった。
本発明の目的は、仮想マシンインタプリタにおけるJITコンパイルのような、実行時に動的に機械語命令の生成を行う処理において、動的な命令生成時の主記憶参照によって生じる性能低下を低く押えることができるプロセッサを提供することにある。
【0011】
【課題を解決するための手段】
本発明に係るプロセッサは、命令セットの中に、所定のメモリ領域毎に、当該領域が、データキャッシュを介して書き込みを行う領域か、命令キャッシュを介して書き込みを行う領域かを指定することができる命令を有することを特徴とする。この場合、前記命令によって命令キャッシュを介して書き込みを行う領域として指定されたメモリ領域に対して、書き込みが指示された場合は、命令キャッシュを介して書き込みを行う。
【0012】
また、本発明に係る第2のプロセッサは、データキャッシュを介して書き込みを行うモードか、命令キャッシュを介して書き込みを行うモードであるかを表すフラグを備え、当該フラグが命令キャッシュを介して書き込みを行うモードであることを示している場合は、命令キャッシュを介して書き込みを行うことを特徴とする。この場合、命令セットの中に、前記フラグを操作する命令を有することが好ましい。
【0013】
また、本発明に係る第3のプロセッサは、命令セットの中に、命令キャッシュを介してメモリへの書き込みを行うことを指示する命令を有することを特徴とする。
【0014】
なお、上記第1から第3のプロセッサにおいて、命令キャッシュを介した書き込みが指示された場合、命令キャッシュとデータキャッシュの両方に書き込みを行うようにしてもよい。このようにすれば、データキャッシュに命令キャッシュの更新データのコピーが存在することになるので、命令キャッシュからメモリへの直接的な書き戻し経路を設けることなく、命令キャッシュにおいてキャッシュ溢れが生じた場合の更新データの主記憶への書き戻しが可能になる。
【0015】
更に、本発明に係る動的コンパイルの方法は、前述の第1から第3のプロセッサを使った動的コンパイルの方法であって、動的に生成した命令をメモリへ書き込む場合、命令キャッシュを介して書き込むようにすることを特徴とする。
【0016】
本発明によるプロセッサでは、命令キャッシュを介してメモリへの書き込みを行うことができるので、動的コンパイルによって、動的に生成した命令をメモリへ書き込む場合、命令キャッシュを介して書き込むことができ、主記憶参照の必要性が減り、仮想マシンインタプリタにおけるJITコンパイルのような、実行時に動的に機械語命令の生成を行う処理において、動的な命令生成時の主記憶参照によって生じる性能低下を低く押えることができる
【0017】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しつつ、詳細に説明する。
【0018】
図9は、本発明を実施する計算機システムの例を示す図である。仮想マシンインタプリタにおけるJITコンパイラなど実行時に命令生成処理を行うソフトウェアは、ディスク装置204から主記憶203に読み出され、プロセッサ201によって実行される。このソフトウェアにより生成される機械語命令は、高速な中間記憶装置であるキャッシュ202を介して主記憶203とプロセッサ201の間で読み書きされる。なお、ここでは、簡単のためメモリ階層をキャッシュと主記憶の2階層としているが、本発明は、複数のキャッシュ階層を持つマイクロプロセッサに対して適用することも可能である。
【0019】
図1は、本発明による非統合型キャッシュを採用したマイクロプロセッサの動作概要を説明する図である。本発明と対比するため、まず、非統合型キャッシュを採用した従来のマイクロプロセッサの動作について同図を使って説明する。非統合型キャッシュを採用した従来のマイクロプロセッサでは、CPU101が実行する命令は、主記憶104から命令キャッシュ102へ読み出され、CPU101へと受け渡される。このようにしてフェッチされた命令は、メモリユニット107を介して、命令デコーダ108に渡される。更に、当該命令は、命令デコーダ108でデコードされて、当該デコード結果に基づいて、ALU105やレジスタ106が制御されて、命令の実行が行われる。頻繁に実行される命令は、高速な中間記憶装置である命令キャッシュ102に保存されることにより、低速な主記憶104を参照する必要がなくなるため、高速な実行を行うことが可能になる。
【0020】
図1において、破線は、従来のマイクロプロセッサにおいて、動的命令生成処理での動的に生成された命令の流れを表す。また、実線は本発明における動的に生成された命令の流れを表している。なお、ここでの説明では、簡単のため、まず、キャッシュブロックの競合や容量不足による溢れが生じない場合について説明し、キャッシュブロックの溢れが発生する場合については後述する。
【0021】
同図の破線で示すように、従来の動的命令生成処理においては、ALU105によって実行時に動的に生成された命令は、レジスタ106に格納された後、メモリユニット107を介して、データキャッシュ103へ書き込まれる。データキャッシュ103がライトバック方式を採用している場合、この状態では、実行すべき命令がデータキャッシュ103上にのみ存在するので、当該命令が書き込まれたキャッシュブロックを主記憶104へ書き戻す。また、命令キャッシュ102上に当該書き込みを行ったアドレスに対応するキャッシュブロックが存在する可能性があるので、存在する場合には命令キャッシュ102上の当該ブロックを無効化する。これによって、動的に生成された命令の書き込みを行ったアドレスに対応するキャッシュブロックは、命令キャッシュ102上に存在しなくなるので、生成された命令を実行しようとした時点で、主記憶104から命令キャッシュ102上に命令が読み出され、メモリユニット107を介して命令デコーダ108へと受け渡され、デコード結果に従って、CPU101での命令実行が行われる。
【0022】
これに対して、本発明における動的命令生成処理での生成命令の流れでは、ALU105が動的に生成した命令は、レジスタ106に格納された後、メモリユニット107を介して、命令キャッシュ102に直接書き込まれる。そして、生成された命令を実行する場合には、命令キャッシュ102上に生成された命令が存在するため、メモリユニット107は、命令キャッシュ102から実行すべき命令を読み出し、読み出した命令を命令デコーダ108へ渡す。
【0023】
以上説明したように、従来のマイクロプロセッサでは、キャッシュ容量の余裕の有無に関わらず、データキャッシュ103に書き込んだ命令を一度高速なキャッシュメモリから低速な主記憶104へ書き込んで、再度命令キャッシュ102を介してCPU101へ読み出さねばならなかった。これに対して、本発明によるマイクロプロセッサでは、主記憶104を介することなく直接命令キャッシュ102上に書き込んだ命令を実行することができるので、動的に生成された命令の実行を高速化することができる。
【0024】
以上の説明では、キャッシュブロックの競合や容量不足によるキャッシュブロックの追い出しを考慮していなかった。実際には、キャッシュ容量は限られており、キャッシュブロックの競合は生じるため、追い出し時の処理を考慮する必要がある。そこで、以下ではキャッシュ追い出し時の処理を考慮した命令書き込み処理について説明する。
【0025】
キャッシュへの書き込み処理において、競合等によりキャッシュブロックを追い出す場合の処理は、キャッシュがライトスルー(write-through)方式を採用しているか、ライトバック方式を採用しているかによってその処理が異なる。
【0026】
ライトスルー方式の場合には、キャッシュへの書き込みと同時に主記憶への書き込みも行われているため、追い出し対象のキャッシュブロックを単に無効化するだけで良い。すなわち、本発明による命令キャッシュをライトスルー方式のキャッシュとして構成した場合は、命令キャッシュと主記憶の両方に、書き込み対象の命令が書き込まれるので、主記憶上に最新のデータが保存されていることになり、キャッシュブロックの追い出し時にはキャッシュブロックの内容を破棄すれば良い。
【0027】
一方、ライトバック方式の場合には、最新のデータはキャッシュ上のみに存在するので、更新データを含むキャッシュブロックの追い出し時には主記憶へのデータの書き戻し処理を行う必要がある。従来のプロセッサでは、CPUからキャッシュへのデータの書き込みはデータキャッシュに対してのみ行われていたため、キャッシュから主記憶へのデータの書き戻し処理はデータキャッシュだけでしか行われていなかった。本発明によるプロセッサでは、命令キャッシュに対する書き込みも行うので、ライトバック方式を採用した場合、命令キャッシュからの主記憶へのデータの書き戻し処理を考慮する必要がある。このような命令キャッシュからの主記憶へのデータの書き戻し処理には、命令キャッシュから直接主記憶への書き込みを可能とする方式と、従来通り主記憶への書き込みはデータキャッシュのみから行うようにする方式とが考えられる。以下では、各方式についてその実現例を示す。
【0028】
図2は、命令キャッシュから主記憶へキャッシュブロックを書き込み可能なようにアーキテクチャを拡張した場合の、動的に生成された命令の流れを表している。図2において、ALU105によって動的に生成され、レジスタ106に格納された命令は、メモリユニット107を介して命令キャッシュ102に書き込まれる。ここで、書き込み対象となるキャッシュブロック301に書き込みアドレスとは異なるアドレスに対応する命令が既に保持されている場合、そのキャッシュブロックを利用可能とする必要があるが、当該キャッシュブロック301の更新状態によってその処理が異なる。キャッシュブロック301が書き込みが行われていない状態(クリーン:clean)であれば、主記憶104上の内容と命令キャッシュ102上の内容は一致しているので、主記憶104への書き戻しは行わず、命令キャッシュ102上のキャッシュブロック301のデータを破棄する。一方、キャッシュブロック301が書き込みが行われた状態(ダーティ:dirty)であれば、命令キャッシュ102上のみに最新の命令が存在するので、まず、キャッシュブロック301を対応する主記憶上の領域302へ書き戻す。
【0029】
命令キャッシュ102上の元のデータの破棄または書き戻しが終了すると、動的に生成された命令の書き込み対象アドレスに対応した主記憶104上のデータブロック303をキャッシュブロック301へ読み込んで、メモリユニット107から受け渡された書き込み対象命令の書き込みを行う。これらの動作は、通常のライトバック型データキャッシュの動作と同様である。
【0030】
図3は、図2に示した命令キャッシュから主記憶へのキャッシュブロックの書き戻し機構を追加した場合の主記憶への書き込み処理の流れを示す図である。同図に示すように、処理を開始すると(S401)、まず、書き込みが命令キャッシュを介した書き込みか否かを判別する(S402)。あるデータ書き込み命令がデータキャッシュを介した書き込みか、命令キャッシュを介した書き込みかを指定・判断する方法については、後述する。
【0031】
判別の結果、当該書き込みがデータキャッシュを介したものであれば(S402:NO)、従来と同じデータキャッシュを介した書き込み処理を行い(S403)、処理を終了する(S408)。一方、命令キャッシュを介した書き込みであれば(S402:YES)、書き込み対象アドレスに対応するキャッシュブロックが命令キャッシュ上に存在するか否かを調べる(S404)。その結果、書き込み対象アドレスに対応するキャッシュブロックが命令キャッシュ上に存在しない場合は(S404:NO)、続けて、データキャッシュに書き込み対象アドレスに対応するキャッシュブロックが存在するか否かを調べ、そのようなキャッシュブロックが存在し、データキャッシュの当該キャッシュブロックがダーティ状態であれば当該ブロックを主記憶に書き出し(S405)、書き込み対象のアドレスに対応したブロックを命令キャッシュに読み出す(S406)。これにより、命令キャッシュ上に書き込み対象アドレスのキャッシュブロックが確保されるので、命令キャッシュの当該ブロックに動的に生成された命令を書き込み(S407)、処理を終える(S408)。一方、書き込み対象アドレスに対応するキャッシュブロックが命令キャッシュ上に存在する場合は(S404:YES)、命令キャッシュ上に書き込み対象アドレスのキャッシュブロックが既に確保されているので、そのまま、命令キャッシュに命令を書き込み(S407)、処理を終える(S408)。
【0032】
なお、命令書き込み対象アドレスに対応するキャッシュブロックがデータキャッシュ上に存在する場合は、命令キャッシュとの整合性を保つため、該当するデータキャッシュのデータブロックを破棄(無効化)するか、又は、命令キャッシュとともに、データキャッシュにも命令を書き込むようにすればよい。
【0033】
図4は、命令キャッシュ102から主記憶104へ直接書き込みを行う機構を有しない場合の、動的に生成された命令の流れを表している。この場合、命令キャッシュから主記憶への直接的な書き戻し経路を設ける必要がないので、図2に示したものに比べて、従来のマイクロプロセッサに対するハードウェア的な変更量が少なくてすむ。
【0034】
図4に示すように、ALU105によって動的に生成され、レジスタ106に格納された命令は、メモリユニット107を介して命令キャッシュ102と、データキャッシュ103に書き込まれる。すなわち、データキャッシュ103上にも当該命令のコピーを持つこととする。
【0035】
このようにデータキャッシュ103上にも当該命令(に対応するキャッシュブロック)のコピーを持つのは、本実施形態では、命令キャッシュ102から主記憶104へのキャッシュブロックの書き戻しパスが存在しないため、命令キャッシュ102に対して動的に生成された命令の書き込みを行う際に、キャッシュ溢れが生じ、主記憶への書き戻しが必要になった場合、当該書き戻しをできるようにするためである。
【0036】
命令キャッシュ102への書き込みを行う際、キャッシュ溢れが生じ、主記憶への書き戻しが必要になった場合は、書き戻し対象となった命令キャッシュ上のブロック501を破棄するとともに、対応するデータキャッシュ103上のブロック502の更新状況を調べて、ダーティであれば、対応する主記憶104上の領域504に書き戻す。次に、書き込み対象アドレスに対応するブロック503を主記憶104から読み出し、命令キャッシュ102とデータキャッシュ103の両方に読み込む。そして、書き込み対象の命令を命令キャッシュ102上のブロック501と、データキャッシュ103上のブロック502へ書き込む。
【0037】
なお、命令キャッシュ102上のデータに対応して、データキャッシュ103上に確保されているキャッシュブロックは、データキャッシュへのデータの書き込みによる競合によって主記憶へ書き戻されることがあるが、その場合には、命令キャッシュ102上のキャッシュブロックの内容と主記憶104上のデータは一致しているので、特別な操作を行う必要はない。
【0038】
図5は、図4に示した命令キャッシュから主記憶へのキャッシュブロックの書き戻し機構を追加しない場合の主記憶への書き込み処理の流れを示す図である。同図に示すように、主記憶への書き込みを行う場合(S601)、まず、命令キャッシュを介した書き込みか否かのチェックを行う(S602)。書き込みが命令キャッシュを介した書き込みか否かの指定・判定方法については後述する。
【0039】
チェックの結果、書き込みが、命令キャッシュを介した書き込みでなければ(S602:NO)、通常のデータキャッシュを介した書き込み処理を行い(S603)、書き込み処理を終了する(S610)。
【0040】
一方、命令キャッシュを介した書き込みであれば(S602:YES)、まず、データキャッシュに書き込み対象アドレスに対応するブロックが存在するか否かを調べる(S604)。その結果、対応するブロックがデータキャッシュに存在しなければ(S604:NO)、データキャッシュに当該ブロックを読み出す(S605)。更に、命令キャッシュに書き込み対象アドレスに対応するブロックが存在するか否かを調べる(S606)。
【0041】
その結果、命令キャッシュに当該ブロックが存在しなければ(S606:NO)、続けて、データキャッシュの当該ブロックがダーティであるか否かを調べて、ダーティであれば主記憶に当該ブロックを書き戻す(S607)。次に、書き込み対象アドレスに対応するブロックを主記憶から命令キャッシュへ読み出す(S608)。これにより、主記憶、データキャッシュ、命令キャッシュの内容が一致するので、データキャッシュと命令キャッシュに書き込み対象の命令を書き込み(S609)、処理を終了する(S610)。
【0042】
一方、命令キャッシュに当該ブロックが存在すれば(S606:YES)、データキャッシュと命令キャッシュの両方にブロックが存在することになるので、データキャッシュと命令キャッシュに書き込み対象の命令を書き込み(S609)、処理を終了する(S610)。
【0043】
なお、上述した処理フローでは、データキャッシュに書き込み対象アドレスに対応するブロックが存在しなければ、主記憶からデータキャッシュへの読み出しを行っているが(S605)、命令キャッシュとデータキャッシュの間でデータの転送が可能であれば、命令キャッシュに対応するデータが存在する場合は、主記憶との間の転送は省略することができる。同様に、書き込み対象アドレスに対応するブロックを主記憶から命令キャッシュへ読み出しているが(S608)、命令キャッシュとデータキャッシュの間でデータの転送が可能で、データキャッシュに対応するデータが存在する場合は、主記憶との間の転送は省略し、命令キャッシュからコピーするように最適化することができる。
【0044】
次に、あるデータ書き込みがデータキャッシュを介した書き込みか、命令キャッシュを介した書き込みかを指定・判別する方法について説明する。このような方法として、例えば、以下の(a)〜(c)に示すようなものが考えられる。
【0045】
(a)ページなど所定のメモリ領域毎に、命令キャッシュ及びデータキャッシュのいずれを介して書き込みを行う領域かを指定できるようにし、書き込み対象のアドレスによって判別する方法。
【0046】
(b)CPUに内部フラグを設け、フラグの設定によって、命令キャッシュ及びデータキャッシュのいずれを介して書き込みを行うモードであるかを指定・判別する方法。
【0047】
(c)データ書き込み命令として、命令キャッシュを介したものと、データキャッシュを介したものとを分けて用意し、これらの命令を使い分けることで、指定・判別する方法。
【0048】
まず、上述した(a)の方法に対応するものとして、マイクロプロセッサの命令セットのなかに、メモリ領域毎に、データキャッシュを介して書き込みが行われる領域か、命令キャッシュを介して書き込みが行われる領域かを指定するための命令(例えば、「set-dwrite」及び「set-iwrite」)を設けた場合について説明する。プロセッサは、メモリに対する書き込みを実行する際、書き込み対象アドレスがいずれの領域に該当するのか調べて、その結果に応じて、命令キャッシュまたはデータキャッシュを介した書き込みを行う。
【0049】
命令「set-dwrite」は、そのオペランドによって指定されるアドレス領域(例えば、オペランドで指定されるアドレスから1ページ分)は、データキャッシュを介して書き込みが行われるべき領域であることを指定する命令であり、当該命令実行後は、指定されたアドレス領域に対する書き込みはデータキャッシュを介して行われるようになる。同様に、命令「set-iwrite」は、オペランドによって指定されたアドレス領域は、命令キャッシュを介して書き込みが行われるべき領域であることを指定する命令であり、当該命令実行後は、指定されたアドレス領域に対する書き込みは命令キャッシュを介して行われる。
【0050】
図6は、命令「set-dwrite」及び「set-iwrite」を設けた場合のハードウェア構成例を示す図である。これらの命令は、命令フェッチ・デコードユニット1001によりメモリからの読み出され、デコードされて、実行制御が行われる。命令「set-dwrite」又は命令「set-iwrite」が実行されると、命令キャッシュを介した書き込みかデータキャッシュを介した書き込みかを示すビットとともに、オペランドで指定されたアドレスが、方向テーブル1002に記憶される。
【0051】
そして、メモリへの書き込みを行う命令、例えば、ストア命令が実行され、データのストアを行う場合には、まず、ストア命令で指定されたアドレッシング・モードに従って、レジスタ1003の値とストア命令中で指定された即値(immediate)のいずれかをマルチプレクサ1004によって選択し、加算器1005で、レジスタ1003の値と演算して、データを格納する実効アドレスを生成する。そして、生成されたアドレスが、方向テーブル1002に存在するか否かを比較器1006により確認し、同時にそのアドレスに対して指定された書き込み対象キャッシュが命令キャッシュであるか否かを比較器1007で調べる。その結果、方向テーブル1002にストア・アドレスが存在し、かつ書き込み対象キャッシュが命令キャッシュであると指定されていた場合は、デマルチプレクサ1008及びデマルチプレクサ1009によって、書き込みアドレス、書き込みデータの供給先として、命令キャッシュ1011を選択し、書き込みを行う。一方、方向テーブル1002にストア・アドレスが存在しないか、又は、書き込み対象キャッシュが命令キャッシュであると指定されていない場合は、デマルチプレクサ1008及びデマルチプレクサ1009によって、書き込みアドレス、書き込みデータの供給先として、データキャッシュ1010を選択し、書き込みを行う。なお、比較器1006が比較対象とするビット数は、指定される領域の大きさによって、定まる。
【0052】
次に、上述した(b)の方法に対応するものとして、マイクロプロセッサの内部に、メモリに対する書き込みを、データキャッシュを介して行うモードであるか、命令キャッシュを介して行うモードであるかを表すフラグを設けるとともに、命令セットのなかにフラグ設定命令(例えば、「set-iwrite-flag」及び「reset-iwrite-flag」)を設けた場合について説明する。命令「set-iwrite-flag」及び「reset-iwrite-flag」は、CPUに設けられた内部フラグ(iwrite-flag)を制御(セット/リセット)するための命令であり、CPUは、このフラグの設定値に従って、命令キャッシュを介してデータの書き込みを行うか、データキャッシュを介してデータの書き込みを行うかを決定する。
【0053】
ここで、命令「set-iwrite-flag」は、命令キャッシュを介して書き込みが行われるように、内部フラグをセットする命令であり、当該命令実行後の書き込み命令はすべて命令キャッシュを介して行われる。これに対して、命令「reset-iwrite-flag」は、データキャッシュを介して書き込みが行われるように、内部フラグをリセットする命令であり、当該命令実行後の書き込みはすべてデータキャッシュを介して行われる。
【0054】
図7は、内部フラグ並びに命令「set-iwrite-flag」及び「reset-iwrite-flag」を設けた場合のハードウェア構成例を示す図である。命令「set-iwrite-flag」及び「reset-iwrite-flag」は、命令フェッチ・デコードユニット1101により、メモリから読み出され、デコードされ、実行制御が行われる。命令「set-dwrite-flag」又は「set-iwrite-flag」が実行されると、現在の書き込みモードを表すフラグが内部フラグ(iwrite-flag)1102に記憶される。
【0055】
そして、ストア命令等によりデータの書き込みを行う場合には、図6の場合と同様にして実効アドレスを、レジスタ1103、マルチプレクサ1104、加算器1105によって生成する。そして、デマルチプレクサ1106、1107では、フラグ1102の値に従ってアドレスおよびデータの供給先を選択し、データキャッシュ1109または命令キャッシュ1108へ書き込みを行う。
【0056】
最後に、上述した(c)の方法に対応するものとして、命令コードによって命令キャッシュを介してデータの書き込みを行うか、データキャッシュを介してデータの書き込みを行うかを指定・決定する場合について説明する。すなわち、マイクロプロセッサの命令セットのなかに、データ書き込み命令として、通常の、データキャッシュを介してデータの書き込みを行う命令(例えば、「write」)の他に、命令キャッシュを介してデータの書き込みを行う命令(例えば、「iwrite」)を用意し、ソフトウェア等は、これら2種の命令を適宜選択して使用することにより、主記憶への書き込みの際に介するキャッシュの選択を行う。
【0057】
命令「iwrite」が実行されると、オペランドで指定された実効アドレスに対して、オペランドで指定したレジスタ等に格納されたデータ(命令)を、命令キャッシュを介して書き込む。
【0058】
図8は、命令「iwrite」を設けた場合のハードウェア構成例を示す図である。命令「iwrite」は、命令フェッチ・デコードユニット1201により主記憶や命令キャッシュからの読み出され、デコードされ、実行制御が行われる。命令キャッシュを対象としたストア命令「iwrite」により、データのストアを行う場合には、まず、前述したのと同様にして、レジスタ1203、マルチプレクサ1204、加算器1205でアドレスを生成する。デマルチプレクサ1206、1207では、命令フェッチ・デコードユニット1201からの、当該命令が命令キャッシュを対象としたストア命令であることを表す出力信号1202によりデータの書き込み先として、命令キャッシュ1208を選択し、書き込みを行う。
【0059】
同様にデータキャッシュを対象としたストア命令「write」によりデータのストアを行う場合には、デマルチプレクサ1206、1207では命令フェッチ・デコードユニット1201からの出力信号1202によりアドレスおよびデータの供給先として、データキャッシュを選択し、データキャッシュ1209への書き込みを行う。
【0060】
以上説明したような、命令キャッシュへの書き込みをソフトウェア的に制御できる機構をマイクロプロセッサに設けることにより、主記憶とキャッシュ間(又は、上位キャッシュと下位キャッシュ間)の不要なデータの転送を減少させ、動的な命令生成を行うプログラムの性能を向上させることが可能となる。
【0061】
最後に、上述したような本発明によるマイクロプロセッサ上で実行される動的コンパイラについて説明する。本発明によるマイクロプロセッサでは、命令キャッシュへの書き込みをソフトウェア的に制御できるので、動的コンパイラは、プログラム実行時に動的に生成した命令を主記憶に格納する際、上述したいずれかの方法を使って、命令キャッシュを介して書き込むようにする。これ以外の動作は、従来の動的コンパイラの動作と同様でよい。このようにすれば、動的に生成した命令を主記憶に格納する場合の主記憶参照の必要性が減り、プログラムの高速実行が可能になる。
【0062】
【発明の効果】
以上、詳細に説明したように、本発明によれば、実行時に動的に機械語命令の生成を行うプログラムにおいて、生成した機械語命令を直接命令キャッシュへ書き込むことが可能となる。これにより、実行時に動的に機械語命令の生成を行うプログラムの実行の高速化が図れる。
【図面の簡単な説明】
【図1】 本発明による非統合型キャッシュのマイクロプロセッサの動作概要を説明する図である。
【図2】 命令キャッシュから主記憶への書き込みパスを設けたマイクロプロセッサにおける、動的に生成された命令の流れを示す図である。
【図3】 命令キャッシュから主記憶への書き込みパスを設けたマイクロプロセッサにおける、書き込み処理の流れを示す図である。
【図4】 命令キャッシュから主記憶への書き込みパスを有しないマイクロプロセッサにおける、動的に生成された命令の流れを示す図である。
【図5】 命令キャッシュから主記憶への書き込みパスを有しないマイクロプロセッサにおける、書き込み処理の流れを示す図である。
【図6】 所定のメモリ領域毎に、書き込み対象キャッシュを指定できる命令を設けたマイクロプロセッサのハードウェア構成例を示す図である。
【図7】 命令キャッシュを介して書き込むモードか、データキャッシュを介して書き込むモードかを指定する内部フラグを設けたマイクロプロセッサのハードウェア構成例を示す図である。
【図8】 命令キャッシュを介して書き込みを行う命令を設けたマイクロプロセッサのハードウェア構成例を示す図である。
【図9】 本発明が適用される計算機システムの例を示す図である。
【符号の説明】
101 CPU
102 命令キャッシュ
103 データキャッシュ
104 主記憶
105 ALU
106 レジスタ
107 メモリユニット
108 命令デコーダ
Claims (5)
- データキャッシュを介して書き込みを行うモードであるか、命令キャッシュを介して書き込みを行うモードであるかを表すフラグを備え、
当該フラグが命令キャッシュを介して書き込みを行うモードであることを示している場合は、命令キャッシュを介して書き込みを行う
ことを特徴とするプロセッサ 。 - 命令セットの中に、前記フラグを操作する命令を有することを特徴とする請求項1に記載のプロセッサ 。
- 命令セットの中に、命令キャッシュを介してメモリへの書き込みを行うことを指示する命令を有する
ことを特徴とするプロセッサ 。 - 命令キャッシュを介した書き込みが指示された場合、命令キャッシュとデータキャッシュの両方に書き込みを行う
ことを特徴とする請求項1乃至請求項3のいずれか一項に記載のプロセッサ 。 - 請求項1乃至請求項4のいずれか一項に記載のプロセッサを使った動的コンパイルの方法であって、
動的に生成した命令をメモリへ書き込む場合、命令キャッシュを介して書き込むようにする
ことを特徴とする動的コンパイルの方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP20026698A JP3693503B2 (ja) | 1998-07-15 | 1998-07-15 | 命令キャッシュへの書き込み機構を備えたプロセッサ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP20026698A JP3693503B2 (ja) | 1998-07-15 | 1998-07-15 | 命令キャッシュへの書き込み機構を備えたプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000029787A JP2000029787A (ja) | 2000-01-28 |
JP3693503B2 true JP3693503B2 (ja) | 2005-09-07 |
Family
ID=16421484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP20026698A Expired - Fee Related JP3693503B2 (ja) | 1998-07-15 | 1998-07-15 | 命令キャッシュへの書き込み機構を備えたプロセッサ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3693503B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2426082B (en) * | 2005-05-09 | 2007-08-15 | Sony Comp Entertainment Europe | Memory caching in data processing |
-
1998
- 1998-07-15 JP JP20026698A patent/JP3693503B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2000029787A (ja) | 2000-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3739491B2 (ja) | プリフェッチ命令を用いるハーバードアーキテクチャキャッシュメモリの調和したソフトウェア制御 | |
US9652230B2 (en) | Computer processor employing dedicated hardware mechanism controlling the initialization and invalidation of cache lines | |
US5577227A (en) | Method for decreasing penalty resulting from a cache miss in multi-level cache system | |
JP3816586B2 (ja) | 先取り命令を生成する方法とシステム | |
KR100264401B1 (ko) | 마이크로프로세서내의 메모리 종류 정보 처리 방법 및 장치 | |
US5958040A (en) | Adaptive stream buffers | |
US6456891B1 (en) | System and method for transparent handling of extended register states | |
US8806177B2 (en) | Prefetch engine based translation prefetching | |
JP3289661B2 (ja) | キャッシュメモリシステム | |
JP2000057054A (ja) | 高速アドレス変換システム | |
JPH0612327A (ja) | キャッシュメモリを有するデータプロセッサ | |
JPS6135584B2 (ja) | ||
EP0173981A2 (en) | Cache memory control circuit | |
US6718539B1 (en) | Interrupt handling mechanism in translator from one instruction set to another | |
JP2575598B2 (ja) | マルチプロセッサ・コンピュータ・システムのシステム・メモリの並行性を増大する方法およびシステム | |
KR100505695B1 (ko) | 동적으로 할당 또는 해제되는 버퍼를 가지는 캐쉬 메모리장치, 이를 구비한 디지털 데이터 처리 시스템 및 그 방법 | |
JP3506024B2 (ja) | 情報処理装置 | |
US8266379B2 (en) | Multithreaded processor with multiple caches | |
JP3973129B2 (ja) | キャッシュメモリ装置及びそれを用いた中央演算処理装置 | |
US6256710B1 (en) | Cache management during cache inhibited transactions for increasing cache efficiency | |
JP3693503B2 (ja) | 命令キャッシュへの書き込み機構を備えたプロセッサ | |
EP0101718B1 (en) | Computer with automatic mapping of memory contents into machine registers | |
US20020010837A1 (en) | Cache memory system and method of controlling cache memory | |
JPH08137748A (ja) | コピーバックキャッシュを有するコンピュータ及びコピーバックキャッシュ制御方法 | |
JP2003030046A (ja) | 命令キャッシュのプリフェッチ機構を備えたキャッシュ制御装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040827 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050125 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050325 |
|
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: 20050614 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050621 |
|
LAPS | Cancellation because of no payment of annual fees |