JP2001273137A - マイクロプロセッサ - Google Patents
マイクロプロセッサInfo
- Publication number
- JP2001273137A JP2001273137A JP2000088972A JP2000088972A JP2001273137A JP 2001273137 A JP2001273137 A JP 2001273137A JP 2000088972 A JP2000088972 A JP 2000088972A JP 2000088972 A JP2000088972 A JP 2000088972A JP 2001273137 A JP2001273137 A JP 2001273137A
- Authority
- JP
- Japan
- Prior art keywords
- cache
- subroutine
- prefetch
- value
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
(57)【要約】
【課題】 特定の命令が発行された場合に、キャッシュ
ミスによる性能低下を抑制できるマイクロプロセッサを
提供する。 【解決手段】 本発明のプロセッサは、命令バッファ/
キュー1と、実行ユニット2と、サブルーチンコール・
デコーダ3と、データキャッシュ制御ユニット4と、ad
diu命令を検出するAddiuデコーダ11と、プリフェッチ
制御部12とアダー13と、PAdrレジスタ14と、セレ
クタ15と、加算器16とを備えている。サブルーチン
コールがあった場合に、サブルーチンで使用する分だけ
スタックポインタを移動させ、サブルーチンで使用する
データをプリフェッチしてデータキャッシュ内のサブル
ーチン使用領域に格納しておくため、サブルーチンコー
ル時に発生しやすいスタックアクセスによるキャッシュ
ミスのペナルティを低減できる。
ミスによる性能低下を抑制できるマイクロプロセッサを
提供する。 【解決手段】 本発明のプロセッサは、命令バッファ/
キュー1と、実行ユニット2と、サブルーチンコール・
デコーダ3と、データキャッシュ制御ユニット4と、ad
diu命令を検出するAddiuデコーダ11と、プリフェッチ
制御部12とアダー13と、PAdrレジスタ14と、セレ
クタ15と、加算器16とを備えている。サブルーチン
コールがあった場合に、サブルーチンで使用する分だけ
スタックポインタを移動させ、サブルーチンで使用する
データをプリフェッチしてデータキャッシュ内のサブル
ーチン使用領域に格納しておくため、サブルーチンコー
ル時に発生しやすいスタックアクセスによるキャッシュ
ミスのペナルティを低減できる。
Description
【0001】
【発明の属する技術分野】本発明は、キャッシュメモリ
を備えたマイクロプロセッサに関し、特に、キャッシュ
ミスによる性能低下を抑制する技術に関する。
を備えたマイクロプロセッサに関し、特に、キャッシュ
ミスによる性能低下を抑制する技術に関する。
【0002】
【従来の技術】近年のマイクロプロセッサの高速化はめ
ざましく、外部メモリとプロセッサとの動作周波数の差
は広がる傾向にあり、このために外部メモリのアクセス
による性能低下がプロセッサの性能に大きな影響を与え
るようになってきた。このような問題を解決するため、
キャッシュメモリを内蔵もしくは付加する機構をもつプ
ロセッサが数多く発表されている。
ざましく、外部メモリとプロセッサとの動作周波数の差
は広がる傾向にあり、このために外部メモリのアクセス
による性能低下がプロセッサの性能に大きな影響を与え
るようになってきた。このような問題を解決するため、
キャッシュメモリを内蔵もしくは付加する機構をもつプ
ロセッサが数多く発表されている。
【0003】
【発明が解決しようとする課題】しかしながら、キャッ
シュミスを起こすと、アクセスに時間がかかる二次的な
キャッシュメモリや外部メモリからデータを取得しなけ
ればならなくなるため、キャッシュヒットした場合と比
較してかなり処理性能が低下してしまう。このようなキ
ャッシュミス時の処理性能の低下を抑制するため、プリ
フェッチ機能をもつプロセッサが提案されている。
シュミスを起こすと、アクセスに時間がかかる二次的な
キャッシュメモリや外部メモリからデータを取得しなけ
ればならなくなるため、キャッシュヒットした場合と比
較してかなり処理性能が低下してしまう。このようなキ
ャッシュミス時の処理性能の低下を抑制するため、プリ
フェッチ機能をもつプロセッサが提案されている。
【0004】プリフェッチ命令は、指定されたメモリの
内容をキャッシュメモリにロードする命令であり、多く
は命令により明示的に発行される。この命令の後に必要
となるデータを、先にキャッシュメモリにリフィル(ref
ill)することにより、プリフェッチ命令から実際にデー
タを使うまでの間にキャッシュリフィルが終わっていれ
ば、そのデータを使用する命令はキャッシュミスを起こ
すことなく実行することができる。
内容をキャッシュメモリにロードする命令であり、多く
は命令により明示的に発行される。この命令の後に必要
となるデータを、先にキャッシュメモリにリフィル(ref
ill)することにより、プリフェッチ命令から実際にデー
タを使うまでの間にキャッシュリフィルが終わっていれ
ば、そのデータを使用する命令はキャッシュミスを起こ
すことなく実行することができる。
【0005】しかしながら、プリフェッチ命令の発行に
関しては、最善のアルゴリズムがないのが実状である。
プリフェッチ用にキャッシュラインを保持するには、他
のキャッシュラインをキャッシュから追い出さねばなら
ないことがほとんどである。このとき、よく使われるデ
ータをもつキャッシュラインがプリフェッチにより追い
出されたり、プリフェッチしたデータが使われる前に後
続のプリフェッチにより追い出されてしまう等、プリフ
ェッチを発行する頻度とタイミングによっては、かえっ
て性能低下を起こす可能性さえある。
関しては、最善のアルゴリズムがないのが実状である。
プリフェッチ用にキャッシュラインを保持するには、他
のキャッシュラインをキャッシュから追い出さねばなら
ないことがほとんどである。このとき、よく使われるデ
ータをもつキャッシュラインがプリフェッチにより追い
出されたり、プリフェッチしたデータが使われる前に後
続のプリフェッチにより追い出されてしまう等、プリフ
ェッチを発行する頻度とタイミングによっては、かえっ
て性能低下を起こす可能性さえある。
【0006】本発明は、このような点に鑑みてなされた
ものであり、その目的は、特定の命令が発行された場合
におけるキャッシュミスによる性能低下を抑制できるマ
イクロプロセッサを提供することにある。
ものであり、その目的は、特定の命令が発行された場合
におけるキャッシュミスによる性能低下を抑制できるマ
イクロプロセッサを提供することにある。
【0007】
【課題を解決するための手段】上述した課題を解決する
ために、請求項1の発明は、外部メモリに書き込むデー
タ、あるいは外部メモリから読み出したデータを一時的
に格納するキャッシュメモリを備えたマイクロプロセッ
サにおいて、特定の命令が発行された場合における、特
定の用途に用いられるレジスタの値の変化量を履歴情報
または後続の命令から取得する変化量取得手段と、取得
された前記変化量に基づいて、前記キャッシュメモリ内
の少なくとも一部のデータ領域に対してリフィル処理を
行うキャッシュ・リフィル手段と、を備える。
ために、請求項1の発明は、外部メモリに書き込むデー
タ、あるいは外部メモリから読み出したデータを一時的
に格納するキャッシュメモリを備えたマイクロプロセッ
サにおいて、特定の命令が発行された場合における、特
定の用途に用いられるレジスタの値の変化量を履歴情報
または後続の命令から取得する変化量取得手段と、取得
された前記変化量に基づいて、前記キャッシュメモリ内
の少なくとも一部のデータ領域に対してリフィル処理を
行うキャッシュ・リフィル手段と、を備える。
【0008】請求項1の発明では、特定の命令(例え
ば、サブルーチンコール)が発行された場合に、特定の
用途に用いられるレジスタ(例えば、スタックポイン
タ)の値の変化量に基づいて、キャッシュメモリのリフ
ィル処理を行うため、特定の命令を実行する際のキャッ
シュミスによるペナルティを低減できる。
ば、サブルーチンコール)が発行された場合に、特定の
用途に用いられるレジスタ(例えば、スタックポイン
タ)の値の変化量に基づいて、キャッシュメモリのリフ
ィル処理を行うため、特定の命令を実行する際のキャッ
シュミスによるペナルティを低減できる。
【0009】請求項2の発明は、外部メモリに書き込む
データ、あるいは外部メモリから読み出したデータを一
時的に格納するキャッシュメモリを備えたマイクロプロ
セッサにおいて、サブルーチンの呼び出しに関する命令
が発行された場合に、該サブルーチン内で設定される次
のスタックポインタの値を計算する次ポインタ値計算手
段と、サブルーチンの呼び出しに関する命令が発行され
た場合に、前記キャッシュメモリに対してプリフェッチ
を要求するプリフェッチ要求手段と、プリフェッチが要
求されたときに、前記次ポインタ値計算手段で計算され
た値を起点として、前記キャッシュメモリのキャッシュ
ライン単位でデータのリフィル処理を行うキャッシュ制
御手段と、を備える。
データ、あるいは外部メモリから読み出したデータを一
時的に格納するキャッシュメモリを備えたマイクロプロ
セッサにおいて、サブルーチンの呼び出しに関する命令
が発行された場合に、該サブルーチン内で設定される次
のスタックポインタの値を計算する次ポインタ値計算手
段と、サブルーチンの呼び出しに関する命令が発行され
た場合に、前記キャッシュメモリに対してプリフェッチ
を要求するプリフェッチ要求手段と、プリフェッチが要
求されたときに、前記次ポインタ値計算手段で計算され
た値を起点として、前記キャッシュメモリのキャッシュ
ライン単位でデータのリフィル処理を行うキャッシュ制
御手段と、を備える。
【0010】請求項2の発明では、プリフェッチが要求
されたときに、サブルーチン内で使用する分のキャッシ
ュメモリ内の領域についてリフィル処理を行うため、サ
ブルーチンコール時のキャッシュミスによるペナルティ
を低減することができる。
されたときに、サブルーチン内で使用する分のキャッシ
ュメモリ内の領域についてリフィル処理を行うため、サ
ブルーチンコール時のキャッシュミスによるペナルティ
を低減することができる。
【0011】請求項3の発明では、スタックポインタの
オフセット値を指定する命令に基づいてプリフェッチす
べきアドレスを計算するため、サブルーチンで使用する
範囲を正確かつ迅速に検出することができる。
オフセット値を指定する命令に基づいてプリフェッチす
べきアドレスを計算するため、サブルーチンで使用する
範囲を正確かつ迅速に検出することができる。
【0012】請求項4の発明では、プリフェッチされる
データのすべてが、対応するサブルーチンでのスタック
操作のみに使用され、他のサブルーチンでは使用されな
い場合に、前記キャッシュメモリに対して、キャッシュ
ラインのリフィル処理を行わずに、キャッシュタグへの
登録を行うようにしたため、無用な外部メモリへのアク
セスを行わなくて済み、キャッシュリフィルのペナルテ
ィをさらに削減できる。
データのすべてが、対応するサブルーチンでのスタック
操作のみに使用され、他のサブルーチンでは使用されな
い場合に、前記キャッシュメモリに対して、キャッシュ
ラインのリフィル処理を行わずに、キャッシュタグへの
登録を行うようにしたため、無用な外部メモリへのアク
セスを行わなくて済み、キャッシュリフィルのペナルテ
ィをさらに削減できる。
【0013】請求項5の発明では、スタックの性質を考
慮に入れて、プリフェッチを行ったキャッシュラインの
数に基づいてキャッシュラインのリフィル処理を行うか
否かを決定する。
慮に入れて、プリフェッチを行ったキャッシュラインの
数に基づいてキャッシュラインのリフィル処理を行うか
否かを決定する。
【0014】請求項6の発明では、サブルーチンで使用
するスタックのオフセット値を先読みするため、キャッ
シュリフィル処理を迅速に行うことができる。
するスタックのオフセット値を先読みするため、キャッ
シュリフィル処理を迅速に行うことができる。
【0015】請求項7の発明は、外部メモリに書き込む
データ、あるいは外部メモリから読み出したデータを一
時的に格納するキャッシュメモリを備えたマイクロプロ
セッサにおいて、サブルーチンが呼び出される直前のス
タックポインタの値から、前記キャッシュメモリのキャ
ッシュラインのサイズ分ずつ、スタックポインタの値を
増減させるスタックポインタ計算手段と、サブルーチン
の呼び出しに関する命令が発行された場合に、前記キャ
ッシュメモリに対してプリフェッチを要求するプリフェ
ッチ要求手段と、プリフェッチが要求されたときに、前
記スタックポインタ値計算手段で計算された値を起点と
して、前記キャッシュメモリのキャッシュライン単位で
データのリフィル処理を行うキャッシュ制御手段と、を
備える。
データ、あるいは外部メモリから読み出したデータを一
時的に格納するキャッシュメモリを備えたマイクロプロ
セッサにおいて、サブルーチンが呼び出される直前のス
タックポインタの値から、前記キャッシュメモリのキャ
ッシュラインのサイズ分ずつ、スタックポインタの値を
増減させるスタックポインタ計算手段と、サブルーチン
の呼び出しに関する命令が発行された場合に、前記キャ
ッシュメモリに対してプリフェッチを要求するプリフェ
ッチ要求手段と、プリフェッチが要求されたときに、前
記スタックポインタ値計算手段で計算された値を起点と
して、前記キャッシュメモリのキャッシュライン単位で
データのリフィル処理を行うキャッシュ制御手段と、を
備える。
【0016】請求項7の発明では、サブルーチンが呼び
出される直前のスタックポインタの値から、キャッシュ
ラインのサイズ分ずつ、ポインタ値を増減させるため、
キャッシュラインのリフィルを簡易かつ迅速に行うこと
ができる。
出される直前のスタックポインタの値から、キャッシュ
ラインのサイズ分ずつ、ポインタ値を増減させるため、
キャッシュラインのリフィルを簡易かつ迅速に行うこと
ができる。
【0017】
【発明の実施の形態】以下、本発明に係るマイクロプロ
セッサについて、図面を参照しながら具体的に説明す
る。以下の実施形態では、MIPS(Microprocessor withou
t InterlockedPipeline Stages)のマイクロプロセッサ
を例に取って説明する。
セッサについて、図面を参照しながら具体的に説明す
る。以下の実施形態では、MIPS(Microprocessor withou
t InterlockedPipeline Stages)のマイクロプロセッサ
を例に取って説明する。
【0018】具体的には、32ビットの汎用レジスタが32
本あり、そのうちの$29はスタックポインタとして使用
され、$31はサブルーチンコールのリンクレジスタとし
て使用されるものとする。また、ラインサイズが64バイ
ト(16ワード)のデータキャッシュを内蔵あるいは付加
し、データをアクセス際のアドレスの下位6ビットがキ
ャッシュライン上のオフセットとして使用される場合に
ついて説明する。
本あり、そのうちの$29はスタックポインタとして使用
され、$31はサブルーチンコールのリンクレジスタとし
て使用されるものとする。また、ラインサイズが64バイ
ト(16ワード)のデータキャッシュを内蔵あるいは付加
し、データをアクセス際のアドレスの下位6ビットがキ
ャッシュライン上のオフセットとして使用される場合に
ついて説明する。
【0019】一般に、MIPSのプロセッサは、以下の(1)
〜(3)の特徴を有する。
〜(3)の特徴を有する。
【0020】(1) サブルーチンコールJALもしくはJA
LRが用いられる。JALはPC相対ジャンプ、JALRはレ
ジスタインダイレクトジャンプで、どちらともジャンプ
ディレイスロットの次の命令のアドレスを帰り先として
$31に書き込む。
LRが用いられる。JALはPC相対ジャンプ、JALRはレ
ジスタインダイレクトジャンプで、どちらともジャンプ
ディレイスロットの次の命令のアドレスを帰り先として
$31に書き込む。
【0021】(2) MIPSはプリインクリメントやポストデ
クリメントなどの命令を持たないため、サブルーチンの
先頭で、そのサブルーチン内で使用されるスタックのバ
イト数をスタックポインタから減じ、サブルーチンから
復帰する際に使用するバイト数だけスタックポインタを
加えてスタックポインタを元に戻す。このとき、たいて
いのプログラムでは、16ビットの即値(オフセット値)
を伴うaddiu命令(即値加算命令)が用いられる。な
お、スタックは、メモリのゼロ番地に向かって伸びるた
め、即値には負の値が用いられる。
クリメントなどの命令を持たないため、サブルーチンの
先頭で、そのサブルーチン内で使用されるスタックのバ
イト数をスタックポインタから減じ、サブルーチンから
復帰する際に使用するバイト数だけスタックポインタを
加えてスタックポインタを元に戻す。このとき、たいて
いのプログラムでは、16ビットの即値(オフセット値)
を伴うaddiu命令(即値加算命令)が用いられる。な
お、スタックは、メモリのゼロ番地に向かって伸びるた
め、即値には負の値が用いられる。
【0022】(3) MIPSにおけるメモリアクセス命令(例
えば、ロード命令やストア命令)は、メモリアクセス命
令に付随する16ビットのオフセットを用いたレジスタ相
対アドレッシングのみであり、スタックへの操作は、$
29をベースレジスタとしたアクセスにより行われる。
えば、ロード命令やストア命令)は、メモリアクセス命
令に付随する16ビットのオフセットを用いたレジスタ相
対アドレッシングのみであり、スタックへの操作は、$
29をベースレジスタとしたアクセスにより行われる。
【0023】スタックポインタを操作する際、addiu命
令以外の命令が使用されるのは稀である。その理由は、
スタックはaddiu命令で扱えないほど大きくならないこ
とと、MIPSのメモリアクセス命令のオフセットがaddiu
命令と同様に16ビットであることによる。
令以外の命令が使用されるのは稀である。その理由は、
スタックはaddiu命令で扱えないほど大きくならないこ
とと、MIPSのメモリアクセス命令のオフセットがaddiu
命令と同様に16ビットであることによる。
【0024】(4) サブルーチンからの復帰は JR (JR $3
1) で行われる。
1) で行われる。
【0025】(本発明の基本原理)図1は本発明の基本
原理を説明するブロック図である。図1のマイクロプロ
セッサ(以下、単にプロセッサと呼ぶ)は、不図示の命
令キャッシュから読み出された命令を一時的に格納する
命令バッファ/キュー(あるいは実行パイプライン)1
と、命令を順次実行する実行ユニット2と、サブルーチ
ンコールが起きたか否かを検出するサブルーチンコール
・デコーダ(プリフェッチ要求手段)3と、現在のスタ
ックポインタを起点としてサブルーチンが使用する分の
オフセット値を出力するオフセット生成器(変化量取得
手段)4と、スタックポインタを格納する特殊レジスタ
5と、サブルーチンコールが起きた後のスタックポイン
タを生成するアドレス生成ユニット(次ポインタ値計算
手段)6と、アドレス生成ユニットで生成されたスタッ
クポインタを起点としてデータのプリフェッチを行うデ
ータキャッシュ制御ユニット7とを備えている。
原理を説明するブロック図である。図1のマイクロプロ
セッサ(以下、単にプロセッサと呼ぶ)は、不図示の命
令キャッシュから読み出された命令を一時的に格納する
命令バッファ/キュー(あるいは実行パイプライン)1
と、命令を順次実行する実行ユニット2と、サブルーチ
ンコールが起きたか否かを検出するサブルーチンコール
・デコーダ(プリフェッチ要求手段)3と、現在のスタ
ックポインタを起点としてサブルーチンが使用する分の
オフセット値を出力するオフセット生成器(変化量取得
手段)4と、スタックポインタを格納する特殊レジスタ
5と、サブルーチンコールが起きた後のスタックポイン
タを生成するアドレス生成ユニット(次ポインタ値計算
手段)6と、アドレス生成ユニットで生成されたスタッ
クポインタを起点としてデータのプリフェッチを行うデ
ータキャッシュ制御ユニット7とを備えている。
【0026】図2はプロセッサが実行する命令列の一例
を示す図であり、サブルーチンコールであるJAL命令
を実行する場合の例を示している。
を示す図であり、サブルーチンコールであるJAL命令
を実行する場合の例を示している。
【0027】図2に示すように、JAL命令を実行する
場合、まず、JAL命令に後続するaddiu命令により、
スタックポインタ(レジスタ$29の値)からaddiu命令
のオフセット値分だけスタックポインタを減じる。この
計算は図1のアドレス生成ユニットで行われる。
場合、まず、JAL命令に後続するaddiu命令により、
スタックポインタ(レジスタ$29の値)からaddiu命令
のオフセット値分だけスタックポインタを減じる。この
計算は図1のアドレス生成ユニットで行われる。
【0028】次に、計算したスタックポインタを起点と
して、サブルーチン内の命令をプリフェッチし、サブル
ーチンが使用するキャッシュメモリ内の領域(図1の斜
線領域)にデータをプリロードする。
して、サブルーチン内の命令をプリフェッチし、サブル
ーチンが使用するキャッシュメモリ内の領域(図1の斜
線領域)にデータをプリロードする。
【0029】このように、本発明は、サブルーチンコー
ルが起きると、サブルーチンが使用する分だけスタック
ポインタを移動させ、サブルーチンが使用するキャッシ
ュメモリ内の領域にデータをプリロードしておくため、
サブルーチン実行時のキャッシュミスによる性能低下を
抑制できる。
ルが起きると、サブルーチンが使用する分だけスタック
ポインタを移動させ、サブルーチンが使用するキャッシ
ュメモリ内の領域にデータをプリロードしておくため、
サブルーチン実行時のキャッシュミスによる性能低下を
抑制できる。
【0030】(第1の実施形態)第1の実施形態は、図
1を具体化したものであり、サブルーチンコール時に、
データキャッシュのキャッシュライン単位でプリフェッ
チを実行するものである。
1を具体化したものであり、サブルーチンコール時に、
データキャッシュのキャッシュライン単位でプリフェッ
チを実行するものである。
【0031】図3は本発明によるプロセッサの第1の実
施形態の概略構成を示すブロック図である。図3では、
図1と共通する構成部分には同一符号を付しており、以
下では相違点を中心に説明する。
施形態の概略構成を示すブロック図である。図3では、
図1と共通する構成部分には同一符号を付しており、以
下では相違点を中心に説明する。
【0032】図3のプロセッサは、図1と同様に、命令
バッファ/キュー1と、実行ユニット2と、サブルーチ
ンコール・デコーダ(プリフェッチ要求手段)3と、デ
ータキャッシュ制御ユニット(キャッシュ・リフィル手
段)4とを備えている。
バッファ/キュー1と、実行ユニット2と、サブルーチ
ンコール・デコーダ(プリフェッチ要求手段)3と、デ
ータキャッシュ制御ユニット(キャッシュ・リフィル手
段)4とを備えている。
【0033】この他、図3のプロセッサは、不図示の命
令キャッシュから読み出された命令列の中に含まれるad
diu命令を検出するAddiuデコーダ11と、プリフェッチ
を制御するプリフェッチ制御部12と、レジスタ$29に
格納された現在のスタックポインタとaddiu命令のオフ
セット値bit[15:0]との加算を行うアダー(次ポインタ
値計算手段)13と、アダー13で演算された現在のプ
リフェッチアドレスにデータキャッシュのキャッシュラ
インサイズ0x40を加えたアドレスを格納するPAdrレジス
タ14と、アダー13の演算結果とPAdrレジスタ14の
値のいずれかを選択するセレクタ15と、セレクタ15
の出力であるプリフェッチアドレスをキャッシュライン
0x40分だけ大きくする加算器16とを備えている。
令キャッシュから読み出された命令列の中に含まれるad
diu命令を検出するAddiuデコーダ11と、プリフェッチ
を制御するプリフェッチ制御部12と、レジスタ$29に
格納された現在のスタックポインタとaddiu命令のオフ
セット値bit[15:0]との加算を行うアダー(次ポインタ
値計算手段)13と、アダー13で演算された現在のプ
リフェッチアドレスにデータキャッシュのキャッシュラ
インサイズ0x40を加えたアドレスを格納するPAdrレジス
タ14と、アダー13の演算結果とPAdrレジスタ14の
値のいずれかを選択するセレクタ15と、セレクタ15
の出力であるプリフェッチアドレスをキャッシュライン
0x40分だけ大きくする加算器16とを備えている。
【0034】次に、図3のプロセッサの動作を説明す
る。サブルーチンコール・デコーダ3により、サブルー
チン命令(例えば、JAL/JALR/JR命令)が検出される
と、サブルーチンコールが実行されることを示すEntSub
信号がアサートされる。このEntSub信号がアサートされ
た状態で、サブルーチン命令に後続するaddiu命令がAdd
iuデコーダ11で検出されると、Addiuデコーダ11はD
tctAdd信号をアサートする。なお、EntSub信号は、JAL/
JALR命令が検出された後、DtctAdd の検出、もしくはサ
ブルーチンからの復帰を示すJR命令が検出されるまで
アサートされる。
る。サブルーチンコール・デコーダ3により、サブルー
チン命令(例えば、JAL/JALR/JR命令)が検出される
と、サブルーチンコールが実行されることを示すEntSub
信号がアサートされる。このEntSub信号がアサートされ
た状態で、サブルーチン命令に後続するaddiu命令がAdd
iuデコーダ11で検出されると、Addiuデコーダ11はD
tctAdd信号をアサートする。なお、EntSub信号は、JAL/
JALR命令が検出された後、DtctAdd の検出、もしくはサ
ブルーチンからの復帰を示すJR命令が検出されるまで
アサートされる。
【0035】これら2種類の信号EntSub,DtctAddがアサ
ートされたことをプリフェッチ制御部12が検出した時
点で、プリフェッチのシーケンスが開始される。
ートされたことをプリフェッチ制御部12が検出した時
点で、プリフェッチのシーケンスが開始される。
【0036】まず、プリフェッチ制御部12内のプリフ
ェッチ・カウントレジスタ(ライン数計測手段)12a
は、addiu命令のオフセット値の上位側ビット列bit[15:
6]を反転した値を格納する。サブルーチンの先頭におけ
るスタックポインタ操作は、負の数を加えることであ
り、また、アドレスの下位6ビットはキャッシュライン
上のオフセットであるので、即値のbit[15:6]の1の補
数がプリフェッチでキャッシュロードを行っておくべき
キャッシュライン数になる。
ェッチ・カウントレジスタ(ライン数計測手段)12a
は、addiu命令のオフセット値の上位側ビット列bit[15:
6]を反転した値を格納する。サブルーチンの先頭におけ
るスタックポインタ操作は、負の数を加えることであ
り、また、アドレスの下位6ビットはキャッシュライン
上のオフセットであるので、即値のbit[15:6]の1の補
数がプリフェッチでキャッシュロードを行っておくべき
キャッシュライン数になる。
【0037】また、プリフェッチ制御部12は、SelAdd
er信号を制御してセレクタ15にアダー13の出力を選
択させるとともに、PrefReq信号を制御してデータキャ
ッシュ制御ユニット4に対してプリフェッチアクセスの
発行を要求する。
er信号を制御してセレクタ15にアダー13の出力を選
択させるとともに、PrefReq信号を制御してデータキャ
ッシュ制御ユニット4に対してプリフェッチアクセスの
発行を要求する。
【0038】データキャッシュ制御ユニット4は、ま
ず、データキャッシュに要求されたキャッシュラインが
存在するか否かを確認し、キャッシュラインが存在する
場合には即座にプリフェッチを完了する。また、キャッ
シュラインが存在しない場合には、通常の外部メモリや
二次キャッシュなどをアクセスして、データキャッシュ
のリフィル処理を行う。また、データキャッシュ制御ユ
ニット4は、プリフェッチが終了、あるいは次のプリフ
ェッチを受け付けることができるようになった時点で、
PrefEnd信号をアサートする。
ず、データキャッシュに要求されたキャッシュラインが
存在するか否かを確認し、キャッシュラインが存在する
場合には即座にプリフェッチを完了する。また、キャッ
シュラインが存在しない場合には、通常の外部メモリや
二次キャッシュなどをアクセスして、データキャッシュ
のリフィル処理を行う。また、データキャッシュ制御ユ
ニット4は、プリフェッチが終了、あるいは次のプリフ
ェッチを受け付けることができるようになった時点で、
PrefEnd信号をアサートする。
【0039】PrefEnd信号がアサートされると、プリフ
ェッチ・カウントレジスタ12aのレジスタ値は、1だ
けディクリメントされる。プリフェッチ制御部12内の
制御論理部12bは、WrPAdr信号をアサートし、現在の
プリフェッチアドレスにキャッシュラインサイズ0x40を
加えた数をPAdrレジスタ14に格納する。このとき、プ
リフェッチ制御部12は、プリフェッチ・カウントレジ
スタ12aがゼロか否かを確認し、ゼロであればプリフ
ェッチの動作を終了する。ゼロでなければ、SelAddr信
号を制御してセレクタ15にPAdrレジスタ14の値を選
択させ、同様に、PrefReq信号をアサートして次のプリ
フェッチを要求する。
ェッチ・カウントレジスタ12aのレジスタ値は、1だ
けディクリメントされる。プリフェッチ制御部12内の
制御論理部12bは、WrPAdr信号をアサートし、現在の
プリフェッチアドレスにキャッシュラインサイズ0x40を
加えた数をPAdrレジスタ14に格納する。このとき、プ
リフェッチ制御部12は、プリフェッチ・カウントレジ
スタ12aがゼロか否かを確認し、ゼロであればプリフ
ェッチの動作を終了する。ゼロでなければ、SelAddr信
号を制御してセレクタ15にPAdrレジスタ14の値を選
択させ、同様に、PrefReq信号をアサートして次のプリ
フェッチを要求する。
【0040】その後は、最初のプリフェッチの動作と同
様に、PrefEnd信号がアサートされた時点でプリフェッ
チ・カウントレジスタ12aの更新とPAdrレジスタ14
の更新を行い、プリフェッチ・カウントレジスタ12a
の値により次のプリフェッチを行うか否かを判断する。
様に、PrefEnd信号がアサートされた時点でプリフェッ
チ・カウントレジスタ12aの更新とPAdrレジスタ14
の更新を行い、プリフェッチ・カウントレジスタ12a
の値により次のプリフェッチを行うか否かを判断する。
【0041】上述した制御論理部12bの動作は、サブ
ルーチンコール・デコーダ3からのEntSub信号がデアサ
ートされた時点で強制的に終了する。これにより、サブ
ルーチンに入った後、スタック領域のプリフェッチが終
了する前にサブルーチンの実行が終了した場合に、それ
以上プリフェッチは継続されなくなる。
ルーチンコール・デコーダ3からのEntSub信号がデアサ
ートされた時点で強制的に終了する。これにより、サブ
ルーチンに入った後、スタック領域のプリフェッチが終
了する前にサブルーチンの実行が終了した場合に、それ
以上プリフェッチは継続されなくなる。
【0042】このように、第1の実施形態では、サブル
ーチンコールがあった場合に、サブルーチンで使用する
分だけスタックポインタを移動させ、サブルーチンで使
用するデータをプリフェッチしてデータキャッシュ内の
サブルーチン使用領域に格納しておくため、サブルーチ
ンコール時に発生しやすいスタックアクセスによるキャ
ッシュミスのペナルティを低減することができ、プロセ
ッサの性能向上を図ることができる。
ーチンコールがあった場合に、サブルーチンで使用する
分だけスタックポインタを移動させ、サブルーチンで使
用するデータをプリフェッチしてデータキャッシュ内の
サブルーチン使用領域に格納しておくため、サブルーチ
ンコール時に発生しやすいスタックアクセスによるキャ
ッシュミスのペナルティを低減することができ、プロセ
ッサの性能向上を図ることができる。
【0043】特に、近年のスーパースカラープロセッサ
に見られるように、命令フェッチ部と命令実行部との間
に命令キューを持ち、命令のフェッチから命令のパイプ
ラインへの命令発行までのレイテンシーが比較的長いも
のにおいては、サブルーチンコールが検出されてから実
際にスタック操作が行われるまでに時間がかかるものが
あるため、キャッシュミスによる性能低下をより効率よ
く隠蔽することができる。
に見られるように、命令フェッチ部と命令実行部との間
に命令キューを持ち、命令のフェッチから命令のパイプ
ラインへの命令発行までのレイテンシーが比較的長いも
のにおいては、サブルーチンコールが検出されてから実
際にスタック操作が行われるまでに時間がかかるものが
あるため、キャッシュミスによる性能低下をより効率よ
く隠蔽することができる。
【0044】なお、本実施形態では、呼び出されるサブ
ルーチンが使用するスタックの、0番地に近い方からプ
リフェッチを行う場合の実装例を説明したが、逆に、呼
び出されるサブルーチンのスタックの0番地に遠い方か
ら、すなわち親関数のスタックポインタの値に近い方か
ら0番地に向かってプリフェッチを行うようにすること
も容易である。図4はこの実装例を示す図であり、アダ
ー13の代わりに現スタックポインタ値からラインサイ
ズである0x40を減じる減算器 13aをもち、さらに加算
器 16の代わりに減算器16aを有する。プリフェッチ
を行う回数は図3と変わらないため、制御回路は図3と
同様に構成される。
ルーチンが使用するスタックの、0番地に近い方からプ
リフェッチを行う場合の実装例を説明したが、逆に、呼
び出されるサブルーチンのスタックの0番地に遠い方か
ら、すなわち親関数のスタックポインタの値に近い方か
ら0番地に向かってプリフェッチを行うようにすること
も容易である。図4はこの実装例を示す図であり、アダ
ー13の代わりに現スタックポインタ値からラインサイ
ズである0x40を減じる減算器 13aをもち、さらに加算
器 16の代わりに減算器16aを有する。プリフェッチ
を行う回数は図3と変わらないため、制御回路は図3と
同様に構成される。
【0045】(第2の実施形態)第2の実施形態は、第
1の実施形態の変形例であり、プリフェッチされるデー
タがそのサブルーチンのスタック操作のみに使用され、
他のサブルーチンでは使用されないことが明らかな場合
には、データキャッシュのリフィル動作を目的としたメ
モリからの読み出しを行わずに、キャッシュタグへの登
録のみ行うものである。
1の実施形態の変形例であり、プリフェッチされるデー
タがそのサブルーチンのスタック操作のみに使用され、
他のサブルーチンでは使用されないことが明らかな場合
には、データキャッシュのリフィル動作を目的としたメ
モリからの読み出しを行わずに、キャッシュタグへの登
録のみ行うものである。
【0046】図5は本発明によるプロセッサの第3の実
施形態の概略構成を示すブロック図である。図5では、
図3と共通する構成部分には同一符号を付しており、以
下では相違点を中心に説明する。
施形態の概略構成を示すブロック図である。図5では、
図3と共通する構成部分には同一符号を付しており、以
下では相違点を中心に説明する。
【0047】図5のプロセッサは、プリフェッチ制御部
12からデータキャッシュ制御ユニット4に対し、所定
の条件のときにデータキャッシュのリフィル動作を禁止
するNeedNotLoad信号を供給する点に特徴がある。このN
eedNotLoad信号は、プリフェッチ・カウントレジスタ1
2aの値が1でないときにアサートされる。
12からデータキャッシュ制御ユニット4に対し、所定
の条件のときにデータキャッシュのリフィル動作を禁止
するNeedNotLoad信号を供給する点に特徴がある。このN
eedNotLoad信号は、プリフェッチ・カウントレジスタ1
2aの値が1でないときにアサートされる。
【0048】NeedNotLoad信号がアサートされた場合に
は、データキャッシュ制御ユニット4は、外部メモリか
らデータを読み出すことなく、データキャッシュのタグ
情報だけを書き換える。これにより、キャッシュライン
のリフィル処理を直ちには行う必要がなくなり、キャッ
シュリフィルによるペナルティをさらに低減することが
できる。
は、データキャッシュ制御ユニット4は、外部メモリか
らデータを読み出すことなく、データキャッシュのタグ
情報だけを書き換える。これにより、キャッシュライン
のリフィル処理を直ちには行う必要がなくなり、キャッ
シュリフィルによるペナルティをさらに低減することが
できる。
【0049】このような処理を行う理由は、主に、以下
の(1)〜(3)のスタックの性質を利用したものである。
の(1)〜(3)のスタックの性質を利用したものである。
【0050】(1) プリフェッチ制御部12からデータキ
ャッシュ制御ユニット4に対するPrefReq信号によるプ
リフェッチ要求は、必ずスタックに対するものである。
ャッシュ制御ユニット4に対するPrefReq信号によるプ
リフェッチ要求は、必ずスタックに対するものである。
【0051】(2) サブルーチンAによって呼び出される
サブルーチンBとの間において、サブルーチンAにおけ
るスタックポインタの指すアドレスとサブルーチンBに
おけるスタックポインタの指すアドレスの間には、サブ
ルーチンBによって使われるデータのみが存在し、サブ
ルーチンAもしくはそれを呼び出した親関数がこの領域
のデータを参照することはない。
サブルーチンBとの間において、サブルーチンAにおけ
るスタックポインタの指すアドレスとサブルーチンBに
おけるスタックポインタの指すアドレスの間には、サブ
ルーチンBによって使われるデータのみが存在し、サブ
ルーチンAもしくはそれを呼び出した親関数がこの領域
のデータを参照することはない。
【0052】(3) サブルーチンAのスタックの下限とサ
ブルーチンBのスタックの上限は、同じラインに存在す
る可能性があり、このキャッシュライン、すなわちサブ
ルーチンBが使用するスタックの最後のラインは、サブ
ルーチンAのスタックポインタの値がキャッシュライン
にアラインされている場合を除いて、必ずデータリフィ
ルしなければならない。しかし、それより若い番地のス
タックに関しては、まだプログラムのどの部分からも使
用されていない(もしくは以前は使用されていたが、す
でにデータはプログラム上二度と参照されない)ことが
保障されており、かつスタックの性質から、この部分へ
のメモリアクセスは必ず書き込んだ後に読み出されるも
のであり、決して最初に読み出しを行うことはない。
ブルーチンBのスタックの上限は、同じラインに存在す
る可能性があり、このキャッシュライン、すなわちサブ
ルーチンBが使用するスタックの最後のラインは、サブ
ルーチンAのスタックポインタの値がキャッシュライン
にアラインされている場合を除いて、必ずデータリフィ
ルしなければならない。しかし、それより若い番地のス
タックに関しては、まだプログラムのどの部分からも使
用されていない(もしくは以前は使用されていたが、す
でにデータはプログラム上二度と参照されない)ことが
保障されており、かつスタックの性質から、この部分へ
のメモリアクセスは必ず書き込んだ後に読み出されるも
のであり、決して最初に読み出しを行うことはない。
【0053】以上より、スタックにおけるデータ管理は
通常のメモリと異なり、現在実行中の関数が利用する領
域よりも若い番地に格納されているデータは意味を持た
ず、特にその関数が呼ばれた時点では、親のスタックポ
インタの値の示す番地より若い番地では、格納されてい
るデータは意味を持たない。
通常のメモリと異なり、現在実行中の関数が利用する領
域よりも若い番地に格納されているデータは意味を持た
ず、特にその関数が呼ばれた時点では、親のスタックポ
インタの値の示す番地より若い番地では、格納されてい
るデータは意味を持たない。
【0054】しかしながら、スタックポインタの制御は
キャッシュラインのラインサイズとは独立であるため、
スタックポインタはキャッシュラインの途中を指し示す
こともある。
キャッシュラインのラインサイズとは独立であるため、
スタックポインタはキャッシュラインの途中を指し示す
こともある。
【0055】以上を鑑みて、キャッシュライン上で、親
関数のスタック領域と重なる可能性のある、現関数のス
タック領域のもっとも上方のラインのデータのみ外部メ
モリから取得し、それ以下は、書き換えが行われること
が自明であるので外部メモリからデータを取得せずに、
メモリ上にキャッシュラインを生成するようにしたもの
が第2の実施形態である。
関数のスタック領域と重なる可能性のある、現関数のス
タック領域のもっとも上方のラインのデータのみ外部メ
モリから取得し、それ以下は、書き換えが行われること
が自明であるので外部メモリからデータを取得せずに、
メモリ上にキャッシュラインを生成するようにしたもの
が第2の実施形態である。
【0056】この親関数のスタック領域と、現在実行中
の関数のスタック領域の重なりの検出にはいくつかの方
法があり、例えば、親関数におけるスタックポインタ値
の [5:0] がすべて0であるとき、これはキャッシュラ
インの先頭であるので、呼び出されるサブルーチンのス
タックは親関数のものと、その境界においてもキャッシ
ュライン上に置いて重なりがないのは自明である。ま
た、それより若いアドレスについて、重なりがないのは
スタックの性質から自明である。
の関数のスタック領域の重なりの検出にはいくつかの方
法があり、例えば、親関数におけるスタックポインタ値
の [5:0] がすべて0であるとき、これはキャッシュラ
インの先頭であるので、呼び出されるサブルーチンのス
タックは親関数のものと、その境界においてもキャッシ
ュライン上に置いて重なりがないのは自明である。ま
た、それより若いアドレスについて、重なりがないのは
スタックの性質から自明である。
【0057】逆に、スタックポインタの値の[5:0] が0
でない場合には重なりがあるので、呼び出される関数の
スタック領域のもっとも上方のラインはデータリフィル
を行わなくてはならない。しかし、このラインより若い
アドレスのものについては、前述のようにデータをリフ
ィルする必要はない。この、親関数とのスタックの境界
は、例えば本実施形態では最後にリフィルが行われるラ
イン、すなわち プリフェッチカウントレジスタ が0で
ある時のことであり、また、スタックの上方から下方に
プリフェッチを行う実装では最初にプリフェッチが行わ
れるラインである。
でない場合には重なりがあるので、呼び出される関数の
スタック領域のもっとも上方のラインはデータリフィル
を行わなくてはならない。しかし、このラインより若い
アドレスのものについては、前述のようにデータをリフ
ィルする必要はない。この、親関数とのスタックの境界
は、例えば本実施形態では最後にリフィルが行われるラ
イン、すなわち プリフェッチカウントレジスタ が0で
ある時のことであり、また、スタックの上方から下方に
プリフェッチを行う実装では最初にプリフェッチが行わ
れるラインである。
【0058】本実施形態では、さらにこの0検出を省略
しており、スタックポインタの位置に関わらず、親関数
のスタック領域と接する部分、すなわち最後にプリフェ
ッチされるライン(プリフェッチカウントレジスタが0)
について、データリフィルを伴うプリフェッチを発行し
ている。
しており、スタックポインタの位置に関わらず、親関数
のスタック領域と接する部分、すなわち最後にプリフェ
ッチされるライン(プリフェッチカウントレジスタが0)
について、データリフィルを伴うプリフェッチを発行し
ている。
【0059】図5のようなNeedNotLoad信号を設けるこ
とにより、ローカル変数が多い関数など、比較的広範囲
にスタックを使用するプログラムを実行する場合に、キ
ャッシュリフィルのペナルティをより有効に低減するこ
とができる。
とにより、ローカル変数が多い関数など、比較的広範囲
にスタックを使用するプログラムを実行する場合に、キ
ャッシュリフィルのペナルティをより有効に低減するこ
とができる。
【0060】(第3の実施形態)第3の実施形態は、サ
ブルーチンコールの際に指定されるスタックのオフセッ
ト値を先読みするものである。
ブルーチンコールの際に指定されるスタックのオフセッ
ト値を先読みするものである。
【0061】図6は本発明に係るプロセッサの第3の実
施形態の概略構成を示すブロック図である。図6では、
図3と共通する構成部分には同一符号を付しており、以
下では、相違点を中心に説明する。
施形態の概略構成を示すブロック図である。図6では、
図3と共通する構成部分には同一符号を付しており、以
下では、相違点を中心に説明する。
【0062】図6のプロセッサは、サブルーチンコール
を行う命令(例えば、ジャンプ命令JAL/JALR/JR命令)
を実行する際のスタックのオフセット値を先読みするオ
フセット・ルックアサイド・バッファ(オフセット取得
手段)17を備えている。オフセット・ルックアサイド
・バッファ17は、サブルーチンコール・デコーダ3と
並列的に動作し、JAL/JALR/JR命令の後に続くaddiu命令
のオフセット値を検出する。
を行う命令(例えば、ジャンプ命令JAL/JALR/JR命令)
を実行する際のスタックのオフセット値を先読みするオ
フセット・ルックアサイド・バッファ(オフセット取得
手段)17を備えている。オフセット・ルックアサイド
・バッファ17は、サブルーチンコール・デコーダ3と
並列的に動作し、JAL/JALR/JR命令の後に続くaddiu命令
のオフセット値を検出する。
【0063】オフセット・ルックアサイド・バッファ1
7がヒット、すなわちオフセット値が検出され、ヒット
信号がアサートされると、その旨がサブルーチンコール
・デコーダ3に通知され、サブルーチンコールが実行さ
れることを示すEntSub信号がアサートされる。なお、En
tSub信号は、サブルーチンコール・デコーダ3でJR命令
が検出されるまでアサートされる。
7がヒット、すなわちオフセット値が検出され、ヒット
信号がアサートされると、その旨がサブルーチンコール
・デコーダ3に通知され、サブルーチンコールが実行さ
れることを示すEntSub信号がアサートされる。なお、En
tSub信号は、サブルーチンコール・デコーダ3でJR命令
が検出されるまでアサートされる。
【0064】EntSub信号がアサートされたことがプリフ
ェッチ制御部12により検出されると、プリフェッチの
シーケンスが開始される。
ェッチ制御部12により検出されると、プリフェッチの
シーケンスが開始される。
【0065】まず、オフセット・ルックアサイド・バッ
ファ17から出力されるオフセット値の上位側ビット列
bit[15:6]を反転した値をプリフェッチ・カウントレジ
スタ12aに格納する。
ファ17から出力されるオフセット値の上位側ビット列
bit[15:6]を反転した値をプリフェッチ・カウントレジ
スタ12aに格納する。
【0066】サブルーチンの先頭におけるスタックポイ
ンタ操作では負の数を加えることになっており、また、
アドレスの下位6ビットはキャッシュラインのオフセッ
トであるため、オフセット値の上位側ビット列bit[15:
6]の1の補数が、プリフェッチでキャッシュロードを行
っておくべきキャッシュライン数になる。
ンタ操作では負の数を加えることになっており、また、
アドレスの下位6ビットはキャッシュラインのオフセッ
トであるため、オフセット値の上位側ビット列bit[15:
6]の1の補数が、プリフェッチでキャッシュロードを行
っておくべきキャッシュライン数になる。
【0067】プリフェッチ制御部12は、SelAdder信号
を制御してセレクタ15にアダー13の出力を選択させ
る。さらに、プリフェッチ制御部12は、PrefReq信号
により、データキャッシュ制御部に対してプリフェッチ
アクセスの発行を要求する。
を制御してセレクタ15にアダー13の出力を選択させ
る。さらに、プリフェッチ制御部12は、PrefReq信号
により、データキャッシュ制御部に対してプリフェッチ
アクセスの発行を要求する。
【0068】データキャッシュ制御部は、プリフェッチ
の終了、または次のプリフェッチの受付ができるように
なった時点で、PrefEnd信号をアサートする。
の終了、または次のプリフェッチの受付ができるように
なった時点で、PrefEnd信号をアサートする。
【0069】プリフェッチ・カウントレジスタ12a
は、PrefEnd信号がアサートされると、レジスタ値を1
だけ減算する。また、プリフェッチ制御部12は、WrPA
dr信号をアサートし、現在のプリフェッチアドレスにキ
ャッシュラインサイズ0x40を加えた数をPAdrレジスタ1
4に格納する。プリフェッチ制御部12は、プリフェッ
チ・カウントレジスタ12aがゼロか否かを確認し、ゼ
ロであれば、プリフェッチ動作を終了する。
は、PrefEnd信号がアサートされると、レジスタ値を1
だけ減算する。また、プリフェッチ制御部12は、WrPA
dr信号をアサートし、現在のプリフェッチアドレスにキ
ャッシュラインサイズ0x40を加えた数をPAdrレジスタ1
4に格納する。プリフェッチ制御部12は、プリフェッ
チ・カウントレジスタ12aがゼロか否かを確認し、ゼ
ロであれば、プリフェッチ動作を終了する。
【0070】プリフェッチ・カウントレジスタ12aが
ゼロでない場合、プリフェッチ制御部12は、SelAddr
信号を制御して、セレクタ15にPAdrレジスタ14値を
選択させる。また、PrefReq信号をアサートして次のプ
リフェッチを要求する。
ゼロでない場合、プリフェッチ制御部12は、SelAddr
信号を制御して、セレクタ15にPAdrレジスタ14値を
選択させる。また、PrefReq信号をアサートして次のプ
リフェッチを要求する。
【0071】以降、最初のプリフェッチ動作と同様に、
PrefEnd信号がアサートされた時点で、プリフェッチ・
カウントレジスタ12aとPAdrレジスタ14の更新を行
い、プリフェッチ・カウントレジスタ12aの値により
次のプリフェッチを行うか否かを判断する。
PrefEnd信号がアサートされた時点で、プリフェッチ・
カウントレジスタ12aとPAdrレジスタ14の更新を行
い、プリフェッチ・カウントレジスタ12aの値により
次のプリフェッチを行うか否かを判断する。
【0072】以上のプリフェッチ制御部12の動作は、
EntSub信号がデアサートされた時点で強制的に終了す
る。これにより、サブルーチンに入った後、スタック領
域のプリフェッチが終了する前にサブルーチンの実行が
終了した場合に、それ以上プリフェッチは継続されなく
なる。
EntSub信号がデアサートされた時点で強制的に終了す
る。これにより、サブルーチンに入った後、スタック領
域のプリフェッチが終了する前にサブルーチンの実行が
終了した場合に、それ以上プリフェッチは継続されなく
なる。
【0073】このように、第3の実施形態では、サブル
ーチンコールの際に指定されるスタックのオフセット値
を先読みするため、サブルーチンで使用するキャッシュ
領域を迅速に検出でき、キャッシュリフィル処理を短時
間で行うことができる。
ーチンコールの際に指定されるスタックのオフセット値
を先読みするため、サブルーチンで使用するキャッシュ
領域を迅速に検出でき、キャッシュリフィル処理を短時
間で行うことができる。
【0074】なお、第3の実施形態においても、図5と
同様のNeedNodLoad信号をプリフェッチ制御部12から
データキャッシュ制御ユニット4に供給することによ
り、キャッシュリフィルのペナルティをより削減するこ
とができる。
同様のNeedNodLoad信号をプリフェッチ制御部12から
データキャッシュ制御ユニット4に供給することによ
り、キャッシュリフィルのペナルティをより削減するこ
とができる。
【0075】(第4の実施形態)第4の実施形態は、サ
ブルーチンコールの際に、オフセット値を取得すること
なく、キャッシュラインのリフィル処理を行うものであ
る。
ブルーチンコールの際に、オフセット値を取得すること
なく、キャッシュラインのリフィル処理を行うものであ
る。
【0076】図7は本発明に係るプロセッサの第4の実
施形態の概略構成を示すブロック図である。図7では、
図3と共通する構成部分には同一符号を付しており、以
下では、相違点を中心に説明する。
施形態の概略構成を示すブロック図である。図7では、
図3と共通する構成部分には同一符号を付しており、以
下では、相違点を中心に説明する。
【0077】図7のプロセッサは、図3と比較して、Ad
diuデコーダ11、PAdrレジスタ14、およびアダー1
3を省略する一方で、スタックポインタの値からキャッ
シュラインサイズ分のアドレス値0x40を減算する減算器
(スタックポインタ計算手段)18を設けた構成になっ
ている。また、図7のプロセッサでは、プリフェッチ制
御部12も簡略化されており、プリフェッチ・カウント
レジスタ12aが省略されている。
diuデコーダ11、PAdrレジスタ14、およびアダー1
3を省略する一方で、スタックポインタの値からキャッ
シュラインサイズ分のアドレス値0x40を減算する減算器
(スタックポインタ計算手段)18を設けた構成になっ
ている。また、図7のプロセッサでは、プリフェッチ制
御部12も簡略化されており、プリフェッチ・カウント
レジスタ12aが省略されている。
【0078】図7において、サブルーチンコールを行う
命令(例えば、JAL/JALR/JR命令)が検出されると、サ
ブルーチンコール・デコーダ3は、EntSub信号をアサー
トする。EntSub信号がアサートされたことをプリフェッ
チ制御部12が検出すると、プリフェッチのシーケンス
が開始される。
命令(例えば、JAL/JALR/JR命令)が検出されると、サ
ブルーチンコール・デコーダ3は、EntSub信号をアサー
トする。EntSub信号がアサートされたことをプリフェッ
チ制御部12が検出すると、プリフェッチのシーケンス
が開始される。
【0079】まず、現在のスタックポインタの値から0x
40だけ減じたものがプリフェッチアドレスとしてデータ
キャッシュ制御ユニット4に入力される。また、サブル
ーチンコール・デコーダ3は、サブルーチンコールを行
う命令が検出された時点で、EntSub信号をアサートす
る。プリフェッチ制御部12は、EntSub信号がアサート
されると、プリフェッチの開始を指示するPrefReq信号
をアサートする。このPrefReq信号がアサートされたこ
とにより、データキャッシュ制御ユニット4は、プリフ
ェッチの終了または次のプリフェッチの受付ができるよ
うになった時点で、PrefEnd信号をアサートする。
40だけ減じたものがプリフェッチアドレスとしてデータ
キャッシュ制御ユニット4に入力される。また、サブル
ーチンコール・デコーダ3は、サブルーチンコールを行
う命令が検出された時点で、EntSub信号をアサートす
る。プリフェッチ制御部12は、EntSub信号がアサート
されると、プリフェッチの開始を指示するPrefReq信号
をアサートする。このPrefReq信号がアサートされたこ
とにより、データキャッシュ制御ユニット4は、プリフ
ェッチの終了または次のプリフェッチの受付ができるよ
うになった時点で、PrefEnd信号をアサートする。
【0080】第4の実施形態は、第1〜第3の実施形態
と比較して、性能向上はそれほど望めないが、回路が非
常に単純でありながら、プロセッサがアクセスする確率
が非常に高い部分に対して、効率よくプリフェッチを発
行することができる。
と比較して、性能向上はそれほど望めないが、回路が非
常に単純でありながら、プロセッサがアクセスする確率
が非常に高い部分に対して、効率よくプリフェッチを発
行することができる。
【0081】したがって、比較的小規模のプロセッサな
ど、メモリ効率に重点がおかれるようなプロセッサで
は、一つの関数が使用するメモリ領域があまり多くな
く、スタック操作がだいたい1キャッシュラインが収ま
ることが多いので、このような場合に第4の実施形態は
効果を発揮する。
ど、メモリ効率に重点がおかれるようなプロセッサで
は、一つの関数が使用するメモリ領域があまり多くな
く、スタック操作がだいたい1キャッシュラインが収ま
ることが多いので、このような場合に第4の実施形態は
効果を発揮する。
【0082】また、第4の実施形態においても、プリフ
ェッチ先を計算した結果の下位6ビットがすべてゼロで
ある場合、プリフェッチ先と現在のスタックポインタと
は別のキャッシュラインに格納される。したがって、こ
の下位6ビットがすべてゼロであることを検出する回路
を付加することにより、図5と同様に、外部メモリから
のキャッシュリフィルを直ちには行わなくてよくなり、
キャッシュリフィルの性能をさらに向上させることがで
きる。
ェッチ先を計算した結果の下位6ビットがすべてゼロで
ある場合、プリフェッチ先と現在のスタックポインタと
は別のキャッシュラインに格納される。したがって、こ
の下位6ビットがすべてゼロであることを検出する回路
を付加することにより、図5と同様に、外部メモリから
のキャッシュリフィルを直ちには行わなくてよくなり、
キャッシュリフィルの性能をさらに向上させることがで
きる。
【0083】なお、上述した第1〜第4の実施形態を考
慮に入れて、コンパイラによるスタックのマッピングを
最適化することにより、さらにキャッシュリフィルの性
能向上が図れる。
慮に入れて、コンパイラによるスタックのマッピングを
最適化することにより、さらにキャッシュリフィルの性
能向上が図れる。
【0084】
【発明の効果】以上詳細に説明したように、本発明によ
れば、サブルーチンコールなどの特定の命令が発行され
た場合に、スタックポインタなどの特定の用途に用いら
れるレジスタの値の変化量に基づいて、キャッシュメモ
リのリフィル処理を行うため、特定の命令を実行する際
のキャッシュミスによるペナルティを低減することがで
きる。
れば、サブルーチンコールなどの特定の命令が発行され
た場合に、スタックポインタなどの特定の用途に用いら
れるレジスタの値の変化量に基づいて、キャッシュメモ
リのリフィル処理を行うため、特定の命令を実行する際
のキャッシュミスによるペナルティを低減することがで
きる。
【0085】特に、命令発行の制御が難しいとされるプ
リフェッチをハードウェアにより制御するのではなく、
用途が特殊で書き換えタイミングをハードウェアで容易
に予測可能なスタックレジスタを用いることにより、プ
リフェッチ先を動的かつ正確に予測でき、キャッシュミ
スによるペナルティを低減することができる。
リフェッチをハードウェアにより制御するのではなく、
用途が特殊で書き換えタイミングをハードウェアで容易
に予測可能なスタックレジスタを用いることにより、プ
リフェッチ先を動的かつ正確に予測でき、キャッシュミ
スによるペナルティを低減することができる。
【0086】また、スタック領域におけるデータの局在
性を生かし、データをキャッシュにリフィルする必要が
ない場合には、データプリフェッチ時に無用な外部メモ
リアクセス等を起こさないようにしたため、データの特
性に合ったキャッシュ管理機構を実現することができ
る。
性を生かし、データをキャッシュにリフィルする必要が
ない場合には、データプリフェッチ時に無用な外部メモ
リアクセス等を起こさないようにしたため、データの特
性に合ったキャッシュ管理機構を実現することができ
る。
【図1】本発明の基本原理を説明するブロック図。
【図2】プロセッサが実行する命令列の一例を示す図。
【図3】本発明によるプロセッサの第1の実施形態の概
略構成を示すブロック図。
略構成を示すブロック図。
【図4】図3とは逆の順序でプリフェッチを行う例を示
すブロック図。
すブロック図。
【図5】本発明によるプロセッサの第2の実施形態の概
略構成を示すブロック図。
略構成を示すブロック図。
【図6】本発明に係るプロセッサの第3の実施形態の概
略構成を示すブロック図。
略構成を示すブロック図。
【図7】本発明に係るプロセッサの第4の実施形態の概
略構成を示すブロック図。
略構成を示すブロック図。
1 命令バッファ/キュー 2 実行ユニット 3 サブルーチンコール・デコーダ 4 オフセット生成器 5 特殊レジスタ 6 アドレス生成ユニット 7 データキャッシュ制御ユニット 11 Addiuデコーダ 12 プリフェッチ制御部 12a プリフェッチ・カウントレジスタ 12b 制御論理部 13 アダー 14 PAdrレジスタ 15 セレクタ 16 加算器 17 オフセット・ルックアサイド・バッファ 18 減算器
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.7 識別記号 FI テーマコート゛(参考) G06F 12/08 G06F 12/08 E
Claims (7)
- 【請求項1】外部メモリに書き込むデータ、あるいは外
部メモリから読み出したデータを一時的に格納するキャ
ッシュメモリを備えたマイクロプロセッサにおいて、 特定の命令が発行された場合における、特定の用途に用
いられるレジスタの値の変化量を履歴情報または後続の
命令から取得する変化量取得手段と、 取得された前記変化量に基づいて、前記キャッシュメモ
リ内の少なくとも一部のデータ領域に対してリフィル処
理を行うキャッシュ・リフィル手段と、を備えることを
特徴とするマイクロプロセッサ。 - 【請求項2】外部メモリに書き込むデータ、あるいは外
部メモリから読み出したデータを一時的に格納するキャ
ッシュメモリを備えたマイクロプロセッサにおいて、 サブルーチンの呼び出しに関する命令が発行された場合
に、該サブルーチン内で設定される次のスタックポイン
タの値を計算する次ポインタ値計算手段と、 サブルーチンの呼び出しに関する命令が発行された場合
に、前記キャッシュメモリに対してプリフェッチを要求
するプリフェッチ要求手段と、 プリフェッチが要求されたときに、前記次ポインタ値計
算手段で計算された値を起点として、前記キャッシュメ
モリのキャッシュライン単位でデータのリフィル処理を
行うキャッシュ制御手段と、を備えることを特徴とする
請求項1に記載のマイクロプロセッサ。 - 【請求項3】前記次ポインタ値計算手段は、サブルーチ
ンの呼び出しに関する命令に後続する、スタックポイン
タのオフセット値を指定する命令に基づいて、前記次の
スタックポインタの値を計算することを特徴とする請求
項2記載のマイクロプロセッサ。 - 【請求項4】プリフェッチされるデータのすべてが対応
するサブルーチンでのスタック操作のみに使用され、他
のサブルーチンでは使用されない場合に、前記キャッシ
ュメモリに対して、キャッシュラインのリフィル処理を
行わずに、キャッシュタグへの登録を行うように指示す
る指示手段を備えることを特徴とする請求項2または3
に記載のマイクロプロセッサ。 - 【請求項5】プリフェッチを行ったキャッシュラインの
数を計測するライン数計測手段を備え、 前記指示手段は、前記ライン数計測手段で計測されたキ
ャッシュラインの数に基づいて、キャッシュラインのリ
フィル処理を行うか否かを決定することを特徴とする請
求項4に記載のマイクロプロセッサ。 - 【請求項6】サブルーチンが呼び出された場合に該サブ
ルーチン内で設定される次のスタックポインタと、該サ
ブルーチンが呼び出される直前のスタックポインタとの
オフセット値を、サブルーチンが呼び出される前に取得
するオフセット取得手段を備え、 前記次ポインタ値計算手段は、取得された前記オフセッ
ト値と現在のスタックポインタとに基づいて、次のスタ
ックポインタの値を計算することを特徴とする請求項2
〜5のいずれかに記載のマイクロプロセッサ。 - 【請求項7】外部メモリに書き込むデータ、あるいは外
部メモリから読み出したデータを一時的に格納するキャ
ッシュメモリを備えたマイクロプロセッサにおいて、 サブルーチンが呼び出される直前のスタックポインタの
値から、前記キャッシュメモリのキャッシュラインのサ
イズ分ずつ、スタックポインタの値を増減させるスタッ
クポインタ計算手段と、 サブルーチンの呼び出しに関する命令が発行された場合
に、前記キャッシュメモリに対してプリフェッチを要求
するプリフェッチ要求手段と、 プリフェッチが要求されたときに、前記スタックポイン
タ値計算手段で計算された値を起点として、前記キャッ
シュメモリのキャッシュライン単位でデータのリフィル
処理を行うキャッシュ制御手段と、を備えることを特徴
とするマイクロプロセッサ。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000088972A JP2001273137A (ja) | 2000-03-28 | 2000-03-28 | マイクロプロセッサ |
US09/818,611 US6742102B2 (en) | 2000-03-28 | 2001-03-28 | Microprocessor and cache controlling method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000088972A JP2001273137A (ja) | 2000-03-28 | 2000-03-28 | マイクロプロセッサ |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2001273137A true JP2001273137A (ja) | 2001-10-05 |
Family
ID=18604782
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000088972A Pending JP2001273137A (ja) | 2000-03-28 | 2000-03-28 | マイクロプロセッサ |
Country Status (2)
Country | Link |
---|---|
US (1) | US6742102B2 (ja) |
JP (1) | JP2001273137A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015060376A (ja) * | 2013-09-18 | 2015-03-30 | 富士通株式会社 | キャッシュメモリ制御プログラム,キャッシュメモリを内蔵するプロセッサ及びキャッシュメモリ制御方法 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6832296B2 (en) * | 2002-04-09 | 2004-12-14 | Ip-First, Llc | Microprocessor with repeat prefetch instruction |
US7055016B2 (en) * | 2003-04-30 | 2006-05-30 | Sun Microsystems, Inc. | Computer system including a memory controller configured to perform pre-fetch operations |
JP5730126B2 (ja) * | 2011-05-18 | 2015-06-03 | キヤノン株式会社 | データ供給装置、キャッシュ装置、データ供給方法、キャッシュ方法およびプログラム |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5043870A (en) * | 1982-02-24 | 1991-08-27 | At&T Bell Laboratories | Computer with automatic mapping of memory contents into machine registers during program execution |
CA2045790A1 (en) * | 1990-06-29 | 1991-12-30 | Richard Lee Sites | Branch prediction in high-performance processor |
EP0496439B1 (en) * | 1991-01-15 | 1998-01-21 | Koninklijke Philips Electronics N.V. | Computer system with multi-buffer data cache and method therefor |
US5634027A (en) | 1991-11-20 | 1997-05-27 | Kabushiki Kaisha Toshiba | Cache memory system for multiple processors with collectively arranged cache tag memories |
JP2868654B2 (ja) | 1991-11-20 | 1999-03-10 | 株式会社東芝 | キャッシュメモリ制御方法 |
US5835967A (en) * | 1993-10-18 | 1998-11-10 | Cyrix Corporation | Adjusting prefetch size based on source of prefetch address |
US5995749A (en) * | 1996-11-19 | 1999-11-30 | Advanced Micro Devices, Inc. | Branch prediction mechanism employing branch selectors to select a branch prediction |
US5974543A (en) * | 1998-01-23 | 1999-10-26 | International Business Machines Corporation | Apparatus and method for performing subroutine call and return operations |
-
2000
- 2000-03-28 JP JP2000088972A patent/JP2001273137A/ja active Pending
-
2001
- 2001-03-28 US US09/818,611 patent/US6742102B2/en not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015060376A (ja) * | 2013-09-18 | 2015-03-30 | 富士通株式会社 | キャッシュメモリ制御プログラム,キャッシュメモリを内蔵するプロセッサ及びキャッシュメモリ制御方法 |
Also Published As
Publication number | Publication date |
---|---|
US20010027510A1 (en) | 2001-10-04 |
US6742102B2 (en) | 2004-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8140768B2 (en) | Jump starting prefetch streams across page boundaries | |
JP3640355B2 (ja) | キャッシュ制御の命令プリフェッチ方法及びシステム | |
US6128703A (en) | Method and apparatus for memory prefetch operation of volatile non-coherent data | |
US7383391B2 (en) | Prefetch mechanism based on page table attributes | |
US7996624B2 (en) | Prefetch unit | |
US6157993A (en) | Prefetching data using profile of cache misses from earlier code executions | |
JP3739491B2 (ja) | プリフェッチ命令を用いるハーバードアーキテクチャキャッシュメモリの調和したソフトウェア制御 | |
US20050086435A1 (en) | Cache memory controlling apparatus, information processing apparatus and method for control of cache memory | |
US7877537B2 (en) | Configurable cache for a microprocessor | |
JPH09128294A (ja) | 先取り命令を生成する方法とシステム | |
JP2004038345A (ja) | プリフェッチ制御装置、情報処理装置及びプリフェッチ制御方法 | |
KR100234647B1 (ko) | 인스트럭션 프리페치 방법 및 데이터 처리 시스템 | |
US20080052470A1 (en) | Runtime register allocator | |
EP2495662B1 (en) | Configurable cache for a microprocessor | |
JPWO2007099598A1 (ja) | プリフェッチ機能を有するプロセッサ | |
JP6457836B2 (ja) | プロセッサおよび命令コード生成装置 | |
WO1997034229A9 (en) | Segment descriptor cache for a processor | |
US20150193348A1 (en) | High-performance data cache system and method | |
JP2001273137A (ja) | マイクロプロセッサ | |
US5819080A (en) | Microprocessor using an instruction field to specify condition flags for use with branch instructions and a computer system employing the microprocessor | |
JP2001166989A (ja) | プリフェッチ機構を有するメモリシステム及びその動作方法 | |
CN114924797A (zh) | 预取指令的方法、信息处理装置、设备及存储介质 | |
US9645825B2 (en) | Instruction cache with access locking | |
JP3735373B2 (ja) | マイクロコンピュータ | |
CN116521578A (zh) | 一种提高指令缓存预取执行效率的芯片***及方法 |