(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5712295
(24)【登録日】2015年3月13日
(45)【発行日】2015年5月7日
(54)【発明の名称】次命令タイプフィールド
(51)【国際特許分類】
G06F 9/30 20060101AFI20150416BHJP
G06F 9/38 20060101ALI20150416BHJP
G06T 1/20 20060101ALI20150416BHJP
【FI】
G06F9/30 310A
G06F9/38 370B
G06T1/20 C
【請求項の数】27
【全頁数】15
(21)【出願番号】特願2013-529706(P2013-529706)
(86)(22)【出願日】2011年8月24日
(65)【公表番号】特表2013-542500(P2013-542500A)
(43)【公表日】2013年11月21日
(86)【国際出願番号】GB2011051589
(87)【国際公開番号】WO2012038713
(87)【国際公開日】20120329
【審査請求日】2013年9月17日
(31)【優先権主張番号】1016072.9
(32)【優先日】2010年9月24日
(33)【優先権主張国】GB
(73)【特許権者】
【識別番号】504394342
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100064908
【弁理士】
【氏名又は名称】志賀 正武
(74)【代理人】
【識別番号】100089037
【弁理士】
【氏名又は名称】渡邊 隆
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(72)【発明者】
【氏名】ヨルン・ニスタット
【審査官】
清木 泰
(56)【参考文献】
【文献】
国際公開第01/016710(WO,A1)
【文献】
特開平11−296381(JP,A)
【文献】
特開平06−028187(JP,A)
【文献】
特開昭63−234322(JP,A)
【文献】
特開2000−215059(JP,A)
【文献】
特開平05−346854(JP,A)
【文献】
特開昭64−046134(JP,A)
【文献】
米国特許第04953078(US,A)
【文献】
米国特許出願公開第2010/0225656(US,A1)
【文献】
欧州特許出願公開第00652509(EP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30− 9/42
G06T 1/20
(57)【特許請求の範囲】
【請求項1】
プログラム命令の1つ以上のスレッドに応じてデータを処理するための装置であって、
プログラム命令のスレッド内の現在プログラム命令に応答して、前記現在プログラム命令によって指定された現在データ処理動作を実行するように構成されたデータ処理回路を具備し、
前記現在プログラム命令は、前記スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを有しており、
前記次命令タイプフィールドは、前記次命令タイプフィールドによって指定されるタイプを前記次プログラム命令もまた指定する、冗長な情報のフィールドであることを特徴とする装置。
【請求項2】
前記データ処理回路が、前記次命令タイプフィールドの制御下で、前記次プログラム命令の処理の一部を形成する1つ以上の処理動作を実行することを特徴とする請求項1に記載の装置。
【請求項3】
前記次プログラム命令を格納しているメモリから前記次プログラム命令のすべてが取り出される前に、前記処理の一部が実行されることを特徴とする請求項2に記載の装置。
【請求項4】
前記処理回路が複数の処理パイプラインを有していることを特徴とする請求項2または3に記載の装置。
【請求項5】
前記複数の処理パイプラインが複数の異なるタイプの処理パイプラインを含んでおり、
前記異なるタイプの処理パイプラインは、それぞれ異なるタイプの処理動作を実行するように構成されていることを特徴とする請求項4に記載の装置。
【請求項6】
前記複数の処理パイプラインが、
演算処理動作を実行するように構成された演算パイプラインと、
ロード/ストア処理動作を実行するように構成されたロード/ストアパイプラインと、
ピクセルテクスチャリング処理動作を実行するように構成されたテクスチャリングパイプラインと
のうちの1つ以上を含むことを特徴とする請求項4または5に記載の装置。
【請求項7】
前記次プログラム命令の処理の一部が、前記複数の処理パイプラインのうち、前記次プログラム命令を実行するために当てられる次の処理パイプラインの選択を含むことを特徴とする請求項4ないし6のいずれか1項に記載の装置。
【請求項8】
前記次命令タイプフィールドに応答して、前記次の処理パイプラインによる実行のために前記次プログラム命令をスケジューリングするように構成されたスケジューリング回路をさらに具備することを特徴とする請求項7に記載の装置。
【請求項9】
前記次の処理パイプラインが、
前記複数の処理パイプラインのうち、前記現在プログラム命令を実行するために当てられる現在の処理パイプラインと同一のパイプラインと、
前記複数の処理パイプラインのうち、前記現在の処理パイプラインとは異なるパイプラインと
のうちの1つであることを特徴とする請求項8に記載の装置。
【請求項10】
前記次の処理パイプラインが、前記次の処理パイプラインによって実行されるプログラム命令のキューを格納するように構成されたキュー回路を有しており、
前記現在プログラム命令を実行するために当てられる現在の処理パイプラインから前記スケジューリング回路に供給される前記次命令タイプフィールドの制御下で、前記スケジューリング回路が前記次プログラム命令を前記キューに加えることを制御することを特徴とする請求項8または9に記載の装置。
【請求項11】
前記次プログラム命令が、前記現在の処理パイプラインから退く前記現在プログラム命令に応答して、前記キューに加えられることを特徴とする請求項10に記載の装置。
【請求項12】
前記処理の一部が、前記次プログラム命令に関連する1つ以上の状態変数を前記次の処理パイプラインにルーティングすることを含むことを特徴とする請求項7ないし11のいずれか1項に記載の装置。
【請求項13】
前記処理の一部が、
前記次プログラム命令をプリデコードすることと、
前記次プログラム命令をプリフェッチすることと、
前記次プログラム命令をディスパッチすることと
のうちの1つ以上を含むことを特徴とする請求項2ないし12のいずれか1項に記載の装置。
【請求項14】
前記プログラム命令が格納されているメモリアドレスのうち、最下位側の所定数のビットの値は固定値であり、
前記処理回路が前記現在データ処理動作を実行するときに、プログラムカウンタ値が前記現在プログラム命令に関連付けて格納され、
前記プログラムカウンタ値の最下位側の所定数のビット以外のビット位置群には、前記プログラム命令が格納されているメモリアドレスに関する情報が配置され、
前記プログラムカウンタ値の最下位側の所定数のビットには、前記次命令タイプフィールドの値が配置されることを特徴とする請求項1ないし13のいずれか1項に記載の装置。
【請求項15】
前記プログラム命令が格納されているメモリアドレスと、前記次命令タイプフィールドの値との論理和演算を行って、前記プログラムカウンタ値を形成するものであり、
前記論理和演算に際しては、前記次命令タイプフィールドの値を前記メモリアドレスの最下位のビット位置にアラインさせてから論理和演算を行うものであることを特徴とする請求項14に記載の装置。
【請求項16】
前記1つ以上のスレッドが複数のスレッドを含んでいることを特徴とする請求項1ないし15のいずれか1項に記載の装置。
【請求項17】
前記次命令タイプフィールドが、前記プログラム命令のスレッドのプログラム命令内の固定された所定位置に配置されることを特徴とする請求項1ないし16のいずれか1項に記載の装置。
【請求項18】
前記次命令タイプフィールドの1つの値が、前記スレッドが終了することを示す終了タイプであることを特徴とする請求項1ないし17のいずれか1項に記載の装置。
【請求項19】
前記現在プログラム命令が間接的な分岐命令である場合、前記次プログラム命令を格納するメモリアドレスである、前記間接的な分岐命令のターゲットメモリアドレスを計算して、前記プログラムカウンタ値の一部とし、
前記現在プログラム命令の前記次命令タイプフィールドの値を、前記プログラムカウンタ値の他部とし、
前記プログラムカウンタ値の前記一部と、前記プログラムカウンタ値の前記他部とを結合して、前記プログラムカウンタ値を新たに形成することを特徴とする請求項14または15に記載の装置。
【請求項20】
前記処理回路が、前記現在プログラム命令の前記次命令タイプフィールドの値が示す命令のタイプと、前記次プログラム命令を解読して判明した当該次プログラム命令のタイプとの間の不一致に応答して、前記次命令タイプフィールドと前記次プログラム命令とのうちの少なくとも1つの破損を表す例外を生成することを特徴とする請求項1ないし19のいずれか1項に記載の装置。
【請求項21】
前記データ処理回路が前記次命令タイプフィールドの制御下で実行する1つ以上の処理動作であるところの、前記次プログラム命令の処理の一部が実行された後に、前記次プログラム命令の完全な解読が生じることを特徴とする請求項2ないし20のいずれか1項に記載の装置。
【請求項22】
前記処理回路が画像処理装置を有しており、
前記1つ以上のスレッドが複数の並列な画像処理スレッドを含んでいることを特徴とする請求項1ないし21のいずれか1項に記載の装置。
【請求項23】
プログラム命令の1つ以上のスレッドに応じてデータを処理するための装置であって、
プログラム命令のスレッド内の現在プログラム命令によって指定された現在データ処理動作を実行するためのデータ処理装置を具備し、
前記現在プログラム命令は、前記スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含んでおり、
前記次命令タイプフィールドは、前記次命令タイプフィールドによって指定されるタイプを前記次プログラム命令もまた指定する、冗長な情報のフィールドであることを特徴とする装置。
【請求項24】
プログラム命令の1つ以上のスレッドに応じてデータを処理する方法であって、
プログラム命令のスレッド内の現在プログラム命令に応答して、前記現在プログラム命令によって指定された現在データ処理動作を実行する段階を有し、
前記現在プログラム命令は、前記スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含んでおり、
前記次命令タイプフィールドは、前記次命令タイプフィールドによって指定されるタイプを前記次プログラム命令もまた指定する、冗長な情報のフィールドであることを特徴とする方法。
【請求項25】
プログラム命令の1つ以上のスレッドに応じてデータ処理を実行するデータ処理装置を制御するためのコンピュータプログラムであって、
プログラム命令のスレッド内の現在プログラム命令に応答して、前記現在プログラム命令によって指定された現在データ処理動作を実行するように前記データ処理装置を制御し、
前記現在プログラム命令は、前記スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含んでおり、
前記次命令タイプフィールドは、前記次命令タイプフィールドによって指定されるタイプを前記次プログラム命令もまた指定する、冗長な情報のフィールドであることを特徴とするコンピュータプログラム。
【請求項26】
前記スレッドが複数のプログラム命令を含んでおり、
前記スレッド内の全ての前記プログラム命令が次命令タイプフィールドを含んでいることを特徴とする請求項25に記載のコンピュータプログラム。
【請求項27】
請求項1ないし23のいずれか1項に記載の装置を提供するためのプログラムを実行するコンピュータを備える仮想マシン。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はデータ処理システムの分野に関する。より詳しくは、本発明は、実行されるべき次の命令がデータ処理システム内においてどのように規定されるかに関する。
【背景技術】
【0002】
実行のためのプログラム命令のスレッドからプログラム命令のシーケンスを実行するデータ処理システムを提供することが知られている。そのようなシステムの内部では、実行されるべき新しい命令を分岐命令が解決する前に処理パイプラインが供給できるように、実行されるべき命令を先取りしかつ分岐に出会ったときに実行の流れを予測する、命令先取(プリフェッチ)回路および分岐予測回路が用いられている。これらの措置は、深い処理パイプラインがサポートされ、かつ高い効率で利用されるようにするためには有効である。しかしながら、回路面積、回路の複雑さ、電力消費、およびこれらのメカニズムに関連付けられる費用の面から、オーバーヘッドはますます重要になっている。
【発明の概要】
【発明が解決しようとする課題】
【0003】
また、複数のプログラムスレッドを同時に実行するデータ処理システムを提供することも知られている。そのようなシステムの一例は画像処理装置であるが、そこにおいては、例えば100を超えるプログラムスレッドが並列に実行され、かつ各プログラムスレッドは処理される画像イメージの異なる部分に対応している。命令を先取りし分岐を予測する既知のメカニズムは、そのようなシステムには良好に拡張できない。これらのメカニズムに関連するオーバーヘッドは、この多数のプログラムスレッドについて分岐応答を予測することに加えて、多数の別個のスレッドについてプリフェッチ命令を探すときには不利である。しかしながら、実行されるプログラム命令の完了を単に待ち、かつその後で次の命令を取り出すことは、かなりの先取り待ち時間を招く。この欠点はまた、多数の並行スレッドを実行するシステムの使用がより広範囲になるとともに(画像処理の分野を越えて)先取り待ち時間がより明白になるより多くの汎用処理に適用されると、より重要になる。
【課題を解決するための手段】
【0004】
一態様によれば、本発明は、プログラム命令の1つ以上のスレッドに応じてデータを処理するための装置であって、プログラム命令のスレッド内の現在プログラム命令に応答して、現在プログラム命令によって指定された現在データ処理動作を実行するように構成されたデータ処理回路を具備し、上記現在プログラム命令は、スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含んでいる装置を提供する。
【0005】
本技術は、現在プログラム命令内に次命令タイプフィールドを提供する。これは、プログラム命令のサイズを減少させようとする、この分野における技術的な先入観に逆行する。この技術的な先入観を念頭におくと、次プログラム命令それ自体を提供することに加えて、現在プログラム命令内に次の命令タイプのフィールドを提供することが、プログラムの冗長さを意味するということは、十分に理解されるであろう。次プログラム命令それ自体が次プログラム命令のタイプを指定するからである。しかしながら、本技術は、現在プログラム命令内の次命令タイプフィールドによる追加のプログラムサイズオーバーヘッドは、いくつかの実際的な利点をもたらすために活用できると認識する。
【0006】
データ処理回路は、次命令タイプフィールドの制御下で、1つ以上の処理動作を実行し得る。これは、現在プログラム命令が、そうでなければ次プログラム命令が例えば取り出されて解読されるまで待たなければならない、次の命令に関連付けられた処理動作を開始することを可能にする。
【0007】
いくつかの実施態様では、次命令タイプフィールドに応じて実行される処理の一部が、次プログラム命令を格納しているメモリから次プログラム命令がすべて取り出されあるいは取り出され始める前に着手され得る。
【0008】
本技術は、多数の処理パイプラインを含むシステムの分野に特別な有用性を有している。複数の処理パイプラインはすべて同一であってもよいが、多くの実施態様においては、複数の異なるタイプの処理パイプラインには、異なるタイプの処理動作を実行するように構成されたそれぞれ異なるタイプの処理パイプラインが提供される。一例として、複数の処理パイプラインには、演算パイプライン、ロード/ストアパイプラインおよびテクスチャリングパイプラインが含まれ得る。
【0009】
システムが複数の処理パイプラインを含む情況においては、次命令タイプフィールドの制御下で実行される次プログラム命令の処理の一部は、次プログラム命令を実行するために当てられる次の処理パイプラインの選択を含み得る。したがって、例えば、次命令タイプフィールドは、次プログラム命令を適切な次の処理パイプラインにスケジューリングするスケジューリング回路を制御するために用いられる。一例として、算術命令は演算パイプラインに向けられてもよいし、ロード/ストア命令はロード/ストアパイプラインに向けられてもよく、かつテクスチャリング命令はテクスチャリングパイプラインに向けられてもよい。
【0010】
現在の処理パイプラインによって現在プログラム命令を実行する間に、次命令タイプフィールドが次プログラム命令を向ける次処理パイプラインは、現在の処理パイプラインと同一の処理パイプラインであってもよいし、または現在の処理パイプラインとは異なる処理パイプラインであってもよい。
【0011】
各処理パイプラインは、そのパイプラインによって実行されるプログラム命令のキューを格納するために提供された、関連するキュー回路を有していてもよい。そのようなシステムの内部では、現在の処理パイプラインは、次命令タイプフィールドに一致するキューへの次プログラム命令の追加を生じさせるために、次命令タイプフィールドによって制御されてもよい。
【0012】
そのようなキューへの次プログラム命令の追加は、便利には、現在の処理パイプラインから退いた現在プログラム命令に応じて実行され、1つのプログラム命令が退くとすぐに、そのスレッドのための他のプログラム命令が実行される命令のキューに追加される。多数の異なるスレッドからのプログラム命令は異なるパイプライン内の異なるパイプラインステージにおいて同時に処理されるので、そのスレッドの次プログラム命令が実行のためにキューに入れられる前に、そのスレッドの現在プログラム命令が退くまで待機しても、全体的なデータ処理量が大幅に減少することはない。異なるスレッドからのプログラム命令がハードウェアにおいて既に実行されているので、ハードウェアのハイレベルな利用および効率が維持される。
【0013】
次命令タイプフィールドによって制御され得る処理の一部の別の例には、次プログラム命令に関係する1つ以上の状態変数の次の処理パイプラインへのルーティングが含まれる。このように、スレッドがパイプラインの間で移動する場合、現在プログラム命令内の次命令タイプフィールドによって提供される移動のより早い表示により、そのスレッドに関連する状態変数は新しいパイプラインでより素早く利用可能となり得る。
【0014】
次命令タイプフィールドによって制御され得る処理の一部の別の例には、次プログラム命令の事前の解読(プリデコード)、次プログラム命令の事前の取り出し(プリフェッチ)、および次プログラム命令のディスパッチが含まれる。
【0015】
現在プログラム命令は、現在のプログラムのカウンタ値を関連付け得る。その最下位ビット位置から伸びる現在のプログラムのカウンタ値の一部は、次命令タイプフィールドを表す値を格納するために用いられ得る。プログラムカウンタの下位部分は、比較的大きなプログラム命令が整列しているシステムにおいては、多くの場合に使用されない。
【0016】
そのようなシステムの内部では、プログラムカウンタ値は、現在プログラム命令を格納しているメモリ内の記憶アドレスと記憶アドレスの最下位ビット端に一致する次の命令タイプフィールドを組み合わせる論理和演算によって抽出され得る。
【0017】
留意すべきは、本技術は、プログラム命令の単一スレッドを実行するシステムに用いることができる一方で、複数のスレッドが実行されるときに特に有用であることである。
【0018】
本技術の実施は、次命令タイプフィールドがプログラム命令内の固定された所定位置に位置する場合に単純化される。
【0019】
プログラム命令のスレッドは無期限には実行されず、従って、スレッドが終了するときに実行される動作の制御は、次命令タイプフィールドの1つの値がこのスレッドは現在命令で終了することを示す終了タイプである実施態様において便利にサポートされ得る。
【0020】
ここで当業者が留意すべきは、現在プログラム命令の1つのタイプは、間接的な分岐動作であり得ることである。そのような間接的な分岐命令では、次プログラム命令を格納している記憶アドレスに対するポインタは、次の間接的な分岐命令自体によって計算される。次プログラム命令のタイプが知られていて間接的な分岐命令の次命令タイプフィールド内に符号化されているとき、間接的な分岐命令のためのターゲットアドレスは、次命令タイプフィールドで計算されたアドレスを組み合わせることによって形成され、それによって、プログラムカウンタ値に基づいて処理の一部を制御するメカニズムは、間接的な分岐命令によってターゲットアドレスとして計算されたポインタに基づいて再使用され得る。
【0021】
上述したように、次命令タイプフィールドおよび次プログラム命令は、共にスレッドのプログラム命令の内部に存在する冗長情報の程度を表している。この冗長度は、次命令タイプフィールドと次プログラム命令の間の何らかの誤った組合せを検知して、これらのアイテムのうちの少なくとも1つの破損を表す例外を生じさせるために活用することができる。このように、保護の程度は命令のデータ破損に対して達成され得る。
【0022】
次命令タイプフィールドの制御下で実行される処理は、多くの場合、次プログラム命令の解読が生じる前に実行される。このようにして、次命令タイプフィールドは、次プログラム命令の完全な取り出し、発行、および解読が生じるまで待たなければならないことに関連する待ち時間について少なくとも部分的に取り組む方法を提供する。
【0023】
ここで留意すべきは、本技術が一般的に汎用プロセッサ、デジタル信号プロセッサ等のようなデータ処理装置の分野に用途を有することである。しかしながら、本技術は、処理装置が画像処理装置を有しており、かつ1つ以上のスレッドが多数の画像処理スレッドを含んでいるシステムに特に適している。これらの高度な並列マルチスレッドシステムは、従来の命令先取メカニズムおよび分岐予測メカニズムには不適当であり、かつ現在プログラム命令内の次命令タイプフィールドの使用から著しく利益を得ることとなる。
【0024】
別の態様によれば、本発明は、プログラム命令の1つ以上のスレッドに応じてデータを処理するための装置であって、プログラム命令のスレッド内の現在プログラム命令によって指定された現在データ処理動作を実行するためのデータ処理装置を具備し、上記現在プログラム命令は、スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含む装置を提供する。
【0025】
さらに別の態様によれば、本発明は、プログラム命令の1つ以上のスレッドに応じてデータを処理する方法であって、プログラム命令のスレッド内の現在プログラム命令に応答して、現在プログラム命令によって指定された現在のデータ処理動作を実行する段階を有し、上記現在プログラム命令は、スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含む方法を提供する。
【0026】
さらに別の態様によれば、本発明は、非一時的な形式を有し、データ処理装置がプログラム命令の1つ以上のスレッドに応じてデータ処理を実行するように制御するためのコンピュータプログラムを格納するコンピュータプログラム製品であって、上記コンピュータプログラムは、プログラム命令のスレッドの現在プログラム命令を含み、上記現在プログラム命令は、スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含むコンピュータプログラム製品を提供する。
【0027】
さらに別の態様によれば、本発明は、上記のようなデータを処理する装置の仮想マシン実施を提供するべくプログラムを実行するコンピュータを備える仮想計算機を提供する。ここで留意すべきは、処理装置の仮想化がより実際的になってきていることであり、したがって、本技術の1つのタイプの実施は、仮想マシン実施であってよく、汎用プロセッサは、上記のような処理装置として機能するようにコンピュータプログラムによって制御される。
【0028】
以下では、本発明の実施形態について、単なる実施例として添付の図面を参照しつつ説明する。
【図面の簡単な説明】
【0029】
【
図1】現在プログラム命令内の次命令タイプフィールドを利用する画像処理装置を含む処理装置を概略的に示す図である。
【
図2】並列に実行する多数のプログラムスレッドを概略的に示す図である。
【
図3】現在プログラム命令内の次命令タイプフィールド概略的に示す図である。
【
図4】画像処理装置のコアを概略的に示す図である。
【
図5】現在プログラム命令を格納するメモリアドレスを次命令タイプフィールドに組み合わせてプログラムカウンタ値を生じさせることを概略的に示す図である。
【
図6】処理パイプラインの選択を概略的に示す流れ図である。
【
図7】不一致例外生成に関連した処理を概略的に示す流れ図である。
【
図8】異なるタイプの次プログラム命令を表すために用いられる、異なるタイプの次命令タイプフィールドの実施例を示す図である。
【
図9】本技術の仮想計算機タイプの実施を提供する装置を概略的に示す図である。
【発明を実施するための形態】
【0030】
図1は、メモリ6に接続されたシステムオンチップ集積回路4を含むデータ処理システム2を概略的に示している。システムオンチップ集積回路4は、汎用プロセッサコア8、画像処理装置10、システムオンチップキャッシュメモリ12、およびメモリコントローラ14を有しており、それらの全てがシステムバス16を介してリンクしている。メモリコントローラ14は、メモリ6へのアクセスを提供する。メモリ6は、メインプロセッサ8によって実行される汎用プログラム18、画像処理装置10によって実行される画像プログラム20、汎用コア8による操作のための汎用データ22、および画像処理装置10による操作のための画像データ24を格納している。
【0031】
画像処理装置10は、各コアの内部で、およびコアの間で、それぞれ並列にマルチスレッドのプログラム命令を実行する多数の画像処理装置コア26を有している。画像処理装置コア26はそれぞれ多重処理パイプラインを有しており、かつ処理パイプラインはそれぞれ、その命令パイプラインの異なる段階において異なるプログラムスレッドからのプログラム命令を実行する。したがって、画像処理装置10によって任意の所与時間に実行されるプログラムスレッドの総数は多く、例えば100を超える。
【0032】
画像処理装置コア26は、それぞれ、それ自体の使用のために関連付けられた1次キャッシュ28を有している。また、画像処理装置コア26は、画像処理装置10の一部として提供される2次キャッシュ30を共有している。ここで留意すべきは、画像処理装置10は、その性能を改善するために多くのさらなるローカルキャッシュおよびデータストアを含み得ることである。これらの詳細は、明瞭さのために
図1から省略されている。
【0033】
図2は、画像処理装置10によって並列に実行され得るプログラム命令の複数のスレッドを概略的に示している。この実施例においては、並列に実行されるプログラム命令のN+1のスレッドがある。スレッド0は、X+1のプログラム命令を含んでいる。スレッド0のこれらのプログラム命令は、終了条件が満たされるまでループで実行される。この技術分野の当業者が留意すべきは、同一プログラムの多くの段階が、画像イメージの異なる領域において同一操作を実行する別個のスレッドとして並列に実行されることが典型的であるということである。この場合、異なるプログラムスレッドは、そこに配置された同数のプログラム命令を有する。また、異なるプログラムスレッドが異なるコードを用いてかつ異なる目的のために実行されることも可能である。そのようなスレッドも並列に実行される。一つの実施例として、算術演算(例えば頂点回転)を実行する1セットのスレッドおよびピクセル値上でテクスチャリング動作を実行するスレッドの異なるセットがあり得る。
【0034】
図3は、現在プログラム命令32を概略的に示している。現在プログラム命令32は、その第1のバイト内に4ビットの現在命令タイプフィールド34と、4ビットの次命令タイプフィールド36とを含んでいる。現在命令タイプフィールド34は、現在命令32に対応する命令タイプ、例えば、現在命令32が算術命令、ロード/ストア命令、テクスチャ命令、分岐命令等であるかどうかを符号化している。次命令タイプフィールド36は、現在プログラム命令32に続く次プログラム命令に関するこの同一タイプの情報を、実行されるプログラム命令のスレッド内に符号化している。次命令タイプフィールド36は、現在プログラム命令32のサイズを増加させるが、次プログラム命令が解読される前に、または次プログラム命令が取り出される前に、次プログラム命令に関連する処理の一部を実行する可能性をもたらす。これは、次プログラム命令の取り出しおよび解読に関連する待ち時間を減少させることができる。
【0035】
図4は画像処理装置コア26を概略的に示している。画像処理装置コア26は、第1の算術および分岐パイプライン38、第2の算術および分岐パイプライン40、ロード/ストアおよび変数パイプライン42、およびテクスチャパイプライン44を含む多数の処理パイプラインを有している。これらの異なる処理パイプライン38,40,42,44は、異なるタイプであり、かつ異なるタイプの処理動作を実行する。算術および分岐パイプライン38,40は、それぞれ算術と分岐の処理動作を実行する。ロード/ストアおよび変数パイプライン42は、固定された、またはプログラム可能な変数に関連する動作に加えて、メモリ6へのロードおよびストアに関連する処理動作を実行する。テクスチャパイプライン44は、生成される画像イメージ内のピクセル値を生成する色彩補正プログラムによって用いられる画像データ24の内部に保存されたテクスチャーデータを利用して、テクスチャピクセル処理動作を実行する。
【0036】
各処理パイプライン38,40,42,44は、関連する命令キュー46,48,50,52を有しており、それらの内部には、その処理パイプライン38,40,42,44によって実行されるプログラム命令が、処理パイプライン38,40,42,44への発行を保留しつつ配置される。スケジューリング回路54は、各命令キュー46,48,50,52にプログラム命令を加える責任を負っている。したがって、スケジューリング回路54は、プログラム命令が配置される適正な処理パイプライン38,40,42,44を選択する。テクスチャリング命令は、命令キュー52に配置され、かつロード/ストア命令および変数に関連する命令は、命令キュー50内に配置されるべきである。算術命令およびブランチ命令は、命令キュー46または命令キュー48のうちの1つに配置されるべきである。
【0037】
新しいスレッドが初めて実行されるとき、そのスレッドの第1命令は、命令キュー46,48,50,52のうちのいずれにその第1命令を配置するかを決定するために、スケジューリング回路54によって少なくとも部分的に解読される必要がある。あるいは、新しいスレッドにおける第1命令のポインタは、以下にさらに説明するように、その最下位ビットにその第1命令のタイプを符号化する。プログラムスレッドの第1プログラム命令が実行され、かつその適正な処理パイプライン38,40,42,44内でその退避段階に達すると、その現在プログラム命令に関連する次命令タイプフィールド36は、現在プログラム命令の次命令タイプフィールド36に一致する(つまり指定された)命令キュー46,48,50,52に次プログラム命令をスケジューリングするべく、スケジューリング回路54を制御するために用いることができる。第1プログラム命令が算術命令であり、かつ第2プログラム命令もまた算術命令であった場合、次命令タイプフィールド36は、第2プログラム命令が第1プログラム命令と同一の命令キューに配置されるべきことを示す(これは、スレッド状態変数(データ)を他の演算パイプラインに移動させなければならないことを回避する)。しかしながら、プログラムスレッドは、その内部でスレッドが実行を要求する異なるタイプのプログラム命令として、処理パイプライン38,40,42,44の間で移動させることは可能である。したがって、スレッドの第1部分は、1つ以上のテクスチャリング命令が後続する算術命令とすることができる。プログラムスレッドが移動する時に、算術命令の最後で次命令タイプフィールド36によって示されるように、スレッドに関連するスレッド状態変数は、算術および分岐パイプライン38,40のうちの関連する1つからテクスチャリングパイプライン44へと移動する。スレッド状態変数には、プログラムカウンタ値、スレッド識別子、スレッドに関連するディスクリプタ等が含まれる。このスレッド状態は、スレッドが移動する処理パイプライン44によって要求される。スレッド状態変数のこの移動は、直前の処理パイプライン38,40上で実行された最後のプログラム命令内の次命令タイプフィールドによって制御され、したがって実際に取り出されあるいは解読された新しい処理パイプライン44上で実行される第1プログラム命令に先立って開始される。
【0038】
ここで留意すべきは、スケジューリング回路54の制御が次命令タイプフィールド36に基づいて実行されることである。次命令タイプフィールド36は、大きな整列命令を使用する結果として処理パイプライン38,40,42,44内の各段階で各プログラム命令に関係するプログラムカウンタ値の未使用の最下位ビットを用いることにより、便利なやり方で命令パイプライン38,40,42,44の内部に格納され得る。この例示的な実施形態におけるプログラム命令の長さは128ビットの倍数であるので、最下位の4ビットのプログラムカウンタPC[3:0]は使用されず(プログラム命令はメモリ6の内部で整列した128ビットである)、プログラムカウンタ値内のこのビットスペースは、プログラムカウンタ値PCに対応する現在プログラム命令に関係した次命令タイプフィールド36を格納するために便利に用いることができる。したがって、
図4に示したように、現在プログラム命令が処理パイプライン38,40,42,44の端部に達してパイプラインから退くとき、この段階では、プログラムカウンタPC[3:0]の最下位ビット部分は、次プログラム命令のタイプを示すとともに次の命令を受けるように命令キュー46,48,50,52に命令するべく、スケジューリング回路54に供給することができる。
【0039】
次命令タイプフィールド36はまた、処理パイプライン38,40,42,44による現在プログラム命令の進行に沿った他の時点において、次プログラム命令に関係する処理の一部を制御するために用いることができる。このように制御される次プログラム命令の処理の一部には、次プログラム命令の前もっての解読(プリデコード)、次プログラム命令の前もっての取り出し(プリフェッチ)、および次プログラム命令の発送(ディスパッチ)のうちの一つ以上が含まれる。次プログラム命令の処理の一部の他の可能性は、この技術分野の当業者には明らかであり、かつ本技術の範囲内に包含される。
【0040】
また、画像処理装置コア26は、レジスタファイル56を有している。レジスタファイル56は、異なる処理パイプライン38,40,42,44間でのデータ値の通信に加えてそれらのパイプライン間でのデータ値の操作のために異なる処理パイプライン38,40,42,44によって用いられるレジスタを有している。
【0041】
図5は、現在プログラム命令32に関連するメモリアドレス58(現在命令のメモリアドレスに現在命令の長さを加えることによって次の命令を指示するために用いることができる)が、その処理パイプライン38,40,42,44に沿って進行するにつれて現在プログラム命令32に格納され、かつ伴うプログラムカウンタ値60を生み出すために、次命令タイプフィールド36の最下位の4ビットに関して、どのようにして論理和演算に従うかを概略的に示している。プログラム命令の長さが128ビットの倍数であるとともにメモリ6内に整列した128ビットであるので、最下位の4ビットのメモリアドレス58は未使用であり、従って論理和演算を用いて次命令タイプフィールド36が詰め込まれる。現在命令がその処理パイプラインから退くときに、プログラムカウンタ値は、次の命令を適切な命令キュー46,48,50,54に導くとともに、記憶システムからの次の命令の取り出しを開始するために、スケジューリング回路54によって直接用いられる。
【0042】
図6は、スケジューリング回路54によって実行されるパイプライン選択を概略的に示す流れ図である。ステップ62では、最下位の4ビットのプログラムカウンタ値60が読まれる(これらは、現在プログラム命令が退くと、プロセス段階38,40,42,44のうちの1つの端部から供給される)。ステップ64では、PC[3:0]によって表される次命令タイプフィールドは、現在プログラム命令32がプログラムスレッドにおいて最後であるかどうかを判断するために終了コードと比較される。現在プログラム命令32がそのプログラムスレッドにおいて最後である場合、そのスレッドのためのパイプラインの選択は終了する(それは新しいスレッドのための別個のプロセスによって取り扱われる)。スレッドが終了していない場合、ステップ66はPC[3:0]を用いて次プログラム命令が出されるパイプラインを選択する。この段階では、
図6の流れ図は、ステップ66で選択されたパイプラインに配置された次プログラム命令に関して実行される処理を説明し続ける。ステップ68では、このプログラム命令が解読される。その後、ステップ70は解読された命令の長さと一致する量だけプログラムカウンタをインクリメントする。同時に
図5に示されている論理和演算は、インクリメントされたプログラムカウンタ値の最下位の4ビットに次命令タイプフィールド36を入れるたに実行することができる。これにより、プログラムカウンタ値は、次命令のタイプを示す最下位の4ビットのプログラムカウンタで次プログラム命令のメモリアドレスを指示する。次命令タイプフィールド36は、
図3に示されたビット位置からの命令から読むことができる。これらのビット位置は、全ての命令のために固定されかつ予め決定されているので容易に識別される。
【0043】
ステップ72は、ステップ68の命令デコーダが間接的な分岐命令であるかどうかを判断する。もし確認されれば間接的な分岐命令はステップ74に進み、ステップ70で生成されたプログラムカウンタ値を、その分岐命令のためのターゲットアドレスとして、かつその最下位の4ビットに次命令タイプフィールド36を含む、分岐命令によって計算されたものと交換する。ステップ72またはステップ74の後で、関連する処理パイプライン38,40,42,44から命令が退くときに、処理はステップ62に進む。
【0044】
図7は、解読された命令と前の命令からの次命令タイプフィールドとの間に不一致(ミスマッチ)が生じた際の例外の生成を概略的に示す流れ図である。ステップ76は命令を解読する。ステップ78は、その命令の解読に由来する命令のタイプと、スレッド内の前の命令から読まれたその命令のための次命令タイプフィールドに示された命令のタイプとを比較する。これらの異なるメカニズムによって確認されたタイプ間に不一致がある場合、処理はステップ80に進み、命令タイプの不一致が生じたことを示す例外が生成される。これは、次命令タイプフィールド36またはプログラム命令32それ自体のいずれか(または両方−2つの破損がそろって起こらないとした場合)における破損に対する抵抗の程度を提供する。不一致がない場合、ステップ82は命令を実行する。
【0045】
図8は、次命令タイプフィールド36によって表される異なるタイプの命令を示している。ロード/ストアパイプライン42によって実行される命令に対応する1つのタイプが存在する。テクスチャリングパイプライン44によって実行される少なくとも1つの命令タイプが存在する。算術および分岐パイプライン38,40の1つによって実行される異なる長さのプログラム命令に対応する、複数の命令タイプが存在する。算術および分岐パイプライン38,40の1つによって実行される間接的な分岐に対応する命令タイプも存在する。4ビットの次命令タイプフィールド36によって表される残りの可能な符号化は未使用である。ここで留意すべきは、次命令タイプフィールド36のための異なる4ビットパターンは、異なるタイプの命令を表すために任意の異なる方法で割り付けられることである。
【0046】
図9は、使用され得る仮想マシン実施を示している。上記の実施形態は、関心のある技術をサポートする特定処理ハードウェアを動作させる装置および方法の点から本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実施を提供することが可能である。これらの仮想マシン実施は、仮想マシンプログラム510をサポートするホストオペレーティングシステム520を実行するためのホストプロセッサ530上で動作する。典型的に、合理的な速度で動作する仮想マシン実施を提供するためには大きく強力なプロセッサが要求されるが、そのようなアプローチは、互換性または再使用のために他のプロセッサに固有のコードを実行する希望があるときといった、ある状況下においては正当化され得る。仮想マシンプログラム510は、仮想マシンプログラム510によってモデル化されたデバイスである実際のハードウェアによって提供されるアプリケーションプログラムインターフェイスと同一のアプリケーションプログラムインターフェイスをアプリケーションプログラム500に提供する。したがって、上記のメモリーアクセス制御を含むプログラム命令は、仮想マシンハードウェアでそれらの相互作用をモデル化するように仮想マシンプログラム510を用いてアプリケーションプログラム500の内部から実行され得る。
【符号の説明】
【0047】
2 データ処理システム
4 システムオンチップ(SoC)集積回路
6 メモリ
8 汎用プロセッサ(CPU)
10 画像処理装置(GPU)
12 キャッシュメモリ
14 メモリコントローラ
16 システムバス
18 汎用プログラム
20 画像プログラム
22 汎用データ
24 画像データ
26 画像処理装置コア
28 1次キャッシュ
30 2次キャッシュ
38 第1の算術および分岐パイプライン
40 第2の算術および分岐パイプライン
42 ロード/ストアおよび変数パイプライン
44 テクスチャリングパイプライン
46,48,50,52 命令キュー
54 スケジューリング回路
56 画像処理装置レジスタファイル