(57)【要約】【課題】プロセッサと組み合わせて使用した時に、プロセッサによるバスアクセス回数を低減して、バスアクセスにかかるオーバーヘッドを削減できるキャッシュメモリの実現。【解決手段】データ格納部21と、データ転送装置14によりまとめて転送されるライトデータを書き込むライト部22,24と、プロセッサ11からのリードアクセスに対してデータを読み出すリード部23,25と、転送される予定のライトデータの転送終了アドレスおよび実際に転送が行われたアドレスの先頭位置を保持するレジスタ26,28,31と、を備え、リード部は、先頭位置と先頭位置からリードデータがデータ格納部に記憶されている場合には読み出しを行い、転送終了アドレスと先頭位置との間の場合には対象データがデータ格納部に書き込まれるまで待機し、それ以外の場合は、ＭＩＳＳを通知するキャッシュメモリ。【選択図】図３
2012038262.tif 000002
【特許請求の範囲】
【請求項１】
データ格納部と、
データ転送装置によりまとめて転送されるライトデータを、前記データ格納部に書き込むライト部と、
プロセッサからのリードアクセスに対して、前記データ格納部からデータを読み出すリード部と、
まとめて転送される予定のライトデータの転送終了アドレスおよび実際に転送が行われたアドレスの先頭位置を保持するレジスタと、を備え、
前記リード部は、前記リードアクセスの対象データが前記先頭位置と前記先頭位置から前記データ格納部の容量分戻った位置との間の場合には、前記データ格納部からデータの読み出しを行い、前記リードアクセスの対象データが前記転送終了アドレスと前記先頭位置との間の場合には、前記データ転送装置によってアクセス対象データが前記データ格納部に書き込まれるまでデータ読み出しを待機し、それ以外の場合は、前記プロセッサにリードアクセスのＭＩＳＳを通知する、ことを特徴とするキャッシュメモリ。
【請求項２】
データ転送装置により並列にまとめて転送される複数ストリームのライトデータを記憶する、複数の請求項１記載のキャッシュメモリと、
プロセッサからのリードアクセスに対して、前記複数のキャッシュメモリから、前記リードアクセスの対象データが存在するキャッシュメモリを選択してデータを読み出して前記プロセッサに出力する選択部と、を備えることを特徴とするキャッシュメモリ。
【請求項３】
複数のプロセッサと、
前記複数のプロセッサに対応してそれぞれ設けられた複数のストリームキャッシュと、
主記憶と、
前記主記憶のデータを前記複数のストリームキャッシュに転送するデータ転送装置と、を備え、
各ストリームキャッシュは、ステージレジスタと、キャッシュメモリと、を備え、
前記複数のストリームキャッシュの前記複数のステージレジスタは、前記データ転送装置からのデータ転送に対して線型に接続されてシフトレジスタを形成し、
前記複数のストリームキャッシュの前記複数のキャッシュメモリは、請求項１記載のキャッシュメモリであることを特徴とするデータ処理装置。
【請求項４】
前記データ転送装置は、ライトデータを複数のストリームで並列にまとめて転送し、
各ストリームキャッシュは、前記複数のストリームに対応した複数のステージレジスタと、
請求項１記載の複数のキャッシュメモリと、
前記プロセッサからのリードアクセスに対して、前記複数のキャッシュメモリから、前記リードアクセスの対象データが存在するキャッシュメモリを選択してデータを読み出して出力する選択部と、を備える請求項３記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリ、およびキャッシュメモリを有するデータ処理装置に関する。
【背景技術】
【０００２】
プロセッサを用いて処理を行う場合は、処理対象の入力データが主記憶（メインメモリ）に格納されていることが一般的である。しかしプロセッサの処理速度に比べて、主記憶のデータアクセスの速度は遅いことが知られている。これは、プロセッサは単純な命令を１クロックサイクルで実行できるのに対して、主記憶はより低いクロック周波数で動作しており、しかもデータアクセスを開始できるまでにプロセッサのクロックサイクル換算で１００サイクル程度かかることがあるためである。すなわち、プロセッサから見るとデータアクセスによるレイテンシが演算命令に対して１００倍程度大きく見える。一方、一般的に使われる主記憶では、バースト転送を用いて連続した複数のデータを効率的に読み出すことができる。バースト転送を用いた場合は、一度データアクセスを開始した後では、メインメモリのクロック周波数またはその倍程度のレートで連続してデータを得ることができる。
【０００３】
上記のプロセッサと主記憶の速度差を吸収するために一般的なプロセッサシステムではキャッシュメモリが用いられている。キャッシュメモリは、プロセッサと同程度（プロセッサのクロック周波数で３サイクル程度）の速度でアクセスできる。キャッシュメモリは主記憶の一部を写像している。キャッシュメモリは主記憶の写像であるため、プロセッサが必要とするデータがキャッシュメモリに存在する場合（ＨＩT）と存在しない場合（ＭＩＳＳ）が起きる。必要とするデータがキャッシュメモリに存在しない場合は、主記憶へのアクセスを行う必要がある。この時、必要とするデータを近傍のデータと一緒にまとめて取得しておきキャッシュメモリに格納しておくことにより、次回以降の近傍へのデータアクセスを行った場合には、データがキャッシュメモリに存在している状態になる。このように、キャッシュメモリを使用することにより、メインメモリに対してプロセッサが直接アクセスする場合に比べて効率的にアクセスできる。
【０００４】
キャッシュメモリは、一般的にはプロセッサから要求されたデータがキャッシュメモリに存在しないことが分かってから主記憶へのアクセスを行う。そのため、プロセッサがキャッシュメモリにアクセスした際に、必要なデータがキャッシュメモリに存在しない場合は、主記憶からキャッシュメモリへのデータ転送が行われるまでプロセッサにはデータが供給されず、プロセッサの動作は停止してしまう。
【０００５】
このような動作の問題点を改善するために、あらかじめ必要なデータをキャッシュに入れておくキャッシュプリロード（またはプリフェッチ）という手法が知られている。キャッシュプリロードは、プログラム中にキャッシュプリロードの指示が明確に記述されており、記述に従ってプリロードが行う仕組み、過去のアクセスの傾向から次にアクセスされる可能性のあるアドレスを予測して自動的にプリロードを行う方法などが知られている。
【０００６】
一方、処理の高速化を図るため、従来から複数のプロセッサを使用して処理を並列に実行する並列処理方法、および並列処理を実行するための複数のプロセッサを含む並列処理システムが各種提案されている。また、近年の半導体技術の集積度の向上により、複数個のプロセッサエレメントを含むマルチコアプロセッサが実現されている。
【０００７】
メディア処理，画像処理等においては，多数のデータに対して依存関係の無い処理を行うことが多い。そこで、図１の（Ａ）に示すように、画面全体１を複数のサブ画面２に分割して複数のプロセッサ（ＰＥ）１１に分配し、複数のＰＥ１１は分配されたサブ画面２の処理を並列に行う。画像データは、画面全体１から、読み出し位置をシフトしながら複数のラインのデータを並列に読み出す。読み出されたデータは順に各ＰＥに供給され、各ＰＥは対象とするサブ画面のデータが供給された時に取り込む。これにより、非常に効率的に並列処理を行うことができる。
【０００８】
具体的には、図１の（Ｂ）に示すような隣接する３×３の画素データを使用する画像のフィルタ処理の場合、各画素の演算処理は、他の画素の処理結果に対して依存関係が無いため、並列計算や計算順序の入れ替えは自由である。そこで、各ＰＥは、サブ画面内の画像データに対して独立してフィルタ処理を行い、それぞれの出力データを求める処理を並列に行うことができる。この時、画像データの読み出し（リード）アクセスには連続して近傍のデータがアクセスされるという局所性が存在する。その一方で処理が進むにつれて画面における処理対象範囲が移動していくため、過去に使ったデータが再利用されるという局所性は低い。
【０００９】
図２は、上記の画像処理を行うデータ処理装置の構成を示すブロック図である。データ処理装置は、複数のプロセッサ（ＰＥ）１１と、複数のＰＥ１１に対応して設けられた複数のストリームキャッシュ１２と、画像データなどを記憶した主記憶１３と、主記憶１３に記憶された画像データを読み出して、複数のストリームキャッシュ１２に供給するデータ転送装置１４と、複数のＰＥ１１が主記憶１３にアクセスするためのバス１５と、を有する。データ処理装置全体の制御は、複数のＰＥ１１のうちの１個が行う場合や、図示していない全体制御部が行う場合がある。ＰＥ１１のうちの１個が全体の制御を行う場合には、そのＰＥは、バス１５を介して、他のＰＥ１１および主記憶１３にアクセス可能であると共に、図示していない信号線によりデータ転送装置１４にアクセスする。図示していない全体制御部が全体の制御を行う場合も同様である。
【００１０】
ストリームキャッシュ１２は、シフトレジスタ（ステージレジスタ）と、データ格納部と、データ入出力部と、を有する。データ入出力部は、シフトレジスタのデータをデータ格納部に書き込むと共に、プロセッサ１１からのリードアクセスに応じてデータ格納部に書き込まれたデータを読み出す。データ転送装置１４は、主記憶１３に記憶された画像データを、読み出し位置をシフトしながら複数のラインのデータを並列に読み出し、複数のストリームキャッシュ１２に供給する。複数のストリームキャッシュ１２のシフトレジスタは、供給されるデータに対してシフトレジスタ列を形成し、供給されたデータは、ストリームキャッシュ１２内のシフトレジスタを順次シフトしながら、初段のシフトレジスタから最終段のシフトレジスタまで進む。各ストリームキャッシュ１２内のデータ入出力部は、シフトレジスタに処理対象の画像データがきた時に、シフトレジスタのデータをデータ格納部に書き込む。このようにして、各ストリームキャッシュ１２には、１画素ずつずれた処理対象の画素ブロックが保持される。
【００１１】
画像処理に特化したデータ処理装置においても、生成されたアドレスを用いてあらかじめキャッシュメモリに主記憶のデータをプリロードしておく方法が知られている。しかし、いずれの方法も、プロセッサ（またはプロセッサに接続されたキャッシュメモリ）が主体的に主記憶にデータアクセスを行う仕組みになっている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００４−５４６４６号公報
【特許文献２】特開２００５−３１１７４５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
これまで、キャッシュメモリでは、プロセッサがアクセスしたデータがキャッシュにない場合に初めて主記憶へのバスアクセスが行われていた。もしくは、プログラムないしはハードウェアが、次に必要となるデータを予測してプリフェッチを行い、あらかじめデータをキャッシュに入れておく手法（キャッシュプリロード、キャッシュプリフェッチ）が行われていた。
【００１４】
いずれの手法も、プロセッサがデータを必要とするタイミングでバスアクセスが行われるという点では同じであった。そのため、特にプロセッサやデータ転送装置が複数個含まれているシステムの場合、バスやメモリのポート等の資源を奪い合う競合が起き、性能低下を招くという問題があった。
一方で，プロセッサが予測された必要データ以外へのアクセスできないよう抑止する機構を設けることにより、バスやメモリのポート等の資源を奪い合う競合をなくすことが可能である。しかし予測が間違っており、必要なタイミングで必要なデータがプロセッサに届かない場合、プロセッサは以降の処理を続行できなくなってしまう。
すなわち、プロセッサが想定されるどのようなアクセスを行った場合においても、必要なデータが必要なタイミングに必ず届くようにデータアクセスを制御しなければならない。特に処理対象のデータによって、以降の必要データが変わるようなケースにおいて、上記の制御は困難である。
【課題を解決するための手段】
【００１５】
発明の一観点によれば、データ格納部と、データ転送装置によりまとめて転送されるライトデータを、データ格納部に書き込むライト部と、プロセッサからのリードアクセスに対して、データ格納部からデータを読み出すリード部と、まとめて転送される予定のライトデータの転送終了アドレスおよび実際に転送が行われたアドレスの先頭位置を保持するレジスタと、を備え、リード部は、リードアクセスの対象データが先頭位置と先頭位置からデータ格納部の容量分戻った位置との間の場合には、データ格納部からデータの読み出しを行い、リードアクセスの対象データが転送終了アドレスと先頭位置との間の場合には、データ転送装置によってアクセス対象データがデータ格納部に書き込まれるまでデータ読み出しを待機し、それ以外の場合は、プロセッサにリードアクセスのＭＩＳＳを通知するキャッシュメモリが提供される。
【発明の効果】
【００１６】
上記の観点によれば、データ転送装置は、バスおよびキャッシュメモリに最適な単位（通常プロセッサが要求するよりも大きいデータサイズ）で連続して主記憶に対してアクセスすることが可能であり、プロセッサによるバスアクセス回数を減少させ、バスアクセスにかかるオーバーヘッドを削減できる。
またプロセッサに対してＭＩＳＳが通知されることにより、データ転送装置から転送されてくるデータ以外のデータをプロセッサが要求した場合においても、破綻することなく処理を続行することができる。
【００１７】
また、複数のプロセッサが含まれ、データ転送装置が複数のストリームで主記憶のデータを供給する場合には、プロセッサがバスアクセスを行う頻度を減少させることにより、直接的にバスアクセスを行うマスタデバイスの個数を減少させることができ、バスアクセス競合の頻度が低下して、性能低下を抑制することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、画像処理等における複数のプロセッサを利用した並列処理を説明する図である。
【図２】図２は、図１の画像処理を行う一般的なデータ処理装置の構成を示すブロック図である。
【図３】図３は、第１実施形態のデータ処理装置の構成を示す図である。
【図４】図４は、データ格納部のメモリ空間と、その空間に対してプロセッサがリードアクセスを行った時のリードステータス（ＨＩＴ／ＷＡＩＴ／ＭＩＳＳ）の関係を示す図である。
【図５】図５は、データ格納部のリードステータス（ＨＩＴ／ＷＡＩＴ／ＭＩＳＳ）を示す図である。
【図６】図６は、リード保証ワード数レジスタとライトアクセスの対応を示す図である。
【図７】図７は、データ格納部へのライト処理を示すフローチャートである。
【図８】図８は、プロセッサによるデータ格納部へのリード処理を示すフローチャートである。
【図９】図９は、第１実施形態における動作シーケンスを示す図である。
【図１０】図１０は、第１実施形態における別の動作シーケンスを示す図である。
【図１１】図１１は、第２実施形態のデータ処理装置の構成を示す図である。
【図１２】図１２は、第２の実施形態での各ストリームキャッシュのライト処理のフローチャートである。
【図１３】図１３は、第３実施形態のデータ処理装置の構成を示す図である。
【図１４】図１４は、第４実施形態のデータ処理装置の構成を示す図である。
【図１５】図１５は、各ストリームキャッシュ２の構成を示す図である。
【発明を実施するための形態】
【００１９】
図３は、第１実施形態のデータ処理装置の構成を示す図である。第１実施形態のデータ処理装置１０は、プロセッサが１個の場合である。したがって、第１実施形態のデータ処理装置１０は、図２の構成で、プロセッサ１１とストリームキャッシュ１２が１組設けられている場合に対応する。このような場合、ストリームキャッシュとは呼ばずに単にキャッシュと呼ぶので、ここでもそのように称する。
【００２０】
第１実施形態のデータ処理装置１０は、プロセッサ（ＰＥ）１１と、キャッシュメモリ２０と、主記憶１３と、データ転送装置１４と、バス１５と、リード保証ワード数レジスタ３０と、開始／終了アドレスレジスタ３１と、を有する。キャッシュメモリ２０、リード保証ワード数レジスタ３０および開始／終了アドレスレジスタ３１以外の部分は、図２に示したものと同じである。
【００２１】
プロセッサ１１は、一般的なプロセッサまたはプロセッサエレメントである。プロセッサ１１は、キャッシュメモリ２０に対してリード（読み出し）アクセスを行い、リードステータスがＨＩＴであればリードデータを読み出して処理し、ＷＡＩＴであればリードデータが供給されるまで待ち、ＭＩＳＳであればバス１５にアクセスして主記憶１３からリードを行う。後述するように、キャッシュメモリ２０は、リードデータが供給可能となった時にリードステータスをＨＩＴに変更するなどして、プロセッサ１１のリードデータ待ちを解除する。なお、図２に関連して説明したように、プロセッサ１１は、バス１５を介して主記憶１３にアクセスすると共に、図示していない信号線によりデータ転送装置１４にアクセスする。
【００２２】
データ転送装置１４は、ＤＭＡＣ(Direct Memory Access Controller)やプリフェッチ機構などの一般的なデータ転送装置である。プロセッサ１１は、あらかじめ転送すべきメモリ領域のアドレス範囲をデータ転送装置１４に設定し、データ転送装置１４は設定されたアドレス範囲のデータの転送を開始する。
【００２３】
主記憶１３は、共有キャッシュメモリ、外部キャッシュメモリなどの中位の記憶階層、メインメモリなどの下位の記憶階層から構成される。ここでは、最低限何らかのメインメモリが接続されていればよい。
【００２４】
バス１５は、一般的なバスであればよい。
【００２５】
キャッシュメモリ２０は、データ格納部２１と、ライト制御部２２と、リード制御部２３と、ライトアドレス生成部２４と、リードアドレス生成部２５と、ネクストアドレスレジスタ２６と、ステータスレジスタ２７と、オフセットレジスタ２８と、先頭アドレスレジスタ２９と、を有する。
【００２６】
データ格納部２１は、データ転送装置１４から転送されたデータが格納されるメモリである。データ格納部２１は、主記憶１３より小さいサイズ、例えば１Ｋバイトなどの容量サイズを有し、下位の記憶階層である主記憶１３より短時間でアクセスできるキャッシュメモリとして機能し、ある瞬間では主記憶１３の一部の空間切り取って写像している。
【００２７】
ライト制御部２２は、データ転送装置１４からのライトアクセスを受け付けて、各レジスタ値を参照してライトアクセスが可能であるかを判定し、可能であればデータ格納部２１にライト（書き込み）データを格納し、かつ各レジスタを適切に更新する。
【００２８】
リード制御部２３は、プロセッサ１１からのリード（読み出し）アクセスを受け付けて、各レジスタ値を参照してリードアクセスがＨＩＴ／ＷＡＩＴ／ＭＩＳＳのいずれの状態になるかを判定し、判定結果をリードステータスとして出力し、かつ各レジスタ値を適切に更新する。
【００２９】
ライトアドレス生成部２４は、データ転送装置１４から出力されたライトアドレスをデータ格納部２１上でのアドレスに変換する。具体的には、データ格納部上でのアドレスは、ライトアドレスＭＯＤデータ格納部サイズ（ライトアドレスをデータ格納部サイズで除した余り）であり、データ格納部２１のサイズを２のべき乗とした場合、ライトアドレスの下位ビットに相当する。
【００３０】
リードアドレス生成部２５は、プロセッサ１１から出力されたリードアドレスをデータ格納部２１上でのアドレスに変換する。具体的には、データ格納部上でのアドレスは、リードアドレスＭＯＤデータ格納部サイズ（リードアドレスをデータ格納部サイズで除した余り）であり、データ格納部２１のサイズを２のべき乗とした場合、リードアドレスの下位ビットに相当する。
【００３１】
したがって、ライト制御部２２およびライトアドレス生成部２４が、データ格納部２１への転送データの書き込みを行うライト部を形成する。また、リード制御部２３およびリードアドレス生成部２５が、プロセッサ１１からのリードアクセスに応じてデータ格納部２１からのデータ読み出しを行うリード部を形成する。
【００３２】
ネクストアドレスレジスタ２６は、次回ライトアクセス位置を示すレジスタであり、ライトアクセス完了後にライトアドレス（メインメモリ上のアドレス）＋１ワードのアドレスが設定される。ここで、ワードは、ライトアクセスの単位であり、１回の転送指示により転送されるデータ量である。ネクストアドレスレジスタの設定値ＭＯＤデータ格納部サイズ（ネクストアドレスレジスタの設定値をデータ格納部サイズで除した余り）は、データ格納部２１上でのアドレスを示す。具体的には、データ格納部サイズを２のべき乗とした場合、レジスタの値は、ネクストアドレスレジスタ２６の下位ビットである。
【００３３】
ステータスレジスタ２７は、データ格納部２１が、「無効」、「一部有効」または「有効」の３状態のいずれであるかを示す。無効は、データ格納部２１のデータはすべて無効である状態を示す。一部有効は、データ格納部２１のオフセットレジスタの指す位置（データ格納部２１上でのアドレス）からネクストアドレスレジスタ２６（データ格納部２１上でのアドレス）−１ワードまでのデータが有効な状態である。有効は、データ格納部２１のデータはすべて有効な状態である。
【００３４】
オフセットレジスタ２８は、ステータスレジスタ２７が一部有効の状態において、データが有効な範囲を示す。オフセットレジスタ２８には、データ格納部２１上でのアドレスが設定される。
【００３５】
先頭アドレスレジスタ２９は、リードアクセス時にリードアドレス（主記憶１３上のアドレス）が設定されるレジスタである。
【００３６】
リード保証ワード数レジスタ３０は、先頭アドレスレジスタ２９の指す位置から、データ転送開始アドレス方向に向かった方向に対して最低限リードできるワード数を設定するレジスタである。
【００３７】
開始／終了アドレスレジスタ３１は、データ転送の開始アドレスと、データ転送の終了アドレスを格納するレジスタである。
【００３８】
図４は、データ格納部２１のメモリ空間と、その空間に対してプロセッサ１１がリードアクセスを行った時のリードステータス（ＨＩＴ／ＷＡＩＴ／ＭＩＳＳ）の関係を示す。図４を参照して、第１実施形態におけるキャッシュメモリ２０の動作を説明する。
【００３９】
図４は、キャッシュメモリ２０が動作中のある瞬間を示している。ある瞬間では、データ格納部２１が主記憶１３のアドレス空間の一部の写像になっている。具体的には、”ネクストアドレスレジスタ−データ格納部２１のサイズ”から”ネクストアドレスレジスタ−１ワード”までの領域のデータが写像されている。なお、以降の説明の前提条件としてデータ転送装置１４によるデータ転送がアドレス昇順に行われるとする。
【００４０】
ＨＩＴするケースは、ネクストアドレスレジスタ２６が指すアドレス位置−１ワードから、転送開始アドレスの方向にデータ格納部２１のサイズ分の領域に対するリードアクセスはＨＩＴとなり、データ格納部２１からリードアクセス対象のデータを読み出すことができる。
【００４１】
ＭＩＳＳするケースは、ネクストアドレスレジスタ２６が指すアドレス位置−１ワードから、転送開始アドレスの方向にデータ格納部２１のサイズ分の位置のアドレスをデータ格納部２１の末尾アドレスと定義する。転送開始アドレス以降で、末尾アドレスまでの領域に対するリードアクセスはＭＩＳＳとなる。
【００４２】
ＷＡＩＴになるケースは、ネクストアドレスレジスタ２６が指すアドレス位置から転送終了アドレスまでの領域に対するリードアクセスの場合である。ネクストアドレスレジスタ２６は、データ転送装置１４からデータ格納部２１に該当位置のデータが格納されたタイミングで更新される。この更新により、ネクストアドレスレジスタ２６が指すアドレス位置が、リードアクセス対象のアドレス位置を超えたタイミングでリードアクセスが可能となる。以降その領域に対するリードアクセスはＨＩＴとなる。
【００４３】
なお、転送開始アドレスより前のアドレス位置および転送終了アドレスを超えた領域へのリードアクセスもＭＩＳＳとなる。
【００４４】
図５は、データ格納部２１のリードステータス（ＨＩＴ／ＷＡＩＴ／ＭＩＳＳ）を示す図である。図５を参照してデータ格納部２１へのデータ格納方法について説明する。
【００４５】
データ格納部２１は，次回書き込み位置がネクストアドレスレジスタによって指示されるリングバッファの構造を有する。ステータスレジスタ２７が無効を示している場合、データ格納部２１内部は無効である。この状態ではいかなるリードアクセスもＨＩＴにはならない。この状態でライトアクセスが行われると、ステータスレジスタ２７は一部有効に更新される。
【００４６】
ステータスレジスタ２７が一部有効を示している場合、データ格納部２１内部は、末尾からオフセットレジスタ２８が指す量とネクストアドレスレジスタ２６が指す位置の間のみ有効となり、該当領域へのリードアクセスはＨＩＴとなる。この状態でライトアクセスが行われ、ネクストアドレスレジスタ２６が、末尾からオフセットレジスタ２８が指す量に達した際に、ステータスレジスタ２７は有効に更新される。
【００４７】
ステータスレジスタ２７が有効を示している場合、データ格納部２１内部は全領域で有効である。リングバッファであるため、ネクストアドレスレジスタ２６の位置を境に写像のアドレスは不連続となる。
【００４８】
図６は、リード保証ワード数レジスタ３０とライトアクセスの対応を示す図である。ライトアクセス時に先頭アドレスレジスタ２９が指す位置−リード保証ワード数レジスタ３０の値分の位置に、ネクストアドレスレジスタ２６が達していない場合は、ライトアクセスが許可される。ネクストアドレスレジスタ２６に達している場合は、ライトアクセスが保留され、リードアクセスが行われ先頭アドレスレジスタ２９が更新されることによって、保留されたライトアクセスが再開される。
【００４９】
図７は、データ格納部２１へのライト処理を示すフローチャートである。この処理は、ライト制御部２２のハードウェア（ソフトウェアでも実現自体は可能）によって実現され、データ転送装置１４がライトアクセスを行った際にライト制御部２２により実行される。
【００５０】
ステップＳ１１では、ステータスレジスタ２７の状態を読み取り、データ格納部２１が無効であるか判定し、無効であればステップＳ２０に進み、無効でなければ（有効または一部有効）ステップＳ１３に進む。
【００５１】
ステップＳ２０では、ライトアドレスＭＯＤデータ格納部２１のサイズを演算して、演算結果をオフセットレジスタ２８に設定する。さらに、ライトアドレス＋１ワードＭＯＤデータ格納部２１のサイズを演算し、ネクストアドレスレジスタ２６に設定し、ステータスレジスタ２７を一部有効に変更する。
【００５２】
ステップＳ１３では、ステータスレジスタ２７の状態を読み取り、データ格納部２１が有効状態であるか判定し、有効状態であればステップＳ１４に進み、一部有効状態であればステップＳ１５に進む。
【００５３】
ステップＳ１４では、ネクストアドレスレジスタ２６の値≦先頭アドレスレジスタ２９の値−リード保証ワード数レジスタ３０の値が満たされるかを判定し、満たされればステップＳ１５に進み、満たされなければ満たされるまで待機する。
【００５４】
ステップＳ１５では、ネクストアドレスレジスタに、ライトアドレス＋１を代入する。
【００５５】
ステップＳ１６では、ネクストアドレスレジスタMODデータ格納部２１のサイズを演算し、演算結果がオフセットレジスタ２８の値と等しいかを判定し、等しければステップＳ１７に進み、等しくなければステップＳ１８に進む。
【００５６】
ステップＳ１７では、ステータスレジスタ２７を有効に変更する。
【００５７】
ステップＳ１８では、データ格納部２１のライトアドレスMODデータ格納部２１のサイズの位置にライトデータを格納する（書き込む）。
【００５８】
以上説明したライト処理を要約すると、以下の通りである。
【００５９】
（１）データ格納部２１の状態をステータスレジスタ２７から判定する。
【００６０】
（２）データ格納部２１が無効状態であればライトアドレスに基づいてオフセットレジスタ２８、ネクストアドレスレジスタ２６を設定し、ステータスレジスタ２７の値を一部有効に変更する。
【００６１】
（３）データ格納部２１が有効状態または一部有効状態であれば、ネクストアドレスレジスタ２６にライトアドレス＋１ワードを代入し、ネクストアドレスレジスタMODデータ格納部２１のサイズがオフセットレジスタと等しければ、ステータスレジスタを有効に変更する。
【００６２】
（４）ネクストアドレスレジスタ２６≦先頭アドレスレジスタ２９−リード保証ワード数レジスタ３０が満たされるまで待機し、満たされていれば（３）と同様の処理を行う。
【００６３】
（５）データ格納部２１のライトアドレスＭＯＤデータ格納部２１のサイズの位置にライトデータを格納する（書き込む）。
【００６４】
図８は、プロセッサ１１によるデータ格納部２１へのリード処理を示すフローチャートである。この処理は、リード制御部２３のハードウェア（ソフトウェアでも実現自体は可能）によって実現され、プロセッサ１１がロードアクセスを行った際にリード制御部２３により実行される。
【００６５】
ステップＳ２１では、ステータスレジスタ２７の状態を読み取り、データ格納部２１が有効または一部有効であるか判定し、有効または一部有効であればステップＳ２２に進み、有効または一部有効（無効）であればステップＳ２７に進む。
【００６６】
ステップＳ２２では、ネクストアドレスレジスタ２６の値−リードアドレス、すなわちアドレス差を演算する。
【００６７】
ステップＳ２３では、アドレス差が０より大きいかを判定し、大きければステップＳ２４に進み、大きくなければステップＳ２８に進む。
【００６８】
ステップＳ２４では、アドレス差がデータ格納部２１のサイズより大きいかを判定し、大きければステップＳ３０に進む。
【００６９】
ステップＳ２５では、ステータスレジスタ２７の状態が一部有効であるか判定し、一部有効であればステップＳ２６に進み、一部有効でなければ（有効であれば）ステップＳ２９に進む。
【００７０】
ステップＳ２６では、リードアドレス MOD データ格納部２１のサイズを演算し、演算結果がオフセットレジスタの値より大きいかを判定し、大きければステップＳ２９に進み、大きくなければステップＳ３０に進む。リードアドレス MOD データ格納部２１のサイズは、リードアドレスの下位ビットである。
【００７１】
一方、ステップＳ２１で、ステータスレジスタ２７が無効と判定された場合には、ステップＳ２７で、リードアドレスが開始アドレスレジスタより大きいかを判定し、大きければステップＳ２８に進み、小さければステップＳ３０に進む。
【００７２】
ステップＳ２８では、リードアドレスが終了アドレスレジスタより小さいかを判定し、小さければステップＳ３１８に進み、大きければステップＳ３０に進む。
【００７３】
ステップＳ２９では、プロセッサ１１にＨＩＴを通知すると共に、データ格納部２１からデータを読み出し、ステップＳ３２に進む。この場合、内部アドレス（データ格納部２１のアドレス）は、プロセッサ１１のリードアドレスＭＯＤデータ格納部２１のサイズである。
【００７４】
ステップＳ３０では、プロセッサ１１にＨＩＴを通知し、終了する。
【００７５】
ステップＳ３１では、プロセッサ１１にＷＡＩＴを通知すると共にステップＳ３２に進む。
【００７６】
ステップＳ３２では、先頭アドレスレジスタ２９の値がリードアドレス以下であるかを判定し、以下であればステップＳ３３に進み、以下でなければ終了する。
【００７７】
ステップＳ３３では、リードアドレスを先頭アドレスレジスタ２９に代入し、終了する。
【００７８】
以上説明したリード処理を要約すると、以下の通りである。
【００７９】
（１）データ格納部２１の状態をステータスレジスタから判定する。
【００８０】
（２）データ格納部２１が無効状態であればリードアドレスが開始アドレスレジスタ〜終了アドレスレジスタの範囲内かどうかを判定する。範囲内であればリードステータスＷＡＩＴをプロセッサ１１に通知する。範囲外であれば、リードステータスＭＩＳＳをプロセッサ１１に通知する。
【００８１】
（３）データ格納部が有効状態または一部有効状態であれば下記（４）〜（９）の処理を行う。
【００８２】
（４）ネクストアドレスレジスタ２６とリードアドレスのアドレス差を求める。具体的にはアドレス差＝ネクストアドレスレジスタ−リードアドレスである。
【００８３】
（５）０＜アドレス差を満たしていない場合、リードアドレス＜終了アドレスであればＷＡＩＴを、終了アドレス≦リードアドレスであればＭＩＳＳを通知する。
【００８４】
（６）０＜アドレス差を満たしている場合、ステータスレジスタ２７が有効であればアドレス差≦データ格納部サイズを満たしている場合ＨＩＴとなる。アドレス差＞データである場合はすでに有効なデータはデータ格納部から追い出されているため、ＭＩＳＳを通知する。
【００８５】
（７）０＜アドレス差を満たしている場合、ステータスレジスタ２７が一部有効であれば、アドレス差≦データ格納部２１のサイズかつオフセットレジスタ２８≦リードアドレスＭＯＤデータ格納部２１のサイズを満たしていればＨＩＴとなる。アドレス差＞データまたはオフセットレジスタ ２８＞ リードアドレスＭＯＤデータ格納部２１のサイズのいずれかが満たされる場合、開始アドレスより前のデータが要求されていることになるため、ＭＩＳSを通知する。
【００８６】
（８）ＨＩＴであれば、プロセッサ１１にＨＩＴを通知するとともに、データ格納部２１のリードアドレスＭＯＤデータ格納部２１のサイズの位置から読み出したデータをプロセッサ１１に出力する。
【００８７】
（９）ＨＩＴであれば、先頭アドレスレジスタ ≦ リードアドレスを満たしている場合、先頭アドレスレジスタ２９にリードアドレスを設定する。
【００８８】
図９は、第１実施形態における動作シーケンスを示す図である。
【００８９】
図９において、キャッシュメモリ２０の初期化後、プロセッサ１１は、Ｐで示すタイミングでキャッシュメモリ２０にリード（ｒｅａｄ）アクセスを行う。このリードアクセスの段階ではまだキャッシュメモリ２０のデータ格納部２１中に有効なデータが無いため、リードステータスレジスタはＷＡＩTであり、プロセッサ１１は、キャッシュメモリ２０にデータが書き込まれる（ｗｒｉｔｅ）まで待機する。プロセッサ１１の待機中に、データ転送装置１４は、データをキャッシュメモリ２０に転送し、データがキャッシュメモリ２０に書き込まれる（ｗｒｉｔｅ）。キャッシュメモリ２０へのデータの書き込みにより前述の条件が満たされると、Ｑで示す位置で、リードステータスはＨＩＴとなり、データのリードが行われる。
【００９０】
Ｒで示す位置でリード先頭アドレスからリード保証ワード数分の領域へのライトが行われると、ライトアクセスは待たされ、Ｓで示す位置でリードアクセスの結果リード先頭アドレスが更新されると、ライトアクセスが再開される。
【００９１】
図１０は、第１実施形態における別の動作シーケンスを示す図である。図１０の動作シーケンスは、Ｓで示す位置でライトアクセスが再開されるところまでは、図９の動作シーケンスと同じである。
【００９２】
図１０で、Ｔで示す位置において、プロセッサ１１が、データ転送装置１４により今後転送する予定の領域外へのリードアクセスが行われると、リードステータスはＭＩＳＳ状態となる。この状態になった場合には、プロセッサ１１は主記憶１３にアクセスするなどしてリードデータを得る。なお、フィルタ処理の場合には、一部の画像について処理が行われなくても大きな障害にならない場合があり、予定の領域外へのリードアクセスを行ったためにＭＩＳＳ状態となった場合には、処理を行わないようにしても良い。
【００９３】
図１１は、第２実施形態のデータ処理装置の構成を示す図である。第２実施形態のデータ処理装置は、図２の構成と同様に、複数のプロセッサ１１と複数のストリームキャッシュ１２が対応して設けられている場合に対応する。
【００９４】
各ストリームキャッシュ１２は、ステージレジスタ４０と、第１実施形態のキャッシュメモリ２０と、を有する。複数のストリームキャッシュ１２の複数のステージレジスタ４０は、供給されるデータに対してシフトレジスタ列を形成する。データ転送装置１４から初段のステージレジスタ４０に供給されたデータは、シフトレジスタ列を順次シフトしながら、最終段のステージレジスタ４０まで進む。各ステージレジスタ４０は、シフトするデータが、対応するプロセッサ１１で処理するデータである時には、ステージレジスタ４０に保持されているデータが有効であることをキャッシュメモリ２０に示す。
【００９５】
図１２は、第２の実施形態での各ストリームキャッシュ１２のライト処理のフローチャートである。
【００９６】
ステップＳ４１では、ステージレジスタ４０に保持されたデータが有効であるか判定し、有効であればステップＳ４３に進み、有効でなければステップＳ４２に進み、何もせずに終了する。
【００９７】
ステップＳ４３では、ステージレジスタ４０に保持されたコマンドを判定し、無効化コマンドであればステップＳ４４に進み、ステータスレジスタ２７を無効にして終了する。
【００９８】
ステップＳ４５からＳ５２は、図７のステップＳ１１からＳ１８と同じ処理である。
【００９９】
ステップＳ５３では、ステージレジスタ４０の内容を、次段のステージレジスタ２０に転送して終了する。
【０１００】
以上説明した第２実施形態の処理を要約すると、次の通りである。
【０１０１】
ステージレジスタ４０に有効なライトデータが保持されている場合は、図７の第１実施形態と同様の動作を行う。このときステージレジスタ４０に格納されているデータを次段のステージレジスタ（図１１の場合は右側のステージレジスタ）に転送する。このとき自身の段のステージレジスタに格納されたデータを消去する。（すなわちステージレジスタ４０はシフトレジスタになっている。）
ステージレジスタ４０に有効なライトデータが無い場合は何もしない。
【０１０２】
ステージレジスタ４０にライトデータだけでなく、キャッシュメモリの制御コマンドを入れる構成としてもよい。図１２の処理では、ライトコマンドと無効化コマンドをステージレジスタにデータと共に転送できる構成としている。ステージレジスタ４０の内容がライトコマンドだった場合は、図７の第１実施形態と同様の動作を行う。ステージレジスタ４０の内容が無効化コマンドであった場合は、ステータスレジスタ２７を無効化する。
【０１０３】
図１３は、第３実施形態のデータ処理装置の構成を示す図である。第３実施形態のデータ処理装置は、第１実施形態において、複数のデータストリームを扱えるように発展させたものである。
【０１０４】
図１３に示すように、第３実施形態のデータ処理装置は、プロセッサ１１に対応して設けられたキャッシュメモリユニット１６と、複数（図１３では４個）のデータ転送装置１４Ａ−１４Ｄを有する。キャッシュメモリユニット１６は、複数（図１３では４個）のキャッシュメモリ２０Ａ−２０Ｄと、選択部１７と、を有する。複数のキャッシュメモリ２０Ａ−２０Ｄのそれぞれは、第１実施形態のキャッシュメモリ２０と同じ構成を有する。複数のデータ転送装置１４Ａ−１４Ｄは、それぞれ対応するキャッシュメモリ２０Ａ−２０Ｄに、主記憶１３から読み出したデータを供給する。供給されたデータは、第１実施形態と同様のシーケンスで、キャッシュメモリ２０Ａ−２０Ｄに書き込まれる。
【０１０５】
選択部１７は、リードステータスがＨＩＴになっているキャッシュメモリのリードデータをプロセッサ１１に出力する。このとき選択部１７は、リードステータスＨＩＴをあわせてプロセッサ１１に出力する。もしリードステータスがＨＩＴになっているキャッシュメモリが複数個ある場合は、同じアドレスのデータが複数のキャッシュメモリに存在していることになるため、いずれかのキャッシュメモリのリードデータを選択すればよい。いずれのキャッシュメモリもリードステータスがＨＩＴでなく、いずれかのキャッシュメモリのリードステータスがＷＡＩTである場合、選択部１７はプロセッサ１１にリードステータスＷＡＩＴを出力する。すべてのキャッシュメモリのリードステータスがＭＩＳＳである場合に選択部１７は、プロセッサ１１にリードステータスＭＩＳＳを出力する。
【０１０６】
以上説明したように、第３実施形態では、１プロセッサあたり４個のキャッシュメモリ２０Ａ−２０Ｄを配置し、リードアクセス時に選択部においていずれかのキャッシュメモリから適切なリードデータ・リードステータスを選択する構成としている。図１３では４個のキャッシュメモリを配置しているが、必ずしも４個である必要はなく、数を増やしても減らしてもよい。
【０１０７】
図１４は、第４実施形態のデータ処理装置の構成を示す図である。第４実施形態のデータ処理装置は、第２実施形態において、複数のデータストリームを扱えるように発展させたものである。言い換えれば、第４実施形態のデータ処理装置は、第３実施形態のデータ処理装置を、複数のプロセッサ用に発展させたものである。
【０１０８】
図１４に示すように、第４実施形態のデータ処理装置は、複数（ここでは４個）のプロセッサ（ＰＥ）１１と、複数のＰＥ１１に対応して設けられた複数のストリームキャッシュ１２と、主記憶１３と、バス１５と、メインプリフェッチ部４１と、バッファ用キャッシュメモリ４２と、複数（ここでは４個）のサブプリフェッチ部４３Ａ−４３Ｄと、プリフェッチ設定レジスタ３３と、保証ワード数レジスタ３０と、を有する。メインプリフェッチ部４１、バッファ用キャッシュメモリ４２および複数のサブプリフェッチ部４３Ａ−４３Ｄは、データ転送装置１４を形成する。プリフェッチ設定レジスタ３３は、メインプリフェッチ部４１の動作に関係するレジスタ３４と、複数のサブプリフェッチ部４３Ａ−４３Ｄの動作に関係するレジスタ３５と、を有する。レジスタ３４は、メインプリフェッチ部４１の主記憶１３からのデータ読み出しが有効であるかを示す有効フラグと、その読み出し動作の開始／終了アドレスを記憶する。レジスタ３５は、複数のサブプリフェッチ部４３Ａ−４３Ｄに対応した複数のレジスタを有し、それぞれ複数のサブプリフェッチ部４３Ａ−４３Ｄのバッファ用キャッシュメモリ４２からのデータ読み出しが有効であるかを示す有効フラグと、その読み出し動作の開始オフセットを記憶する。保証ワード数レジスタ３０は、第１実施例のものと同じである。
【０１０９】
図１５は、各ストリームキャッシュ１２の構成を示す図である。各ストリームキャッシュ１２は、複数（ここでは４個）のステージレジスタ４０Ａ−４０Ｄと、複数（ここでは４個）のキャッシュメモリ（ＣＭ）２０Ａ−２０Ｄと、選択部１７と、を有する。ステージレジスタ４０Ａ−４０Ｄのそれぞれは、第２実施形態のステージレジスタ４０と同じであり、キャッシュメモリ２０Ａ−２０Ｄは、第１実施形態のキャッシュメモリ２０と同じであり、選択部１７は、第３実施形態の選択部１７と同じである。
【０１１０】
複数のストリームキャッシュ１２の対応する複数のステージレジスタ４０Ａは、サブプリフェッチ部４３Ａから供給されるデータに対してシフトレジスタ列を形成する。同様に、複数のステージレジスタ４０Ｂは、サブプリフェッチ部４３Ｂから供給されるデータに対してシフトレジスタ列を形成する。複数のステージレジスタ４０Ｃは、サブプリフェッチ部４３Ｃから供給されるデータに対してシフトレジスタ列を形成する。複数のステージレジスタ４０Ｄは、サブプリフェッチ部４３Ｄから供給されるデータに対してシフトレジスタ列を形成する。
【０１１１】
データ転送装置１４から初段のステージレジスタ４０に供給されたデータは、シフトレジスタ列を順次シフトしながら、最終段のステージレジスタ４０まで進む。各ステージレジスタ４０は、シフトするデータが、対応するプロセッサ１１で処理するデータである時には、ステージレジスタ４０に保持されているデータが有効であることをキャッシュメモリ２０に示す。
【０１１２】
メインプリフェッチャ４１は、主記憶１３に直接アクセスを行い、２次元の画像をバッファ用キャッシュメモリ４２読み出す。バッファ用キャッシュメモリ４２に格納されたデータは各ストリーム（画像の１ライン分）を担当するサブプリフェッチャ４３Ａ−４３Ｄによって読み出され、初段のステージレジスタに格納される。格納されたデータは、初段から順にシフトされ、後段のステージレジスタに順に格納されていく。また、キャッシュメモリ（ＣＭ）２０Ａ−２０Ｄはステージレジスタ４０Ａ−４０Ｄの内容を順にデータ格納部２１に格納していく。データがデータ格納部２１に十分にライトされた状態では、１要素ずつずれたデータがストリームキャッシュ１２に格納されており、各ＰＥ１１は１要素ずつずれたデータに対する処理を並列に行うことができる。
【０１１３】
以上説明したように、第１から第４実施形態では、プロセッサ１１によるバスアクセス回数を減少させ、データ転送装置は主記憶に最適な単位（通常プロセッサが要求するよりも大きいデータサイズである）で連続して主記憶へのアクセスを行うことを可能とし、バスアクセスにかかるオーバーヘッドを削減する。
【０１１４】
また複数のプロセッサやデータ転送装置が複数個含まれているシステムにおいては、プロセッサがバスアクセスを行う頻度を減少させることにより、直接的にバスアクセスを行うマスタデバイスの数を減らすことができ、競合の頻度が低下するため、プロセッサ数の増加に伴う個別の性能低下を抑止することが可能となる。
【０１１５】
以上、第１から第７実施形態を説明したが、各種の変形例が可能であり、例えば、第１から第７実施形態で説明した構成は適宜組み合わせることが可能である。
【０１１６】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【符号の説明】
【０１１７】
１１    プロセッサ
１２    ストリームキャッシュ
１３    主記憶
１４    データ転送装置
１５    バス
２０    キャッシュメモリ
２１    データ格納部
２２    ライト制御部
２３    リード制御部
２４    ライトアドレス生成部
２５    リードアドレス生成部
２６    ネクストアドレスレジスタ
２７    ステータスレジスタ
２８    オフセットレジスタ
２９    先頭アドレスレジスタ
３０    リード保証ワード数レジスタ
３１    開始／終了アドレスレジスタ
【図１】
2012038262.tif 000003
【図２】
2012038262.tif 000004
【図３】
2012038262.tif 000005
【図４】
2012038262.tif 000006
【図５】
2012038262.tif 000007
【図６】
2012038262.tif 000008
【図７】
2012038262.tif 000009
【図８】
2012038262.tif 000010
【図９】
2012038262.tif 000011
【図１０】
2012038262.tif 000012
【図１１】
2012038262.tif 000013
【図１２】
2012038262.tif 000014
【図１３】
2012038262.tif 000015
【図１４】
2012038262.tif 000016
【図１５】
2012038262.tif 000017