JP5627330B2 - 情報処理装置、キャッシュ装置およびデータ処理方法 - Google Patents

情報処理装置、キャッシュ装置およびデータ処理方法 Download PDF

Info

Publication number
JP5627330B2
JP5627330B2 JP2010173961A JP2010173961A JP5627330B2 JP 5627330 B2 JP5627330 B2 JP 5627330B2 JP 2010173961 A JP2010173961 A JP 2010173961A JP 2010173961 A JP2010173961 A JP 2010173961A JP 5627330 B2 JP5627330 B2 JP 5627330B2
Authority
JP
Japan
Prior art keywords
data
pipeline
cache
tag
hit
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.)
Active
Application number
JP2010173961A
Other languages
English (en)
Other versions
JP2012033112A (ja
JP2012033112A5 (ja
Inventor
伊藤 忠幸
忠幸 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2010173961A priority Critical patent/JP5627330B2/ja
Priority to US13/173,970 priority patent/US8819360B2/en
Publication of JP2012033112A publication Critical patent/JP2012033112A/ja
Publication of JP2012033112A5 publication Critical patent/JP2012033112A5/ja
Application granted granted Critical
Publication of JP5627330B2 publication Critical patent/JP5627330B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8015One dimensional arrays, e.g. rings, linear arrays, buses

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Image Processing (AREA)

Description

本発明は、複数のノードを有する2つのデータ・ストリーム間で相互に接続されたノードのデータ要素を処理する情報処理技術に関する。
複数のノードを有する2つのデータ・ストリームにおいて、それぞれのデータ・ストリームの各ノードで保持するデータ要素の各々を比較するアプリケーションがある。例えば、複数のデータを有する第1データ・ストリームの要素について、第2データ・ストリームの要素の少なくとも1つと一致するかどうかを判定する場合について、総当りで比較する処理がある。このようなアプリケーションでは、ある方向にデータ要素を移動させる第1データ・ストリームと、ある方向と逆方向にデータ要素を移動させる第2データ・ストリームの各々のデータ要素を比較する。しかしながら後述するように、相互に逆の方向にデータ要素を移動させる2つのデータ・ストリームにおいて、各ノードにおけるデータ要素の比較が正しく動作しないケースが起きる。
特許文献1には、相互に逆の方向にデータ要素を移動させる2種類のパイプライン・データストリームにおいて、パイプラインの各ステージで各々のデータ要素を比較する2方向パイプライン技術(カウンタフロー・パイプライン技術)が記載されている。この特許文献1では、各ノードにおけるデータ要素の比較が正しく動作しないケースに対し1つの解決策を開示している。
ここで、図13を用いてこのアプリケーションのデータ要素の比較が正しく動作しないケースについて説明する。図13には、互いに逆方向にデータ要素を移動させる2つのパイプライン回路の一部が記載されている。下側の第1パイプラインは、「上手」である図面上の左側から「下手」である図面上の右側に向かってデータ要素が移動する。一方、上側の第2パイプラインは「上手」である図面上の右側から「下手」である図面上の左側に向かってデータ要素が移動する。
図13(a)は、データ要素の比較が正しく行われ、前述の問題が発生しないケースである。第1パイプラインが動作することでデータ要素が移動し、第2パイプラインが停止することでデータ要素が移動しないケースを示している。図13(a−1)は、時刻[T]の状態を示し、図13(a−2)は、時刻[T]からある一定時間後の時刻[T+1]の状態を示し、図13(a−3)は、時刻[T+1]からさらに一定時間後の時刻[T+2]の状態を示す。
いま、第1パイプラインが動作し、「上手」である図面上の左側から「下手」である図面上の右側にパイプライン・ステージに保持されているデータ要素である、W、A(0)、A(1)、A(2)、B,Cが移動している。ここでA(0)、A(1)、A(2)は、説明上区別するために括弧の0,1,2で表記しているが、他のデータと同等のデータと考えてよい。第1パイプラインと第2パイプラインとが対応する各ステージは、比較して同じか否かを判定する判定ステージ901〜904により互いに接続されている。
図13(a−1)の時刻[T]のとき、各ステージの判定結果は、第1パイプラインの「下手」から順に以下のようになる。まず、第1パイプラインの一番下手の判定ステージ901では、データ要素WとAの比較となって一致しないので、<偽>と判定する。以降の判定ステージ902〜904についても、データ要素A(0)とZと、データ要素A(1)とYと、データ要素A(2)とXと、を各々比較して、一致しないので<偽>と判定する。
次に時間が経過し、図13(a−2)の時刻[T+1]のとき、第1パイプラインのデータ要素は、1ステージだけ「下手」に移動する。各判定ステージ901〜904の判定結果は、第1パイプラインの「下手」から順に、以下のようになる。まず、判定ステージ901で、データ要素A(0)とAとの比較となり、<真>と判定する。以降の判定ステージ902〜904では、データ要素A(1)とZと、データ要素A(2)とYと、データ要素BとXと、を各々比較して、<偽>と判定する。
さらに時間が経過し、図13(a−3)の時刻[T+2]のとき、第1パイプラインのデータ要素は、さらに1ステージだけ「下手」に移動する。各判定ステージ901〜904の判定結果は、第1パイプラインの「下手」から順に以下のようになる。まず、判定ステージ901でのデータ要素A(1)とAの比較となり、<真>と判定する。以降の判定ステージ902〜904では、データ要素A(2)とZと、データ要素BとYと、データ要素CとXと、を各々比較して、<偽>と判定する。
以上のように、第1パイプラインのデータ要素は時間の経過とともにステージを移動するが、第2パイプラインの「上手」にあるデータ要素Aとの比較は、第1パイプラインのデータ要素A(0)、A(1)共に正しく比較される。このように第1パイプラインと第2パイプラインで一方のみが動作し、一方が停止しているケースでは、データ要素の比較は、正しく行われる。
次に、第1パイプラインと第2パイプラインの両方が動作するケースを図13(b)に示す。図13(b−1)〜(b−3)は、図13(a−1)〜(a−3)と同様の時刻における状態を示している。第1パイプラインは、図13(a)と同様に動作するので説明を省略する。一方、第2パイプラインは、図13(a)とは異なる。すなわち、第2パイプラインでは、「上手」である図面上の右側から「下手」である図面上の左側にパイプライン・ステージに保持されているデータ要素X、Y、Z、A、B、Cも移動する。以下、図13(a)と同様に、第1パイプラインと第2パイプラインの対応する各ステージにおける判定ステージの判定結果を説明する。
図13(b−1)の時刻[T]のとき、各ステージの判定結果は第1パイプラインの「下手」から順に以下のようになる。まず、第1パイプラインの一番下手の判定ステージ901は、データ要素WとAとを比較し、一致しないので<偽>と判定する。以降の判定ステージ902〜904でも、判定(比較)回路は、データ要素A(0)とZと、データ要素A(1)とYと、データ要素A(2)とXと、を各々比較し、一致しないので<偽>と判定する。
次に時間が経過し、図13(b−2)の時刻[T+1]のとき、第1パイプラインのデータ要素と第2パイプラインのデータ要素は、1ステージだけ各々の下手に移動する。各判定ステージ901〜904の判定結果は、第1パイプラインの「下手」から順に以下のようになる。まず、判定ステージ901は、データ要素A(0)とBとを比較し、一致しないので<偽>と判定する。次の判定ステージ902では、データ要素A(1)とAとを比較し、一致するので<真>と判定する。以降のステージ903、904では、データ要素A(2)とZと、データ要素BとYと、を各々比較して、一致しないので<偽>と判定する。
さらに時間が経過し、図13(b−3)の時刻[T+2]のとき、第1パイプラインのデータ要素と第2パイプラインのデータ要素は、1ステージだけ各々の「下手」に移動する。各判定ステージ901〜904の判定結果は、第1パイプラインの「下手」から順に以下のようになる。まず判定ステージ901は、データ要素A(1)とCと比較し、一致しないので<偽>と判定する(ただし、A(1)は、図13(b−2)のときに判定ステージ902で<真>と判定済みである)。以降の判定ステージ902〜904で、データ要素A(2)とBと、データ要素BとAと、データ要素CとZと、を各々比較し、一致しないので<偽>と判定する。
以上のように、第1パイプラインと第2パイプラインが同時に移動する場合、第2パイプラインの「上手」にあるデータ要素Aと第1パイプラインのデータ要素A(1)は、比較された。しかし、データ要素A(0)とA(2)は第2パイプラインのデータ要素Aと比較されることがなかった。例えば、第1パイプラインの各々のデータ要素が、第2パイプラインのデータ要素の各々の少なくとも1つと一致するとき、図13(b−1)〜(b−c)の処理では正しい判定ができていないことがわかる。これは、第1パイプラインと第2パイプラインの両方が互いに逆方向に移動するため、両パイプラインの相対移動速度が2倍になることに由来する。
実際、図13(a)のケースでは、時刻[T]〜時刻[T+2]の間に、第1パイプラインのデータ要素、W、A(0)、A(1)の比較が完了するだけである。これに対し、図13(b)のケースでは第1パイプラインのデータ要素、W、A(0)、A(1)、A(2)、Bの比較が完了している。このように、図13(b)のケースは、図13(a)のケースと比較して判定時間が短くなる代わりに、データ要素の比較漏れが発生してしまうのである。
特許文献1に記載の技術は、データ要素が移動する際に通過する特定のステージおよびデータ要素に対し、実行予定の動作に応じてデータ要素を不規則なスケジュールで移動させることで、この問題を解決している。具体的には、第1パイプラインと第2パイプラインの各ステージにおいて、ステージ状態を監視する。そしてこの問題が起こる特定ステージにおいて、2方向のパイプラインのデータ要素の移動を停止し、比較が完了してから、その特定ステージのデータ要素の移動を許可するのである。この工夫により、比較の完了前に2方向のパイプライン上で関連するデータ要素が、判定されずに通り過ぎることを防いでいる。
しかしながら、このような構成では、問題が起こりうる特定ステージにおいて、停止、比較の完了、およびデータ要素の移動という動作を伴うため、その結果、各ステージ状態に合わせてデータ要素が不規則なスケジュールで移動と停止を繰り返してしまう。この不規則なスケジュールの繰り返しにより、データ処理のためのパイプラインは乱れ、パイプライン構成を採用する利点であるスループットの向上が妨げられてしまう。
一方、上記のようなデータ処理技術を用いた場合の最良の応用例として、非常に多くのデータ要素をパイプライン構成で高速にデータ処理するような用途が考えられる。例えば、このようなデータ処理を行う分野として画像処理分野やグラフィックス処理分野がある。近年、このような分野では製品の高画質化や機能強化のために種々な画像処理が行われており、複数コンテンツ(画像、映像)を時分割多重で同時並行的に画像処理したり、半透明のテクスチャデータを複数枚、重ね合わせて表示したりしている。このような画像処理では、DRAMなどの外部メモリから適宜必要な画像や映像を取り出して処理し、外部メモリからのデータ取得を、キャッシュ装置を介して行うことが一般的である。
しかしながら、時分割多重の画像処理や半透明テクスチャを複数枚重ね合わせると、様々な画像や映像を同時にしかも並行して処理することになり、1つの対象データである画像や映像データは、細切れに外部メモリから取得されことになる。一般的なキャッシュ技術の実装で、様々な対象データである画像や映像データを細切れに外部メモリから取得すると、キャッシュ競合が頻発しキャッシュ性能を著しく低下させてしまう。このキャッシュ競合を回避するため、キャッシュタグのウェイ数を増やすことができるが、一般的なキャッシュ技術の実装で多数のウェイが存在する場合、判定ステージでのセレクタの論理段数が多くなり、各ステージでのタイミング収束が難しくなる。このため、高い動作周波数で動作することが難しくなるという課題がある。また、同時にウェイ数を増やすことにより、キャッシュ競合時の置き換え制御も複雑となり、キャッシュ技術の実装も難しくなる。
特許第3588487号公報
従って本発明は、パイプラインを用いて処理を行う情報処理装置において、繰り返し必要とされるデータが情報処理装置から破棄されないように、置き換え制御を工夫しておこなうことで、より効率的な技術を提供することを目的とする。
係る課題を解決するため、情報処理装置は、複数の第1ノードを有し、当該第1ノードの保持する第1データを第1方向に位置する隣のノードへ移動させる第1パイプラインと、前記第1パイプラインの第1ノードの各々に対応する複数の第2ノードを有し、当該第2ノードの保持する第2データを前記第1方向と逆の第2方向に位置する隣のノードへ移動させる第2パイプラインと、前記第1データと前記第2データとを用いてデータ処理を行う処理手段と、前記第2パイプラインの出力した第2データの属性情報に基づき、前記出力した第2データの何れかを保持する保持手段と、を備え、前記第2データの属性情報に基づき、前記保持手段で保持した第2データを前記第2パイプラインに入力することを特徴とする。
本発明によれば、パイプラインを用いて処理を行う情報処理装置において、繰り返し必要とされるデータが情報処理装置から破棄されないように、置き換え制御を工夫しておこなうことで、より効率的な技術を提供することが可能となる。
データ処理装置の基本構成の一例を示すブロック図。 データ処理装置を応用したキャッシュタグ判定部の一例を示すブロック図。 データ処理装置のリオーダ回路の一例を示すブロック図。 データ処理装置をリオーダ回路の処理の一例を示すフローチャート。 データ処理装置を適用した画像処理装置の一例を示すブロック図。 データ処理装置を適用したキャッシュ装置のキャッシュメモリ調停部の処理フローの一例を示す図。 データ処理装置のリオーダ回路の一例を示すブロック図。 データ処理装置をリオーダ回路の処理の一例を示すフローチャート。 データ処理装置を適用したキャッシュ装置のキャッシュメモリ調停部の処理フローの一例を示す図。 データ処理装置に属性情報を組み込んだ基本構成の一例を示すブロック図。 データ処理装置に属性情報を組み込んだ基本構成の一例を示すブロック図。 データ処理装置に複数のリオーダバッファを備えるリオーダ回路の一例を示すブロック図。 従来技術の動作例を説明する図。
以下、添付の図面を参照して本発明の好適な実施形態を説明する。
<実施形態1>
(基本構成)
図1は、実施形態1による情報処理装置(以降、データ処理装置と称す)の基本構成の一例を示すブロック図である。図に示すように、各パイプラインは、データの保持手段としての複数のノードを有している。第1パイプライン100は、この場合、所定数の8つの第1ノード(第1保持手段)を有し、この中の1つを着目ノードとすると、着目ノードから第1の方向へ1つ下手の第1ノードへデータ要素(第1データ)を所定の周期で移動させる。このときの移動方向を「第1移動方向」、移動する行為を「第1移動工程」とする。また、第1パイプライン100には、外部から、データ要素の有効信号である「valid[l−1]」112と、データ信号である「data[l−1]」114と、データ信号の処理結果である処理結果信号「tag_id[l−1]」116とが入力される。この一連の入力信号は、種々のデータ処理を行うデータ処理回路120で処理された後、パイプライン・レジスタ110にて一時的に記憶される。
このパイプライン・レジスタ110は、駆動信号である「enable」102が有効(アサート状態)であるとき、データ処理後のデータ要素を一時的に記憶して、以前に記憶したデータ要素を更新する。ただし、「enable」102が無効(ディアサート状態)であるときは、このパイプライン・レジスタ110は、データ処理後のデータ要素を記憶せずに、以前に記憶したデータ要素をそのまま保持するため、データ要素の更新は行わない。入力からパイプライン・レジスタ110に一時的に記憶されるまでの区間をステージ(第1ステージ)と呼ぶ。
次にパイプライン・レジスタ110から、データ要素の有効信号「valid[l]」132と、データ信号「data[l]」134と、処理結果信号「tag_id[l]」136とが出力される。そして、第1ステージと同様にデータ処理回路140で種々のデータ処理が行われる。更に、処理後のデータ要素が、第2パイプライン・レジスタ130にて一時的に記憶されるが、この記憶動作は第1ステージと同様である。パイプライン・レジスタ110からのデータ要素がパイプライン・レジスタ130に一時的に記憶されるまでの区間を第2ステージと呼ぶ。
さらにパイプライン・レジスタ130からデータ要素の有効信号「valid[l+1]」152と、データ信号「data[l+1]」154と処理結果信号「tag_id[l+1]」156とが出力される。このような動作により、第1パイプライン100では、データ要素(有効信号「valid」とデータ信号「data」と処理結果信号「tag_id」)が「上手」である図面上の左側から「下手」である図面上の右側に移動する。
一方、本実施形態では、第1パイプライン以外に第2パイプラインが存在する。この第2パイプラインは、第1パイプラインの8つの第1ノードに対応付けられた第2ノード(第2保持手段)を有し、この第2ノードの保持するデータ要素(第2データ)を第1パイプラインの移動させる第1方向と逆方向(第2方向)にある第2ノードへ移動させる。詳細には、この第2パイプライン160は「上手」である図面上の右側から「下手」である図面上の左側に向けてデータ要素を移動させる。このときの移動方向を「第2移動方向」、移動する行為を「第2移動工程」とする。
第2パイプライン160には、データ要素の有効信号である「tag_valid[i+2]」172と、データ信号である「tag_data[i+2]」174が外部から入力される。これらの入力信号は、前述のデータ処理回路140で使用される。その後、パイプライン・レジスタ170にて一時的に記憶される。
このパイプライン・レジスタ170は、駆動信号である「shift」162が有効であるとき、一連の入力信号である有効信号「tag_valid[i+2]」172と、データ信号「tag_data[i+2]」174とを一時的に記憶する。そしてパイプライン・レジスタ170は、以前に記憶したデータ要素を更新する。
一方、駆動信号「shift」162が無効(ディアサート状態)であるときは、一連の入力信号を記憶せずに、以前に記憶したデータ要素をそのまま保持するために、データ要素を更新しない。入力からパイプライン・レジスタ170に一時的に記憶されるまでの区間をステージ(第1ステージ)と呼ぶ。
次にパイプライン・レジスタ170から、データ要素の有効信号「tag_valid[i+1]」182と、データ信号「data[i+1]」184とが出力され、第1ステージと同様にデータ処理回路120に入力される。そして、データ処理後に、第2パイプライン・レジスタ180にて一時的に記憶されるが、この記憶動作は第1ステージと同様である。パイプライン・レジスタ170からデータ要素がパイプライン・レジスタ180に一時的に記憶されるまでの区間を第2ステージと呼ぶ。
さらに、パイプライン・レジスタ180からデータ要素の有効信号「tag_valid[i]」192と、データ信号「tag_data[i]」194とが出力される。このような動作により、第2パイプライン160では、データ要素である、有効信号「tag_valid」とデータ信号「tag_data」とが、「上手」である図面上の右側から「下手」である図面上の左側に移動する。
(データ処理回路)
次にデータ処理回路120および140について説明する。本実施形態のデータ処理では、2方向のデータ要素の「data」と「tag_data」とを比較する。もし両者が一致し、等しいと判断すければ、そのときの「tag_data」の格納番号(前述の"[i]"、"[i+1]"、"[i+2]")を「tag_id」として記憶する。そして「tag_id」は、第1パイプラインのデータ処理結果として、「data」と同期して、「上手」である図面上の左側から「下手」である図面上の右側に移動する。このようにして、「tag_id[l]」136には、第1パイプライン100のl番目のデータ要素「data[l]」134と値が等しい第2パイプライン160のデータ要素の格納番号が設定されることになる。
具体的には、まずデータ処理回路120は、有効信号「tag_valid[i]」192が有効のときに、データ信号「data[l−1]」114と「tag_data[i]」194とを比較回路122(第1比較回路)で比較する。そして比較結果が等しければ、セレクタ126は「tag_data[i]」194の格納番号である「Node=i」を選択する。この選択された値は、第1パイプライン100の「data[l−1]」114と値が等しい第2パイプライン160のデータ要素の格納番号として、「tag_id[l−1]」116に設定される。
従来例で述べたように、第1パイプライン100と第2パイプライン160が同時に動作する場合、比較に失敗するケースがある。これに対処するためにデータ処理回路120は、さらに有効信号「tag_valid[i+1]」182が有効のときに、データ信号「data[l−1]」114と「tag_data[i+1]」184とを比較回路124(第2比較回路)で比較する。そして比較の結果が等しければ、セレクタ126は、「tag_data[i+1]」184の格納番号である「Node=i+1」を優先的に選択する。
またセレクタ126は、この比較の結果、両者が等しくないときは、入力された処理結果信号「tag_id[l−1]」116を選択する。外部からの駆動信号「shift」162が有効(アサート状態)であり、第2パイプライン160が動作する場合は、データ要素は「下手」である図面上の左側に移動する。したがって、この場合は「tag_data」の格納番号も1つだけ左の格納番号を指すことが正しい。そこでセレクタ126の選択結果からデクリメンタ(減算器)128を用いて格納番号を1だけ減算することで調整する。
ここで格納番号の選択手法について補足説明しておく。格納番号は、「Node=i」、「Node=i+1」、「tag_id[l−1]」116のいずれかが選択されるが、その選択基準は、例えば「数の大きいものを優先的に選択する」という単純なものでよい。例えば、データ信号「data[l−1]」114と「tag_data[i+1]」184が等しいときに、外部からの駆動信号「shift」162が有効の場合を考える。この場合、前述の比較に失敗するケースの問題を回避するために「Node=i+1」を選択することが重要であるが、この動作は「数の大きいものを優先的に選択する」という手法に合致している。
一方、外部からの駆動信号「shift」162が無効の場合は、前述の比較に失敗するケースの問題を回避する必要がなく、「Node=i+1」を選択する必要はない。しかしながら「Node=i+1」をここで選択するかどうかに関わらず、第1パイプラインの下手ステージである第2ステージで、もう一度データ信号「data[l]」134と「tag_data[i+1]」184との比較が改めて評価される。このため、外部からの駆動信号「shift」162が無効の場合の、第1ステージの「tag_data[i+1]」184との比較は、どちらでもよい。逆に言えば、「数の大きいものを優先的に選択する」という手法で選択しても何ら差し支えがないことになる。このようにして選択された値は、「data[l−1]」114と値が等しい第2パイプライン160のデータ要素の格納番号を示す「tag_id[l−1]」116に設定されることになる。
図1は、あくまで一例であり、もちろんセレクタ126に駆動信号「shift」162を代入して、外部からの駆動信号「shift」162が無効の場合、「Node=i+1」は、選択しないという制御を行ってもよい。実施形態1の例では、比較回路122と比較回路124の両方ともが<偽>であったとき、入力データ信号「tag_id[l−1]」116を選択している。ここでは、外部からの駆動信号「shift」162が有効の場合、格納場所が「下手」に移動することに対処するため、格納番号を1だけ減算する調整をいずれにしても行う必要がある。このため、「Node=i+1」は選択しないという制御は行わず、「Node=i+1」を選択してから、格納番号を1だけ減算する調整を改めて行っている。
データ処理回路140についても同様である。まず、有効信号「tag_valid[i+1]」182が有効のときに、データ信号「data[l]」134と「tag_data[i+1]」184とを比較回路142で比較する。そして比較結果が等しければ、セレクタ146は、「tag_data[i+1]」184の格納番号である「Node=i+1」を選択する。第2パイプライン160の動作に備え、データ処理回路140は、さらに有効信号「tag_valid[i+2]」172が有効のときに、データ信号「data[l]」134と「tag_data[i+2]」174とを比較回路144で比較する。そして比較結果が等しければ、セレクタ146は、「tag_data[i+2]」174の格納番号である「Node=i+2」を優先的に選択する。またセレクタ146は、上記2種類の比較結果がどちらも等しくないときは、処理結果信号「tag_id[l]」136を選択する。
外部から駆動信号「shift」162が有効であり、第2パイプライン160が動作する場合、「tag_data」の格納番号は1つだけ「下手」である図面上の右側に移動する。このため、セレクタ146の選択結果からデクリメンタ(減算器)148を用いて格納番号を1だけ減算する。このように検出結果を調整し、簡易な処理により正確で高速なデータ処理を実現することができる。
以上のように本実施形態では、互に逆方向に移動させるデータ要素をパイプラインの各ステージで確実かつ高速に比較することが可能である。本実施形態のデータ処理回路120および140の各々は、第1パイプライン100の1つのデータ要素につき、第2パイプライン160の比較対象であるデータ要素との比較回路を持っている。さらに、データ処理回路120および140の各々は、第2パイプライン160が動作することを想定して第2パイプライン160の比較対象であるデータ要素に対し第2パイプライン160の「上手」のデータ要素との比較回路を新たに設けている。これにより、特許文献1の構成で生じる、特定ステージ毎にインターロック(内部ストール)が発生するという問題は回避できるので、常にデータ処理を停止することなく、高処理性能を実現することができる。
また、本実施形態では、2つのデータ要素が等しいときの格納場所を算出するために、データ処理回路120および140の各々は、第2パイプライン160が動作することを想定し、処理結果を1だけ減算するためのデクリメンタ(減算器)を備えている。そして、第2パイプラインのデータ要素の格納番号は、第2パイプラインの「下手」から「上手」に向けて「0、1、2、・・・、i、i+1、i+2、・・・、N−1(i、Nは正の数、i<N)」と増加するように予め割り振られている。このように割り振る利点については、後述する。また、格納番号が逆順に割り振られている場合は、デクリメンタは当然、1だけ加算するためのインクリメンタになることは言うまでもない。
また図2に、図1の基本構成をN個(N:整数)の組み合せて、N=8の場合(8ステージ)のデータ処理装置の構成の一例を記載する。図2のデータ処理装置200の例では、第1パイプラインと第2パイプラインの8個のデータ要素を比較している。図2において、TagSlot[0]〜TagSlot[7]の各々は、図1に記載の第2パイプラインのパイプライン・レジスタ170、180に対応する。また、DataSlot[0]〜DataSlot[7]の各々は、図1に記載の第1パイプラインのパイプライン・レジスタ110、130に対応する。さらに、Judge[0]〜Judge[7]の各々は、図1に記載のデータ処理回路120、140に対応する。このように、基本構成を連結することで多くのデータ要素をパイプライン動作で並列に分散比較することが可能となる。
図2のデータ処理装置200の構成例では、8個のデータ要素との比較を8ステージのパイプラインで実現している。ここでは、さらに外部からの駆動信号「shift」が有効であり、第2パイプラインが「下手」へ移動しても、処理性能を低下させることなく完全比較を実現できる。
そこで図2に示すように、データ処理装置200に交換機能付きキャッシュ判定装置280を追加することで高度な画像処理用途に使用可能な、高速のフル・セット・アソシアティブ方式のキャッシュ装置を実現することができる。すなわち、この場合、使用されているメモリがDRAMとすると、キャッシュは、全てのDRAMのタグ情報を持っている。以下、このキャッシュ装置を組み込んだ画像処理装置と、このキャッシュ装置について説明する。
(画像処理装置)
図5は、実施形態1による画像処理装置の全体構成例を示すブロック図である。本実施形態の画像処理装置は、図2で説明したデータ処理装置をフル・セット・アソシアティブ方式のキャッシュ判定部520として応用している。
画像処理装置には、CPU560と外部メモリであるDRAM565とDRAMコントローラ566とシステムバス564とが含まれる。また、DRAM565に対するデータの読み書きのために、データ読み出し用のDMAC(Direct Memory Access Controller)であるRDMAC562とデータ書き込み用のWDMAC563も含まれる。また画像処理装置には、画像処理などの処理を行う処理装置501と、本発明のキャッシュ装置510が含まれる。なお、画像処理装置に含める処理装置の数は任意であり、処理装置の各々は高速に固定処理するパイプライン回路で構成されてもよいし、低速ではあるが、柔軟に処理内容を変更可能なプロセッサとプログラムで構成されてもよい。
CPU560は、制御バス561を介して、RDMAC562、WDMAC563、および処理装置501を制御し、画像処理装置全体を統括制御する。CPU560の指示によりRDMAC562は、システムバス564とDRAMコントローラ566を介してDRAM565に格納された画像データを読み出し、処理装置501に入力する。処理装置501は、所望の画像処理を行い、処理結果の画像データをWDMAC563に送り出す。このとき、WDMAC563は、予めのCPU560からの指示に基づき、処理装置501から受け取った画像データをシステムバス564とDRAMコントローラ566を介してDRAM565に格納する。画像処理装置は、前述の一連の動作を実行することにより画像処理を実施するのである。
前述の画像処理の過程で、処理装置501は、接続されたキャッシュ装置510を介して、DRAM565から各種必要な対象データ(画像、映像、設定値、テーブル、属性情報など)を読み出して画像処理に使用する。また処理装置501がプロセッサとプログラムで構成されている場合、キャッシュ装置510を介してプログラムを逐次読み出して処理を実行することも可能である。
(キャッシュ装置)
次にキャッシュ装置の動作について説明する。前述の処理装置501は、キャッシュ装置を介してDRAM565からデータを読み出すときに、DRAM565上のデータの格納アドレス513を、I/F512を介してキャッシュ判定部520に入力する。そして入力された格納アドレス513をもとにキャッシュ判定部520でキャッシュのヒットもしくはキャッシュミスが判定される。
(キャッシュ判定部)
さらに図2を用いて図5に記載の画像処理装置におけるキャッシュ判定部520の回路構成例について説明する。キャッシュ判定部520は、比較結果とキャッシュタグ数の大小関係を調べて、キャッシュのヒットを判定する。キャッシュ判定部520は、図2のデータ処理装置200と交換機能付きキャッシュ判定装置280とを備える。なお、以後の説明では、「交換機能付きキャッシュ判定装置280」を「キャッシュ判定装置280」と略称する。
前述の格納アドレス513には、アドレスの有効信号である「valid」とアドレス信号である「data」とが含まれ、格納アドレス513は、データ処理装置200の第1パイプラインのDataSlotにより移動する。データ処理装置200は、8個の「tag_data」を持ち、この8個の「tag_data」にキャッシュタグ情報が記憶される。データ処理装置200の一例は、8つのインデックスを有するフル・セット・アソシアティブ方式のキャッシュ装置である。また、第2パイプラインの「上手」から順に0番から7番までの格納場所が、一筆書きの決められた順路で予め定められており、駆動信号「shift」が有効(アサート状態)のときに「下手」にデータ要素が移動するシフト構造を有している。このシフト構造により、最も古いキャッシュタグは、格納場所0番の「tag_data」に格納され、最も新しいキャッシュタグは、格納場所7番の「tag_data」に格納されている。
キャッシュのキャッシュミスが起こる度に、キャッシュタグは格納場所7番から格納場所0番の「tag_data」へ順番に移動(シフト)され、やがて第2パイプラインから掃き出されてしまう。このキャッシュ判定部は、非常に単純な機構ながら、常に最も古いキャッシュタグやキャッシュデータから順番に捨てられる。このような単純な機構により、一般的なキャッシュ機構の複雑な置き換え(リプレイス)制御を行う必要はない。しかし、たとえ使用頻度(後述の「ヒットカウント値」)が多いキャッシュタグとキャッシュデータであっても、キャッシュミスの多発により、いずれ破棄されてしまう。
そこで、この問題を解決するために、本実施形態のキャッシュ装置では、第2パイプラインから破棄されるキャッシュタグと、キャッシュ判定装置280のリオーダバッファに一時的に格納されたキャッシュタグとを交換する機能を持つ。そして、リオーダバッファに一時的に格納されたキャッシュタグを第2パイプラインに復帰させることができる。これらの特徴については、後述の「破棄予定のキャッシュタグ/キャッシュデータの交換機能」と「破棄予定のキャッシュタグ/キャッシュデータの復帰機能」の項で説明する。
(キャッシュ判定)
次に、キャッシュのヒット/キャッシュミスの判定の手順を説明する。ヒット/キャッシュミス判定は、図2のキャッシュ判定装置280で行われる。キャッシュがヒットしたかどうかは、データ処理装置200から出力される処理結果信号「tag_id」(2の補数表記)の1ビットの符号ビットを調べることで判定する。データ処理装置200の出力である有効信号「valid」が有効(アサート状態)であり、かつ符号ビットが1であるとき、「tag_id」は負の値であり、キャッシュ判定はキャッシュミスとする。また符号ビットが0であるとき、「tag_id」は正の値であり、キャッシュ判定はヒットとする。
データ処理装置200の出力であるデータ信号「data」が、キャッシュ判定装置280に「tag_id」と同期して入力される。これによりキャッシュミスと判定された場合、このデータ信号「data」がキャッシュミス時のアドレスである「miss_hit_address」となる。そしてキャッシュ判定装置280では、キャッシュミスのときに駆動信号「shift」を有効にし、キャッシュミス時のアドレスである「miss_hit_address」をデータ処理装置200のデータ信号「tag_data」として入力する。キャッシュがキャッシュミスする度に、駆動信号「shift」が有効となり、前述で説明したように処理結果「tag_id」は減算されていく。
始めは処理結果「tag_id」に正の値が保持されていても、キャッシュミスが繰り返されると、第2パイプラインがシフトされ、キャッシュタグを表す「tag_data」が第2パイプラインから掃き出されることもある。この掃き出されるときの処理結果「tag_id」の値は、最も古いキャッシュタグの格納番号が0であることから、負の値であることは明らかである。前述のキャッシュ判定で「tag_id」の符号を調べるだけでよいのは、これに由来する。すなわち、最も古いキャッシュタグが0番、最も新しいキャッシュタグがN−1番となるように、格納場所の番号の割り振り方を工夫している。これにより、キャッシュ判定は、最終ステージのデータ処理結果の符号を判別するだけでよい。したがって、本実施形態によれば、キャッシュ判定が非常に簡単である。
また格納番号を第2パイプラインの「上手」から「下手」に0番からN−1番に割り振った場合は、「tag_id」の値が第2パイプラインの要素数であるNより小さいかどうかでキャッシュ判定できることは言うまでもない。また前述のように常に最も古いキャッシュデータから順番に捨てる機構のため、本実施形態の一例のキャッシュメモリは、リング式FIFOを用いればよい。この場合、キャッシュ判定部520とキャッシュメモリ(FIFO)590との同期が容易となる。なお、キャッシュ判定がヒットの場合は、「tag_id」が指し示す位置のキャッシュメモリに所望のキャッシュデータが格納されていることとなる。
以上の処理により、キャッシュ判定部520から、入力された格納アドレス513をもとに判定結果525である次の信号が出力される。
・データ要素の有効信号「valid」
・キャッシュミス時のDRAMのデータ格納先であるアドレス信号「miss_hit_address」
・キャッシュデータの格納先である「tag_id」
・キャッシュ判定結果である「miss_hit_flag」
・リオーダバッファ選択信号「reorder」、またはリオーダバッファ復帰信号「rebirth」
・キャッシュデータの交換信号「exchange」
なお、リオーダバッファ選択信号「reorder」、リオーダバッファ復帰信号「rebirth」、キャッシュデータの交換信号「exchange」の動作については、後述する。それぞれ、「破棄予定のキャッシュタグ/キャッシュデータの交換機能」および「破棄予定のキャッシュタグ/キャッシュデータの復帰機能」の項にて説明する。
本実施形態の画像処理装置では、キャッシュのキャッシュミス時のペナルティであるリフィル・レイテンシを隠蔽するためにノンブロッキングのキャッシュ機構を採用している。これは、たとえ判定結果525がキャッシュミスと判定されても、後に必要となる情報「tag_id、miss_hit_flag、reorder(rebirth)、exchange」からなる判定結果525を待ち合せFIFO540に退避する。そして、キャッシュミスのキャッシュデータをDRAM565から読み出し、キャッシュメモリ(FIFO)590へ格納する処理が完了する前に、次の画素のキャッシュ判定処理を先行して実行する。このような処理を行うことでキャッシュミスのキャッシュデータをDRAM565からキャッシュメモリ590(FIFO)へリフィルしている間に、続く画素に対するキャッシュ判定を行うことができる。したがって、キャッシュのキャッシュミス時の性能低下を抑制することが可能になる。
なお、後述するように、キャッシュがキャッシュミスしたときの格納アドレスは、アクセス調停部530により送信FIFO550へ順次格納される。DRAMコントローラ566は、この送信FIFO550から格納アドレスを受け取り、所望のデータをDRAM565から読み出して、受信FIFO570へ書き込んでいく。キャッシュメモリ調停部580は、待ち合せFIFO540から「miss_hit_flag」を取り出す。そして、DRAMコントローラ566は、キャッシュ判定がキャッシュミスであったかヒットであったかを特定する。キャッシュメモリ調停部580は、キャッシュ判定がヒットのとき、キャッシュデータをキャッシュメモリ(FIFO)590から直接読み出してI/F516へ送り出す。一方、キャッシュ判定がキャッシュミスのとき、キャッシュデータを受信FIFO570から読み出して、キャッシュメモリ(FIFO)590へ書き込む。そして、キャッシュメモリ調停部580は、このキャッシュデータをI/F516へ送り出す。このように、キャッシュミスしたキャッシュデータをDRAM565から読み出してキャッシュメモリ(FIFO)590に更新する一連の処理をリフィルという。
(アクセス調停部)
アクセス調停部530は、有効信号「valid」が有効(アサート状態)のとき動作し、それ以外の場合は待機する。そしてアクセス調停部530は、キャッシュ判定結果「miss_hit_flag」の有効(アサート状態)/無効(ディアサート状態)に応じて、以下の処理を行う。
・キャッシュ判定結果、「miss_hit_flag」が有効のとき、接続される3つのFIFOである、送信FIFO550、受信FIFO570および待ち合せFIFO540の格納領域の空き状態を評価する。そして3つのFIFOすべてに空き領域がある場合、「tag_id、miss_hit_flag、reorder(rebirth)、exchange」535を待ち合せFIFO540に書き込む。また同時に、アドレス信号「miss_hit_address」532を送信FIFO550に書き込む。もし空き領域がない場合は、駆動信号である「enable」を無効(ディアサート状態)にしてキャッシュ判定部520を停止(ストール)して、格納領域が空くまで待機する。
・キャッシュ判定結果、「miss_hit_flag」が無効のとき、待ち合せFIFO540の空き状態を評価する。そして空き領域があれば、「tag_id、miss_hit_flag、reorder(rebirth)、exchange」からなる判定結果535を待ち合せFIFO540に書き込む。もし空き領域がない場合、駆動信号である「enable」を無効(ディアサート状態)にしてキャッシュ判定部520を停止(ストール)し、格納領域が空くまで待機する。
(キャッシュメモリ調停部)
キャッシュメモリ調停部580は、接続された2つのFIFO、すなわち受信FIFO570と待ち合せFIFO540の各々の格納領域にデータがあるかどうかを評価する。キャッシュメモリ調停部580は、まず待ち合せFIFO540から処理すべきキャッシュ判定結果から「tag_id、miss_hit_flag、reorder(rebirth)、exchange」を取り出す。なお、待ち合せFIFO540が空の場合、処理すべきキャッシュ判定結果がないため、キャッシュメモリ調停部580は、何もせず待機する。そして、キャッシュ判定結果「miss_hit_flag」が無効(ディアサート状態)であるか有効(アサート状態)あるかに応じて、次の処理を行う。
・キャッシュ判定結果「miss_hit_flag」が無効(ディアサート状態)のときは、キャッシュがヒットの状態である。そこで、待ち合せFIFO540から同時に取り出した「tag_id」とキャッシュメモリ(FIFO)590のライトポインタからキャッシュメモリ(FIFO)590の格納アドレスを算出する。その算出した格納アドレスをもとにキャッシュされているデータをキャッシュメモリ(FIFO)590から「read_data」592として直接読み出す。そして、キャッシュデータ「valid、cache_data」585としてI/F516へ送出する。
キャッシュ判定結果で「miss_hit_flag」が有効(アサート状態)のときは、キャッシュがキャッシュミスの状態である。キャッシュメモリ調停部580は、DRAM565からのキャッシュされていないデータが受信FIFO570に届いているかどうかを確認する。届いていない場合は、届くまで待機する。届いている場合、受信FIFO570から更新すべきキャッシュデータを取り出す。そして、キャッシュメモリ(FIFO)590のライトポインタの指す格納領域に、取り出したデータを「write_data」582として書き込む。同時に、キャッシュデータ「valid、cache_data」585としてI/F516へ送出する。そして最後に、キャッシュメモリ(FIFO)590のライトポインタを1だけインクリメントする。FIFOの容量を越えた場合は、ライトポインタを0に戻す。
前述の「破棄予定のキャッシュタグ/キャッシュデータの交換機能」や「破棄予定のキャッシュタグ/キャッシュデータの復帰機能」を実現するためのキャッシュメモリ調停部580の追加機能については、後述する。
最後に処理装置に接続されたI/F516は、上記の過程で得たキャッシュデータ「valid、cache_data」を処理装置501に送出する。
(破棄予定のキャッシュタグ/キャッシュデータの交換機能)
例えばプリンタ画像処理では紙面の大半は白地であるケースがあり、この白地を印刷するために必要となる画像処理のデータは、繰り返し使用される。このような使用頻度の多いデータに対応するキャッシュタグとキャッシュデータは、キャッシュ装置に常に保持した方が、高速に画像処理をする上で有利である。従って本実施形態のキャッシュ装置には、使用頻度が多いキャッシュタグとキャッシュデータが、キャッシュミスの多発により破棄されないための機構を備える。以下で、本発明の特徴である、「破棄予定のキャッシュタグ/キャッシュデータの交換機能」について記載する。
前述のキャッシュ判定装置280は、キャッシュタグ交換回路250を内包する。図3にキャッシュタグ交換回路250のブロック図を示す。また図4にキャッシュタグ交換回路250の処理を説明するフローチャート400を示す。図3のキャッシュタグ交換回路250には、第1パイプラインから次の信号が出力される。
・データ要素の有効信号「valid」。
・キャッシュミス時のDRAMのデータ格納先であるアドレス信号「miss_hit_address」
・キャッシュデータの格納先である「tag_id」。
また、キャッシュタグ交換回路250に第2パイプラインから次の信号が出力される。
・破棄予定のキャッシュタグの有効信号「sweep」。
・破棄予定のキャッシュタグ「swtag」。
更に、キャッシュ判定装置280の判定部260で処理されたキャッシュ判定結果である「miss_hit_flag」が、キャッシュタグ交換回路250に入力される。
キャッシュタグ交換回路250は、キャッシュタグ毎に使用頻度をカウントするために、ヒットカウント値算出回路300と、破棄予定のキャッシュタグの使用頻度が多いときに一時的に保持するリオーダ回路320を備える。キャッシュタグ交換回路250の入力である、データ要素の有効信号「valid」が無効(ディアサート状態)のとき、何もせず待機する(フローチャート400には不図示)。データ要素の有効信号「valid」が有効(アサート状態)で、かつ、キャッシュ判定結果、「miss_hit_flag」が無効(ディアサート状態)の場合、データ処理装置200の判定結果はキャッシュヒットを示す。
S405において、データ要素の有効信号「valid」が有効(アサート状態)で、かつ、キャッシュ判定結果「miss_hit_flag」が有効(アサート状態)の場合、データ処理装置200の判定結果は、キャッシュキャッシュミスを示す。キャッシュヒットの場合、S410において、ヒットカウント値算出回路300は、図2の8個のJudgeにおいてタグデータとデータの一致した一致回数を積算するためのもので、デコード回路302により、キャッシュデータの格納先である「tag_id」の指し示すヒットカウンタ308のヒットカウント値304を1だけインクリメントする。キャッシュミスの場合、S415において、破棄予定のキャッシュタグ「swtag」の有効信号「sweep」を確認して、交換機能を動作させるかどうかを判定する。
破棄予定のキャッシュタグの有効信号「sweep」が無効(ディアサート状態)のとき、制御回路「Reorder controller」350は、交換機能を動作させる必要がない。そこでS490において、制御回路「Reorder controller」350は、シフト信号「shift」305を有効にし、ヒットカウント値304を「上手」から「下手」に移動する。また同時に、前述のデータ処理装置200の第2パイプラインのキャッシュタグも「上手」から「下手」に移動する。実施形態1では、最も「上手」に位置するキャッシュタグには、キャッシュミス直後の「miss_hit_address」が格納される。このときのキャッシュタグのヒットカウント値304は必ず「0」でなければならないため、キャッシュタグが「上手」から「下手」へ移動するときに、そのヒットカウント値304は初期化され、カウント値の初期値としてゼロが与えられる。
一方S415において、破棄予定のキャッシュタグの有効信号「sweep」が有効(アサート状態)のとき、制御回路「Reorder controller」350は、交換機能を動作させ、S420において、リオーダバッファの空き状態を確認する。リオーダバッファの有効信号である「reorder_tag_valid」332が無効(ディアサート状態)のとき、リオーダバッファである「reorder_tag_data」334は空き状態である。従ってS425において、「Reorder controller」350は無条件で「reorder_tag_data」334に破棄予定のキャッシュタグ「swtag」を退避できる。また、最終段のノードの破棄予定のデータについてのヒット回数を計測し、そのカウント結果であるヒットカウント値307をリオーダバッファのヒットカウント値「reorder_hit_count」336に格納し退避できる。これらの退避を実現するため、「Reorder controller」350は、シフト信号「shift」305を有効(アサート状態)にして、ヒットカウント値304を「上手」から「下手」に移動する。また引き続きS490において、前述のデータ処理装置200の第2パイプラインのキャッシュタグも「上手」から「下手」に移動する。
S420において、リオーダバッファの有効信号「reorder_tag_valid」332が有効(アサート状態)のとき、既にリオーダバッファに退避された「reorder_tag_data」334が存在する。そこで、S430において、この「reorder_tag_data」334と入力された「data」とを比較回路360で比較し、キャッシュのヒット判定を再評価する。再評価の結果、キャッシュヒットとなった場合(S430でYES)、S435において「Reorder controller」350は、ヒットカウンタ338のヒットカウント値「reorder_hit_count」336を1だけインクリメントする。また入力された「miss_hit_flag」を無効(ディアサート状態)にする。また、キャッシュメモリ調停部580でキャッシュデータをリオーダバッファか読み出すための切り替え信号「reorder」を有効(アサート状態)にする。
S430における再評価の結果、キャッシュミスの場合、リオーダ回路320は、リオーダバッファに退避された「reorder_tag_data」334と入力された破棄予定のキャッシュタグ「swtag」との何れか一方を選択する。本実施形態では、使用頻度を表すヒットカウント値が、より大きいキャッシュデータは、後に再利用される可能性が高いと考える。そこで、S440において、破棄予定のキャッシュタグのヒットカウント値「hit_count」307とリオーダバッファのヒットカウント値「reorder_hit_count」336、すなわち第2パイプラインの最終段で計測された、最新の2つのカウント値を大小比較回路「Compare」322により比較する。S440で、破棄予定のキャッシュタグのヒットカウント値「hit_count」307が大きい場合、S445に移行する。S445において、入力された破棄予定のキャッシュタグ「swtag」をリオーダバッファのキャッシュタグ「reorder_tag_data」334に上書きし、第2パイプラインの先頭のtag_dataとして戻す。また同時に、ヒットカウント値「hit_count」307をリオーダバッファのヒットカウント値「reorder_hit_count」336に上書きする。そして交換したことを示す、交換信号「exchange」を有効(アサート状態)にして出力する。
S440で、破棄予定のキャッシュタグのヒットカウント値「hit_count」307が小さい場合、入力された破棄予定のキャッシュタグ「swtag」を破棄する。また同時に、そのヒットカウント値「hit_count」307を破棄する。最後に、S490において「Reorder controller」350は、シフト信号「shift」305を有効(アサート状態)にし、ヒットカウント値304を「上手」から「下手」に移動する。また同時に、前述のデータ処理装置200における第2パイプラインのキャッシュタグも「上手」から「下手」に移動することとなる。
以上のように、キャッシュタグのヒットカウント値の大きさにより、優先順位を定め、この優先順位に応じてリオーダ回路に保持するキャッシュタグを交換する。
(キャッシュメモリ調停部580の追加機能)
図6に、キャッシュメモリ調停部の処理フローの一例を示す。キャッシュメモリ調停部580の基本動作は前述の通りであるが、ここでは図6(a)を用いて、キャッシュタグ交換機能に連携する動作について説明する。
S605において、待ち合わせFIFO540から「tag_id、miss_hit_flag、exchange、reorder」を取り出す。S620でキャッシュ判定結果の「miss_hit_flag」が無効(ディアサート状態)のときは、S625において、リオーダバッファにキャッシュデータがあるかどうかを示す入力信号である「reorder」を確認する。そして、S625で「miss_hit_flag」が有効(アサート状態)のとき、S635において、リオーダバッファに格納されたキャッシュデータを「read_data」592として直接読み出す。そして、S690においてキャッシュデータ「valid、cache_data」585としてI/F516へ送出する。
S620で、キャッシュ判定結果「miss_hit_flag」が有効(アサート状態)のとき、S650において、受信FIFO570から更新すべきキャッシュデータを取り出す。そしてS690において、キャッシュデータ「valid、cache_data」585としてI/F516へ送出する。
一方、S655で入力された交換信号「exchange」が有効(アサート状態)のとき、S660において、キャッシュメモリ(FIFO)590のライトポインタの指す格納領域のキャッシュデータを読み出し、リオーダバッファへ退避する。そして、S670において、受信FIFO570から取り出したデータをライトポインタの指す格納領域に「write_data」582として書き込む。更に、S680において、キャッシュメモリ(FIFO)590のライトポインタを1だけインクリメントする。FIFOの容量を越えた場合は、ライトポインタを0に戻す。
なお、図4のS415で、破棄予定のキャッシュタグの有効信号「sweep」が有効で、S420でリオーダバッファの有効信号である「reorder_tag_valid」332が無効のとき、キャッシュメモリ調停部580は以下の動作を行う。
まず、このケースにおいて、リオーダ回路の「Reorder controller」350は無条件で「reorder_tag_data」334に破棄予定のキャッシュタグ「swtag」を退避している。キャッシュメモリ調停部580は、これに連動するためにキャッシュメモリ(FIFO)590のライトポインタに着目する。まず、キャッシュ装置の初期化後、キャッシュメモリ調停部580のライトポインタは0である。そして、前述のようにキャッシュ判定結果がキャッシュミスになる毎に、ライトポインタは1だけインクリメントされる。ライトポインタがFIFO容量を超えて0の状態のとき、次にキャッシュミスが起こると、ライトポインタが0のキャッシュデータが始めて破棄されることになる。つまり、キャッシュメモリ調停部580は、初めてライトポインタが0に戻るときのキャッシュデータを無条件でリオーダバッファに格納する。
本実施形態のキャッシュ装置によれば、比較的簡単な構成で、高速に処理可能なフル・セット・アソシアティブ方式のキャッシュ装置を実現できる。一般的なダイレクトマップ方式のキャッシュ判定部では、アドレスの下位ビットからキャッシュタグを管理するタグメモリの格納先を算出するため、相関性の低いアドレスに対しては容易にキャッシュ競合を引き起こしてしまう。セット・アソシアティブ方式のウェイ数を増やしていくことが、このキャッシュ競合の確率を低減させるための1つの解決策となる。しかしながら、処理装置の数が多くなると多数のウェイに対応する必要があり、一般的なキャッシュ装置の実装では、キャッシュ判定部のセレクタの論理段数が多く、タイミング収束が難しくなる。従って、動作周波数が高くなると動作させることができなくなる。これに対して、本実施形態のキャッシュ判定部は、パイプライン構成で判定するために、動作周波数がたとえ高くても確実に動作する。
また本実施形態のキャッシュ装置は、破棄予定のキャッシュタグとキャッシュデータをリオーダバッファに一時的に保存し、ヒットカウント値に応じて重要なキャッシュデータを常に保持するための交換機能を備える。そのため、繰り返し画像処理に使用されるキャッシュデータを優先的に残し、キャッシュ効率を向上させることができる。
<実施形態2>
さらに図7、図8および図9を用いて、実施形態2における、図5に記載のキャッシュ判定部520とキャッシュメモリ調停部580の構成の例を説明する。本実施形態のキャッシュ判定装置280は、リオーダバッファに一時的に退避された破棄予定のキャッシュタグをデータ処理装置200の第2パイプラインへ復帰させる機能を有する。前述の実施形態1と同様の動作については、説明を省略する。
(破棄予定のキャッシュタグ/キャッシュデータの復帰機能)
実施形態1で説明した「破棄予定のキャッシュタグ/キャッシュデータの交換機能」から明らかなように、リオーダバッファには使用頻度を表すヒットカウント値の大きなキャッシュタグが残っている。これらをデータ処理装置200の第2パイプラインへ復帰させることにより、第2パイプラインのキャッシュタグが循環して、使用頻度の少ないキャッシュタグを優先的に破棄することが可能となる。
この復帰機能の例では、図4または図8のフローチャートにおいて、前述のキャッシュのヒット判定を再評価でリオーダバッファに退避されたキャッシュタグがヒットしたときに実行する(S430でYES)。ヒット時に復帰機能を実行することで、通常のキャッシュミス時のキャッシュタグの下手へのシフト動作と排他的に動作することが可能となる。この場合、図4のS435の処理を一部変更して、図8のS438に示す復帰信号「rebirth」を有効(アサート状態)にし、復帰機能が動作したことを後段に位置するキャッシュメモリ調停部580に伝える。
また、復帰機能を備えるキャッシュタグ交換回路250を図7に示す。図7では、前述の実施形態1の同回路を示す図3と違い、結線380により、リオーダバッファのヒットカウント値336をヒットカウント値算出回路300の最も「上手」に位置するキャッシュタグのヒットカウント値304に復帰できる。また、この復帰機能の動作により、リオーダバッファのキャッシュタグ334とヒットカウント値336を保持するレジスタには空き状態となる。そこで、復帰機能の動作時に、リオーダバッファのキャッシュタグ334には、外部入力の破棄予定のキャッシュタグ「swtag」とその有効信号「sweep」を格納する。また、リオーダバッファのヒットカウント値336には、最も「下手」に位置するヒットカウント値「hit_count」307を格納する。
なお、この復帰機能は、外部からの割り込み命令(トリガ)により実行されてもよい。また、この復帰機能は、破棄予定のキャッシュタグの「hit_count」307とリオーダバッファのキャッシュタグの「reorder_hit_count」326を常に監視し、「reorder_hit_count」326が大きければ実行してもよい。
以上のように、キャッシュタグのヒットカウント値の大きさにより、優先順位を定め、この優先順位に応じてリオーダ回路のキャッシュタグを第2パイプラインに復帰(再入力)する。
(キャッシュメモリ調停部580の追加機能)
キャッシュメモリ調停部580の基本動作は前述の通りであるが、ここではキャッシュタグ復帰機能に連携する動作について説明する。
キャッシュ判定結果「miss_hit_flag」が無効(ディアサート状態)のときは、リオーダバッファのキャッシュデータの復帰を示す入力信号である「rebirth」を確認する。そして、有効(アサート状態)のとき、リオーダバッファに格納されているキャッシュデータをキャッシュデータ「valid、cache_data」585としてI/F516へ送出する(S690)。また、ライトポインタの指す格納領域のキャッシュデータとリオーダバッファに格納されているキャッシュデータを交換する。そしてライトポインタを1だけインクリメントする。
本実施形態のキャッシュ装置によれば、破棄予定のキャッシュタグとキャッシュデータをリオーダバッファに一時的に保存し、ヒットカウント値に応じて重要なキャッシュデータを第2パイプラインに復帰する機能を備える。そのため、繰り返し画像処理に使用されるキャッシュデータを優先的に残し、使用頻度の少ないキャッシュデータを優先的に破棄し、キャッシュ効率を向上することができる。また、キャッシュミス時に前述の実施形態1の交換機能を実施し、ヒット時に本実施形態の復帰機能を実施することで、実施形態1と本実施形態を併用することができる。これらの併用により、さらにキャッシュ効率を向上することができる。
<実施形態3>
さらに図10を用いて、実施形態3における、図5に記載されたキャッシュ判定部520の別の構成例を説明する。本実施形態では、実施形態1のデータ処理装置200の内部にヒットカウント値算出回路を備えている。実施形態1では、キャッシュタグ交換回路250の1ステージで使用頻度をカウントする。この場合、データ処理装置200の第2パイプラインのデータ要素数が増えることで、ヒットカウント値算出回路300のデコード回路302の遅延が大きくなる。結果として、キャッシュ判定部520の動作周波数は向上し辛くなる。本実施形態では、データ処理装置200の第2パイプラインに後述するヒットカウント値算出回路730や750が組み込まれており、上記のヒットカウント値算出回路300が不要となる。そのため、ヒットカウント値算出のために動作周波数を向上しても動作にそれほど影響はない。
なお、実施形態3の図10に記載の基本構成は、実施形態1の図1に記載の基本構成に相当する。そして、この基本構成を実施形態1の図2のように複数連結し、データ処理装置200のデータ要素の数を増やす使い方は、実施形態1の使い方と同様である。
また図10において、第1パイプライン700は、図の「上手」である左側から「下手」である図面上の右側に向けてデータが移動する。また第2パイプライン760は「上手」である図面上の右側から「下手」である図面上の左側に向けてデータが移動している。この状態は、実施形態1と同様である。、図10における各種の信号名称やその意味は、図1で説明した信号名称やその意味と同様であるので、同じ信号に対する説明は省略する。実施形態3では、基本構成でヒットカウント値を算出する仕組みが実施形態1と異なるので、これに関係するデータ処理回路の該当箇所について説明する。
実施形態1では、後段に位置するキャッシュ判定装置280で判定を完了してから、ヒットカウント値を算出していた。そのため図1におけるデータ処理回路の比較回路122、124、142、144では、第1パイプライン100の有効信号「valid[l−1]」112や「valid[l]」132を比較で考慮する必要がなかった。本実施形態では、比較と同時にヒットカウント値を算出するため、図10の比較回路722、724、742、744は、第1パイプライン700の有効信号「valid[l−1]」712や「valid[l]」732を考慮して比較を実行する。そして、比較回路722、724、742、744は、比較結果723、725、743、745、763を算出している。第2パイプライン760のパイプライン・レジスタ780と770には、実施形態1とは異なりヒットカウント値を保持するためのレジスタ781と771が追加されている。これらのレジスタ781、771は、実施形態1の図3におけるキャッシュタグ交換回路250のヒットカウント値算出回路300のヒットカウント値304に相当する。これらのレジスタに保持されるヒットカウント値は、第2パイプラインの駆動信号「shift」762の状態によらず値が変化する。当然、有効信号「tag_valid」とデータ信号「tag_data」とは異なり、駆動信号「shift」762だけで「保持」と「更新」が切り替わる分けではない。
また、第2パイプライン760には、これらのレジスタに保持するヒットカウント値を算出するためのヒットカウント値算出回路730と750を備える。ヒットカウント値算出回路730は、第2パイプライン760のパイプライン・レジスタ770からヒットカウント値「hit_count[i+1]」778を、パイプライン・レジスタ780からヒットカウント値「hit_count[i]」788を受け取る。そしてヒットカウント値算出回路730は、比較結果723、725、743と外部入力の駆動信号「shift」762により制御されて、新たなヒットカウント値779を算出する。そして、新たに算出したヒットカウント値779をパイプライン・レジスタ780のレジスタ781に書き込む。
同様に、ヒットカウント値算出回路750は、第2パイプライン760のパイプライン・レジスタ(不図示)からヒットカウント値「hit_count[i+2]」768を受け取る。そして更にヒットカウント値算出回路750は、パイプライン・レジスタ770から「hit_count[i+1]」778を受け取る。そしてヒットカウント値算出回路750は、比較結果743、745、763と外部入力の駆動信号「shift」762により制御されて、ヒットカウント値769を算出し、パイプライン・レジスタ770へ書き込む。
ヒットカウント値算出回路730と750は同様に動作するため、ヒットカウント値算出回路730を用いて説明する。駆動信号「shift」762が無効(ディアサート状態)のときと有効(アサート状態)のときで動作が異なる。以下、順を追って説明する。
(駆動信号「shift」762が無効(ディアサート状態)のとき)
駆動信号「shift」762が無効の場合、第2パイプライン760の各データ要素は「上手」から「下手」に移動しない。そのため、ヒットカウント値算出回路730の制御回路である「Controller」732は、セレクタ734を操作して「hit_count[i]」788を、加算器である「adder」738に代入する。このときの比較対象は、第2パイプラインのパイプライン・レジスタ780のデータ信号「tag_data」と第1パイプラインのデータ信号「data[l−1]」であり、比較結果723に着目する。そして「Controller」732は、この比較結果723によりセレクタ736を操作する。
・比較結果723が有効のとき、セレクタ736は固定値「1」を選択し、「adder」738により、「hit_count[i]」788を1だけインクリメントする。
・比較結果723が無効のとき、セレクタ736は固定値「0」を選択し、「hit_count[i]」788はそのままの値とする。
(駆動信号「shift」762が有効(アサート状態)のとき)
駆動信号「shift」762が有効の場合、第2パイプライン760の各データ要素は「上手」から「下手」に移動する。そのため、「Controller」732は、セレクタ734を操作して「hit_count[i+1]」778を「adder」738に代入する。そして「Controller」732は、判定結果725と743によりセレクタ736を操作する。
判定結果725と743が共に有効のとき、第2パイプライン760のパイプライン・レジスタ770のデータ信号「tag_data」と第1パイプラインの2つのデータ信号「data[l−1]」と「data[l]」とが共に等しい。そこで、セレクタ736は固定値「2」を選択し、「adder」738により、「hit_count[i+1]」778を2だけ加算する。
判定結果725と743の何れか1つが有効のとき、第2パイプライン760のパイプライン・レジスタ770のデータ信号「tag_data」と第1パイプラインのデータ信号「data[l−1]」もしくは「data[l]」のどちらかと等しい。そこで、セレクタ736は固定値「1」を選択し、「adder」738により、「hit_count[i+1]」778を1だけインクリメントする。
判定結果725と743が共に無効のとき、第2パイプライン760のパイプライン・レジスタ770のデータ信号「tag_data」と第1パイプラインの2つのデータ信号「data[l−1]」と「data[l]」が共に異なる。そこで、セレクタ736は固定値「0」を選択し、「hit_count[i+1]」778はそのままの値とする。そして、上記の手順で得られたヒットカウント値779を第2パイプラインのパイプライン・レジスタのヒットカウント値を格納するレジスタ781に書き込む。以上のような動作により、基本構成の中でヒットカウント値の算出が可能となる。
しかしながら、実施形態3では実施形態1と異なり、以下で説明する制限事項を伴う。「Controller」732、752は、比較結果723、725、743、745、763に基づいてヒットカウント値を加算するが、この比較結果が最終的な比較結果と異なる場合、実施形態3ではヒットカウント値を過剰に見積もってしまう。
すなわち、本実施形態のキャッシュ装置では、着目するデータ要素より先行するデータ要素の判定結果がキャッシュミスの場合、第2パイプラインのデータ要素は下流へ移動する。この移動が原因で、各々のデータ処理回路で着目するデータ要素が比較されたときに存在したはずの第2パイプラインのデータ要素が、着目するデータ要素が判定装置に入るまでに破棄されているケースが起こり得る。このケースでは、比較結果が有効でヒットカウント値を増加した後に判定装置でキャッシュミスと訂正されるため、ヒットカウント値は正しい値より大きな値となってしまう。
しかしながら、上記の制限事項は、すべてのキャッシュデータに対してヒットカウント値が常に過剰に見積もられる傾向となるので、キャッシュデータにより過少に見積もられることはない。また本実施形態の目的は、ヒットカウント値の小さいキャッシュデータをキャッシュ装置から優先的に破棄し、なるべく使用頻度の多いキャッシュデータを残すことである。それには、ある程度、相対的にヒットカウント値の比較ができ、極端にヒットカウント値の小さいキャッシュデータを破棄できればよく、厳密にヒットカウント値を求めなくてもよい。
仮に、過剰に見積もられたヒットカウント値が原因で、キャッシュ装置から破棄されるキャッシュデータが出たとすると、その後、そのキャッシュデータは再利用され、当然キャッシュミスとして判定される。そして、そのキャッシュデータは改めてリフィルされることとなる。つまり、このようなケースでは、キャッシュ効率が若干低下することが起きてしまうが、一方で画像処理装置の機能そのものが損なわれるわけではないとも言える。
つまり、このような制限事項があったとしても、本発明の課題を解決するには十分であると言える。また、本実施形態ではこの制限事項と引き替えに回路の動作周波数を高められるという効果があり、動作周波数の向上により画像処理装置そのものの処理性能は向上できる。つまり、画像処理装置の総合的な処理性能は、きわめて高いと言える。
<実施形態4>
さらに図11を用いて、実施形態3の制限事項を緩和した基本構成の別の例を説明する。また図11において、第1パイプライン1100は、図の「上手」である左側から「下手」である図面上の右側に向けてデータが移動する。また第2パイプライン1200は「上手」である図面上の右側から「下手」である図面上の左側に向けてデータが移動している。この状態は、実施形態1や3と同様である。図11における各種の信号名称やその意味は、図1や図10で説明した信号名称やその意味と同様であるので、同じ信号についての説明は省略する。実施形態3では、基本構成でヒットカウント値を算出する仕組みが実施形態1と異なるので、これに関係するデータ処理回路の該当箇所について説明する。
実施形態4のデータ処理回路について説明する。なお図10のデータ処理回路とそこに含まれる回路要素は、図11では、比較回路1021〜1029と選択および減算回路1040(セレクタ1046とデクリメンタ1048を含む)とに分かれている。
本実施形態では、2方向の一方(第1パイプライン)のデータ要素である1つのデータ信号「data」と、他方(第2パイプライン)のデータ要素である複数のデータ信号「tag_data」1220〜1227とを同時に比較する。もし1つでも等しい「tag_data」がある場合、そのときの「tag_data」の格納番号を「tag_id」として記憶する。等しい「tag_data」が複数ある場合は、最も「数の大きいものを優先的に選択する」などとしてよい。
具体的には、まず「valid[l]」と「data[l]」を、一度に比較したい「tag_data」の数より1だけ大きいノード1030_1〜1030_9まで複製する。図7(b)に記載の一例では、比較対象のデータ要素「tag_data」は8個存在するので、複製するノード数は9個となる。ここで1だけ余分にノードを作る意味は、実施形態3と同様に第2パイプラインのデータ要素が移動し、比較が失敗するケースに備えるためである。次に各ノードに接続される9個の比較回路1021〜1029を設け、各ノード1030_1〜1030_9と接続する。さらに9個の比較回路1021〜1029の各々に、「tag_valid[i]」と「tag_data[i]」の組み1220から「tag_valid[i+8]」と「tag_data[i+8]」の組1227とを各々接続する。
比較回路1021〜1029の各々の動作は、実施形態3と同様であり、その9本の比較結果がセレクタ1046に入力される。そしてセレクタ1046は、比較結果が等しい「tag_data」の格納番号である「Node=i」から「Node=i+8」のいずれかを選択する。またセレクタ1046は、上記9種類の比較結果がいずれも等しくないときは、入力された処理結果信号「tag_id[l]」を選択する。
実施形態3と同様に、格納番号を「数の大きいものを優先的に選択する」という方法で選択する。そして、外部からの駆動信号「shift」1202が有効の場合、セレクタ1046の選択結果からデクリメンタ(減算器)1048を用いて格納番号を1だけ減算することで調整する。
そして、本実施形態では、第1パイプライン(1100)の1区間において、第2パイプライン(1200)のデータ要素のヒットカウント値を保持するために、8個のパイプライン・レジスタ1060〜1067を備える。また、上記の比較結果を基にヒットカウント値を算出するための、8個のヒットカウント値算出回路1050〜1057を備える。第2パイプライン(1200)の8個のデータ要素1220から1227と、ヒットカウント値の8個のパイプライン・レジスタ1060〜1067と、8個のヒットカウント値算出回路1050〜1057の接続のし方は、実施形態3と同様でよい。
上記のように、接続のし方を工夫することで、本実施形態では、実施形態3の図10で示していた8区間(8ステージ)のパイプラインを1区間(1ステージ)で実現しており、1つの入力データに対する比較完了までのレイテンシが8から1に削減できる。そして、このようなレイテンシの削減により、本実施形態では、実施形態3で説明した制限事項の発生を非常に少なくすることができる。また図11の第1パイプラインの1区間(1ステージ)を基本構成としてそれを連結することにより、非常に多くのデータ要素に対応できることは言うまでもない。
<実施形態5>
さらに図12を用いて、実施形態1および2で用いたリオーダバッファを複数バッファに拡張した別の構成例を説明する。本実施形態では、リオーダバッファに複数のキャッシュタグを格納できる構成となる。実施形態1および2では、データ処理装置200に格納された8個のキャッシュタグとキャッシュタグ交換回路250のリオーダバッファに格納された1個のキャッシュタグがあった。つまり、実質的には9ウェイのフル・セット・アソシアティブ方式のキャッシュタグ判定部となっていた。
実施形態5では、リオーダ回路320を複数のキャッシュタグに拡張することにより、例えば、M個のリオーダバッファに拡張する場合、(8+M)ウェイのフル・セット・アソシアティブ方式のキャッシュタグ判定部となる。実施形態5では、フル・セット・アソシアティブ方式のウェイ数をさらに増加してキャッシュ効率を向上することができる。
また、既に開発済みのデータ処理装置200を変更せずに、キャッシュ判定装置280のリオーダ回路を拡張することでキャッシュのウェイ数を拡張できる。本実施形態により、フル・セット・アソシアティブ方式のキャッシュ装置において、データ処理装置200のデータ処理装置とキャッシュ判定装置280のリオーダ回路で所望のウェイ数を分割して実装できるようになる。
なお、図12における各種の信号の名称や意味は、図3と図10を用いて説明した実施形態1および2と同様であり、同じ信号に対する説明はここでは省略する。
図12に記載の300のブロックは、図3および図10のヒットカウント値算出回路300に相当する。また図12に記載の800のブロックが実施形態5でのリオーダ回路であり、図3および図10のリオーダ回路320に相当する部分である。また、制御回路である「Reorder controller」850は実施形態1および2の制御回路である「Reorder controller」350に相当する。
まず、本実施形態のリオーダ回路800には、リオーダ回路320と異なり、以下に示すM組の回路を備える。
・「reorder_tag_valid[0]、reorder_tag_data[0]」810_0から「reorder_tag_valid[m−1]、reorder_tag_data[m−1]」810_M−1に示すM個のリーダバッファ。
・820_0から820_M−1に示すM個の比較回路。
・「reorder_hit_count[0]とインクリメンタ」830_0から「reorder_hit_count[m−1]とインクリメンタ」830_M−1に示すM個のヒットカウンタ。
また、本実施形態のリオーダ回路800には、リオーダ回路320と異なり、上記M組みの回路の処理結果を基にリオーダ回路800を制御する、以下の回路を備える。
・バッファの空き状態、最小、もしくは最大となるヒットカウント値のリオーダバッファ番号を検知する「Hit count detector」840
・交換機能を実現する「Reorder decoder」860。
以下、図12を用いて「破棄予定のキャッシュタグ/キャッシュデータの交換機能」と「破棄予定のキャッシュタグ/キャッシュデータの復帰機能」について説明する。どちらの機能も前述の実施形態1および2と同様に、入力された「miss_hit_flag」が有効(アサート状態)のときに動作する。
(破棄予定のキャッシュタグ/キャッシュデータの交換機能)
まず、M個の比較回路820_0から820_M−1で、入力された「data(miss_hit_address)」とM個のリオーダバッファ810_0から810_M−1を比較する。1つでも同一のリオーダバッファが存在した場合、「reorder_controller」850は、「miss_hit_flag」を無効(ディアサート状態)にする。そして、「tag_id」をリオーダバッファの番号に変更する。
前述の実施形態1および2では、リオーダバッファが1つであった。そのため、リオーダバッファとキャッシュメモリを切り替える信号「reorder」を有効(アサート状態)にするだけでキャッシュデータの格納位置を特定できた。しかしながら本実施形態の場合、複数リオーダバッファの格納位置をキャッシュメモリ調停部580に伝える必要がある。
また、1つも同一となるリオーダバッファが存在しなかった場合は、以下に示す交換機能が動作する。いま、リオーダバッファの有効信号である「reorder_tag_valid[0]」810_0から「reorder_tag_valid[m−1]」810_M−1の何れかが無効(ディアサート状態)のときを考える。この場合、「reorder_tag_data[0]」810_0から「reorder_tag_data[m−1]」810_M−1のリオーダバッファの何れかは空き状態であることを示す。
当然、リオーダ回路800は無条件で空き状態のリオーダバッファ「reorder_tag_data[0]」810_0から「reorder_tag_data[m−1]」810_M−1の何れかに破棄予定キャッシュタグ「swtag」を退避できる。そこで、「Hit count detector」840は空き状態のリオーダバッファを探す。具体的には「reorder_tag_valid[0]」810_0から「reorder_tag_valid[m−1]」810_M−1のうち値が無効(ディアサート状態)のものを1つ探す。そして、「Hit count detector」840は検知結果842を出力する。
次に「Min hit count decoder」860は、この検知結果842を受け取り、入力された「sweepとswtag」を選択された1つのリオーダバッファに退避させる。更に、破棄予定のヒットカウント値「hit_count」を、対応するヒットカウント値「reorder_hit_count[0]」830_0から「reorder_hit_count[m−1]」830_M−1の何れかに退避させる。
一方、リオーダバッファの有効信号である「reorder_tag_valid[0]」810_0から「reorder_tag_valid[m−1]」810_M−1がすべて有効(アサート状態)のときを考える。この場合、1つもリオーダバッファに空きがない状態である、交換すべきリオーダバッファを選択する必要がある。
そこで「Hit count detector」840は、「reorder_hit_count[0]」830_0から「reorder_hit_count[m−1]」830_M−1のうち、ヒットカウント値が最小のリオーダバッファを探す。そして、前記「Hit count detector」840は、検知結果842と「min_reorder_hit_count」843を出力する。そして破棄予定のヒットカウント値「hit_count」とこの「min_reorder_hit_count」843を比較回路「Compare」862で比較する。
破棄予定のヒットカウント値「hit_count」が大きい場合、「Reorder decoder」860は、入力された「sweep、swtag、hit_count」を、検知結果842を基に選択されたリオーダバッファに上書きする。破棄予定のヒットカウント値「hit_count」が小さい場合、入力された「sweep、swtag、hit_count」を破棄する。
キャッシュメモリ調停部580ではM個のリオーダバッファに対応するキャッシュデータの格納領域を設け、上記のリオーダバッファの番号を示す「tag_id」と「reorder」と「exchange」に従い、キャッシュデータを更新/交換すればよい。
上記のような仕組みで複数のリオーダバッファについて、破棄予定のキャッシュタグ/キャッシュデータの交換機能が実現できる。
(破棄予定のキャッシュタグ/キャッシュデータの復帰機能)
前記の交換機能と同様に、M個の比較回路820_0から820_M−1で、入力された「data(miss_hit_address)」とM個のリオーダバッファ810_0から810_M−1を比較する。1つでも同一のリオーダバッファが存在した場合は、「reorder_controller」850は、「miss_hit_flag」を無効(ディアサート状態)し、「tag_id」をリオーダバッファの番号に変更する。
一方、「Hit count detector」840は、「reorder_hit_count[0]」830_0から「reorder_hit_count[m−1]」830_M−1のうち、ヒットカウント値が最大のリオーダバッファを探す。そして前記「Hit count detector」840は、検知結果842と「max_reorder_hit_count」844を出力する。
ここで、キャッシュヒットしたリオーダバッファと最大のヒットカウント値を持つリオーダバッファが同一の場合、復帰機能が動作する。検知結果842により、「reorder_controller」850は、駆動信号「shift」を有効(アサート状態)にし、「tag_data」を第2パイプラインへ書き込む。また同時に、「max_reorder_hit_count」844をヒットカウント値算出回路300へ書き込む。また、「Reorder decoder」860は、入力された「sweep、swtag、hit_count」を、検知結果842を基に選択されたリオーダバッファに上書きする。
キャッシュメモリ調停部580ではM個のリオーダバッファに対応するキャッシュデータの格納領域を設け、上記のリオーダバッファの番号を示す「tag_id」と「rebirth」と「exchange」に従い、キャッシュデータを更新/交換すればよい。
上記のような仕組みで複数のリオーダバッファについて、破棄予定のキャッシュタグ/キャッシュデータの復帰機能が実現できる。
<実施形態6>
近年のキャッシュ装置では、キャッシュメモリの一部を、値を書き換えない非キャッシュ領域に指定することができる。先にプリンタ画像処理では紙面の大半は白地であるケースを課題として挙げたが、この白地を印刷するために必要となる画像処理のデータは、非キャッシュ領域に割り当てた方が処理効率の高いのは自明である。
そこで、図10のデータ処理装置の第2パイプライン760のように、前述のヒット数カウンタとヒットカウント値を備える代わりに、キャッシュタグの破棄を防止するフラグ(1ビットのパイプライン・レジスタ)を具備する。そして新たに具備した破棄防止フラグを用いてキャッシュメモリの一部を識別してその部分を非キャッシュ領域に指定する機能を追加する。第2パイプラインの破棄防止フラグ(レジスタ)が有効(アサート状態)となるキャッシュタグの示すキャッシュメモリの格納先が非キャッシュ領域となる。
まず、データ処理装置は、画像処理を開始する前に、予めキャッシュメモリの一部に必要となるデータ(前述の白地を印刷するために必要となる画像処理のデータ等)を記憶する。そして、データ処理装置の第2パイプラインのデータ要素として、記憶したデータのキャッシュメモリ上の格納先(格納アドレス)をtag_data[i]に記憶し、対応する有効信号tag_valid[i]と破棄防止フラグを有効(アサート状態)に設定する。
次にデータ処理装置は、画像処理を開始し、所望の処理を実行する。処理の中で、この防止フラグが有効(アサート状態)なキャッシュタグが第2パイプラインから破棄されたとき、データ処理装置は、リオーダバッファに一時的にこのキャッシュタグを退避後、前述の動作のように、必ずリオーダバッファのキャッシュタグをデータ処理装置の第2パイプラインに復帰させる。このような動作を行うことで、キャッシュ装置のキャッシュメモリの一部を、非キャッシュ領域に指定することができる。
また、例えば、CPUが予めデータ処理装置に、メモリの特定領域を示すアドレス上限と下限を設定し、この範囲のメモリを非キャッシュ領域としてもよい。この場合、フラグの有効(アサート状態)化は、キャッシュミスアドレスが特定領域内のアドレスであれば、キャッシュ判定装置280が自動的に有効化してもよい。
これによりキャッシュメモリの一部に、画像処理で必要とするデータを保持するための非キャッシュ領域(バッファ)として使用することができる(キャッシメモリ内に任意の大きさのバッファ領域を確保できる)。そして、画像処理の処理内容に応じて、キャッシュと非キャッシュ領域(バッファ)という2種類のデータ保持の形態を適切に配分し、より効率的なキャッシュ機構を実現できることとなる。
これまで説明したように、第2パイプラインのデータ要素にヒットカウント値などの統計情報やコンピュータ等の処理装置(CPU、プロセッサ)から指定するフラグ等の属性情報を付加する。そして、付加した属性情報の示す優先順位に基づき、第2パイプラインに入力するデータ要素の破棄と復帰を制御する。これらの仕組みを通して、第2パイプライン上のデータ要素の優先順位を適応的に変更することが可能となる。
<その他の実施形態>
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。

Claims (15)

  1. 複数の第1ノードを有し、当該第1ノードの保持する第1データを第1方向に位置する隣のノードへ移動させる第1パイプラインと、
    前記第1パイプラインの第1ノードの各々に対応する複数の第2ノードを有し、当該第2ノードの保持する第2データを前記第1方向と逆の第2方向に位置する隣のノードへ移動させる第2パイプラインと、
    前記第1データと前記第2データとを用いてデータ処理を行う処理手段と、
    前記第2パイプラインの出力した第2データの属性情報に基づき、前記出力した第2データの何れかを保持する保持手段と、
    を備え、
    前記第2データの属性情報に基づき、前記保持手段で保持した第2データを前記第2パイプラインに入力することを特徴とする情報処理装置。
  2. 前記保持手段では、前記第2パイプラインからの破棄と復帰を決定するための属性情報に基づいて、保持している第2データの優先順位が決定され、
    前記優先順位に基づいて、前記保持手段が保持する第2データと前記第2パイプラインが保持する第2データとが入れ替えられることを特徴とする請求項1に記載の情報処理装置。
  3. 前記処理手段のデータ処理の結果に基づき、前記属性情報を前記保持手段で算出することを特徴とする請求項1又は2に記載の情報処理装置。
  4. 前記処理手段のデータ処理の結果に基づき、前記属性情報を前記第2パイプラインで算出することを特徴とする請求項1又は2に記載の情報処理装置。
  5. 前記処理手段のデータ処理は、前記第1パイプラインの第1データと、前記第2パイプラインの第2データとが一致するか否かを判定する処理であり、前記属性情報は、一致したときの回数であることを特徴とする請求項1から4のいずれか1項に記載の情報処理装置。
  6. 情報処理装置であって、
    複数の第1ノードを有し、当該第1ノードの保持する第1データを第1方向に位置する隣のノードへ移動させる第1パイプラインと、
    前記第1パイプラインの第1ノードの各々に対応する複数の第2ノードを有し、当該第2ノードの保持する第2データを前記第1方向と逆の第2方向に位置する隣のノードへ移動させる第2パイプラインと、
    前記第1データと前記第2データとを用いてデータ処理を行う処理手段と、
    前記第2パイプラインの出力した第2データの属性情報に基づき、前記出力した第2データの何れかを保持する保持手段と、
    を備え、
    前記属性情報は、前記情報処理装置の外部から設定されることを特徴とする情報処理装置。
  7. 前記保持手段が複数の第2データを保持するときは、前記保持した第2データのうち、前記属性情報が最小の第2データを低い優先順位と定め、該第2データを破棄して新たに入力される第2データと交換することを特徴とする請求項1から6のいずれか1項に記載の情報処理装置。
  8. 前記保持手段が複数の第2データを保持するときは、前記保持した第2データのうち、前記属性情報が最大の第2データを高い優先順位と定め、第2パイプラインへ入力することを特徴とする請求項1から6のいずれか1項に記載の情報処理装置。
  9. 複数の第1ノードを有し、当該第1ノードの保持する第1データを第1方向に位置する隣のノードへ移動させる第1パイプラインと、
    前記第1パイプラインの第1ノードの各々に対応する複数の第2ノードを有し、当該第2ノードの保持する第2データを前記第1方向と逆の第2方向に位置する隣のノードへ移動させる第2パイプラインと、
    前記第1データと前記第2データとを用いてデータ処理を行う処理手段と、
    前記第2パイプラインの出力した第2データの属性情報に基づき、前記出力した第2データの何れかを保持する保持手段と、
    を備え、
    前記属性情報は優先順位を示す情報を含むことを特徴とする情報処理装置。
  10. 対象データのキャッシュを管理するキャッシュ装置であって、
    複数の第1ノードを有し、当該第1ノードの保持する第1データを第1方向に位置する隣のノードへ移動させる第1パイプラインと、
    前記第1パイプラインの第1ノードの各々に対応する複数の第2ノードを有し、当該第2ノードの保持する第2データを前記第1方向と逆の第2方向に位置する隣のノードへ移動させる第2パイプラインと、
    前記第1データと前記第2データとを用いてデータ処理を行う処理手段と、
    前記第2パイプラインの出力した第2データの属性情報に基づき、前記出力した第2データの何れかを保持する保持手段と、
    を有する情報処理装置を備え、
    前記第1パイプラインで前記対象データのアドレスを移動し、前記第2パイプラインでキャッシュタグを移動することにより、前記アドレスと前記キャッシュタグとが一致するか否かにより、キャッシュヒットを判定することを特徴とするキャッシュ装置。
  11. 前記キャッシュタグは、前記第2パイプラインと前記保持手段に分割して保持されることを特徴とする、請求項10に記載のキャッシュ装置。
  12. 対象データのキャッシュを管理するキャッシュ装置であって、
    複数の第1ノードを有し、当該第1ノードの保持する第1データを第1方向に位置する隣のノードへ移動させる第1パイプラインと、
    前記第1パイプラインの第1ノードの各々に対応する複数の第2ノードを有し、当該第2ノードの保持する第2データを前記第1方向と逆の第2方向に位置する隣のノードへ移動させる第2パイプラインと、
    前記第1データと前記第2データとを用いてデータ処理を行う処理手段と、
    前記第2パイプラインの出力した第2データの属性情報に基づき、前記出力した第2データの何れかを保持する保持手段と、
    を有する情報処理装置を備え、
    前記第1パイプラインで前記対象データのアドレスを移動し、前記第2パイプラインでキャッシュタグを移動することにより、前記保持手段が、前記アドレスと前記キャッシュタグとが一致しない場合に、前記出力した第2データを保持し、一致した場合には、前記保持した第2データを前記第2パイプラインに入力することを特徴とするキャッシュ装置。
  13. 前記キャッシュ装置は、該キャッシュ装置の一部に予め必要とするデータに対して格納アドレスを識別して格納し、
    前記保持手段が、前記第1パイプラインの前記識別された格納アドレスと前記キャッシュタグとが一致しない場合にも、前記第2パイプラインから前記第2データを一時的に退避させて、前記第2パイプラインに入力することを特徴とする請求項10に記載のキャッシュ装置。
  14. データ処理装置において実行されるデータ処理方法であって、
    複数の第1ノードを備える第1パイプラインが、第1ノードの保持する第1データを第1方向位置する隣のノードへ移動させる工程と、
    前記第1パイプラインの第1ノードの各々に対応する複数の第2ノードを備える第2パイプラインが、第2ノードの保持する第2データを前記第1方向と逆の第2方向に位置する隣のノードへ移動させる工程と、
    処理手段が、前記第1データと前記第2データとを用いてデータ処理を行う工程と、
    保持手段が、前記第2パイプラインの出力した第2データの属性情報に基づき、前記出力した第2データの何れかを保持する工程と、
    を有し、
    前記第2データの属性情報に基づき、前記保持手段で保持した第2データを前記第2パイプラインに入力することを特徴とするデータ処理方法。
  15. 請求項14に記載のデータ処理方法の各工程をコンピュータに実行させるためのプログラム。
JP2010173961A 2010-08-02 2010-08-02 情報処理装置、キャッシュ装置およびデータ処理方法 Active JP5627330B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010173961A JP5627330B2 (ja) 2010-08-02 2010-08-02 情報処理装置、キャッシュ装置およびデータ処理方法
US13/173,970 US8819360B2 (en) 2010-08-02 2011-06-30 Information processing apparatus, cache apparatus, and data processing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010173961A JP5627330B2 (ja) 2010-08-02 2010-08-02 情報処理装置、キャッシュ装置およびデータ処理方法

Publications (3)

Publication Number Publication Date
JP2012033112A JP2012033112A (ja) 2012-02-16
JP2012033112A5 JP2012033112A5 (ja) 2013-08-08
JP5627330B2 true JP5627330B2 (ja) 2014-11-19

Family

ID=45527902

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010173961A Active JP5627330B2 (ja) 2010-08-02 2010-08-02 情報処理装置、キャッシュ装置およびデータ処理方法

Country Status (2)

Country Link
US (1) US8819360B2 (ja)
JP (1) JP5627330B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5650441B2 (ja) * 2010-06-07 2015-01-07 キヤノン株式会社 演算装置、キャッシュ装置、その制御方法及びコンピュータプログラム
US20150331608A1 (en) * 2014-05-16 2015-11-19 Samsung Electronics Co., Ltd. Electronic system with transactions and method of operation thereof
JP6979777B2 (ja) * 2017-03-22 2021-12-15 キヤノン株式会社 インターフェース装置およびその制御方法
CN109582214B (zh) * 2017-09-29 2020-04-28 华为技术有限公司 数据访问方法以及计算机系统
CN108052483B (zh) 2017-12-29 2021-10-22 南京地平线机器人技术有限公司 用于数据统计的电路单元、电路模块和装置
JP7278067B2 (ja) 2018-12-20 2023-05-19 キヤノン株式会社 データ処理装置及びその制御方法及びプログラム
CN113688074B (zh) * 2021-10-26 2022-02-01 浙江芯昇电子技术有限公司 先进先出数据处理装置及数据处理方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04178755A (ja) * 1990-11-13 1992-06-25 Toshiba Corp データ統合装置
JPH04184533A (ja) * 1990-11-20 1992-07-01 Toshiba Corp トランザクション記憶装置
EP0650117B1 (en) 1993-10-21 2002-04-10 Sun Microsystems, Inc. Counterflow pipeline
US5748539A (en) * 1997-03-05 1998-05-05 Sun Microsystems, Inc. Recursive multi-channel interface
US6163839A (en) * 1998-09-30 2000-12-19 Intel Corporation Non-stalling circular counterflow pipeline processor with reorder buffer
JP2001282261A (ja) 2000-03-30 2001-10-12 Canon Inc 音声データ設定装置及び方法、音声データ生成装置及び方法、記録媒体
US8452944B2 (en) 2009-05-22 2013-05-28 Canon Kabushiki Kaisha Information processing apparatus and information processing method

Also Published As

Publication number Publication date
JP2012033112A (ja) 2012-02-16
US20120030453A1 (en) 2012-02-02
US8819360B2 (en) 2014-08-26

Similar Documents

Publication Publication Date Title
JP5627330B2 (ja) 情報処理装置、キャッシュ装置およびデータ処理方法
JP7553478B2 (ja) 書き込みミスエントリのドレインをサポートする犠牲キャッシュ
US8171225B2 (en) Cache for a multi thread and multi core system and methods thereof
KR101121487B1 (ko) 멀티-클래스 데이터 캐시 정책들
US7415575B1 (en) Shared cache with client-specific replacement policy
US20070094450A1 (en) Multi-level cache architecture having a selective victim cache
US8131931B1 (en) Configurable cache occupancy policy
JP4574712B2 (ja) 演算処理装置、情報処理装置及び制御方法
JP5730126B2 (ja) データ供給装置、キャッシュ装置、データ供給方法、キャッシュ方法およびプログラム
JP5580660B2 (ja) 情報処理装置、回路、情報処理方法、及びプログラム
JP2008107983A (ja) キャッシュメモリ
CN115563027A (zh) 存数指令的执行方法、系统及装置
JP5650441B2 (ja) 演算装置、キャッシュ装置、その制御方法及びコンピュータプログラム
US20040222997A1 (en) Method of distributed caching
JP2009157612A (ja) キャッシュメモリシステム及びキャッシュメモリの制御方法
US8977815B2 (en) Control of entry of program instructions to a fetch stage within a processing pipepline
EP2159701A1 (en) Cash control device and cash control method
JP3295728B2 (ja) パイプラインキャッシュメモリの更新回路
WO2000008551A1 (en) Software directed target address cache and target address register
JP3614946B2 (ja) メモリバッファ装置
JP2010134584A (ja) メモリ管理装置、メモリ管理方法およびプログラム
CN111506252A (zh) 快取存储器及快取存储器的管理方法
JP2011044077A (ja) 画像処理装置
JP2010176692A (ja) 演算処理装置、情報処理装置及び制御方法

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130625

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130625

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140328

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140411

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140521

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140617

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140804

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: 20140901

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140930

R151 Written notification of patent or utility model registration

Ref document number: 5627330

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151