(57)【特許請求の範囲】
【請求項１】
複数の入力データと前記複数の入力データそれぞれの属性情報とを受信し、前記属性情報に応じた順序で出力する制御手段と、
前記制御手段によって出力された入力データと属性情報とに対して、該属性情報に係る過去の演算結果を参照して演算処理を行う演算手段と、
前記演算手段による過去の演算結果を内部に保持が可能な保持手段とを有し、
前記制御手段は、前記複数の入力データのそれぞれの属性情報に係る過去の演算結果が前記保持手段に保持されているか否かに応じて、前記複数の入力データを出力する順序を制御することを特徴とするデータ処理装置。
【請求項２】
前記制御手段は、前記複数の入力データのうち、属性情報に係る過去の演算結果が前記保持手段に保持されている入力データを優先して出力するように制御することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記保持手段は、前記制御手段によって出力された属性情報に係る過去の演算結果を保持している場合は、前記保持している演算結果を前記演算手段に出力し、保持していない場合は、前記出力された属性情報に係る過去の演算結果を外部メモリから読み出して前記演算手段に出力することを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
前記制御手段が最新に受信した入力データの属性情報に係る過去の演算結果が前記保持手段に保持されていない場合であって、かつ前記制御手段が当該属性情報に係る過去に受信した入力データを保持している数が所定数に達していない場合は、前記制御手段は、前記過去に受信した入力データとともに前記最新に受信した入力データ及び属性情報を一時的に保持することにより出力する順序を制御することを特徴とする請求項１〜３の何れか１項に記載のデータ処理装置。
【請求項５】
前記制御手段が最新に受信した入力データの属性情報に係る過去の演算結果が前記保持手段に保持されていない場合であって、かつ前記制御手段が当該属性情報に係る過去に受信した入力データを保持している数が所定数に達している場合は、前記制御手段は、前記過去に受信した入力データとともに前記最新に受信した入力データ及び属性情報を出力するように出力の順序を制御することを特徴とする請求項１〜４の何れか１項に記載のデータ処理装置。
【請求項６】
前記入力データが所定の条件を満たす場合に、前記制御手段は、前記保持手段に保持されている過去に入力された入力データをすべて出力するように出力の順序を制御することを特徴とする請求項１〜５の何れか１項に記載のデータ処理装置。
【請求項７】
前記制御手段は、さらに前記入力データの属性情報が優先して処理するべき属性情報であるかを判定し、その判定結果に応じて、出力する順序を制御することを特徴とする請求項１〜６の何れか１項に記載のデータ処理装置。
【請求項８】
前記保持手段は、前記制御手段による優先して処理するべき属性情報の判定結果に応じて内部に保持する演算結果を入れ替えることを特徴とする請求項７に記載のデータ処理装置。
【請求項９】
前記入力データは画素データであり、前記属性情報は画素データの属する領域を表す画素ラベルであって、前記演算手段は、領域ごとに画素データの累積演算を行うことを特徴とする請求項１〜８の何れか１項に記載のデータ処理装置。
【請求項１０】
複数の入力データと前記複数の入力データそれぞれの属性情報とを受信し、前記属性情報に応じた順序で出力する制御工程と、
前記制御工程において出力された入力データと属性情報とに対して、該属性情報に係る過去の演算結果を参照して演算処理を行う演算工程とを有し、
前記制御工程においては、前記演算工程における過去の演算結果の保持が可能な保持手段に、前記複数の入力データのそれぞれの属性情報に係る過去の演算結果が保持されているか否かに応じて、前記複数の入力データを出力する順序を制御することを特徴とするデータ処理方法。
【請求項１１】
複数の入力データと前記複数の入力データそれぞれの属性情報とを受信し、前記属性情報に応じた順序で出力する制御工程と、
前記制御工程において出力された入力データと属性情報とに対して、該属性情報に係る過去の演算結果を参照して演算処理を行う演算工程とをコンピュータに実行させ、
前記制御工程においては、前記演算工程における過去の演算結果の保持が可能な保持手段に、前記複数の入力データのそれぞれの属性情報に係る過去の演算結果が保持されているか否かに応じて、前記複数の入力データを出力する順序を制御することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特に、複数の領域に分割して処理を行うために用いて好適なデータ処理装置、データ処理方法及びプログラムに関する。
【背景技術】
【０００２】
従来、色や模様、明るさなどの属性が同じになるように画像を複数の領域に分割する技術として領域分割（Segmentation）手法が用いられる（例えば特許文献１参照）。この手法により分割された領域は、その後、領域単位で符号化処理、領域の認識を行うことができるため、画素レベルで画像を処理する場合に比べ処理量を削減することができる。近年、組み込み機器で高解像度の画像に対して画像処理を行うケースは増えてきており、領域分割後の領域単位で処理することにより、組み込み機器でも高解像度の画像に対してリアルタイムに複雑な処理を行うことができると想定される。
【０００３】
このような背景から、リアルタイムに領域分割処理を実現するためにいくつかの手法が提案されている。その中で、色空間（Ｒ，Ｇ，Ｂ）と座標空間（Ｘ，Ｙ）との５次元の情報を用いて画素データをクラスタリングすることにより画像を領域に分けるＳＬＩＣ（Simple Linear Iterative Clustering）と呼ばれる手法がある。
【０００４】
このＳＬＩＣ手法では、はじめにクラスターの中心となる代表データを画像中において格子状に配置する。この代表データは色空間（ｌ，ａ，ｂ）と座標空間（Ｘ，Ｙ）との５次元の情報を持つ。なお、ＳＬＩＣ手法において色空間はＣＩＥＬＡＢ（ｌ，ａ，ｂ）を用いているが、ＲＧＢ（Ｒ，Ｇ，Ｂ）やＹＣＣ（Ｙ，Ｃｂ，Ｃｒ）などを用いることもできる。また、代表データはシードやクラスター中心（cluster centroid）とも呼ばれる。ＳＬＩＣ手法はクラスタリングの１つであるk-means法をベースにしており、各画素を格子状に配置した代表点にクラスタリングする。ＳＬＩＣ手法とk-means法との違いは代表点にクラスタリングする座標空間を所定範囲に限定している点にある。ＳＬＩＣ手法により生成された領域は比較的形状が同じになり領域の数が安定することが特徴であり、この分割された領域はスーパーピクセルと呼ばれている。
【０００５】
さらに、このスーパーピクセルのオブジェクトを認識する技術も開発されており、この技術は撮影画像のシーン判別等に応用される。スーパーピクセルのオブジェクトを認識する処理では、スーパーピクセルの特徴量を抽出し、抽出した特徴量を解析してオブジェクトを認識する。また、スーパーピクセルを形成する画素毎に抽出した特徴量の累積データをスーパーピクセルの特徴量として採用することがある。
【０００６】
ここで、スーパーピクセルの特徴量を抽出する処理では累積演算が行われる。累積演算のように過去の演算結果を参照する演算を行うと、過去の演算結果を内部で保持できない場合は外部メモリへのリードモディファイライトアクセスが発生する。外部メモリへのアクセスは、データを要求してから到着するまでの時間だけアクセスレイテンシがかかる。したがって、頻繁に外部メモリへアクセスする構成の場合には、外部メモリへのアクセスがボトルネックになり、特徴量演算の性能が上がらないという問題が生じる。
【０００７】
そこで、一般的に、メモリとの間の読み書きの時間を削減する手法としてキャッシュが知られている。キャッシュを用いると、メモリ領域の一部のデータをキャッシュ内部に保持し、繰り返し使用することによってメモリへのアクセス回数を削減することができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００７−２７２６８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかし、オブジェクトが複雑に入り組んでいる画像では、領域分割結果も複数の領域ラベルが入り組んで複雑になっている。そのため、頻繁に複数の領域ラベルが切り替わる画像では、キャッシュのヒット率が落ちて、性能が低下する。したがって、キャッシュを使用したシステムにおいて、ヒット率の改善を図る場合には、キャッシュデータ容量を増やすか、あるいは、キャッシュ更新アルゴリズムを設計することが考えられる。
【００１０】
しかしながら、オブジェクトが複雑に入り組んでいる画像でもキャシュヒット率が低下しないようにキャッシュデータ容量を増やすと、回路規模が増加するという問題点がある。また、複雑なキャッシュ更新アルゴリズムは、設計が複雑になり、追加するハードウェアも多くなるという問題点がある。
【００１１】
本発明は前述の問題点に鑑み、複雑なキャッシュ更新アルゴリズムを不要にして、かつ回路規模を抑えて累積演算処理を行うことができるようにすることを目的としている。
【課題を解決するための手段】
【００１２】
本発明に係るデータ処理装置は、複数の入力データと前記複数の入力データそれぞれの属性情報とを受信し、前記属性情報に応じた順序で出力する制御手段と、前記制御手段によって出力された入力データと属性情報とに対して、該属性情報に係る過去の演算結果を参照して演算処理を行う演算手段と、前記演算手段による過去の演算結果を内部に保持が可能な保持手段とを有し、前記制御手段は、前記複数の入力データのそれぞれの属性情報に係る過去の演算結果が前記保持手段に保持されているか否かに応じて、前記複数の入力データを出力する順序を制御することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、複雑なキャッシュ更新アルゴリズムを不要にして、かつ回路規模を抑えて累積演算処理を行うことができる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施形態に係るデータ処理装置の構成例を示すブロック図である。
【図２】第１の実施形態における入力データ制御部の内部構成例を示すブロック図である。
【図３】ＦＩＦＯ管理テーブルの一例を示す図である。
【図４】第１の実施形態におけるデータパス制御部による処理手順の一例を示すフローチャートである。
【図５】第１の実施形態におけるキャッシュの内部構成例を示すブロック図である。
【図６】第１の実施形態におけるキャッシュコントローラによる処理手順の一例を示すフローチャートである。
【図７】外部メモリの領域を説明するための図である。
【図８】第１の実施形態において、入力データ制御部における入力順序及び出力順序を比較した例を示す図である。
【図９】入力データ制御部による処理順序の入れ替え効果を説明するための図である。
【図１０】第２の実施形態に係るデータ処理装置の構成例を示すブロック図である。
【図１１】第２の実施形態における入力データ制御部及びキャッシュの内部構成例を示すブロック図である。
【図１２】第２の実施形態におけるデータパス制御部による処理手順の一例を示すフローチャートである。
【図１３】第２の実施形態におけるキャッシュコントローラによる処理手順の一例を示すフローチャートである。
【図１４】入力データ制御部による処理順序の入れ替え効果を説明するための図である。
【図１５】画像を領域分割処理し、分割した領域の特徴量を抽出する一般的なデータ処理装置の構成例を示すブロック図である。
【図１６】領域分割処理を説明するための図である。
【図１７】処理するＸ，Ｙ座標と優先領域ラベルとの関係を説明するための図である。
【発明を実施するための形態】
【００１５】
（第１の実施形態）
以下、本発明の実施形態について、図面を参照しながら説明する。まず、画像を領域分割して分割した領域の特徴量を抽出する一般的な処理手順について説明する。
【００１６】
図１５は、画像を領域分割処理し、分割した領域の特徴量を抽出する一般的なデータ処理装置の構成例を示すブロック図である。
図１５に示すデータ処理装置１５００は、入力画像データを特徴が一様な領域に分割し、分割した領域の特徴量を算出し、画像データを複数のブロックに分けてブロック単位で処理する。ブロック単位で処理する方法については例えば特開平８−３０７８７号公報に開示されている。
【００１７】
また、データ処理装置１５００は、領域分割部１５０１、特徴量演算部１５０２、ＤＭＡＣ１５０３、及び外部メモリ１５０４で構成され、特徴量演算部１５０２及びＤＭＡＣ１５０３はシステムバス１５０５を介して外部メモリ１５０４へ接続されている。
【００１８】
次に、図１５に示す各構成ブロックの機能、および図１６（ａ）に示す入力画像データを処理するときの動作について説明する。外部メモリ１５０４には、入力画像データ（Ｒ，Ｇ，Ｂ）や領域分割処理に使用する代表点の情報が格納されている。また、特徴量演算部１５０２の演算結果を格納する領域としても使用され、その他処理結果を格納する領域として使用することも可能である。
【００１９】
ＤＭＡＣ１５０３は、外部メモリ１５０４から入力画像データをブロック単位でラスタ順に読み出し、画素単位で領域分割部１５０１と特徴量演算部１５０２とに転送する。さらに、ＤＭＡＣ１５０３は入力画像データを読み出すアドレスから画像データの座標（Ｘ，Ｙ）を計算する機能を備え、画素データを（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）に拡張して領域分割部１５０１と特徴量演算部１５０２とに転送する。また、ＤＭＡＣ１５０３は、外部メモリ１５０４から領域分割処理に使用するブロックの内部に配置された代表点とその周囲の代表点との情報も読み出し、領域分割部１５０１に転送する。
【００２０】
領域分割部１５０１は、代表点の情報と画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）の情報とをＤＭＡＣ１５０３から入力し、画素データを代表点のいずれかにクラスタリングし、領域ラベルを特徴量演算部１５０２に出力する。このとき、ＤＭＡＣ１５０３を経由して領域分割結果を外部メモリ１５０４に書き戻してもよい。
【００２１】
特徴量演算部１５０２は、ＤＭＡＣ１５０３から出力された画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）の情報を用いて画素の特徴量を演算し、領域ラベル毎に累積する。このとき、１画素の特徴量は２５６バイトになることもあるため、一時的に外部メモリ１５０４へ格納する。また、特徴量演算部１５０２は、領域分割部１５０１から領域ラベルを入力すると、対応する過去の演算結果を外部メモリ１５０４から読み出し、演算した特徴量を加算し、外部メモリ１５０４へ書き込む。
【００２２】
領域ごとに特徴量を算出する場合、累積演算のように過去の演算結果を参照する演算を行う。したがって、頻繁に外部メモリへアクセスする構成の場合には、外部メモリへのアクセスがボトルネックになり、特徴量演算の性能が上がらない。そこで、キャッシュを用いることにより、メモリ領域の一部のデータをキャッシュ内部に保持し、繰り返し使用することによってメモリへのアクセス回数を削減することができる。しかしながら、オブジェクトが複雑に入り組んでいる画像では、領域分割結果も複数の領域ラベルが入り組んで複雑になっている。そのため、頻繁に複数の領域ラベルが切り替わる画像では、キャッシュのヒット率が落ちて、性能が低下する。
【００２３】
例えば、図１６に示したように１ブロック中の画素は、初期ラベルか周囲のラベルかに割り振られる。周囲のラベルに比べ、初期ラベルが占める割合が多いが、ラスタ順に処理をするときは、散発的にしか現れない周囲の領域ラベルも初期ラベルと同様に順次処理する。そのため、現れる頻度の低い領域ラベルによってキャッシュが更新され、場合によっては現れる頻度の高い領域ラベルの演算結果をキャッシュアウトしてしまうことがある。
【００２４】
そこで本実施形態においては、キャッシュを設けた構成であって、かつ回路規模を増大させないようにしてヒット率を向上させたデータ処理装置を提供する。以下、図１〜図９を参照しながら本発明の第１の実施形態について説明する。
【００２５】
図１は、本実施形態に係るデータ処理装置１００の構成例を示すブロック図である。以下、図１６（ａ）に示す画像データを処理する例について説明する。
図１に示すデータ処理装置１００は、入力画像データを複数の領域に分割し、分割した領域の特徴量を算出する。このとき、入力画像データを複数のブロックに分けてブロック単位で処理する。データ処理装置１００は、領域分割部１０１、入力データ制御部１０２、特徴量演算部１０３、ＤＭＡＣ１０４、キャッシュ１０５、および外部メモリ１０６で構成されている。また、ＤＭＡＣ１０４、キャッシュ１０５はシステムバス１０７を介して外部メモリ１０６へ接続されている。
【００２６】
次に、図１に示す各構成の機能、および図１６に示す画像データを処理するときの動作について説明する。
外部メモリ１０６には、処理に必要な入力データが格納されており、図示しないＣＰＵ等の処理により予め入力データが用意されている。また、外部メモリ１０６は、各ブロックの処理結果を格納する領域としても使用される。
【００２７】
図７は、外部メモリ１０６の領域を説明するための図である。入力データを格納する領域７０１には、画像データ（Ｒ，Ｇ，Ｂ）や、領域分割部１０１が処理に用いる代表点の情報、その他のパラメータ等が格納される。処理結果データを格納する領域７０２には、特徴量演算部１０３が生成する領域特徴量の演算結果が格納される。このとき、領域特徴量の演算結果を格納するためには、領域特徴量のデータ量×領域ラベル数の容量が必要になる。本実施形態では、領域特徴量のデータ量を２５６バイトとし、領域ラベルは、「0」から順に「0x80＿0000」、「0x80＿0100」、「0x80＿0200」、・・・、「0x88＿6EFF」まで割り当てられているものとする。また、それ以降の領域には、領域分割部１０１の処理結果を格納できるようにしてよい。
【００２８】
ＤＭＡＣ１０４は、領域分割部１０１と外部メモリ１０６との間、および入力データ制御部１０２と外部メモリ１０６との間でデータを転送するＤＭＡコントローラであり、図示しないＣＰＵによって制御される。ＣＰＵが処理開始のトリガを与えると、ＤＭＡＣ１０４は、外部メモリ１０６において入力データを格納する領域７０１から、領域分割部１０１が１ブロックの領域分割処理に必要なパラメータや代表点のデータを読み出し、領域分割部１０１に転送する。さらに、その後、画像データをブロック単位でラスタ順に読み出し、領域分割部１０１と入力データ制御部１０２とに画素単位で転送する。
【００２９】
また、ＤＭＡＣ１０４は画像データを読み出すアドレスから画素データの座標（Ｘ，Ｙ）を計算することが可能であり、計算結果を画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）に拡張して領域分割部１０１と入力データ制御部１０２とに転送する。さらに、ＤＭＡＣ１０４は、領域分割部１０１の分割処理結果を外部メモリ１０６に格納することも可能である。ＤＭＡＣ１０４は、全画像データの転送が終わるとＣＰＵに終了を通知する。
【００３０】
領域分割部１０１は、代表点の情報と画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）とを用いて画素データを代表点のいずれかにクラスタリングする。なお、領域分割部１０１は専用ハードウェアで構成してもよく、ＣＰＵによって実行させるプログラムで構成してもよい。
【００３１】
具体的には、領域分割部１０１は、ＤＭＡＣ１０４から、はじめに領域分割処理に係るパラメータを受け取る。続いて１ブロックの処理に必要な代表点の情報を入力し、１ブロックの画素データをラスタ順に入力して分割処理を開始する。そして、画素毎にどの代表点に対応する領域に属するか判定し、判定された領域を表す属性情報である領域ラベル情報（Ｌ）を入力データ制御部１０２に転送する。このとき、ＤＭＡＣ１０４にも領域ラベル情報（Ｌ）を転送し、外部メモリ１０６に分割処理結果を格納してもよい。
【００３２】
図１６（ａ）は、図１のデータ処理装置１００で処理する画像データの一例を示す図であり、図１６（ｂ）は、領域分割部１０１で処理した領域分割の処理結果の一例を示す図である。図１６（ａ）に示す例では、画像サイズは縦３６０画素、横６００画素とし、画素データは、色データ（Ｒ，Ｇ，Ｂ）２４ビットで構成されている。画像の座標位置は、左上の座標を原点（Ｘ，Ｙ）＝（０，０）とし、水平方向にＸの値が増加、垂直方向にＹの値が増加する。縦横３０画素のブロックに分けて原点から水平方向に処理していき、右端まで処理するとＸ＝０の位置に戻り、下側のブロックを処理する。
【００３３】
ここで領域分割処理は、１ブロック中に９個の代表点を配置して行うものとし、はじめに画像全体に代表点を格子状に配置し、各代表点に、０、１、２、・・・、２１５９とユニークな番号（以下、領域ラベルと呼ぶ）を割り振る。領域分割処理後、代表点は各領域の中心に補正され、各画素はいずれかの領域に属することになり、その領域ラベルが割り振られる。１ブロック中の画素は、はじめにそのブロックに配置したいずれかの代表点の領域ラベル（初期ラベル）、もしくはその周囲のブロックの代表点の領域ラベルが割り振られるが、周囲のラベルに比べ、初期ラベルが割り振られる確率が高い。例えば図１６（ａ）に示す、初期ラベルに「１８３」、「１８４」、「１８５」、「２０３」、「２０４」、「２０５」、「２６３」、「２６４」、「２６５」が割り振られたブロックの場合は、図１６（ｂ）に示す結果となる。図１６（ｂ）に示す例は、このブロック内の一部において周囲のブロックの代表点の領域ラベルである「１２４」、「１８２」、「３０２」が割り振られた例を示している。分割した領域の特徴量は、同一の領域ラベルが割り振られた画素の特徴量を累積して得られる。
【００３４】
特徴量演算部１０３は、画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）を用いて特徴量を抽出し、同一領域ラベルの画素データの特徴量を累積する。特徴量演算部１０３は専用ハードウェアで構成しても、ＣＰＵによって実行させるプログラムで構成してもよい。
【００３５】
具体的には、特徴量演算部１０３は、入力データ制御部１０２から画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）を入力し、演算処理を行う。演算する特徴量は、具体的にはＲＧＢの色平均や、Ｘ，Ｙモーメント、色ヒストグラム等である。そして、入力データ制御部１０２から領域ラベル情報（Ｌ）を受け取ると、過去の同一の領域ラベルの演算結果をキャッシュ１０５に要求する。要求する領域ラベルの演算結果が格納されているアドレスは、オフセットアドレス（ここでは0x80＿0000）＋領域ラベル番号×256で一意に決定する。そして、キャッシュ１０５からデータを受信すると、演算結果を加算し、同一アドレスに書き戻す。
【００３６】
キャッシュ１０５は、特徴量演算部１０３と外部メモリ１０６との間でデータの転送を行うブロックである。図５は、本実施形態におけるキャッシュ１０５の内部構成例を示すブロック図である。
図５に示すように、キャッシュ１０５はキャッシュメモリ５０１を備えており、バリッドフラグ領域５０２、ダーティフラグ領域５０３、タグ領域５０４、およびデータ領域５０５が割り当てられている。以下、それぞれの領域について説明する。
【００３７】
バリッドフラグ領域５０２には、データ領域５０５のデータが有効であるか否かを示すバリッドフラグが格納されている。ダーティフラグ領域５０３には、キャッシュラインを外部メモリ１０６へ書き戻す必要があるか否かを示すダーティフラグが格納されている。データ領域５０５には、外部メモリ１０６のコピーデータ（キャッシュデータ）が格納されている。
【００３８】
本実施形態のキャッシュ１０５は、キャッシュラインを１つの領域ラベルの特徴演算結果が格納可能な２５６バイトとし、キャッシュライン毎にバリッドフラブ、ダーティフラグ、タグを持つものとする。また、マッピング方式はフルアソシエイティブ方式とする。ここではキャッシュ１０５のサイズは、４領域分の特徴演算結果が格納可能な１ＫＢとする。アドレス下位８ビットはキャッシュライン上のアドレスを示し、アドレス９〜２０ビット目の１２ビットをタグ領域５０４に格納し、領域ラベルの先頭アドレスを識別可能とする。なお、２１〜３２ビット目はオフセットアドレスであり、固定値なのでタグ領域５０４に格納する必要はなく、キャッシュ１０５内部のレジスタで静的な値を持てば良い。また、キャッシュ１０５はフルアソシエイティブ方式に限定されず、セットアソシエイティブ方式やダイレクトマップ方式も適用可能である。
【００３９】
キャッシュコントローラ５０６は、キャッシュメモリ５０１の読み書きを制御するコントローラであり、ヒット判定部５０７およびデータ転送部５０８を備えている。ヒット判定部５０７は、要求されたアドレスとタグ領域５０４に格納されたアドレスとの比較を行い、要求データがキャッシュメモリ５０１に存在するか否かを判定する。そして、存在する場合はヒットとし、存在しない場合ミスヒットとする。
【００４０】
データ転送部５０８は、ヒット判定部５０７の判定結果に従って、特徴量演算部１０３とキャッシュメモリ５０１との間のデータ転送、またはキャッシュメモリ５０１と外部メモリ１０６との間のデータ転送を行う。
【００４１】
なお、ミスヒット時は、キャッシュ内で最も長く参照されていないラインを置き換えるＬＲＵ法（Least-Recently-Used）によりタグの配置を決定するものとし、図示しないＬＲＵキューをキャッシュコントローラ５０６内部に備えるものとする。ＬＲＵキューは先頭から順に長く参照されていないことを示すキューであり、バリッドフラグが立っていないキャシュラインにデータが読み出された場合は、そのタグをＬＲＵキューの最後尾に格納する。また、キャッシュラインのリプレースがあった場合はリプレースされたタグをＬＲＵキューから抜き、リプレースしたタグを最後尾に格納する。さらに、キャシュラインへのアクセスがあった場合は、アクセスされたタグをＬＲＵキューから一旦抜き、最後尾に格納する。
【００４２】
また、バリッドフラグ領域５０２およびタグ領域５０４の全キャッシュラインに対応するデータは外部に出力され、外部よりキャッシュ１０５の内部状態が参照可能となっている。
【００４３】
図６は、キャッシュコントローラ５０６による処理手順の一例を示すフローチャートである。ここで、特徴量演算部１０３がアクセスするデータがキャッシュメモリ５０１に格納されていない場合の動作について説明する。
まず、特徴量演算部１０３からアクセスが発生すると処理を開始する。そして、ヒット判定部５０７は、バリッドフラグがセットされているキャッシュラインのタグ領域５０４をサーチして要求されたアドレスとタグ領域５０４に格納されたアドレスとを比較し、ヒットかミスヒットかを判定する（Ｓ６０１）。この判定の結果、アドレスが一致する場合（ヒットの場合）はＳ６１０に進む。
【００４４】
一方、Ｓ６０１の判定の結果、アドレスが一致しない場合（ミスヒットの場合）は、キャッシュコントローラ５０６は、バリッドフラグがクリアされているキャッシュラインがあるか否かを判定する（Ｓ６０２）。この判定の結果、バリッドフラグがクリアされているキャッシュラインがある場合はＳ６０８に進む。
【００４５】
一方、Ｓ６０２の判定の結果、バリッドフラグがクリアされているキャッシュラインがない場合は、キャッシュコントローラ５０６は、ＬＲＵキューで先頭に格納されているタグを、リプレースするキャッシュラインのタグに選択する（Ｓ６０３）。そして、選択したキャッシュラインのタグをＬＲＵキューから抜く（Ｓ６０４）。
【００４６】
次に、キャッシュコントローラ５０６は、選択したキャッシュラインのダーティフラグがセットされているか否かを判定する（Ｓ６０５）。この判定の結果、ダーティフラグがセットされている場合は、データ転送部５０８は、選択したキャッシュラインのデータを外部メモリ１０６に書き戻す（Ｓ６０６）。そして、キャッシュコントローラ５０６は、選択したキャッシュラインのダーティフラグ、およびバリッドフラグをクリアする（Ｓ６０７）。一方、Ｓ６０５の判定の結果、ダーティフラグがセットされていない場合はＳ６０６およびＳ６０７をスキップしてＳ６０８に進む。
【００４７】
次に、データ転送部５０８は、外部メモリ１０６からキャッシュ１０５へ、特徴量演算部１０３がアクセスするキャッシュライン分のデータを読み出し、キャッシュ１０５を更新する（Ｓ６０８）。そして、キャッシュ更新後、キャッシュコントローラ５０６は、そのキャッシュラインのバリッドフラグをセットし（Ｓ６０９）、アドレスから抽出したタグをＬＲＵキューの最後尾に格納する（Ｓ６１０）。
【００４８】
次に、キャッシュコントローラ５０６は、特徴量演算部１０３のアクセスがリードアクセスであるか否かを判定する（Ｓ６１１）。この判定の結果、リードアクセスである場合は、データ転送部５０８は、該当するデータを特徴量演算部１０３に送る（Ｓ６１２）。一方、Ｓ６１１の判定の結果、ライトアクセスである場合は、キャッシュコントローラ５０６は、書き込みするデータによりキャッシュラインを更新し（Ｓ６１３）、ダーティフラグをセットする（Ｓ６１４）。
【００４９】
次に、特徴量演算部１０３がアクセスするデータがキャッシュメモリ５０１に格納されている場合の動作について説明する。特徴量演算部１０３からアクセスが発生すると処理を開始する。ヒット判定部５０７によりＳ６０１でヒットと判定された場合には、Ｓ６０２〜Ｓ６０９の処理は省略され、キャッシュコントローラ５０６は、特徴量演算部１０３のアクセスがリードアクセスであるか否かを判定する（Ｓ６１１）。リードアクセスである場合には該当するデータを特徴量演算部１０３に送り（Ｓ６１２）、ライトアクセスである場合には、書き込むデータによりキャッシュラインを更新し（Ｓ６１３）、ダーティフラグをセットする（Ｓ６１４）。この場合、外部メモリ１０６へのアクセスは発生しない。
【００５０】
図１の説明に戻り、入力データ制御部１０２は、キャッシュ１０５の内部状態に応じて、入力データの順序を入れ替えながら出力する。入力データ制御部１０２は、ＤＭＡＣ１０４から画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）を受信するとともに、領域分割部１０１からその画素データの領域ラベル情報（Ｌ）を受信し、出力用の画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）および領域ラベル情報（Ｌ）を特徴量演算部１０３に出力する。以下、入力された画素データ、領域ラベルを、それぞれ入力画素データ、入力領域ラベルと呼び、出力する画素データ、領域ラベルを、それぞれ出力画素データ、出力領域ラベルと呼ぶ。また、入力データ制御部１０２は、キャッシュ１０５のタグおよびバリッドフラグを参照し、キャッシュ１０５に現在どの領域ラベルの演算結果が格納されているかを把握する。
【００５１】
図２は、入力データ制御部１０２の詳細な内部構成例を示すブロック図である。
図２において、入力データ保持部２０１は、ＤＭＡＣ１０４から受信した画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）を保持する。本実施形態では、Ｒ，Ｇ，Ｂは夫々８ビット、Ｘ，Ｙは夫々９ビットとし、１画素あたり４２ビットのデータで構成されるものとする。また、入力データ保持部２０１は３つのＦＩＦＯで構成され、それぞれをＦＩＦＯ［０］、ＦＩＦＯ［１］、ＦＩＦＯ［２］とする。ＦＩＦＯ［０］〜［２］は夫々４段で構成され、１つのＦＩＦＯに４画素分の画素データが格納可能である。１つのＦＩＦＯには、同一の領域ラベルのデータを格納する。
【００５２】
ＦＩＦＯ管理テーブル２０２は、入力データ保持部２０１の状態を格納したテーブルである。図３には、ＦＩＦＯ管理テーブル２０２の詳細な例を示す。図３において、ＦＩＦＯ番号の領域３０１は、番号ＮがＦＩＦＯ［Ｎ］に対応する。格納数の領域３０２は、ＦＩＦＯに格納されているデータ数を示している。例えば"０"は格納数０個なのでＦＩＦＯに何もデータがない状態、つまりＦＩＦＯが空の状態であり、"４"はＦＩＦＯが４段構成なので、フルの状態を示している。領域ラベルの領域３０３はＦＩＦＯにどの領域ラベルのデータが入っているかを示しており、格納数が０より大きい場合に有効な値である。ＦＩＦＯの状態が更新されたとき、後述するデータパス制御部２０５によって、ＦＩＦＯ管理テーブル２０２も更新される。
【００５３】
画素データ選択部２０３は、入力画素データ及び入力データ保持部２０１内部の３つのＦＩＦＯに格納された画素データの中から１つを選択して出力する。選択信号ＳＥＬは２ビットの信号であり"００"のときはＦＩＦＯ［０］のデータ、"０１"のときはＦＩＦＯ［１］のデータ、"１０"のときはＦＩＦＯ［２］のデータ、"１１"のときは入力画素データを選択する。そして、出力画素データとして出力する。
【００５４】
領域ラベル選択部２０４は、入力領域ラベル及びＦＩＦＯ管理テーブル２０２における領域ラベルの領域３０３に格納された領域レベルの中から１つを選択して出力する。選択信号ＳＥＬが"００"のときはＦＩＦＯ［０］の領域ラベル、"０１"のときはＦＩＦＯ［１］の領域ラベル、"１０"のときはＦＩＦＯ［２］の領域ラベル、"１１"のときは入力領域ラベルを選択する。そして、出力領域ラベルとして出力する。
【００５５】
データパス制御部２０５は、入力画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）、および入力領域ラベル（領域ラベル情報（Ｌ））を、キャッシュ１０５の内部状態に応じて、一旦内部に保持するか、そのまま出力するかを制御する。これにより、ＦＩＦＯ管理テーブル２０２の更新や、入力データ保持部２０１への画素データの保持や取り出しを指示する。さらにデータパス制御部２０５は、画素データ選択部２０３、領域ラベル選択部２０４の選択信号ＳＥＬを生成する。
【００５６】
データパス制御部２０５は、キャッシュ１０５に演算結果を保持している領域ラベルを優先的に出力する。そして、保持していない領域ラベルの場合は、入力データ制御部１０２内のＦＩＦＯに一旦複数個分の画素データを溜めてからまとめて出力し、キャッシュ１０５のミスヒットを抑えるようにする。このようにＦＩＦＯで画素データを複数個溜めることにより頻度の少ない領域ラベルによるミスヒットを抑える効果がある。さらに、ＦＩＦＯへ画素データを複数個溜める際に、できるだけＦＩＦＯがフルになるまで溜めることにより、領域ラベルの切り変わる頻度を減らし、キャッシュミス抑制効果をより高めることができる。
【００５７】
図４は、データパス制御部２０５による処理手順の一例を示すフローチャートである。なお、図４に示す処理は、１つの画素データに対して行われる処理であり、順次入力されるすべての画素データに対して、図４に示す処理を繰り返すものとする。
まず、最新の画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）と領域ラベル情報（Ｌ）とを受信すると処理がスタートする。そして、入力領域ラベルから特徴量演算部１０３がアクセスする先頭アドレスAddrを演算する（Ｓ４０１）。なお、先頭アドレスはAddr=L*0x100というように領域番号Ｌで一意に決まる。
【００５８】
次に、このアドレスの９−２０ビット目がタグに登録されているか否かを判定する（Ｓ４０２）。この判定は、バリッドフラグがセットされているタグがアドレスAddr［19:8］と一致するか否かによって行われる。この判定の結果、タグに登録されている場合は、選択信号ＳＥＬを"１１"とし、画素データ選択部２０３および領域ラベル選択部２０４に対して、それぞれ入力画素データ、入力領域ラベルをそのまま出力するように制御する（Ｓ４０３）。
【００５９】
一方、Ｓ４０２の判定の結果、タグに登録されていない場合は、クリアされているバリッドフラグがあるか否か、すなわち空いているキャッシュラインがあるか否かを判定する（Ｓ４０４）。この判定の結果、クリアされているバリッドフラグがある場合はＳ４０３に進む。
【００６０】
一方、Ｓ４０４の判定の結果、クリアされているバリッドフラグがない場合は、ＦＩＦＯ管理テーブル２０２をサーチし、入力領域ラベルが領域ラベルの領域３０３に登録されているラベルと一致するか否かを判定する（Ｓ４０５）。このとき、対象とする領域ラベルは、格納数０より大きい有効な領域ラベルであるものとする。
【００６１】
この判定の結果、ＦＩＦＯ番号ｉの領域ラベルと一致する場合は、続いてＦＩＦＯ［ｉ］の格納数が所定数（本実施形態では４つ）、すなわちフル状態であるか否かを判定する（Ｓ４０６）。この判定の結果、ＦＩＦＯ［ｉ］がフル状態でなく、まだ格納可能な状態である場合は、ＦＩＦＯ［ｉ］に入力画素データを格納する（Ｓ４０７）。そして、ＦＩＦＯ［ｉ］の格納数を１インクリメントする（Ｓ４０８）。このとき、特徴量演算部１０３には何も出力しないように制御する。
【００６２】
一方、Ｓ４０６の判定の結果、ＦＩＦＯ［ｉ］がフル状態である場合は、ＦＩＦＯ［ｉ］に対応した選択信号ＳＥＬを生成する。そして、画素データ選択部２０３および領域ラベル選択部２０４に対して、それぞれＦＩＦＯ［ｉ］の画素データとＦＩＦＯ管理テーブルに登録されている領域ラベルとを出力するように制御する（Ｓ４０９）。このとき、ＦＩＦＯ［ｉ］の画素データを全て出力する。次に、ＦＩＦＯ管理テーブル２０２の該当する領域ラベルの格納数を０にする（Ｓ４１０）。その後、Ｓ４０３に遷移し、選択信号ＳＥＬを"１１"に切り替え、画素データ選択部２０３および領域ラベル選択部２０４に対して、それぞれ入力画素データ、入力領域ラベルをそのまま出力するように制御する。
【００６３】
一方、Ｓ４０５の判定の結果、入力領域ラベルがＦＩＦＯ管理テーブル２０２の領域ラベルに一致しない場合は、格納数の領域３０２をサーチし、格納数がゼロの空いているＦＩＦＯがあるか否かを判定する（Ｓ４１１）。この判定の結果、格納数がゼロであるＦＩＦＯがある場合はＳ４０７に遷移し、該当するＦＩＦＯ［ｉ］に入力画素データを格納する。そして、ＦＩＦＯ［ｉ］の格納数を１インクリメントする（Ｓ４０８）。このとき、特徴量演算部１０３には何も出力しないようにする。
【００６４】
一方、Ｓ４１１の判定の結果、格納数がゼロのＦＩＦＯがない場合は、続いて、格納数が最も多いＦＩＦＯの番号をサーチするために、処理に使用する変数max、ｎを初期化する（Ｓ４１２）。そして、格納数の領域３０２を順次サーチし、格納数が値maxより大きいか否かを判定する（Ｓ４１３）。この判定の結果、格納数の方が大きい場合は、値maxを格納数の値に置き換え、その時のｉの値をｎに代入する（Ｓ４１４）。
【００６５】
以上のようにすべてのＦＩＦＯに対してサーチが完了すると、ＦＩＦＯ［ｉ］に対応した選択信号ＳＥＬを生成する。そして、画素データ選択部２０３および領域ラベル選択部２０４に対して、それぞれ格納数が最多のＦＩＦＯ［ｎ］内の画素データ、ＦＩＦＯ管理テーブル２０２に登録されている領域ラベルを出力するように制御する（Ｓ４１５）。このとき、ＦＩＦＯ［ｎ］の画素データを全て出力する。その後、入力画素データをＦＩＦＯ［ｎ］に格納し（Ｓ４１６）、ＦＩＦＯ管理テーブルの番号ｎにおける格納数を１にする（Ｓ４１７）。
【００６６】
次に、入力画素データが１ブロックの最終データであるか否かを判定する（Ｓ４１８）。すなわち、入力画素データの座標がX%30==29且つY%30==29という条件を満たしているか否かを判定する。この判定の結果、入力画素データが最終データである場合は、以下の手順により入力データ保持部２０１に格納されている画素データを全て特徴量演算部１０３に出力する。まず、ＦＩＦＯ管理テーブル２０２をＦＩＦＯごとにサーチし、格納数がゼロであるか否かを判定する（Ｓ４１９）。この判定の結果、格納数がゼロである場合は、次のＦＩＦＯの格納数を判定する。
【００６７】
一方、Ｓ４１９の判定の結果、格納数がゼロではなく画素データがある場合は、格納数がゼロでないＦＩＦＯ［ｉ］に対応した選択信号ＳＥＬを生成する。そして、画素データ選択部２０３および領域ラベル選択部２０４に対して、それぞれＦＩＦＯ［ｉ］の画素データ、ＦＩＦＯ管理テーブルに登録されている領域ラベルを出力するように制御する（Ｓ４２０）。このとき、ＦＩＦＯ［ｉ］の画素データを全て出力する。その後、ＦＩＦＯ管理テーブル２０２の格納数の領域３０２を０にする（Ｓ４２１）。一方、Ｓ４１８の判定の結果、入力画素データが最終データでない場合は、Ｓ４１９〜Ｓ４２１の処理を省略し、終了する。
【００６８】
図８は、入力データ制御部１０２における入力順序及び出力順序を比較した例を示す図であり、図１６（ａ）に示す画像データのうち、（Ｘ，Ｙ）＝（３０，２０）から２ラインを処理した一例を示す。図８（ａ）は、領域分割部１０１が生成した分割済みの領域ラベルの出力順序を示し、図８（ｂ）は、入力データ制御部１０２の出力順序を示している。
【００６９】
最初、入力データ保持部２０１の全てのＦＩＦＯは空の状態であり、キャッシュ１０５のバリッドフラグは全てクリアされた状態とする。まず、１番目の領域ラベル「６３」を取得すると、アドレスAddr=0x80＿3F00を算出し（Ｓ４０１）、有効なタグと"３Ｆ"とが一致するか否かを判定する（Ｓ４０２）。この場合、バリッドフラグは全てクリアされているので（Ｓ４０４／Ｔｒｕｅ）、入力データをそのまま出力する（Ｓ４０３）。また、キャッシュ１０５では、外部メモリ１０６から該当するデータを読み出し、キャッシュデータ領域に書き込んでタグを"３Ｆ"に更新する。続いて、２番目の領域ラベル「６３」を取得すると、タグ"３Ｆ"が一致するため（Ｓ４０２／Ｔｒｕｅ）、入力データをそのまま出力する（Ｓ４０３）。
【００７０】
次に、３番目の領域ラベル「１２３」を取得すると、アドレスAddr=0x80＿7B00を算出し（Ｓ４０１）、有効なタグと"７Ｂ"とが一致するか否かを判定する（Ｓ４０２）。この場合、まだ３ライン分のバリッドフラグがクリアされたままであるので（Ｓ４０４／Ｔｒｕｅ）、入力データをそのまま出力する（Ｓ４０３）。そして、キャッシュ１０５は、外部メモリ１０６から該当するデータを読み出し、キャッシュデータ領域に書き込んでタグを"７Ｂ"に更新する。以上のような処理を繰り返すと、図８（ａ）に示すように、１９番目の領域ラベル「６４」を処理すると、キャッシュラインは全てバリッドフラグがセットされる。
【００７１】
次に、２０番目の領域ラベル「１２５」を取得すると、Ｓ４０２で一致するタグはないと判定され、Ｓ４０４でクリアされているバリッドフラグもないと判定されるため、Ｓ４０５に遷移する。また、Ｓ４０５の判定では、領域ラベルが一致するＦＩＦＯはないため、Ｓ４１１で格納数が０のＦＩＦＯをサーチする。そして、ＦＩＦＯ［０］が空いているので、ＦＩＦＯ［０］に画素データが格納され（Ｓ４０７）、ＦＩＦＯ管理テーブル２０２の領域ラベルの領域３０３は「１２５」に更新され、格納数の領域３０２は「１」に更新される（Ｓ４０８）。
【００７２】
また、２３番目の領域ラベル「１２５」を取得すると、Ｓ４０２で一致するタグはないと判定され、Ｓ４０４でクリアされているバリッドフラグもないと判定されるため、Ｓ４０５に遷移する。そして、Ｓ４０５の判定ではＦＩＦＯ［０］の領域ラベルと一致するのでＳ４０６へ遷移し、ＦＩＦＯ［０］がフルであるか否かを判定する。この場合、フルでないのでＦＩＦＯ［０］に画素データを格納し（Ｓ４０７）、ＦＩＦＯ管理テーブル２０２の格納数の領域３０３は「２」に更新される（Ｓ４０８）。
【００７３】
２６番目の領域ラベル「６５」を取得すると、Ｓ４０２で一致するタグはないと判定され、Ｓ４０４でクリアされているバリッドフラグもないと判定されるため、Ｓ４０５に遷移する。そして、Ｓ４０５の判定では、領域ラベルが一致するＦＩＦＯはないため、Ｓ４１１で格納数が０のＦＩＦＯをサーチする。そして、ＦＩＦＯ［１］が空いているので、ＦＩＦＯ［１］に画素データが格納され（Ｓ４０７）、ＦＩＦＯ管理テーブル２０２の領域ラベルの領域３０３は「６５」に更新され、格納数の領域３０２は「１」に更新される（Ｓ４０８）。
【００７４】
また、２８番目の領域ラベル「１２５」を取得すると、Ｓ４０２で一致するタグはないと判定され、Ｓ４０４でクリアされているバリッドフラグもないと判定されるため、Ｓ４０５に遷移する。そして、Ｓ４０５の判定では、ＦＩＦＯ［０］の領域ラベルと一致するのでＳ４０６へ遷移し、ＦＩＦＯ［０］がフルであるか否かを判定する。この場合、格納数が４なのでＳ４０９に遷移する。そして、ＦＩＦＯ［０］の画素データを全て出力し（Ｓ４１０）、ＦＩＦＯ管理テーブル２０２の格納数の領域３０２を「０」とする（Ｓ４１０）。さらに、入力データを出力する（Ｓ４０３）。このとき、キャッシュ１０５では、空いているキャッシュラインがないのでリプレースが発生する。したがって、図８（ｂ）に示すように、入力データ制御部１０２から出力されてから最も時間が経過している領域ラベル「１２３」に対応するアドレスのタグのキャッシュラインが追い出され、領域ラベル「１２５」のアドレスのタグに更新される。
【００７５】
以上のように図４の処理手順に従い、入力データ制御部１０２において、図８（ａ）に示す順序で処理すると図８（ｂ）に示す順序で出力される。
【００７６】
図９は、入力データ制御部１０２による処理順序の入れ替え効果を説明するための図である。図９（ａ）には、入力データ制御部１０２による出力順序の入れ替えがない場合のキャッシュのミスヒット個所を示し、図９（ｂ）には、入力データ制御部１０２により出力順序の入れ替えを行った場合のキャッシュのミスヒット個所を示す。なお、図９に示すレ点は、ミスヒットした個所を表している。
【００７７】
図９（ａ）に示すように、入力データ制御部１０２による出力順序の入れ替えがない場合は、キャッシュ１０５において、以下のように処理される。まず、２０番目の領域ラベル「１２５」の演算結果が要求されると、領域ラベル「１２３」の演算結果をキャッシュアウトし、領域ラベル「１２５」の演算結果が外部メモリ１０６から転送される。そして、２６番目の領域ラベル「６５」の演算結果が要求されると、領域ラベル「６３」の演算結果をキャッシュアウトし、領域ラベル「６５」の演算結果が外部メモリ１０６から転送される。
【００７８】
続いて、３１番目の領域ラベル「６３」の演算結果が要求されると、領域ラベル「１２４」の演算結果をキャッシュアウトし、領域ラベル「６３」の演算結果が外部メモリ１０６から転送される。そして、３３番目の領域ラベル「１２３」の演算結果が要求されると、領域ラベル「６４」の演算結果をキャッシュアウトし、領域ラベル「１２３」の演算結果が外部メモリ１０６から転送される。
【００７９】
４３番目の領域ラベル「１２４」の演算結果が要求されると、領域ラベル「１２５」の演算結果をキャッシュアウトし、領域ラベル「１２４」の演算結果が外部メモリ１０６から転送される。そして、５１番目の領域ラベル「１２５」の演算結果が要求されると、領域ラベル「６５」の演算結果をキャッシュアウトし、領域ラベル「１２５」の演算結果が外部メモリ１０６から転送される。
【００８０】
５４番目の領域ラベル「１８５」の演算結果が要求されると、領域ラベル「６３」の演算結果をキャッシュアウトし、領域ラベル「１８５」の演算結果が外部メモリ１０６から転送される。そして、５８番目の領域ラベル「６５」の演算結果が要求されると、領域ラベル「１２３」の演算結果をキャッシュアウトし、領域ラベル「６５」の演算結果が外部メモリ１０６から転送される。
【００８１】
上記動作によれば、７個所でミスヒットし、また、同一領域ラベルのデータをキャッシュアウトし、再び外部メモリ１０６から転送することを繰り返している。これに対して図９（ｂ）に示すように、入力データ制御部１０２による出力順序の入れ替えを行った場合には、以下のように処理される。
【００８２】
２３番目の領域ラベル「１２５」の演算結果が要求されると、領域ラベル「１２３」の演算結果をキャッシュアウトし、領域ラベル「１２５」の演算結果が外部メモリ１０６から転送される。そして、３０番目の領域ラベル１２３の演算結果が要求されると、領域ラベル「１２４」の演算結果をキャッシュアウトし、領域ラベル「１２３」の演算結果が外部メモリ１０６から転送される。
【００８３】
また、４１番目の領域ラベル「１２４」の演算結果が要求されると、領域ラベル「６４」の演算結果をキャッシュアウトし、領域ラベル「１２４」の演算結果が外部メモリ１０６から転送される。そして、５４番目の領域ラベル「６５」の演算結果が要求されると、領域ラベル「６３」の演算結果をキャッシュアウトし、領域ラベル「６５」の演算結果が外部メモリ１０６から転送される。
【００８４】
なお、ＦＩＦＯには領域ラベル「１８５」のデータが１画素分残っていて処理されていないが、前述したように、ブロックの最終画素処理時にＦＩＦＯの中の画素データは全て出力される。以上のような動作によれば、ミスヒットは４個所に削減されていることがわかる。
【００８５】
以上のように本実施形態においては、入力データ制御部１０２の機能により、キャッシュ１０５のミスヒットが減り、ヒット率が向上する。仮にキャッシュのデータサイズを１領域ラベル分増やすと、２５６バイト（２０４８ビット）のメモリサイズがさらに必要になる。一方、本実施形態における入力データ保持部２０１は、ＦＩＦＯ１段が４２ビットなので１領域ラベル分のバッファを増やすためのコストが抑えられる。このように、本実施形態のデータ処理装置１００によれば、回路規模の増加を抑えながら、キャッシュのヒット率を上げ、処理性能を向上させることができる。
【００８６】
（第２の実施形態）
前述したように、１ブロック中の画素は、はじめに配置した代表点の領域ラベル、またはその周囲の代表点の領域ラベルに割り振られるが、周囲のラベルに比べ、初期ラベルが占める割合が多くなる確率が高い。具体的には、３０×３０画素の１ブロック中に３×３個の代表点を配置するとき、初期状態の代表点を中心とした１０×１０画素の矩形領域には中心の代表点の領域ラベルが存在する確率が高い。つまり、特徴量の演算処理では代表点の領域ラベルの演算結果が参照される確率が高い。
【００８７】
そこで本実施形態においては、特徴量の演算処理を行っている座標の情報から、今後現れる頻度が高いと予測される領域ラベルを判定する。そして、それ以外の領域ラベルのデータは一旦ＦＩＦＯに複数個溜めてからまとめて出力することにより、キャッシュのミスヒットをより抑えるようにする。ただし、キャッシュに空きがある場合はそのまま出力しても良い。さらに、キャッシュにおいて、ミスヒットのリプレースするキャッシュラインを選択する際に、現れる頻度が高いと予測される領域ラベルを残すことにより、その後のミスヒットの確率を低減するようにする。以下、本実施形態について詳細に説明する。
【００８８】
図１０は、本実施形態に係るデータ処理装置１０００の構成例を示すブロック図である。以下、図１６（ａ）に示す画像データを処理する例について説明する。
図１０において、入力データ制御部１００１は、図１の入力データ制御部１０２と略同一の機能を備えている。さらに入力データ制御部１００１は、座標（Ｘ，Ｙ）のデータを受信してＦＩＦＯに溜めずに優先して処理する優先領域ラベルを判定し、キャッシュ更新時に残す優先タグを生成する機能を備えている。キャッシュ１００２は、図１のキャッシュ１０５と略同一の機能を備え、さらにキャッシュ１００２のリプレース時に優先タグの情報を使用する機能を備えている。
【００８９】
図１１（ａ）は、本実施形態の入力データ制御部１００１の内部構成例を示すブロック図である。以下、図１の入力データ制御部１０２との差分についてのみ説明する。
データパス制御部１１０１は、図２のデータパス制御部２０５と略同一の機能を備え、さらに座標（Ｘ，Ｙ）のデータを受信し、優先して処理する優先領域ラベルを判定して優先領域ラベルに対応する優先タグを生成する機能を備えている。本実施形態で処理する画像データは、初期ラベルが３×３個割り当てられた３０×３０画素のブロックであり、ラスタ順にスキャンして処理するとき、１０ラインずつ、優先領域ラベルを切り替える。そして、１０ライン中に配置された３つの初期ラベルを出現する頻度の高い優先領域ラベルとする。
【００９０】
図１７は、処理するＸ，Ｙ座標と優先領域ラベルとの関係を説明するための図である。例えば、領域１７０１の座標は領域ラベル０，１，２を優先領域ラベルとし、領域１７０２の座標は領域ラベル６０，６１，６２を優先領域ラベルとし、領域１７０３の座標は領域ラベル１２０，１２１，１２２を優先領域ラベルとする。
【００９１】
本実施形態の場合は、領域が切り替わるときの座標（Ｘ，Ｙ）＝（X%30=0, Y%10=0）を処理する時に、属する先頭の優先領域ラベルを60*(Y/10)+X/10で求める。したがって、優先領域ラベルは60*(Y/10)+X/10、60*(Y/10)+X/10+1、60*(Y/10)+X/10+2と判定できる。
【００９２】
図１１（ｂ）は、本実施形態のキャッシュ１００２の内部構成例を示すブロック図である。以下、図５に示すキャッシュ１０５の内部構成との差分についてのみ説明する。
キャッシュ１００２が備えるキャッシュコントローラ１１０２は、図５のキャッシュコントローラ５０６の機能に加えてキャッシュ１００２のリプレースに優先タグの情報を使用する機能を備えている。キャッシュコントローラ１１０２では優先タグと指定されているタグもＬＲＵキューで管理され、優先タグが切り替わったときにリプレースの対象となる。
【００９３】
図１２は、本実施形態のデータパス制御部１１０１による処理手順の一例を示すフローチャートである。以下、図４に示した処理との差分についてのみ説明する。
まず、画素データ（Ｒ，Ｇ，Ｂ，Ｘ，Ｙ）と領域ラベル情報（Ｌ）とを受信すると処理がスタートする。そして、座標（Ｘ，Ｙ）のデータから、優先領域ラベルの切り替えタイミングか否かを判定する（Ｓ１２００）。この判定の結果、切り替えタイミングである場合は、優先する３つの優先領域ラベルを決定し（Ｓ１２０１）、続いて、決定した優先領域ラベルから、優先タグを算出する（Ｓ１２０２）。一方、Ｓ１２００の判定の結果、切り替えタイミングでない場合は、Ｓ１２０１及びＳ１２０２の処理をスキップして、Ｓ１２０３に遷移する。
【００９４】
次に、受信した領域ラベル情報（Ｌ）が優先領域ラベルに一致するか否かを判定する（Ｓ１２０３）。この判定の結果、優先領域ラベルに一致する場合はＳ４０３へ遷移し、セレクタＳＥＬを"１１"とし、画素データ選択部２０３および領域ラベル選択部２０４は、それぞれ入力画素データ、入力領域ラベルをそのまま出力する。一方、Ｓ１２０３の判定の結果、優先領域ラベルに一致しない場合はＳ４０１へ遷移し、第１の実施形態と同様の処理を行う。
【００９５】
図１３は、本実施形態のキャッシュコントローラ１１０２による処理手順の一例を示すフローチャートである。以下、図６に示した処理との差分についてのみ説明する。
Ｓ６０１にてミスヒットと判定され、Ｓ６０２でクリアされているバリッドフラグがないと判定されると、ＬＲＵキューを先頭からサーチし、優先タグに一致しないタグであって最も先頭に近いタグをリプレースするキャッシュラインに選択する（Ｓ１３０１）。
【００９６】
図１４は、入力データ制御部１００１における入力順序及び出力順序を比較した例を示す図であり、図１６（ａ）に示す画像データのうち、（Ｘ，Ｙ）＝（３０，２０）から２ラインを処理した一例を示す。図１４（ａ）は、領域分割部１０１が生成した分割済みの領域ラベルの出力順序を示し、図１４（ｂ）は、入力データ制御部１００１の出力順序を示している。
【００９７】
入力データ制御部１００１は、１番目の入力画素データと領域ラベル「６３」とを取得すると、入力画素データの座標データ（Ｘ，Ｙ）が（３０，２０）であるので、優先領域ラベルの切り替えタイミングであると判定する（Ｓ１２００／Ｔｒｕｅ）。そして、領域ラベル「１２３」、「１２４」、「１２５」を優先領域ラベルとし（Ｓ１２０１）、優先タグとしてキャッシュ１００２に出力する（Ｓ１２０２）。Ｓ１２０３では優先領域ラベルと判定されないが、Ｓ４０４の判定では、クリアされているバリッドフラグがあるため、そのまま出力される（Ｓ４０３）。以降は領域ラベル「１２３」、「１２４」、「１２５」、及びキャッシュ１００２にタグが入っている「６３」以外はＦＩＦＯに格納される。
【００９８】
以上のように図１２の処理手順に従って入力データ制御部１００１が処理を行うと、図１４（ｂ）に示す順序で出力される。また、図１４（ｂ）においては、特徴量演算部１０３で処理したときのキャッシュ１００２のミスヒット個所をレ点で示している。
【００９９】
図１３のフローチャートに従うと、キャッシュ１００２では、以下のように処理を行う。２０番目の領域ラベル「１２５」の演算結果が要求されると、優先領域ラベルでない領域ラベル「６３」の演算結果をキャッシュアウトし、領域ラベル「１２５」の演算結果が外部メモリ１０６から転送される。また、５１番目の領域ラベル「６５」の演算結果が要求されると、優先領域ラベルでない領域ラベル「６４」の演算結果をキャッシュアウトし、領域ラベル「６５」の演算結果が外部メモリ１０６から転送される。なお、ＦＩＦＯには領域ラベル「６３」のデータが３画素、領域ラベル「１８５」のデータが１画素残っていて処理されていないが、ブロックの最終画素処理時にＦＩＦＯの中のデータは全て処理される。
【０１００】
以上のように本実施形態によれば、出現する頻度の高い「１２３」、「１２４」、「１２５」はキャッシュアウトされず、出現する頻度の低い「６５」、「６３」、「１８５」はＦＩＦＯで一旦溜めてから処理する。このため、ミスヒットをより低減させることができる。
【０１０１】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１０２】
１０２  入力データ制御部
１０３  特徴量演算部
１０５  キャッシュ
１０６  外部メモリ
【図１】
0006463081.tif 000002
【図２】
0006463081.tif 000003
【図３】
0006463081.tif 000004
【図４】
0006463081.tif 000005
【図５】
0006463081.tif 000006
【図６】
0006463081.tif 000007
【図７】
0006463081.tif 000008
【図８】
0006463081.tif 000009
【図９】
0006463081.tif 000010
【図１０】
0006463081.tif 000011
【図１１】
0006463081.tif 000012
【図１２】
0006463081.tif 000013
【図１３】
0006463081.tif 000014
【図１４】
0006463081.tif 000015
【図１５】
0006463081.tif 000016
【図１６】
0006463081.tif 000017
【図１７】
0006463081.tif 000018