(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-16
(45)【発行日】2024-04-24
(54)【発明の名称】インタフェース装置、データ処理装置、キャッシュ制御方法、及びプログラム
(51)【国際特許分類】
G06F 13/38 20060101AFI20240417BHJP
G06F 12/084 20160101ALI20240417BHJP
H04N 1/00 20060101ALI20240417BHJP
H04N 1/21 20060101ALI20240417BHJP
G06T 1/60 20060101ALI20240417BHJP
【FI】
G06F13/38 340C
G06F13/38 340E
G06F12/084
H04N1/00 C
H04N1/21
G06T1/60 450D
(21)【出願番号】P 2020022672
(22)【出願日】2020-02-13
【審査請求日】2023-02-09
(31)【優先権主張番号】P 2019037772
(32)【優先日】2019-03-01
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】伊藤 忠幸
【審査官】松平 英
(56)【参考文献】
【文献】米国特許出願公開第2008/0256306(US,A1)
【文献】特表2006-511832(JP,A)
【文献】特開2008-176612(JP,A)
【文献】特開2017-204068(JP,A)
【文献】特開2018-060471(JP,A)
【文献】特開2012-043031(JP,A)
【文献】特開2016-091509(JP,A)
【文献】米国特許出願公開第2001/0008009(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
12/00-12/128
13/00-13/14
13/16-13/18
13/20-13/42
15/16-15/177
G06T 1/00
1/60
H04N 1/00
1/21
(57)【特許請求の範囲】
【請求項1】
複数の処理部の共有キャッシュとして働くインタフェース装置であって、
前記複数の処理部に含まれる第1の処理部からデータを取得する第1のポートと、
前記第1の処理部から取得したデータを前記複数の処理部に含まれる第2の処理部に出力する第2のポートと、
前記第1の処理部から取得したデータをキャッシュするキャッシュ手段と、
前記キャッシュ手段に書き込まれたデータを前記キャッシュ手段とは異なる記憶手段にライトバックするか否かを、前記第2の処理部から取得した情報に基づいて制御する制御手段と、を備え
、
前記第2の処理部から取得した情報は、前記第2の処理部が要求したデータを前記キャッシュ手段から前記記憶手段にライトバックする必要がないことを示すことを特徴とするインタフェース装置。
【請求項2】
前記第1のポートは、前記第1の処理部から、データ群に含まれるデータを第1の順序で取得し、
前記第2のポートは、前記第2の処理部へと、前記データ群に含まれるデータを前記第1の順序とは異なる第2の順序で出力することを特徴とする、請求項1に記載のインタフェース装置。
【請求項3】
前記制御手段は、前記第1の処理部から取得した情報にさらに基づいて、前記キャッシュ手段に書き込まれたデータをライトバックするか否かを制御することを特徴とする、請求項1
又は2のいずれか1項に記載のインタフェース装置。
【請求項4】
前記第1の処理部から取得した情報は、前記データが前記第2の処理部に転送されるデータであることを示すことを特徴とする、請求項
3に記載のインタフェース装置。
【請求項5】
前記制御手段は、前記キャッシュ手段に書き込まれている前記データに関連付けて、前記第1の処理部から取得した情報、前記第2の処理部から取得した情報、又は前記第1の処理部から取得した情報と前記第2の処理部から取得した情報との演算結果を格納することを特徴とする、請求項
3又は
4に記載のインタフェース装置。
【請求項6】
前記制御手段は、
前記キャッシュ手段に書き込まれている前記データが、前記記憶手段から取得されたものではなく、
前記データが前記第2の処理部に転送されるデータであることを前記第1の処理部から取得した情報が示しており、かつ
前記第2の処理部が要求したデータを前記キャッシュ手段から前記記憶手段にライトバックする必要がないことを前記第2の処理部から取得した情報が示している場合に、
前記キャッシュ手段に書き込まれている前記データを前記記憶手段にライトバックせずに破棄することを特徴とする、請求項
3から
5のいずれか1項に記載のインタフェース装置。
【請求項7】
前記制御手段は、前記キャッシュ手段に書き込まれている前記データを破棄する際に、少なくとも前記第2の処理部から取得した情報に基づいて、破棄する前記データをライトバックするか否かを切り替えることを特徴とする、請求項1から
6のいずれか1項に記載のインタフェース装置。
【請求項8】
前記キャッシュ手段はフルアソシアティブ方式に従うキャッシュ動作を行うことを特徴とする、請求項1から
7のいずれか1項に記載のインタフェース装置。
【請求項9】
前記記憶手段はDRAMであることを特徴とする、請求項1から
8のいずれか1項に記載のインタフェース装置。
【請求項10】
前記データは画像データであることを特徴とする、請求項1から
9のいずれか1項に記載のインタフェース装置。
【請求項11】
請求項1から
10のいずれか1項に記載のインタフェース装置と前記第2の処理部とを有する第1のチップを備え、前記第1のチップとは異なる第2のチップが有する前記第1の処理部に接続されることを特徴とする、請求項1から
10のいずれか1項に記載のインタフェース装置。
【請求項12】
前記第1の処理部と、前記第2の処理部と、請求項1から
11のいずれか1項に記載のインタフェース装置と、を備えることを特徴とするデータ処理装置。
【請求項13】
前記第1の処理部は、入力データに対する第1のデータ処理によりデータ群を生成し、
前記第2の処理部は、前記データ群に対する第2のデータ処理を行うことにより、前記入力データに対して前記第1のデータ処理及び前記第2のデータ処理を行って得られる処理結果を生成することを特徴とする、請求項
12に記載のデータ処理装置。
【請求項14】
前記第1の処理部は、画像に設定された、第1のサイズを有する複数のタイル領域のそれぞれに含まれるデータを、タイル領域ごとに前記インタフェース装置に送信し、
前記第2の処理部は、前記画像に設定された、前記第1のサイズとは異なる第2のサイズを有する複数のタイル領域のそれぞれに含まれるデータを、タイル領域ごとに前記インタフェース装置から受信することを特徴とする、請求項
12又は
13に記載のデータ処理装置。
【請求項15】
前記第2の処理部は、前記インタフェース装置に対しデータを要求する際に、前記データを後の処理で再度要求するか否かを判定し、再度要求しないとの判定に応じて、要求するデータを前記キャッシュ手段から前記記憶手段にライトバックする必要がないことを示す情報を前記インタフェース装置に送信することを特徴とする、請求項
12から
14のいずれか1項に記載のデータ処理装置。
【請求項16】
前記第2の処理部は、画像に設定された複数のタイル領域のそれぞれに含まれるデータを、タイル領域ごとに前記インタフェース装置から受信し、
前記インタフェース装置に対してタイル領域に含まれるデータを要求する際に、前記データが他のタイル領域に含まれるか否かに応じて、前記インタフェース装置に送信される、前記第2の処理部が要求したデータを前記キャッシュ手段から前記記憶手段にライトバックする必要性を示す情報を制御することを特徴とする、請求項
12から
14のいずれか1項に記載のデータ処理装置。
【請求項17】
前記データ処理装置は、ネットワークと、前記ネットワークに接続された前記記憶手段と、をさらに備え、
前記データ処理装置は前記ネットワークに接続され、
前記データ処理装置は前記ネットワークを介さずに前記第1の処理部及び前記第2の処理部に接続されている
ことを特徴とする、請求項
12から
16のいずれか1項に記載のデータ処理装置。
【請求項18】
複数の処理部の共有キャッシュとして働くインタフェース装置であって、前記複数の処理部に含まれる第1の処理部からデータを取得する第1のポートと、前記第1の処理部から取得したデータを前記複数の処理部に含まれる第2の処理部に出力する第2のポートと、前記第1の処理部から取得したデータをキャッシュするキャッシュ手段と、を備える、インタフェース装置が行うキャッシュ制御方法であって、
前記キャッシュ手段に書き込まれたデータを前記キャッシュ手段とは異なる記憶手段にライトバックするか否かを、前記第2の処理部から取得した情報に基づいて制御する工程を有
し、
前記第2の処理部から取得した情報は、前記第2の処理部が要求したデータを前記キャッシュ手段から前記記憶手段にライトバックする必要がないことを示すことを特徴とする、キャッシュ制御方法。
【請求項19】
コンピュータを、請求項1から
11のいずれか1項に記載のインタフェース装置の制御手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はインタフェース装置、データ処理装置、キャッシュ制御方法、及びプログラムに関し、特に共有キャッシュメモリに関する。
【背景技術】
【0002】
近年、1つの製品が様々な機能を実現することが求められている。例えば、複数のデータ処理部を有する製品において、アプリケーションに応じて使用するデータ処理部を組み合わせて用いることにより、様々な機能を実現する手法が知られている。
【0003】
このような構成においては、データ処理部の間でのデータ転送を効率化することにより、処理速度を向上できる。例えば特許文献1は、共有キャッシュメモリ装置を介して2つのプロセッサを接続する方法を開示している。特許文献1の方法によれば、共有キャッシュメモリ装置は、第1プロセッサによるデータの書き込みを監視し、第2プロセッサにより要求されたデータが書き込まれると、このデータを第2プロセッサに転送する。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
データ処理部は様々な考え方に従って製造され、また、様々なメーカーによって製造される。このため、それぞれのデータ処理部が有する、データ処理の処理単位などの、データ処理の仕様又は制約は、互いに異なっていることが多い。このため、前段のデータ処理部と後段のデータ処理部とを接続する装置は、前段のデータ処理部から受け取ったデータをただちに後段のデータ処理部に転送できないことが多い。したがって、前段のデータ処理部から受け取ったデータを少なくとも一時的に何らかの記憶部に格納する必要がある。このような処理は、追加の回路を必要とし、又は追加の処理負荷を必要とする。
【0006】
本発明は、処理部を互いに接続するインタフェース装置における、一方の処理部から他方の処理部へのデータ転送処理を効率化することを目的とする。
【課題を解決するための手段】
【0007】
本発明の目的を達成するために、例えば、本発明のインタフェース装置は以下の構成を備える。すなわち、
複数の処理部の共有キャッシュとして働くインタフェース装置であって、
前記複数の処理部に含まれる第1の処理部からデータを取得する第1のポートと、
前記第1の処理部から取得したデータを前記複数の処理部に含まれる第2の処理部に出力する第2のポートと、
前記第1の処理部から取得したデータをキャッシュするキャッシュ手段と、
前記キャッシュ手段に書き込まれたデータを前記キャッシュ手段とは異なる記憶手段にライトバックするか否かを、前記第2の処理部から取得した情報に基づいて制御する制御手段と、を備え、
前記第2の処理部から取得した情報は、前記第2の処理部が要求したデータを前記キャッシュ手段から前記記憶手段にライトバックする必要がないことを示すことを特徴とするインタフェース装置。
【発明の効果】
【0008】
処理部を互いに接続するインタフェース装置において、一方の処理部から他方の処理部へのデータ転送処理を効率化することができる。
【図面の簡単な説明】
【0009】
【
図1】一実施形態に係るデータ処理装置の構成例を示すブロック図。
【
図2】一実施形態に係る前段処理と後段処理の接続例を示すブロック図。
【
図5】一実施形態に係るインタフェース装置の構成例を示すブロック図。
【
図6】キャッシュ判定部412の構成例を示すブロック図。
【発明を実施するための形態】
【0010】
以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
【0011】
[実施形態1]
(データ処理装置の構成例)
図1は、実施形態1に係るインタフェース装置を適用可能なデータ処理装置の構成例を示すブロック図である。データ処理装置の処理対象は特に限定されないが、
図1には画像データに対する画像処理を行う画像処理装置が示されている。
図1に示すデータ処理装置は、CPU回路部100、画像読取部120、画像入力部130、画像処理部150、及び画像表示部160を備える。
【0012】
画像読取部120は、レンズ124、CCDセンサ126、及び信号処理部127を有する。原稿110の画像は、レンズ124を介してCCDセンサ126に結像する。そして、CCDセンサ126は画像を示すアナログ電気信号を生成する。信号処理部127は、R、G、Bの色ごとに補正処理を行い、さらにアナログ/デジタル変換を行うことでフルカラーのデジタル画像信号(画素値)を生成する。こうして生成されたデジタル画像信号は、画像入力部130に入力される。以下では、1枚の画像に含まれる複数の画素についてのデジタル画像信号(画素値)の集合を、画像データと呼ぶ。
【0013】
画像処理部150は、画像入力部130に入力された画像データに対する画像処理を行う。画像処理としては、センサ素子の個体差を補償する処理、入力ガンマ補正などの色補正処理、空間フィルタ処理、色空間変換処理、濃度補正処理、及び中間調処理などが挙げられるが、これらには限定されない。画像処理部150は、例えば画像を印刷するための画像処理を行うことにより、印刷用の画像データを作成することができる。なお、画像処理部150は、複数フレームの画像データを含む映像データに対する画像処理を行ってもよい。
【0014】
画像表示部160は、画像処理部150による画像処理後の画像データの表示を行う。画像表示部160は、画像処理後の映像をディスプレイなどの画像表示装置に表示してもよい。また、画像表示部160の代わりに、又はこれに加えて、データ処理装置が画像印刷部170を有していてもよい。画像印刷部170は、画像処理部150による画像処理後の画像データに従う印刷を行う。画像印刷部170は、インクジェットヘッド又はサーマルヘッドなどを備え、画像データのデジタル画像信号に基づいて記録紙上に画像を記録するプリンタであってもよい。
【0015】
CPU回路部100は、演算制御用のプロセッサであるCPU102、固定データ又はプログラムを格納するメモリであるROM104、データ又はプログラムが一時的にロードされるメモリであるRAM106、及び外部記憶装置108などを備える。CPU回路部100は、画像読取部120、画像処理部150、画像表示部160、及び画像印刷部170等を制御することにより、データ処理装置が行う処理のシーケンスを統括的に制御することができる。外部記憶装置108は、データ処理装置が使用するパラメータ、プログラム、及び補正データを記憶することができる、ディスクなどの記憶媒体である。データやプログラムなどが外部記憶装置108からRAM106へとロードされてもよい。
【0016】
上記のように、画像入力部130、画像処理部150、画像表示部160、及び画像印刷部170の間では、データの転送が行われる。このデータの転送は、RAM106又は外部記憶装置108を介して行われることがある。例えば、WDMAC192(Write Direct Memory Access Controller)は、画像入力部130に入力されたデジタル画像信号を出力する。WDMAC192は、画像データを、共有バス190を介してRAM106又は外部記憶装置108などに格納することができる。同様に、WDMAC196も、画像処理部150からの画像データをRAM106又は外部記憶装置108などに格納することができる。
【0017】
また、RDMAC194(Read Direct Memory Access Controller)は、共有バス190を介してRAM106又は外部記憶装置108などに記憶された画像データを読み出し、処理対象となる画素のデジタル画像信号を画像処理部150に入力することができる。同様に、RDMAC198も、RAM106又は外部記憶装置108から読み出した画像データを画像表示部160又は画像印刷部170に入力することができる。
【0018】
CPU102、画像入力部130、画像処理部150、画像表示部160、及び画像印刷部170は、このようなWDMAC192,196、及びRDMAC194,198の動作を設定したり、これらを起動したりすることができる。
【0019】
(前段処理と後段処理の接続)
以上のように、画像入力部130、画像処理部150、画像表示部160、及び画像印刷部170の間では、データの転送が行われる。しかしながら、これらの処理部の間では、データ処理の仕様又は制約が異なっているかもしれない。実施形態1に係るインタフェース装置は、処理部間でのデータ処理の仕様又は制約の違いを緩衝(吸収)しながら、処理部間を接続することができる。
【0020】
以下の説明において、実施形態1に係るインタフェース装置は、複数の処理部の共有キャッシュとして働くインタフェース装置である。このインタフェース装置は、複数の処理部に含まれる前段処理部(第1の処理部)からデータを取得して複数の処理部に含まれる後段処理部(第2の処理部)に出力する。
図2(A)は、実施形態1に係るデータ処理装置の一部を示す。
図2(A)に示すように、本実施形態に係るインタフェース装置である共有キャッシュI/F250(以下、単にI/F250と呼ぶ)は、前段処理ブロック220と後段処理ブロック230とを接続している。以下、前段処理ブロック220のことを単に前段処理220と、後段処理ブロック230のことを単に後段処理230と、それぞれ呼ぶ。
【0021】
前段処理220に含まれる処理部224は、例えば画像処理部150であってもよい。この場合、RDMAC222及びWDMAC226は、それぞれRDMAC194及びWDMAC196である。また、後段処理230に含まれる処理部234は、例えば画像表示部160であってもよい。この場合、RDMAC232はRDMAC198である。RDMAC222とWDMAC236の少なくとも一方は省略されてもよい。
【0022】
この例において、前段処理220は、入力データに対する第1のデータ処理によりデータ群を生成する。そして、後段処理230は、このデータ群に対する第2のデータ処理を行うことにより、入力データに対して第1のデータ処理及び第2のデータ処理を行って得られる処理結果を生成する。
【0023】
実施形態1に係るインタフェース装置は、
図1に示される他の処理部の間を接続してもよい。なお、処理部がデータ処理によりデータを生成又は修正することは必須ではない。例えば、前段処理220は画像入力部130であってもよく、この画像入力部130は受け取ったデータをそのまま出力してもよい。また、後段処理230は画像表示部160であってもよく、この画像表示部160は受け取ったデータをそのまま出力してもよい。また、実施形態1に係るインタフェース装置が接続する処理部の種類は、
図1に示したものには限定されない。これらの処理部は、パイプライン回路などのハードウェアで実現されてもよいし、プロセッサ及びプログラム(ソフトウェア)の組み合わせにより実現されてもよい。
【0024】
それぞれの処理部が処理対象データに対するデータ処理を行う場合、処理対象データに含まれる部分データに対して順次処理を行うことができる。例えば、画像データに対する画像処理を行う場合には、ラスタ走査順に各画素について処理を行うことができる。一方で、画像データを領域分割し、それぞれの領域について順に処理を行うこともできる。
【0025】
例えば、画像データの領域分割手法として、画像データの2次元分割を用いることができる。この場合、画像データは複数のタイル領域(以下、単にタイル又はブロックと呼ぶことがある)へと分割される。ここで、1つのタイルにおける画像のことを部分画像と呼ぶ。以下、タイルごとに行うデータ処理について説明する。以下の例において、処理単位(又は処理粒度)は部分画像である。以下のようなタイルごとのデータ処理のことは、タイル処理又はブロック処理と呼ぶことができる。なお、1つのタイルは1画素に対応していてもよい。
【0026】
画像データに対する画像処理を行う場合、処理前の画像データが読み込まれ、そして処理後の画像データが生成される。
図3(A)には、前段処理220において生成された画像データ300の例が示されている。画像データ300は複数のタイルに分割されており、
図3(A)には複数のタイルのうちのタイル302~308が示されている。
図4(A)はこのようなタイルの例を示す。それぞれのタイルの大きさは特に限定されず、長さTL及び高さTHは任意の画素数であってもよい。
図3(A)において、1つのタイルは5画素×5画素の矩形領域である。
【0027】
前段処理220においては、タイル単位で部分画像が生成される(タイル走査又はブロック走査とも呼ばれる)。ここで、部分画像の各画素のデータは、タイル302に示す矢印の順番で順次生成される。すなわち、前段処理220においてはタイル302、タイル304、タイル306、及びタイル308が順に生成され、こうして処理後の画像データが得られる。また、前段処理220からはタイル単位で部分画像が出力される。すなわち、前段処理220からは、タイル302、タイル304、タイル306、及びタイル308が順に出力される。部分画像の各画素のデータは、タイル302に示す矢印の順番で順次出力される。このとき、画像全体における走査されている画素の座標は、画像全体中でのタイルの位置と、タイル中の走査位置から、算出することができる。
【0028】
図3(A)にはまた、後段処理230において参照される画像データ300の例が示されている。前段処理220において生成された画像データと後段処理230において参照される画像データは同一であるが、後段処理230においてはラスタ走査順に画像データ300が参照される。すなわち、後段処理230では、ライン312、ライン314、ライン316の順に各画素のデータを参照することにより、画像全体に対する処理が行われる。この例において、後段処理230では、画像データ300のライン312を参照して、画像データ300に対する画像処理により得られる画像データにおける対応するラインのデータが生成されてもよい。
【0029】
このように、前段処理220から出力された画像データを用いて後段処理230は画像処理を行う。しかしながら、前段処理220からの各画素のデータの出力順序と、各画素のデータの後段処理230による参照順序とは異なる。このような、接続される2つの処理部間の仕様又は制約の違いのために、前段処理220からデータが出力されてから、後段処理230にこのデータが入力されるまでの間に、データは一時的に何らかのバッファに保持される。I/F250はこのようなバッファを提供することができる。例えば、前段処理220は、画像に設定された、第1のサイズを有する複数のタイルのそれぞれに含まれるデータを、タイルごとにI/F250に送信することができる。また、後段処理230は、画像に設定された、第1のサイズとは異なる第2のサイズを有する複数のタイルのそれぞれに含まれるデータを、タイルごとにI/F250から受信することができる。
【0030】
(インタフェース装置の構成例)
図5に示すように、前段処理220と後段処理230とを接続する本実施形態に係るI/F250は、前段処理220から取得したデータをキャッシュするキャッシュメモリ434を有している。また、I/F250はさらにキャッシュ判定部412を有している。キャッシュ判定部412は、キャッシュメモリ434に書き込まれたデータをキャッシュメモリ434とは異なる記憶部にライトバックするか否かを、後段処理230から取得した情報に基づいて制御することができる。このように、キャッシュ判定部412はI/F250におけるキャッシュ制御を実現できる。
【0031】
以下では、RAM106又は外部記憶装置108のような、キャッシュメモリ434とは異なる記憶部に確保した転送データの格納先を、以下ではグローバルバッファと総称する。グローバルバッファとしては例えばDRAMを用いることができる。また、キャッシュメモリ434は、例えばSRAMなどのオンチップメモリであり、グローバルバッファと比較して高速な読み書きが可能なメモリである。
【0032】
通常のキャッシュメモリにおいては、データの不整合を防ぐために、キャッシュメモリにデータを書き込む際に同じデータが主記憶にも書き込まれる(ライトスルー)。あるいは、キャッシュメモリに書き込まれたデータは、破棄される前に主記憶へと書き込まれる(ライトバック)。しかしながら、I/F250は、キャッシュメモリ434に書き込まれたデータをグローバルバッファに書き込んでからこのデータを破棄するか、このデータをグローバルバッファに書き込まずにこのデータを破棄するか、を制御できる。
【0033】
このような構成を有するI/F250を用いることにより、前段処理220から後段処理230へのデータ転送処理を効率化することができる。より具体的には、前段処理220から出力された画像データの全体をグローバルバッファ240に書き出す場合と比較して、処理速度を向上させ、及び消費電力を減少させることができる。すなわち、前段処理220により得られた画像データ全体をグローバルバッファ240に書き込み、及びグローバルバッファ240から読み出した場合、2つの画像のデータ量に対応するメモリアクセスが発生する。本実施形態では前段処理220から取得したデータの一部はグローバルバッファ240に書き込まれないため、メモリアクセスの増加に従うアクセス速度の低下及び消費電力の増加を抑制できる。
【0034】
また、このような構成を有するI/F250を用いる場合、キャッシュメモリ434の容量を小さくすることができる。すなわち、前段処理220から出力された画像データの全体を格納可能なキャッシュメモリを設けることが不要になる。このような、回路規模が大きいことが多いキャッシュメモリの容量を小さくすることにより、製品の製造コストを減らすことができる。
【0035】
図4は、I/F250の構成の一例を示すブロック図である。I/F250は、前段処理220からデータを取得する第1のポートであるライトポート402と、前段処理220から取得したデータを後段処理230に出力する第2のポートであるリードポート404とを備える。また、I/F250はNetwork on Chip210(以下、NoC210と呼ぶ)に接続されている。NoC210にはグローバルバッファ240も接続されており、I/F250はNoC210を経由してグローバルバッファ240との間でデータを入出力するアクセスポート406を備えている。
図2(A)に示されるように、I/F250は、アクセスポート406と、NoC210と、例えばDRAMコントローラのようなコントローラ245とを介して、グローバルバッファ240にアクセスできる。
図5に示すように、I/F250は、NoC210を介さずに、前段処理220及び後段処理230に接続されている。
【0036】
さらに、I/F250は、前段処理220から取得したデータをキャッシュするキャッシュメモリ434を有する。また、I/F250は、キャッシュメモリ434に書き込まれたデータをグローバルバッファ240にライトバックするか否かを、後段処理230から取得した情報に基づいて制御するキャッシュ判定部412と、を有している。
【0037】
以下、
図5を参照して、I/F250の具体的な構成例を説明する。この例において、I/F250は、ライトポート402及びリードポート404への要求を同時に受け付けることが可能な、マルチポートの共有キャッシュである。
【0038】
ライトポート402を介して、I/F250にはライト要求、同期情報、及びライトデータが入力される。ライトデータは前段処理220から入力される画素のデータである。また、ライト要求は、前段処理220から取得した、ライトデータの受け取りを要求することを示す情報である。ライト要求は、ライトデータを特定する情報を含むことができる。以下の例では、ライト要求は、ライトデータが格納されるグローバルバッファ240のメモリアドレスを示す(ただし、後述するように、ライトデータはグローバルバッファ240に格納されないかもしれない)。一方で、ライト要求が、ライトデータに対応する画素の画素位置を示していてもよい。同期情報は、前段処理220から取得した情報(第1の情報)である。このデータは、ライトデータが後段処理230に転送されるデータであることを示すことができる。詳細については後述する。
【0039】
また、リードポート404を介して、I/F250にはリード要求及び同期情報が入力され、I/F250からリードデータが出力される。リードデータは後段処理230に入力される画素のデータである。リードデータは、前段処理220から入力されたライトデータであり、キャッシュメモリ434又はグローバルバッファ240に格納されている。リード要求は、後段処理230から取得した、リードデータの受け取りを要求することを示す情報である。リード要求は、リードデータを特定する情報を含むことができる。以下の例では、リード要求は、リードデータが格納されているグローバルバッファ240のメモリアドレスを示す(ただし、後述するように、リードデータはグローバルバッファ240に格納されていないかもしれない)。一方で、リード要求が、リードデータに対応する画素の画素位置を示していてもよい。同期情報は、後段処理230から取得した情報(第2の情報)である。この情報は、例えば、リードデータをキャッシュメモリ434からグローバルバッファ240にライトバックする必要がないことを示すことができる。詳細については後述する。
【0040】
なお、本実施形態において、ライトデータとリードデータのデータ量は同じであり、ライト要求とリード要求のアドレス指定方法も同じである。また、ライトデータとリードデータのデータ量は特に制限されない。例えば、ライトデータ及びリードデータが、1画素のデータであってもよいし、所定サイズ(例えば縦1画素×横8画素)の画素ブロックに含まれる画素のデータであってもよい。また、上述のとおり、前段処理220からの各画素のデータの出力順序と、各画素のデータの後段処理230による参照順序とは異なるかもしれない。すなわち、ライトポート402は、前段処理220から、画像データのようなデータ群に含まれるデータを第1の順序で取得することができる。一方でリードポート404は、後段処理230へと、データ群に含まれるデータを第1の順序とは異なる第2の順序で出力することができる。
【0041】
I/F250は、プリフェッチ部410、中間FIFO420、及びフェッチ部430を有している。プリフェッチ部410は、キャッシュ判定及びプリフェッチ動作を行うことができる。本実施形態においてプリフェッチ部410は、ライトポート402へのライト要求及びリードポート404へのリード要求を受け付ける。そして、プリフェッチ部410は、プリフェッチ部410が有するキャッシュ判定部412を用いて、それぞれの要求に対するキャッシュ判定を行う。すなわちキャッシュ判定部412は、キャッシュヒット又はキャッシュミスの判定を行うことができる。具体的には、キャッシュ判定部412は、ライト要求において指定されたグローバルバッファ240のメモリアドレスに対応するデータがキャッシュメモリ434に格納されていると判断した場合、キャッシュヒットの判定を行う。一方でキャッシュ判定部412は、このデータが格納されていないと判断した場合、キャッシュミスの判定を行う。また、キャッシュ判定部412は、リード要求において指定されたリードデータがキャッシュメモリ434に格納されていると判断した場合、キャッシュヒットの判定を行い、格納されていないと判断した場合、キャッシュミスの判定を行う。
【0042】
ライト要求に対するキャッシュ判定結果、ライト要求、及びライトデータは、プリフェッチ部410から、中間FIFO420を介して、フェッチ部430が有するデータ取得部432へと送られる。データ取得部432は、ライトデータをキャッシュメモリ434に格納する。
【0043】
通常のライト要求に対して、データ取得部432は、通常のキャッシュメモリへの書き込み時に行われる動作を行うことができる。例えば、プリフェッチ部410がライト要求に対してキャッシュヒットの判定を行った場合、キャッシュメモリ434には、ライト要求において指定されたアドレスのデータが格納されている。このため、フェッチ部430は、プリフェッチ部410からデータ取得部432へ送られたライトデータを、キャッシュメモリ434に上書きする。また、プリフェッチ部410がライト要求に対してキャッシュミスの判定を行った場合、キャッシュメモリ434には、ライト要求において指定されたアドレスのデータが格納されていない。この場合、プリフェッチ部410は、アクセスポート406を介して、グローバルバッファ240に対するリード要求を発行する。そしてフェッチ部430は、グローバルバッファ240から受け取ったデータにライトデータを上書きし、得られたデータをキャッシュメモリ434に格納する。
【0044】
一方で本実施形態において、前段処理220は、後段処理230に転送するデータをI/F250に転送する場合、プリロード命令を指定してI/F250に対するライト要求を行う。この場合、プリフェッチ部410は、ライト要求に対してキャッシュミスの判定を行った場合であっても、グローバルバッファ240へのリード要求を発行しない。この場合、データ取得部432は、ライト要求と同期して入力されたライトデータを、キャッシュメモリ434に格納する。
【0045】
また、リード要求に対するキャッシュ判定結果及びリード要求も、プリフェッチ部410から中間FIFO420を介してデータ取得部432へと送られる。リード要求に対して、データ取得部432は、通常のキャッシュメモリへの書き込み時に行われる動作を行うことができる。
【0046】
例えば、プリフェッチ部410がリード要求に対してキャッシュヒットの判定を行った場合、キャッシュメモリ434には、リード要求において指定されたアドレスのデータが格納されている。このため、プリフェッチ部410がグローバルバッファ240に対するリード要求を発行する必要はない。データ取得部432は、リード要求がフェッチ部430に届いたときに、キャッシュメモリ434からリード要求に示されるデータを取り出し、リードデータとしてリードポート404に転送する。
【0047】
一方、プリフェッチ部410がリード要求に対してキャッシュミスの判定を行った場合、キャッシュメモリ434には、リード要求において指定されたアドレスのデータが格納されていない。このためプリフェッチ部410は、アクセスポート406を介して、グローバルバッファ240に対するリード要求を発行する。するとフェッチ部430には、リード要求に対してキャッシュミスの判定が行われた場合と同様、リード要求において指定されたメモリアドレスのデータを含むデータが入力される。データ取得部432は、リード要求がフェッチ部430に届いたときに、グローバルバッファ240からのデータを受信してキャッシュメモリ434に格納する。そして、データ取得部432は、リード要求に示されるデータを、リードデータとしてリードポート404に転送する。
【0048】
以上のようにI/F250は、ライト要求及びリード要求に対して適切な処理を行うことができる。
【0049】
次に
図6を参照してキャッシュ判定部412の構成について説明する。以下の例において、連想(ライン選択)方式としてはフルアソシアティブ方式が用いられ、I/F250はフルアソシアティブ方式に従うキャッシュ動作を行う。I/F250はマルチポートの共有キャッシュであるため、キャッシュ判定部412には複数のポートからの要求が入力される。
図6には、複数のポートとして、ポート[0]512、ポート[1]514、・・・、及びポート[N-1]516が示されている。上述のライトポート402及びリードポート404は、これらのポートのいずれかである。
【0050】
選択回路518は、各ポート512~516から入力された要求を選択する。選択されたリード要求又はライト要求に示されるアドレスは、アドレスレジスタ521に記憶される。また、ライトポート402又はリードポート404に入力された同期情報は、同期情報レジスタ530に記憶される。
【0051】
キャッシュ判定部412は、8個のキャッシュタグ414を記憶することができる。この例において、I/F250は8ノードのフルアソシアティブ方式のキャッシュ装置となる。また8個のキャッシュタグ414のそれぞれには、予め定められた番号([0]~[7])が付されており、これらの番号は、対応するキャッシュメモリの「相対」キャッシュライン番号を示す。
図6の例において、キャッシュメモリ434は8個のキャッシュラインを有しており、8個のキャッシュラインにはFIFO方式に従ってデータが格納される。なお、キャッシュラインの数、及びそれぞれのキャッシュラインの容量は特に限定されず、適宜設定することができる。
【0052】
またキャッシュ判定部412は、8個の同期情報532を記憶することができる。それぞれの同期情報532は8個のキャッシュタグ414のうちの1つに対応し、同じ番号([0]~[7])が付されている。同期情報532は、ライトポート402に入力された同期情報、リードポート404に入力された同期情報、又はこれらの演算結果を示すことができる。以下の例において、同期情報532は、ライトポート402に入力された同期情報、又はこれとリードポート404に入力された同期情報との演算結果である。
【0053】
以下では最も古いデータが格納されているキャッシュラインの「相対」キャッシュライン番号は[0]であり、最も新しいデータが格納されているキャッシュラインの「相対」キャッシュライン番号は[7]である。また、キャッシュミスと判定されると、これから新しいデータが格納される(破棄されるデータが格納されている)キャッシュラインの「相対」キャッシュライン番号が[7]となる。
【0054】
キャッシュ判定部412は8個の比較器523を有し、それぞれの比較器523は8個のキャッシュタグ414のうちの1つに対応する。比較器523は、対応するキャッシュタグ414に格納されたアドレスと、アドレスレジスタ521に格納されたアドレスと、の比較を行い、アドレス同士が「一致」するか否かを示す比較結果524を判定器525へと出力する。
【0055】
ここで、8個の比較器523から出力された8個の比較結果524のうち、1つでも「一致」を示す場合、判定器525はキャッシュヒットと判定する。一方で、8個の比較結果524のうちいずれも「一致」を示していない場合、判定器525はキャッシュミスと判定する。
【0056】
キャッシュミスと判定された場合(分岐526でYES)、アドレスレジスタ521に保持されているアドレスを値として有するように、キャッシュタグ414が更新される。
図6においてキャッシュタグ414は、シフトレジスタを有する記憶領域に格納される。判定結果がキャッシュミスである場合、シフト動作が行われ、キャッシュタグの値は下流のキャッシュタグに移動する。すなわち、キャッシュタグ[0]の値はキャッシュタグ[1]の値に変化し、キャッシュタグ[1]の値はキャッシュタグ[2]の値に変化する。同様に移動が繰り返され、キャッシュタグ[6]の値はキャッシュタグ[7]の値に変化する。そして、キャッシュタグ[7]の値は、アドレスレジスタ521に格納されているアドレスの値に変化する。
【0057】
このように、
図6の例では、古いキャッシュタグ[0]の値が破棄される、「FIFO方式(ラウンドロビン方式)」のキャッシュタグのリプレイス手法が用いられている。このような方式を、フルアソシアティブ方式のキャッシュ装置において採用することにより、装置を簡略化することができる。
【0058】
また、キャッシュミスと判定された場合、同期情報レジスタ530に格納されている値を保持するように、同期情報532が更新される。
図6の例において同期情報532は、キャッシュタグ414と同様に、シフトレジスタを有する記憶領域に格納される。キャッシュミスと判定された場合、キャッシュタグ414と同様に、同期情報532のシフト動作が行われ、同期情報の値は下流の同期情報に移動する。すなわち、同期情報レジスタ530に格納されている値は同期情報[7]に書き込まれ、古い同期情報[0]の値は破棄される。
【0059】
一方で、キャッシュヒットと判定された場合、このようなキャッシュタグ414及び同期情報532の更新は行われない。その一方で、キャッシュヒットと判定された場合、修正器535は、キャッシュヒットと判定されたキャッシュタグ414に対応する同期情報532の修正を行う。すなわち、修正器535は、アドレスレジスタ521に格納されたアドレスと一致する値を有しているキャッシュタグ414の番号([0]~[7])と、同じ番号を有する同期情報532の値を修正する。
【0060】
判定器525は、以上のようなキャッシュヒット又はキャッシュミスを示すキャッシュ判定結果を、キャッシュミスフラグ528として出力する。また、判定結果がキャッシュヒットである場合、判定器525は、アドレスレジスタ521に格納されたアドレスと一致する値を有しているキャッシュタグ414の番号([0]~[7])を、ライン番号527として出力する。一方で、判定結果がキャッシュミスである場合、判定器525は、7(すなわちキャッシュタグ[7]の番号)をライン番号527として出力する。さらにキャッシュ判定部412は、キャッシュミスの判定を行った場合、シフト動作により破棄されるキャッシュタグ[0]の値540、及び破棄される同期情報[0]の値542も、キャッシュ判定結果として出力する。これらの情報に従って、プリフェッチ部410及びフェッチ部430は上述の動作を行うことができる。
【0061】
なお、キャッシュヒットと判定された場合、ライト要求を受信したフェッチ部430は、ライン番号527により示されるキャッシュラインにライトデータを格納する。また、リード要求を受信したフェッチ部430は、ライン番号527により示されるキャッシュラインからリードデータを読み出す。
【0062】
一方、キャッシュミスと判定された場合、フェッチ部430は、ライン番号527により示されるキャッシュライン[7]に格納されていたデータを、同期情報[0]の値542に従って破棄し、又はグローバルメモリにライトバックする。ライトバックを行う場合、フェッチ部430は、グローバルメモリのキャッシュタグの値540により示されるアドレスに対してライトバックを行う。また、ライト要求を受信したフェッチ部430は、ライン番号527により示されるキャッシュライン[7]にライトデータを格納する。さらに、リード要求を受信したフェッチ部430は、ライン番号527により示されるキャッシュライン[7]に、グローバルバッファ240から受信したデータを書き込む。
【0063】
(動作例)
本実施形態において、I/F250は前段処理220の処理結果を後段処理230に転送し、また転送できない処理結果をグローバルバッファ240に退避する。このような処理制御は、例えば、以下のように同期情報を使用することにより実現できる。
【0064】
本実施形態において、前段処理220が処理結果を後段処理230に転送する場合、前段処理220はプリロード命令を用いてI/F250に対するライト要求を行う。
図6の例において前段処理220は、プリロード命令を行う際に、値が「1」である同期情報をI/F250に入力する。
【0065】
上述のとおり、キャッシュ判定部412はプリロード命令が入力された場合、キャッシュミスの判定を行う。すなわち、上述の通り、キャッシュタグにアドレスを書き込み、前段処理から入力された同期情報の値である「1」を保持するように、同期情報532を更新する。また、上述の通り、この場合プリフェッチ部410はグローバルバッファ240へのリード要求を発行せず、前段処理220の処理結果であるライトデータがキャッシュメモリ434に格納される。
【0066】
一方で後段処理230は、前段処理220の処理結果を取得するために、I/Fに対するリード要求を行う。
図6の例において後段処理230は、リード要求を行う際に、値が「1」である同期情報をI/F250に入力する。上述の通り、キャッシュ判定部412はリード要求に示されるアドレスに従ってキャッシュ判定を行い、キャッシュヒットと判定された場合、修正器535は同期情報532を修正する。本実施形態において修正器535は、キャッシュヒットと判定されたキャッシュタグ414に対応する同期情報532と、同期情報レジスタ530の値と、のXOR(Exclusive-OR)演算を行う。そして、XOR演算により得られた値で、キャッシュヒットと判定されたキャッシュタグ414に対応する同期情報532を更新する。本実施形態の場合、プリロード命令により前段処理220からのデータがキャッシュメモリ434に格納されると、対応する同期情報532の値は上記の通り「1」となる。一方、リード要求を受けた際の同期情報レジスタ530の値は上記の通り「0」である。したがって、キャッシュメモリ434に格納されたデータに対するリード要求が行われると、対応する同期情報532の値は「1」から「0」になる。
【0067】
前段処理220及び後段処理230の処理が進むにつれて、キャッシュタグが更新されていき、上記のように一部のキャッシュタグはキャッシュ判定部412から破棄される。このとき、破棄されるキャッシュタグの値540、破棄される同期情報の値542、及びライン番号527が、フェッチ部430に入力される。
【0068】
入力された同期情報の値542が「0」である場合、キャッシュタグの値540が示すアドレスに対応する前段処理220からのデータは、後段処理230からのリード要求に従って後段処理230に転送されている。このため、このデータをグローバルバッファ240に待避させる必要はない。このデータは、プリロード命令により、キャッシュメモリ434のライン番号527に対応するキャッシュラインに格納されている。このため、入力された同期情報の値542が「0」である場合、フェッチ部430は、キャッシュメモリ434が有する、ライン番号527に対応するキャッシュラインのデータを破棄する。
【0069】
一方、入力された同期情報の値542が「1」である場合、キャッシュタグの値540が示すアドレスに対応する前段処理220からのデータは、後段処理230からのリード要求がないため後段処理230に転送されていない。このデータは、プリロード命令により、キャッシュメモリ434のライン番号527に対応するキャッシュラインに格納されている。このため、入力された同期情報の値542が「1」である場合、フェッチ部430は、キャッシュメモリ434が有する、ライン番号527に対応するキャッシュラインに格納されているデータを、グローバルバッファ240に待避させる。具体的にはフェッチ部430は、このデータをキャッシュタグの値540が示すグローバルバッファ240のアドレスに格納(ライトバック)する。
【0070】
以上のように、前段処理220からのライト要求により、ライトデータはキャッシュメモリに一時記憶される。そして、このライトデータをグローバルバッファ240にライトバックするかどうかは、後段処理230からのリード要求によって制御される。このように、前段処理220が送信したライトデータに対するライトバック動作を実行するか否かは、データを受信する後段処理230が決定する。より具体的には、後段処理230から得られた、リードデータをキャッシュメモリ434からグローバルバッファ240にライトバックする必要がないことを示す、リードポート404に入力された同期情報が参照される。そして、このような同期情報に少なくとも従って、破棄するデータをライトバックするか否かが切り替えられている。以上の例では、キャッシュメモリ434に書き込まれているデータを破棄する際に、このような同期情報に従って、ライトバックの有無が切り替えられている。
【0071】
上記の具体例においては、プリロード命令を用いることによりライトデータが後段処理230に転送されるデータであることが示されている場合、キャッシュメモリ434に格納されたデータに関連付けて、同期情報の値542として「1」が格納される。この同期情報は、前段処理220から得られた、ライトデータが後段処理230に転送されるデータであることを示している。また、こうしてキャッシュメモリ434に格納されたデータは、グローバルバッファ240から取得されたものではなく、前段処理220から直接取得したものである。一方で、こうしてキャッシュメモリ434に格納されたデータを要求する場合、後段処理230は、リードポート404に同期情報として「0」を入力することができる。この同期情報は、後段処理230から得られた、リードデータをキャッシュメモリ434からグローバルバッファ240にライトバックする必要がないことを示している。これらの情報に従って、フェッチ部430は、キャッシュメモリ434に書き込まれているデータをグローバルバッファ240にライトバックせずに破棄した。
【0072】
このようにフェッチ部430は、前段処理220から得られた同期情報と、後段処理230から得られた同期情報と、の双方に基づいて、キャッシュメモリ434に書き込まれているデータをグローバルバッファ240にライトバックするか否かを制御している。とりわけ、上記の例においては、前段処理220から得られた同期情報と、後段処理230から得られた同期情報の演算結果である「0」が、同期情報の値542として格納されている。そして、この同期情報の値542に従って、ライトバックの制御が行われた。一方で、このような構成は一例にすぎない。例えば、同期情報の値542として、前段処理220から得られた同期情報と、後段処理230から得られた同期情報と、のそれぞれが格納されてもよい。
【0073】
(後段処理でタイル走査が行われる場合の動作例)
実施形態1のようなI/F250を用いることにより、前段処理220及び後段処理230で用いられる走査順序にかかわらず、このような動作を実現することができる。実施形態1では、例えば
図3(A)に示すように、前段処理220でタイル走査が行われ、後段処理230でラスタ走査が行われていたが、前段処理220及び後段処理230はこれに限定されない。例えば、前段処理220で所定サイズのタイルに従うタイル走査が行われ、後段処理230で異なる大きさのタイルに従うタイル走査が行われる場合にも、実施形態1の方法は有効である。このような場合、後段処理230は、例えば、1つのタイル内の各画素の画素データをI/F250から取得し、取得した画素データを用いた処理を行い、このタイル内の各画素の処理後の画素データを生成することができる。後段処理230は、このようなタイルごとの処理をそれぞれのタイルについて繰り返すことにより、処理後の画像データを生成することができる。この場合もI/F250は、上記のように、後段処理230に要求されたデータをキャッシュメモリ434から出力し、又はグローバルバッファ240から取得して出力することができる。
【0074】
一方、このような1つのタイルについての処理において、タイル外の画素の画素データが参照されることがある。例えば、後段処理230が画像データに対してFIRフィルタのようなフィルタ処理を行う場合、ある画素の画素データを算出するために、周辺画素の画素データが参照されることがある。このような場合、後段処理230は、1つのタイル内の各画素の画素データに加えて、このタイルの周辺画素を含む、より大きなタイルの画素データをI/F250から取得する。
【0075】
図4(B)~(E)の例では、後段処理230は、1つ目のタイルを処理する際に、より大きなタイルである領域391内のデータを取得し、同様に2~4つ目のタイルを処理する際に、より大きなタイルである領域392~394内のデータを取得する。
図4(B)~(E)において、後段処理230によって画素のデータが2回以上取得される領域は、ハッチングで示されている。以下、このような領域のことをオーバーラップ領域と呼ぶ。例えば、後段処理230において、処理対象画素を中心とする縦5画素×横5画素の計25画素を参照するフィルタ処理を行う場合、オーバーラップ領域の幅は2画素となる。
【0076】
以下、このようなオーバーラップ領域が存在する場合の、本実施形態に係るインタフェース装置の動作例について、
図3(B)を参照して説明する。
図3(B)で後段処理230は、領域350の画像データをI/F250から取得しようとしている。後段処理230は、領域350のうち、領域351のデータに対するリード要求を行う際には、
図3(A)の場合と同様に、リード要求の際に同期情報として「1」を設定する。ここで、領域351はオーバーラップ領域ではない領域であり、すなわち後続するタイルの処理において参照されない領域である。この場合、上述の通り、キャッシュヒットした場合は、キャッシュメモリ434に格納されているデータがライトバックされずに破棄される。
【0077】
このように、後段処理230は、I/F250に対しデータを要求する際に、データを後の処理で再度要求するか否かを判定することができる。また、再度要求しないとの判定に応じて、要求するデータをキャッシュメモリ434からグローバルバッファ240にライトバックする必要がないことを示す同期情報(「1」)を、I/F250に対して送信することができる。
【0078】
一方で後段処理230は、領域350のうち、領域352のデータに対するリード要求する際には、リード要求の際に同期情報として「0」を設定する。ここで、領域352はオーバーラップ領域であり、すなわち後続するタイルの処理において参照される領域である。この場合、キャッシュヒットしたとしても、XOR演算の結果、キャッシュメモリ434に格納されているデータに対応する同期情報532の値は「1」のままとなる。このため、キャッシュヒットしたとしても、キャッシュメモリ434に格納されているデータはグローバルバッファ240にライトバックされる。この結果として、後続するタイルの処理時に、参照する領域のデータをグローバルバッファ240から取得することが可能となる。
【0079】
このように、I/F250に送信される、後段処理230が要求したデータをキャッシュメモリ434からグローバルバッファ240にライトバックする必要性を示す同期情報を制御することができる。後段処理230は、このような制御を、I/F250に対してタイル領域に含まれるデータを要求する際に、データが他のタイル領域に含まれるか否か(すなわちオーバーラップ領域に含まれるか否か)に応じて行うことができる。
【0080】
なお、本実施形態に係るインタフェース装置の動作は、上記のものに限定されない。例えば、
図3(C)の例で、後段処理230は、1つのタイルを処理する際に領域360のデータを取得する。ここで、
図3(C)の例では行381の読み込みが終わった後に行382の読み込みが行われる。このため、別のタイルを処理するために領域375のデータを読み込む際には、領域360の下端にある領域364のデータがキャッシュメモリから破棄されている可能性が高い。このため、領域364のデータをグローバルバッファ240に待避させるために、後段処理230は領域364のデータに対するリード要求を行う際に同期情報として「0」を設定する。
【0081】
一方で、
図3(C)の例では領域360のデータの読み込みが終わった後に領域370のデータの読み込みが行われる。したがって、領域370は領域362を含んでいるが、領域370のデータを読み込む際に領域362のデータはキャッシュヒットする。すなわち、領域362のデータをグローバルバッファ240に待避させる必要はないため、後段処理230は領域364のデータに対するリード要求を行う際に同期情報として「1」を設定してもよい。
【0082】
後段処理230の種類は特に限定されず、後段処理230が解像度変換(任意変倍処理)のような画像の大きさを変更する処理を行う場合にも、本実施形態を適用できる。タイル処理のような領域分割手法を用いて解像度変換を行う場合、変倍率によっては、処理において参照される領域の大きさ、又は処理により出力される領域の大きさが、画像中のタイルの位置によって変動する場合がある。一方で、後段処理230はこのような参照する領域の大きさの変動を検知できるため、領域の大きさの変化に応じてリード要求の数を変えることにより、処理に必要なデータを得ることができる。また、後段処理230は、参照する領域の大きさの変化と、出力される領域の大きさの変化とを検知することができるため、上述したオーバーラップ領域の変化も検知できる。このため、後段処理230は、上述のように同期情報の値を変更することで、ライトバック動作を行うかどうかを制御することができる。
【0083】
以上のように本実施形態によれば、I/F250は、前段処理220による処理後のデータの少なくとも一部を、グローバルバッファ240への一時保存を行わずに、後段処理230に直接転送することができる。また、I/F250は、このように直接転送できなかったデータのみをグローバルバッファ240に待避させる。このように、I/F250を用いて前段処理220と後段処理230とを直結することにより、グローバルバッファ240に待避することなく後段処理230に直接転送されるデータと、グローバルバッファ240に待避するデータと、を選り分けることができる。このため、前段処理220から出力された画像データの全体をグローバルバッファ240に書き出す場合と比較して、処理速度を向上させ、及び消費電力を減少させることができる。このように、I/F250を用いることにより、前段処理220から後段処理230へのデータ転送処理を効率化することができる。
【0084】
I/F250はキャッシュメモリ434の大きさに応じてこのような選り分け動作を行うことができる。前段処理220から後段処理230に直接データを転送するためには、データがグローバルバッファ240に待避する前に後段処理230がリード要求を行う必要がある。このため、キャッシュメモリ434の容量が大きいほど、直接データを転送するためのリード要求のタイミリミットが遅くなる。直接のデータ転送が行われると、その後I/F250はこのデータをグローバルバッファ240にライトバックせずにキャッシュメモリ434から破棄するため、グローバルバッファ240へのアクセス量が減少する。このため、キャッシュメモリの大きさと、グローバルバッファ240へのアクセス量と、のバランスを調整することができる。キャッシュメモリ434の容量が大きいほど、前段処理220と後段処理230とを疎結合化でき、I/F250のシステム上での動作がより安定になる。
【0085】
[実施形態2]
実施形態1では、1つのチップ内にある前段処理220と後段処理230とが接続された。しかしながら、前段処理220と後段処理230が別々のチップに搭載されていてもよい。実施形態2においては、
図2(B)に示されるようにチップ265(チップB)は、I/F250と、後段処理230とを有している。I/F250は実施形態1と同様の機能を持ち、チップ265とは異なるチップ260(チップA)が有している前段処理220と接続されている。前段処理220のWDMAC226は、チップ265のグローバルバッファ240のアドレスへの、処理部224による処理結果のライト要求を発行する。
図2(B)ではチップ間のインタフェースの一例としてPCIeが用いられており、チップ260のPCIe228はライト要求をPCIeの転送プロトコルに変換してチップ265に転送する。チップ265のPCIe238は、チップ260からの転送データを受信し、I/F250にライト要求を行う。チップ265の後段処理230、NoC210、コントローラ245、及びグローバルバッファ240の機能は、実施形態1と同様である。
【0086】
このような構成により、複数のチップ間にまたがって、処理部間でのデータ処理の仕様又は制約の違いを吸収しながら、処理部間でのデータ転送を行うことができる。この例において、前段処理220から出力するデータ量以上のデータを転送する必要はない。また、この例において後段処理230を有するチップ265がI/F250及びグローバルバッファ240を有している。したがって、この構成によれば、チップ265におけるキャッシュメモリの大きさと、グローバルバッファ240へのアクセス量と、のバランスを調整することができる。チップ260の前段処理220は、チップ間インタフェースを介して実施形態1と同様に予め定められた同期情報を転送することができる。また、チップ265のI/F250は、前段処理220から受け取った同期情報を、実施形態1と同様に後段処理230から受け取った同期情報で修正することができる。
【0087】
[実施形態1,2の変形例]
以下、実施形態1,2における同期情報の修正についてさらに詳細に説明する。実施形態1と同様の方式を用いる場合、同期情報の修正は以下のように行うことができる。すなわち、ライトポート402へライト要求とともに入力される同期情報と、リードポート404へリード要求とともに入力される同期情報とを用いて、所望のキャッシュラインについての同期情報を演算することができる。そして、キャッシュミスが生じると、最も古いキャッシュライン[0]についての同期情報[0]はI/F250から破棄される。このとき、破棄される同期情報[0]の値が1である場合には、グローバルバッファ240(例えばDRAM)にキャッシュデータをライトバックすることができる。
【0088】
一方、実施形態2のようにチップ間でデータを送受信するような場合など、優先的にライトポートからのデータをリードポートに伝達したいことがある。このような場合には、上記のようなライトバックを行わない動作を用いることができる。例えば、ライトポート402からの入力をストール(一時停止)し、リードポート404からのリード要求を優先的に処理することができる。そして、最も古いキャッシュライン[0]に対するリード要求が入力され、同期情報[0]の値が1から0になり、キャッシュライン[0]のキャッシュデータが破棄可能となった時に、ライトポート402の入力ストール(一時停止)を解除することができる。
【0089】
このような実施形態によれば、ライトポート402からのデータ受信より、リードポート404へのデータ送信を優先的に行うことにより、グローバルバッファ240へのデータの書き戻し量を抑制することができる。また、グローバルバッファ240からのデータの再読み出し量も抑制されるため、グローバルバッファ240(例えばDRAM)へのアクセス帯域を削減し、ライトポート402からリードポート404への伝達レイテンシを短くすることができる。
【0090】
さらに、同期情報を用いた制御手法について詳細に説明する。実施形態1の方式では、同期情報は1ビットのフラグであり、ライトポート402から受信するデータと、リードポート404に送信するデータと、の間のデータ転送比は1対1であった。一方で、同期情報はNビット(Nは1以上)のカウント値であってもよい。例として、ライトポート402からの受信データを、リードポート404から7回読み出す場合について説明する。この場合、ライトポート402へとライト要求とともに入力される同期情報の値を7にすることができる。こうして入力された同期情報(値=7)は、キャッシュライン[7]についての同期情報[7]として書き込まれる。そして、リードポート404へのリード要求がキャッシュヒットするたびに、対応するキャッシュラインについての同期情報から1が減算される。そして、最も古いキャッシュライン[0]からキャッシュデータが破棄されるときに、対応する同期情報[0]の値が0であればライトバックは行われず、1以上であればグローバルバッファ240(例えばDRAM)への書き戻しが行われる。この場合、ライトポート402からリードポート404へのデータ転送比を1:7に制御することができる。
【0091】
また、同期情報の使い方を工夫することにより、ライトポート402から受信するデータと、リードポート404に送信するデータと、のデータ転送比が予め確定していない場合であっても、データ転送比を制御できる。例えば、8ビットの同期情報を用い、前段処理220は、ライト要求とともに値として0xFF(無限倍)を持つ同期情報を、ライトポート402からI/F250に書き込むことができる。このとき、前段処理220は、送信データが後段処理230でどのように利用されるかを知る必要は必ずしもない。データ転送比をどのような大きさにするかは、データを利用する後段処理230が決めることができる。この場合も、リードポート404へリード要求とともに入力される同期情報の値と、キャッシュヒットしたキャッシュラインについての同期情報と、の演算により、キャッシュラインのキャッシュデータをライトバックするか破棄するかを定めることができる。
【0092】
例えば、後段処理230は、リードポート404へのリード要求により、必要な回数だけ所望のキャッシュデータを読み出すことができる。キャッシュメモリに所望のデータがない場合、グローバルバッファ240(例えばDRAM)から再読み出しされたデータ及び同期情報が、リードポート404に送信される。そして、リードポート404へのリード要求により、所望のデータを最後に読み出すときに、キャッシュラインについての同期情報を強制的に0の値で上書きすることができる。このようなキャッシュラインのキャッシュデータは、グローバルバッファ240に書き戻されることなく、キャッシュメモリから廃棄される。後段処理230は、リードポート404へリード要求とともに入力する同期情報を用いて、このような同期情報の上書きを行うことができる。
【0093】
このような実施形態によれば、前段処理220の送信データと後段処理230の受信データとのデータ転送比を容易に制御することができる。とりわけ、上述の実施形態のように、後段処理230が同期情報を制御することにより、柔軟なデータ転送比を実現することがきる。この場合、前段処理220はデータを単純に送信すればよい。
【0094】
[実施形態3]
上述の実施形態においては、画像データを異なる走査順序で送受信したり、フィルタ処理のオーバーラップ領域を考慮したりするために、大きなキャッシュメモリを用いることが望ましい。キャッシュメモリが大きいほど、グローバルバッファ(例えばDRAM)へのデータ退避及び再読み出しのためのアクセスを抑制することができるため、グローバルバッファへのアクセス帯域を削減できる。
【0095】
このため、キャッシュメモリとして、従来のSRAMの代わりに、spin-transfer torque magnetic RAM(STT-MRAM)のような、次世代の不揮発性メモリを用いることができる。また、次世代のメモリと呼ばれる、FRAM(登録商標)、ReRAM、PCMなどを用いることもできる。例えば、STT-MRAMは、SRAMに比べて回路素子が小さいため、4倍以上の容量を有することが容易である。このため、キャッシュメモリの容量を大きくすることができる。また、STT-MRAMの消費電力は、SRAMと比べて、リードアクセスについては約1/60の大きさでありうるが、ライトアクセスについては約1.6倍の大きさとなりうる。しかしながら、上記の変形例のように、本発明の一実施形態に係るインタフェース装置は、前段処理220によるライト1回に対する後段処理230によるリード回数、すなわちデータ転送比を容易に制御できる。このため、STT-MRAMを用いることによる消費電力の抑制効果を活用することができる。
【0096】
以上のように、キャッシュメモリとしてSTT-MRAMなどの次世代メモリ又は不揮発性メモリを用いることにより、キャッシュ容量を大きくし、データ伝送の効率を向上することができる。また、ライトポートに対するリードポートのデータ転送比が大きいとき、STT-MRAMを用いることで効果的に消費電力を抑制できる。
【0097】
[実施形態4]
前段処理220は、撮像センサなどのセンシングデバイスであってもよい。例えば、撮像センサは単純なラスタ走査順で撮像データを送信することが多い。また、後段処理230は、撮像データに対する高画質化処理であってもよい。上述の実施形態によれば、省メモリ化が可能なタイル領域単位の画像処理を用いるための走査変換、及びフィルタ処理のためのオーバーラップ領域の制御を行うことができる。そして、上述の実施形態によれば、前段処理220は単純にデータ送信を行うことができ、後段処理230が同期情報を制御することにより多彩な方式のデータ受信を行うことができる。したがって、上述の実施形態は、撮像センサなどのセンシングデバイスが共有キャッシュI/Fに対する単純なデータ送信を行い、複雑な画像処理を行う後段処理230がその機能及び動作に応じたデータ受信を行うように使用可能である。
【0098】
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【0099】
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
【符号の説明】
【0100】
220:前段処理、230:後段処理、250:共有キャッシュI/F、402:ライトポート、404:リードポート、410:プリフェッチ部、430:フェッチ部