(57)【特許請求の範囲】
【請求項１】
画像データを保持するメインメモリと、
前記メインメモリとの間で前記画像データの授受を行うキャッシュメモリと、
前記メインメモリと前記キャッシュメモリとの間のデータ転送を管理すると共に、前記キャッシュメモリの状態に関する情報を保持する転送制御装置と、
前記キャッシュメモリ内の前記画像データを用いて画像処理プログラムを実行し、前記画像処理プログラムを実行して得られた画像データを前記キャッシュメモリに保持させるプログラム実行部と
を具備し、前記キャッシュメモリは、各々が前記画像データを保持可能な複数のエントリを含み、
前記転送制御装置は、前記メインメモリから前記キャッシュメモリのエントリに転送される前記画像データの識別情報と、前記プログラム実行部で得られた前記画像データが前記エントリに保持されているか否かを示すデータ更新情報とを、前記エントリ毎に保持し、
前記転送制御装置は、いずれかの前記エントリに対応した前記データ更新情報がアサートされている場合、該エントリ内の前記画像データを前記メインメモリに書き込む
ことを特徴とする描画装置。
【請求項２】
前記転送制御装置は、定期的に、前記データ更新情報に基づいて、前記キャッシュメモリから前記メインメモリへのデータ転送を実行する
ことを特徴とする請求項１記載の描画装置。
【請求項３】
前記転送制御装置はカウンタを有し、前記カウンタのカウンタ値で指定される前記エントリの前記データ更新情報がアサートされているか否かを確認する
ことを特徴とする請求項１または２記載の描画装置。
【請求項４】
画像データを保持するメインメモリと、複数のエントリを有し、前記メインメモリとの間で前記画像データの授受を行うキャッシュメモリと、前記メインメモリと前記キャッシュメモリとの間のデータ転送を管理すると共に、前記キャッシュメモリの状態に関する情報を保持する転送制御装置と、前記キャッシュメモリ内の前記画像データを用いて画像処理プログラムを実行するプログラム実行部とを具備する描画装置のデータ転送方法であって、
前記プログラム実行部が、前記画像処理プログラムを実行することにより得られた新たな画像データをいずれかの前記エントリに保持させるステップと、
前記新たな画像データが前記エントリに保持された際に、前記転送制御装置が該エントリに関する更新情報をアサートするステップと、
前記転送制御装置が、前記更新情報がアサートされた前記エントリの有無を検出するステップと、
前記更新情報がアサートされた前記エントリが検出された際、前記転送制御装置が、該エントリに保持される前記画像データを前記メインメモリに転送するステップと
を具備することを特徴とするデータ転送方法。
【請求項５】
前記転送制御装置は、定期的に、前記データ更新情報に基づいて、前記画像データの前記メインメモリへの転送を実行する
ことを特徴とする請求項４記載のデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、描画装置及びデータ転送方法に関するもので、例えば複数のピクセルを同時に並列処理する画像処理ＬＳＩに関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Central Processing Unit）の動作の高速化に伴って、画像描画装置に対しても高速化の要求が高まってきている。
【０００３】
画像描画装置は一般に、投入された図形をピクセルに分解する図形分解手段と、ピクセルに描画処理を加えるピクセル処理手段と、描画結果を読み書きする記憶手段とを備える。近年、ＣＧ（Computer Graphics）技術の進歩により、複雑なピクセル処理技術が頻繁に用いられるようになってきている。その結果ピクセル処理手段の負荷が大きくなるため、ピクセル処理手段を並列化することが行われている（例えば特許文献１参照）。
【０００４】
しかしながら上記従来の構成であると、メインメモリ上のデータをキャッシュに読み出すために、種々のバッファメモリが必要であった。その結果、ハードウェアコストが上昇するという問題があった。
【特許文献１】米国特許５，９８２，２１１号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
この発明は、上記事情に鑑みてなされたもので、その目的は、ハードウェアコストを削減出来る描画装置及びデータ転送方法を提供することにある。
【課題を解決するための手段】
【０００７】
一態様に係る描画装置は、画像データを保持するメインメモリと、前記メインメモリとの間で前記画像データの授受を行うキャッシュメモリと、前記メインメモリと前記キャッシュメモリとの間のデータ転送を管理すると共に、前記キャッシュメモリの状態に関する情報を保持する転送制御装置と、前記キャッシュメモリ内の前記画像データを用いて画像処理プログラムを実行し、前記画像処理プログラムを実行して得られた画像データを前記キャッシュメモリに保持させるプログラム実行部とを具備し、前記キャッシュメモリは、各々が前記画像データを保持可能な複数のエントリを含み、前記転送制御装置は、前記メインメモリから前記キャッシュメモリのエントリに転送される前記画像データの識別情報と、前記プログラム実行部で得られた前記画像データが前記エントリに保持されているか否かを示すデータ更新情報とを、前記エントリ毎に保持し、前記転送制御装置は、いずれかの前記エントリに対応した前記データ更新情報がアサートされている場合、該エントリ内の前記画像データを前記メインメモリに書き込む。
【発明の効果】
【００１０】
この発明によれば、ハードウェアコストを削減出来る描画装置及びデータ転送方法を提供出来る。
【発明を実施するための最良の形態】
【００１１】
以下、この発明の実施形態を図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【００１２】
この発明の第１の実施形態に係るグラフィックプロセッサについて、図１を用いて説明する。図１は、本実施形態に係るグラフィックプロセッサのブロック図である。
【００１３】
図示するように、グラフィックプロセッサ１０はラスタライザ（rasterizer）１１、複数のピクセルシェーダ（pixel shader）１２−０〜１２−３、及びローカルメモリ１３を備えている。なお、本実施形態ではピクセルシェーダ１２の数は４個であるがこれは一例に過ぎず、８個、１６個、３２個等でも良く、その数は限定されるものではない。
【００１４】
ラスタライザ１１は、入力された図形情報に従ってピクセル（pixel）を生成する。ピクセルとは、所定の図形を描画する際に取り扱われる最小単位の領域のことであり、ピクセルの集合によって図形が描画される。生成されたピクセルはピクセルシェーダ１２−０〜１２−３へ投入される。
【００１５】
ピクセルシェーダ１２−０〜１２−３は、ラスタライザ１１から投入されたピクセルにつき演算処理を行い、ローカルメモリ１３上に画像データを生成する。ピクセルシェーダ１２−０〜１２−３の各々は、データ振り分け部２０、テクスチャユニット（texture unit）２３、及び複数のピクセルシェーダユニット２４を備えている。
【００１６】
データ振り分け部２０はラスタライザ１１からデータを受け取る。そして、受け取ったデータをピクセルシェーダ１２−０〜１２−３へ割り振る。
【００１７】
テクスチャユニット２３はローカルメモリ１３からテクスチャデータを読み出し、テクスチャマッピングに必要な処理を行う。テクスチャマッピングとは、ピクセルシェーダユニット２４で処理されたピクセルにテクスチャデータを貼り付ける処理のことであり、ピクセルシェーダユニット２４において行われる。
【００１８】
ピクセルシェーダユニット２４はシェーダエンジン部であり、ピクセルデータに対してシェーダプログラムを実行する。そしてピクセルシェーダユニット２４のそれぞれはＳＩＭＤ（Single Instruction Multiple Data）動作を行って、複数個のピクセルを同時に処理する。ピクセルシェーダユニット２４はそれぞれ、命令制御部２５、描画処理部２６、及びデータ制御部２７を備えている。これらの回路ブロック２５〜２７の詳細については後述する。
【００１９】
ローカルメモリ１３は、例えばｅＤＲＡＭ（embedded DRAM）であり、ピクセルシェーダ１２−０〜１２−３で描画されたピクセルデータを記憶する。
【００２０】
次に、本実施形態に係るグラフィックプロセッサにおける図形描画の概念について説明する。図２は、図形を描画すべき全体の空間を示す概念図である。なお、図２に示す描画領域は、ローカルメモリ内においてピクセルデータを保持するメモリ空間（以下、フレームバッファと呼ぶ）に相当する。
【００２１】
図示するように、フレームバッファは、マトリクス状に配置された例えば（４０×１５）個のブロックＢＬＫ０〜ＢＬＫ５９９を含んでいる。ブロックの数は一例に過ぎず、（４０×１５）個に限定されるものではない。ピクセルシェーダ１２−０〜１２−３は、ブロックＢＬＫ０〜ＢＬＫ５９９順にピクセルを生成する。各ブロックＢＬＫ０〜ＢＬＫ５９９はそれぞれ、マトリクス状に配置された３２個のスタンプ（stamp）を含んで形成されている。図３は、図２に示された各ブロックが複数のスタンプを有する様子を示している。
【００２２】
各スタンプは、同一のピクセルシェーダによって描画される複数のピクセルの集合体である。本実施形態では１個のスタンプは（４×４）＝１６個のピクセルを含んでいるが、この数は例えば１個、４個、…等でも良く、限定されるものではない。図３において、各スタンプに記載された番号（＝０〜３１）を以下スタンプＩＤ（ＳｔＩＤ）と呼び、各ピクセルに記載された番号（＝０〜１５）を以下ピクセルＩＤ（ＰｉｘＩＤ）と呼ぶ。また、各スタンプにおける（２×２）個のピクセルの集合をクアッド（quad）と呼ぶことにする。すなわち、１個のスタンプには（２×２）個のクアッドが含まれる。これらの４つのクアッドを、以下クアッドＱ０〜Ｑ３と呼ぶことにし、この数字をクアッドＩＤと呼ぶ。ブロックＢＬＫ０〜ＢＬＫ５９９の各々には、上記スタンプが（４×８）＝３２個含まれている。従って、全体として（６４０×４８０）個のピクセルによって、図形を描画すべき空間が形成されている。
【００２３】
なおピクセルシェーダユニット２４をピクセルシェーダ１２−０〜１２−３順に番号付けすると、その番号に等しいスタンプＩＤを有するスタンプが各ピクセルシェーダユニット２４によって処理される。すなわち、各スタンプ内のピクセルは、その位置に応じて処理が行われるピクセルシェーダユニットが予め決められている。
【００２４】
次に、上記フレームバッファに描画される図形に関して説明する。まず図形を描画するにあたって、ラスタライザ１１に図形情報が入力される。図形情報は、例えば図形の頂点座標や色情報などである。ここで、例として三角形を描画する場合について説明する。ラスタライザ１１に入力された三角形は、描画空間において図４に示すような位置を占めるとする。すなわち、三角形の３つの頂点座標が、ブロックＢＬＫ２におけるＳｔＩＤ＝３１のスタンプ、ブロックＢＬＫ４１におけるＳｔＩＤ＝１５のスタンプ、及びブロックＢＬＫ４３におけるＳｔＩＤ＝４のスタンプに位置すると仮定する。ラスタライザ１１は、描画すべき三角形が占める位置に対応するスタンプを生成する。この様子を示しているのが図５である。生成されたスタンプデータは、それぞれ予め対応付けられたピクセルシェーダ１２−０〜１２−３に送られる。
【００２５】
そしてピクセルシェーダ１２−０〜１２−３は、入力されたスタンプデータに基づいて、自らの担当するピクセルについて描画処理を行う。その結果、図５に示されるような三角形が、複数のピクセルによって描画される。ピクセルシェーダ１２−０〜１２−３によって描画されたピクセルデータは、スタンプ単位でローカルメモリに格納される。
【００２６】
図６は、図５におけるブロックＢＬＫ２の拡大図である。図示するようにブロックＢＬＫ２に関して、ラスタライザ１１は８個のスタンプを生成する。それらのスタンプＩＤはそれぞれＳｔＩＤ＝１６、１７、１９、２１、２５〜２７、３１である。前述の通り、ラスタライザ１１で生成されたスタンプの個々には（４×４）＝１６個のピクセルが含まれている。しかし、例えスタンプが発行されたとしても、図形によっては全てのピクセルに対して描画処理を行う必要はない。例えば図６において、ＳｔＩＤ＝１７、２７のスタンプは三角形の内部にあるので、このスタンプ内に含まれる全てのピクセルに対して描画処理を行う必要がある。しかし、例えばＳｔＩＤ＝２１のスタンプにおいては、ＰｉｘＩＤ＝０〜７、９、１２〜１５のピクセルは三角形の外部にあるため描画処理の必要はない。描画処理の必要なピクセルは、ＰｉｘＩＤ＝８、１０、１１のピクセルのみである。このように、描画処理すべきであることを以下では「バリッド（valid）である」と呼び、描画不要であることを「インバリッド（invalid）である」と呼ぶことにする。
【００２７】
次に図１に戻ってピクセルシェーダユニット２４の構成について説明する。図示するようにピクセルシェーダユニット２４は、命令制御部２５、描画処理部２６、及びデータ制御部２７を備えている。命令制御部２５は、タスクの実行管理、スタンプデータの受信、クアッドマージ、サブパスの実行管理等を行う。描画処理部２６は、ピクセルの演算処理を行う。データ制御部２７はキャッシュメモリを備え、キャッシュメモリやローカルメモリ１３へのデータアクセスの制御を行う。
【００２８】
命令制御部２５の動作について以下説明する。命令制御部２５はパイプライン動作を行う。命令制御部２５は、データ振り分け部２０から複数のデータを受け取り、保持する。そのデータとは、例えばスタンプのＸＹ座標、描画方向、ポリゴンの面（face）情報、描画すべき図形の有するパラメータの代表値、図形の奥行き情報、またはピクセルがバリッドか否かを示す情報などである。また命令制御部２５はクアッドマージを行う。クアッドマージとは、同一ＸＹ座標の連続する２つのスタンプを１つのスタンプにマージすることである。クアッドマージを行うことで、２つのスタンプのうちバリッドなクアッドを１つのスタンプに合成出来、一度に処理出来る。従って、描画処理すべきデータ量を圧縮出来る。クアッドマージの様子を図７に示す。
【００２９】
２つの時間的に連続する２つのスタンプが、例えば図７に示すようであったとする。１つのスタンプに含まれる４つのクアッドをそれぞれクアッドＱ０〜Ｑ３と呼ぶことにする。まず始めにクアッドＱ０、Ｑ２がバリッドで且つクアッドＱ１、Ｑ３がインバリッドなスタンプ１が命令制御部２５に入力され、引き続きクアッドＱ１、Ｑ２がバリッドで且つクアッドＱ０、Ｑ３がインバリッドなスタンプ２が入力された場合を考える。この場合、２つのスタンプ１、２をマージすることにより、スタンプ１のクアッドＱ０、Ｑ２と、スタンプ２のクアッドＱ１、Ｑ２とを含む新規なスタンプを生成する。この新規なスタンプを、クアッドマージ前のスタンプと区別するために以後スレッド（thread）と呼ぶことにする。クアッドマージにより生成されたスレッドは番号付けされ、その番号を以下スレッドＩＤ（ＴｄＩＤ）と呼ぶことにする。そして命令制御部２５は、生成されたスレッドに関する情報を保持する。スレッドに関する情報とは、例えばサブパスＩＤ、スレッドＩＤ、またスレッドに含まれる４つのクアッドのクアッドマージ前のスタンプ内における位置情報などである。サブパスＩＤは、現在実行中または次に実行すべきサブパス（sub-pass）番号である。サブパスについて以下説明する。
【００３０】
命令制御部２５は、各スレッドに対して、エンド信号を検出するまで所定の命令を実行する。実行される命令列は、図８に示すよう最大でＸ個の命令列に分割出来、分割されて出来た個々の命令列がサブパスである。個々のサブパスの最後にはイールド命令Ｙｉｅｌｄが配置され、最終のサブパスの最後にはイールド命令の代わりにエンド命令Ｅｎｄが配置されている。
【００３１】
図９は、サブパスが実行される様子を時間と共に示した概念図である。図９において、スレッド５、６、７は同一のピクセルシェーダユニットによって処理される。図示するように、スレッドに対する処理はイールド命令によって一旦休止する。そして、代わりに他のスレッドに対する命令が実行される。休止したスレッドは、後に発行可能となった際に起動される。すなわち、２つのイールド命令間で実行される命令がサブパスである。そしてサブパスの単位でスレッドが実行され、その期間の処理は連続して実行される。
【００３２】
命令制御部２５はサブパスの制御を行う。そして、スレッドとそれに対応するサブパスＩＤを保持し、いずれのスレッドが発行可能かを管理する。
【００３３】
更に命令制御部２５は、データ振り分け部２０から与えられる情報に基づいて、ピクセルデータを補間する。通常、ラスタライザによって生成されるピクセルは、スタンプあたり１個だけである。従って、このラスタライザ１１によって生成されたピクセルデータに基づいた計算により、描画処理部２６は同じスタンプ内の他のピクセルに関する情報を得る。
【００３４】
次にデータ制御部２７について、図１０及び図１１を用いて説明する。図１０はデータ制御部２７のブロック図である。データ制御部２７はパイプライン動作を行う。図１１は、パイプライン動作の各ステージと関連付けて示したデータ制御部２７のブロック図である。
【００３５】
ピクセルシェーダユニットの各回路ブロックにおける処理は、第１乃至第３ステージの少なくとも３つのステージを有する。各ステージについて大まかに説明すると、第１ステージでは、命令制御部２５が必要なデータの読み出しや、命令のプリフェッチ等を行う。またデータ制御部２７では、データアクセスに必要なアドレス信号の生成や、プリロード（後述する）に関する制御を行う。第２ステージでは、命令制御部２５がピクセルデータの補間を行い、データ制御部２７がデータアクセスに必要な命令を生成する。そして第３ステージでは、命令制御部２５及びデータ制御部２７における処理結果に基づいて描画処理部２６が描画処理を行う。なお、命令制御部２５によるデータ振り分け部２０からのデータの受信は、上記第１ステージの前の段階で行われる。
【００３６】
データ制御部２７の構成について説明する。図示するように、データ制御部２７は、アドレス発生部４０、キャッシュメモリ４１、キャッシュ制御部４２、及びプリロード制御部４３を備えている。アドレス発生部４０は、命令制御部２５からロード／ストア命令が発行された際に、ローカルメモリ１３において読み出すべきデータのアドレス、または書き込むべきデータのアドレスを生成する（以下これをロード／ストアアドレスと呼ぶ）。ロード／ストア命令とは、描画処理部２６がピクセル処理を行う際に必要となるデータを読み出す命令（ロード）、または処理したデータを保持させる命令（ストア）である。より詳細には、ロード命令が発行されると、ピクセル描画処理に必要なデータが、キャッシュメモリ４１から、描画処理部２６内にあるレジスタに読み出される。必要なデータがキャッシュメモリ４１に無い場合にはローカルメモリ１３から読み出される。またストア命令が発行されると、描画処理部２６内のレジスタに保持されているデータが、一時的にキャッシュメモリ４１に書き込まれ、その後ローカルメモリ１３に書き込まれる。
【００３７】
キャッシュメモリ４１は、ピクセルデータを一時的に保持する。描画処理部２６は、キャッシュメモリ４１に保持されるデータを用いてピクセル処理を行う。
【００３８】
キャッシュ制御部４２は、ロード／ストア命令が発行された際における、キャッシュメモリ４１に対するアクセスを制御する。キャッシュ制御部４２は、キャッシュアクセス制御部４４、キャッシュ管理部４５、及びリクエスト発行制御部４６を備えている。
【００３９】
プリロード制御部４３は、プリロード命令が発行された際における、キャッシュメモリ４１に対するアクセスを制御する。プリロード制御部４３はプリロードアドレス発生部４７、プリロード保持部４８、サブパス情報管理部４９、及びアドレス保持部５０を備えている。プリロード命令とは、次に実行されるであろうスレッドのサブパスで使用されるデータを、ローカルメモリからキャッシュメモリ４１に予めプリフェッチするための命令である。
【００４０】
またデータ制御部２７は上記回路ブロックのいずれかにおいて、コンフィギュレーションレジスタを備える。コンフィギュレーションレジスタは、信号ＷＩＤＴＨ、ＢＡＳＥ、ＰＲＥＬＯＡＤを保持する。信号ＷＩＤＴＨは、ピクセルに関するフレームバッファのサイズを示す。ＢＡＳＥは、ローカルメモリ１３に保持されるデータのベースアドレス（先頭アドレス）を、フレームバッファモード及びメモリレジスタモードの両方の場合について示す。ＰＲＥＬＯＡＤは、プリロードのＯＮ／ＯＦＦを設定するためのものである。
【００４１】
データ制御部２７の内部の構成について、以下詳細に説明する。まずアドレス発生部４０について説明する。図１２はアドレス発生部４０のブロック図であり、入出力信号を示している。図示するように、アドレス発生部４０にはオフセットデータ、スレッドのＸＹ座標、スレッドＩＤ、クアッドＩＤ、サブパスＩＤ、及びバッファモード信号が入力される。ＸＹ座標は命令制御部２５から与えられる。スレッドＩＤ、クアッドＩＤ、及びサブパスＩＤは描画処理部２６から与えられる。アドレス発生部４０は、スレッドのＸ座標、Ｙ座標と、コンフィギュレーションレジスタに保持されるＷＩＤＴＨに基づいて、ロード／ストアアドレスを計算する。ロード／ストアアドレスは、上記情報から計算可能であれば良く、その計算式自体は特に限定されるものでは無い。下記に一例として、ピクセルシェーダユニットの数が４個であり、且つ１つのブロック内に３２個のスタンプが含まれる場合のロード／ストアアドレスの計算方法を示す。
【００４２】
Block ID = X/16 + (Y/32) × (WIDTH/16)  
Xr = (X/4) mod 16  
Yr = (Y/4) mod 16  
PUID[0] = Xr[1] ^Yr[1] = StID[0]  
PUID[1] = (Xr[1] AND ~(Yr[1] ^Yr[2]) | (~Xr[1] AND Xr[2])) ^Xr[0] ^Yr[0]  
= StID[1]  
PUID[2] = (Xr[1] AND ~(Yr[1] ^Xr[2]) | (~Xr[1] AND Yr[2])) ^Xr[0] ^Yr[0]  
= StID[2]  
PUID[3] = Xr[3] = StID[3]  
PUID[4] = Yr[3] = StID[4]  
なお上式におけるＢｌｏｃｋＩＤは図２で説明したＢＬＫ０〜ＢＬＫ５９９の番号である。Ｘ、ＹはＸ座標及びＹ座標である。PUIDはピクセルシェーダユニット番号であり、ピクセルシェーダユニット２４をピクセルシェーダ１２−０〜１２−３順に番号付けした際の番号である。ピクセルシェーダユニット番号は５ビットの信号であり、PUID[0]〜PUID[4]はその各ビットを示す。また上式の演算子は、ｍｏｄは剰余演算、ＡＮＤは論理積演算、＾は排他的論理和演算、~は論理否定演算、｜は論理和演算を表す。
【００４３】
そしてアドレス発生部４０は、上記計算結果とオフセットデータ、クアッドＩＤ、及びピクセルＩＤを図１３または図１４に示す順序に並べることによって、３２ビットのロード／ストアアドレスを生成する。ローカルメモリ１３は、２つのモードでデータを記憶することが可能であり、それぞれのモードをフレームバッファモード、メモリレジスタモードと呼ぶことにする。ロード／ストアアドレスは、ローカルメモリがフレームバッファモードで使用される場合にはスレッドのＸＹ座標から求められ、図１３のように配置することで得られる。他方、メモリレジスタモードで使用される場合にはスレッドＩＤによって求められ、図１４のように配置することで得られる。なお、オフセットデータは命令制御部２５から与えられる。また、フレームバッファモードとメモリレジスタモードのいずれを使用するかは、命令制御部２５からバッファモード信号として与えられる。ピクセルＩＤは、ＸＹ座標から知ることが出来る。なぜなら、図３で説明したように、各ピクセルセルＩＤを有するピクセルのスタンプ内における位置は予め決められているからである。また同様の理由によりクアッドＩＤも知ることが出来る。
【００４４】
アドレス発生部４０は、図１３または図１４に示すアドレスを発生すると、そのうちの一部をキャッシュデータアドレス、キャッシュインデックスエントリ、及びキャッシュエントリとして出力する。これらの信号は、キャッシュメモリ４１内のアドレスを示す信号であるが、その詳細は後述する。
【００４５】
次にキャッシュメモリ４１について図１５を用いて説明する。図１５はキャッシュメモリ４１のブロック図である。図示するようにキャッシュメモリ４１は、例えば２つのメモリ５１−０、５１−１を備えている。メモリ５１−０、５１−１は例えばＳＲＡＭやまたはＤＲＡＭである。メモリ５１−０、５１−１の各々はＭ個のエントリ０〜（Ｍ−１）を備えている。各エントリ０〜（Ｍ−１）は、それぞれ独立したメモリ５３−０〜５３−（Ｍ−１）である。更に、エントリ０〜（Ｍ−１）の各々は、Ｌ個（Ｌは２以上の自然数）のサブエントリ０〜（Ｌ−１）を備えている。キャッシュメモリ４１からデータが読み出される際には、メモリ５１−０内のいずれかのエントリにおけるいずれかのサブエントリと、メモリ５１−１内のいずれかのエントリにおけるいずれかのサブエントリとからそれぞれ、データがキャッシュリードデータとして読み出される。
【００４６】
なお、図１５においてエントリ０〜（Ｍ−１）の各々がＬ個のサブエントリ０〜（Ｌ−１）を有している理由は、キャッシュメモリ４１と外部とを接続するバスの転送可能データサイズが、メモリ５１−０、５１−１の各エントリサイズの（１／Ｌ）だからである。従って、バスの転送可能データサイズがエントリサイズ以上であれば、エントリがサブエントリを有する必要はなく、この場合にはエントリサイズでデータが外部へ読み出される。
【００４７】
また、図１５においてはキャッシュメモリ４１が２つのメモリ５１−０、５１−１を有する場合について示しているが、この数は一例に過ぎず、１個だけでも良いし、３つ以上であっても良い。キャッシュメモリ４１に含まれる２つのメモリ５１−０、５１−１には、それぞれ識別番号としてインデックス０、インデックス１がそれぞれ割り当てられている。そして、図１２乃至図１４で説明したアドレス信号のうち、キャッシュインデックスエントリ及びキャッシュデータアドレスには、メモリ５１−０、５１−１に割り当てられたインデックス０、インデックス１のいずれを選択すべきかの情報が含まれる。またキャッシュエントリには、サブエントリ０〜（Ｌ−１）のいずれを選択すべきかの情報が含まれている。またキャッシュメモリ４１に対しては、キャッシュイネーブル信号、キャッシュライトイネーブル信号、キャッシュライトデータ、及びキャッシュアドレスが、キャッシュアクセス制御部４４から入力される。キャッシュイネーブル信号はキャッシュメモリ４１をイネーブル状態にするための信号であり、キャッシュライトイネーブル信号はキャッシュメモリ４１への書き込み動作をイネーブルにする信号であり、キャッシュライトデータはキャッシュメモリ４１への書き込みデータであり、キャッシュアドレスはキャッシュメモリにおいてアクセスすべきアドレスを示す。
【００４８】
次にキャッシュ制御部４２が備えるキャッシュアクセス制御部４４、キャッシュ管理部４５、及びリクエスト発行制御部４６について説明する。まずリクエスト発行制御部４６について図１６を用いて説明する。図１６はリクエスト発行制御部４６のブロック図であり、入出力信号を示している。図示するようにリクエスト発行制御部４６には、プリロード要求イネーブル信号、リフィル要求イネーブル信号、リフィルアドレス、リフィル要求ＩＤ、及びリフィルアクノリッジ信号が入力される。プリロード要求イネーブル信号はキャッシュ管理部４５から与えられ、プリロード要求イネーブル信号プリロード要求が出力されるとアサートされる。リフィル要求イネーブル信号、リフィルアドレス、リフィル要求ＩＤはキャッシュ管理部４５から与えられ、それぞれリフィル要求のイネーブル信号、アドレス、リクエストＩＤを示す。ロード／ストア命令が発行された際に、該当するデータがキャッシュメモリ４１内に存在しなかった場合、該当データをローカルメモリからキャッシュメモリ４１へ読み出す必要がある。これをリフィル（refill）と呼ぶ。リフィルアクノリッジ信号はローカルメモリ１３から与えられ、リフィル要求に関するアクノリッジ信号である。
【００４９】
リクエスト発行制御部４６は、リフィル要求とプリロード要求の発行を制御する。具体的にはまず、ローカルメモリ１３へのリフィル要求とプリロード要求の総数をカウントする。ローカルメモリ１３からリフィルアクノリッジ信号が返ってくると、これらの要求数をカウントダウンする。これはローカルメモリ１３が受け付けることの出来るリクエスト数に上限があるからである。またプリロードとリフィルとでは、優先度はリフィルの方が高い。従って、リフィル要求とプリロード要求とが同時に発行待ちとなっている場合は、リフィル要求が優先して発行される。そして適切なタイミングで、リフィル要求信号をローカルメモリ１３へ出力する。またリクエスト発行制御部４６は、ローカルメモリ１３に対して発行待ちをしているリフィル要求の有無を、リフィルレディ信号としてアドレス保持部５０へ出力する。更に、ローカルメモリ１３におけるリクエストキューの有無、すなわちローカルメモリ１３に対してリフィル要求及びプリロード要求を発行出来るか否かを、要求状況信号としてアドレス保持部５０へ出力する。
【００５０】
次にキャッシュアクセス制御部４４について図１７を用いて説明する。図１７はキャッシュアクセス制御部４４のブロック図であり、入出力信号を示している。図示するようにキャッシュアクセス制御部４４には、ストアデータ、キャッシュインデックスエントリ、キャッシュエントリ、ヒットエントリ番号、ロードイネーブル信号、ストアイネーブル信号、リフィルアクノリッジ信号、リフィル要求ＩＤ、リフィルデータ、ライトバックアクノリッジ信号、ライトバックＩＤ、及びキャッシュリードデータが入力される。
【００５１】
ストアデータはキャッシュメモリ４１にストアすべきデータであり、描画処理部２６から与えられる。ヒットエントリ番号はキャッシュ管理部４５から与えられる。そしてロード／ストア命令が発行された際、該当データがキャッシュメモリ４１にあるか否か、ある場合いずれのエントリにあるかを示す。ヒットエントリ番号については後に詳細に説明する。ロードイネーブル信号、ストアイネーブル信号はそれぞれ、キャッシュ管理部４５及びシェーダプログラム実行部描画処理部２６から与えられ、ロード要求及びストア要求が発行された際にアサートされる。リフィルアクノリッジ信号、リフィル要求ＩＤ、リフィルデータはローカルメモリ１３から与えられる。ライトバックアクノリッジ信号、ライトバックＩＤはライトバック動作に関する信号であり、それぞれアクノリッジ信号及びＩＤを示し、ローカルメモリ１３から与えられる。ライトバックとは、キャッシュメモリ４１内のデータをローカルメモリへ書き込む動作のことであり、詳細は第２の実施形態で説明する。
【００５２】
またキャッシュアクセス制御部４４は、ロードイネーブル信号、ライトバックデータ、キャッシュイネーブル信号、キャッシュライトデータ、キャッシュアドレス、及びリフィルアクノリッジＩＤを出力する。ロードイネーブル信号は描画処理部２６に与えられる。ライトバックデータは、ライトバック時にキャッシュメモリ４１へ書き込むべきデータであり、ローカルメモリ１３へ与えられる。リフィルアクノリッジＩＤはリフィルのアクノリッジＩＤを示す信号であり、キャッシュ管理部４５へ与えられる。
【００５３】
キャッシュアクセス制御部４４は、キャッシュメモリ４１へのデータの書き込み、及びキャッシュメモリ４１からのデータの読み出しを制御する。キャッシュメモリ４１へのアクセスは、ロード、ストア、リフィル、及びライトバックの４種類がある。キャッシュメモリ４１へアクセスがなされる際、キャッシュアクセス制御部４４はキャッシュイネーブル信号をアサートする。
【００５４】
リフィルを行う場合、リフィルアクノリッジ信号がキャッシュアクセス制御部４４に到達してから一定時間後に、リフィルデータがローカルメモリ１３からキャッシュアクセス制御部４４に到達する。キャッシュアクセス制御部４４はリフィルデータを一旦保持した後、キャッシュメモリ４１へ書き込む。キャッシュメモリ４１へリフィルデータを書き込む際には、キャッシュアクセス制御部４４はキャッシュライトイネーブル信号をアサートし、キャッシュライトデータ及びキャッシュアドレスをキャッシュメモリ４１に対して出力する。更にキャッシュアクセス制御部４４は、ローカルメモリ１３からリフィルアクノリッジ信号を受け取ると、リフィルアクノリッジＩＤをキャッシュ管理部４５へ出力する。
【００５５】
ライトバックを行う場合、キャッシュアクセス制御部４４は、キャッシュメモリ４１から読み出されたキャッシュリードデータを一旦保持した後、これをライトバックデータとしてローカルメモリ１３へ出力する。
【００５６】
ストアを行う場合、ストアイネーブル信号がアサートされると共に、描画処理部２６からストアデータが与えられる。そしてキャッシュアクセス制御部４４は、このストアデータをキャッシュメモリ４１に書き込む。
【００５７】
ロードを行う場合、ロードイネーブル信号がアサートされる。そしてキャッシュアクセス制御部４４は、キャッシュメモリ４１からキャッシュリードデータを読み出す。このデータは同時に描画処理部２６にも与えられる。
【００５８】
次にキャッシュ管理部４５について図１８を用いて説明する。図１８はキャッシュ管理部４５のブロック図であり、入出力信号を示している。図示するようにキャッシュ管理部４５には、ストール信号、キャッシュデータアドレス信号、ロード要求信号、ストア要求信号、エンド命令、イールド命令、サブパススタート信号、スレッドエントリ番号、フラッシュ要求信号、プリロードアドレス、プリロードスレッドＩＤ、プリロードイネーブル信号、リフィルアクノリッジ信号、ライトバックアクノリッジ信号、ライトバックアクノリッジＩＤ、リフィルアクノリッジＩＤが入力される。
【００５９】
ストール信号は描画処理部２６から与えられる。ストールとは、何らかの原因によって命令が実行できず、実行を待っている状態のことである。ロード要求信号、ストア要求信号は描画処理部２６から与えられる。エンド命令及びイールド命令は描画処理部２６から与えられる。サブパススタート信号はサブパスが開始されたことを示す信号であり、描画処理部２６から与えられる。フラッシュ要求信号は、キャッシュメモリ４１のフラッシュを要求するための信号であり、描画処理部２６から与えられる。
【００６０】
プリロードアドレス、プリロードスレッドＩＤ、及びプリロードイネーブル信号はプリロードに関する信号であり、プリロード制御部４３のアドレス保持部５０から与えられる。
【００６１】
またキャッシュ管理部４５には、リフィルアクノリッジ信号、及びリフィルアクノリッジＩＤが、それぞれローカルメモリ１３及びキャッシュアクセス制御部４４から与えられる。更にライトバックアクノリッジ信号及びライトバックアクノリッジＩＤが、それぞれローカルメモリ１３及びキャッシュアクセス制御部４４から与えられる。
【００６２】
キャッシュ管理部４５は、キャッシュメモリ４１のヒット判定、エントリのステータス管理、リクエスト発行エントリの決定、ＬＲＦの管理、及びキャッシュメモリ４１のフラッシュ制御を行う。
【００６３】
キャッシュメモリ４１のヒット判定について説明する。例えばロード命令が発行された場合、必要なデータをキャッシュメモリ４１から描画処理部２６へロードする必要がある。この時、必要なデータがキャッシュメモリ４１に保持されていればよいが、保持されていない場合には当該データをローカルメモリからキャッシュメモリ４１へ読み出す（リフィルする）必要がある。このように、必要なデータがキャッシュメモリ４１内に保持されているか否かを判定することをヒット判定と呼ぶ。そしてヒット判定結果をヒットエントリ番号として、キャッシュアクセス制御部４４へ出力する。
【００６４】
ロード／ストア命令やプリロード命令がキャッシュミスした場合（キャッシュメモリ４１に保持されていない場合）、キャッシュ管理部４５はリフィル要求イネーブル信号及びリフィルアドレスをリクエスト発行制御部４６へ出力する。
【００６５】
またキャッシュ管理部４５は、キャッシュメモリ４１の各エントリのステータス管理を行う。そのためにキャッシュ管理部４５は、キャッシュメモリ４１の各エントリに対応して設けられ、ステータスフラグを保持するメモリ６１を備えている。ステータスフラグは、キャッシュメモリ４１において対応する各エントリの状態を示す。図１９はメモリ６１の概念図である。メモリ６１は例えばＳＲＡＭやフリップフロップ等であり、メモリ５１−０、５１−１それぞれに対応して設けられる。図１９では、メモリ５１−０、５１−１のいずれかに対応するステータスフラグのみを示している。
【００６６】
図示するように、メモリ６１はメモリ５１−０、５１−１と同様にＭ個のエントリ０〜（Ｍ−１）を備えている。そして各エントリはステータスフラグとして、タグＴ（Tag）、バリッドフラグＶ（Valid flag）、及びリフィルフラグＲ（Refill flag）を保持する。タグＴは、対応するエントリに保持されるデータのアドレス信号に関する。より具体的には、図１３で説明したアドレス信号に含まれるブロックＩＤと、ピクセルシェーダユニット番号の一部に対応する。また図１４で説明したアドレス信号に含まれるスレッドＩＤに対応する。
【００６７】
バリッドフラグＶは、対応するエントリに保持されるデータが有効（バリッド）か否かを示すフラグである。エントリは、リフィル要求が発行されるとバリッドとなり、フラッシュ（flush）されるとインバリッド（invalid）となる。
【００６８】
リフィルフラグＲは、リフィル要求を発行中であることを示すフラグである。リフィルフラグＲは、リフィル要求を発行してから、実際にローカルメモリからキャッシュメモリ４１へのデータ転送（これをリプレイス（replace）と呼ぶ）が完了されるまでアサートされ続ける。
【００６９】
リクエスト発行エントリの決定とは、リフィルやプリロードを行う際に、キャッシュメモリ４１においてデータを保持させるべきエントリを決定することであり、最も古くリフィルされたエントリから順に使用される。この点について図２０を用いて説明する。発行エントリを決定するために、キャッシュ管理部４５は、各々がＭビットのエントリをＭ個有するメモリ６２を備えている。メモリ６２にＬＲＦキュー（Least Recently Filled Queue）が保持される。ＬＲＦキューは、キャッシュメモリ４１においてリフィルが行われた順序を示す。そしてメモリ６２のエントリ０〜（Ｍ−１）の各ビットは、上位ビットから順にキャッシュメモリ４１の各エントリ０〜（Ｍ−１）に対応し、メモリ６２のエントリ０〜（Ｍ−１）の順にリフィルが行われた順序が古くなっていく。従って図２０の例の場合、最近リフィルが行われたキャッシュメモリ４１のエントリは、メモリ６２のエントリ（Ｍ−１）に示されるようにエントリ３であり、次にエントリ１、エントリ５、…である。  キャッシュ管理部４５は、図１９に示したステータスフラグに基づいて、リクエスト発行可能エントリ信号を生成する。リクエスト発行可能エントリ信号は、現在リクエスト発行可能なエントリがいずれであるかを示す信号である。そして、上位ビットから順に、キャッシュメモリ４１のエントリ０〜（Ｍ−１）に対応する。従って図２０の例であると、キャッシュメモリ４１のエントリ１、２、３がリクエスト発行可能であると分かる。
【００７０】
そしてキャッシュ管理部４５は、ＬＲＦキューとリクエスト発行可能エントリ信号との論理積演算を行う。（Ｍ−１）個のＬＲＦキューとリクエスト発行可能エントリ信号との論理演算結果を順に並べることで、リクエスト発行キュー信号が得られる。リクエスト発行キュー信号は、ＬＲＦキューのいずれのエントリに基づいて発行エントリを決定すればよいかを示しており、上位ビットから順に、メモリ６２のエントリ０〜（Ｍ−１）に対応している。従って図２０の例であると、メモリ６２のエントリ３、６、（Ｍ−１）に保持されたＬＲＦキューに基づいて決めれば良いことが分かる。すると、キャッシュメモリ４１において発行可能なエントリはエントリ１、２、３であるところ、これらのうちで最も昔にリフィルが行われたキャッシュメモリ４１のエントリはエントリ２であることがＬＲＦキューから分かる。従って、キャッシュメモリ４１においてリクエスト発行エントリはエントリ２と決定される。これを示しているのがリクエスト発行エントリ信号である。この信号も、上位ビットから順にキャッシュメモリ４１のエントリ０〜（Ｍ−１）に対応しており、“１”とされたビットに対応するエントリがリクエスト発行エントリである。なお図２０に示す回路は、キャッシュメモリ４１に含まれるメモリ５１−０、５１−１毎に設けられている。
【００７１】
次に図１０におけるプリロード制御部４３について説明する。プリロードアドレス発生部４７は、プリロード時のアドレス信号を生成する。プリロード保持部４８は、プリロード要求のなされたスレッドの管理を行う。サブパス情報管理部４９は、サブパスでアクセスしたバッファに関する情報を記憶する。アドレス保持部５０は、プリロードアドレス発生部４７で生成されたアドレス信号を保持する。上記構成において、生成されたプリロードアドレスがキャッシュ管理部４５に与えられる。プリロードに関しては第３の実施形態で詳細を説明する。
【００７２】
次に、上記データ制御部２７の動作について説明する。データ制御部２７は、キャッシュメモリ４１、ローカルメモリ１３、及び描画処理部２６との間のデータの授受を管理する。これらの間のデータの授受は、図２１に示すようにプリロード、ロード／ストア、リフィル、及びライトバックの４種類がある。本実施形態ではロード／ストア及びリフィルについて説明する。
【００７３】
まず、ロード／ストア命令が発行された際のロード動作について図２２を用いて説明する。図２２はピクセルシェーダユニットのブロック図である。ロードは、キャッシュメモリ４１から描画処理部２６へデータを転送する動作である。
【００７４】
まず描画処理部２６からロード要求信号がキャッシュ管理部４５に与えられる。またアドレス発生部４０は、図１３、図１４で説明した方法によりアドレスを生成し、キャッシュデータアドレス信号をキャッシュ管理部４５に与え、キャッシュインデックスエントリ信号及びキャッシュエントリ信号をキャッシュアクセス制御部４４に与える。するとキャッシュ管理部４５はヒット判定を行い、ヒットエントリ番号をキャッシュアクセス制御部４４に与え、またロードイネーブル信号をキャッシュアクセス制御部４４に与える。
【００７５】
そしてキャッシュアクセス制御部４４が、キャッシュイネーブル信号を発生してキャッシュメモリ４１をイネーブルにする。更に、キャッシュメモリ４１における、キャッシュインデックスエントリ信号及びキャッシュエントリ信号に対応したアドレスにアクセスし、キャッシュメモリ４１からデータを読み出す。またキャッシュアクセス制御部４４は、ロードイネーブル信号を描画処理部２６に返す。キャッシュメモリ４１から読み出されたキャッシュリードデータは描画処理部２６へ転送される。  
以上のようにして、キャッシュメモリ４１内のデータ（キャッシュリードデータ）が描画処理部２６へロードされる。
【００７６】
次にストア動作について図２３を用いて説明する。図２３はピクセルシェーダユニットのブロック図である。ストアは、描画処理部２６で処理したデータをキャッシュメモリ４１に保持させる動作である。
【００７７】
まず描画処理部２６からストア要求信号がキャッシュ管理部４５に与えられる。またアドレス発生部４０はアドレスを生成し、キャッシュインデックスエントリ信号及びキャッシュエントリ信号をキャッシュアクセス制御部４４に与える。更に描画処理部２６からキャッシュアクセス制御部４４へ、ストアイネーブル信号及びストアデータが与えられる。
【００７８】
そしてキャッシュアクセス制御部４４が、キャッシュイネーブル信号を発生してキャッシュメモリ４１をイネーブルにする。更にキャッシュアクセス制御部４４は、キャッシュメモリ４１にストアデータをキャッシュライトデータとして与える。またキャッシュアクセス制御部４４は、キャッシュインデックスエントリ信号及びキャッシュエントリ信号によって示されるアドレスを、キャッシュアドレスとしてキャッシュメモリ４１に与える。これにより、キャッシュメモリ４１においてキャッシュアドレスに対応するエントリに、ストアデータが書き込まれる。  
以上のようにして、描画処理部２６内のデータがキャッシュメモリ４１にストアされる。
【００７９】
次にリフィル動作について図２４を用いて説明する。図２４はピクセルシェーダユニットのブロック図である。リフィルは、描画処理部２６からキャッシュメモリ４１に対して要求されたデータがキャッシュメモリ４１に存在しない場合に、該データをローカルメモリからキャッシュメモリ４１に読み出す動作である。
【００８０】
まず、キャッシュ管理部４５においてヒット判定がミスした場合、換言すれば、ヒットエントリ番号が全ビットゼロであった場合、すなわち必要なデータがキャッシュメモリ４１に無かった場合、キャッシュ管理部４５はリフィル要求イネーブル信号、リフィルアドレス、及びリフィル要求ＩＤをリクエスト発行制御部４６へ出力する。これらの信号を受けて、リクエスト発行制御部４６はリクエスト数をカウントアップする。またリクエスト発行制御部４６は、ローカルメモリ１３に対してリフィルをリクエストする（リフィル要求信号を出力する）。
【００８１】
リフィル要求を受けたローカルメモリ１３は、キャッシュ管理部４５、キャッシュアクセス制御部４４、及びリクエスト発行制御部４６に対して、リフィルアクノリッジ信号を出力する。リフィルアクノリッジ信号を受けたキャッシュアクセス制御部４４は、キャッシュ管理部４５に対してリフィルアクノリッジＩＤを出力する。これによりキャッシュ管理部４５は、リフィル要求が確かに受け取られたことを認識する。リフィルアクノリッジ信号が出力された後、ローカルメモリ１３からキャッシュアクセス制御部４４に対してリフィルデータが出力される。するとキャッシュアクセス制御部４４はストア動作と同じ要領により、リフィルデータをキャッシュメモリ４１にリプレイスする。但し、リフィルに使用されるエントリは、図２０で説明したＬＲＦキューによって決定される。  
以上のようにして、ローカルメモリ１３からデータがキャッシュメモリ４１にリフィルされる。
【００８２】
上記のように、ロード／ストア命令が発行されると、キャッシュ管理部４５がヒット判定を行ってキャッシュメモリ４１のエントリをチェックする。ヒット判定がヒットした場合にはロード／ストア動作を行い、ミスした場合にはリフィルを行う。リフィルを行うエントリはＬＲＦキューによって決定される。ミスした場合であっても、例えばローカルメモリ１３のリクエストキューがフル（full）の場合や、キャッシュメモリ４１に空きエントリが無い場合にはリフィル要求を発行することが出来ず、「待ち」の状態となる。従って、ロード／ストア命令が発行された場合、データ制御部２７には、図２５に示すように３つの状態を取り得る。図２５はデータ制御部２７の状態遷移図である。
【００８３】
図示するように、データ制御部２７は、「実行状態（Ｅｘｅｃ）」、「待ち状態（Ｗａｉｔ）」、及び「フィル状態（Ｆｉｌｌ）」の３つの状態を取る。実行状態は、ヒット判定の結果ロード／ストア命令がヒットした場合であり、ピクセルシェーダユニットが動作している状態である。待ち状態は、ヒット判定の結果ロード／ストア命令がミスした場合であり、リフィル要求を発行しようとしている状態である。そしてこの状態ではピクセルシェーダユニットはストールしている。フィル状態は、ローカルメモリ１３に対してリフィル要求が発行されている状態である。この状態でもピクセルシェーダユニットはストールしている。
【００８４】
上記３つの状態が変化するトリガは下記の通りである。各番号は、図２５に記した状態遷移の番号に一致する。  
１．実行状態から遷移しない：ロード／ストア命令がヒット  
２．実行状態から待ち状態へ：ロード／ストア命令がミス  
３．待ち状態からフィル状態へ：リフィル要求が発行される  
４．フィル状態から実行状態へ：リフィルアクノリッジ信号が返される  
５．待ち状態から遷移しない：ロード／ストア命令がミスしたが、リフィル要求を発行できない  
６．フィル状態から遷移しない：リフィルアクノリッジ信号が返されない。
【００８５】
次にロード／ストア命令が発行された際の動作の詳細について、図２６及び図２７を用いて説明する。図２６はデータ制御部２７の動作のフローチャートであり、図２７は各種信号のタイミングチャートである。
【００８６】
まずロードストア命令が描画処理部２６から発行される（ステップＳ１０）。すなわち図２７の時刻ｔ０においてロード要求信号が発行される。
【００８７】
すると、ロード要求信号に応答してキャッシュ管理部４５がヒット判定を行う（ステップＳ１１）。より具体的には、要求されたアドレスと、ステータスフラグ内のタグＴとを比較する。
【００８８】
タグとアドレスとが一致すると（ステップＳ１２）、次にキャッシュ管理部４５はステータスフラグ内のリフィルフラグＲをチェックする（ステップＳ１３）。リフィルフラグＲが“０”の場合（ステップＳ１４）、当該エントリについてのリプレイスは完了しているから、そのデータを用いてロード／ストア命令を実行する（ステップＳ１５）。
【００８９】
ステップＳ１２でアドレスとタグＴとが不一致だった場合、すなわちロード／ストア命令がミスした場合、リフィル要求発行可能なエントリがあるか否かをチェックする（ステップＳ１６）。リフィル要求発行可能なエントリがある場合、キャッシュ管理部４５はリフィル要求（リフィル要求イネーブル信号、時刻ｔ２）を発行する（ステップＳ１８）。またリクエスト発行制御部４６もリフィル要求信号をローカルメモリ１３に対して出力する。
【００９０】
次のサイクルでキャッシュ管理部４５は、対応するエントリのステータスフラグ内のタグＴをリフィルデータに関する情報に書き換えると共に、リフィルフラグＲを“１”とする（ステップＳ１９、時刻ｔ２）。そして、このロード／ストア命令はストール（stall）する（ステップＳ２０）。ストールは、ローカルメモリ１３からリフィルアクノリッジ信号が返ってくるまで続く。ストールした状態で、再度ロード／ストア命令が発行される（ステップＳ２１）。すると、ヒット判定（ステップＳ１１）ではアドレスとタグＴとが一致するので（ステップＳ１２）、次にリフィルフラグＲをチェックする（ステップＳ１４）。ローカルメモリ１３からリフィルアクノリッジ信号が返ってきていればリフィルフラグＲは“０”となる。従ってステップＳ１５に進む。しかしローカルメモリ１３からリフィルアクノリッジ信号が返ってきていなければリフィルフラグＲは“１”のままなので、ステップＳ２０に進んでストールが継続される。
【００９１】
ステップＳ１７でリフィル要求発行可能なエントリが無かった場合、エントリが空くまでストールを続け（ステップＳ２２）、再度ロード／ストア命令を発行する（ステップＳ２３）。ストールを続けていると、やがていずれかのエントリがリフィル要求発行可能となるので、そのエントリに対してリフィル要求が発行される（ステップＳ１８）。
【００９２】
次に、キャッシュ管理部４５におけるヒット判定のための構成と、その方法について図２８を用いて説明する。図２８はキャッシュ管理部４５の一部と、キャッシュメモリ４１のブロック図である。
【００９３】
図示するように、キャッシュ管理部４５はメモリ６１の他に、メモリ５３−０〜５３−（Ｍ−１）毎にそれぞれ設けられた選択回路６５、比較回路６６、及びＡＮＤゲート６７を備えている。またキャッシュメモリ４１は、選択回路６８、６９、及びメモリ７０を備えている。
【００９４】
ヒット判定のためにキャッシュ管理部４５には、キャッシュデータアドレス信号が入力される。キャッシュデータアドレス信号は、フレームバッファモードにおいてはブロックＩＤ、オフセットデータ、及びピクセルシェーダユニット番号を含む。そして、ブロックＩＤ及びピクセルシェーダユニット番号が対象データについてのタグ情報を示し、オフセットデータがインデックス情報を示す。メモリレジスタモードでは、キャッシュデータアドレス信号はスレッドＩＤ及びオフセットデータを含む。そして、スレッドＩＤがタグ情報を示し、オフセットデータがインデックス情報を示す。インデックス情報とは、メモリ５１−０、５１−１のいずれにアクセスすべきであるかを示す信号である。まず選択回路６５は、アドレス信号のインデックス情報に基づいて、キャッシュメモリ４１内のメモリ５１−０、５１−１のいずれかを選択する。次に比較回路６６の各々は、選択回路６５の各々で選択されたメモリ５１−０または５１−１におけるメモリ５３−０〜５３−（Ｍ−１）、すなわちエントリ０〜（Ｍ−１）に対応するタグＴと、キャッシュデータアドレス信号から得られるタグ情報とを比較する。両者が一致した場合、比較回路６６は“１”を出力し、不一致の場合には“０”を出力する。更にＡＮＤゲート６７の各々は、選択回路６５の各々で選択されたメモリ５１−０または５１−１におけるメモリ５３−０〜５３−（Ｍ−１）に対応するバリッドフラグＶと、比較回路６６の各々の出力とのＡＮＤ演算を行う。このＡＮＤ演算結果が信号ヒットエントリ番号となる。ヒットエントリ番号においていずれかのビットが“１”であるということは、そのビットに対応したメモリ５３−０〜５３−（Ｍ−１）のいずれかに該当データが保持されているということを意味する。
【００９５】
選択回路６８は、ヒットエントリ番号に基づいていずれかのメモリ０〜（Ｍ−１）、すなわちいずれかのエントリ０〜（Ｍ−１）を選択する。例えばヒットエントリ番号が（１００００…）である場合には、エントリ０に該当データが保持されているということであるから、エントリ０を選択する。なお、前述の通り本実施形態の例であると、キャッシュメモリ４１はサブエントリ単位で外部とデータの授受を行う。従って選択回路６９は、選択回路６８で選択されたエントリに含まれるＬ個のサブエントリ０〜（Ｌ−１）のいずれかを、キャッシュエントリ信号に基づいて選択する。キャッシュエントリ信号は、前述の通りクアッドＩＤとオフセットデータとを含む。そしてキャッシュエントリ信号は、各エントリ０〜（Ｍ−１）においていずれのサブエントリ０〜（Ｌ−１）にアクセスすべきかを示すエントリ情報となる。選択回路６９によって選択された１サブエントリ分のデータが、キャッシュリードデータとなる。
【００９６】
以上のように、この発明の第１の実施形態に係るグラフィックプロセッサによれば、下記（１）の効果を得ることが出来る。  
（１）グラフィックプロセッサ内のハードウェアを削減出来る（その１）。
【００９７】
本実施形態によれば、キャッシュ管理部４５はステータスフラグとして、リフィルＲとタグＴを保持している。そしてキャッシュ管理部４５は、ヒット判定において当該ロード／ストア命令がミスした際には、まずリフィル要求を発行すると共にタグＴを書き換える。この時点では、まだリプレイスは開始されていない。すなわち、タグＴの示す情報と、キャッシュメモリ４１の対応するエントリ内のデータとが不一致となる。従ってキャッシュ管理部４５は、両者が一致しているか否かをリフィルＲフラグによって管理している。その結果、グラフィックプロセッサのハードウェアを削減でき、製造コストを削減出来る。この点につき、以下詳細に説明する。
【００９８】
図２９はリフィルフラグＲを使用しない場合に考え得るキャッシュ管理部４５の構成を示すブロック図である。キャッシュ管理部４５は、本実施形態に構成に加えて、更にロード／ストアミスキュー（load/store miss queue）７１と、比較器７２を備えている。ロード／ストアミスキュー７１は、リプレイスが完了していないロード／ストア命令を保持する。
【００９９】
図２９においてロード／ストア命令が発行されると、まずヒット判定が行われる。すなわち、比較器６６は、入力されたアドレスとタグＴとを比較する。両者が一致しなかった場合、更に比較器７２が、入力されたアドレスと、ロード／ストアミスキュー７１とを比較する。比較器７２において、両者が不一致だった場合には、当該ロード／ストア命令はロード／ストアミスキュー７１に保持され、リフィル要求が発行される。比較器６６、７２の両方で比較結果がミスであった時にリフィル要求が発行される。リフィル要求が発行されてリプレイスが完了すると、この時点でタグＴが書き換えられる。すなわち、タグＴの示す情報と、キャッシュメモリ４１内のデータとは常時一致している。
【０１００】
これに対して、本実施形態に係るキャッシュ管理部４５の構成を簡略化して示したのが図３０である。本実施形態では、比較器６６においてアドレスとタグＴとが一致しなかった場合、リフィル要求を発行し、この時点でタグＴを書き換え、更にリフィルＲフラグを“１”にする。その後、いずれかのタイミングでリプレイスを行う。リプレイスが完了すると、リフィルフラグＲは“０”に戻る。比較器６６においてアドレスとタグＴとが一致した場合には、当該エントリがリプレイス中であるか否かをリフィルフラグＲによってチェックする。そしてリプレイスが完了していない場合には当該ロード／ストア命令はストールされ、完了している場合にはロード／ストア命令を実行する。
【０１０１】
このように、リフィル要求の発行と共にタグＴを書き換えてしまうため、図２９におけるロード／ストアミスキュー７１が不要となる。更にリプレイスが完了したか否かをリフィルフラグによって管理している。そのため図２９における比較器７２も不要である。その結果、図２９に示す構成に比べてハードウェアを削減でき、製造コストを削減出来る。
なお本実施形態では、図２７に示すように、ロード／ストア命令は２周期に１度しか発行されない。そのため、リフィル要求と共にタグＴの書き換えが可能となる。なぜなら、図２７に示すように最初のサイクルでタグの読み出しとヒット判定を行い、次のサイクルでタグの書き換えを行う必要があるからである。
【０１０２】
また、前述のようにアドレス信号の計算方法は上記実施形態で説明した方法に限定されることはなく、ブロック内に含まれるスタンプの数や、ピクセルシェーダユニット２４の数などによって変化出来る。またアドレス信号の内部構成も図１３、図１４に示したものに限られない。図２８に示すように、アドレス信号はタグ情報、インデックス情報、及びエントリ情報を含んでいれば足りる。更に、キャッシュメモリ４１がメモリ５１−０、５１−１のいずれか一方しか含まない場合にはインデックス情報は不要であるし、キャッシュメモリ４１のエントリサイズでデータ転送可能であればエントリ情報も不要であり、このような場合にはアドレス発生部４０はタグ情報のみを生成すれば良い。そしてアドレス発生部４０には、上記のようなアドレス信号を生成するための情報が与えられる必要がある。それらの情報として、本実施形態では図１２に示すようにオフセットデータ、ＸＹ座標、スレッドＩＤ、クアッドＩＤ、サブパスＩＤ、及びバッファモード信号が与えられる場合について説明した。しかし、これらは一例に過ぎず、タグ情報と、その他の必要なアドレスとを生成するのに使用できる信号であれば限定されない。また本実施形態では、タグＴが、スレッドＩＤやピクセルシェーダユニット番号の一部に対応する情報である場合を例に挙げて説明した。しかし、タグＴとして用いる情報は、データを識別出来るものであれば良く、スレッドＩＤ及びピクセルシェーダユニット番号以外の情報であっても良い。
【０１０３】
次に、この発明の第２の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、上記第１の実施形態で説明したグラフィックプロセッサにおけるライトバック動作に関するものである。
【０１０４】
本実施形態に係るキャッシュ管理部４５は、上記第１の実施形態で説明した制御に加えて、更にライトバック動作を制御する。ライトバックとは、図２１で説明したように、キャッシュメモリ４１内のデータをローカルメモリに書き込むことである。描画処理部２６からストア命令が発行された際、データはキャッシュメモリ４１にのみ書き込まれる。すなわち、キャッシュメモリ４１内のデータのみがアップデートされる。従って、キャッシュメモリ４１内のデータとローカルメモリ内のデータとが一致しないことになる。このような状態でキャッシュメモリ４１内のデータが失われることを避けるためにライトバックが行われる。なお、キャッシュメモリ４１内にのみアップデートされたデータが保持されている状態を、以下ではダーティー（dirty）と呼ぶことにする。
【０１０５】
図３１はキャッシュ管理部４５の備えるメモリ６１の概念図であり、ステータスフラグとしてタグＴ、バリッドフラグＶ、リフィルフラグＲの他に、ダーティーフラグＤ及びライトバックフラグＷを保持する。ダーティーフラグＤは、対応するエントリがダーティーであるか否か、すなわち、エントリに対して描画処理部２６からデータの書き込みがあったことを示す。そしてライトバックデータの読み出しを開始するまでアサートされる。ライトバックフラグＷは、対応するエントリがライトバック要求を発行中であるか否かを示す。そしてライトバック要求が発行されてからライトバックデータの読み出しが開始されるまでアサートされる。
【０１０６】
図３２はキャッシュ管理部４５において、ライトバック要求を発行するための構成のブロック図である。図示するようにキャッシュ管理部４５は、カウンタ７３と選択回路７４を備えている。選択回路７４は、カウンタ７３におけるカウント数に応じたエントリのダーティーフラグＤを選択する。
【０１０７】
次にライトバック動作について図３３を用いて説明する。図３３はピクセルシェーダユニットのブロック図である。  
まずキャッシュ管理部４５からライトバック要求信号がローカルメモリ１３へ出力される。ライトバック要求がローカルメモリ１３にエンターされると、ローカルメモリ１３からライトバックアクノリッジ信号がキャッシュ管理部４５及びキャッシュアクセス制御部４４へ出力され、またライトバックＩＤがキャッシュアクセス制御部４４へ出力される。
【０１０８】
するとキャッシュアクセス制御部４４はライトバックＩＤに基づいて、キャッシュメモリ４１からデータ（キャッシュリードデータ）を読み出す。データをキャッシュメモリ４１から読み出したキャッシュアクセス制御部４４は、ライトバックアクノリッジＩＤをキャッシュ管理部４５へ返すと共に、読み出しデータをライトバックデータとしてローカルメモリ１３に書き込む。その後、キャッシュ管理部４５はライトバックアクノリッジＩＤに応答して、対応するエントリのダーティーフラグＤ及びライトバックフラグＷをデアサート（“０”に）する。
【０１０９】
次にキャッシュ管理部４５における、ライトバックを行うエントリの選択方法について図３４のフローチャートを用いて説明する。まずキャッシュ管理部４５は現在のカウンタ７３のカウンタ値に対応するエントリのダーティーフラグＤをチェックする（ステップＳ３０）。ダーティーフラグＤ＝“１”であれば（ステップＳ３１）、対応するエントリにつきライトバック要求を発行する（ステップＳ３２）。ダーティーフラグＤ＝“０”であれば発行しない。そしてカウンタ値が最終エントリに対応する値を示していた場合（ステップＳ３３）、カウンタ値をリセットして（ステップＳ３０）、ステップＳ３０に戻る。カウンタ値が最終エントリに対応する値を示していない場合（ステップＳ３３）には、カウンタ７３はカウントアップしてステップＳ３０に戻る。  
すなわち、キャッシュメモリ４１内の全エントリ０〜２（Ｍ−１）について、ダーティーフラグＤを順番にチェックし、そのダーティーフラグＤがアサートされていた場合にライトバック要求を発行する。  
その他の構成及び動作は第１の実施形態と同様である。
【０１１０】
以上のように、この発明の第２の実施形態に係るグラフィックプロセッサによれば、第１の実施形態で説明した（１）の効果に加えて、下記（２）、（３）の効果を得ることが出来る。  
（２）グラフィックプロセッサ内のハードウェアを削減出来る（その２）。
【０１１１】
従来のライトバック手法は、ライトバックデータを一時的にバッファメモリに保持させ、その後、適当なタイミングでバッファメモリに保持させたライトバックデータをローカルメモリに書き込むことが通常であった。これは、ライトバック中にリフィル要求の発行が必要となった場合に、ライトバックが終了するまでリフィルが出来なくなるという状況が発生することを回避するために行われた手法である。この手法によれば、データをバッファに待避させておくことで、ライトバック中であってもそのエントリはリフィル要求を発行出来る。またライトバックは、キャッシュ管理部４５外部からの何らかのトリガに応答してなされるか、またはキャッシュメモリにデータをストアすると同時に行われていた。
【０１１２】
これに対して本実施形態では、キャッシュ管理部４５はステータスフラグとしてダーティーフラグＤを保持し、いずれのキャッシュエントリがダーティーであるかを管理している。そして常にダーティーフラグＤを監視し、いずれかのエントリがダーティーであり、且つライトバック要求発行可能な限りは、そのタイミングでライトバックを行っている。従って、ダーティーなエントリの存在確率が従来に比べて圧倒的に低い。そのため、いずれかのエントリがライトバック中であっても、リフィル要求を発行可能なエントリが他に存在しやすい。よって、従来のようにデータをバッファに待避させる必要がなく、バッファが不要となる。従って、ハードウェアを削減でき、製造コストを低減できる。
【０１１３】
（３）キャッシュメモリを効率的に利用出来る（その１）。  
上記（２）で説明したように、特に外部からの要求が無くてもライトバック要求が発行可能であれば、その時点でライトバックを行っている。従って、キャッシュメモリ４１のエントリを有効に活用出来る。
【０１１４】
更に、ローカルメモリ１３にｅＤＲＡＭ（embedded DRAM）を用い、且つそのレイテンシが長い場合には、本実施形態のように可能な時にライトバックを行うことで、ダーティーなエントリの存在を効果的に低減でき、グラフィックプロセッサの性能を向上出来る。
【０１１５】
なお、キャッシュメモリ４１のエントリサイズが大きい場合には、特に本実施形態の効果が顕著となる。なぜなら、エントリサイズが大きいほど、従来手法で必要なバッファサイズも大きくなるためであり、面積削減の効果が顕著となる。
【０１１６】
また図３５に示すように、キャッシュ管理部４５はバス制御回路７５からバスの状況をデータとして受け取っても良い。バス制御回路７５は、各回路ブロック間のバスによる接続を制御する。ライトバックを行うためには、データ制御部２７とローカルメモリとの間のバスが使用されていない必要がある。そこで、キャッシュ管理部４５はバス制御回路７５から現在のバスの使用状況を受け取り、バスが使用されていないことを認識した際に、ライトバック要求を発行する。これによりバスの使用効率を向上出来る。
【０１１７】
次に、この発明の第３の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、上記第１、第２の実施形態で説明したグラフィックプロセッサにおけるプリロード動作に関するものである。
【０１１８】
プリロード動作については、図１０に示したプリロード制御部４３が制御を行う。プリロード制御部４３は、プリロードアドレス発生部４７、プリロード保持部４８、サブパス情報管理部４９、及びアドレス保持部５０を備えている。プリロード保持部４８は、プリロード要求のあったスレッドの管理を行う。プリロード保持部４８は、命令制御部２５からスレッド単位でプリロード要求を受ける。このときプリロード保持部４８は、スレッドのＸＹ座標、スレッドＩＤ、及び実行するサブパス番号を同時に受け取って保持する。プリロード保持部４８は内部に複数のエントリを有するメモリを備えており、プリロード要求をメモリのエントリに積んでいく。プリロード要求は、番号の若いエントリから優先的に発行される。そして、プリロード要求を発行するエントリを決定したら、サブパス情報管理部４９に対して、プリロードスタート信号及びプリロードサブパス番号を出力する。プリロードスタート信号は新たなスレッドに関するプリロードの開始を示し、プリロードサブパス番号はプリロードされるサブパス番号である。
【０１１９】
次にサブパス情報管理部４９について説明する。サブパス情報管理部４９では、サブパスで使用されたバッファの情報を保持する制御と共に、プリロードのためのパラメータ出力の制御を行う。まずバッファの情報管理のために、サブパス情報管理部４９は、図３６に示すようなインストラクションテーブルを有している。インストラクションテーブルのエントリの各々は各サブパスに対応している。そしてサブパス情報管理部４９は、ロード／ストア命令が発行される度に、当該命令に対応したモード情報をインストラクションテーブルに書き込む。これらの情報は、命令制御部２５から、バッファバンクセレクト信号及びバッファモード信号として与えられる。これらの信号は、例えばローカルメモリがフレームバッファとして使用されているかメモリレジスタとして使用されているか、またデータ格納領域のベースアドレス（先頭アドレス）等の情報を含む。
【０１２０】
またサブパス情報管理部４９は、プリロード命令が発行されると、プリロードスタート信号及びプリロードサブパス番号で指定されるサブパスに関する情報を、インストラクションテーブルから読み出す。そしてインストラクションテーブルから読み出したデータを、プリロードバンク信号としてプリロードアドレス発生部４７へ出力する。またプリロードイネーブル信号をアサートする。
【０１２１】
次にプリロードアドレス発生部４７について説明する。プリロードアドレス発生部４７は、プリロードに必要なアドレス信号を生成する。アドレスの生成方法は、第１の実施形態で説明したアドレス発生部４０と同様である（図１３、図１４参照）。上記のアドレス計算を行うための信号（プリロード用のＸＹ座標、プリロード用のスレッドＩＤ、プリロードバンク信号）は、プリロード保持部４８及びサブパス情報管理部４９から常時与えられている。その状態で、プリロードイネーブル信号がアサートされると、それに応答してプリロードアドレス発生部４７がアドレスの計算を開始する。得られたプリロードアドレスと、プリロードイネーブル信号はアドレス保持部５０に出力される。
【０１２２】
次にアドレス保持部５０について説明する。アドレス保持部５０は、プリロード命令の発行がストールした場合に、当該命令に係るアドレスを保持しておくためのキューである。ローカルメモリ１３のリクエストキューに空きが無い場合、キャッシュメモリ４１にプリロード要求の発行可能なエントリが無い場合、及びリクエスト発行制御部４６に発行待ちのリフィル要求がある場合には、プリロード命令はストールし、プリロードイネーブル信号デアサートする。これらの情報は、リクエスト発行制御部４６からリフィルレディ信号及び要求状況信号として与えられる。
【０１２３】
またアドレス保持部５０は、プリロード命令に関するヒット判定に必要なデータをキャッシュ管理部４５に出力する。
【０１２４】
次に、本実施形態に係るグラフィックプロセッサのプリロード動作について図３７及び図３８を用いて説明する。図３７はプリロード動作のフローチャートであり、図３８は図３７における各ステップと対応づけたデータ制御部２７のブロック図である。まず命令制御部２５からプリロード保持部４８に対してプリロード要求が発行される（ステップＳ４０）。この際、プリロード保持部４８は、命令制御部２５からプリロード要求信号の他にスレッド情報（ＸＹ座標、スレッドＩＤ、サブパスＩＤ）を受け取る（ステップＳ４１）。
【０１２５】
そしてプリロード保持部４８は、プリロードスタート信号とプリロードサブパス番号とをサブパス情報管理部４９に出力する。サブパス情報管理部４９は、受け取ったプリロードスタート信号とプリロードサブパス番号とに基づいて、インストラクションテーブルからロード／ストア命令に関する情報を読み出す（ステップＳ４２）。読み出された情報（プリロードバンク信号）は、プリロードアドレス発生部４７へ出力される。このロード／ストア命令に関する情報は、命令制御部２５においてロード／ストア命令が発行された際に、サブパス情報管理部４９のインストラクションテーブルに格納されたものである。更にサブパス情報管理部４９は、プリロードイネーブル信号をアサートする。またプリロード保持部４８は、スレッド情報（ＸＹ座標、スレッドＩＤ）をプリロードアドレス発生部４７へ出力する。
【０１２６】
次にプリロードアドレス発生部４７は、サブパス情報管理部４９から与えられたロード／ストア命令に関する情報と、プリロード保持部４８から与えられたスレッド情報とを用いてプリロードアドレスを計算する（ステップＳ４３）。そしてプリロードアドレス発生部４７は、計算により得られたプリロードアドレスをアドレス保持部５０へ出力する。またプリロードアドレス発生部４７は、プリロードイネーブル信号をアサートしてアドレス保持部へ出力する。
【０１２７】
更にこれらの情報はアドレス保持部５０からキャッシュ管理部４５へ出力される。そしてキャッシュ管理部４５においてヒット判定が行われる（ステップＳ４４）。ステップＳ４４におけるヒット判定は、プリロードされるデータがキャッシュメモリ４１内にすでに存在するか否かを判定する処理である。そして、第１の実施形態においてリフィル動作で説明したように、プリロードのヒット判定結果がミスだった場合に、キャッシュ管理部４５はプリロード要求信号を発行する。またキャッシュ管理部４５はリフィルＩＤ及びリフィルアドレスを発行し、プリロード要求信号と共にリクエスト発行制御部４６へ出力する（ステップＳ４５）。そしてキャッシュ管理部４５はヒット判定を終了すると、ミス／ヒットにかかわらずプリロードヒット判定信号をアサートして、アドレス保持部５０におけるプリロード情報をデアサートする。プリロードヒット判定信号は、キャッシュ管理部４５におけるヒット判定が終了したか否かを示す信号である。
【０１２８】
そして、リクエスト発行制御部４６が、ローカルメモリ２５に対して正式にプリロード要求を発行する（リフィル要求信号を出力する、ステップＳ４６）。その後は、リフィルと同様の要領によって、ローカルメモリ内のデータをキャッシュメモリ４１へプリロードする。
【０１２９】
上記のように、この発明の第３の実施形態に係るグラフィックプロセッサによれば、第１、第２の実施形態で説明した（１）乃至（３）の効果に加えて、下記（４）の効果が得られる。  
（４）キャッシュメモリを効率的に利用出来る（その２）。  
本実施形態に係るグラフィックプロセッサでは、スレッド情報と、ロード／ストア命令に関する情報とを用いてプリロードアドレスを計算している。スレッド情報としては、Ｘ座標、Ｙ座標、及びスレッドＩＤをプリロード保持部４８から受け取る。またロード／ストア命令に関する情報として、コンフィギュレーションレジスタで参照すべきデータ、オフセット、及びベースアドレスをサブパス情報管理部４９から受け取る。これらの情報を用いることによって、従来に比べてより正確にプリロードアドレスを算出出来る。より具体的には、ロード／ストア命令に関する情報から、ＷＩＤＴＨの値が分かる。ＷＩＤＴＨの値によって、同一ＸＹ座標であってもブロックＩＤは変化する。更にアドレス信号の先頭アドレスが分かる。またオフセットの値及びメモリの使用モード（フレームバッファモードかメモリレジスタモードか）が分かる。従って、第１の実施形態で説明したアドレス計算式に必要な全ての情報をプリロードアドレス発生部４７は得られる。
プリロードとは、描画処理部２７で必要になるであろうデータを、予めローカルメモリからキャッシュメモリ４１に読み出しておく処理である。従って、プリロードはしたものの、実際にはそのデータは使われないこともありうる。
【０１３０】
しかし本実施形態では、ロード／ストア命令が発行された際に与えられた情報を用いてプリロードアドレスを計算、すなわちいずれのデータをプリロードするかを決定している。そのため、プリロードしたデータが使用される確率が高くなる。換言すれば、第１の実施形態で説明したヒット判定時に、プリロードデータがヒットする確率が向上する。これは、命令列は複数のスレッドの処理に用いられるので、実行する命令（サブパス）が分かれば、任意のスレッドが使用するデータが保持されているアドレスを求めることが可能となるからである。そこで、一度実行されたサブパスと同じサブパスを実行する異なるスレッドが起動された際に、以前トレースされた情報を元にプリフェッチを行う。よって、図３９に示すように、本実施形態に係る方法によってプリロードアドレスを計算するためには、いずれかのスレッドでロード／ストア命令が発行される必要がある。図３９では、スレッド０に関するサブパス０についてプリロードすることが出来ない。スレッド０に関するサブパス０でロード／ストア命令が発行されると、その時点でインストラクションテーブルが更新されるので、次のスレッド１についてプリロードが可能となる。
【０１３１】
従って、無駄なプリロード動作を削減し、同時にキャッシュメモリ４１のエントリが無駄に占有されることを抑制出来る。よって、キャッシュメモリ４１を効率的に使用でき、グラフィックプロセッサの性能を向上出来る。
次に、この発明の第４の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、上記第１乃至第３の実施形態で説明したグラフィックプロセッサにおいて、キャッシュ管理部４５が更にエントリのリクエスト発行を制限するものである。
【０１３２】
図４０はメモリ６１の概念図であり、キャッシュ管理部４５の備えるステータスフラグの様子を示している。図示するように、本実施形態に係るキャッシュ管理部４５は、タグＴ、バリッドフラグＶ、リフィルフラグＲ、ライトバックフラグＷの他に、ロックフラグ（lock flag）Ｌをステータスフラグとして保持する。ロックフラグＬは２ビットのデータであり、Ｌ＝“００”は対応するキャッシュメモリ４１のエントリがフリーの状態を示す。この状態では、エントリはプリロード要求及びリフィル要求のいずれでも発行可能である。Ｌ＝“０１”は、エントリがプリロード要求を発行している状態を示す。この状態では、エントリはリフィル要求を発行することは可能であるが、プリロード要求は発行できない。Ｌ＝“１０”は、実行スレッドがエントリを使用している状態を示す。この状態では、エントリはリフィル要求もプリロード要求も発行することができない。
【０１３３】
従って、キャッシュ管理部４５はリフィル要求及びプリロード要求がなされた際に、図４１に示すようにステータスフラグのロックフラグＬをチェックする（ステップＳ５０）。そしてＬ＝“００”の場合（ステップＳ５１）にはいずれかの要求を発行する（ステップＳ５２）。Ｌ＝“０１”の場合（ステップＳ５３）には、リフィル要求は発行できるが、プリロード要求はストールする（ステップＳ５４）。Ｌ＝“１０”の場合（ステップＳ５５）にはいずれの要求もストールする（ステップＳ５６）。
【０１３４】
以上のように、ロックフラグＬ、リフィルフラグＲ、及びライトバックフラグＷＢによってキャッシュエントリは次の８つの状態を取りうる。  
１．初期状態（Ｉｎｉｔ：Ｌ＝“００”、Ｒ＝“０”、ＷＢ＝“０”）  
エントリがフリーの状態であり、プリロード要求もリフィル要求も受け付けることが可能な状態である。  
２．レディ状態（Ｒｄｙ：Ｌ＝“０１”、Ｒ＝“０”、ＷＢ＝“０”）  
プリロードが完了し、そのエントリを使用するスレッドが実行されるのを待っている状態である。  
３．実行状態（Ｅｘｅｃ：Ｌ＝“１０”、Ｒ＝“０”、ＷＢ＝“０”）  
実行中のスレッドが該エントリを使用している状態である。  
４．非使用状態（ＮｏＷａｋｅ：Ｌ＝“００”、Ｒ＝“１”、ＷＢ＝“０”）  
プリロード中に対応するスレッドが実行されたが、該エントリに対するアクセスが無くサブパスが終了した際に生じる状態である。  
５．プリロード状態（ＰｒｅＬｄ：Ｌ＝“０１”、Ｒ＝“１”、ＷＢ＝“０”）  
プリロード要求を発行している状態である。  
６．フィル状態（Ｆｉｌｌ：Ｌ＝“１０”、Ｒ＝“１”、ＷＢ＝“０”）  
キャッシュミスによるリフィル要求が発行されている状態、もしくはプリロード要求発行中にそのエントリを使用するスレッドが実行された状態。  
７．ライトバック状態（ＷｒＢ：Ｌ＝“００”or“０１”、Ｒ＝“０”、ＷＢ＝“１”）  ライトバック要求を発行している状態である。
【０１３５】
８．使用状態（ＷｒＢＥｘｅｃ：Ｌ＝“１０”、Ｒ＝“０”、ＷＢ＝“１”）  
ライトバック状態においてアクセスが生じたり、使用スレッドが実行されると使用状態に遷移する。使用状態は、ライトバック要求の発行中に実行スレッドが切り替わり、当該エントリが実行スレッドにより使用される状態である。
【０１３６】
次に図４２を用いて各状態間の遷移条件について説明する。図４２において縦が遷移前の状態であり、横が遷移後の状態である。そして表中の数字は下記に記す状態変更イベントを示す。
【０１３７】
１．プリロードがエントリにヒットした時  
２．ロード／ストア命令がヒットした時  
３．プリロードがミスヒットし、プリロード要求が発行された時  
４．ロード／ストア命令がミスヒットし、リフィル要求が発行された時  
５、１０．ライトバックの実行を開始した時  
６．ライトバックの実行開始と共にサブパスの実行が開始された時  
７．実行スレッドのプリロードが行われたが、ロード／ストアアクセスされることなくサブパスが終了した時  
８．プリロードされていたエントリを使用するスレッドが実行開始、またはロード／ストア命令がヒットした時  
９．プリロードされていたエントリに対して、ロード／ストア命令ミスヒットによるリフィルを行った時  
１１．ライトバックの実行開始と共にサブパスの実行が開始、もしくはロード／ストア命令がヒットした時  
１２．エンド命令またはイールド命令が実行され、他のスレッドのプリロード要求が無い時  
１３．エンド命令またはイールド命令が実行され、他のスレッドのプリロード要求がある時  
１４．サブパススタートの次のタイミングでエンド命令またはイールド命令とライトバックとが実行される時に生じる  
１５．サブパスがスタートした直後にライトバックが開始された時  
１６、２２．プリロードが完了した時  
１７．プリロードの完了と他のプリロードのヒットとが同時に生じた時  
１８．プリロードの完了と、ロード／ストア命令のヒットとが同時に生じた時  
１９．プリロード命令がヒットした時（但しプリロード要求発行中）  
２０．ロード／ストア命令がヒットした時（但しプリロード要求発行中）  
２１．実行スレッドのプリロードが行われたが、ロード／ストアアクセスされることなくサブパスが終了し、同時にプリロードも終了した時  
２３．プリロードの完了と共に、同時にサブパススタートが同時に生じた時  
２４．実行スレッドのプリロードが行われたが、ロード／ストアアクセスされることなくサブパスが終了し、同時にプリロード要求が未だに発行中である時  
２５．プリロード中のエントリを使用するスレッドの実行が開始された時、またはロード／ストア命令がヒットした時  
２６．プリロード状態からフィル状態へと状態遷移したが、ロード／ストアアクセスがなされることなくサブパスが終了すると同時にプリロードを完了した場合であり、他のスレッドのプリロード要求が無い時  
２７．プリロード状態からフィル状態へと状態遷移したが、ロード／ストアアクセスがなされることなくサブパスが終了すると同時にプリロードを完了した場合であり、他のスレッドのプリロード要求がある時  
２８．リフィルが完了した時  
２９．プリロード状態からフィル状態へと状態遷移したが、ロード／ストアアクセスの無いままサブパスが終了する時で、且つプリロードがまだ完了しておらず他のスレッドのプリロード要求が無い時  
３０．プリロードからフィルに状態遷移したが、ロード／ストアアクセスの無いままサブパスが終了する時で、且つプリロードがまだ完了しておらず他のスレッドおプリロード要求がある時  
３１．Ｌ＝“００”でライトバックが完了した時  
３２．Ｌ＝“０１”でライトバックが完了した時  
３３．ライトバック終了と同時にロード／ストア命令がヒットした時  
３４．ライトバック中のエントリを使用するスレッドが実行された時  
３５．ライトバックの完了とエンド命令またはイールド命令とが同時に生じた時であり、他のスレッドのプリロード要求が無い時  
３６．ライトバックの完了とエンド命令またはイールド命令とが同時に生じた時であり、他のスレッドのプリロード要求がある時  
３７．Ｌ＝“１０”でライトバックが完了した時  
３８．エンド命令またはイールド命令によってサブパスが終了した時  
以上の条件によって、キャッシュエントリは状態遷移する。
【０１３８】
上記のように、この発明の第４の実施形態に係るグラフィックプロセッサによれば、上記第１乃至第３の実施形態で説明した（１）乃至（４）の効果に加えて、下記（５）の効果が得られる。  
（５）キャッシュメモリを効率的に利用出来る（その３）。  
本実施形態に係るグラフィックプロセッサでは、ステータスフラグに複数のレベルを有するロックフラグＬを設けている。そして、ロックフラグＬによってキャッシュメモリ４１のエントリの要求発行を制限している。より具体的には、ロックフラグＬは３つのレベル（“００”、“０１”、“１０”）を含む。そしてＬ＝“００”はエントリがロックされていない状態であり、キャッシュメモリ４１のエントリは自由にプリロード要求やリフィル要求を発行出来る。Ｌ＝“０１”は弱いロック状態であり、キャッシュメモリ４１のエントリはプリロード要求の発行を禁止される。Ｌ＝“１０”は強いロック状態であり、キャッシュメモリ４１のエントリはプリロード要求だけでなくリフィル要求の発行も禁止される。
【０１３９】
プリロードされたデータは、前述の通り実際の処理に先立ってキャッシュメモリ４１に読み出されたデータである。これに対してリフィルされたデータは、ロード／ストア命令によって必要とされたデータである。従って、リフィルによってキャッシュメモリ４１にリプレイスされたデータの方が、プリロードによって読み出されたデータよりも重要性が高く、保護すべき必要性も高い。
【０１４０】
そこで本実施形態ではステータスレジスタにロックフラグＬを設け、リフィルが行われたエントリを強いロック状態として、プリロードや更なるリフィルによってデータが書き換えられることを防止している。そのため、必要なデータがキャッシュメモリ４１から消失されることを防止出来、キャッシュメモリ４１を効率的に使用出来る。
【０１４１】
またプリロードによって読み出されたデータに関しても、それ対応したサブパスが終了する等しない限りは、エントリを弱いロック状態とすることで、プリロードデータが書き換えられないようにしている。従って、プリロードデータを効率的に使用出来る。以上の結果、キャッシュメモリ４１を効率良く使用でき、グラフィックプロセッサの性能を向上出来る。
【０１４２】
次に、この発明の第５の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、上記第１乃至第４の実施形態で説明したグラフィックプロセッサにおいて、キャッシュ管理部４５が更にエントリ内のデータ情報を保持するものである。
【０１４３】
図４３はメモリ６１の概念図であり、キャッシュ管理部４５の備えるステータスフラグの様子を示している。図示するように、本実施形態に係るキャッシュ管理部４５は、タグフラグＴ、バリッドフラグＶ、リフィルフラグＲ、ライトバックフラグＷ、ロックフラグＬの他に、スレッドエントリフラグ（thread entry flag）ＴＥをステータスフラグとして保持する。スレッドエントリフラグＴＥは、キャッシュメモリの対応するエントリが、どのスレッドに関するデータを保持するのかを示すフラグである。スレッドエントリフラグＴＥのビット数は、同時発行可能なスレッド数に等しい。
【０１４４】
スレッドエントリフラグＴＥとキャッシュメモリ４１との関係について、図４４を用いて説明する。図４４はスレッドエントリフラグＴＥとキャッシュメモリの概念図である。
【０１４５】
図示するようにスレッドエントリフラグＴＥは例えばＮビットである。従って、最大でＮ個のスレッドが同時に生成される。そして上位ビットから各々、スレッド０〜スレッド（Ｎ−１）に対応する。例えばキャッシュメモリ４１のエントリ（Ｍ−１）にはスレッド１、２、４、６のデータが保持されている。従って、キャッシュメモリ４１のエントリ１に対応するスレッドエントリフラグＴＥのビット１、２、４、６が“１”である。またキャッシュメモリ４１のエントリ４にはデータが保持されていない。従って、キャッシュメモリ４１のエントリ４に対応するスレッドエントリフラグＴＥは、全ビットが“０”である。
【０１４６】
次に、スレッドエントリフラグＴＥの書き込みタイミングとその際のエントリの状態について図４５を用いて説明する。まずスレッドエントリフラグＴＥは、対応したエントリに関するプリロード命令、リフィル命令、またはロード／ストア命令が発行された際（ステップＳ５０）に、該命令が実行されるスレッドに対応したビットが“１”とされる（ステップＳ５１）。スレッドエントリフラグＴＥが“１”とされると、対応するエントリはデータのリプレイスもフラッシュ（flush：消去）も禁止される（ステップＳ５２）。スレッドエントリフラグＴＥは、対応するスレッドがエンド命令またはイールド命令を実行した際に（ステップＳ５３）、“０”にされる（ステップＳ５４）。そして、スレッドエントリフラグＴＥの全ビットが“０”である場合（ステップＳ５５）には、対応するエントリについてリプレイスとフラッシュが許可される。他方、スレッドエントリフラグＴＥが１ビットでも“１”であれば（ステップＳ５５）、リプレイスとフラッシュは禁止される。
【０１４７】
上記のように、この発明の第５の実施形態に係るグラフィックプロセッサによれば、上記第１乃至第４の実施形態で説明した（１）乃至（５）の効果に加えて、下記（６）の効果が得られる。  
（６）キャッシュメモリを効率的に利用出来る（その４）。  
本実施形態に係るグラフィックプロセッサであると、スレッドエントリフラグＴＥによってエントリのプリロード要求やリフィル要求を制限している。そのため、キャッシュエントリを効率的に使用出来、グラフィックプロセッサの性能を向上出来る。以下、本効果について詳細に説明する。
【０１４８】
キャッシュメモリ４１とローカルメモリ１３とは、勿論バスのサイズにもよるが、基本的にはキャッシュメモリ４１のエントリサイズ単位でデータの授受を行う。データの消去も同じである。従って、キャッシュメモリ４１にＳＲＡＭを用いること等によってキャッシュメモリ４１のエントリサイズが大きい場合、キャッシュメモリ４１の１つのエントリには複数のスレッドに関するデータが読み出される。
【０１４９】
すると、あるエントリ内のスレッドについてサブパスが実行完了したとしても、同じエントリにある他のスレッドはその後に使用される可能性がある。すなわち、サブパスが完了することで、あるスレッドに関するデータは不要になったとしても、同一エントリにある別のスレッドに関するデータは、後に必要になるかもしれない。従って、あるスレッドが終了したからといってその他のスレッドに関するデータまで消してしまうのは非効率的である。
【０１５０】
そこで本実施形態ではスレッドエントリフラグＴＥを用いることによって、サブパスが実行完了していないスレッドが保持されるエントリについては、データのリプレイス及びライトバック（またはフラッシュ）を禁じている。これにより、データがむやみに消去されることを防止できるので、キャッシュメモリ４１のエントリを効率的に使用でき、グラフィックプロセッサの性能を向上出来る。
【０１５１】
なお、スレッドエントリフラグＴＥがアサートされるタイミングは、エントリに実際にデータがリプレイスされた後でなくても良く、リプレイス前であっても良い。すなわち、ロード／ストア命令がミスしてリフィル要求が発行された後で且つリプレイス前の段階や、プリロード要求が発行された後で且つデータ転送前であっても良い。この場合は、他のスレッドによってエントリが書き潰されないように、使用するエントリをスレッドエントリフラグＴＥにより予約することになる。
【０１５２】
次に、この発明の第６の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、ステージがストールした場合のデータの管理手法に係るものである。図４６は、本実施形態に係るデータ管理手法の概念を示すための回路図である。
【０１５３】
図示するように、ある命令がステージＡ〜Ｆにおいて順番に実行され、且つステージＡ〜Ｆはパイプライン動作を行うとする。各ステージはＦ／Ｆを備えており、各ステージに達した命令はＦ／Ｆで保持される。更に、ステージＤにはバッファメモリＤ１、Ｄ２が設けられている。ストール発生時、バッファメモリＤ１、Ｄ２はステージＣのデータを保持し、ステージＤはステージＥのデータを保持する。そしてストール解消してリスタートする際には、バッファメモリＤ１、Ｄ２のデータがステージＤに出力される。
【０１５４】
次に上記ステージの動作について説明する。まずストールが発生していない通常時の動作について図４７を用いて説明する。図４７は各ステージで実行される命令の時間変化を示す表である。実行される命令は命令０〜命令７まであるものと仮定する。
【０１５５】
図示するように、時刻ｔ０において命令０〜５がそれぞれステージＦ〜Ａで実行されているとする。すると、次のサイクル（時刻ｔ１）では、各命令１〜５は次のステージＦ〜Ｂで実行される。また新たな命令６がステージＡに投入されて実行される。命令０は、時刻ｔ０において最後のステージＦで実行が完了したため、処理を終了する。このようにして、各命令０〜７はステージＡ〜Ｆの順にパイプライン処理される。
【０１５６】
次にストールが発生した場合について図４８を用いて説明する。図４８も各ステージで実行される命令の時間変化を示す表であり、ここでは一例として命令３がステージＥにおいてストールした場合について説明する。
【０１５７】
図示するように、時刻ｔ０において命令０〜５がそれぞれステージＦ〜Ａで実行され、時刻ｔ１において命令１〜６がそれぞれステージＦ〜Ａで実行され、時刻ｔ２において命令２〜７がそれぞれステージＦ〜Ａで実行されたとする。そして時刻ｔ３で命令３がステージＥでストールしたとする。すると、時刻ｔ３では、本来は命令３〜７がステージＦ〜Ｂで実行されるはずである。しかしストールが発生したので、時刻ｔ２でステージＣに保持されていた命令５はバッファメモリＤ１に送られ、時刻ｔ２でステージＥに保持されていた命令３はステージＤにフィードバックされる。
【０１５８】
次のサイクル（時刻ｔ４）でも依然としてストールしていると、時刻ｔ３でバッファメモリＤ１に保持されていた命令５はバッファメモリＤ２に送られ、時刻ｔ３でステージＣに保持されていた命令６はバッファメモリＤ１に送られ、時刻ｔ３でステージＥに保持されていた命令４はステージＤにフィードバックされる。以降、ストールが継続する時刻ｔ６までの期間、命令５はバッファメモリＤ２に保持され続け、命令６はバッファメモリＤ１に保持され続ける。そして命令３及び命令４は、ステージＤとステージＥとの間をループする。
【０１５９】
そして時刻ｔ７でストールが解消すると、時刻ｔ６でそれぞれステージＥ、Ｄ、バッファメモリＤ２、ステージＣに保持されていた命令３〜５、７は、それぞれステージＦ、Ｅ、Ｄ、Ｃで実行される。時刻ｔ６でバッファメモリＤ１に保持されていた命令６は、時刻ｔ７でバッファメモリＤ２に送られ、更に時刻ｔ８において、ステージＤで実行される。
【０１６０】
上記のデータ管理手法を、第１乃至第５の実施形態で説明したグラフィックプロセッサに適用した場合について図４９を用いて説明する。図４９はキャッシュ管理部４５の一部領域の回路図である。図２２を用いて説明したように、ロード命令が発行された際、キャッシュ管理部４５にはアドレス発生部４０からキャッシュデータアドレス信号が与えられる。また図３８を用いて説明したように、プリロード時にはプリロードプリロードアドレスが与えられる。
【０１６１】
キャッシュ管理部４５は図１１で説明したように第２ステージにおいて動作する。そして第２ステージの内部において、少なくとも４つの動作ステージ（２−１）〜（２−４）を含む。すなわちアドレス管理部４５は、ステージ（２−１）においてロード／ストア及びプリロードのヒット判定を行う。ステージ（２−２）では、リフィル及びプリロードのエントリを、ＬＲＦキューを用いて選択する。ステージ（２−３）では、キャッシュミスや、ヒットしたエントリがリフィル中である等の場合にストール信号をアサートする。そしてステージ（２−４）でキャッシュ制御部へ信号を転送する。
【０１６２】
図４９においてステージ（２−２）からステージ（２−１）へのループパスは、ステージ（２−２）またはステージ（２−１）でストールが発生した際に用いられる。この状態においては、描画処理部２６によってストール信号がアサートされる。
【０１６３】
ステージ（２−４）からステージ（２−３）へのループパスは、ステージ（２−４）またはステージ（２−３）でストールが発生していた状態において、ステージ（２−２）またはステージ（２−１）でストールが発生した際に用いられる。従ってこの場合、ステージ（２−２）からステージ（２−１）との間のループパスと、ステージ（２−４）からステージ（２−３）ステージへのループパスとが有効となる。
【０１６４】
ステージ（２−４）からステージ（２−１）へのループパスは、ステージ（２−４）またはステージ（２−３）でストールが発生した場合に用いられる。この場合にはストール信号がアサートされているので、この信号によってステージ（２−４）からステージ（２−１）へのループパスが有効とされる。また、ステージ（２−２）とステージ（２−１）との間のループパスと、ステージ（２−４）からステージ（２−３）へのループパスが有効になっていれば、ストール信号がデアサートされたタイミングにおいても、このループパスが有効とされる。
【０１６５】
バッファメモリ８０は、例えば５つのエントリを有している。そして、ストール信号がアサートされて以降に入力されるアドレスを保持する。これは、ストール信号が第３ステージ（図１１参照）まで伝搬された後に、アドレス発生部４０がアドレスの投入を停止するからである。従って、ストールが発生している期間に入力されるアドレスを有効に保持するために、バッファメモリ８０が使用される。
【０１６６】
以上のように、この発明の第６の実施形態に係るグラフィックプロセッサであると、上記第１乃至第５の実施形態で説明した（１）乃至（６）の効果に加えて、下記（７）の効果が得られる。  
（７）ストール後におけるグラフィックプロセッサの処理効率を向上出来る。  
本実施形態に係るグラフィックプロセッサは、実行すべき命令がストールした際に、命令を緊急避難的に保持するバッファメモリを有している。従って、ストール解消後は、バッファメモリ内のデータを用いて処理を開始出来るため、グラフィックプロセッサの処理効率を向上出来る。この点につき以下説明する。
【０１６７】
図５０は、バッファメモリを設けない場合に図４７と同様に命令を実行する際の、命令とステージとの関係を示す表である。そして、図４８と同様に命令３がステージＥでストールした場合を考える。ストールが発生した場合、その瞬間にパイプラインを停止することは困難である。すると図５０の場合、時刻ｔ３では時刻ｔ３の状態を保持する必要があるにもかかわらず、ステージＡ〜Ｄの命令７〜命令４がステージＢ〜ステージＥにオーバーランする。その結果、ストールしているステージＥには、命令３を保持しているにもかかわらずステージＤの命令４が入力され、命令３が潰される。このような事態を避けるために、時刻ｔ３では各ステージＡ〜Ｆの命令を全てフラッシュする必要がある。少なくとも、ストールしたステージよりも上流のステージ（ステージＥでストールした場合にはステージＡ〜Ｄ）の命令をフラッシュする必要がある。しかし、命令を全てフラッシュしてしまうために、時刻ｔ４で処理をリスタートする場合には、また最初から命令を改めて投入する必要がある。すると、ストールする度に命令を投入しなければならず、グラフィックプロセッサの性能が大幅に低下する。
【０１６８】
しかし本実施形態に係る構成であると、ストールが解消した際にはバッファメモリ８０に保持されているデータを用いてリスタート出来る。従って、改めて命令を投入する必要が無いため、グラフィックプロセッサの性能低下を抑制出来る。これはグラフィックプロセッサの動作周波数が高い場合（例えば数ＧＨｚ）や、ステージが非常に深い場合に有効である。なぜなら、このような場合にはストール発生が検出された後に実際のパイプラインを停止させるのに数サイクルを要するからである。
【０１６９】
特に本実施形態に係る構成の場合、図１１に示すように、アドレス発生部４０から出力されたアドレス信号は、数段の処理ステージを含む第２ステージを経た後にキャッシュメモリ４１に達する。このようにパイプラインが深い理由は、命令制御部２５における処理を待つ必要があるからである。１つのピクセルシェーダ２４では一度に例えば（４×４）個のピクセルを一括して処理する。この際、ピクセルを生成するのが命令制御部２５である。ところが、データ振り分け部２０から命令制御部２５に与えられる情報は、代表点となるあるピクセル１個分のデータと、その他のピクセルについての代表点からの差分値のみである。この情報から、命令制御部２５は代表点以外の１５個のピクセルデータを生成する。これにより、データを保持するレジスタ数を削減できる。キャッシュ管理部４５は、このピクセルデータの計算処理を待つ必要があるため、図１１に示すようにパイプラインが深くなる。
【０１７０】
しかし、このようにパイプラインが深くなったとしても、ストールされた際においてステージに保持されるデータを、バッファメモリ８０に待避させ、リスタートする際にはバッファメモリ８０内のデータを使用出来るため、処理効率の低下を効果的に抑制出来る。
【０１７１】
なお、上記第１乃至第６の実施形態に係るグラフィックプロセッサは、例えばゲーム機、ホームサーバー、テレビ、または携帯情報端末などに搭載することが出来る。図５１は上記第１乃至第６の実施形態に係るグラフィックプロセッサを備えたデジタルテレビの備えるデジタルボードのブロック図である。デジタルボードは、画像・音声などの通信情報を制御するためのものである。図示するように、デジタルボード１０００は、フロントエンド部１１００、画像描画プロセッサシステム１２００、デジタル入力部１２００、Ａ／Ｄコンバータ１４００、１８００、ゴーストリダクション部１５００、三次元ＹＣ分離部１６００、カラーデコーダ１７００、ＬＡＮ処理ＬＳＩ１９００、ＬＡＮ端子２０００、ブリッジメディアコントローラ２１００、カードスロット２２００、フラッシュメモリ１０００、及び大容量メモリ（例えばＤＲＡＭ）１１００を備えている。フロントエンド部１１００は、デジタルチューナーモジュール１１１０、１１２０、ＯＦＤＭ（Orthogonal Frequency Division Multiplex）復調部１１２０、ＱＰＳＫ（Quadrature Phase Shift Keying）復調部１１４０を備えている。
【０１７２】
画像描画プロセッサシステム１２００は、送受信回路１２１０、ＭＰＥＧ２デコーダ１２２０、グラフィックエンジン１１００、デジタルフォーマットコンバータ１１１０、及びプロセッサ１１２０を備えている。そして、例えばグラフィックエンジン１１００及びプロセッサ１１２０が、上記第１乃至第６の実施形態で説明したグラフィックプロセッサに対応する。
【０１７３】
上記構成において、地上デジタル放送波、ＢＳデジタル放送波、及び１１０°ＣＳデジタル放送波は、フロントエンド部１１００で復調される。また地上アナログ放送波及びＤＶＤ／ＶＴＲ信号は、３次元ＹＣ分離部１６００及びカラーデコーダ１７００でデコードされる。これらの信号は、画像描画プロセッサシステム１２００に入力され、送受信回路１２１０で、映像・音声・データに分離される。そして、映像に関しては、ＭＰＥＧ２デコーダ１２２０を介してグラフィックエンジン１１００に映像情報が入力される。するとグラフィックエンジン１１００は、上記実施形態で説明したようにして図形を描画する。
【０１７４】
図５２は、上記第１乃至第６の実施形態に係るグラフィックプロセッサを備えた録画再生機器のブロック図である。図示するように、録画再生機器３０００はヘッドアンプ３１００、モータードライバ３２００、メモリ３３００、画像情報制御回路３４００、ユーザＩ／Ｆ用ＣＰＵ３５００、フラッシュメモリ３６００、ディスプレイ３７００、ビデオ出力部３８００、及びオーディオ出力部３９００を備えている。
【０１７５】
画像情報制御回路３４００は、メモリインターフェース３４１０、デジタル信号プロセッサ３４２０、プロセッサ３４３０、映像処理用プロセッサ３４５０、及びオーディオ処理用プロセッサ３４４０を備えている。そして、例えば映像処理用プロセッサ３４５０及びデジタル信号プロセッサ３４２０が、上記第１及び第２の実施形態で説明したグラフィックプロセッサに対応する。
【０１７６】
上記構成において、ヘッドアンプ３１００で読み出された映像データが画像情報制御回路３４００に入力される。そして、デジタル信号処理プロセッサ３４２０から映像情報用プロセッサ３４５０に図形情報が入力される。すると映像情報用プロセッサ３４５０は、上記実施形態で説明したようにして図形を描画する。
【０１７７】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【０１７８】
【図１】この発明の第１の実施形態に係るグラフィックプロセッサのブロック図。
【図２】この発明の第１の実施形態に係るグラフィックプロセッサにおけるフレームバッファの概念図。
【図３】この発明の第１の実施形態に係るグラフィックプロセッサにおけるフレームバッファの概念図。
【図４】この発明の第１の実施形態に係るグラフィックプロセッサにおけるフレームバッファの概念図。
【図５】この発明の第１の実施形態に係るグラフィックプロセッサにおけるフレームバッファの概念図。
【図６】この発明の第１の実施形態に係るグラフィックプロセッサにおけるフレームバッファの概念図。
【図７】この発明の第１の実施形態に係るグラフィックプロセッサの行うクアッドマージの概念図。
【図８】この発明の第１の実施形態に係るグラフィックプロセッサにおいて実行される命令列の概念図。
【図９】この発明の第１の実施形態に係るグラフィックプロセッサにおいて実行されるサブパスの様子を示すタイミングチャート。
【図１０】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部のブロック図。
【図１１】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部のブロック図。
【図１２】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するアドレス発生部のブロック図。
【図１３】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するアドレス発生部が生成するアドレス信号の概念図。
【図１４】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するアドレス発生部が生成するアドレス信号の概念図。
【図１５】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュメモリのブロック図。
【図１６】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するリクエスト発行制御部のブロック図。
【図１７】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュアクセス制御部のブロック図。
【図１８】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部のブロック図。
【図１９】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部内のステータスフラグとキャッシュメモリとの関係を示す概念図。
【図２０】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部の回路図。
【図２１】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の状態遷移図。
【図２２】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部のブロック図であり、ロード時の様子を示す図。
【図２３】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部のブロック図であり、ストア時の様子を示す図。
【図２４】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部のブロック図であり、リフィル時の様子を示す図。
【図２５】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の状態遷移図。
【図２６】この発明の第１の実施形態に係るグラフィックプロセッサのロード／ストア及びリフィル時の動作を示すフローチャート。
【図２７】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部のロード／ストア及びリフィル時における各種信号のタイミングチャート。
【図２８】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部の回路図。
【図２９】グラフィックプロセッサの備えるデータ制御部のブロック図であり、ロード／ストア命令のヒット判定のための構成を示すブロック図。
【図３０】この発明の第１の実施形態に係るグラフィックプロセッサの備えるデータ制御部のブロック図であり、ロード／ストア命令のヒット判定のための構成を示すブロック図。
【図３１】この発明の第２の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部内のステータスフラグの概念図。
【図３２】この発明の第２の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部の回路図。
【図３３】この発明の第２の実施形態に係るグラフィックプロセッサの備えるデータ制御部のブロック図であり、ライトバック時の様子を示す図。
【図３４】この発明の第２の実施形態に係るグラフィックプロセッサのライトバック時の動作を示すフローチャート。
【図３５】この発明の第２の実施形態に係るグラフィックプロセッサのブロック図。
【図３６】この発明の第３の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するサブパス情報管理部におけるインストラクションテーブルの概念図。
【図３７】この発明の第３の実施形態に係るグラフィックプロセッサのプリロード時の動作を示すフローチャート。
【図３８】この発明の第３の実施形態に係るグラフィックプロセッサの備えるデータ制御部のブロック図であり、プリロード時の様子を示す図。
【図３９】この発明の第３の実施形態に係るグラフィックプロセッサにおいて実行されるサブパスの様子を示すタイミングチャート。
【図４０】この発明の第４の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部内のステータスフラグの概念図。
【図４１】この発明の第４の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部において、ロックフラグに応じたエントリの制御方法を示すフローチャート。
【図４２】この発明の第４の実施形態に係るグラフィックプロセッサの備えるデータ制御部取り得る状態を示す図。
【図４３】この発明の第５の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部内のステータスフラグの概念図。
【図４４】この発明の第５の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部内のステータスフラグとキャッシュメモリとの関係を示す概念図。
【図４５】この発明の第５の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部において、スレッドエントリフラグに応じたエントリの制御方法を示すフローチャート。
【図４６】この発明の第６の実施形態に係るグラフィックプロセッサの一部領域のブロック図。
【図４７】この発明の第６の実施形態に係るグラフィックプロセッサにおいて実行される命令とステージとの関係図。
【図４８】この発明の第６の実施形態に係るグラフィックプロセッサにおいて実行される命令とステージとの関係図であり、ストールが発生した際の様子を示す図。
【図４９】この発明の第６の実施形態に係るグラフィックプロセッサの備えるデータ制御部の有するキャッシュ管理部の回路図。
【図５０】グラフィックプロセッサにおいて実行される命令とステージとの関係図であり、ストールが発生した際の様子を示す図。
【図５１】この発明の第１乃至第６の実施形態に係るグラフィックプロセッサを備えたデジタルテレビの有するデジタルボードのブロック図。
【図５２】この発明の第１乃至第６の実施形態に係るグラフィックプロセッサを備えた録画再生機器のブロック図。
【符号の説明】
【０１７９】
１０…グラフィックプロセッサ、１１…ラスタライザ、１２−０〜１２−３…ピクセルシェーダ、１３…ローカルメモリ、２０…データ振り分け部、２３…テクスチャユニット、２４…ピクセルシェーダユニット、２５…命令制御部、２６…描画処理部、２７…データ制御部、４０…アドレス発生部、４１…キャッシュメモリ、４２…キャッシュ制御部、４３…プリロード制御部、４４…キャッシュアクセス制御部、４５…キャッシュ管理部、４６…リクエスト発行制御部、４７…プリロードアドレス発生部、４８…プリロード保持部、４９…サブパス情報管理部、５０…アドレス保持部、５１〜６２、７１…メモリ、６５、６８、６９、７４…選択回路、６６、７２…比較器、６７…ＡＮＤゲート、７３…カウンタ、７５…バス制御部、８０…バッファメモリ
【図１】
0004799171.tif 000002
【図２】
0004799171.tif 000003
【図３】
0004799171.tif 000004
【図４】
0004799171.tif 000005
【図５】
0004799171.tif 000006
【図６】
0004799171.tif 000007
【図７】
0004799171.tif 000008
【図８】
0004799171.tif 000009
【図９】
0004799171.tif 000010
【図１０】
0004799171.tif 000011
【図１１】
0004799171.tif 000012
【図１２】
0004799171.tif 000013
【図１３】
0004799171.tif 000014
【図１４】
0004799171.tif 000015
【図１５】
0004799171.tif 000016
【図１６】
0004799171.tif 000017
【図１７】
0004799171.tif 000018
【図１８】
0004799171.tif 000019
【図１９】
0004799171.tif 000020
【図２０】
0004799171.tif 000021
【図２１】
0004799171.tif 000022
【図２２】
0004799171.tif 000023
【図２３】
0004799171.tif 000024
【図２４】
0004799171.tif 000025
【図２５】
0004799171.tif 000026
【図２６】
0004799171.tif 000027
【図２７】
0004799171.tif 000028
【図２８】
0004799171.tif 000029
【図２９】
0004799171.tif 000030
【図３０】
0004799171.tif 000031
【図３１】
0004799171.tif 000032
【図３２】
0004799171.tif 000033
【図３３】
0004799171.tif 000034
【図３４】
0004799171.tif 000035
【図３５】
0004799171.tif 000036
【図３６】
0004799171.tif 000037
【図３７】
0004799171.tif 000038
【図３８】
0004799171.tif 000039
【図３９】
0004799171.tif 000040
【図４０】
0004799171.tif 000041
【図４１】
0004799171.tif 000042
【図４２】
0004799171.tif 000043
【図４３】
0004799171.tif 000044
【図４４】
0004799171.tif 000045
【図４５】
0004799171.tif 000046
【図４６】
0004799171.tif 000047
【図４７】
0004799171.tif 000048
【図４８】
0004799171.tif 000049
【図４９】
0004799171.tif 000050
【図５０】
0004799171.tif 000051
【図５１】
0004799171.tif 000052
【図５２】
0004799171.tif 000053