説明

プログラムの命令を実行する装置および命令をキャッシュするシステム

【課題】キャッシュ・メモリに命令をキャッシュする場合における保持内容の冗長さを減少させ、効率の良いキャッシュ・システムを実現する。
【解決手段】命令フェッチ・ユニット10と、命令キャッシュ20と、命令とこの命令が格納されたメイン・メモリ上における1または複数のアドレスとを関連付けて保持するマクロ・キャッシュ部30と、命令キャッシュ20におけるキャッシュ・ヒットの頻度が高い命令をマクロ・キャッシュ部30に保持させるマクロ登録判断部40と、を備える。マクロ・キャッシュ部30は、マクロ登録判断部40により保持するように指示された命令と同一の命令を既に保持している場合は、その命令を指定するアドレスを、既に保持しているその命令と関連付けて保持し、マクロ登録判断部40により保持するように指示された命令と同一の命令を保持していない場合は、その命令とその命令を指定するアドレスとを関連付けて保持する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、処理装置(プロセッサ)およびそのキャッシュ・システムに関し、特に命令を保持(キャッシュ)するキャッシュ・システムに関する。
【背景技術】
【0002】
コンピュータにおいて、処理速度を向上させる手段として、キャッシュ・メモリを設けることが一般的に行われている。キャッシュ・メモリは、アクセス速度の高速なメモリであり、メイン・メモリから読み出したデータをキャッシュ・メモリに一時的に保持(キャッシュ)する。処理装置(プロセッサ)は、取得しようとするデータがキャッシュ・メモリに存在している場合には、アクセス速度の遅いメイン・メモリにアクセスすることなくキャッシュ・メモリからデータを取得する。
【0003】
処理装置が使用するキャッシュ・メモリとしては、通常、プログラムの命令を保持する命令キャッシュ(インストラクション・キャッシュ)と、処理対象のデータを保持するデータ・キャッシュとが用意される。キャッシュ・メモリは、キャッシュ・ラインと呼ばれる単位でデータを保持する。命令キャッシュの場合、保持されるデータは命令列(Instructions)である。
【0004】
ところで、プロセッサの実行コードは、キャッシュ・ラインのサイズ程度の短い命令列で見ると、同じコード列になる場合が多い。例えば、タスク切り替え時のレジスタの退避命令や、インライン展開されたコード等は、同じコード列になり易い。このため、命令キャッシュは、同じ命令列が多重に保持され、キャッシュ内容が冗長になる場合が多い(例えば、非特許文献1、2参照)。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】Marios Kleanthous他、「Dynamically Detecting Cache-Content-Duplication in Instruction Caches」、Department of Computer Science University of Cyprus、February 2007、TR-07-03、[URL]http://www.cs.ucy.ac.cy/carch/xi/trs/tr-07-03.pdf
【非特許文献2】Marios Kleanthous他、「The Duplication of Content in Instruction Caches and its Performance Implications」、Department of Computer Science University of Cyprus、January 2005、CS-TR-01-2005、[URL] http://www.cs.ucy.ac.cy/carch/xi/trs/Cache_Content_Duplication-tr.pdf
【発明の概要】
【発明が解決しようとする課題】
【0006】
命令キャッシュは、キャッシュ・ラインにおいて同じ命令列が多重に保持(キャッシュ)されることにより、保持した内容が冗長になる場合が多い。
そこで、本発明は、キャッシュ・メモリに命令を保持(キャッシュ)する場合における保持内容の冗長さを減少させ、効率の良いキャッシュ・システムを実現することを目的とする。
【課題を解決するための手段】
【0007】
上記の目的を達成するため、本発明は、次のような装置として実現される。この装置は、プログラムの命令を読み込んで実行する装置であって、メイン・メモリ上のアドレスにより指定した命令を読み込む命令フェッチ・ユニットと、この命令フェッチ・ユニットにより読み込まれた命令を保持する第1のキャッシュ・メモリと、命令とこの命令が格納されたメイン・メモリ上における1または複数のアドレスとを関連付けて保持し、命令フェッチ・ユニットから取得したアドレスに基づき、アドレスに関連付けられた命令を特定する第2のキャッシュ・メモリと、第1のキャッシュ・メモリに保持された命令のうち、命令フェッチ・ユニットにより読み込まれた回数が予め定められた閾値を超えた命令を、第2のキャッシュ・メモリに保持させる、判断部と、命令フェッチ・ユニットが読み込もうとする命令が第1のキャッシュ・メモリおよび第2のキャッシュ・メモリのいずれにも保持されている場合に、命令の読み込み元として第2のキャッシュ・メモリを選択する選択部と、を備える。
そして、第2のキャッシュ・メモリは、判断部により保持するように指示された命令と同一の命令を既に保持している場合は、その命令を指定するアドレスを、既に保持しているその命令と関連付けて保持し、判断部により保持するように指示された命令と同一の命令を保持していない場合は、その命令とその命令を指定するアドレスとを関連付けて保持する。
また、第2のキャッシュ・メモリに保持された命令と同一のアドレスにおける命令は、第1のキャッシュ・メモリから消去される。
【0008】
さらに好適には、第2のキャッシュ・メモリは、SRAM(Static Random Access Memory)にて構成される。
【0009】
また、上記の目的を達成する他の本発明は、次のようなシステムとして実現される。このシステムは、プログラムの命令をキャッシュするシステムにおいて、アドレスを指定されてメイン・メモリから読み込まれた命令をキャッシュする第1のキャッシュ手段と、この第1のキャッシュ手段にキャッシュされた命令のうち、所定の条件を満足する命令をキャッシュする第2のキャッシュ手段と、読み込まれる対象の命令が第1のキャッシュ手段および第2のキャッシュ手段のいずれにもキャッシュされている場合に、この命令の読み込み元を選択する選択手段と、を備える。そして、第2のキャッシュ手段は、命令とこの命令が格納されたメイン・メモリ上における1または複数のアドレスとを関連付けて保持し、読み込み手段から取得したアドレスに基づき、アドレスに関連付けられた命令を特定する。
【0010】
より詳細には、第2のキャッシュ手段は、キャッシュしようとする命令と同一の命令を既に保持している場合は、この命令を指定するアドレスを、既に保持している命令と関連付けて保持し、キャッシュしようとする命令と同一の命令を保持していない場合は、この命令とこの命令を指定するアドレスとを関連付けて保持する。
【0011】
また、より好適には、第2のキャッシュ手段は、第1のキャッシュ手段にキャッシュされた命令のうち、読み込み要求に対してヒットした回数が予め定められた閾値を超えた命令をキャッシュする。
さらに好適には、第2のキャッシュ手段にキャッシュされた命令と同一のアドレスにおけるこの命令は、第1のキャッシュ手段から消去される。
そして、さらに好適には、選択手段は、読み込まれる対象の命令が第1のキャッシュ手段および第2のキャッシュ手段のいずれにもキャッシュされている場合に、第2のキャッシュ手段から読み込むことを選択する。
【発明の効果】
【0012】
本発明によれば、キャッシュ・メモリに命令を保持(キャッシュ)する場合における保持内容の冗長さを減少させ、効率の良いキャッシュ・システムを実現することができる。
【図面の簡単な説明】
【0013】
【図1】本実施形態によるキャッシュ・システムの構成例を示す図である。
【図2】本実施形態のマクロ・キャッシュ部の構成例を示す図である。
【図3】本実施形態の命令判断部を実現する論理回路の構成例を示す図である。
【図4】本実施形態の命令判断部の動作例を示すフローチャートである。
【図5】本実施形態のマクロ登録判断部を実現する論理回路の構成例を示す図である。
【図6】本実施形態のマクロ登録判断部の動作を示すフローチャートである。
【図7】本実施形態における命令読み込み時のCPUの動作を示すフローチャートである。
【発明を実施するための形態】
【0014】
以下、添付図面を参照して、本発明の実施形態について詳細に説明する。
プロセッサの実行コードは、JIT(Just In Time)のような特殊な例外を除き、メイン・メモリ上での書き換えが発生せず、命令を格納するためにアロケートされたアドレスが変わることもない。すなわち、メイン・メモリ上のアドレスに対して命令が一意に決まる。これに基づき、本実施形態は、アドレスに関連づけされたマクロとして命令列を特定するキャッシュ・システムを実現する。なお、本実施形態では、従来の命令キャッシュ(キャッシュ・メモリ)を用いたキャッシュ・システムに対する付加的な構成として、上記のマクロによるキャッシュ・システムを構成する場合を例として説明する。
【0015】
<システム構成>
図1は、本実施形態によるキャッシュ・システムの構成例を示す図である。
図1に示す構成例において、処理装置(プロセッサ)であるCPU(Central Processing Unit)100は、チップ上のバス(オン・チップ・バス)200に接続されている。図示のように、本実施形態のCPU100は、命令フェッチ・ユニット10と、第1のキャッシュ手段としての命令キャッシュ20とを備える。また、CPU100は、第2のキャッシュ手段として、マクロ・キャッシュ部30と、マクロ登録判断部40とを備え、さらに読み込み対象選択部50とを備える。なお、図1には、CPU100の構成のうち、本実施形態に関わる構成のみを記載している。
【0016】
命令フェッチ・ユニット10は、CPU100がプログラムの処理を実行するために命令を読み込む(フェッチする)。命令の取得は、取得しようとする命令のメイン・メモリ(図示せず)上のアドレスを指定することによって行われる。命令フェッチ・ユニット10は、取得しようとする命令が、命令キャッシュ20に保持(キャッシュ)されているか、またはマクロ・キャッシュ部30にマクロ31(後述)として登録されている場合(キャッシュ・ヒットに相当)には、これらから命令を取得する。一方、取得しようとする命令が命令キャッシュ20にもマクロ・キャッシュ部30にも存在しない場合(キャッシュ・ミスに相当)には、メイン・メモリにアクセスして命令を取得する。
【0017】
命令キャッシュ20は、一般的なキャッシュ・メモリにおける命令キャッシュである。すなわち、CPU100が処理を実行するためにメイン・メモリから命令(命令列)を読み込むと、読み込まれた命令(命令列)は命令キャッシュ20に保持され、次にCPU100が同様の処理を実行する際に当該命令が命令キャッシュ20から読み込まれる。命令キャッシュ20としては、例えば連想メモリ(Content Addressable Memory;CAM)をタグとして使ったSRAMが用いられる。
【0018】
マクロ・キャッシュ部30は、命令フェッチ・ユニット10がフェッチする命令列を、メイン・メモリ上の当該命令列のアドレスと関連付けたマクロ31として保持(キャッシュ)する。このマクロ31は、キャッシュ対象の命令列ごとに作成される。マクロ・キャッシュ部30には、命令キャッシュ20に保持された命令のうち、マクロ登録判断部40により登録対象とされた命令列が保持される。マクロ・キャッシュ部30およびマクロ31の詳細については後述する。
【0019】
マクロ登録判断部40は、命令キャッシュ20に保持されている命令列をマクロ・キャッシュ部30に登録するか否かを判断する。本実施形態において、マクロ登録判断部40は、命令キャッシュ20における命令列ごとのキャッシュ・ヒットの頻度(命令フェッチ・ユニット10により読み込まれる頻度)に基づいて、命令列をマクロ・キャッシュ部30に登録するか否かを判断する。マクロ登録判断部40の機能および動作の詳細については後述する。
【0020】
読み込み対象選択部50は、同一の命令列が命令キャッシュ20とマクロ・キャッシュ部30の両方に保持されている場合に、どちらから読み込むかを選択する。本実施形態では、命令フェッチ・ユニット10が読み込もうとする命令列がマクロ・キャッシュ部30に保持されている場合は、マクロ・キャッシュ部30から命令列を読み込む。具体的には、例えば、命令フェッチ・ユニット10が読み込もうとする命令列をマクロ・キャッシュ部30が保持している場合に、マクロ・キャッシュ部30が、マクロ・キャッシュ部30からの読み込みを選択するように読み込み対象選択部50へ指示する。
【0021】
<マクロ・キャッシュ部30の構成>
図2は、マクロ・キャッシュ部30の構成例を示す図である。
図2に示すように、マクロ・キャッシュ部30は、複数(図示の例ではn個)のマクロ31を含む。個々のマクロ31は、1つの命令列とこの命令列に関連付けられたアドレスとを保持するマクロ保持手段31aと、マクロ31にアドレスを登録するための命令判断部32とを備える。命令判断部32の機能および動作の詳細については後述する。
【0022】
マクロ保持手段31aには、上記のように、命令列とこの命令列に関連付けられたアドレスとが保持される。このマクロ保持手段31aは、一つの命令列に対して、複数のアドレスを関連付けて保持することができるように構成される。命令列およびアドレスを保持する記憶手段(メモリ)としては、一般的なキャッシュ・メモリに用いられる連想メモリではなく、例えばSRAM(Static Random Access Memory)が用いられる。
【0023】
また上記のように、マクロ31には、命令キャッシュ20に保持された命令列が、所定の条件を満足する場合に登録される。そのため、マクロ保持手段31aに保持される命令列のサイズは、通常は、命令キャッシュ20のキャッシュ・ラインのサイズと等しくなる。ただし、マクロ保持手段31aに登録できる命令列のサイズは、このサイズに限定されない。システムの仕様等に応じて、他のサイズで命令列を保持するようにしても良い。マクロ・キャッシュ部30に設けられるマクロ31の数や、マクロ31における命令列に関連付けが可能なアドレスの数は、マクロ保持手段31aを実現する記憶手段の記憶容量やシステムの仕様等に基づいて決定される。
【0024】
図3は、命令判断部32を実現する論理回路の構成例を示す図である。
図3に示すように、命令判断部32は、比較対象の命令を選択するセレクタ32aと、選択された命令を比較するコンパレータ32bと、一致した命令の数を計数するカウンタ32cとを備える。
【0025】
セレクタ32aは、マクロ31のマクロ保持手段31aに保持されている命令列を構成する個々の命令(命令フェッチ・ユニット10がフェッチする命令単位)を、コンパレータ32bによる比較の対象とするために、先頭から順次選択する。
【0026】
コンパレータ32bは、命令フェッチ・ユニット10により命令キャッシュ20から読み出された命令列を取得する。そして、取得した命令列とセレクタ32aにより選択された命令とを比較する。
【0027】
カウンタ32cは、コンパレータ32bによる比較で一致した命令の数を計数し、その計数を元にセレクタ32aにどの命令と比較するかを指示する。カウンタ32cの初期値は「1」であり、マクロ保持手段31aに登録されている命令列を構成する命令の数「m」まで計数する。例えば、命令コードが1バイトで、キャッシュ・ラインのサイズが32バイトであれば、m=32である。
【0028】
図4は、命令判断部32の動作例を示すフローチャートである。
図4を参照すると、命令判断部32は、まず、命令フェッチ・ユニット10が取得しようとする命令が命令キャッシュ20においてヒットした場合に、命令キャッシュ20から読み出された命令を取得する(ステップ401、402)。そして、命令判断部32は、セレクタ32aにより、マクロ保持手段31aに保持されている命令列のうち先頭の命令を比較対象として選択する(ステップ403)。次に、命令判断部32は、コンパレータ32bにより、ステップ402で取得した命令とステップ403で選択した命令とを比較する(ステップ404)。比較した命令が一致しない場合は、処理を終了する(ステップ405)。
【0029】
ステップ404で比較した命令が一致した場合、命令判断部32は、カウンタ32cの値を調べる(ステップ405、406)。カウンタ32cの値が「m」でなければ、命令判断部32は、カウンタ32cの値を1加算する(ステップ407、408)。そして、命令判断部32は、セレクタ32aにより、マクロ保持手段31aに保持されている命令列を構成する命令のうち次の命令を選択し(ステップ409)、命令キャッシュ20から次の命令が読み出されるのを待つ(ステップ410)。命令キャッシュ20から次の命令が読み出されたならば、命令判断部32は、ステップ404以降の処理を繰り返す。
【0030】
ステップ406、407で、カウンタ32cの値が「m」である場合、命令キャッシュ20から読み出されたm個の命令の組(命令列)が、マクロ保持手段31aに保持されている命令列と一致したことを意味する。そこで、命令判断部32は、一致した命令列を構成する命令のうち、最初に命令キャッシュ20においてヒットした命令のアドレスを、マクロ保持手段31aに登録する(ステップ407、411)。そして、マクロ保持手段31aに登録した命令列を命令キャッシュ20から消去する(ステップ411)。
【0031】
<マクロ登録判断部40の構成>
図5は、マクロ登録判断部40を実現する論理回路の構成例を示す図である。
図5に示すように、マクロ登録判断部40は、判断対象となるアドレスを取り込むためのセレクタ40aと、取り込んだアドレスの出現頻度を調べるためのコンパレータ40bおよびアドレス履歴テーブル40cとを備える。
【0032】
セレクタ40aは、命令フェッチ・ユニット10が取得しようとする命令が命令キャッシュ20においてヒットしたことを条件として、命令フェッチ・ユニット10により指定されたアドレス(取得しようとする命令のアドレス)を取り込む。
【0033】
コンパレータ40bは、セレクタ40aにより取り込まれたアドレスと、アドレス履歴テーブル40cに登録されているアドレスとを比較する。そして、セレクタ40aにより取り込まれたアドレスがアドレス履歴テーブル40cに登録されていなければ、そのアドレスを新規にアドレス履歴テーブル40cに登録する。一方、セレクタ40aにより取り込まれたアドレスがアドレス履歴テーブル40cに登録されている場合、コンパレータ40bは、そのアドレスが命令フェッチ・ユニット10による取得対象となった回数を示すフラグ・データ(図5の「F」)を更新する。
【0034】
アドレス履歴テーブル40cは、以前に命令フェッチ・ユニット10が取得しようとした命令のアドレスと、そのアドレスが命令フェッチ・ユニット10による取得対象となった回数を示すフラグ・データとを含むテーブルである。コンパレータ40bによる比較の結果、セレクタ40aにより取り込まれたアドレスがアドレス履歴テーブル40cに登録されていなければ、そのアドレスが新規に登録される。一方、コンパレータ40bによる比較の結果、セレクタ40aにより取り込まれたアドレスが既にアドレス履歴テーブル40cに登録されていれば、そのアドレスのフラグ・データの値が1加算される(更新)。このアドレス履歴テーブル40cは、例えば、マクロ31のマクロ保持手段31aと共通のSRAMに記憶される。アドレス履歴テーブル40cに登録可能なアドレスおよびフラグ・データの数(エントリ数)は、アドレス履歴テーブル40cを記憶する記憶手段の記憶容量やシステムの仕様等に基づいて決定される。
【0035】
図6は、マクロ登録判断部40の動作を示すフローチャートである。
図6を参照すると、マクロ登録判断部40は、まず、命令フェッチ・ユニット10が取得しようとする命令が命令キャッシュ20においてヒットした場合に、セレクタ40aにより、命令フェッチ・ユニット10が指定したアドレス(取得しようとする命令のアドレス)を取り込む(ステップ601、602)。
【0036】
次に、マクロ登録判断部40は、コンパレータ40bにより、ステップ602で取得したアドレスがアドレス履歴テーブル40cに登録されているか否かを判断する(ステップ603)。ステップ602で取得したアドレスがアドレス履歴テーブル40cに登録されていない場合、次にマクロ登録判断部40は、アドレス履歴テーブル40cに登録可能な数のアドレスが既に登録されている(Table full)か否かを判断する(ステップ604)。そして、アドレス履歴テーブル40cに空きがあるならば、ステップ602で取得したアドレスをアドレス履歴テーブル40cに登録する(ステップ605)。
【0037】
また、アドレス履歴テーブル40cに空きがない場合、マクロ登録判断部40は、既にアドレス履歴テーブル40cに登録されているアドレスのうちで、特定のアドレスを消去してテーブルの空きエントリを確保する(ステップ606)。そして、ステップ602で取得したアドレスをアドレス履歴テーブル40cに登録する(ステップ605)。なお、アドレス履歴テーブル40cから消去するアドレスは、最も古いアドレス(最先に登録されたアドレス)、フラグ・データの更新のない期間が最も長いアドレス、登録されてから一定期間が経過したフラグ・データの更新回数が一定以下であるアドレス等、予め定められた条件に従って特定すれば良い。
【0038】
一方、ステップ602で取得したアドレスがアドレス履歴テーブル40cに登録されている場合、マクロ登録判断部40は、そのアドレスのフラグ・データの値を1加算する(ステップ607)。そして、更新後のフラグ・データの値が予め設定された閾値に達したか否かを判断する(ステップ608)。ここで、閾値の値は、システムの仕様等に応じて適当に設定される。
【0039】
フラグ・データが閾値に達していない場合は、マクロ登録判断部40による処理が終了し、命令キャッシュ20における次のキャッシュ・ヒットを待つ。一方、フラグ・データが閾値に達した場合、マクロ登録判断部40は、そのアドレスをマクロ31として登録するように、マクロ・キャッシュ部30に指示する(ステップ609)。
【0040】
マクロ・キャッシュ部30は、マクロ登録判断部40からの指示を受け付けると、マクロ31の登録処理を行う。すなわち、各マクロ31において、図4に示した命令判断部32による処理が行われる。そして、処理対象となったアドレスに対応する命令列が、既にマクロ31として登録されている場合、そのマクロ31にアドレスが追加登録される。一方、処理対象となったアドレスに対応する命令列がマクロ31として登録されていない場合は、その命令列に関するマクロ31が新たに作成される。
【0041】
<キャッシュ・システムの動作>
次に、上記のように構成されたキャッシュ・システムを備えたCPU100における、命令フェッチ・ユニット10による命令読み込み時の動作について説明する。
図7は、命令読み込み時のCPU100の動作を示すフローチャートである。
命令フェッチ・ユニット10は、実行しようとする命令を読み込む場合、その命令のメイン・メモリ上におけるアドレスを指定する。このアドレスの情報は、命令フェッチ・ユニット10から命令キャッシュ20、マクロ・キャッシュ部30およびマクロ登録判断部40に供給される。これにより、命令キャッシュ20、マクロ・キャッシュ部30およびマクロ登録判断部40は、読み込み対象の命令を特定するアドレスを取得する(ステップ701)。
【0042】
命令キャッシュ20およびマクロ・キャッシュ部30は、取得したアドレスに基づき、命令フェッチ・ユニット10が取得しようとする命令を保持(キャッシュ)しているか否かを判断する(ステップ702)。ここで、取得したアドレスの命令をマクロ・キャッシュ部30が保持していた場合、その命令を命令キャッシュ20が保持しているか否かに関わらず、マクロ・キャッシュ部30から命令フェッチ・ユニット10へ命令が読み込まれる(ステップ703、704)。これは、読み込み対象選択部50の選択による。
【0043】
また、取得したアドレスの命令をマクロ・キャッシュ部30が保持しておらず、命令キャッシュ20が保持していた場合、命令キャッシュ20から命令フェッチ・ユニット10へ命令が読み込まれる(ステップ703、705、706)。このとき、マクロ登録判断部40が、この命令をマクロ・キャッシュ部30に登録するか否かを判断する(図6を参照)。そして、マクロ・キャッシュ部30への登録条件(例えば、図6のステップ608に示した読み込み頻度)を満足するならば、マクロ・キャッシュ部30への登録が行われる(ステップ707、708)。ここで、登録対象の命令が、異なるアドレスに関連付けられて既にマクロ・キャッシュ部30に登録されている命令であれば、その命令を登録したマクロ31に、ステップ701で取得したアドレスが追加登録される(図4を参照)。一方、登録対象の命令がマクロ・キャッシュ部30に未登録であるならば、その命令のマクロ31が新たに作成されて、ステップ701で取得したアドレスが登録される。
【0044】
命令フェッチ・ユニット10が読み込もうとする命令が、マクロ・キャッシュ部30にも命令キャッシュ20にも保持されていない場合、命令フェッチ・ユニット10は、メイン・メモリにアクセスして、指定したアドレスの命令を読み込む(ステップ703、705、709)。この命令は、命令キャッシュ20に保持(キャッシュ)され(ステップ710)、次回の命令フェッチ・ユニット10による読み込みの際は、命令キャッシュ20から読み込まれる(ステップ705でYesとなる)。
【0045】
以上説明したように、本実施形態は、命令キャッシュ20に保持された命令のうち、所定の条件を満足する命令について、命令キャッシュ20とは別に用意されたキャッシュ手段であるマクロ・キャッシュ部30に登録して保持する。そして、マクロ・キャッシュ部30は、1つの命令と複数のアドレスとを関連付け可能なマクロ31により、メイン・メモリ上の異なるアドレスに格納された同一の命令を1つのマクロ31で管理する。一方、命令キャッシュ20では、従来と同様に、同一の命令であってもアドレスが異なれば個別に保持される。このため、メイン・メモリにおいて複数のアドレスに格納された同一の命令列が本実施形態のキャッシュ・システムにより保持される場合、マクロ・キャッシュ部30に登録されると、命令キャッシュ20に保持されるよりも冗長性が抑制される。
【0046】
例えば、32KB(ケーバイト)の命令キャッシュ20を実装し、命令キャッシュ20に保持される命令の冗長率(保持されている命令のうち、同一の命令が異なるアドレスで保持されている割合)が10%である場合を想定する。この冗長率10%は、非特許文献1、2に基づいて仮定した値である。本実施形態のマクロ・キャッシュ部30を設けない場合、命令キャッシュ20の実効キャッシュ・サイズは、概算で28.8KB(=32KB×0.9)である。一方、本実施形態のマクロ・キャッシュ部30を設けた場合、所定の条件を満たす命令列は、マクロ・キャッシュ部30に登録されて命令キャッシュ20から除かれる。そして、複数の相異なるアドレスに格納された重複する命令列は、マクロ・キャッシュ部30においては1つのマクロ31に登録される。そのため、本実施形態は、マクロ・キャッシュ部30を設けない場合と比較して、命令キャッシュ20の実効キャッシュ・サイズを、本来の記憶容量である32KBにより近づけることができ、キャッシュ効率を向上させることができる。
【0047】
また、本実施形態は、命令キャッシュ20に保持された命令の読み込み(キャッシュ・ヒット)頻度に基づいてマクロ・キャッシュ部30に登録する命令列を決定し、動的にマクロ31を作成する。このため、一度メイン・メモリから読み込まれた命令を直ちに保持する命令キャッシュ20や従来のキャッシュ・システムと比較して、再利用率の高い命令列をマクロ31として登録することができ、キャッシュ効率をさらに向上させることができる。
【0048】
また、本実施形態のマクロ・キャッシュ部30は、命令キャッシュ20とは異なる仕組みにより命令列を保持するため、通常のキャッシュ・メモリとして使用されるような連想メモリ(CAM)を使ったタグ方式ではなく、一般的なSRAMを用いて実現することができる。そのため、単純にキャッシュ・メモリの記憶容量を増やす場合と比較して、コスト(費用)の増加を抑制することができる。
【0049】
以上、本実施形態について説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。上記実施形態に、種々の変更または改良を加えたものも、本発明の技術的範囲に含まれることは、特許請求の範囲の記載から明らかである。
例えば、上記実施形態では、マクロ・キャッシュ部30に命令列を登録した場合に、直ちに命令キャッシュ20から対応する命令列を消去することとしたが、直ちに消去するのではなく、マクロ・キャッシュ部30に登録した後の所定のタイミングで消去するようにしても構わない。
【符号の説明】
【0050】
10…命令フェッチ・ユニット、20…命令キャッシュ、30…マクロ・キャッシュ部、31…マクロ、31a…マクロ保持手段、32…命令判断部、40…マクロ登録判断部、50…読み込み対象選択部

【特許請求の範囲】
【請求項1】
プログラムの命令を読み込んで実行する装置において、
メイン・メモリ上のアドレスにより指定した命令を読み込む命令フェッチ・ユニットと、
前記命令フェッチ・ユニットにより読み込まれた命令を保持する第1のキャッシュ・メモリと、
命令と当該命令が格納されたメイン・メモリ上における1または複数のアドレスとを関連付けて保持し、前記命令フェッチ・ユニットから取得したアドレスに基づき、当該アドレスに関連付けられた命令を特定する第2のキャッシュ・メモリと、
前記第1のキャッシュ・メモリに保持された命令のうち、所定の条件を満足する命令を前記第2のキャッシュ・メモリに保持させる、判断部と、
前記命令フェッチ・ユニットが読み込もうとする命令が前記第1のキャッシュ・メモリおよび前記第2のキャッシュ・メモリのいずれにも保持されている場合に、当該命令の読み込み元を選択する選択部と、
を備える、装置。
【請求項2】
前記第2のキャッシュ・メモリは、
前記判断部により保持するように指示された命令と同一の命令を既に保持している場合は、当該命令を指定する前記アドレスを、既に保持している当該命令と関連付けて保持し、
前記判断部により保持するように指示された命令と同一の命令を保持していない場合は、当該命令と当該命令を指定する前記アドレスとを関連付けて保持する、請求項1に記載の装置。
【請求項3】
前記判断部は、前記第1のキャッシュ・メモリに保持された命令のうち、前記命令フェッチ・ユニットにより読み込まれた回数が予め定められた閾値を超えた命令を、前記第2のキャッシュ・メモリに保持させる、請求項1または請求項2に記載の装置。
【請求項4】
前記第2のキャッシュ・メモリに保持された命令と同一のアドレスにおける当該命令は、前記第1のキャッシュ・メモリから消去される、請求項1乃至請求項3のいずれかに記載の装置。
【請求項5】
前記第2のキャッシュ・メモリは、SRAM(Static Random Access Memory)である、請求項1乃至請求項4のいずれかに記載の装置。
【請求項6】
前記選択部は、前記命令フェッチ・ユニットが読み込もうとする命令が前記第1のキャッシュ・メモリおよび前記第2のキャッシュ・メモリのいずれにも保持されている場合に、当該第2のキャッシュ・メモリから読み込むことを選択する、請求項1乃至請求項5のいずれかに記載の装置。
【請求項7】
プログラムの命令を読み込んで実行する装置において、
メイン・メモリ上のアドレスにより指定した命令を読み込む命令フェッチ・ユニットと、
前記命令フェッチ・ユニットにより読み込まれた命令を保持する第1のキャッシュ・メモリと、
命令と当該命令が格納されたメイン・メモリ上における1または複数のアドレスとを関連付けて保持し、前記命令フェッチ・ユニットから取得したアドレスに基づき、当該アドレスに関連付けられた命令を特定する第2のキャッシュ・メモリと、
前記第1のキャッシュ・メモリに保持された命令のうち、前記命令フェッチ・ユニットにより読み込まれた回数が予め定められた閾値を超えた命令を、前記第2のキャッシュ・メモリに保持させる、判断部と、
前記命令フェッチ・ユニットが読み込もうとする命令が前記第2のキャッシュ・メモリに保持されている場合に、当該命令の読み込み元として当該第2のキャッシュ・メモリを選択する選択部と、を備え、
前記第2のキャッシュ・メモリは、
前記判断部により保持するように指示された命令と同一の命令を既に保持している場合は、当該命令を指定する前記アドレスを、既に保持している当該命令と関連付けて保持し、
前記判断部により保持するように指示された命令と同一の命令を保持していない場合は、当該命令と当該命令を指定する前記アドレスとを関連付けて保持し、
前記第2のキャッシュ・メモリに保持された命令と同一のアドレスにおける当該命令は、前記第1のキャッシュ・メモリから消去される、装置。
【請求項8】
プログラムの命令をキャッシュするシステムにおいて、
メイン・メモリ上のアドレスを指定されて当該メイン・メモリから読み込まれた命令をキャッシュする第1のキャッシュ手段と、
前記第1のキャッシュ手段にキャッシュされた命令のうち、所定の条件を満足する命令をキャッシュする第2のキャッシュ手段と、
読み込まれる対象の命令が前記第1のキャッシュ手段および前記第2のキャッシュ手段のいずれにもキャッシュされている場合に、当該命令の読み込み元を選択する選択手段と、を備え、
前記第2のキャッシュ手段は、命令と当該命令が格納されたメイン・メモリ上における1または複数のアドレスとを関連付けて保持し、命令を読み込むために指定されたアドレスに基づき、当該アドレスに関連付けられた命令を特定する、システム。
【請求項9】
前記第2のキャッシュ手段は、
キャッシュしようとする命令と同一の命令を既に保持している場合は、当該命令を指定する前記アドレスを、既に保持している当該命令と関連付けて保持し、
キャッシュしようとする命令と同一の命令を保持していない場合は、当該命令と当該命令を指定する前記アドレスとを関連付けて保持する、請求項8に記載のシステム。
【請求項10】
前記第2のキャッシュ手段は、前記第1のキャッシュ手段にキャッシュされた命令のうち、読み込み要求に対してヒットした回数が予め定められた閾値を超えた命令をキャッシュする、請求項8または請求項9に記載のシステム。
【請求項11】
前記第2のキャッシュ手段にキャッシュされた命令と同一のアドレスにおける当該命令は、前記第1のキャッシュ手段から消去される、請求項8乃至請求項10のいずれかに記載のシステム。
【請求項12】
前記選択手段は、読み込まれる対象の命令が前記第1のキャッシュ手段および前記第2のキャッシュ手段のいずれにもキャッシュされている場合に、当該第2のキャッシュ手段から読み込むことを選択する、請求項8乃至請求項11のいずれかに記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2013−109588(P2013−109588A)
【公開日】平成25年6月6日(2013.6.6)
【国際特許分類】
【出願番号】特願2011−254280(P2011−254280)
【出願日】平成23年11月21日(2011.11.21)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
【復代理人】
【識別番号】100118201
【弁理士】
【氏名又は名称】千田 武
【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
【Fターム(参考)】