説明

データ値の多次元アレイへのパラレルなアクセスを提供するデータ処理装置

【課題】より効率的なキャッシュの使用をサポートする2次元アレイとして構成されるデータを処理する装置を提供する。
【解決手段】メインメモリに格納される画素値を利用して、位置の多次元領域の移動の時点を規定する処理のため、画素値がキャッシュされる。画素値に対してキャッシュミスが発生すると、キャッシュ位置におけるデータのキャッシュ置換が実行され、領域外の画像における位置に対する画素データを格納する位置が、領域内部の画像における画素データ位置を格納する置換キャッシュ位置から選択的に免除する置換のために選択される。実施例では、領域内部及び外部のデータ値をキャッシュするため異なるタイプのキャッシュ構成が利用され、キャッシュ位置に関してはキャッシュ位置より高いレベルの出力並列化をサポートし、内部の位置のキャッシュでは画像からの各ラインに対するデータはバンク上で循環的に繰り返すようにして分散される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置に関し、より詳細には映像データ処理装置に関する。
【背景技術】
【0002】
米国特許第5,530,481号は、MPEGエンコーダを記載している。MPEGでは、いくつかの画像が、隣接画像からの画素ベクトルブロックを更新画像の選択された一に配置することによって、隣接画像に対する更新として符号化される。MPEG符号化は、ブロックの当初の位置から選択された位置への移動の距離及び方法を記述する動きベクトルの選択を伴う。
【0003】
MPEG符号化は、典型的には、更新により復号化される画像内の異なるブロックの画素コンテンツを隣接画像内のあるブロックのコンテンツと比較することによって、有用な動きベクトルを検索する。このため、これらの画像の少なくとも1つを格納するのに画像メモリが必要とされる。
【0004】
米国特許第5,530,481号は、動きベクトルの検索を高速化するのにどのようにバッファメモリが利用可能であるかを記載している。バッファメモリは、ゼロの動きベクトルに対応するブロックを含み、包囲する画素領域についての画素データを格納する。適切な動きベクトルが選択されると、典型的には以前の領域の大部分と重複する新たな領域が処理され、それに対して、この新たな領域の境界部分の画素データのみがバッファメモリにフェッチされる必要がある。同様の形式の領域ベースのアクセスが、パターンマッチング処理のフィルタリングなど他の画像処理に必要とされる。
【0005】
米国特許第6,125,432号は、同様の動きベクトル推定を、この目的のためのキャッシュメモリを利用して実行する。当該特許には詳細には記載されていないが、データをフェッチするのに利用可能なアドレスに対応して、メインメモリからのデータを格納するキャッシュメモリ位置を有するキャッシュメモリは周知である。データがキャッシュメモリ位置に格納されるアドレスは変更可能である。典型的には、データがキャッシュメモリに格納されていない新たなアドレスがアドレス指定されると、当該データはメインメモリからフェッチされ、古いアドレスに対して使用されたキャッシュメモリ位置が、この新たなアドレスと対応するデータについて再利用される。
【0006】
このタイプの画像処理のパフォーマンス特性は、領域からの画素データのためのメモリの構成によって大きな影響を受ける。動きベクトルの検索中に必要とされる領域のすべての画素を格納するための容量を備えた大きなキャッシュバッファメモリを利用し、当該領域が変更される毎にすべての新しい画素を予めフェッチすることは、キャッシュミスが回避されるという効果を有する。このアプローチの問題点は、より大きな検索領域が必要とされるとき、より大きなバッファメモリが必要となるということである。他には、領域からの画素の一部のみが格納され、他の画素が、当該他の画素が動きベクトルの検索中にアドレス指定されるとき、キャッシュされている画素を置換するのに利用される小さなキャッシュメモリを使用するというものがある。この代替は、キャッシュメモリサイズを低減するが、キャッシュミスによる電力消費と遅延を増大させる。
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の課題は、画像処理装置を提供することであり、より一般には、より効率的なキャッシュの使用をサポートする2次元アレイとして構成されるデータを処理する装置を提供することである。
【課題を解決するための手段】
【0008】
本発明によるデータ処理装置は、請求項1に記載される。データ処理ユニットは、データ値のアレイを処理し、当該アレイのスライドする位置領域を規定する。この領域は、連続的な時間のインターバルにおける連続的な位置を想定する。各時間インターバル中、処理ユニットは、当該時間インターバルにおいて想定される領域内及びその周囲の位置からのデータ値を利用する。データ値をキャッシュするのにキャッシュメモリユニットが設けられる。キャッシュメモリユニットは、処理されるデータアレイにおけるアドレスに適応的に関連付けされたキャッシュ位置を有する。キャッシュ管理は、アドレスの置換による関連付けされたアドレスの変更を可能にする。各時間インターバル中、異なる処理が、当該時間インターバルに想定された領域からのデータ値と、当該領域周辺からのデータ値とに与えられる。当該領域からのデータ値を格納するキャッシュ位置はキャッシュ置換から免除される(exempted)一方、当該領域の周囲からのデータ値を格納するキャッシュ位置はキャッシュ置換される。
【0009】
キャッシュサイズは、一般には、当該領域が想定される時間インターバル中に当該領域の周囲の位置からプロセッサが必要とするすべての位置のデータ値をキャッシュするのに必要なものより小さい。従って、当該領域の周辺の位置のデータ値は、一般には処理中に置換される。処理ユニットによって使用されるアドレッシングシーケンスに応じて、特定位置のデータ値をリロードすることさえ必要になるかもしれない。このように、キャッシュ位置が効率的に使用され、領域内の頻繁に使用されるデータ値の免除はキャッシュミスを減少させ、領域外のキャッシュ置換の使用は必要とされるキャッシュサイズを低減する。
【0010】
典型的には、領域のサイズは、例えば、動きベクトルの推定のため一致するマクロブロックの検索中など、処理ユニットがアクセス単位として利用するブロック(すなわち、ブロック及び複数のブロックを含むマクロブロック)のサイズを超える。一例では、当該領域は、中心のマクロブロックと、この中心のマクロブロックの上下左右の隣接するマクロブロックの半分を含む。従って、各マクロブロックがキャッシュミスのリスクなくアドレス指定可能な互いに重複する複数のマクロブロックが領域に適合する一方、中心のマクロブロックからより遠くにあるマクロブロックは部分的にキャッシュミスのリスクがあり、さらに遠くにあるマクロブロックは、完全にキャッシュミスのリスクがある。好ましくは、キャッシュメモリユニットが、アドレス指定されたブロック(又はより一般にはマクロブロック)から複数のデータ値をパラレルに出力するよう構成される。アドレス指定されたブロックが重複しているとき、データ値の境界部分の領域は免除されたキャッシュ位置からのものであるかもしれず、一部は免除されていないキャッシュ位置からのものであるかもしれない。
【0011】
好ましくは、予測される以降の領域からのデータ値が、メインメモリから免除されるキャッシュ位置に予めフェッチされる。より好ましくは、ウィンドウが移動する際、免除されているキャッシュ位置へのコピー前に予めフェッチされたデータ値を格納するためのプリフェッチバッファが設けられる。
【0012】
好ましくは、所定のキャッシュ位置セットを利用して、現在領域のデータ値を格納する。この結果、これらのキャッシュ位置の構成は、領域外の位置に対する他のキャッシュ位置の構成とは異なるものになるかもしれず、当該キャッシュ位置が置換を免除されているという知識を利用して、例えば、領域外のデータを格納するキャッシュ位置に対するものよい、領域内のデータを格納するキャッシュ位置に対するより大きなキャッシュメモリ位置(より多くの位置からのデータ値に対する)を利用することによって、領域内のデータに対するキャッシュ位置の構成を最適化する。
【0013】
一実施例では、所定の位置に対して使用されるキャッシュメモリが、各々がパラレルな異なるy−アドレスの第1の個数のラインセグメントに対するデータ値を生成するよう構成される。残りのキャッシュ要素について、1つのy−アドレスの1つのみのラインセグメント又は第1の個数より少ない第2の個数のy−アドレスの第2の個数のラインセグメントに対するデータ値を生成可能な他のタイプのキャッシュメモリが使用される。所定の位置にデータ値が格納されているウィンドウの完全な範囲内の位置のブロックがアドレス指定されると、データプロセッサは、第1の個数のラインからのデータ値がパラレルに受付される第1モードにスイッチする(「受け付ける」とは、例えば、パラレルな参照値と比較して、又はそうでない場合には、パラレルに処理されることを意味する)。当該ブロックがウィンドウの境界を超えて延伸したり、又はウィンドウの完全に範囲外にあるとき、プロセッサは1つのラインのみのデータ値をパラレルに受け付け、又は第2の個数のラインのみをパラレルに受け付ける第2モードにスイッチする。従って、高度な並列化がウィンドウ内の最も頻繁に出現するブロックについて実現され、より低いレベルの並列化が遠くにあるブロックについて実現される。
【0014】
ある実施例では、高度な並列化を実現するため、中心のウィンドウからのデータを格納する所定のキャッシュ位置は、例えば、各々が異なるラインに対する複数のラインユニットセットとして、又は他のラインユニットのセットとインタリーブされるラインセットとして構成されるかもしれない。この実施例では、各ラインユニットは、あるラインのデータ値をパラレルに出力するための複数のメモリバンクを有するようにしてもよく、バンクの個数は、いくつかのデータ値をパラレルに出力するのに十分なものであって、アドレス指定されるブロックの幅Bxのデータ値の個数以上である。さらなる実施例では、W個の連続するx−アドレスに対するデータ値が、あるラインセグメントからのデータ値が、W個の位置内に適合するラインセグメントの何れかのx−位置においてパラレルに読むことが可能となるように、上記バンク上に循環的に分散されるようにしてもよい。好ましくは、各メモリバンクの各メモリ位置は、連続するx−位置におけるG個のデータ値のグループを格納するよう構成され(例えば、G=4など)、あるラインユニットのバンクの個数Sは、S*Gが当該ブロックのラインセグメントの幅Bxを超えるくらいに大きなものである。これは、Bxのデータ値の指定されたラインセグメントの出力が、Bx/Gが整数である場合にはBx/G個のメモリバンクを、そうでない場合には、Bx/Gを超える次に大きな整数個のメモリバンクを要求するように、グループ内のラインセグメントのスタートアドレスを指定することを可能にする。S*G>Bxとなるように、ラインユニットにおいて十分大きなバンクの個数Sを使用することによって、十分なグループからのデータ値がメモリバンクから常にパラレルに出力することが可能となることが保証される。好ましくは、メモリバンクからのデータ値の後の選択が、アドレス指定されたブロックのみのラインセグメントに対するデータ値に出力を揃えさせる。このタイプのキャッシュメモリはまた、自ら、すなわち、他のタイプのキャッシュメモリとの組み合わせでなく、又は通常のメモリとして(キャッシュメモリでなく)利用されてもよい。このように、アクセスされた「ウィンドウ」(又は領域)がデータアレイにおいて移動する場合、ほとんど負担なく高いレベルの並列化を実現することが可能である。
【0015】
その他のキャッシュ位置は、より低い並列化を可能にするよりシンプルな構成とされてもよい。しかしながらあるいは、画像メモリ又は画像キャッシュ全体が、このより複雑な構成を有するようにしてもよい。
【0016】
本発明の上記及び他の課題及び効果が、以下の図面を用いて非限定的な具体例により説明される。
【発明の効果】
【0017】
本発明によると、より効率的なキャッシュの使用をサポートする2次元アレイとして構成されるデータを処理する装置を提供することができる。
【図面の簡単な説明】
【0018】
【図1】図1は、画像処理装置を示す。
【図2】図2は、位置アレイの一部を示す。
【図3】図3は、キャッシュ要素を示す。
【図4】図4は、画像処理装置を示す。
【図5】図5は、キャッシュ要素を示す。
【図6】図6は、画像処理装置を示す。
【図6a】図6aは、画像処理装置を示す。
【図7】図7は、メモリ構成を示す。
【発明を実施するための形態】
【0019】
以下、図面に基づいて本発明の実施の形態を説明する。
図1は、処理ユニット10と、メインメモリ12と、キャッシュメモリユニット14とを有する画像処理システムを示す。処理ユニット10は、キャッシュメモリユニット14に接続されるアドレス出力とデータ入力とを有する。キャッシュメモリユニット14は、メインメモリ12とのデータ及びアドレス接続を有する。動作について、処理ユニット10は、画像処理演算、すなわち、xアドレス及びyアドレスの組み合わせによりアドレス指定可能な画素データを利用する演算を実行する。処理ユニット10は、このタイプの組み合わせを表すアドレスをキャッシュメモリユニット14に供給し、キャッシュメモリユニット14は、アドレス指定された画素データを返す。このアドレス指定された画素データがキャッシュメモリユニット14に格納されると、キャッシュメモリユニット14は、データを直接返す。そうでない場合には、キャッシュメモリユニット14はまず、メインメモリ12の画素データをフェッチする。
【0020】
図2aは、画像のある領域におけるブロックを示す。この領域は、x方向に10個のブロックとy方向に6個のブロックである。各ブロックは、例えば、8つの水平方向に連続する画素の8つの垂直方向に連続する行を含む。一実施例では、アドレス指定の単位はブロックである。本実施例では、アドレスは、xブロックアドレスとyブロックアドレスの組み合わせを含みさえすればよい(例えば、x画素アドレスとy画素アドレスから3つの最下位ビットを省略している)。
【0021】
キャッシュメモリ14は、各キャッシュ位置に対するいくつかのキャッシュ要素142と、キャッシュコントローラ140と、出力セレクタ144とを有する。各キャッシュ要素142は、x−y画素アドレスに係るx−yブロックに対する画素データ、又はキャッシュされているブロックのx−yブロックアドレスをキャッシュするよう構成される。経時的に、関連付けされたx−yアドレスが変更されるように、異なるブロックがキャッシュ要素142にキャッシュされる。処理ユニット10がキャッシュ要素142の何れにも格納されていないブロックにおける画素又は画素ブロックをアドレス指定すると、キャッシュメモリユニット14は、キャッシュ要素142の1つを選択し、当該キャッシュ要素142に格納されているブロックを新たにアドレス指定されたブロックと置換する(メインメモリ12から当該新たにアドレス指定されたブロックをフェッチした後)。その後、キャッシュ要素142は、新たにフェッチされたブロックのx−yアドレスをキャッシュされたデータと関連付ける。
【0022】
キャッシュコントローラ140は、本来的には、キャッシュ要素142を管理するプログラムと、キャッシュ要素142に格納されるブロックのxy−アドレスを表すメモリを備えた小さなプロセッサとして実現可能である。キャッシュコントローラ140は、新たにフェッチされたブロックが格納されるキャッシュ要素142の選択を制御する。例えば、最も以前に使用されたキャッシュ要素のデータを置換するLRUなどの何れかの選択アルゴリズムが利用されてもよい。しかしながら、キャッシュコントローラ140は、x−yアドレスの2次元領域からx−yアドレスを有する画素ブロックを格納するキャッシュ要素142に特別な処理を与える。図2aの斜線部分20により示される当該領域は、x方向とy方向のそれぞれに複数のブロック行及び列まで拡張される。この領域20は、処理ユニット10により選択され、処理ユニット10が当該領域が移動すべきであると通知すると、当該領域を繰り返し右方向に移動する(当該領域の最も低いブロックのxアドレスを増大させる)などの処理中に、定期的に更新される。
【0023】
キャッシュコントローラ140は、領域20からのブロックをキャッシュするキャッシュ要素142を通常の置換(すなわち、領域20の移動することなく行われる置換)から免除する。キャッシュ要素142が領域20を移動させることなく新たにアドレス指定されたブロックを格納するよう選択される必要があるとき、キャッシュコントローラ140は、免除されたキャッシュ要素142の何れも含まないキャッシュ要素142の一部から当該キャッシュ要素142を選択する。通常の置換中の免除は、例えば、キャッシュ置換中に免除される所定のキャッシュ要素142に領域20からのブロックを格納することによって、又は、領域20からのブロックを格納するキャッシュ要素142に対するロックフラグを設定することによって、又は領域20のx−yアドレス境界と各キャッシュ要素142に係るx−yアドレスとを比較することによってなど何れか便利な方法により実現可能である。
【0024】
処理ユニット10がキャッシュコントローラ140に領域20がある方向(所定の方向又は処理ユニット10によって選択及び指示される方向)に移動しなければならないことを通知すると、キャッシュコントローラ140は、キャッシュ置換から免除されたブロックセットを変更する。所定のキャッシュ要素142が通常の置換中に免除される実施例では、この変更は、新しい領域には含まれるが、古い領域には含まれないブロックに対する画素データを、古い領域には含まれるが、新しい領域には含まれないキャッシュされているブロックのキャッシュ要素142に移動することによって実現される。例えば、水平方向の移動の場合、これは、同一のxアドレスで異なるyアドレスを有するブロックの列を格納するキャッシュ要素142に関係する。キャッシュ要素142がロックフラグにより通常の置換中に免除される実施例では、ロックフラグは、新しい領域に含まれるが、古い領域には含まれないブロックに対して設定され、古い領域に含まれるが、新しい領域には含まれないキャッシュブロックのキャッシュ要素142に対してクリアされる。この実施例では、関連するブロックがキャッシュ要素142にロードされると、フラグが設定されるかもしれない。
【0025】
好ましくは、キャッシュコントローラ140は、領域20が移動すると、領域20に新たに含まれるブロックを予めフェッチするよう構成される。当該実施例では、当該領域が所定の方向に毎に、キャッシュコントローラ140は、領域の前の動きをトリガーする信号に応答して予めフェッチすることを開始するかもしれない。処理ユニット10が方向を選択する実施例では、処理ユニット10が好ましくはまず送信し、キャッシュコントローラ140が、好ましくは、まず、当該領域を移動するための信号の送信前に、予めのフェッチ処理をイネーブルにする方向信号を受信する。
【0026】
図2bは、予めのフェッチ処理を示す。この図では、図2aの領域20を2ブロックの幅だけ右方向に移動することによって取得される斜線領域22が示される。この場合、領域22の16個のブロックの内の8つが(当初の領域に属しないブロック)、予めフェッチされる必要がある。
【0027】
所定のキャッシュ要素142が通常の置換中に置換を免除される実施例では、これら所定の免除されたキャッシュ要素142は、好ましくは、現在領域20からのすべてのブロックを格納するのに十分なキャッシュ要素と、予めフェッチされたブロック、すなわち、図2aの例の24個のブロックを格納するための追加的なキャッシュ要素142を加えてものを有する。ロックフラグが使用される実施例では、キャッシュコントローラ140は、当該領域が移動される前に予めフェッチされたブロックをロックする。
【0028】
好ましくは、キャッシュメモリユニット14は、処理ユニット10とパラレルにあるブロックからの複数の画素位置に対する画素値(好ましくは、当該ブロックのある行からのすべての画素値)を出力し、当該ブロックの他の連続する複数の画素(例えば、連続的な行など)を連続的に出力する。キャッシュ要素142は、好ましくは、キャッシュ要素142があるブロックからの画素データをキャッシュするとき、キャッシュ要素142が当該ブロックからのすべての画素値をキャッシュするように、その全体のブロックをキャッシュするよう構成される。この場合、1つのx−yブロックアドレスは、当該ブロックに対するすべての画素値をキャッシュするキャッシュ要素142を識別するのに利用されるかもしれない。1つのx−yブロックアドレスに応答して、キャッシュ要素142は、その後に、同じx−アドレスであって、連続する他のy−アドレスの画素値の出力に続いて、異なるx−アドレスと1つのy−アドレスに対する画素値を同時にパラレルに出力するかもしれない。
【0029】
さらなる実施例では、処理ユニット10は、マクロブロック、すなわち、n=m=2などによるn×m個のブロックからなる矩形状などの複数のブロックを含むブロックを利用する。この実施例では、各ブロックをマクロブロックに格納するn個のキャッシュ要素142が、好ましくは、画素値をパラレルに出力するよう構成される。典型的には、マクロブロックは、領域20又は免除されたブロックのサイズより小さい。例えば、4×4のブロック領域と、2×2のブロックマクロブロックが利用されてもよい。
【0030】
図3は、このためのキャッシュ要素の実現形態の一例を示す。キャッシュ要素は、アドレスタグメモリ30と、アドレス入力31と、複数のアドレス比較器32と、データメモリ34とを有する。さらに、複数のキャッシュ要素により共有可能なラインカウンタ36が示される。動作について、データメモリ34は、あるブロックからの画素データを格納する。アドレスタグメモリは、そこからデータが格納されるブロックのx−yブロックアドレスを格納する処理ユニット10(図示せず)は、あるマクロブロックのx−yアドレスをアドレス入力31に適用する。比較器32は、処理ユニット10(図示せず)からのx−yアドレスとアドレスタグメモリ30からのアドレスとを比較し、これにより、各比較器32は、アドレスタグメモリ30がアドレスマクロブロックに含まれるある行のブロックの各ブロックを含むかチェックする。すなわち、第1比較器は、アドレスタグメモリ30からのアドレスA=(Ax,Ay)が、処理ユニット10からのマクロブロックのアドレスB=(Bx,By)に等しいかチェックする。第2比較器は、AxがBx+dとAy=Byに等しいか(ただし、dはブロックのxの幅である)チェックする。あるマクロブロックがn×m個のブロックを含むとき、AxがBx+i*dに等しいかチェックするn個の比較器がある。ここでは、各比較器が、0からn−1までの各整数iの値についてチェックする。
【0031】
比較器32は、選択器144(図示せず)に接続される出力を有する。選択器144は、n個のキャッシュ要素のデータメモリ34からの画素データをパラレルに出力するよう構成される。選択器144は、このためにn個の出力を有する。各比較器32は、各出力に対応し、比較器32がアドレスの一致を検出する場合、対応する出力においてデータメモリ34からのデータを選択器に出力させる。ラインカウンタ36は、処理ユニット10のアドレス指定処理により開始され、y−アドレスをカウントアップする。ラインカウンタ36は、これらy−アドレスをデータメモリ34に供給し、マクロブロックアドレスに応答して、データメモリに選択器144を介し当該ブロックの連続するラインに対する画素データを連続的に処理ユニット10に出力させる。
【0032】
n×mのマクロブロックの高さmが1より大きい場合、y−アドレスはカウント中にブロック境界とクロスする。この場合、ラインカウンタ36はまた、好ましくは、ブロックのy−アドレスのサブマクロブロック部分を供給するため、比較器32に接続される出力を有する。ラインアドレスがブロック境界をクロスするとき、異なるキャッシュ要素が選択され、垂直方向に連続するブロックからの画素データが選択器144を介し出力される。マクロブロック内の各ブロックのアドレス指定中、通常の置換を免除されているブロックから免除されていないブロックに、又はその反対のアドレス指定がクロスする可能性があるということが理解されるべきである。これは、同時にパラレルに出力される所与のyアドレス値に対する画素データのライン内、又は1つのy−アドレス値の1つのラインから他のラインへの遷移中に行われるかもしれない。これは、マクロブロックに対するキャッシュミス又は部分的なキャッシュミスを引き起こすかもしれない。選択器144の出力に対応する比較器の何れもが応答しないとき、このことがキャッシュコントローラ140に通知される。これは、あるマクロブロック内のブロックがキャッシュメモリに存在しないことを示す。キャッシュコントローラ140は、メインメモリ12から関連するブロックをフェッチし、キャッシュ要素142(免除されているマクロブロック内のブロックを格納するキャッシュ要素)を選択し、当該ブロックの画素データを選択されたキャッシュ要素142のデータメモリ34に、そしてそれのx−yブロックアドレスを当該キャッシュ要素142のアドレスタグメモリ30に書き込むことによって応答する。必要に応じて、キャッシュコントローラ140は、このようにして複数のブロックをフェッチする。キャッシュコントローラ140は、処理ユニット10にすべての必要なブロックが利用可能になるまで待機させる。
【0033】
予めのフェッチ処理が、免除された領域20のロックされたブロックについて用いられる場合、当該ブロックにはキャッシュミスは発生しない。しかしながら、マクロブロックが当該領域からのブロックを含む場合であっても、マクロブロックが領域20の境界を超える場合、キャッシュミスが発生するかもしれない。
【0034】
さらなる実施例では、キャッシュコントローラは、アドレス指定されたマクロブロック内のより大きなyアドレスに対するブロックがキャッシュ要素において利用可能であるか予めチェックするよう構成される。そうでない場合、より小さいy−アドレスのブロックからの画素データが処理ユニット10に出力されている間、キャッシュコントローラ140は任意的に上記ブロックを予めフェッチする。
【0035】
効果的には、通常の置換を免除されるブロックが連続しているという知識が利用される(当該領域外のキャッシュされているブロックは、連続している必要はない)。一実施例では、所定のキャッシュ要素142のセットが、領域20からのブロックを格納するのに利用される。
【0036】
図4は、アクティブ領域のブロックに対するコアキャッシュ40と、当該領域外のブロックに対する周辺キャッシュ42の2つのキャッシュメモリ40と42がこのために利用される実施例を示す。アクティブ領域20からのブロックがシステマティックにコアキャッシュ40に維持されることが保証されているため、それらはまたシステマティックに格納されてもよい。この結果、コアキャッシュ40の構成を簡単化することができる。アクティブ領域20のブロック列毎に1つのキャッシュ要素で十分である。すなわち、連続するy値によるブロックに対する個々のキャッシュ要素は必要でない。当該領域がhの高さのブロックである場合、コアキャッシュ40のキャッシュ要素のデータメモリ34は、コアキャッシュ40内の各y−アドレスに対してh倍以下の画素値のラインしか有しない。このことは、より少ないアドレス比較器で十分であることを意味する。
【0037】
図5は、このためのキャッシュ要素を示す。本実施例では、アドレス入力は、1つのライン内のブロックを選択するため、処理ユニット10からのy−アドレスのブロックアドレス部分の一部をデータメモリ34へのアドレスとして適用するための部分50を有する。好ましくは、領域20からの各ラインが、それのyアドレスのデータメモリのライン数の法(modulo)の最下位の剰余に対応するデータメモリのyアドレスに格納される。すなわち、領域20の位置に応じて、当該領域の先頭に関する所与のy−オフセットにあるラインが、常にそれらの絶対y−アドレスに従って異なるメモリ位置に格納されるかもしれない。
【0038】
アドレス比較の回数は、領域20からのブロック列のキャッシュ要素142への所定の循環的割当てを利用することによって、さらに減らすことができる。この場合、1回のみの比較(マクロブロックが領域と重複しているか検出するため)と減算(当該ブロックのxアドレスを循環的割当てにおけるある列のキャッシュ要素のアドレスに変換するため)が、コアキャッシュ40のキャッシュ要素の何れがブロックをアドレス指定するのに利用されるべきか判断するのに必要とされる。
【0039】
上述されたように、別個のコアキャッシュ40と周辺キャッシュ42の利用は、新たな領域からのブロックが、処理ユニット10が当該領域を移動するよう通知した後、コアキャッシュ40に存在する必要があることを意味する。これらのブロックは、可能な限り周辺キャッシュ42からコピーされてもよいが、好ましくは、当該ブロックが周辺キャッシュ42に存在するか否かに関係なく、コアキャッシュ40に存在しない新たな領域からのすべてのブロックがメインメモリ12からフェッチされる。好ましくは、これらのブロックが予めフェッチされる。この場合、キャッシュ管理ユニット140は、次の領域22がどのようなものとなるか予測し、あるいは、処理ユニット10は、新たな領域への移動を実際に通知する前に、新たな領域22がどのようなものになるか予め通知する。所定のステップだけ水平方向にスライドする領域の場合、この予測はシンプルであるが、もちろん、より複雑な移動パターンが使用されてもよい。
【0040】
図6は、プリフェッチバッファ60がコアキャッシュ40とメインメモリ12との間に(キャッシュコントローラ140を介し)も受けられる実施例を示す。本実施例では、キャッシュコントローラは、メインメモリ12から予測された以降の領域22の新たなブロックを予めフェッチし、これらのブロックをプリフェッチバッファ60に格納するよう構成される。処理ユニット10からウィンドウを移動するための信号を受信すると、キャッシュコントローラ140は、予めフェッチされたブロックをプリフェッチバッファ60からコアキャッシュ40の選択されたキャッシュ位置にコピーさせる。本実施例は、予めのフェッチ処理が通常のキャッシュ処理との干渉を引き起こさないという効果を有する。
【0041】
他の実施例では、領域20について厳密に必要なものより多くのキャッシュ位置が、コアキャッシュ40に設けられる。本実施例では、以降の領域22の新たなブロックが、現在領域20については使用されないキャッシュ位置に直接的に予めフェッチされる。ある実施例では、キャッシュコントローラ140は、これらのブロックがコアキャッシュの残りから予めフェッチされるキャッシュ要素を分離し、これにより、当該キャッシュ要素への書き込みは、メイン処理ユニット10による読み出しとは独立に進行することが可能である。
【0042】
予めフェッチが行われないとき、周辺キャッシュ42にある新たな領域20からのこれらのブロックは、好ましくは、コアキャッシュ40に移動され、任意的にはそれらがメイン処理ユニット10によりアドレス指定されるときに限って、その他のブロックがメインメモリ12からフェッチされる。
【0043】
ある実施例では、コアキャッシュ40と周辺キャッシュ42は、位置のブロックに対するデータ値の出力中、異なるレベルの並列化をサポートするよう構成されるかもしれない。
【0044】
図6aは、コアキャッシュ40がブロックの異なるy−アドレスを有する複数のラインセグメントに対するデータ値をパラレルに出力するよう構成されるこのタイプの実施例の一例を示す。対照的に、周辺キャッシュ42は、1つのラインセグメントが一度にアドレス指定されることを可能にするキャッシュ要素を含む。コアキャッシュ40は、パラレルにデータ処理ユニット10に接続される第1出力を有する。コアキャッシュ40と周辺キャッシュ42の組み合わせがまた、処理ユニット10に接続される。
【0045】
動作について、領域20の内部に完全にあるブロックがアドレス指定されると、コアキャッシュは、当該ブロックのライン上の位置に対するデータ値を処理ユニットにパラレルに出力する。領域20の境界を超えて延長するブロック、又は当該領域20の外部にあるブロックがアドレス指定されると、データ処理ユニット10は、データ処理ユニットが当該ブロックからの1つのラインの位置に対するものであって、少なくとも部分的に周辺キャッシュ42からのデータ値を一度に受け付けるモードにスイッチする(ここで使用される受付とは、データ値と参照値のパラレルな比較や他の処理演算のパラレルな実行などに関するものである)。これは、大部分の時間において発生する、コアキャッシュ40内のブロックがアドレス指定されるとき、高速のパラレル処理が利用可能であるという効果を有する。周辺ブロックがアドレス指定されると、低速モードが利用される。ブロックアドレスとキャッシュされた領域20との比較の結果として、又は遠くの動きベクトルが検討される場合の動きベクトルの検索中など、処理ユニット10により内部的に、モード切替がアドレッシングユニット(図7)によりトリガーすることが可能である。
【0046】
画像処理中、当該ブロックが領域20の内部にあるとき、処理ユニット10は画素ブロック単位によりデータ値を読み込む。各画素ブロックは複数のラインセグメントを有し、連続するラインセグメントは、「By」個の連続するy−アドレスを有し、各ラインセグメントは連続するx−アドレスを有する「Bx」個の位置を有する。処理を高速化するため、アドレス指定されたブロックからの複数の位置に対するデータ値を処理ユニット10にパラレルに出力するため、好ましくは、画像メモリ14が構成される。好ましくは、画像メモリが、連続するyアドレスを有する複数のラインセグメントの位置からのすべてのデータ値をパラレルに出力するよう構成される。これは、大量のパラレルアクセスを意味する。例えば、16×16の位置ブロックが使用され、4つのラインがパラレルに出力される必要がある場合、64のデータ値がパラレルに出力される必要がある。
【0047】
図7は、この大量並列化をサポートするメモリ構成を示す。メモリは、アドレッシングユニット70と、複数のラインユニット72と、出力スイッチ74とを有する。アドレッシングユニット70は、処理ユニット10(図示せず)に接続されるアドレス入力71を有する。出力スイッチ74は、それぞれが画像の画素ブロックのラインセグメントに対応する位置からのBxのデータ値のパラレルな出力のための複数のラインセグメント出力76を有する。各ラインユニット72(1つのみがより詳細に示される)は、複数のメモリバンク720とバンクスイッチ722とを有する。バンク720は、アドレッシングユニット70に接続されるアドレス入力を有する。バンクスイッチ722は、メモリバンク720のデータ出力に接続されるデータ入力と、アドレッシングユニット70に接続される制御入力とを有する。出力スイッチ74は、ラインユニット72のバンクスイッチ722のデータ出力に接続されるデータ入力と、アドレッシング回路70に接続される制御入力とを有する。
【0048】
各メモリバンク720は、複数のアドレス指定可能な位置を有し、各位置は、画像の異なる画素位置に対する複数のG個のデータ値(G=4など、G>1)を格納するよう構成される。各ラインユニット72は複数のS個のバンク(S>1)を有し、これにより、これらのバンクは一緒になって、異なる画素に対するG*S個のデータ値を出力する。ラインスイッチ722が、アドレッシング回路の制御の下、メモリバンク720からのG*Sのデータ値から選択されたBx(Bx=あるラインセグメントの画素位置数)個のデータ値(Bx<G*S)を出力するよう構成される。出力スイッチ74は、ラインスイッチ722からのデータ値をラインセグメント出力76に出力するよう構成され、アドレッシングユニット70は、何れのラインスイッチ722が何れのラインセグメント出力76に接続されるか制御する。ラインユニット72はN個ある(N=4など)。典型的には、ラインユニットの個数Nは、セグメント出力76の個数に等しい。
【0049】
処理中、キャッシュコントローラ140は、ラインユニット72のメモリバンク720にデータ値を書き込むか、あるいは、アドレッシングユニット70がこのためにキャッシュ管理ユニットとして利用される。書き込みは、初期的に、又は領域20の位置が変更されると行われる。この場合、キャッシュ管理ユニットとして動作するアドレッシングユニット70は、メインメモリ12からデータ値をフェッチし、フェッチされたデータ値をメモリバンク720の選択されたアドレスと共に、選択されたラインユニット72の選択されたメモリバンク720に適用する。
【0050】
キャッシュコントローラ140又はアドレッシングユニット70によるキャッシュ管理は、各ラインユニット72がそれのメモリバンク720に格納され、各y−アドレス又はy−アドレスセットを有する位置に対するデータ値は、当該ラインユニット72に一意的であり、いくつかの連続するy−アドレスに対するデータ値がラインユニットの組み合わせに格納されるように構成される。すなわち、例えば、第1ラインユニット72は、yアドレスがyとなる位置に対するデータ値を格納し、第2ラインユニット72は、yアドレスがy+1となる位置に対するデータ値を格納するなどである。各ラインユニットがy−アドレスセットに対するデータ値を格納する場合、当該セットは、あるセット内のyの値の間の距離が各セットに対して同一となり、ラインユニット72の個数Nの整数倍に等しくなるようにインタリーブされる。例えば、第1ラインユニット72は、yアドレスがy、y+N、y+2N等となる位置に対するデータ値を格納し、第2ラインユニット72は、y−アドレスがy+1、y+N+1、y+2N+1等となる位置に対するデータ値を格納するなどである。
【0051】
各y−アドレスについて、ラインユニット72は、「w」個の連続するx−アドレスによる複数の位置に対するデータ値を格納する。ただし、連続するxアドレスの個数wは、画素ブロックのラインセグメントサイズBxを超え(w>Bx)、またラインユニット72のバンクがパラレルに出力可能な個数G*Sを超える(w>G*S)。テーブルIは、異なるx−アドレスを有するデータ値のラインユニット72のメモリバンク720への割当ての一例を示す。この例では、ラインユニット72のメモリバンク720の個数Sは5とされ(S=5)、メモリバンク720の各位置のデータ値の個数Gは4とされる(G=4)。データ値が格納された連続するx−アドレスの個数wは、本例では32とされる(w=32)。テーブルの各列は、メモリバンク720に対応する。テーブルの各フィールド(第1行のフィールドを除いて)は、当該フィールドの列に対応するメモリバンクの1つのメモリ位置に格納されているx−アドレスを表す。
【0052】
【表1】

x−アドレスの割当ては静的なものではない。処理ユニット10が処理中に画像のあるラインに沿って右方向に進捗すると、以前のアドレスの右側に新たなx−アドレスに対するデータ値がロードされ、左側のデータ値を以前に格納したバンクに格納される。テーブルIIは、異なるx−アドレスを有するデータ値のメモリバンク720への割当てが経時的にどのように進化するかの一例を示す。
【0053】
【表2】

バンク0の1つのメモリ位置に対するデータ値(当初は、x−アドレスx、x+1、x+2、x+3に対する)が、新たなx−アドレス(x−アドレスx+32、x+33、x+34、x+35)、すなわち、当初のxアドレスよりw(w=32など)だけ大きなx−アドレスに対するデータ値と置換されたことに留意すべきである。同様のことがバンク1の1つのメモリ位置についてなされるが、その他のバンクは不変とされる。処理がラインに沿って進められると、データ値がバンク2と3において置換され、その後にバンク4と0などのように循環的に行われる。データ値が占有するバンクのメモリ位置は常に同一に維持されるが、格納されているデータ値の画素位置のアドレスは変更される。
【0054】
テーブルIIIは、複数のy−アドレスのセットが各メモリバンク720に格納される実施例を示す。
【0055】
【表3】

バンク0は、yアドレスy、y+N、y+2Nなどに対するデータ値を格納することに留意すべきである。バンク1は、y−アドレスy+1、y+N+1、y+2N+1などに対するデータ値を格納する。各y−アドレスに対して、連続する異なるx−アドレスに対するデータ値が、前述の表に示されるように、メモリバンク720に循環的に分散される。
【0056】
テーブルIとIIの場合と同様に、メモリ位置のデータ値のアドレスは静的ではない。このことは、テーブルIVに示されている。
【0057】
【表4】

本実施例では、所与のy−アドレスを有するデータ値に対して用いられる位置セットは、同じままであり、あるx−アドレスとyアドレスを有する位置に対する各データ値は、同一のy−アドレスとxアドレスx−wを有するデータ値を置換する。さらに、テーブルIII及びIVの実施例に示されるように、異なるYアドレスを有する位置に対するデータ値のセットの間にはギャップはない。本実施例のメモリバンク720では、xyアドレスx,y+Nを有する位置に対するデータ値が、多数のxアドレスに対するデータ値がメモリバンク720に同時に存在する場合、xyアドレスx+w,yを有する位置に対するデータ値により占有される位置に格納される。
【0058】
この格納スキームは、大量のパラレルアクセスと画素位置のウィンドウに対するデータ値の回転する置換の組み合わせを容易にするよう構成される。ウィンドウが移動すると、ウィンドウの外側の画素位置に対するデータ値は、ウィンドウの内側の画素位置に対するデータ値により置換される。
【0059】
アドレッシングユニット70は、画像内の画素位置のブロックからのデータ値が、処理ユニット10(図示せず)にパラレルに出力されることを保証する。ブロックのxy−アドレスを受け取ると、アドレッシングユニット70は、当該ブロックのラインセグメントに対するデータ値が、異なるメモリバンク720から読み込まれるメモリバンク内アドレスを計算する。アドレッシングユニット70は、これらのアドレスをメモリバンク720に適用する。さらに、アドレッシングユニット70は、メモリバンク720の何れがブロックなのラインセグメントの何れの位置からのデータ値を格納するか計算する。アドレッシングユニット70は、ラインスイッチの出力の各部分が、受け付けた当該ブロックのxy−アドレスに対して、各自の所定のx−オフセットにおける位置に対するデータ値を出力することを保証するため、対応する制御信号をラインスイッチ722に供給する。最終的に、アドレッシングユニット70は、何れのラインユニット72が何れのラインセグメントを出力するか計算する。アドレッシングユニット70は、各セグメント出力76が受け付けたブロックのxy−アドレスに対して、各自の所定のy−オフセットにおけるラインセグメントに対するデータ値を出力することを保証するため、対応する制御信号を出力スイッチ74に供給する。
【0060】
アドレス指定の実施例のより詳細な具体例が説明される。本例では、アドレッシングユニット70に供給されるxy−アドレスは、Ax Ayにより示される。ここで、Axはx−アドレス部分であり、Ayはy−アドレス部分である。本実施例では、ウィンドウコーナーアドレスWx、Wyからスタートし、水平方向にw個の画素位置だけ連続する画素位置のウィンドウに対するデータ値を格納する。アドレッシングユニット70は、ウィンドウのコーナーアドレスのデータ値が格納されるメモリバンク720のメモリ位置MとバンクBを示すオフセットカウンタ値B,Mを維持する。さらに、アドレッシングユニットは、ウィンドウの連続するラインの最も左の位置からのデータ値を格納するメモリバンク720のメモリ位置のアドレスZ間のオフセットであるDに関する情報を表す(ここで、Zは複合アドレスZ=q+r*Sであり、qはメモリ位置を含むメモリバンク720のシーケンス番号であり、rは当該バンクのアドレスである)。テーブルIIとIVの例では、D=8となる。
【0061】
この情報から、アドレッシングユニット20は、(a)アドレス指定されたブロックの左上のコーナーに対するデータ値が格納されるメモリバンク720のメモリ位置内の位置Iと、(b)アドレス指定されたブロックの左上のコーナーに対するデータ値が格納されるバンクのシーケンス番号Cと、(c)アドレス指定されたブロックの左上のコーナーに対するデータ値が格納されるメモリバンク720内のアドレスRとを計算する。I、C及びRは、アドレス指定されたブロックの左上のコーナーに対するデータ値が格納されるメモリバンク720内のアドレスとメモリバンク720を示す位置の値Pに関して表すことが可能である。
【0062】
P=B+Ax−Wx+D*(Ay−Wy)
位置の値Pは、
I=P mod G
に従って、メモリバンク720のメモリ位置内の位置Iを規定するのに利用可能である。(ここで、「mod」は、モジュロ(法)関数を示し、すなわち、Gで除した後のPの剰余である。)同様に、メモリバンク720のシーケンス番号Cは、
C=[(P−I)/G]mod S
に従って規定することができる。
【0063】
メモリバンク720内のアドレスRは、
R=[(P−C*G−I)/(S*G)]
に従って規定することができる。
【0064】
アドレッシングユニット70は、この情報を以下のように利用する。各ラインユニット72において、アドレッシングユニットは、通常、C以上のシーケンス番号を有するメモリバンク720をアドレスRによりアドレス指定し、(存在する場合)C未満のシーケンス番号を有するメモリバンクをアドレスR+1によりアドレス指定する。アドレッシングユニットは、入力から出力までデータ値の割当てをG*C+Iだけ回転するようラインスイッチ722を制御する。すなわち、出力にシーケンス番号j=0,1,...,Bx−1が割り当てられる場合、ラインスイッチ722は、シーケンス番号jによるそれの出力に、
K=(I+j)mod G
に従ってメモリバンク720内の位置Kからのデータ値を出力させる。メモリバンク720は、
L=(I+j−K)/G
に従ってシーケンス番号Lによりデータ値が選択されるメモリバンクである。
【0065】
最後に、アドレッシングユニット70は、何れのラインユニット72が何れのラインセグメント出力76に接続されるか判断するため、出力スイッチ74を制御する。ラインセグメント出力76にシーケンス番号i=0,1,...,N−1が割り当てられ、ラインユニット72にシーケンス番号i’=0,...,N−1が割り当てられる場合、出力スイッチ722は、シーケンス番号iを有するそれのラインセグメント出力に、
i’=[i+Ay−Wy]mod N
に従ってシーケンス番号i’を有するラインユニット72からのラインセグメントを出力させる。
【0066】
N個のセグメント出力76が、少なくとも垂直ブロックサイズByに等しい場合(N≧By)、位置ブロックのすべてのデータ値がパラレルに出力される。垂直ブロックサイズがより大きい場合(By>N)、いくつかの連続する時間サイクルが当該ブロックの連続する部分に対するデータ値を連続的に出力するのに必要とされる。この場合、アドレッシングユニット70は、連続するサブブロックから読み出し、N*Bx個の位置のサブブロックを効果的に出力し、連続するサブブロックがxy−アドレス(Ax,Ay)、(Ax,Ay+N),(Ax,Ay+2N)などにおいてスタートすることにより、あるアドレスに応答する。
【0067】
ここまで、メモリの構成が、ブロックアドレスに応答して画像内の画素位置の2次元ブロックから大量のデータ値をパラレルに出力し、同時にウィンドウがスライドするとき、データ値の過剰なロード処理なしに画素位置のスライドするウィンドウからのデータ値の格納を受け入れることを可能にする。このブロックアドレスは、何れかの画素位置に配置することが可能である。
【0068】
データ値がパラレルに出力されるラインセグメントと少なくとも同程度のラインユニット72(N個のラインユニット)が存在することに留意することが重要である。この結果、異なるy−アドレスを有するN個のラインセグメントからのデータ値は、パラレルに出力されるかもしれない。
【0069】
各ラインユニットは、パラレルに出力されるラインセグメントからのデータ値の個数を出力するのに厳密に必要なものより、少なくとも1だけ多いメモリバンク720を有する((S+1)*G≧Bx)。これは、メモリバンク720の各メモリ位置のデータ値の個数Gの整数倍となるx−アドレスを有する位置だけでなく、任意の画素位置においてラインセグメントをスタートさせることを可能にする。ラインセグメントのスタートx−アドレスがこのような整数倍である場合、これらのメモリバンク720のBx/Gのみがラインユニット72において読み出されるだけでよく、しかしながら、アドレスが揃っていない場合、1+Bx/G個のメモリバンク720がラインユニット72において読み出される必要がある。これらのメモリバンク720の2つからのデータ値のみが、部分的に処理ユニット10に出力される。
【0070】
各ラインユニット72は、好ましくは、N(ラインユニット72の個数)アドレスだけ離れたy−アドレスの自らのラインセットからのデータ値を格納する。連続するラインユニットは、連続する中間のラインからのデータ値を格納する。これは、固定されたy−アドレス値又はいあるベース距離の倍数だけでなく、任意のy−アドレス値Wyを有するブロックを抽出することを可能にする。
【0071】
画像メモリの実施例が説明されたが、多数の代替が可能であるということに留意すべきである。例えば、一実施例では、メモリバンクの異なるラインセグメントに対するデータ値の間にギャップが存在するかもしれない。言い換えると、本例ではオフセットDは、データ値が格納されているウィンドウのx−アドレスの個数wに等しくされているが、いくつかの実施例では、D>wとなってもよい。他の例として、異なるy−アドレスのラインセグメントが、メモリバンク720の任意の位置に格納されてもよく、何れかのアドレス変換機構(キャッシュメモリにおいて使用されるタイプのものなど)が、所望の位置をアドレス指定するのに利用される。
【0072】
他の例として、本実施例では、データ値がパラレルに出力される各ラインセグメントの位置の個数Mが、水平方向のブロックサイズBxに等しくされるが、他の実施例では、この数Mは、Bx((S+1)*G≧M)より小さくてもよく、ブロックのラインセグメントの一部のみがパラレルに出力されるということが理解されるであろう。この場合、より少ない個数Sのバンクは、各ラインユニット72において利用されてもよいが、もちろん、複数のラインセグメント部分が、処理ユニット10がブロック全体からのデータ値を必要とする場合には、連続的に出力される必要がある。
【0073】
さらなる他の例として、ラインS’ユニット72のグループが同じアドレス値について使用されてもよく、それぞれが、連続するセグメントがより大きなセグメントを一緒になって構成するように、連続するx−アドレスのセグメントに対するデータ値を格納する。このような実施例の構成は、図7の構成と類似している。相違点は、ラインユニットのメモリバンク720がグループに構成され、バンクシーケンス番号が各グループにおいて包み込んでいるということである。この場合、さらなる出力スイッチが、異なるグループからの各位置にわたるラインセグメントに対するデータ値を構成するよう追加されてもよい。テーブルVは、このことを示す。
【0074】
【表5】

簡単化のため、小さなグループと少数のグループが使用されたが、実際には、より多くのより大きなグループが利用可能であるということは理解されるであろう。本実施例では、ラインスイッチ722は、2つのグループからブロックアドレスに応じてグループ上に拡がるx−アドレスの範囲を有する位置に拡がるラインセグメントになど、様々なグループからのデータ値を合成するよう構成される。
【0075】
あるいは、これは、図7に示されるような複数のメモリユニットをパラレルに設け、出力スイッチ74と処理ユニット10との間にさらなるスイッチを挿入することによって実現されるかもしれない。本実施例では、各メモリユニットは、ある範囲のx−アドレス(範囲(x..x+w−1),(x+w..x+2w−1),...など)に対するデータ値を格納する。さらなるスイッチは、異なるメモリユニットからのデータ値を異なるメモリユニットの出力からの連続するx−アドレスのラインセグメントに対するデータ値に合成する。
【0076】
さらに、異なるx−アドレスとある特定のy−アドレスを有する位置に対するデータ値がメモリバンク720の同一のメモリ位置のセットを占有し続ける実施例が説明されたが、他の実施例では、異なるy−アドレスに対するメモリ位置が循環するようにしてもよい。これは、テーブルIIIから進化したものであるが、テーブルIVと比較して異なるアドレス指定スキームによるテーブルVIに示される。
【0077】
【表6】

テーブルIIIと比較することによりわかるように、最終ラインセグメントの新たなx−アドレスに対するデータ値が(y−アドレスy+HからH個の下方のライン)、ここで最初の2つのメモリバンクの第1メモリ位置に格納される。第1ラインセグメント(y−アドレスy)の新たなx−アドレスに対するデータ値が、次のライン(y−アドレスy+1)などの古いx−アドレスについて使用された位置に格納される。
【0078】
本実施例では、アドレスブロックの第1のx−アドレスを含むバンクのシーケンス番号とバンク内の位置のアドレスを計算するための異なる方法が必要とされる。
【0079】
さらに、本例は正のx−方向への8つの画素位置のステップによるウィンドウの移動について説明されたが、任意のサイズ及び任意の方向の移動が利用されてもよいということは理解されるであろう。例えば、正のx−方向へのより大きなステップ又はより小さなステップは、単により多く又はより少ないメモリバンク720にデータ値を上書きすることを要求するにすぎない。負のx方向へのステップは、テーブルVIに示されるように、最後の位置に対するデータ値の置換を要求する。
【0080】
【表7】

y方向へのウィンドウの移動ステップは、古いy−アドレスに対するデータの置換を伴う。正のy方向への1ラインのステップの場合、これは、最も小さなyの値に対するデータ値を格納する1つのラインユニット72のメモリバンク720におけるデータ値との置換を伴う。
【0081】
テーブルVIIIは、y方向の移動の例に対するこのタイプの置換を示す。本例では、まずHは、メモリバンクに格納されるウィンドウのライン数である。
【0082】
【表8】

より大きなステップについては、古いy−アドレスに対するデータ値が、より多くのラインユニット72において置換される。可能な移動ステップは、xとy方向へのステップに限定されるものではない。斜めのステップが、xとyステップの組み合わせとして実現可能である。
【0083】
これらのデータ値は、典型的には、画像全体を格納するメインメモリ12(図示せず)からフェッチされる。このため、ラインユニットには、ラインユニットに格納される必要のあるラインセグメントのアドレスに与えられる関連するデータ値をフェッチするためのメインメモリとの接続が設けられるかもしれない。ある実施例では、メインメモリはまた、各々がNラインだけ離れた各y−アドレスセットに対するラインを格納する複数のユニットに構成される。この場合、各ラインユニット72は、メインメモリの各ユニットに接続されるかもしれない。
【0084】
図7の画像メモリは、様々な方法により図1のキャッシュ構成と組み合わされるかもしれないということが理解されるべきである。最もシンプルな実現形態では、図7のメモリユニットが、図7に示されるタイプである必要はないが、領域20のコアキャッシュ及び領域20を包囲する位置に対する任意のタイプの周辺キャッシュメモリとして利用される。この周辺キャッシュメモリが複数のラインセグメントに対するデータ値をパラレルに出力することができないタイプのものである場合、コアキャッシュのパフォーマンスは、アドレスブロックがコアキャッシュと周辺キャッシュの両方の位置に拡がる場合、コアキャッシュから1回に1つのラインを利用することによって、単に劣化される。
【0085】
他の実施例では、バンク内のアドレスは、適応可能なx及び/又はyアドレスと関連付けされるかもしれない。本実施例では、メモリユニット(アドレッシングユニット70又はメモリバンク720など)は、受け付けた各アドレスを利用して、何れかの関連付けされたアドレスにおいて、当該アドレスに対するデータ値がメモリバンク720に格納されるかチェックする。ミスの場合、データ値はメインメモリ12からフェッチされ、そうでない場合には、データ値は関連付けされたアドレスからフェッチされる。これは、例えば、異なるラインユニット72に対して独立に、又は同じラインユニット72の中の異なるメモリバンク720に対して独立に、データのy−アドレス部分にのみ適用されてもよい。この場合、ラインユニット72に格納されているラインセグメントのy−アドレス間より大きなギャップが存在するかもしれないということに留意すべきである。典型的には、このギャップはNの整数倍であるが、他のギャップもまた利用可能である。このタイプのキャッシュ処理は、メモリバンク720の異なる位置が異なるラインセグメント(x−アドレスの異なる範囲)に対するデータ値を格納するようx−アドレスに適用されてもよい。
【0086】
他の実施例では、図7に示されるようないくつかのメモリ構成がキャッシュ要素としてパラレルに利用され、その後、さらなる出力スイッチが、メモリ構成のそれぞれからの信号からのラインセグメントを結合する。本実施例では、メモリ構成は、キャッシュメモリに対する従来のアソシエイティブマッピング(associative mapping)技術を利用して、画像内の各サブウィンドウと関連付けされてもよい。あるブロックがアドレス指定されると、関連するデータを格納するこれらのメモリ構成が起動され、当該ブロックに対するデータ値が、起動されたメモリ構成からパラレルに出力される。
【0087】
これら複数のメモリ構成にないデータ値を有するブロックがアドレス指定されると、ミスしたデータ値がメインメモリ12からフェッチされ、これらの構成の1つに格納され、以前のデータ値を置換する。本実施例では、アクティブ領域20からのデータ値を格納する選択されたメモリ構成が、好ましくは、置換から免除される。
【0088】
他の実施例では、図1のすべてのキャッシュ要素が、各ラインユニット72として実現される。本実施例のラインユニットでは、テーブルVに示されるタイプのデータ値分散スキームが利用可能であり、ラインユニット72には、共通のラインスイッチ722に接続されるそれらの出力を有するラインユニットのグループにアソシエイティブに割り当てされるかもしれない。好ましくは、ラインユニット72の第1のサブセットが、アクティブ領域20に対するすべてのデータ値を格納し、ラインユニット72の第2のサブセットが、アクティブ領域20の周囲の選択されたサブウィンドウに対するデータ値を格納する。第2のサブセットのサブウィンドウのアドレスは、図1に関して説明されるように置換が行われる。この結果、異なるラインユニットに格納されるサブウィンドウは、所定の空間的関係を有しない。
【符号の説明】
【0089】
10 処理ユニット
12 メインメモリ
14 キャッシュメモリユニット
140 キャッシュコントローラ
144 出力セレクタ

【特許請求の範囲】
【請求項1】
第1及び第2次元における複数の位置に対して拡がるブロック及びアレイについて、多次元の位置の前記アレイにおける位置の前記ブロックに対するデータ値のパラレルな抽出のための方法であって、
前記第1次元に沿って拡がるW個の連続する位置を有するラインセグメントを有する前記アレイにおける位置のウィンドウを規定するステップと、
前記ウィンドウにおける連続する位置の個数Wより小さい積S*Gについて、前記第1次元において連続する複数のG個の各位置に対するデータ値を各々が格納するアドレス指定可能な位置を各々が有する複数のS個のメモリバンクを各々が有する複数のラインユニットを提供するステップと、
前記メモリバンクの前記ウィンドウにおけるラインセグメントからのデータ値であって、前記ラインセグメントに対するデータ値が格納される前記ラインユニットのS個のメモリバンク上にS個のグループの循環により循環的に分散され、格納される各ラインセグメントのG個の位置の連続するグループに対するデータ値であって、前記ラインユニットのそれぞれに格納される前記第2次元について連続的な各ラインセグメントに対するデータ値を格納するステップと、
前記ブロックの2次元アドレスを受け付けるステップと、
異なる連続するラインセグメントに対するデータ値を出力するため、データ値を格納する複数のメモリバンクが前記ラインセグメント内でパラレルにアドレス指定され、複数のラインユニットをパラレルにアドレス指定するステップと、
前記アドレス指定されたメモリバンクによって出力されるデータ値から、前記ラインセグメントに対するデータ値を選択するステップと、
を有することを特徴とする方法。
【請求項2】
請求項1記載の方法であって、
各出力が、前記ブロックのアドレスの第1の次元に関する所定のオフセットによる位置に対するデータ値を出力するように、前記ラインセグメントに対するデータ値が格納される前記メモリバンクにおけるスタートアドレスに対する前記ブロックのアドレスに応じて、前記アドレス指定されたメモリバンクからのデータ値を各自の出力に送るステップと、
各出力が、前記ブロックのアドレスの第2の次元に関する所定のオフセットによる位置に対するデータ値を出力するように、前記第2の次元の最も小さなアドレスを有するデータ値が格納されるラインユニットのシーケンス番号に対する前記ブロックのアドレスに応じて、各自のラインユニットからのデータ値を前記各自の出力に送るステップと、
を有することを特徴とする方法。
【請求項3】
請求項2記載の方法であって、
前記移動されたウィンドウの位置の一部が、前記当初のウィンドウの位置に一致するように、前記アレイのおける前記ウィンドウの位置を移動して、前記ウィンドウを再規定するステップと、
前記ウィンドウが連続的に移動されるとき、前記ウィンドウに対するデータ値のスタートアドレスが、前記ラインユニットのメモリバンクを循環するように、前記メモリバンクにおいて、前記移動されたウィンドウに属しない位置に対するデータ値を前記移動されたウィンドウに属するが、前記当初のウィンドウには属しない位置に対するデータ値と置換するステップと、
前記規定されたウィンドウに関する所定の相対位置における位置に対するデータ値が格納されるメモリバンク及び/又はラインユニットを示す情報を維持するステップと、
を有することを特徴とする方法。
【請求項4】
第1及び第2次元に拡がる多次元のデータ値のアレイを処理するデータ処理装置であって、
各ラインユニットが、複数のG個のデータ値を各位置が格納するアドレス指定可能な位置を各メモリバンクが有する複数のS個の各自のメモリバンクを有する複数のラインユニットと、
前記ラインユニットのメモリバンクに前記アレイからのデータ値を書き込むよう構成されるキャッシュ管理ユニットであって、前記アレイにおける前記第1方向に沿って拡がる各自のラインに沿った位置に対する、又はこのようなラインの各自のインタリーブされたセットに対するデータ値が、各自のラインユニットに書き込まれ、前記メモリバンクの各自のアドレス指定可能な位置が、それぞれ前記ラインに沿ったG個の連続する位置の各グループに対するデータ値を格納し、連続するグループが、前記グループが属するラインに対するデータ値を格納する前記ラインユニットにおけるメモリバンク上に循環的に繰り返される方法により分散され、前記キャッシュ管理ユニットが、前記アレイにおける位置のスライドウィンドウに対するデータ値を維持するよう構成され、前記ウィンドウの移動により前記ウィンドウから離脱した古い位置に対するデータ値は、前記メモリバンクにおいて、前記古い位置として同一のライン又はインタリーブされたラインのセットからの前記ウィンドウにおける新たなデータ値と置換されるキャッシュ管理ユニットと、
前記ラインユニットに接続される抽出回路であって、当該抽出回路は、前記アレイにおける位置のブロックのアドレスを受け付けるアドレス入力と、前記ブロックにおける位置に対するデータ値をパラレルに出力する出力とを有し、前記ブロックは、前記第1次元に沿った積G*Sより小さなW個の連続する位置をそれぞれ有するラインセグメントを有し、前記ブロックのアドレスは、グループ内解像度を有し、当該抽出ユニットは、複数のラインユニットから前記ラインセグメントのそれぞれに対するブロックからのデータ値をパラレルに抽出し、前記ラインユニットのメモリバンクから前記ラインセグメントからの少なくとも1つの位置を有する各グループに対する前記ブロックからのデータ値をパラレルに抽出するよう構成され、当該抽出ユニットは、あるグループの位置が前記ブロックと部分的に重複する場合、前記あるグループ内のデータ値のサブセットを出力のため選択し、前記抽出されたデータ値をパラレルに出力するよう構成される抽出回路と、
を有することを特徴とする装置。
【請求項5】
請求項4記載のデータ処理装置であって、
前記抽出回路は、
前記ブロックに対する各自の所定の位置における位置に対するデータ値を前記出力の所定の各出力に送るよう構成されるスイッチ回路と、
前記抽出回路のアドレス入力に接続されるブロックアドレス入力と、前記ラインユニットに接続されるアドレス出力と、前記スイッチ回路に接続される制御出力とを有し、前記ウィンドウにおける所定の位置に対するデータ値が格納されるメモリアドレスの循環的オフセットを表す情報を維持し、該情報と前記所定の位置に関する前記アドレス指定されたブロックの相対位置に応じて、アドレスを選択されたメモリブロックに供給するよう構成されるアドレッシングユニットと、
を有することを特徴とする装置。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図6a】
image rotate

【図7】
image rotate


【公開番号】特開2011−154709(P2011−154709A)
【公開日】平成23年8月11日(2011.8.11)
【国際特許分類】
【出願番号】特願2011−66486(P2011−66486)
【出願日】平成23年3月24日(2011.3.24)
【分割の表示】特願2007−509048(P2007−509048)の分割
【原出願日】平成17年4月21日(2005.4.21)
【出願人】(511030493)
【Fターム(参考)】