以下、この発明の実施形態を図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
この発明の第1の実施形態に係るグラフィックプロセッサについて、図1を用いて説明する。図1は、本実施形態に係るグラフィックプロセッサのブロック図である。
図示するように、グラフィックプロセッサ10はラスタライザ(rasterizer)11、複数のピクセルシェーダ(pixel shader)12−0〜12−3、及びローカルメモリ13を備えている。なお、本実施形態ではピクセルシェーダ12の数は4個であるがこれは一例に過ぎず、8個、16個、32個等でも良く、その数は限定されるものではない。
ラスタライザ11は、入力された図形情報に従ってピクセル(pixel)を生成する。ピクセルとは、所定の図形を描画する際に取り扱われる最小単位の領域のことであり、ピクセルの集合によって図形が描画される。生成されたピクセルはピクセルシェーダ12−0〜12−3へ投入される。
ピクセルシェーダ12−0〜12−3は、ラスタライザ11から投入されたピクセルにつき演算処理を行い、ローカルメモリ13上に画像データを生成する。ピクセルシェーダ12−0〜12−3の各々は、データ振り分け部20、テクスチャユニット(texture unit)23、及び複数のピクセルシェーダユニット24を備えている。
データ振り分け部20はラスタライザ11からデータを受け取る。そして、受け取ったデータをピクセルシェーダ12−0〜12−3へ割り振る。
テクスチャユニット23はローカルメモリ13からテクスチャデータを読み出し、テクスチャマッピングに必要な処理を行う。テクスチャマッピングとは、ピクセルシェーダユニット24で処理されたピクセルにテクスチャデータを貼り付ける処理のことであり、ピクセルシェーダユニット24において行われる。
ピクセルシェーダユニット24はシェーダエンジン部であり、ピクセルデータに対してシェーダプログラムを実行する。そしてピクセルシェーダユニット24のそれぞれはSIMD(Single Instruction Multiple Data)動作を行って、複数個のピクセルを同時に処理する。ピクセルシェーダユニット24はそれぞれ、命令制御部25、描画処理部26、及びデータ制御部27を備えている。これらの回路ブロック25〜27の詳細については後述する。
ローカルメモリ13は、例えばeDRAM(embedded DRAM)であり、ピクセルシェーダ12−0〜12−3で描画されたピクセルデータを記憶する。
次に、本実施形態に係るグラフィックプロセッサにおける図形描画の概念について説明する。図2は、図形を描画すべき全体の空間を示す概念図である。なお、図2に示す描画領域は、ローカルメモリ内においてピクセルデータを保持するメモリ空間(以下、フレームバッファと呼ぶ)に相当する。
図示するように、フレームバッファは、マトリクス状に配置された例えば(40×15)個のブロックBLK0〜BLK599を含んでいる。ブロックの数は一例に過ぎず、(40×15)個に限定されるものではない。ピクセルシェーダ12−0〜12−3は、ブロックBLK0〜BLK599順にピクセルを生成する。各ブロックBLK0〜BLK599はそれぞれ、マトリクス状に配置された32個のスタンプ(stamp)を含んで形成されている。図3は、図2に示された各ブロックが複数のスタンプを有する様子を示している。
各スタンプは、同一のピクセルシェーダによって描画される複数のピクセルの集合体である。本実施形態では1個のスタンプは(4×4)=16個のピクセルを含んでいるが、この数は例えば1個、4個、…等でも良く、限定されるものではない。図3において、各スタンプに記載された番号(=0〜31)を以下スタンプID(StID)と呼び、各ピクセルに記載された番号(=0〜15)を以下ピクセルID(PixID)と呼ぶ。また、各スタンプにおける(2×2)個のピクセルの集合をクアッド(quad)と呼ぶことにする。すなわち、1個のスタンプには(2×2)個のクアッドが含まれる。これらの4つのクアッドを、以下クアッドQ0〜Q3と呼ぶことにし、この数字をクアッドIDと呼ぶ。ブロックBLK0〜BLK599の各々には、上記スタンプが(4×8)=32個含まれている。従って、全体として(640×480)個のピクセルによって、図形を描画すべき空間が形成されている。
なおピクセルシェーダユニット24をピクセルシェーダ12−0〜12−3順に番号付けすると、その番号に等しいスタンプIDを有するスタンプが各ピクセルシェーダユニット24によって処理される。すなわち、各スタンプ内のピクセルは、その位置に応じて処理が行われるピクセルシェーダユニットが予め決められている。
次に、上記フレームバッファに描画される図形に関して説明する。まず図形を描画するにあたって、ラスタライザ11に図形情報が入力される。図形情報は、例えば図形の頂点座標や色情報などである。ここで、例として三角形を描画する場合について説明する。ラスタライザ11に入力された三角形は、描画空間において図4に示すような位置を占めるとする。すなわち、三角形の3つの頂点座標が、ブロックBLK2におけるStID=31のスタンプ、ブロックBLK41におけるStID=15のスタンプ、及びブロックBLK43におけるStID=4のスタンプに位置すると仮定する。ラスタライザ11は、描画すべき三角形が占める位置に対応するスタンプを生成する。この様子を示しているのが図5である。生成されたスタンプデータは、それぞれ予め対応付けられたピクセルシェーダ12−0〜12−3に送られる。
そしてピクセルシェーダ12−0〜12−3は、入力されたスタンプデータに基づいて、自らの担当するピクセルについて描画処理を行う。その結果、図5に示されるような三角形が、複数のピクセルによって描画される。ピクセルシェーダ12−0〜12−3によって描画されたピクセルデータは、スタンプ単位でローカルメモリに格納される。
図6は、図5におけるブロックBLK2の拡大図である。図示するようにブロックBLK2に関して、ラスタライザ11は8個のスタンプを生成する。それらのスタンプIDはそれぞれStID=16、17、19、21、25〜27、31である。前述の通り、ラスタライザ11で生成されたスタンプの個々には(4×4)=16個のピクセルが含まれている。しかし、例えスタンプが発行されたとしても、図形によっては全てのピクセルに対して描画処理を行う必要はない。例えば図6において、StID=17、27のスタンプは三角形の内部にあるので、このスタンプ内に含まれる全てのピクセルに対して描画処理を行う必要がある。しかし、例えばStID=21のスタンプにおいては、PixID=0〜7、9、12〜15のピクセルは三角形の外部にあるため描画処理の必要はない。描画処理の必要なピクセルは、PixID=8、10、11のピクセルのみである。このように、描画処理すべきであることを以下では「バリッド(valid)である」と呼び、描画不要であることを「インバリッド(invalid)である」と呼ぶことにする。
次に図1に戻ってピクセルシェーダユニット24の構成について説明する。図示するようにピクセルシェーダユニット24は、命令制御部25、描画処理部26、及びデータ制御部27を備えている。命令制御部25は、タスクの実行管理、スタンプデータの受信、クアッドマージ、サブパスの実行管理等を行う。描画処理部26は、ピクセルの演算処理を行う。データ制御部27はキャッシュメモリを備え、キャッシュメモリやローカルメモリ13へのデータアクセスの制御を行う。
命令制御部25の動作について以下説明する。命令制御部25はパイプライン動作を行う。命令制御部25は、データ振り分け部20から複数のデータを受け取り、保持する。そのデータとは、例えばスタンプのXY座標、描画方向、ポリゴンの面(face)情報、描画すべき図形の有するパラメータの代表値、図形の奥行き情報、またはピクセルがバリッドか否かを示す情報などである。また命令制御部25はクアッドマージを行う。クアッドマージとは、同一XY座標の連続する2つのスタンプを1つのスタンプにマージすることである。クアッドマージを行うことで、2つのスタンプのうちバリッドなクアッドを1つのスタンプに合成出来、一度に処理出来る。従って、描画処理すべきデータ量を圧縮出来る。クアッドマージの様子を図7に示す。
2つの時間的に連続する2つのスタンプが、例えば図7に示すようであったとする。1つのスタンプに含まれる4つのクアッドをそれぞれクアッドQ0〜Q3と呼ぶことにする。まず始めにクアッドQ0、Q2がバリッドで且つクアッドQ1、Q3がインバリッドなスタンプ1が命令制御部25に入力され、引き続きクアッドQ1、Q2がバリッドで且つクアッドQ0、Q3がインバリッドなスタンプ2が入力された場合を考える。この場合、2つのスタンプ1、2をマージすることにより、スタンプ1のクアッドQ0、Q2と、スタンプ2のクアッドQ1、Q2とを含む新規なスタンプを生成する。この新規なスタンプを、クアッドマージ前のスタンプと区別するために以後スレッド(thread)と呼ぶことにする。クアッドマージにより生成されたスレッドは番号付けされ、その番号を以下スレッドID(TdID)と呼ぶことにする。そして命令制御部25は、生成されたスレッドに関する情報を保持する。スレッドに関する情報とは、例えばサブパスID、スレッドID、またスレッドに含まれる4つのクアッドのクアッドマージ前のスタンプ内における位置情報などである。サブパスIDは、現在実行中または次に実行すべきサブパス(sub-pass)番号である。サブパスについて以下説明する。
命令制御部25は、各スレッドに対して、エンド信号を検出するまで所定の命令を実行する。実行される命令列は、図8に示すよう最大でX個の命令列に分割出来、分割されて出来た個々の命令列がサブパスである。個々のサブパスの最後にはイールド命令Yieldが配置され、最終のサブパスの最後にはイールド命令の代わりにエンド命令Endが配置されている。
図9は、サブパスが実行される様子を時間と共に示した概念図である。図9において、スレッド5、6、7は同一のピクセルシェーダユニットによって処理される。図示するように、スレッドに対する処理はイールド命令によって一旦休止する。そして、代わりに他のスレッドに対する命令が実行される。休止したスレッドは、後に発行可能となった際に起動される。すなわち、2つのイールド命令間で実行される命令がサブパスである。そしてサブパスの単位でスレッドが実行され、その期間の処理は連続して実行される。
命令制御部25はサブパスの制御を行う。そして、スレッドとそれに対応するサブパスIDを保持し、いずれのスレッドが発行可能かを管理する。
更に命令制御部25は、データ振り分け部20から与えられる情報に基づいて、ピクセルデータを補間する。通常、ラスタライザによって生成されるピクセルは、スタンプあたり1個だけである。従って、このラスタライザ11によって生成されたピクセルデータに基づいた計算により、描画処理部26は同じスタンプ内の他のピクセルに関する情報を得る。
次にデータ制御部27について、図10及び図11を用いて説明する。図10はデータ制御部27のブロック図である。データ制御部27はパイプライン動作を行う。図11は、パイプライン動作の各ステージと関連付けて示したデータ制御部27のブロック図である。
ピクセルシェーダユニットの各回路ブロックにおける処理は、第1乃至第3ステージの少なくとも3つのステージを有する。各ステージについて大まかに説明すると、第1ステージでは、命令制御部25が必要なデータの読み出しや、命令のプリフェッチ等を行う。またデータ制御部27では、データアクセスに必要なアドレス信号の生成や、プリロード(後述する)に関する制御を行う。第2ステージでは、命令制御部25がピクセルデータの補間を行い、データ制御部27がデータアクセスに必要な命令を生成する。そして第3ステージでは、命令制御部25及びデータ制御部27における処理結果に基づいて描画処理部26が描画処理を行う。なお、命令制御部25によるデータ振り分け部20からのデータの受信は、上記第1ステージの前の段階で行われる。
データ制御部27の構成について説明する。図示するように、データ制御部27は、アドレス発生部40、キャッシュメモリ41、キャッシュ制御部42、及びプリロード制御部43を備えている。アドレス発生部40は、命令制御部25からロード/ストア命令が発行された際に、ローカルメモリ13において読み出すべきデータのアドレス、または書き込むべきデータのアドレスを生成する(以下これをロード/ストアアドレスと呼ぶ)。ロード/ストア命令とは、描画処理部26がピクセル処理を行う際に必要となるデータを読み出す命令(ロード)、または処理したデータを保持させる命令(ストア)である。より詳細には、ロード命令が発行されると、ピクセル描画処理に必要なデータが、キャッシュメモリ41から、描画処理部26内にあるレジスタに読み出される。必要なデータがキャッシュメモリ41に無い場合にはローカルメモリ13から読み出される。またストア命令が発行されると、描画処理部26内のレジスタに保持されているデータが、一時的にキャッシュメモリ41に書き込まれ、その後ローカルメモリ13に書き込まれる。
キャッシュメモリ41は、ピクセルデータを一時的に保持する。描画処理部26は、キャッシュメモリ41に保持されるデータを用いてピクセル処理を行う。
キャッシュ制御部42は、ロード/ストア命令が発行された際における、キャッシュメモリ41に対するアクセスを制御する。キャッシュ制御部42は、キャッシュアクセス制御部44、キャッシュ管理部45、及びリクエスト発行制御部46を備えている。
プリロード制御部43は、プリロード命令が発行された際における、キャッシュメモリ41に対するアクセスを制御する。プリロード制御部43はプリロードアドレス発生部47、プリロード保持部48、サブパス情報管理部49、及びアドレス保持部50を備えている。プリロード命令とは、次に実行されるであろうスレッドのサブパスで使用されるデータを、ローカルメモリからキャッシュメモリ41に予めプリフェッチするための命令である。
またデータ制御部27は上記回路ブロックのいずれかにおいて、コンフィギュレーションレジスタを備える。コンフィギュレーションレジスタは、信号WIDTH、BASE、PRELOADを保持する。信号WIDTHは、ピクセルに関するフレームバッファのサイズを示す。BASEは、ローカルメモリ13に保持されるデータのベースアドレス(先頭アドレス)を、フレームバッファモード及びメモリレジスタモードの両方の場合について示す。PRELOADは、プリロードのON/OFFを設定するためのものである。
データ制御部27の内部の構成について、以下詳細に説明する。まずアドレス発生部40について説明する。図12はアドレス発生部40のブロック図であり、入出力信号を示している。図示するように、アドレス発生部40にはオフセットデータ、スレッドのXY座標、スレッドID、クアッドID、サブパスID、及びバッファモード信号が入力される。XY座標は命令制御部25から与えられる。スレッドID、クアッドID、及びサブパスIDは描画処理部26から与えられる。アドレス発生部40は、スレッドのX座標、Y座標と、コンフィギュレーションレジスタに保持されるWIDTHに基づいて、ロード/ストアアドレスを計算する。ロード/ストアアドレスは、上記情報から計算可能であれば良く、その計算式自体は特に限定されるものでは無い。下記に一例として、ピクセルシェーダユニットの数が4個であり、且つ1つのブロック内に32個のスタンプが含まれる場合のロード/ストアアドレスの計算方法を示す。
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]
なお上式におけるBlockIDは図2で説明したBLK0〜BLK599の番号である。X、YはX座標及びY座標である。PUIDはピクセルシェーダユニット番号であり、ピクセルシェーダユニット24をピクセルシェーダ12−0〜12−3順に番号付けした際の番号である。ピクセルシェーダユニット番号は5ビットの信号であり、PUID[0]〜PUID[4]はその各ビットを示す。また上式の演算子は、modは剰余演算、ANDは論理積演算、^は排他的論理和演算、~は論理否定演算、|は論理和演算を表す。
そしてアドレス発生部40は、上記計算結果とオフセットデータ、クアッドID、及びピクセルIDを図13または図14に示す順序に並べることによって、32ビットのロード/ストアアドレスを生成する。ローカルメモリ13は、2つのモードでデータを記憶することが可能であり、それぞれのモードをフレームバッファモード、メモリレジスタモードと呼ぶことにする。ロード/ストアアドレスは、ローカルメモリがフレームバッファモードで使用される場合にはスレッドのXY座標から求められ、図13のように配置することで得られる。他方、メモリレジスタモードで使用される場合にはスレッドIDによって求められ、図14のように配置することで得られる。なお、オフセットデータは命令制御部25から与えられる。また、フレームバッファモードとメモリレジスタモードのいずれを使用するかは、命令制御部25からバッファモード信号として与えられる。ピクセルIDは、XY座標から知ることが出来る。なぜなら、図3で説明したように、各ピクセルセルIDを有するピクセルのスタンプ内における位置は予め決められているからである。また同様の理由によりクアッドIDも知ることが出来る。
アドレス発生部40は、図13または図14に示すアドレスを発生すると、そのうちの一部をキャッシュデータアドレス、キャッシュインデックスエントリ、及びキャッシュエントリとして出力する。これらの信号は、キャッシュメモリ41内のアドレスを示す信号であるが、その詳細は後述する。
次にキャッシュメモリ41について図15を用いて説明する。図15はキャッシュメモリ41のブロック図である。図示するようにキャッシュメモリ41は、例えば2つのメモリ51−0、51−1を備えている。メモリ51−0、51−1は例えばSRAMやまたはDRAMである。メモリ51−0、51−1の各々はM個のエントリ0〜(M−1)を備えている。各エントリ0〜(M−1)は、それぞれ独立したメモリ53−0〜53−(M−1)である。更に、エントリ0〜(M−1)の各々は、L個(Lは2以上の自然数)のサブエントリ0〜(L−1)を備えている。キャッシュメモリ41からデータが読み出される際には、メモリ51−0内のいずれかのエントリにおけるいずれかのサブエントリと、メモリ51−1内のいずれかのエントリにおけるいずれかのサブエントリとからそれぞれ、データがキャッシュリードデータとして読み出される。
なお、図15においてエントリ0〜(M−1)の各々がL個のサブエントリ0〜(L−1)を有している理由は、キャッシュメモリ41と外部とを接続するバスの転送可能データサイズが、メモリ51−0、51−1の各エントリサイズの(1/L)だからである。従って、バスの転送可能データサイズがエントリサイズ以上であれば、エントリがサブエントリを有する必要はなく、この場合にはエントリサイズでデータが外部へ読み出される。
また、図15においてはキャッシュメモリ41が2つのメモリ51−0、51−1を有する場合について示しているが、この数は一例に過ぎず、1個だけでも良いし、3つ以上であっても良い。キャッシュメモリ41に含まれる2つのメモリ51−0、51−1には、それぞれ識別番号としてインデックス0、インデックス1がそれぞれ割り当てられている。そして、図12乃至図14で説明したアドレス信号のうち、キャッシュインデックスエントリ及びキャッシュデータアドレスには、メモリ51−0、51−1に割り当てられたインデックス0、インデックス1のいずれを選択すべきかの情報が含まれる。またキャッシュエントリには、サブエントリ0〜(L−1)のいずれを選択すべきかの情報が含まれている。またキャッシュメモリ41に対しては、キャッシュイネーブル信号、キャッシュライトイネーブル信号、キャッシュライトデータ、及びキャッシュアドレスが、キャッシュアクセス制御部44から入力される。キャッシュイネーブル信号はキャッシュメモリ41をイネーブル状態にするための信号であり、キャッシュライトイネーブル信号はキャッシュメモリ41への書き込み動作をイネーブルにする信号であり、キャッシュライトデータはキャッシュメモリ41への書き込みデータであり、キャッシュアドレスはキャッシュメモリにおいてアクセスすべきアドレスを示す。
次にキャッシュ制御部42が備えるキャッシュアクセス制御部44、キャッシュ管理部45、及びリクエスト発行制御部46について説明する。まずリクエスト発行制御部46について図16を用いて説明する。図16はリクエスト発行制御部46のブロック図であり、入出力信号を示している。図示するようにリクエスト発行制御部46には、プリロード要求イネーブル信号、リフィル要求イネーブル信号、リフィルアドレス、リフィル要求ID、及びリフィルアクノリッジ信号が入力される。プリロード要求イネーブル信号はキャッシュ管理部45から与えられ、プリロード要求イネーブル信号プリロード要求が出力されるとアサートされる。リフィル要求イネーブル信号、リフィルアドレス、リフィル要求IDはキャッシュ管理部45から与えられ、それぞれリフィル要求のイネーブル信号、アドレス、リクエストIDを示す。ロード/ストア命令が発行された際に、該当するデータがキャッシュメモリ41内に存在しなかった場合、該当データをローカルメモリからキャッシュメモリ41へ読み出す必要がある。これをリフィル(refill)と呼ぶ。リフィルアクノリッジ信号はローカルメモリ13から与えられ、リフィル要求に関するアクノリッジ信号である。
リクエスト発行制御部46は、リフィル要求とプリロード要求の発行を制御する。具体的にはまず、ローカルメモリ13へのリフィル要求とプリロード要求の総数をカウントする。ローカルメモリ13からリフィルアクノリッジ信号が返ってくると、これらの要求数をカウントダウンする。これはローカルメモリ13が受け付けることの出来るリクエスト数に上限があるからである。またプリロードとリフィルとでは、優先度はリフィルの方が高い。従って、リフィル要求とプリロード要求とが同時に発行待ちとなっている場合は、リフィル要求が優先して発行される。そして適切なタイミングで、リフィル要求信号をローカルメモリ13へ出力する。またリクエスト発行制御部46は、ローカルメモリ13に対して発行待ちをしているリフィル要求の有無を、リフィルレディ信号としてアドレス保持部50へ出力する。更に、ローカルメモリ13におけるリクエストキューの有無、すなわちローカルメモリ13に対してリフィル要求及びプリロード要求を発行出来るか否かを、要求状況信号としてアドレス保持部50へ出力する。
次にキャッシュアクセス制御部44について図17を用いて説明する。図17はキャッシュアクセス制御部44のブロック図であり、入出力信号を示している。図示するようにキャッシュアクセス制御部44には、ストアデータ、キャッシュインデックスエントリ、キャッシュエントリ、ヒットエントリ番号、ロードイネーブル信号、ストアイネーブル信号、リフィルアクノリッジ信号、リフィル要求ID、リフィルデータ、ライトバックアクノリッジ信号、ライトバックID、及びキャッシュリードデータが入力される。
ストアデータはキャッシュメモリ41にストアすべきデータであり、描画処理部26から与えられる。ヒットエントリ番号はキャッシュ管理部45から与えられる。そしてロード/ストア命令が発行された際、該当データがキャッシュメモリ41にあるか否か、ある場合いずれのエントリにあるかを示す。ヒットエントリ番号については後に詳細に説明する。ロードイネーブル信号、ストアイネーブル信号はそれぞれ、キャッシュ管理部45及びシェーダプログラム実行部描画処理部26から与えられ、ロード要求及びストア要求が発行された際にアサートされる。リフィルアクノリッジ信号、リフィル要求ID、リフィルデータはローカルメモリ13から与えられる。ライトバックアクノリッジ信号、ライトバックIDはライトバック動作に関する信号であり、それぞれアクノリッジ信号及びIDを示し、ローカルメモリ13から与えられる。ライトバックとは、キャッシュメモリ41内のデータをローカルメモリへ書き込む動作のことであり、詳細は第2の実施形態で説明する。
またキャッシュアクセス制御部44は、ロードイネーブル信号、ライトバックデータ、キャッシュイネーブル信号、キャッシュライトデータ、キャッシュアドレス、及びリフィルアクノリッジIDを出力する。ロードイネーブル信号は描画処理部26に与えられる。ライトバックデータは、ライトバック時にキャッシュメモリ41へ書き込むべきデータであり、ローカルメモリ13へ与えられる。リフィルアクノリッジIDはリフィルのアクノリッジIDを示す信号であり、キャッシュ管理部45へ与えられる。
キャッシュアクセス制御部44は、キャッシュメモリ41へのデータの書き込み、及びキャッシュメモリ41からのデータの読み出しを制御する。キャッシュメモリ41へのアクセスは、ロード、ストア、リフィル、及びライトバックの4種類がある。キャッシュメモリ41へアクセスがなされる際、キャッシュアクセス制御部44はキャッシュイネーブル信号をアサートする。
リフィルを行う場合、リフィルアクノリッジ信号がキャッシュアクセス制御部44に到達してから一定時間後に、リフィルデータがローカルメモリ13からキャッシュアクセス制御部44に到達する。キャッシュアクセス制御部44はリフィルデータを一旦保持した後、キャッシュメモリ41へ書き込む。キャッシュメモリ41へリフィルデータを書き込む際には、キャッシュアクセス制御部44はキャッシュライトイネーブル信号をアサートし、キャッシュライトデータ及びキャッシュアドレスをキャッシュメモリ41に対して出力する。更にキャッシュアクセス制御部44は、ローカルメモリ13からリフィルアクノリッジ信号を受け取ると、リフィルアクノリッジIDをキャッシュ管理部45へ出力する。
ライトバックを行う場合、キャッシュアクセス制御部44は、キャッシュメモリ41から読み出されたキャッシュリードデータを一旦保持した後、これをライトバックデータとしてローカルメモリ13へ出力する。
ストアを行う場合、ストアイネーブル信号がアサートされると共に、描画処理部26からストアデータが与えられる。そしてキャッシュアクセス制御部44は、このストアデータをキャッシュメモリ41に書き込む。
ロードを行う場合、ロードイネーブル信号がアサートされる。そしてキャッシュアクセス制御部44は、キャッシュメモリ41からキャッシュリードデータを読み出す。このデータは同時に描画処理部26にも与えられる。
次にキャッシュ管理部45について図18を用いて説明する。図18はキャッシュ管理部45のブロック図であり、入出力信号を示している。図示するようにキャッシュ管理部45には、ストール信号、キャッシュデータアドレス信号、ロード要求信号、ストア要求信号、エンド命令、イールド命令、サブパススタート信号、スレッドエントリ番号、フラッシュ要求信号、プリロードアドレス、プリロードスレッドID、プリロードイネーブル信号、リフィルアクノリッジ信号、ライトバックアクノリッジ信号、ライトバックアクノリッジID、リフィルアクノリッジIDが入力される。
ストール信号は描画処理部26から与えられる。ストールとは、何らかの原因によって命令が実行できず、実行を待っている状態のことである。ロード要求信号、ストア要求信号は描画処理部26から与えられる。エンド命令及びイールド命令は描画処理部26から与えられる。サブパススタート信号はサブパスが開始されたことを示す信号であり、描画処理部26から与えられる。フラッシュ要求信号は、キャッシュメモリ41のフラッシュを要求するための信号であり、描画処理部26から与えられる。
プリロードアドレス、プリロードスレッドID、及びプリロードイネーブル信号はプリロードに関する信号であり、プリロード制御部43のアドレス保持部50から与えられる。
またキャッシュ管理部45には、リフィルアクノリッジ信号、及びリフィルアクノリッジIDが、それぞれローカルメモリ13及びキャッシュアクセス制御部44から与えられる。更にライトバックアクノリッジ信号及びライトバックアクノリッジIDが、それぞれローカルメモリ13及びキャッシュアクセス制御部44から与えられる。
キャッシュ管理部45は、キャッシュメモリ41のヒット判定、エントリのステータス管理、リクエスト発行エントリの決定、LRFの管理、及びキャッシュメモリ41のフラッシュ制御を行う。
キャッシュメモリ41のヒット判定について説明する。例えばロード命令が発行された場合、必要なデータをキャッシュメモリ41から描画処理部26へロードする必要がある。この時、必要なデータがキャッシュメモリ41に保持されていればよいが、保持されていない場合には当該データをローカルメモリからキャッシュメモリ41へ読み出す(リフィルする)必要がある。このように、必要なデータがキャッシュメモリ41内に保持されているか否かを判定することをヒット判定と呼ぶ。そしてヒット判定結果をヒットエントリ番号として、キャッシュアクセス制御部44へ出力する。
ロード/ストア命令やプリロード命令がキャッシュミスした場合(キャッシュメモリ41に保持されていない場合)、キャッシュ管理部45はリフィル要求イネーブル信号及びリフィルアドレスをリクエスト発行制御部46へ出力する。
またキャッシュ管理部45は、キャッシュメモリ41の各エントリのステータス管理を行う。そのためにキャッシュ管理部45は、キャッシュメモリ41の各エントリに対応して設けられ、ステータスフラグを保持するメモリ61を備えている。ステータスフラグは、キャッシュメモリ41において対応する各エントリの状態を示す。図19はメモリ61の概念図である。メモリ61は例えばSRAMやフリップフロップ等であり、メモリ51−0、51−1それぞれに対応して設けられる。図19では、メモリ51−0、51−1のいずれかに対応するステータスフラグのみを示している。
図示するように、メモリ61はメモリ51−0、51−1と同様にM個のエントリ0〜(M−1)を備えている。そして各エントリはステータスフラグとして、タグT(Tag)、バリッドフラグV(Valid flag)、及びリフィルフラグR(Refill flag)を保持する。タグTは、対応するエントリに保持されるデータのアドレス信号に関する。より具体的には、図13で説明したアドレス信号に含まれるブロックIDと、ピクセルシェーダユニット番号の一部に対応する。また図14で説明したアドレス信号に含まれるスレッドIDに対応する。
バリッドフラグVは、対応するエントリに保持されるデータが有効(バリッド)か否かを示すフラグである。エントリは、リフィル要求が発行されるとバリッドとなり、フラッシュ(flush)されるとインバリッド(invalid)となる。
リフィルフラグRは、リフィル要求を発行中であることを示すフラグである。リフィルフラグRは、リフィル要求を発行してから、実際にローカルメモリからキャッシュメモリ41へのデータ転送(これをリプレイス(replace)と呼ぶ)が完了されるまでアサートされ続ける。
リクエスト発行エントリの決定とは、リフィルやプリロードを行う際に、キャッシュメモリ41においてデータを保持させるべきエントリを決定することであり、最も古くリフィルされたエントリから順に使用される。この点について図20を用いて説明する。発行エントリを決定するために、キャッシュ管理部45は、各々がMビットのエントリをM個有するメモリ62を備えている。メモリ62にLRFキュー(Least Recently Filled Queue)が保持される。LRFキューは、キャッシュメモリ41においてリフィルが行われた順序を示す。そしてメモリ62のエントリ0〜(M−1)の各ビットは、上位ビットから順にキャッシュメモリ41の各エントリ0〜(M−1)に対応し、メモリ62のエントリ0〜(M−1)の順にリフィルが行われた順序が古くなっていく。従って図20の例の場合、最近リフィルが行われたキャッシュメモリ41のエントリは、メモリ62のエントリ(M−1)に示されるようにエントリ3であり、次にエントリ1、エントリ5、…である。 キャッシュ管理部45は、図19に示したステータスフラグに基づいて、リクエスト発行可能エントリ信号を生成する。リクエスト発行可能エントリ信号は、現在リクエスト発行可能なエントリがいずれであるかを示す信号である。そして、上位ビットから順に、キャッシュメモリ41のエントリ0〜(M−1)に対応する。従って図20の例であると、キャッシュメモリ41のエントリ1、2、3がリクエスト発行可能であると分かる。
そしてキャッシュ管理部45は、LRFキューとリクエスト発行可能エントリ信号との論理積演算を行う。(M−1)個のLRFキューとリクエスト発行可能エントリ信号との論理演算結果を順に並べることで、リクエスト発行キュー信号が得られる。リクエスト発行キュー信号は、LRFキューのいずれのエントリに基づいて発行エントリを決定すればよいかを示しており、上位ビットから順に、メモリ62のエントリ0〜(M−1)に対応している。従って図20の例であると、メモリ62のエントリ3、6、(M−1)に保持されたLRFキューに基づいて決めれば良いことが分かる。すると、キャッシュメモリ41において発行可能なエントリはエントリ1、2、3であるところ、これらのうちで最も昔にリフィルが行われたキャッシュメモリ41のエントリはエントリ2であることがLRFキューから分かる。従って、キャッシュメモリ41においてリクエスト発行エントリはエントリ2と決定される。これを示しているのがリクエスト発行エントリ信号である。この信号も、上位ビットから順にキャッシュメモリ41のエントリ0〜(M−1)に対応しており、“1”とされたビットに対応するエントリがリクエスト発行エントリである。なお図20に示す回路は、キャッシュメモリ41に含まれるメモリ51−0、51−1毎に設けられている。
次に図10におけるプリロード制御部43について説明する。プリロードアドレス発生部47は、プリロード時のアドレス信号を生成する。プリロード保持部48は、プリロード要求のなされたスレッドの管理を行う。サブパス情報管理部49は、サブパスでアクセスしたバッファに関する情報を記憶する。アドレス保持部50は、プリロードアドレス発生部47で生成されたアドレス信号を保持する。上記構成において、生成されたプリロードアドレスがキャッシュ管理部45に与えられる。プリロードに関しては第3の実施形態で詳細を説明する。
次に、上記データ制御部27の動作について説明する。データ制御部27は、キャッシュメモリ41、ローカルメモリ13、及び描画処理部26との間のデータの授受を管理する。これらの間のデータの授受は、図21に示すようにプリロード、ロード/ストア、リフィル、及びライトバックの4種類がある。本実施形態ではロード/ストア及びリフィルについて説明する。
まず、ロード/ストア命令が発行された際のロード動作について図22を用いて説明する。図22はピクセルシェーダユニットのブロック図である。ロードは、キャッシュメモリ41から描画処理部26へデータを転送する動作である。
まず描画処理部26からロード要求信号がキャッシュ管理部45に与えられる。またアドレス発生部40は、図13、図14で説明した方法によりアドレスを生成し、キャッシュデータアドレス信号をキャッシュ管理部45に与え、キャッシュインデックスエントリ信号及びキャッシュエントリ信号をキャッシュアクセス制御部44に与える。するとキャッシュ管理部45はヒット判定を行い、ヒットエントリ番号をキャッシュアクセス制御部44に与え、またロードイネーブル信号をキャッシュアクセス制御部44に与える。
そしてキャッシュアクセス制御部44が、キャッシュイネーブル信号を発生してキャッシュメモリ41をイネーブルにする。更に、キャッシュメモリ41における、キャッシュインデックスエントリ信号及びキャッシュエントリ信号に対応したアドレスにアクセスし、キャッシュメモリ41からデータを読み出す。またキャッシュアクセス制御部44は、ロードイネーブル信号を描画処理部26に返す。キャッシュメモリ41から読み出されたキャッシュリードデータは描画処理部26へ転送される。
以上のようにして、キャッシュメモリ41内のデータ(キャッシュリードデータ)が描画処理部26へロードされる。
次にストア動作について図23を用いて説明する。図23はピクセルシェーダユニットのブロック図である。ストアは、描画処理部26で処理したデータをキャッシュメモリ41に保持させる動作である。
まず描画処理部26からストア要求信号がキャッシュ管理部45に与えられる。またアドレス発生部40はアドレスを生成し、キャッシュインデックスエントリ信号及びキャッシュエントリ信号をキャッシュアクセス制御部44に与える。更に描画処理部26からキャッシュアクセス制御部44へ、ストアイネーブル信号及びストアデータが与えられる。
そしてキャッシュアクセス制御部44が、キャッシュイネーブル信号を発生してキャッシュメモリ41をイネーブルにする。更にキャッシュアクセス制御部44は、キャッシュメモリ41にストアデータをキャッシュライトデータとして与える。またキャッシュアクセス制御部44は、キャッシュインデックスエントリ信号及びキャッシュエントリ信号によって示されるアドレスを、キャッシュアドレスとしてキャッシュメモリ41に与える。これにより、キャッシュメモリ41においてキャッシュアドレスに対応するエントリに、ストアデータが書き込まれる。
以上のようにして、描画処理部26内のデータがキャッシュメモリ41にストアされる。
次にリフィル動作について図24を用いて説明する。図24はピクセルシェーダユニットのブロック図である。リフィルは、描画処理部26からキャッシュメモリ41に対して要求されたデータがキャッシュメモリ41に存在しない場合に、該データをローカルメモリからキャッシュメモリ41に読み出す動作である。
まず、キャッシュ管理部45においてヒット判定がミスした場合、換言すれば、ヒットエントリ番号が全ビットゼロであった場合、すなわち必要なデータがキャッシュメモリ41に無かった場合、キャッシュ管理部45はリフィル要求イネーブル信号、リフィルアドレス、及びリフィル要求IDをリクエスト発行制御部46へ出力する。これらの信号を受けて、リクエスト発行制御部46はリクエスト数をカウントアップする。またリクエスト発行制御部46は、ローカルメモリ13に対してリフィルをリクエストする(リフィル要求信号を出力する)。
リフィル要求を受けたローカルメモリ13は、キャッシュ管理部45、キャッシュアクセス制御部44、及びリクエスト発行制御部46に対して、リフィルアクノリッジ信号を出力する。リフィルアクノリッジ信号を受けたキャッシュアクセス制御部44は、キャッシュ管理部45に対してリフィルアクノリッジIDを出力する。これによりキャッシュ管理部45は、リフィル要求が確かに受け取られたことを認識する。リフィルアクノリッジ信号が出力された後、ローカルメモリ13からキャッシュアクセス制御部44に対してリフィルデータが出力される。するとキャッシュアクセス制御部44はストア動作と同じ要領により、リフィルデータをキャッシュメモリ41にリプレイスする。但し、リフィルに使用されるエントリは、図20で説明したLRFキューによって決定される。
以上のようにして、ローカルメモリ13からデータがキャッシュメモリ41にリフィルされる。
上記のように、ロード/ストア命令が発行されると、キャッシュ管理部45がヒット判定を行ってキャッシュメモリ41のエントリをチェックする。ヒット判定がヒットした場合にはロード/ストア動作を行い、ミスした場合にはリフィルを行う。リフィルを行うエントリはLRFキューによって決定される。ミスした場合であっても、例えばローカルメモリ13のリクエストキューがフル(full)の場合や、キャッシュメモリ41に空きエントリが無い場合にはリフィル要求を発行することが出来ず、「待ち」の状態となる。従って、ロード/ストア命令が発行された場合、データ制御部27には、図25に示すように3つの状態を取り得る。図25はデータ制御部27の状態遷移図である。
図示するように、データ制御部27は、「実行状態(Exec)」、「待ち状態(Wait)」、及び「フィル状態(Fill)」の3つの状態を取る。実行状態は、ヒット判定の結果ロード/ストア命令がヒットした場合であり、ピクセルシェーダユニットが動作している状態である。待ち状態は、ヒット判定の結果ロード/ストア命令がミスした場合であり、リフィル要求を発行しようとしている状態である。そしてこの状態ではピクセルシェーダユニットはストールしている。フィル状態は、ローカルメモリ13に対してリフィル要求が発行されている状態である。この状態でもピクセルシェーダユニットはストールしている。
上記3つの状態が変化するトリガは下記の通りである。各番号は、図25に記した状態遷移の番号に一致する。
1.実行状態から遷移しない:ロード/ストア命令がヒット
2.実行状態から待ち状態へ:ロード/ストア命令がミス
3.待ち状態からフィル状態へ:リフィル要求が発行される
4.フィル状態から実行状態へ:リフィルアクノリッジ信号が返される
5.待ち状態から遷移しない:ロード/ストア命令がミスしたが、リフィル要求を発行できない
6.フィル状態から遷移しない:リフィルアクノリッジ信号が返されない。
次にロード/ストア命令が発行された際の動作の詳細について、図26及び図27を用いて説明する。図26はデータ制御部27の動作のフローチャートであり、図27は各種信号のタイミングチャートである。
まずロードストア命令が描画処理部26から発行される(ステップS10)。すなわち図27の時刻t0においてロード要求信号が発行される。
すると、ロード要求信号に応答してキャッシュ管理部45がヒット判定を行う(ステップS11)。より具体的には、要求されたアドレスと、ステータスフラグ内のタグTとを比較する。
タグとアドレスとが一致すると(ステップS12)、次にキャッシュ管理部45はステータスフラグ内のリフィルフラグRをチェックする(ステップS13)。リフィルフラグRが“0”の場合(ステップS14)、当該エントリについてのリプレイスは完了しているから、そのデータを用いてロード/ストア命令を実行する(ステップS15)。
ステップS12でアドレスとタグTとが不一致だった場合、すなわちロード/ストア命令がミスした場合、リフィル要求発行可能なエントリがあるか否かをチェックする(ステップS16)。リフィル要求発行可能なエントリがある場合、キャッシュ管理部45はリフィル要求(リフィル要求イネーブル信号、時刻t2)を発行する(ステップS18)。またリクエスト発行制御部46もリフィル要求信号をローカルメモリ13に対して出力する。
次のサイクルでキャッシュ管理部45は、対応するエントリのステータスフラグ内のタグTをリフィルデータに関する情報に書き換えると共に、リフィルフラグRを“1”とする(ステップS19、時刻t2)。そして、このロード/ストア命令はストール(stall)する(ステップS20)。ストールは、ローカルメモリ13からリフィルアクノリッジ信号が返ってくるまで続く。ストールした状態で、再度ロード/ストア命令が発行される(ステップS21)。すると、ヒット判定(ステップS11)ではアドレスとタグTとが一致するので(ステップS12)、次にリフィルフラグRをチェックする(ステップS14)。ローカルメモリ13からリフィルアクノリッジ信号が返ってきていればリフィルフラグRは“0”となる。従ってステップS15に進む。しかしローカルメモリ13からリフィルアクノリッジ信号が返ってきていなければリフィルフラグRは“1”のままなので、ステップS20に進んでストールが継続される。
ステップS17でリフィル要求発行可能なエントリが無かった場合、エントリが空くまでストールを続け(ステップS22)、再度ロード/ストア命令を発行する(ステップS23)。ストールを続けていると、やがていずれかのエントリがリフィル要求発行可能となるので、そのエントリに対してリフィル要求が発行される(ステップS18)。
次に、キャッシュ管理部45におけるヒット判定のための構成と、その方法について図28を用いて説明する。図28はキャッシュ管理部45の一部と、キャッシュメモリ41のブロック図である。
図示するように、キャッシュ管理部45はメモリ61の他に、メモリ53−0〜53−(M−1)毎にそれぞれ設けられた選択回路65、比較回路66、及びANDゲート67を備えている。またキャッシュメモリ41は、選択回路68、69、及びメモリ70を備えている。
ヒット判定のためにキャッシュ管理部45には、キャッシュデータアドレス信号が入力される。キャッシュデータアドレス信号は、フレームバッファモードにおいてはブロックID、オフセットデータ、及びピクセルシェーダユニット番号を含む。そして、ブロックID及びピクセルシェーダユニット番号が対象データについてのタグ情報を示し、オフセットデータがインデックス情報を示す。メモリレジスタモードでは、キャッシュデータアドレス信号はスレッドID及びオフセットデータを含む。そして、スレッドIDがタグ情報を示し、オフセットデータがインデックス情報を示す。インデックス情報とは、メモリ51−0、51−1のいずれにアクセスすべきであるかを示す信号である。まず選択回路65は、アドレス信号のインデックス情報に基づいて、キャッシュメモリ41内のメモリ51−0、51−1のいずれかを選択する。次に比較回路66の各々は、選択回路65の各々で選択されたメモリ51−0または51−1におけるメモリ53−0〜53−(M−1)、すなわちエントリ0〜(M−1)に対応するタグTと、キャッシュデータアドレス信号から得られるタグ情報とを比較する。両者が一致した場合、比較回路66は“1”を出力し、不一致の場合には“0”を出力する。更にANDゲート67の各々は、選択回路65の各々で選択されたメモリ51−0または51−1におけるメモリ53−0〜53−(M−1)に対応するバリッドフラグVと、比較回路66の各々の出力とのAND演算を行う。このAND演算結果が信号ヒットエントリ番号となる。ヒットエントリ番号においていずれかのビットが“1”であるということは、そのビットに対応したメモリ53−0〜53−(M−1)のいずれかに該当データが保持されているということを意味する。
選択回路68は、ヒットエントリ番号に基づいていずれかのメモリ0〜(M−1)、すなわちいずれかのエントリ0〜(M−1)を選択する。例えばヒットエントリ番号が(10000…)である場合には、エントリ0に該当データが保持されているということであるから、エントリ0を選択する。なお、前述の通り本実施形態の例であると、キャッシュメモリ41はサブエントリ単位で外部とデータの授受を行う。従って選択回路69は、選択回路68で選択されたエントリに含まれるL個のサブエントリ0〜(L−1)のいずれかを、キャッシュエントリ信号に基づいて選択する。キャッシュエントリ信号は、前述の通りクアッドIDとオフセットデータとを含む。そしてキャッシュエントリ信号は、各エントリ0〜(M−1)においていずれのサブエントリ0〜(L−1)にアクセスすべきかを示すエントリ情報となる。選択回路69によって選択された1サブエントリ分のデータが、キャッシュリードデータとなる。
以上のように、この発明の第1の実施形態に係るグラフィックプロセッサによれば、下記(1)の効果を得ることが出来る。
(1)グラフィックプロセッサ内のハードウェアを削減出来る(その1)。
本実施形態によれば、キャッシュ管理部45はステータスフラグとして、リフィルRとタグTを保持している。そしてキャッシュ管理部45は、ヒット判定において当該ロード/ストア命令がミスした際には、まずリフィル要求を発行すると共にタグTを書き換える。この時点では、まだリプレイスは開始されていない。すなわち、タグTの示す情報と、キャッシュメモリ41の対応するエントリ内のデータとが不一致となる。従ってキャッシュ管理部45は、両者が一致しているか否かをリフィルRフラグによって管理している。その結果、グラフィックプロセッサのハードウェアを削減でき、製造コストを削減出来る。この点につき、以下詳細に説明する。
図29はリフィルフラグRを使用しない場合に考え得るキャッシュ管理部45の構成を示すブロック図である。キャッシュ管理部45は、本実施形態に構成に加えて、更にロード/ストアミスキュー(load/store miss queue)71と、比較器72を備えている。ロード/ストアミスキュー71は、リプレイスが完了していないロード/ストア命令を保持する。
図29においてロード/ストア命令が発行されると、まずヒット判定が行われる。すなわち、比較器66は、入力されたアドレスとタグTとを比較する。両者が一致しなかった場合、更に比較器72が、入力されたアドレスと、ロード/ストアミスキュー71とを比較する。比較器72において、両者が不一致だった場合には、当該ロード/ストア命令はロード/ストアミスキュー71に保持され、リフィル要求が発行される。比較器66、72の両方で比較結果がミスであった時にリフィル要求が発行される。リフィル要求が発行されてリプレイスが完了すると、この時点でタグTが書き換えられる。すなわち、タグTの示す情報と、キャッシュメモリ41内のデータとは常時一致している。
これに対して、本実施形態に係るキャッシュ管理部45の構成を簡略化して示したのが図30である。本実施形態では、比較器66においてアドレスとタグTとが一致しなかった場合、リフィル要求を発行し、この時点でタグTを書き換え、更にリフィルRフラグを“1”にする。その後、いずれかのタイミングでリプレイスを行う。リプレイスが完了すると、リフィルフラグRは“0”に戻る。比較器66においてアドレスとタグTとが一致した場合には、当該エントリがリプレイス中であるか否かをリフィルフラグRによってチェックする。そしてリプレイスが完了していない場合には当該ロード/ストア命令はストールされ、完了している場合にはロード/ストア命令を実行する。
このように、リフィル要求の発行と共にタグTを書き換えてしまうため、図29におけるロード/ストアミスキュー71が不要となる。更にリプレイスが完了したか否かをリフィルフラグによって管理している。そのため図29における比較器72も不要である。その結果、図29に示す構成に比べてハードウェアを削減でき、製造コストを削減出来る。
なお本実施形態では、図27に示すように、ロード/ストア命令は2周期に1度しか発行されない。そのため、リフィル要求と共にタグTの書き換えが可能となる。なぜなら、図27に示すように最初のサイクルでタグの読み出しとヒット判定を行い、次のサイクルでタグの書き換えを行う必要があるからである。
また、前述のようにアドレス信号の計算方法は上記実施形態で説明した方法に限定されることはなく、ブロック内に含まれるスタンプの数や、ピクセルシェーダユニット24の数などによって変化出来る。またアドレス信号の内部構成も図13、図14に示したものに限られない。図28に示すように、アドレス信号はタグ情報、インデックス情報、及びエントリ情報を含んでいれば足りる。更に、キャッシュメモリ41がメモリ51−0、51−1のいずれか一方しか含まない場合にはインデックス情報は不要であるし、キャッシュメモリ41のエントリサイズでデータ転送可能であればエントリ情報も不要であり、このような場合にはアドレス発生部40はタグ情報のみを生成すれば良い。そしてアドレス発生部40には、上記のようなアドレス信号を生成するための情報が与えられる必要がある。それらの情報として、本実施形態では図12に示すようにオフセットデータ、XY座標、スレッドID、クアッドID、サブパスID、及びバッファモード信号が与えられる場合について説明した。しかし、これらは一例に過ぎず、タグ情報と、その他の必要なアドレスとを生成するのに使用できる信号であれば限定されない。また本実施形態では、タグTが、スレッドIDやピクセルシェーダユニット番号の一部に対応する情報である場合を例に挙げて説明した。しかし、タグTとして用いる情報は、データを識別出来るものであれば良く、スレッドID及びピクセルシェーダユニット番号以外の情報であっても良い。
次に、この発明の第2の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、上記第1の実施形態で説明したグラフィックプロセッサにおけるライトバック動作に関するものである。
本実施形態に係るキャッシュ管理部45は、上記第1の実施形態で説明した制御に加えて、更にライトバック動作を制御する。ライトバックとは、図21で説明したように、キャッシュメモリ41内のデータをローカルメモリに書き込むことである。描画処理部26からストア命令が発行された際、データはキャッシュメモリ41にのみ書き込まれる。すなわち、キャッシュメモリ41内のデータのみがアップデートされる。従って、キャッシュメモリ41内のデータとローカルメモリ内のデータとが一致しないことになる。このような状態でキャッシュメモリ41内のデータが失われることを避けるためにライトバックが行われる。なお、キャッシュメモリ41内にのみアップデートされたデータが保持されている状態を、以下ではダーティー(dirty)と呼ぶことにする。
図31はキャッシュ管理部45の備えるメモリ61の概念図であり、ステータスフラグとしてタグT、バリッドフラグV、リフィルフラグRの他に、ダーティーフラグD及びライトバックフラグWを保持する。ダーティーフラグDは、対応するエントリがダーティーであるか否か、すなわち、エントリに対して描画処理部26からデータの書き込みがあったことを示す。そしてライトバックデータの読み出しを開始するまでアサートされる。ライトバックフラグWは、対応するエントリがライトバック要求を発行中であるか否かを示す。そしてライトバック要求が発行されてからライトバックデータの読み出しが開始されるまでアサートされる。
図32はキャッシュ管理部45において、ライトバック要求を発行するための構成のブロック図である。図示するようにキャッシュ管理部45は、カウンタ73と選択回路74を備えている。選択回路74は、カウンタ73におけるカウント数に応じたエントリのダーティーフラグDを選択する。
次にライトバック動作について図33を用いて説明する。図33はピクセルシェーダユニットのブロック図である。
まずキャッシュ管理部45からライトバック要求信号がローカルメモリ13へ出力される。ライトバック要求がローカルメモリ13にエンターされると、ローカルメモリ13からライトバックアクノリッジ信号がキャッシュ管理部45及びキャッシュアクセス制御部44へ出力され、またライトバックIDがキャッシュアクセス制御部44へ出力される。
するとキャッシュアクセス制御部44はライトバックIDに基づいて、キャッシュメモリ41からデータ(キャッシュリードデータ)を読み出す。データをキャッシュメモリ41から読み出したキャッシュアクセス制御部44は、ライトバックアクノリッジIDをキャッシュ管理部45へ返すと共に、読み出しデータをライトバックデータとしてローカルメモリ13に書き込む。その後、キャッシュ管理部45はライトバックアクノリッジIDに応答して、対応するエントリのダーティーフラグD及びライトバックフラグWをデアサート(“0”に)する。
次にキャッシュ管理部45における、ライトバックを行うエントリの選択方法について図34のフローチャートを用いて説明する。まずキャッシュ管理部45は現在のカウンタ73のカウンタ値に対応するエントリのダーティーフラグDをチェックする(ステップS30)。ダーティーフラグD=“1”であれば(ステップS31)、対応するエントリにつきライトバック要求を発行する(ステップS32)。ダーティーフラグD=“0”であれば発行しない。そしてカウンタ値が最終エントリに対応する値を示していた場合(ステップS33)、カウンタ値をリセットして(ステップS30)、ステップS30に戻る。カウンタ値が最終エントリに対応する値を示していない場合(ステップS33)には、カウンタ73はカウントアップしてステップS30に戻る。
すなわち、キャッシュメモリ41内の全エントリ0〜2(M−1)について、ダーティーフラグDを順番にチェックし、そのダーティーフラグDがアサートされていた場合にライトバック要求を発行する。
その他の構成及び動作は第1の実施形態と同様である。
以上のように、この発明の第2の実施形態に係るグラフィックプロセッサによれば、第1の実施形態で説明した(1)の効果に加えて、下記(2)、(3)の効果を得ることが出来る。
(2)グラフィックプロセッサ内のハードウェアを削減出来る(その2)。
従来のライトバック手法は、ライトバックデータを一時的にバッファメモリに保持させ、その後、適当なタイミングでバッファメモリに保持させたライトバックデータをローカルメモリに書き込むことが通常であった。これは、ライトバック中にリフィル要求の発行が必要となった場合に、ライトバックが終了するまでリフィルが出来なくなるという状況が発生することを回避するために行われた手法である。この手法によれば、データをバッファに待避させておくことで、ライトバック中であってもそのエントリはリフィル要求を発行出来る。またライトバックは、キャッシュ管理部45外部からの何らかのトリガに応答してなされるか、またはキャッシュメモリにデータをストアすると同時に行われていた。
これに対して本実施形態では、キャッシュ管理部45はステータスフラグとしてダーティーフラグDを保持し、いずれのキャッシュエントリがダーティーであるかを管理している。そして常にダーティーフラグDを監視し、いずれかのエントリがダーティーであり、且つライトバック要求発行可能でない限りは、そのタイミングでライトバックを行っている。従って、ダーティーなエントリの存在確率が従来に比べて圧倒的に低い。そのため、いずれかのエントリがライトバック中であっても、リフィル要求を発行可能なエントリが他に存在しやすい。よって、従来のようにデータをバッファに待避させる必要がなく、バッファが不要となる。従って、ハードウェアを削減でき、製造コストを低減できる。
(3)キャッシュメモリを効率的に利用出来る(その1)。
上記(2)で説明したように、特に外部からの要求が無くてもライトバック要求が発行可能であれば、その時点でライトバックを行っている。従って、キャッシュメモリ41のエントリを有効に活用出来る。
更に、ローカルメモリ13にeDRAM(embedded DRAM)を用い、且つそのレイテンシが長い場合には、本実施形態のように可能な時にライトバックを行うことで、ダーティーなエントリの存在を効果的に低減でき、グラフィックプロセッサの性能を向上出来る。
なお、キャッシュメモリ41のエントリサイズが大きい場合には、特に本実施形態の効果が顕著となる。なぜなら、エントリサイズが大きいほど、従来手法で必要なバッファサイズも大きくなるためであり、面積削減の効果が顕著となる。
また図35に示すように、キャッシュ管理部45はバス制御回路75からバスの状況をデータとして受け取っても良い。バス制御回路75は、各回路ブロック間のバスによる接続を制御する。ライトバックを行うためには、データ制御部27とローカルメモリとの間のバスが使用されていない必要がある。そこで、キャッシュ管理部45はバス制御回路75から現在のバスの使用状況を受け取り、バスが使用されていないことを認識した際に、ライトバック要求を発行する。これによりバスの使用効率を向上出来る。
次に、この発明の第3の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、上記第1、第2の実施形態で説明したグラフィックプロセッサにおけるプリロード動作に関するものである。
プリロード動作については、図10に示したプリロード制御部43が制御を行う。プリロード制御部43は、プリロードアドレス発生部47、プリロード保持部48、サブパス情報管理部49、及びアドレス保持部50を備えている。プリロード保持部48は、プリロード要求のあったスレッドの管理を行う。プリロード保持部48は、命令制御部25からスレッド単位でプリロード要求を受ける。このときプリロード保持部48は、スレッドのXY座標、スレッドID、及び実行するサブパス番号を同時に受け取って保持する。プリロード保持部48は内部に複数のエントリを有するメモリを備えており、プリロード要求をメモリのエントリに積んでいく。プリロード要求は、番号の若いエントリから優先的に発行される。そして、プリロード要求を発行するエントリを決定したら、サブパス情報管理部49に対して、プリロードスタート信号及びプリロードサブパス番号を出力する。プリロードスタート信号は新たなスレッドに関するプリロードの開始を示し、プリロードサブパス番号はプリロードされるサブパス番号である。
次にサブパス情報管理部49について説明する。サブパス情報管理部49では、サブパスで使用されたバッファの情報を保持する制御と共に、プリロードのためのパラメータ出力の制御を行う。まずバッファの情報管理のために、サブパス情報管理部49は、図36に示すようなインストラクションテーブルを有している。インストラクションテーブルのエントリの各々は各サブパスに対応している。そしてサブパス情報管理部49は、ロード/ストア命令が発行される度に、当該命令に対応したモード情報をインストラクションテーブルに書き込む。これらの情報は、命令制御部25から、バッファバンクセレクト信号及びバッファモード信号として与えられる。これらの信号は、例えばローカルメモリがフレームバッファとして使用されているかメモリレジスタとして使用されているか、またデータ格納領域のベースアドレス(先頭アドレス)等の情報を含む。
またサブパス情報管理部49は、プリロード命令が発行されると、プリロードスタート信号及びプリロードサブパス番号で指定されるサブパスに関する情報を、インストラクションテーブルから読み出す。そしてインストラクションテーブルから読み出したデータを、プリロードバンク信号としてプリロードアドレス発生部47へ出力する。またプリロードイネーブル信号をアサートする。
次にプリロードアドレス発生部47について説明する。プリロードアドレス発生部47は、プリロードに必要なアドレス信号を生成する。アドレスの生成方法は、第1の実施形態で説明したアドレス発生部40と同様である(図13、図14参照)。上記のアドレス計算を行うための信号(プリロード用のXY座標、プリロード用のスレッドID、プリロードバンク信号)は、プリロード保持部48及びサブパス情報管理部49から常時与えられている。その状態で、プリロードイネーブル信号がアサートされると、それに応答してプリロードアドレス発生部47がアドレスの計算を開始する。得られたプリロードアドレスと、プリロードイネーブル信号はアドレス保持部50に出力される。
次にアドレス保持部50について説明する。アドレス保持部50は、プリロード命令の発行がストールした場合に、当該命令に係るアドレスを保持しておくためのキューである。ローカルメモリ13のリクエストキューに空きが無い場合、キャッシュメモリ41にプリロード要求の発行可能なエントリが無い場合、及びリクエスト発行制御部46に発行待ちのリフィル要求がある場合には、プリロード命令はストールし、プリロードイネーブル信号デアサートする。これらの情報は、リクエスト発行制御部46からリフィルレディ信号及び要求状況信号として与えられる。
またアドレス保持部50は、プリロード命令に関するヒット判定に必要なデータをキャッシュ管理部45に出力する。
次に、本実施形態に係るグラフィックプロセッサのプリロード動作について図37及び図38を用いて説明する。図37はプリロード動作のフローチャートであり、図38は図37における各ステップと対応づけたデータ制御部27のブロック図である。まず命令制御部25からプリロード保持部48に対してプリロード要求が発行される(ステップS40)。この際、プリロード保持部48は、命令制御部25からプリロード要求信号の他にスレッド情報(XY座標、スレッドID、サブパスID)を受け取る(ステップS41)。
そしてプリロード保持部48は、プリロードスタート信号とプリロードサブパス番号とをサブパス情報管理部49に出力する。サブパス情報管理部49は、受け取ったプリロードスタート信号とプリロードサブパス番号とに基づいて、インストラクションテーブルからロード/ストア命令に関する情報を読み出す(ステップS42)。読み出された情報(プリロードバンク信号)は、プリロードアドレス発生部47へ出力される。このロード/ストア命令に関する情報は、命令制御部25においてロード/ストア命令が発行された際に、サブパス情報管理部49のインストラクションテーブルに格納されたものである。更にサブパス情報管理部49は、プリロードイネーブル信号をアサートする。またプリロード保持部48は、スレッド情報(XY座標、スレッドID)をプリロードアドレス発生部47へ出力する。
次にプリロードアドレス発生部47は、サブパス情報管理部49から与えられたロード/ストア命令に関する情報と、プリロード保持部48から与えられたスレッド情報とを用いてプリロードアドレスを計算する(ステップS43)。そしてプリロードアドレス発生部47は、計算により得られたプリロードアドレスをアドレス保持部50へ出力する。またプリロードアドレス発生部47は、プリロードイネーブル信号をアサートしてアドレス保持部へ出力する。
更にこれらの情報はアドレス保持部50からキャッシュ管理部45へ出力される。そしてキャッシュ管理部45においてヒット判定が行われる(ステップS44)。ステップS44におけるヒット判定は、プリロードされるデータがキャッシュメモリ41内にすでに存在するか否かを判定する処理である。そして、第1の実施形態においてリフィル動作で説明したように、プリロードのヒット判定結果がミスだった場合に、キャッシュ管理部45はプリロード要求信号を発行する。またキャッシュ管理部45はリフィルID及びリフィルアドレスを発行し、プリロード要求信号と共にリクエスト発行制御部46へ出力する(ステップS45)。そしてキャッシュ管理部45はヒット判定を終了すると、ミス/ヒットにかかわらずプリロードヒット判定信号をアサートして、アドレス保持部50におけるプリロード情報をデアサートする。プリロードヒット判定信号は、キャッシュ管理部45におけるヒット判定が終了したか否かを示す信号である。
そして、リクエスト発行制御部46が、ローカルメモリ25に対して正式にプリロード要求を発行する(リフィル要求信号を出力する、ステップS46)。その後は、リフィルと同様の要領によって、ローカルメモリ内のデータをキャッシュメモリ41へプリロードする。
上記のように、この発明の第3の実施形態に係るグラフィックプロセッサによれば、第1、第2の実施形態で説明した(1)乃至(3)の効果に加えて、下記(4)の効果が得られる。
(4)キャッシュメモリを効率的に利用出来る(その2)。
本実施形態に係るグラフィックプロセッサでは、スレッド情報と、ロード/ストア命令に関する情報とを用いてプリロードアドレスを計算している。スレッド情報としては、X座標、Y座標、及びスレッドIDをプリロード保持部48から受け取る。またロード/ストア命令に関する情報として、コンフィギュレーションレジスタで参照すべきデータ、オフセット、及びベースアドレスをサブパス情報管理部49から受け取る。これらの情報を用いることによって、従来に比べてより正確にプリロードアドレスを算出出来る。より具体的には、ロード/ストア命令に関する情報から、WIDTHの値が分かる。WIDTHの値によって、同一XY座標であってもブロックIDは変化する。更にアドレス信号の先頭アドレスが分かる。またオフセットの値及びメモリの使用モード(フレームバッファモードかメモリレジスタモードか)が分かる。従って、第1の実施形態で説明したアドレス計算式に必要な全ての情報をプリロードアドレス発生部47は得られる。
プリロードとは、描画処理部27で必要になるであろうデータを、予めローカルメモリからキャッシュメモリ41に読み出しておく処理である。従って、プリロードはしたものの、実際にはそのデータは使われないこともありうる。
しかし本実施形態では、ロード/ストア命令が発行された際に与えられた情報を用いてプリロードアドレスを計算、すなわちいずれのデータをプリロードするかを決定している。そのため、プリロードしたデータが使用される確率が高くなる。換言すれば、第1の実施形態で説明したヒット判定時に、プリロードデータがヒットする確率が向上する。これは、命令列は複数のスレッドの処理に用いられるので、実行する命令(サブパス)が分かれば、任意のスレッドが使用するデータが保持されているアドレスを求めることが可能となるからである。そこで、一度実行されたサブパスと同じサブパスを実行する異なるスレッドが起動された際に、以前トレースされた情報を元にプリフェッチを行う。よって、図39に示すように、本実施形態に係る方法によってプリロードアドレスを計算するためには、いずれかのスレッドでロード/ストア命令が発行される必要がある。図39では、スレッド0に関するサブパス0についてプリロードすることが出来ない。スレッド0に関するサブパス0でロード/ストア命令が発行されると、その時点でインストラクションテーブルが更新されるので、次のスレッド1についてプリロードが可能となる。
従って、無駄なプリロード動作を削減し、同時にキャッシュメモリ41のエントリが無駄に占有されることを抑制出来る。よって、キャッシュメモリ41を効率的に使用でき、グラフィックプロセッサの性能を向上出来る。
次に、この発明の第4の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、上記第1乃至第3の実施形態で説明したグラフィックプロセッサにおいて、キャッシュ管理部45が更にエントリのリクエスト発行を制限するものである。
図40はメモリ61の概念図であり、キャッシュ管理部45の備えるステータスフラグの様子を示している。図示するように、本実施形態に係るキャッシュ管理部45は、タグT、バリッドフラグV、リフィルフラグR、ライトバックフラグWの他に、ロックフラグ(lock flag)Lをステータスフラグとして保持する。ロックフラグLは2ビットのデータであり、L=“00”は対応するキャッシュメモリ41のエントリがフリーの状態を示す。この状態では、エントリはプリロード要求及びリフィル要求のいずれでも発行可能である。L=“01”は、エントリがプリロード要求を発行している状態を示す。この状態では、エントリはリフィル要求を発行することは可能であるが、プリロード要求は発行できない。L=“10”は、実行スレッドがエントリを使用している状態を示す。この状態では、エントリはリフィル要求もプリロード要求も発行することができない。
従って、キャッシュ管理部45はリフィル要求及びプリロード要求がなされた際に、図41に示すようにステータスフラグのロックフラグLをチェックする(ステップS50)。そしてL=“00”の場合(ステップS51)にはいずれかの要求を発行する(ステップS52)。L=“01”の場合(ステップS53)には、リフィル要求は発行できるが、プリロード要求はストールする(ステップS54)。L=“10”の場合(ステップS55)にはいずれの要求もストールする(ステップS56)。
以上のように、ロックフラグL、リフィルフラグR、及びライトバックフラグWBによってキャッシュエントリは次の8つの状態を取りうる。
1.初期状態(Init:L=“00”、R=“0”、WB=“0”)
エントリがフリーの状態であり、プリロード要求もリフィル要求も受け付けることが可能な状態である。
2.レディ状態(Rdy:L=“01”、R=“0”、WB=“0”)
プリロードが完了し、そのエントリを使用するスレッドが実行されるのを待っている状態である。
3.実行状態(Exec:L=“10”、R=“0”、WB=“0”)
実行中のスレッドが該エントリを使用している状態である。
4.非使用状態(NoWake:L=“00”、R=“1”、WB=“0”)
プリロード中に対応するスレッドが実行されたが、該エントリに対するアクセスが無くサブパスが終了した際に生じる状態である。
5.プリロード状態(PreLd:L=“01”、R=“1”、WB=“0”)
プリロード要求を発行している状態である。
6.フィル状態(Fill:L=“10”、R=“1”、WB=“0”)
キャッシュミスによるリフィル要求が発行されている状態、もしくはプリロード要求発行中にそのエントリを使用するスレッドが実行された状態。
7.ライトバック状態(WrB:L=“00”or“01”、R=“0”、WB=“1”) ライトバック要求を発行している状態である。
8.使用状態(WrBExec:L=“10”、R=“0”、WB=“1”)
ライトバック状態においてアクセスが生じたり、使用スレッドが実行されると使用状態に遷移する。使用状態は、ライトバック要求の発行中に実行スレッドが切り替わり、当該エントリが実行スレッドにより使用される状態である。
次に図42を用いて各状態間の遷移条件について説明する。図42において縦が遷移前の状態であり、横が遷移後の状態である。そして表中の数字は下記に記す状態変更イベントを示す。
1.プリロードがエントリにヒットした時
2.ロード/ストア命令がヒットした時
3.プリロードがミスヒットし、プリロード要求が発行された時
4.ロード/ストア命令がミスヒットし、リフィル要求が発行された時
5、10.ライトバックの実行を開始した時
6.ライトバックの実行開始と共にサブパスの実行が開始された時
7.実行スレッドのプリロードが行われたが、ロード/ストアアクセスされることなくサブパスが終了した時
8.プリロードされていたエントリを使用するスレッドが実行開始、またはロード/ストア命令がヒットした時
9.プリロードされていたエントリに対して、ロード/ストア命令ミスヒットによるリフィルを行った時
11.ライトバックの実行開始と共にサブパスの実行が開始、もしくはロード/ストア命令がヒットした時
12.エンド命令またはイールド命令が実行され、他のスレッドのプリロード要求が無い時
13.エンド命令またはイールド命令が実行され、他のスレッドのプリロード要求がある時
14.サブパススタートの次のタイミングでエンド命令またはイールド命令とライトバックとが実行される時に生じる
15.サブパスがスタートした直後にライトバックが開始された時
16、22.プリロードが完了した時
17.プリロードの完了と他のプリロードのヒットとが同時に生じた時
18.プリロードの完了と、ロード/ストア命令のヒットとが同時に生じた時
19.プリロード命令がヒットした時(但しプリロード要求発行中)
20.ロード/ストア命令がヒットした時(但しプリロード要求発行中)
21.実行スレッドのプリロードが行われたが、ロード/ストアアクセスされることなくサブパスが終了し、同時にプリロードも終了した時
23.プリロードの完了と共に、同時にサブパススタートが同時に生じた時
24.実行スレッドのプリロードが行われたが、ロード/ストアアクセスされることなくサブパスが終了し、同時にプリロード要求が未だに発行中である時
25.プリロード中のエントリを使用するスレッドの実行が開始された時、またはロード/ストア命令がヒットした時
26.プリロード状態からフィル状態へと状態遷移したが、ロード/ストアアクセスがなされることなくサブパスが終了すると同時にプリロードを完了した場合であり、他のスレッドのプリロード要求が無い時
27.プリロード状態からフィル状態へと状態遷移したが、ロード/ストアアクセスがなされることなくサブパスが終了すると同時にプリロードを完了した場合であり、他のスレッドのプリロード要求がある時
28.リフィルが完了した時
29.プリロード状態からフィル状態へと状態遷移したが、ロード/ストアアクセスの無いままサブパスが終了する時で、且つプリロードがまだ完了しておらず他のスレッドのプリロード要求が無い時
30.プリロードからフィルに状態遷移したが、ロード/ストアアクセスの無いままサブパスが終了する時で、且つプリロードがまだ完了しておらず他のスレッドおプリロード要求がある時
31.L=“00”でライトバックが完了した時
32.L=“01”でライトバックが完了した時
33.ライトバック終了と同時にロード/ストア命令がヒットした時
34.ライトバック中のエントリを使用するスレッドが実行された時
35.ライトバックの完了とエンド命令またはイールド命令とが同時に生じた時であり、他のスレッドのプリロード要求が無い時
36.ライトバックの完了とエンド命令またはイールド命令とが同時に生じた時であり、他のスレッドのプリロード要求がある時
37.L=“10”でライトバックが完了した時
38.エンド命令またはイールド命令によってサブパスが終了した時
以上の条件によって、キャッシュエントリは状態遷移する。
上記のように、この発明の第4の実施形態に係るグラフィックプロセッサによれば、上記第1乃至第3の実施形態で説明した(1)乃至(4)の効果に加えて、下記(5)の効果が得られる。
(5)キャッシュメモリを効率的に利用出来る(その3)。
本実施形態に係るグラフィックプロセッサでは、ステータスフラグに複数のレベルを有するロックフラグLを設けている。そして、ロックフラグLによってキャッシュメモリ41のエントリの要求発行を制限している。より具体的には、ロックフラグLは3つのレベル(“00”、“01”、“10”)を含む。そしてL=“00”はエントリがロックされていない状態であり、キャッシュメモリ41のエントリは自由にプリロード要求やリフィル要求を発行出来る。L=“01”は弱いロック状態であり、キャッシュメモリ41のエントリはプリロード要求の発行を禁止される。L=“10”は強いロック状態であり、キャッシュメモリ41のエントリはプリロード要求だけでなくリフィル要求の発行も禁止される。
プリロードされたデータは、前述の通り実際の処理に先立ってキャッシュメモリ41に読み出されたデータである。これに対してリフィルされたデータは、ロード/ストア命令によって必要とされたデータである。従って、リフィルによってキャッシュメモリ41にリプレイスされたデータの方が、プリロードによって読み出されたデータよりも重要性が高く、保護すべき必要性も高い。
そこで本実施形態ではステータスレジスタにロックフラグLを設け、リフィルが行われたエントリを強いロック状態として、プリロードや更なるリフィルによってデータが書き換えられることを防止している。そのため、必要なデータがキャッシュメモリ41から消失されることを防止出来、キャッシュメモリ41を効率的に使用出来る。
またプリロードによって読み出されたデータに関しても、それ対応したサブパスが終了する等しない限りは、エントリを弱いロック状態とすることで、プリロードデータが書き換えられないようにしている。従って、プリロードデータを効率的に使用出来る。以上の結果、キャッシュメモリ41を効率良く使用でき、グラフィックプロセッサの性能を向上出来る。
次に、この発明の第5の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、上記第1乃至第4の実施形態で説明したグラフィックプロセッサにおいて、キャッシュ管理部45が更にエントリ内のデータ情報を保持するものである。
図43はメモリ61の概念図であり、キャッシュ管理部45の備えるステータスフラグの様子を示している。図示するように、本実施形態に係るキャッシュ管理部45は、タグフラグT、バリッドフラグV、リフィルフラグR、ライトバックフラグW、ロックフラグLの他に、スレッドエントリフラグ(thread entry flag)TEをステータスフラグとして保持する。スレッドエントリフラグTEは、キャッシュメモリの対応するエントリが、どのスレッドに関するデータを保持するのかを示すフラグである。スレッドエントリフラグTEのビット数は、同時発行可能なスレッド数に等しい。
スレッドエントリフラグTEとキャッシュメモリ41との関係について、図44を用いて説明する。図44はスレッドエントリフラグTEとキャッシュメモリの概念図である。
図示するようにスレッドエントリフラグTEは例えばNビットである。従って、最大でN個のスレッドが同時に生成される。そして上位ビットから各々、スレッド0〜スレッド(N−1)に対応する。例えばキャッシュメモリ41のエントリ(M−1)にはスレッド1、2、4、6のデータが保持されている。従って、キャッシュメモリ41のエントリ1に対応するスレッドエントリフラグTEのビット1、2、4、6が“1”である。またキャッシュメモリ41のエントリ4にはデータが保持されていない。従って、キャッシュメモリ41のエントリ4に対応するスレッドエントリフラグTEは、全ビットが“0”である。
次に、スレッドエントリフラグTEの書き込みタイミングとその際のエントリの状態について図45を用いて説明する。まずスレッドエントリフラグTEは、対応したエントリに関するプリロード命令、リフィル命令、またはロード/ストア命令が発行された際(ステップS50)に、該命令が実行されるスレッドに対応したビットが“1”とされる(ステップS51)。スレッドエントリフラグTEが“1”とされると、対応するエントリはデータのリプレイスもフラッシュ(flush:消去)も禁止される(ステップS52)。スレッドエントリフラグTEは、対応するスレッドがエンド命令またはイールド命令を実行した際に(ステップS53)、“0”にされる(ステップS54)。そして、スレッドエントリフラグTEの全ビットが“0”である場合(ステップS55)には、対応するエントリについてリプレイスとフラッシュが許可される。他方、スレッドエントリフラグTEが1ビットでも“1”であれば(ステップS55)、リプレイスとフラッシュは禁止される。
上記のように、この発明の第5の実施形態に係るグラフィックプロセッサによれば、上記第1乃至第4の実施形態で説明した(1)乃至(5)の効果に加えて、下記(6)の効果が得られる。
(6)キャッシュメモリを効率的に利用出来る(その4)。
本実施形態に係るグラフィックプロセッサであると、スレッドエントリフラグTEによってエントリのプリロード要求やリフィル要求を制限している。そのため、キャッシュエントリを効率的に使用出来、グラフィックプロセッサの性能を向上出来る。以下、本効果について詳細に説明する。
キャッシュメモリ41とローカルメモリ13とは、勿論バスのサイズにもよるが、基本的にはキャッシュメモリ41のエントリサイズ単位でデータの授受を行う。データの消去も同じである。従って、キャッシュメモリ41にSRAMを用いること等によってキャッシュメモリ41のエントリサイズが大きい場合、キャッシュメモリ41の1つのエントリには複数のスレッドに関するデータが読み出される。
すると、あるエントリ内のスレッドについてサブパスが実行完了したとしても、同じエントリにある他のスレッドはその後に使用される可能性がある。すなわち、サブパスが完了することで、あるスレッドに関するデータは不要になったとしても、同一エントリにある別のスレッドに関するデータは、後に必要になるかもしれない。従って、あるスレッドが終了したからといってその他のスレッドに関するデータまで消してしまうのは非効率的である。
そこで本実施形態ではスレッドエントリフラグTEを用いることによって、サブパスが実行完了していないスレッドが保持されるエントリについては、データのリプレイス及びライトバック(またはフラッシュ)を禁じている。これにより、データがむやみに消去されることを防止できるので、キャッシュメモリ41のエントリを効率的に使用でき、グラフィックプロセッサの性能を向上出来る。
なお、スレッドエントリフラグTEがアサートされるタイミングは、エントリに実際にデータがリプレイスされた後でなくても良く、リプレイス前であっても良い。すなわち、ロード/ストア命令がミスしてリフィル要求が発行された後で且つリプレイス前の段階や、プリロード要求が発行された後で且つデータ転送前であっても良い。この場合は、他のスレッドによってエントリが書き潰されないように、使用するエントリをスレッドエントリフラグTEにより予約することになる。
次に、この発明の第6の実施形態に係るグラフィックプロセッサについて説明する。本実施形態は、ステージがストールした場合のデータの管理手法に係るものである。図46は、本実施形態に係るデータ管理手法の概念を示すための回路図である。
図示するように、ある命令がステージA〜Fにおいて順番に実行され、且つステージA〜Fはパイプライン動作を行うとする。各ステージはF/Fを備えており、各ステージに達した命令はF/Fで保持される。更に、ステージDにはバッファメモリD1、D2が設けられている。ストール発生時、バッファメモリD1、D2はステージCのデータを保持し、ステージDはステージEのデータを保持する。そしてストール解消してリスタートする際には、バッファメモリD1、D2のデータがステージDに出力される。
次に上記ステージの動作について説明する。まずストールが発生していない通常時の動作について図47を用いて説明する。図47は各ステージで実行される命令の時間変化を示す表である。実行される命令は命令0〜命令7まであるものと仮定する。
図示するように、時刻t0において命令0〜5がそれぞれステージF〜Aで実行されているとする。すると、次のサイクル(時刻t1)では、各命令1〜5は次のステージF〜Bで実行される。また新たな命令6がステージAに投入されて実行される。命令0は、時刻t0において最後のステージFで実行が完了したため、処理を終了する。このようにして、各命令0〜7はステージA〜Fの順にパイプライン処理される。
次にストールが発生した場合について図48を用いて説明する。図48も各ステージで実行される命令の時間変化を示す表であり、ここでは一例として命令3がステージEにおいてストールした場合について説明する。
図示するように、時刻t0において命令0〜5がそれぞれステージF〜Aで実行され、時刻t1において命令1〜6がそれぞれステージF〜Aで実行され、時刻t2において命令2〜7がそれぞれステージF〜Aで実行されたとする。そして時刻t3で命令3がステージEでストールしたとする。すると、時刻t3では、本来は命令3〜7がステージF〜Bで実行されるはずである。しかしストールが発生したので、時刻t2でステージCに保持されていた命令5はバッファメモリD1に送られ、時刻t2でステージEに保持されていた命令3はステージDにフィードバックされる。
次のサイクル(時刻t4)でも依然としてストールしていると、時刻t3でバッファメモリD1に保持されていた命令5はバッファメモリD2に送られ、時刻t3でステージCに保持されていた命令6はバッファメモリD1に送られ、時刻t3でステージEに保持されていた命令4はステージDにフィードバックされる。以降、ストールが継続する時刻t6までの期間、命令5はバッファメモリD2に保持され続け、命令6はバッファメモリD1に保持され続ける。そして命令3及び命令4は、ステージDとステージEとの間をループする。
そして時刻t7でストールが解消すると、時刻t6でそれぞれステージE、D、バッファメモリD2、ステージCに保持されていた命令3〜5、7は、それぞれステージF、E、D、Cで実行される。時刻t6でバッファメモリD1に保持されていた命令6は、時刻t7でバッファメモリD2に送られ、更に時刻t8において、ステージDで実行される。
上記のデータ管理手法を、第1乃至第5の実施形態で説明したグラフィックプロセッサに適用した場合について図49を用いて説明する。図49はキャッシュ管理部45の一部領域の回路図である。図22を用いて説明したように、ロード命令が発行された際、キャッシュ管理部45にはアドレス発生部40からキャッシュデータアドレス信号が与えられる。また図38を用いて説明したように、プリロード時にはプリロードプリロードアドレスが与えられる。
キャッシュ管理部45は図11で説明したように第2ステージにおいて動作する。そして第2ステージの内部において、少なくとも4つの動作ステージ(2−1)〜(2−4)を含む。すなわちアドレス管理部45は、ステージ(2−1)においてロード/ストア及びプリロードのヒット判定を行う。ステージ(2−2)では、リフィル及びプリロードのエントリを、LRFキューを用いて選択する。ステージ(2−3)では、キャッシュミスや、ヒットしたエントリがリフィル中である等の場合にストール信号をアサートする。そしてステージ(2−4)でキャッシュ制御部へ信号を転送する。
図49においてステージ(2−2)からステージ(2−1)へのループパスは、ステージ(2−2)またはステージ(2−1)でストールが発生した際に用いられる。この状態においては、描画処理部26によってストール信号がアサートされる。
ステージ(2−4)からステージ(2−3)へのループパスは、ステージ(2−4)またはステージ(2−3)でストールが発生していた状態において、ステージ(2−2)またはステージ(2−1)でストールが発生した際に用いられる。従ってこの場合、ステージ(2−2)からステージ(2−1)との間のループパスと、ステージ(2−4)からステージ(2−3)ステージへのループパスとが有効となる。
ステージ(2−4)からステージ(2−1)へのループパスは、ステージ(2−4)またはステージ(2−3)でストールが発生した場合に用いられる。この場合にはストール信号がアサートされているので、この信号によってステージ(2−4)からステージ(2−1)へのループパスが有効とされる。また、ステージ(2−2)とステージ(2−1)との間のループパスと、ステージ(2−4)からステージ(2−3)へのループパスが有効になっていれば、ストール信号がデアサートされたタイミングにおいても、このループパスが有効とされる。
バッファメモリ80は、例えば5つのエントリを有している。そして、ストール信号がアサートされて以降に入力されるアドレスを保持する。これは、ストール信号が第3ステージ(図11参照)まで伝搬された後に、アドレス発生部40がアドレスの投入を停止するからである。従って、ストールが発生している期間に入力されるアドレスを有効に保持するために、バッファメモリ80が使用される。
以上のように、この発明の第6の実施形態に係るグラフィックプロセッサであると、上記第1乃至第5の実施形態で説明した(1)乃至(6)の効果に加えて、下記(7)の効果が得られる。
(7)ストール後におけるグラフィックプロセッサの処理効率を向上出来る。
本実施形態に係るグラフィックプロセッサは、実行すべき命令がストールした際に、命令を緊急避難的に保持するバッファメモリを有している。従って、ストール解消後は、バッファメモリ内のデータを用いて処理を開始出来るため、グラフィックプロセッサの処理効率を向上出来る。この点につき以下説明する。
図50は、バッファメモリを設けない場合に図47と同様に命令を実行する際の、命令とステージとの関係を示す表である。そして、図48と同様に命令3がステージEでストールした場合を考える。ストールが発生した場合、その瞬間にパイプラインを停止することは困難である。すると図50の場合、時刻t3では時刻t3の状態を保持する必要があるにもかかわらず、ステージA〜Dの命令7〜命令4がステージB〜ステージEにオーバーランする。その結果、ストールしているステージEには、命令3を保持しているにもかかわらずステージDの命令4が入力され、命令3が潰される。このような事態を避けるために、時刻t3では各ステージA〜Fの命令を全てフラッシュする必要がある。少なくとも、ストールしたステージよりも上流のステージ(ステージEでストールした場合にはステージA〜D)の命令をフラッシュする必要がある。しかし、命令を全てフラッシュしてしまうために、時刻t4で処理をリスタートする場合には、また最初から命令を改めて投入する必要がある。すると、ストールする度に命令を投入しなければならず、グラフィックプロセッサの性能が大幅に低下する。
しかし本実施形態に係る構成であると、ストールが解消した際にはバッファメモリ80に保持されているデータを用いてリスタート出来る。従って、改めて命令を投入する必要が無いため、グラフィックプロセッサの性能低下を抑制出来る。これはグラフィックプロセッサの動作周波数が高い場合(例えば数GHz)や、ステージが非常に深い場合に有効である。なぜなら、このような場合にはストール発生が検出された後に実際のパイプラインを停止させるのに数サイクルを要するからである。
特に本実施形態に係る構成の場合、図11に示すように、アドレス発生部40から出力されたアドレス信号は、数段の処理ステージを含む第2ステージを経た後にキャッシュメモリ41に達する。このようにパイプラインが深い理由は、命令制御部25における処理を待つ必要があるからである。1つのピクセルシェーダ24では一度に例えば(4×4)個のピクセルを一括して処理する。この際、ピクセルを生成するのが命令制御部25である。ところが、データ振り分け部20から命令制御部25に与えられる情報は、代表点となるあるピクセル1個分のデータと、その他のピクセルについての代表点からの差分値のみである。この情報から、命令制御部25は代表点以外の15個のピクセルデータを生成する。これにより、データを保持するレジスタ数を削減できる。キャッシュ管理部45は、このピクセルデータの計算処理を待つ必要があるため、図11に示すようにパイプラインが深くなる。
しかし、このようにパイプラインが深くなったとしても、ストールされた際においてステージに保持されるデータを、バッファメモリ80に待避させ、リスタートする際にはバッファメモリ80内のデータを使用出来るため、処理効率の低下を効果的に抑制出来る。
なお、上記第1乃至第6の実施形態に係るグラフィックプロセッサは、例えばゲーム機、ホームサーバー、テレビ、または携帯情報端末などに搭載することが出来る。図51は上記第1乃至第6の実施形態に係るグラフィックプロセッサを備えたデジタルテレビの備えるデジタルボードのブロック図である。デジタルボードは、画像・音声などの通信情報を制御するためのものである。図示するように、デジタルボード1000は、フロントエンド部1100、画像描画プロセッサシステム1200、デジタル入力部1200、A/Dコンバータ1400、1800、ゴーストリダクション部1500、三次元YC分離部1600、カラーデコーダ1700、LAN処理LSI1900、LAN端子2000、ブリッジメディアコントローラ2100、カードスロット2200、フラッシュメモリ1000、及び大容量メモリ(例えばDRAM)1100を備えている。フロントエンド部1100は、デジタルチューナーモジュール1110、1120、OFDM(Orthogonal Frequency Division Multiplex)復調部1120、QPSK(Quadrature Phase Shift Keying)復調部1140を備えている。
画像描画プロセッサシステム1200は、送受信回路1210、MPEG2デコーダ1220、グラフィックエンジン1100、デジタルフォーマットコンバータ1110、及びプロセッサ1120を備えている。そして、例えばグラフィックエンジン1100及びプロセッサ1120が、上記第1乃至第6の実施形態で説明したグラフィックプロセッサに対応する。
上記構成において、地上デジタル放送波、BSデジタル放送波、及び110°CSデジタル放送波は、フロントエンド部1100で復調される。また地上アナログ放送波及びDVD/VTR信号は、3次元YC分離部1600及びカラーデコーダ1700でデコードされる。これらの信号は、画像描画プロセッサシステム1200に入力され、送受信回路1210で、映像・音声・データに分離される。そして、映像に関しては、MPEG2デコーダ1220を介してグラフィックエンジン1100に映像情報が入力される。するとグラフィックエンジン1100は、上記実施形態で説明したようにして図形を描画する。
図52は、上記第1乃至第6の実施形態に係るグラフィックプロセッサを備えた録画再生機器のブロック図である。図示するように、録画再生機器3000はヘッドアンプ3100、モータードライバ3200、メモリ3300、画像情報制御回路3400、ユーザI/F用CPU3500、フラッシュメモリ3600、ディスプレイ3700、ビデオ出力部3800、及びオーディオ出力部3900を備えている。
画像情報制御回路3400は、メモリインターフェース3410、デジタル信号プロセッサ3420、プロセッサ3430、映像処理用プロセッサ3450、及びオーディオ処理用プロセッサ3440を備えている。そして、例えば映像処理用プロセッサ3450及びデジタル信号プロセッサ3420が、上記第1及び第2の実施形態で説明したグラフィックプロセッサに対応する。
上記構成において、ヘッドアンプ3100で読み出された映像データが画像情報制御回路3400に入力される。そして、デジタル信号処理プロセッサ3420から映像情報用プロセッサ3450に図形情報が入力される。すると映像情報用プロセッサ3450は、上記実施形態で説明したようにして図形を描画する。
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
10…グラフィックプロセッサ、11…ラスタライザ、12−0〜12−3…ピクセルシェーダ、13…ローカルメモリ、20…データ振り分け部、23…テクスチャユニット、24…ピクセルシェーダユニット、25…命令制御部、26…描画処理部、27…データ制御部、40…アドレス発生部、41…キャッシュメモリ、42…キャッシュ制御部、43…プリロード制御部、44…キャッシュアクセス制御部、45…キャッシュ管理部、46…リクエスト発行制御部、47…プリロードアドレス発生部、48…プリロード保持部、49…サブパス情報管理部、50…アドレス保持部、51〜62、71…メモリ、65、68、69、74…選択回路、66、72…比較器、67…ANDゲート、73…カウンタ、75…バス制御部、80…バッファメモリ