説明

メモリアクセス判定回路、メモリアクセス判定方法、キャッシュ制御装置および電子機器

【課題】データ処理の高速化を可能とすること。
【解決手段】キャッシュ制御部32のキャッシュ判定部33は、カウンタ部22のカウント値CTに対応するアドレスADRをキャッシュ判定する。基準値算出部49は、アドレスADRに対するキャッシュヒットのヒット率HRと、キャッシュミスのときにカウント値CTに対応するアドレスADRに対するキャッシュミスのミス率MRとに基づいて、カウンタ部22がカウント値CTをカウントするための基準値m,nを変更する。

【発明の詳細な説明】
【技術分野】
【0001】
メモリアクセス判定回路、メモリアクセス判定方法、キャッシュ制御装置および電子機器に関する。
【背景技術】
【0002】
従来、メインメモリとキャッシュメモリを備え、先読みアドレスのデータをメインメモリからキャッシュメモリに先読みするキャッシュメモリ装置が知られている。このような装置において、例えば、データに付随するキャッシュ制御情報に基づいてアドレス計算回路で先読みアドレスを決定する技術が知られている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平9−259040号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、データにキャッシュ制御情報を付加すると、付加した分だけメモリを多く必要とし、キャッシュ判定を高速化できたとしても、メモリへのアクセス効率が低下してしまうためデータ処理が遅くなる。キャッシュ制御情報を含むデータは、プロセッサによりアクセスされることを前提としているため、データに汎用性が無い。
【課題を解決するための手段】
【0005】
本発明の一観点によれば、制御信号に応じて第1の基準値と第2の基準値とを切り替え、前記第1の基準値又は前記第2の基準値に基づいて値をカウントするカウンタと、前記カウンタの出力に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュミスと判定した場合に前記制御信号を出力する制御部と、前記キャッシュ判定に応じて前記第2の基準値の値を変更する変更部と、を有する。
【発明の効果】
【0006】
本発明の一観点によれば、データ処理の高速化を可能とすることができる。
【図面の簡単な説明】
【0007】
【図1】電子機器の概略構成図である。
【図2】メモリアクセス判定回路のブロック回路図である。
【図3】カウンタ部のブロック図である。
【図4】カウンタ部の動作説明図である。
【図5】メモリアクセス判定処理のフローチャートである。
【図6】(a)(b)は基準値mの変更処理の説明図である。
【図7】(a)(b)は基準値nの変更処理の説明図である。
【図8】メモリアクセス判定回路の動作説明図である。
【図9】比較例の動作説明図である。
【図10】処理対象の画像の説明図である。
【図11】処理対象の画像の説明図である。
【図12】キャッシュヒット率と処理速度の関係を示す特性図である。
【図13】(a)(b)は画像データの変更処理を示す説明図である。
【図14】処理対象の画像の説明図である。
【図15】拡大処理の説明図である。
【図16】(a)(b)はメモリアクセスを示す説明図である。
【図17】メモリアクセス判定回路の動作説明図である。
【図18】メモリアクセス判定回路の動作説明図である。
【図19】メモリアクセス判定回路の動作説明図である。
【図20】比較例の動作説明図である。
【図21】比較例の動作説明図である。
【図22】比較例の動作説明図である。
【図23】比較例の動作説明図である。
【図24】比較例の動作説明図である。
【図25】比較例の動作説明図である。
【発明を実施するための形態】
【0008】
以下、一実施形態を添付図面に従って説明する。
[電子機器の構成]
図1に示すように、電子機器は、処理装置11、キャッシュ装置12、メインメモリ13を含む。
【0009】
処理装置11は、キャッシュ装置12を介してメインメモリ13をアクセスする。メインメモリ13は、メモリに対してアクセスを開始してからデータが出力されるまでに時間のかかるメモリ、例えば、シンクロナスDRAM(Synchronous Dynamic Random Access Memory)である。そして、処理装置11は、メインメモリ13から読み出したデータに対して所定の処理を行い、処理後のデータをメインメモリ13に格納、又は外部へ出力する。
【0010】
キャッシュ装置12は、メインメモリ13に比して高速なメモリ(以下、キャッシュメモリという)を有している。キャッシュメモリは、例えばスタティックRAM(Static Random Access Memory )である。キャッシュ装置12は、過去に処理装置11がメインメモリ13をアクセスしたデータ(リードデータ/ライトデータ)をキャッシュメモリに記憶する。処理装置11から出力されるアドレスに対応するデータがキャッシュメモリに記憶されている場合をキャッシュヒットといい、データがキャッシュメモリに記憶されていない場合をキャッシュミスという。キャッシュ装置12は、処理装置11から出力されるアドレスに基づいてキャッシュ判定を行い、キャッシュヒットの場合にはキャッシュメモリに記憶したデータを処理装置11に出力する。従って、キャッシュヒットの場合、処理装置11のアクセス要求は、処理装置11とキャッシュ装置12との間のデータの送受信だけで終了する。従って、処理装置11におけるデータ入出力のためのアクセスを高速化することができる。
【0011】
一方、キャッシュ装置12は、キャッシュミスの場合に、キャッシュ処理を行うとともに先読み処理(プリフェッチ処理)を行う。キャッシュ処理は、キャッシュミスと判定されたアドレスADRに対応するデータをメインメモリ13から読み出してキャッシュメモリに記憶する処理である。キャッシュ装置12は、キャッシュミスと判定されたアドレスから、キャッシュメモリの1つのライン分のデータをメインメモリ13から読み出してキャッシュメモリに記憶する。これにより、キャッシュミスが発生したアドレスから連続したアドレスによって指定される複数バイト(例えば64バイト)のデータがキャッシュメモリの1つのラインに記憶される。
【0012】
先読み処理は、キャッシュミスと判定されたアドレスADRより後にメインメモリ13から読み出される可能性があるアドレスのデータを、処理装置11のアクセスより先に読み出してキャッシュメモリに記憶する処理である。処理装置11が処理するために必要とするデータのアドレスは、処理の内容と、データの構造に応じて算出することが可能である。従って、処理装置11が必要とするであろうデータのアドレスを先読みアドレスとして算出する。
【0013】
キャッシュ装置12は、キャッシュミスと判定したときに処理装置11にウェイト信号WTを出力する。処理装置11は、ウェイト信号WTに応答して生成した先読みアドレスを出力する。キャッシュ装置12は、この先読みアドレスのデータがキャッシュメモリ31に存在しない場合に、この先読みアドレスのデータをメインメモリ13から読み出してキャッシュメモリに記憶する。このように、処理装置11から出力される先読みアドレスに基づいてデータの先読み処理を行い、近い将来にアクセスされるアドレスのデータを先読みすることで、キャッシュメモリのヒット率を高めることができる。
【0014】
処理装置11は、データ処理部21、カウンタ部22、アドレス演算部23を含む。キャッシュ装置12は、キャッシュメモリ31、キャッシュ制御部32を含む。キャッシュ制御部32はキャッシュ制御装置の一例である。
【0015】
処理装置11のデータ処理部21は、メインメモリ13をアクセスするための機能として、アクセス要求等の信号を出力する機能を有する。また、データ処理部21は、メインメモリ13から読み出したデータを処理する機能を有している。また、データ処理部21は、メインメモリ13に対するアクセスの初期データを設定する機能を有している。
【0016】
データ処理部21は、カウンタ部22とアドレス演算部23に対して初期データを設定する。カウンタ部22に対する初期データは、カウンタ部22がカウントアップする際の変化量(増加値)を含む。アドレス演算部23に対する初期データは、処理対象のデータが格納されたメインメモリ13の領域における読み出し開始位置(例えば領域の先頭アドレス)を含む。
【0017】
カウンタ部22は、クロック信号CKに応答してカウント値CTに変化量(増加値)を加算し、その加算結果の値をカウント値CTとして出力する。カウンタ部22に設定される変化量(増加値)は、3つの基準値f,m,nを含む。カウンタ部22は、キャッシュ装置12から出力されるウェイト信号WTに基づいて基準値f,m,nを切り替え、その切り替えた1つの基準値に基づいて値をカウントし、カウント値CTを出力する。
【0018】
基準値f,m,nは、サイクル数に対応する値である。即ち、カウンタ部22は、基準値に対応するサイクル後に必要なデータのアドレスを求めるための値をカウントする。カウンタ部22は、カウント値CTをアドレス演算部23に出力する。
【0019】
キャッシュ装置12のキャッシュ制御部32は、判定結果がキャッシュミスの場合、ウェイト信号WTをアサートする。そして、キャッシュ制御部32は、ウェイト信号WTがアサートされた原因となるアドレスのデータがメインメモリ13から読み出されてキャッシュメモリ31に格納されると、ウェイト信号WTをネゲートする。
【0020】
カウンタ部22は、ウェイト信号WTがネゲートされているとき、基準値fに基づいてカウントし、カウント値CTを出力する。詳しくは、カウンタ部22は、出力しているカウント値CTに基準値fを加算し、その加算結果をカウント値CTとして出力する。従って、カウント値CTは、クロック信号CKに基づいて、そのサイクル毎に基準値fだけ増加する。
【0021】
また、カウンタ部22は、ウェイト信号WTがアサートされているとき、基準値m又は基準値に基づいてカウントし、カウント値CTを出力する。詳しくは、カウンタ部22は、出力しているカウント値CTに対し、ウェイト信号WTがアサートされた最初のサイクルにおいて基準値mを加算し、その加算結果をカウント値CTとして出力する。そして、カウンタ部22は、ウェイト信号WTがアサートされて2つめ以降のサイクルにおいて、基準値nを加算し、その加算結果をカウント値CTとして出力する。従って、カウント値CTは、クロック信号CKとウェイト信号WTとに基づいて、ウェイト信号WTがアサートされた最初のサイクルのみ基準値mだけ増加し、それ以降のサイクルにおいて基準値nづつ増加する。
【0022】
ここで、カウンタ部22の構成例を説明する。
図3に示すように、カウンタ部22は、加算回路22a〜22c、選択回路22d、保持回路22eを含む。
【0023】
加算回路22aには基準値fが入力される。基準値fは、例えば「1」である。加算回路22aは、カウント値CTに基準値f(=1)を加算し、その加算結果S1を出力する。加算回路22bには、カウント値CTと基準値mが入力される。加算回路22bは、カウント値CTに基準値mを加算し、その加算結果S2を出力する。加算回路22cには、カウント値CTと基準値nが入力される。加算回路22cは、カウント値CTに基準値nを加算し、その加算結果S3を出力する。
【0024】
選択回路22dは、初回判定回路(「1st判定」と表記)22fを含む。初回判定回路22fは、ウェイト信号WTがアサートされた最初のサイクルを判定する。選択回路22dは、ウェイト信号WTに基づいて、加算回路22aの出力値S1を選択し、その出力値S1をカウント値CTとして出力する。また、選択回路22dは、初回判定回路22fの判定結果に基づいて、ウェイト信号WTがアサートされた最初のサイクルにおいて加算回路22bの出力値S2を選択し、その出力値S2をカウント値CTとして出力する。更に、選択回路22dは、初回判定回路22fの判定結果に基づいて、ウェイト信号WTがアサートされたサイクルのうち、最初のサイクルを除くサイクルにおいて、加算回路22cの出力値S3を選択し、その出力値S3をカウント値CTとして出力する。
【0025】
保持回路22eは、ウェイト信号WTがアサートされると、その時のカウント値CTを保持し、ウェイト信号WTがネゲートされると保持した値を出力する。この保持回路22eにより、ウェイト信号WTがネゲートされているときカウント値CTが、基準値fに基づく値となるように設定されている。
【0026】
例えば、図4に示すように、カウント値CTの初期値を「0」とする。また、基準値f,m,nをそれぞれ「1」「8」「4」とする。
ウェイト信号WTがネゲートされているとき、基準値f(=1)に基づいて、カウント値CTは基準値fづつ、つまり「1」づつ増加する。ウェイト信号WTがアサートされると、保持回路22eは、そのときのカウント値CT(=2)を保持する。
【0027】
ウェイト信号WTがアサートされた最初のサイクルにおけるカウント値CTは、基準値m(=8)に基づく値(10=2+8)となる。そして、次のサイクルにおけるカウント値CTは、基準値n(=4)に基づく値(14=10+4)となる。更に次のサイクルにおけるカウント値CTは、基準値nに基づく値(18=14+4)となる。そして、ウェイト信号WTがネゲートされると、カウント値CTは、図3の保持回路22eに保持された値(=2)と基準値f(=1)とに基づく値(3=2+1)となる。
【0028】
アドレス演算部23は、データ処理部21から受け取った初期データ(開始位置)と、カウンタ部22から受け取ったカウント値CTに基づいて、メインメモリ13をアクセスするアドレス(リードアドレス)を求める。例えば、アドレス演算部23は、カウント値とアドレスとの対応関係を示す演算式を用いて、計算によりカウント値からアドレス(読み出し位置)を求め、開始位置に読み出し位置を加算してリードアドレスを生成する。演算式は、予めアドレス演算部23に設定されている。アドレス演算部23は、生成したリードアドレスADRをキャッシュ装置12に出力する。なお、カウント値とアドレスとの対応関係を示すルックアップテーブルを参照して、カウント値に該当するアドレスを求めてもよい。この場合、ルックアップテーブルは、予めアドレス演算部23に設定される。アドレス演算部23は、アドレスADRをキャッシュ装置12に出力する。
【0029】
演算式及びルックアップテーブルは、メインメモリ13に記憶されたデータに対する処理に応じて設定される。例えば、メインメモリ13に画像データが格納され、その画像データに対する処理の一例として画像の部分拡大処理(ズーム処理)を行う。この場合、所定領域の画像データを読み出し、その画像データのデータ数(画素数)を増加させる。画素数を増加させる最も簡単な処理は、読み出した1つの画素を、並べて2つの画素にするものである。つまり、1つのラインにおいて、1つのアドレスに2回アクセスし、各アクセス毎に読み出した画像データ、つまり2つの画像データを2つのアドレスにそれぞれ格納する。これにより、1つのラインの画素数を2倍の画素数に変換する。この処理を同一のラインに対して2回行う(データの格納はアドレスに行う)ことで、1つのラインを2つのラインに変換する。以上の処理により、部分画像の縦横の画素数を、それぞれ2倍の画素数の画像に変換することができる。
【0030】
このような処理の場合、1つの画素の画像データに対して4回のアクセスが行われる。つまり、このような1つの画素の画像データに対して複数回アクセスするようにアドレスを生成するように、上記の演算式又はルックアップテーブルが設定される。
【0031】
別の処理は、二値化処理である。この場合、画像データに含まれる画素を順次読み出し、閾値と比較した結果に応じた値をメインメモリ13に格納する。各画素をそれぞれ処理するため、この処理におけるアドレスは、画像データに含まれる画素を順次読み出すように設定される、つまり、1つの画素について1回の読み出しを行うように、演算式等が設定される。
【0032】
上記したように、キャッシュ装置12は、キャッシュメモリ31とキャッシュ制御部32を有している。キャッシュメモリ31は複数(例えば8)のラインを有し、各ラインは所定容量(例えば64バイト)に設定されている。各ラインには、容量に応じて、連続するアドレスのデータが記憶される。キャッシュメモリ31は、各ラインの番号と、各ラインに記憶したデータのアドレス情報を関連付けて記憶している。
【0033】
キャッシュメモリ31は、キャッシュ制御部32から受け取ったライン番号に対応するデータをデータ処理部21に出力する。また、キャッシュメモリ31は、キャッシュ制御部32からのアドレスに起因してメインメモリ13から読み出されたデータを記憶するとともにそのデータDTcをデータ処理部21に出力する。
【0034】
[キャッシュ制御部の構成(1)]
キャッシュ制御部32は、キャッシュ判定、データの先読み制御を行うように構成されている。その構成を説明する。
【0035】
キャッシュ制御部32は、キャッシュ判定部33、ウェイト制御部34、プリフェッチ制御部35、アクセス調停部36を含む。
キャッシュ判定部33は、アドレス演算部23から受け取ったアドレスADRに基づいて、キャッシュ判定を行う。つまり、キャッシュ判定部33は、キャッシュメモリ31から、キャッシュメモリ31に格納されている全データに対応するアドレス情報IADを取得する。キャッシュ判定部33は、キャッシュメモリ31から受け取ったアドレス情報IADに基づいて、アドレス演算部23から受け取ったアドレスADRに対してキャッシュ判定を行う。
【0036】
アドレス情報IADは、キャッシュメモリ31のラインに格納された複数のデータに対し、先頭のデータが格納されたメインメモリ13のアドレス(ラインの先頭アドレス)を含む。つまり、1つのラインには、先頭アドレスSADから、先頭アドレスにラインの容量値を加算した値(ラインの最終アドレスEAD))までのデータが格納されている。従って、アドレスADRが、先頭アドレスSADから最終アドレスEADの範囲内であれば、そのアドレスADRのデータが当該ラインに格納されている。一方、アドレスADRが、先頭アドレスSADから最終アドレスEADの範囲外のとき、アドレスADRのデータは当該ラインに格納されていない。
【0037】
このため、キャッシュ判定部33は、アドレス演算部23から受け取ったアドレスADRと各ラインのアドレス情報IADとを比較し、アドレスADRのデータがキャッシュメモリ31に格納されているか否か、つまり、アドレスADRに対するキャッシュヒット/キャッシュミスを判定する。そして、キャッシュ判定部33は、判定結果がキャッシュヒットである場合、判定信号HMをネゲート(例えばLレベル)にするとともに、ライン番号Lnをキャッシュメモリ31へ送る。一方、判定結果がキャッシュミスである場合、キャッシュ判定部33は、判定信号HMをアサート(例えばHレベル)にするとともに、キャッシュミスと判定されたアドレスADRをメモリアクセス要求(要求アドレスADC)としてアクセス調停部36へ送る。
【0038】
ウェイト制御部34は、判定信号HMがアサートされると、ウェイト信号WTをアサートにするとともに、プリフェッチ制御部35にプリフェッチアドレスのエントリを指示する。ウェイト信号WTは、ウェイト信号WTがアサートにされた原因となるアドレスのデータがメインメモリ13から読み出されてキャッシュメモリ31に格納されるまで、アサートされた状態を保つ。ウェイト信号WTがアサートにされた原因となるアドレスのデータがキャッシュメモリ31に格納されると、ウェイト信号WTはネゲートされる。ウェイト信号WTがアサートされているときには、先読みアドレスのエントリが指示されており、ウェイト信号WTがネゲートされているときには、先読みアドレスのエントリの指示は取り下げられている。
【0039】
プリフェッチ制御部35は、先読み動作を制御する。プリフェッチ制御部35は、判定信号HMがアサートされ、かつプリフェッチアドレスのエントリが指示されると、アドレス演算部23から出力されたアドレスADRを先読みアドレスとして先読みアドレスバッファ35aに格納する。プリフェッチ制御部35は、先読みアドレスバッファ35aに格納された先読みアドレスを格納の古い順に先読み用のメモリアクセス要求としてアクセス調停部36へ送る。先読みアドレスバッファ35aは、例えば先入れ先出し(First-In First-Out:FIFO)方式のメモリが用いられる。
【0040】
アクセス調停部36は、例えば、キャッシュ判定部33からのメモリアクセス要求と先読みアドレスバッファ35aからの先読み用のメモリアクセス要求とが競合した場合、キャッシュ判定部33からのメモリアクセスを優先する。それによって、データ処理部21で必要なデータが直ちにメインメモリ13から読み出されて、キャッシュメモリ31に格納される。従って、先読みアドレスによるメモリアクセスを優先させるよりも、データ処理部21での処理の高速化を図ることができる。先読み用のメモリアクセス要求は、キャッシュ判定部33からのメモリアクセス要求の処理後に、処理される。アクセス調停部36は、キャッシュ判定部33からのメモリアクセス要求を受け付けると、当該メモリアクセス要求によるデータの転送が終了するまでは、キャッシュ判定部33からの新たなメモリアクセス要求を受け付けない。
【0041】
上記のように構成された電子機器において、キャッシュ判定処理、先読みアドレス(プリフェッチアドレス)の制御処理の流れを図5に従って説明する。
先ず、基準値fでカウントを開始する(ステップ61)。
【0042】
次いで、メモリアクセス判定処理が終了であるか否かを判定する(ステップ62)。処理終了の場合(ステップ62:Yes)、一連のメモリアクセス判定処理を終了する。処理終了ではない場合(ステップ62:No)、ステップ63に移行する。
【0043】
次いで、演算式又はルックアップテーブルの参照により、カウント値CTに対応するアドレスADRを求める(ステップ63)。
次いで、アドレスADRに対してキャッシュ判定を行う(ステップ64)。キャッシュヒットである場合(ステップ64:No)、アドレスADRのデータがキャッシュメモリ31(図1参照)から読み出され、データ処理部21へ送られる。そして、ステップ61へ移行する。キャッシュミスの場合(ステップ64:Yes)、カウント値CTを保持する(ステップ65)。また、キャッシュミスと判定されたアドレスADRに対する読み出し処理を開始する。この読み出し処理は、アドレスADRのデータを含む1ライン分のデータをメインメモリ13から読み出して、キャッシュメモリ31に格納することを含む。キャッシュメモリ31へのデータの格納が終了するまでの間、基準値mに基づいて値をカウントし、カウント値CTを生成する(ステップ66)。
【0044】
次いで、カウント値CTに対応するプリフェッチアドレス(先読みアドレス)を求める(ステップ67)。このプリフェッチアドレスに対してキャッシュ判定を行う(ステップ68)。プリフェッチアドレスがキャッシュヒットである場合(ステップ68:No)、又は基準値nに基づいて値をカウントしたカウント値CTを生成し、同様にプリフェッチアドレスを求め、キャッシュ判定を行う(ステップ66〜ステップ68)。プリフェッチアドレスがキャッシュミスである場合(ステップ68:Yes)、当該プリフェッチアドレスを先読みアドレスバッファ35aに保持する(ステップ69)。
【0045】
次いで、ステップ64で判定したキャッシュミスに起因して実行されている、メインメモリ13からのデータの読み出しが終了したか否かを判定する(ステップ70)。メインメモリ13からのデータの読み出しが終了していない場合(ステップ70:No)、データの読み出しが終了するまでステップ66〜ステップ70の処理を繰り返し実行する。データの読み出しが終了した場合(ステップ70:Yes)、ステップ65で保持したカウント値を復帰する(ステップ71)。そして、ステップ61に移行する。
【0046】
[キャッシュ制御部の構成(2)]
キャッシュ装置12は、ウェイト信号WTがアサートされているときにカウント値CTを生成するための基準値m,nを変更するように構成されている。その構成を説明する。
【0047】
図2に示すように、キャッシュ制御部32は、アクセスカウンタ41、ヒットカウンタ42、ヒット率算出部43、ヒット率保持部44、ミスカウンタ45、プリフェッチミスカウンタ46、ミス率算出部47、ミス率保持部48、基準値算出部49、基準値保持部50、変化方向保持部51を含む。
【0048】
アクセスカウンタ41には、アドレスADRが供給される。アクセスカウンタ41は、供給されるアドレスADRの数をカウントし、そのカウント値ACをヒット率算出部43に出力する。アドレスADRは、メインメモリ13をアクセスするために、処理装置11のアドレス演算部23から供給される。つまり、カウント値ACは、キャッシュメモリ31に対するアクセス回数を示す。
【0049】
キャッシュ判定部33から出力される判定信号HMは、ヒットカウンタ42,ヒット率保持部44,ミスカウンタ45,プリフェッチミスカウンタ46,ミス率保持部48,変化方向保持部51に供給される。
【0050】
ヒットカウンタ42は、判定信号HMに基づいて、その判定信号HMがアサートされた回数、つまりアドレスADRに対してキャッシュヒットと判定された回数をカウントし、そのカウント値HCをヒット率算出部43に出力する。
【0051】
ヒット率算出部43は、キャッシュヒットの回数を示すカウント値HCと、アクセス回数を示すカウント値ACと、に基づいて、アクセス回数に対するヒット率HRを算出する。詳しくは、ヒット率算出部43は、キャッシュヒットの回数を示すカウント値HCと、アクセス回数を示すカウント値ACとに基づいて、次式、
HR=(AC/HC)×100
により、ヒット率HR(Hit Rate)を算出する。そして、ヒット率算出部43は、算出したヒット率HRをヒット率保持部44と基準値算出部49に出力する。
【0052】
ヒット率保持部44は、判定信号HMに基づいて、その判定信号HMがネゲートされたとき、つまりキャッシュミスと判定されたときに、ヒット率算出部43から出力されるヒット率HRを保持し、その保持した値を保持ヒット率BHR(Before Hit Rate )として基準値算出部49に出力する。
【0053】
ミスカウンタ45は、判定信号HMに基づいて、その判定信号HMがネゲートされた回数、つまりアドレスADRに対してキャッシュミスと判定された回数をカウントし、そのカウント値MCをミス率算出部47に出力する。
【0054】
プリフェッチミスカウンタ46は、最初の先読みアドレスがキャッシングされていない、つまりキャッシュミスと判定された回数をカウントし、そのカウント値PMCをミス率算出部47に出力する。
【0055】
ミス率算出部47は、キャッシュミスの回数を示すカウント値MCと、最初の先読みアドレスにおけるキャッシュミスの回数を示すカウント値PMCと、に基づいて、先読みアドレスのミス率MRを算出する。詳しくは、ミス率算出部47は、最初の先読みアドレスにおけるキャッシュミスの回数を示すカウント値PMCと、キャッシュミスの回数を示すカウント値MCとに基づいて、次式、
MR=(PMC/MC)×100
により、ミス率MR(最初の先読みアドレスのミス率:1st Premiss Rate)を算出する。そして、ミス率算出部47は、算出したミス率MRをミス率保持部48と基準値算出部49に出力する。
【0056】
ミス率保持部48は、判定信号HMに基づいて、その判定信号HMがネゲートされたとき、つまりキャッシュミスと判定されたときに、ミス率算出部47から出力されるミス率MRを保持し、その保持した値を保持ミス率BMR(Before Miss Rate)として基準値算出部49に出力する。
【0057】
基準値算出部49には、基準値保持部50にて保持された保持基準値Bm,Bnが供給される。また、基準値算出部49には、変化方向保持部51にて保持された変化方向値Dm,Dnが供給される。基準値算出部49は、変更する基準値m,nの値が格納された基準値テーブル49aを有している。基準値算出部49は、供給される各値に基づいて基準値テーブル49aに格納された値のうちの1つを選択し、その選択した値を基準値mとして出力する。同様に、基準値算出部49は、供給される各値に基づいて基準値テーブル49aに格納された値のうちの1つを選択し、その選択した値を基準値nとして出力する。
【0058】
例えば、基準値算出部49は、ミス率MR、保持ミス率BMR、保持基準値Bm、変化方向値Dmに基づいて、基準値テーブル49aに格納された値のうちの1つを選択し、その選択した値を基準値mとして出力する。また、基準値算出部49は、ヒット率HR、保持ヒット率BHR、保持基準値Bn、変化方向値Dnに基づいて、基準値テーブル49aに格納された値のうちの1つを選択し、その選択した値を基準値nとして出力する。基準値算出部49から出力される基準値m,nは、基準値保持部50と変化方向保持部51とカウンタ部22に供給される。
【0059】
基準値保持部50は、判定信号HMに基づいて、その判定信号HMがネゲートされたとき、つまりキャッシュミスと判定されたときに、基準値算出部49から出力される基準値m,nをそれぞれ保持し、それぞれ保持した値を保持基準値Bm,Bn(Before m,Before n)として基準値算出部49と変化方向保持部51に出力する。
【0060】
変化方向保持部51は、判定信号HMに基づいて、基準値算出部49から出力される基準値m,nと、基準値保持部50から出力される保持基準値Bm,Bnとを比較し、基準値m,nが変化した方向(Direction )を算出し、その算出結果を保持する。そして、変化方向保持部51は、保持した値を変化方向値Dm,Dnを基準値算出部49に出力する。変化方向保持部51は、例えば、基準値mから保持基準値Bmを減算し、その減算結果が正の値の場合に方向値Dmを「0」とし、減算結果が負の値の場合に方向値Dmを「1」とする。また、変化方向保持部51は、減算結果が「0」の場合に、前回の演算結果を保持する。変化方向保持部51は、基準値nについて同様に演算して方向値Dnを決定する。
【0061】
次に、キャッシュ制御部32にて実行される基準値mの変更処理を、図6(a),図6(b)に従って説明する。
先ず、初期化処理を行う(ステップ81)。この処理において、ミス率保持部48の保持ミス率BMRをクリア(=0)する。また、基準値保持部50の保持基準値Bmを初期値(例えば「4」)とする。更に、変化方向保持部51の変化方向値Dmを初期値(例えば「0」)とする。
【0062】
次いで、アドレスADRに対してキャッシュ判定を行う(ステップ82)。キャッシュヒットである場合(ステップ82:Hit)、ステップ82に移行する。一方、キャッシュミスである場合(ステップ82:Miss)、プリフェッチアドレス(先読みアドレス)がキャッシュ済みか否かを判定する(ステップ83)。キャッシュ済みの場合(ステップ83:Yes)、ステップ82に移行する。
【0063】
一方、プリフェッチアドレスがキャッシュ済みではない場合(ステップ83:No)、ミスカウンタ45のカウント値MCとプリフェッチミスカウンタ46のカウント値PMCに基づいて、式、
MR=(PMC/MC)×100
によりミス率MR(1st Premiss Rate)を算出する(ステップ84)。
【0064】
次いで、算出したミス率MRと、ミス率保持部48から出力される保持ミス率BMRの差分値Δmrを算出し、この差分値Δmrと、保持基準値Bm、変化方向値Dm(図6(b)で「dir」と表記)に基づいて、図6(b)に示す表に従ってテーブル49a(図2参照)に含まれる値のうちの1つを選択する(ステップ85)。なお、この選択において、テーブル49aに含まれる値の最小値と最大値とをそれぞれ下限値及び上限値とする。
【0065】
次いで、選択した基準値mから保持基準値Bmを減算し、その減算結果が正の場合には「0」を、減算結果が負の場合には「1」を、変化方向値Dmとして保持する。なお、減算結果が「0」の場合には、前値を保持する(ステップ86)。これにより、基準値mの値を変更する方向、つまり基準値mを増加させたか、減少させたか、又は同値を選択したかを判定し、判定結果を保持する。更に、このステップにおいて、算出したミス率MRを保持するとともに、選択した基準値mを保持基準値Bmとして保持する。
【0066】
「0」の変化方向値Dmは、前回の変更時に基準値mを増加させたことを示し、「1」の変化方向値Dmは、前回の変更時に基準値mを減少させたことを示す。正の差分値Δmrは、ミス率MRの増加を示し、負の差分値Δmrは、ミス率MRの減少を示す。
【0067】
負の差分値Δmrであり、変化方向値Dmが「1」のときに、保持基準値Bmより大きい値を選択することは、基準値mの減少により低下したミス率MRを増加させる方向に値を選択することである。負の差分値Δmrであり、変化方向値Dmが「0」のときに、保持基準値Bmより小さな値を選択することは、基準値mの増加により低下したミス率MRを増加させる方向に値を選択することである。
【0068】
正の差分値Δmrであり、変化方向値Dmが「1」のときに、保持基準値Bmより小さな値を選択することは、基準値mの減少により増加したミス率MRを更に増加させる方向に値を選択することである。正の差分値Δmrであり、変化方向値Dmが「0」のときに、保持基準値Bmより大きな値を選択することは、基準値mの増加により増加したミス率MRを更に増加させる方向に値を選択することである。
【0069】
つまり、基準値算出部49は、ミス率MRが増加するように基準値mの値を変更する。ミス率MRは、キャッシュミスが発生したときに、最初に生成する先読みアドレスがキャッシュミスと判定される割合である。つまり、先読みアドレスにおけるミス率を増加させることは、ヒット率を増加させることにつながる。
【0070】
次に、キャッシュ制御部32にて実行される基準値nの変更処理を、図7(a),図7(b)に従って説明する。
先ず、初期化処理を行う(ステップ91)。この処理において、ヒット率保持部44の保持ヒット率BHRをクリア(=0)する。また、基準値保持部50の保持基準値Bnを初期値(例えば「4」)とする。更に、変化方向保持部51の変化方向値Dnを初期値(例えば「0」)とする。
【0071】
次いで、アドレスADRに対してキャッシュ判定を行う(ステップ92)。キャッシュヒットである場合(ステップ92:Hit)、ステップ92に移行する。一方、キャッシュミスである場合(ステップ92:Miss)、アクセスカウンタ41のカウント値ACとヒットカウンタ42のカウント値HCに基づいて、次式、
HR=(AC/HC)×100
によりヒット率HR(Hit Rate)を算出する(ステップ93)。
【0072】
次いで、算出したヒット率HRと、ヒット率保持部44から出力される保持ヒット率BHRの差分値Δhrを算出し、この差分値Δhrと、保持基準値Bn、変化方向値Dn(図7(b)で「dir」と表記)に基づいて、図7(b)に示す表に従ってテーブル49a(図2参照)に含まれる値のうちの1つを選択する(ステップ94)。なお、この選択において、テーブル49aに含まれる値の最小値と最大値とをそれぞれ下限値及び上限値とする。
【0073】
次いで、選択した基準値nから保持基準値Bnを減算し、その減算結果が正の場合には「0」を、減算結果が負の場合には「1」を、変化方向値Dnとして保持する。なお、減算結果が「0」の場合には、前値を保持する(ステップ95)。これにより、基準値nの値を変更する方向、つまり基準値nを増加させたか、減少させたか、又は同値を選択したかを判定し、判定結果を保持する。更に、このステップにおいて、算出したヒット率HRを保持するとともに、選択した基準値nを保持基準値Bnとして保持する。
【0074】
「0」の変化方向値Dnは、前回の変更時に基準値nを増加させたことを示し、「1」の変化方向値Dnは、前回の変更時に基準値nを減少させたことを示す。正の差分値Δhrは、ヒット率HRの増加を示し、負の差分値Δhrは、ヒット率HRの減少を示す。
【0075】
負の差分値Δhrであり、変化方向値Dnが「1」のときに、保持基準値Bnより大きい値を選択することは、基準値nの減少により低下したヒット率HRを増加させる方向に値を選択することである。負の差分値Δhrであり、変化方向値Dnが「0」のときに、保持基準値Bnより小さな値を選択することは、基準値nの増加により低下したヒット率HRを増加させる方向に値を選択することである。
【0076】
正の差分値Δhrであり、変化方向値Dnが「1」のときに、保持基準値Bnより小さな値を選択することは、基準値nの減少により増加したヒット率HRを更に増加させる方向に値を選択することである。正の差分値Δhrであり、変化方向値Dnが「0」のときに、保持基準値Bnより大きな値を選択することは、基準値nの増加により増加したヒット率HRを更に増加させる方向に値を選択することである。
【0077】
つまり、基準値算出部49は、ヒット率HRが増加するように基準値nの値を変更する。
従って、基準値算出部49は、ヒット率HRとミス率MRとに基づいて、キャッシュメモリ31におけるヒット率HRを高くし、その状態を維持するように基準値m,nを変更する。基準値m,nを変更する変更部は、ヒット率算出部43、ミス率算出部47、基準値算出部49を含む。
【0078】
[動作説明]
次に、上記のように構成された電子機器の動作を説明する。
先ず、キャッシュ判定、プリフェッチ動作を説明する。
<m、nが固定の場合の動作説明>
一例として、基準値fを「1」、基準値m,nを「4」とする。なお、図1に示すアドレス演算部23におけるカウント値CTと、そのカウント値CTに対応するアドレスADRを「CT,ADR」として示すと、それぞれ「0,0」「1,16」「2,32」「3,48」「4,64」「5,80」「6,96」「7,112」「8,128」「9,144」「10,160」となる。
【0079】
図8は、キャッシュ判定、プリフェッチ動作に関する動作の説明図である。ここでは、キャッシュメモリ31の1ラインのサイズを64バイトとする。従って、キャッシュヒットの際にキャッシュ判定部33からキャッシュメモリ31に与えられるライン番号は、メインメモリ13のアドレスの64バイトごとに一つ存在するとする。また、キャッシュ判定は、64バイト単位で行われるとする。また、キャッシュミスの発生時には、メインメモリ13から、キャッシュミスと判定されたアドレスのデータを含む64バイト分のデータが読み出されて、キャッシュメモリ31に格納されるとする。
【0080】
図8に示すように、まず、カウント値CTが「0」であるときには、キャッシュメモリ31には何も格納されていないので、キャッシュミスと判定される。それによって、アドレスADRが「0〜63」に対応するデータがメインメモリ13から読み出されてキャッシュメモリ31に格納される。アドレスADRが「0〜63」に対応するデータがキャッシュメモリ31に格納されるまでの間、基準値m(=4)が加算されてカウント値CTは「4」となる。従って、アドレスADRは「64」となる。アドレスADR「64」に対応するデータがキャッシュメモリ31に格納されていないので、キャッシュミスと判定される。そして、アドレスADR「64」が先読みアドレスバッファ35aに格納される。プリフェッチ制御部35は、アドレスADR「64〜127」についてリードアクセスを要求する。
【0081】
次いで、基準値n(=4)が加算されてカウント値CTが「8」となり、キャッシュミスと判定される。従って、アドレスADR「128」が先読みアドレスバッファ35aに格納される。プリフェッチ制御部35は、アドレスADR「128〜191」についてリードアクセスを要求する。次いで、カウント値CTが「12」となり、キャッシュミスにより同様に、アドレスADR「192」が先読みアドレスバッファ35aに格納される。プリフェッチ制御部35は、アドレスADR「192〜255」についてリードアクセスを要求する。この時点で、アドレスADR「0〜63」に対応するデータがキャッシュメモリ31に格納され終わったとする。カウント値CTが「0」に復帰し、この値に基準値f(=1)が加算されるので、新しいカウント値CTは「1」となる。
【0082】
「1」のカウント値CTに対応するアドレスADRは「16」であり、対応するデータは既にキャッシュメモリ31に格納されているので、キャッシュヒットとなる。カウント値CTが「2」であるときのアドレスADRは「32」であり、カウント値CTが「3」であるときのアドレスADRは「48」であるので、いずれもキャッシュヒットとなる。カウント値CTが「4」であるときのアドレスADRは「64」である。この時点で、先読みアドレスバッファ35aに格納されたアドレスADR「64」について、対応するデータがメインメモリ13から読み出されてキャッシュ判定部33に格納されているので、キャッシュヒットとなる。「5」以降のカウント値CTについても、先読みによって、対応するデータがメインメモリ13から読み出されてキャッシュ判定部33に格納されているので、キャッシュヒットとなる。
【0083】
図9は、比較例の動作の説明図である。比較例は、基準値m,nでのカウントによる先読み動作を行わない。その他の条件を図8で説明した例と同じとする。比較例では、カウント値CTが「4」や「8」であるときに、メインメモリからデータを読み出してキャッシュメモリへ格納するため、処理が遅くなる。図8及び図9は、同じサイクル数(クロック信号CKのパルス数)が示されている。図8では、カウント値CTが「12」まで処理が進んでいるのに対し、図9では、カウント値CTが「9」までしか処理されていない。図8と図9とを比較すると明らかなように、この実施形態の方が比較例よりも高速であることがわかる。従って、データ処理部21での処理を高速化することができる。
【0084】
次に、基準値の変更に関する動作を説明する。
処理の1つに、画像を回転する処理がある。
図10,図11は、それぞれ処理対象の画像101,102を示す。
【0085】
図10に示す例において、大きい四角は、例えば64画素×16画素の画像101である。図11に示す例において、大きい四角は、例えば16画素×64画素の画像102であり、図10に示す画像101を時計まわりに90度回転させたものである。両図とも、0〜1023の番号を付した小さい四角は、個々の画素103である。
【0086】
図10,図11に示す画像処理におけるキャッシュメモリ31とアドレスの動きを説明する。尚、図11に示す横方向において、各行において8画素毎に書き込むものとする。つまり、アドレス「960」のデータから横方向に沿って順番にアドレス「512」のデータを書き込んだ後、次の行のデータ、つまりアドレス「961」のデータを書き込むものとする。
【0087】
画像回転処理におけるカウント値CTと対応するアドレスADRは、図11に示すように、画素データの格納順序に従って、「CT,ADR」として示すと、それぞれ「0,960」「1,896」「2,832」「3,768」「4,704」「5,640」「6,576」「7,512」「8,448」「9,384」「10,320」となる。
【0088】
カウント値CTの初期値を「0」とする。また、1つの画素103に対するデータを1バイトとする。キャッシュメモリ31の1ラインを64バイト、キャッシュメモリ31の容量を512バイトとする。従って、キャッシュメモリ31は8ライン分のデータが格納可能である。
【0089】
先ず、アドレス「960」によるリードが行われる。このとき、キャッシュメモリ31にはデータが格納されていないため、アドレス「960」はキャッシュミスとなり、このアドレス「960」によりメインメモリ13に対してリードが実行される。キャッシュメモリ31の1ラインの容量に応じて、アドレス「960」〜「1023」のデータがメインメモリ13からリードされ、キャッシュメモリ31に格納される。このときにキャッシュメモリ31に格納されたデータは、図11に示す画像102において、縦一列の画素103のデータとなる。
【0090】
上記のアドレス「960」〜「1023」のデータをリードしている間、基準値m,nによる先読みアドレスが生成される。例えば、基準値m,nを「8」とする。すると、上記したカウント値CTとアドレスADRとの関係により、先読みアドレスは「961」となる。この先読みアドレス「961」は、先のアドレス「960」にて読み出す1ライン分のデータに含まれるため、先読みアドレスとして先読みアドレスバッファ35a(図1参照)には格納されない、つまり先読みの意味がない。これは、先読みアドレスが「1023」になるまで同様である。
【0091】
このため、次の先読みアドレスは「448」となる。このアドレス「448」は、上記と同様に、キャッシュミスとなり、このアドレス「448」は先読みアドレスバッファ35aに格納される。そして、アドレス「960」〜「1023」のデータが終了するまでの間、基準値nに基づく先読みアドレスの生成と、その先読みアドレスをバッファ35aに格納することが行われる。
【0092】
アドレス「960」〜「1023」のデータの読み出しが終了すると、カウント値CTが「1」となり、アドレス「896」に対するリードが行われる。このアドレス「896」についても、上記と同様に、キャッシュミスとなり、メインメモリ13に対するリードと、メインメモリ13から読み出したデータをキャッシュメモリ31に格納することが行われる。
【0093】
上記の処理が繰り返され、図11に示す1行目のアドレス「512」に対する処理が終了すると、2行目に進む。このとき、2行目の先頭の画素のアドレスは「961」であり、このアドレスのデータが必要となる。しかし、キャッシュメモリ31の容量制限(512バイト)により、先にアドレス「960」に基づいて読み出されたデータが格納されたラインには、他のアドレスに基づいて読み出されたデータが上書きされているため、アドレス「961」に対してキャッシュミスが発生する。このため、アドレス「960」〜「1023」のデータが再度読み出されることになる。
【0094】
また、アドレス「512」の画素に対する処理が終了したとき、図11において、アドレス「448」からアドレス「0」に対する先読みアドレスの生成とキャッシュ判定が行われる。しかし、これらのアドレスのデータに対する処理は、図11において、アドレス「575」(最下段中央)に対する処理が終了した後に行われる。従って、無駄な処理が行われることになる。
【0095】
このように画像を回転する処理の場合、基準値m,nは「1」であることが好ましいことが判る。基準値m,nを「1」に設定すると、図11において、アドレス「512」に対する処理がおこなわれるとき、キャッシュメモリ31には、図11において左側半分の画素のデータが記憶されている。従って、アドレス「961」からアドレス「575」に対してキャッシュヒットとなり、基準値m,nを「8」に設定したときと比べ、処理が高速化される。
【0096】
つまり、処理に応じて、基準値m,nが変更されるべきである。このため、基準値m,nを、処理に応じて予め設定することが考えられる。しかし、キャッシュメモリ31の設定(ライン数、1ラインのデータ数)や画像のサイズが異なると、基準値m,nを設定することが難しくなる。
【0097】
この実施形態のキャッシュ制御部32は、基準値m,nを、キャッシュのヒット率、ミス率に応じて変更する。つまり、キャッシュ制御部32は、キャッシュのヒット率、ミス率に応じて基準値m,nを動的に変更する。従って、処理や画像のサイズなどが異なっても、それに対応して基準値m,nを動的に変更することで、処理の高速化をはかることができる。
【0098】
処理の別の例として、歪み補正がある。画像は、実際の対象物と比べ、レンズなどの光学系によって、たる型や糸巻き型の歪みが発生する。このように歪みが発生した画像は、その中心部分は対象物とほぼ同一となるが、枠周辺にいくほど対象物と不一致が発生する。このような歪みを補正する場合、枠に近い画素ほど大きく移動させたりする必要がある。例えば、長方形状の対象物を撮影し、たる型の歪みが発生した場合、図13(a)に示すように、画像111には、楕円形状の対象物112が撮影されている。これを、元の対象物の形状に近い形、即ち、図13(b)に示すように、長方形状の対象物113を含む画像114に変換する。
【0099】
このような補正処理は、画像を周辺方向に引き延ばす処理と、必要な部分をトリミングして補正画像として取り出す処理を含む。画像を引き延ばす処理において、画素の移動位置に従ってメインメモリ13からデータを読み出し、補正後の画素を含む画像データを生成する。
【0100】
この引き延ばしの処理を単純化したモデルとして、図14に示すように、画像121について、頂点付近の領域122に含まれる画素を2倍に拡大する処理と、中央部分の領域123に含まれる画素を等倍とする処理とする。即ち、図15に示すように、領域123に含まれる画素124と、領域122に含まれる画素125を縦横に2倍した画像126を含む補正画像を生成する。
【0101】
なお、図15に示す数字は画素の番号を示し、図14に示す画像121において、左上の画素から右下に向って付した番号である。なお、この番号は、メインメモリ13に格納されたアドレスに対応するものとする。例えば、アドレス「0」についてリードを行うことで、画像121の左上の画素のデータ、つまり図15に示す「0」を付した画素のデータがメインメモリ13から読み出される。
【0102】
このような歪み補正に対するカウント値CTとアドレスADRを図16に示す。図16(a)は、中央部分の領域123(図14参照)の画像データを読み出すためのカウント値CT及びアドレスADRを示している。図16(b)は、周辺の領域122(図14参照)の画像データを読み出すためのカウント値CT及びアドレスADRを示している。
【0103】
尚、図16(a),図16(b)では、両領域122,123から読み出される画素の対比を判りやすくするために、カウント値CTをそれぞれの領域122,123の読み出し開始のアドレスを「0」として示している。なお、カウント値CTは、図14に示す画像121の全体を連続して処理する場合に、図16(a),(b)に示す値と異なることはいうまでもない。
【0104】
図14に示す領域122に含まれる画素のデータの読み出しに続いて、領域123に含まれる画素のデータを読み出すときの処理を、図17〜図19に従って説明する。なお、説明の都合上、図2に示すキャッシュメモリ31のラインサイズを4画素分とする。また、先読みアドレスバッファに格納可能なアドレス数を「4」、メインメモリ13からのリードサイクルを「8」とする。
【0105】
処理が開始されると、図6,図7に示す初期化処理により、基準値m,nとして初期値(例えば「4」)が設定される。
図17に示すように、先ず、カウント値CT(=0)に基づいて、アドレス「0」によるリードが行われる。この時、キャッシュメモリ31にはデータが格納されていないため、アドレス「0」はキャッシュミスとなり、このアドレス「0」によりメインメモリ13に対してリードが実行される。即ち、アドレス「0」〜「3」のデータがメインメモリ13から読み出され、キャッシュメモリ31に書き込まれる。データが書き込まれるラインの番号をLnとする。つまり、0番目のライン(Ln=0)にデータが書き込まれる。
【0106】
上記のアドレス「0」〜「3」のデータをリードしている間、基準値m,nによる先読みアドレスが生成される。今、基準値mが「4」であるため、カウント値CTが「4」となり、図16(b)に示すように、アドレス「0」が先読みアドレスPADとして生成される。この先読みアドレス「0」は、上記のように読み出しを行っているアドレスに含まれるため、先読みアドレスとして図1に示すバッファ35aには格納されない。次に、基準値n(=4)に基づいて、カウント値CTが「8」となり、アドレス「32」が先読みアドレスPADとして生成される。このアドレス「32」は読み出し中のアドレスに含まれず、またキャッシュメモリ31にデータが格納されていないため、キャッシュミスと判定され、バッファ35a(プリフェッチアドレスキューPQ)に格納される。そして、このアドレス「32」により、アドレス「32」〜「35」のデータの先読み処理が行われ、キャッシュメモリ31(Ln=1)に書き込まれる。
【0107】
同様に、アドレス「64」,「96」が先読みアドレスPADとして生成されバッファ35aに格納される。上記したように、この説明では、図14に示す領域122に対するデータと領域123に対するデータを連続的に読み出すとしている。このため、カウント値CTが「32」になると、領域123のデータ、つまり、図16(a)に示すカウント値CTが「0」のときのアドレス「72」を先読みアドレスとして生成する。上記と同様に、このアドレス「72」はキャッシュミスと判定され、バッファ35aに格納される。
【0108】
そして、これらのアドレス「64」,「96」,「72」に対する先読み処理は、先に実行される先読み処理の終了後に順次実行される。つまり、アドレス「32」による先読み処理が終了すると、FIFO方式のバッファ35aにより、アドレス「64」がバッファ35aに格納された最初のアドレスとなり、このアドレス「64」による先読み処理が実行される。
【0109】
上記のアドレス「0」〜「3」のデータが読み出されると、基準値f(=1)によりカウントされたカウント値CTに基づいて、画素のデータがキャッシュメモリ31から読み出されてデータ処理部21(図1参照)に供給される。
【0110】
そして、図18に示すように、アドレス「104」(図16(a)においてカウント値CT=4)によるリードが行われると、このアドレス「104」のデータはキャッシュメモリ31に格納されていなため、キャッシュミスと判定され、このアドレス「104」によりメインメモリ13に対してリードが実行される。そして、基準値m(=4)によりアドレス「136」(図16(a)においてカウント値CT=8)が生成される。このアドレス「136」はキャッシュミスと判定され、バッファ35a(図1参照)に格納される。
【0111】
キャッシュミスの発生により、図2に示す基準値算出部49は、基準値m,nを変更する。このとき、ミスカウンタ45のカウント値MCは「2」であり、プリフェッチミスカウンタ46のカウント値PMCは「1」である。従ってミス率MRは「50%」である。また、ヒットカウンタ42のカウント値HCは「35」であり、アクセスカウンタ41のカウント値ACは「37」である。従って、ヒット率HRは「94.594%」となる。このときの保持ヒット率BHRと保持ミス率BMRはともに「0%」である。従って、基準値算出部49は、図6(b),図7(b)に示す選択方法に従って基準値m,nを「10,10」とする。
【0112】
すると、基準値n(=10)により、アドレス「202」(図16(a)においてカウント値CT=18)が生成される。このアドレス「202」はキャッシュミスと判定され、バッファ35a(図1参照)に格納される。同様に、基準値n(=10)によりアドレス「296」が生成され、バッファ35aに格納される。
【0113】
同様に、生成されたアドレス「168」がキャッシュミスと判定されると、図2に示す基準値算出部49は、ヒット率HR等により次の基準値m,nに「16,6」を設定する。尚、この例では、領域122,123に含まれるデータ数が少ないため、変更された基準値m,nに応じたアドレスは含まれていないため、エントリなしとなる。
【0114】
図19に示すように、アドレス「232」によるリードが行われると、このアドレス「232」のデータはキャッシュメモリ31に格納されていないため、キャッシュミスと判定される。このキャッシュミスの発生により、図2に示す基準値算出部49は、ヒット率HR等に基づき、基準値m,nに「16,6」を設定する。このアドレス「232」〜「235」のデータは読み出し中であるため、アドレス「232」はバッファ35aに格納されない。また、キャッシュミスに基づき生成される先読みアドレスは、この例では領域外である、つまりプリフェッチ先が存在しないことになる。
【0115】
更に、アドレス「264」によるリードが行われると、このアドレス「264」のデータはキャッシュメモリ31に格納されていないため、キャッシュミスと判定される。そして、このアドレス「264」〜「267」のデータがメインメモリ13から読み出され、キャッシュメモリ31に書き込まれる。このキャッシュミスの発生により、図2に示す基準値算出部49は、ヒット率HR等に基づき、基準値m,nに「10,6」を設定する。尚、キャッシュミスに基づき生成される先読みアドレスは、この例では領域外である、つまりプリフェッチ先が存在しないことになる。
【0116】
そして、アドレス「298」によるリードが行われると、このアドレス「298」のデータはキャッシュメモリ31に格納されている(図18の右端)ため、キャッシュヒットと判定され、キャッシュメモリ31に格納されたデータがデータ処理部21に出力される。そして、アドレス「299」のデータが出力されると、図14に示す領域122,123に対する処理が終了する。
【0117】
次に、基準値m,nを変更しない場合の処理例を説明する。
図20〜図22は、図14に示す周辺の領域122を処理する場合を示す。また、図20は、基準値m,nを「8,8」に設定した場合の処理を示し、図21は、基準値m,nを「4,4」に設定した場合の処理を示し、図22は、基準値m,nを「2,2」に設定した場合の処理を示す。
【0118】
図23〜図25は、図14に示す中央部分の領域123を処理する場合を示す。また、図23は、基準値m,nを「8,8」に設定した場合の処理を示し、図24は、基準値m,nを「4,4」に設定した場合の処理を示し、図25は、基準値m,nを「2,2」に設定した場合の処理を示す。
【0119】
領域122に対する処理の場合、図20〜図23のうちでは、基準値m,nを「8,8」又は「4,4」に設定すればよいことが判る。一方、領域123に対する処理の場合、図23〜図25のうちでは、基準値m,nを「4,4」に設定すればよいことが判る。また、図14に示す画像121では、上記の領域122,123以外の部分で、最適な基準値m,nが上記の値(「4,4」)と異なる場合がある。つまり、基準値m,nを変更しない場合、画像121全体を通して最適な基準値m,nを設定する必要がある。
【0120】
一方、この実施形態では、図17〜図19に示すように、データの読み出しにより算出するヒット率等に応じて基準値m,nを動的に変更している。このため、図14に示す画像121全体に対して予め基準値m,nを設定する必要がない。そして、基準値算出部49は、キャッシュメモリ31のヒット率HRと先読みアドレスのミス率MRに基づいて、基準値m,nを変更する。このため、ヒット率HRを高い値に保つようにすることができる。
【0121】
図12は、キャッシュのヒット率と処理速度の関係を示す特性図である。
キャッシュのヒット率は、リードレイテンシを100サイクルとした場合の値である。処理速度は、「1」が最高速となるように正規化した値である。図12により、ヒット率を高くするほど処理速度が上がることが判る。また、わずかにヒット率を高くする(図において例えば0.2%)ことで、処理速度を約1.5倍にすることが可能であることが判る。従って、この実施形態のように、ヒット率を高くするように基準値m,nを変更することで、データの処理速度を高くする、つまりデータの処理時間を短縮することができる。
【0122】
以上記述したように、本実施形態によれば、以下の効果を奏する。
(1)基準値fに基づいてカウントされた値に対応するアドレスが発生するので、連続性を有するデータに対してキャッシュ判定を高速化することができる。従って、連続性を有するデータに対して処理を高速化することができる。
【0123】
(2)キャッシュミスが発生してメインメモリ13へアクセスしている間に、基準値m,nに基づいてカウントされた値に対応するアドレスが先読みアドレスPADとしてバッファ35aに格納される。そして、キャッシュミスによるメインメモリ13へのアクセス終了後に、先読みアドレスPADに対応するデータがメインメモリ13から読み出されてキャッシュメモリ31に格納されるので、後のサイクルでキャッシュヒットとなる確率が高くなる。従って、連続性を有するデータに対して処理を高速化することができる。
【0124】
(3)カウント値CTに対応するアドレスADRに対するキャッシュ判定に応じて基準値m,nを動的に変更するため、データに対する処理、データの読み出しに応じた基準値m,nにてアドレスを生成することができるようになり、データに対する処理の高速化を図ることができる。
【0125】
(4)基準値m,nを動的に変更するため、予め最適な基準値m,nを設定する必要がなく、更にはキャッシュのヒット率を高めることになり、性能を上げる事が可能になる。
(5)キャッシュメモリのヒット率HRと先読みアドレスのミス率MRを算出し、これらの値が高くなるように基準値m,nを動的に変更することで、キャッシュのヒット率が高い状態を保つことができ、データに対する処理の高速化を図ることができる。
【0126】
尚、上記実施形態は、以下の態様で実施してもよい。
・上記実施形態では、基準値m,nをそれぞれ変更するようにしたが、基準値m,nを互いに同じ値に変更するようにしてもよい。例えば、基準値mの値を「10」に変更した場合に、基準値nの値を「10」に変更する。このようにしても、処理に応じて基準値m,nを動的に変更することで、処理時間の短縮化を図ることが可能となる。
【0127】
・上記実施形態では、カウンタ部22は、ウェイト信号WTがアサートされていないとき、つまりキャッシュヒットの場合に、固定値「1」に基づいてカウントしてカウント値CTを生成するようにしたが、データ処理部21の構成、データのサイズ(1つの処理単位におけるビット数)、等に応じて、固定値を変更するようにしてもよい。
【0128】
・上記実施形態の構成(図1,2参照)に対し、キャッシュ装置12とメインメモリ13との間にメモリコントローラを介在させる構成としてもよい。
・上記実施形態では、基準値算出部49の基準値テーブル49aを用いて基準値m及び基準値nの値を変更するようにしたが、基準値mと基準値nとのそれぞれにテーブルを設け、それぞれのテーブルから値を選択するようにしてもよい。
【0129】
・上記実施形態では、ウェイト信号WTに応答してカウンタ部22が基準値の値を変更するようにしたが、そのたの制御信号、例えば、先読みアドレス生成要求のための信号に基づいて変更するようにしてもよい。
【0130】
・上記実施形態に対し、キャッシュ装置12が変更値をカウンタ部22に供給する構成としてもよい。
【符号の説明】
【0131】
12 キャッシュ装置
13 メインメモリ
22 カウンタ部
31 キャッシュメモリ
32 キャッシュ制御部
33 キャッシュ判定部
43 ヒット率算出部
47 ミス率算出部
49 基準値算出部
f,m,n 基準値
CT カウント値
HR ヒット率
MR ミス率

【特許請求の範囲】
【請求項1】
制御信号に応じて第1の基準値と第2の基準値とを切り替え、前記第1の基準値又は前記第2の基準値に基づいて値をカウントするカウンタと、
前記カウンタの出力に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュミスと判定した場合に前記制御信号を出力する制御部と、
前記キャッシュ判定に応じて前記第2の基準値の値を変更する変更部と、
を有することを特徴とするメモリアクセス判定回路。
【請求項2】
前記変更部は、
前記キャッシュ判定に基づくキャッシュのヒット率を算出するヒット率算出部を有し、
前記ヒット率に応じて前記第2の基準値の値を変更する、
ことを特徴とする請求項1記載のメモリアクセス判定回路。
【請求項3】
前記ヒット率算出部は、
キャッシュミスが発生したときに前記第2の基準値に基づくカウント値に応じたアドレスのキャッシュ判定に基づくキャッシュのミス率を算出する、
ことを特徴とする請求項2記載のメモリアクセス判定回路。
【請求項4】
前記第2の基準値は、前記制御部がキャッシュミスと判定した後の最初のサイクルにおける第1のアドレスを生成するための基準値(m)と、前記最初のサイクル以後のサイクルにおける第2のアドレスを生成するための基準値(n)とを含み、
前記変更部は、
キャッシュミスが発生したときに前記第2の基準値に基づくカウント値に応じたアドレスのキャッシュ判定に基づくキャッシュのミス率に基づいて前記第1のアドレスを生成するための基準値の値を変更し、
前記キャッシュ判定に基づくキャッシュのヒット率に基づいて前記第2のアドレスを生成するための基準値の値を変更する、
ことを特徴とする請求項1記載のメモリアクセス判定回路。
【請求項5】
前記変更部は、前回のヒット率を保持し、その保持したヒット率と算出したヒット率とに基づいて、ヒット率が高くなるように前記第2の基準値の値を変更する、
ことを特徴とする請求項1〜4のうちの何れか一項に記載のメモリアクセス判定回路。
【請求項6】
前記制御部は、キャッシュミスが発生したときに、前記カウンタの出力に対応するアドレスを先読みアドレスとしてメインメモリに対する先読み処理を行い、前記メインメモリから読み出したデータをキャッシュメモリに記憶する、
ことを特徴とする請求項1〜5のうちの何れか一項に記載のメモリアクセス判定回路。
【請求項7】
前記カウンタは、前記制御部がキャッシュミスであると判定した場合に前記第1の基準値に基づくカウント値を保持し、前記キャッシュミスとなったアドレスに基づくメインメモリへのアクセス状況に応じて前記第2の基準値に基づくカウント値を、保持された前記第1の基準値に基づくカウント値に切り替えることを特徴とする請求項1〜6のうちの何れか一項に記載のメモリアクセス判定回路。
【請求項8】
基準値に基づいて値をカウントするカウンタの出力に対応するアドレスに基づいてキャッシュ判定を行って制御信号を出力するキャッシュ判定部と、
前記制御信号に応じて、前記判定部がキャッシュミスであると判定した場合に前記基準値を、前記キャッシュ判定におけるヒット率が高くなるように変更する変更部と、
を有することを特徴とするキャッシュ制御装置。
【請求項9】
制御信号に応じて第1の基準値と第2の基準値とを切り替え、前記第1の基準値又は前記第2の基準値に基づいて値をカウントし、
前記カウントされた値に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュミスと判定した場合に前記制御信号を出力し、前記キャッシュ判定に応じて前記第2の基準値の値を変更する、
ことを特徴とするメモリアクセス判定方法。
【請求項10】
メインメモリと、
前記メインメモリよりも高速なキャッシュメモリと、
制御信号に応じて第1の基準値と第2の基準値とを切り替え、前記第1の基準値又は前記第2の基準値に基づいて値をカウントするカウンタと、
前記カウンタの出力に対応するアドレスに基づいてキャッシュ判定を行い、キャッシュミスと判定した場合に前記制御信号を出力する制御部と、
前記キャッシュ判定に応じて前記第2の基準値の値を変更する変更部と、
を有することを特徴とする電子機器。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate


【公開番号】特開2012−79108(P2012−79108A)
【公開日】平成24年4月19日(2012.4.19)
【国際特許分類】
【出願番号】特願2010−223942(P2010−223942)
【出願日】平成22年10月1日(2010.10.1)
【出願人】(308014341)富士通セミコンダクター株式会社 (2,507)
【Fターム(参考)】