(57)【要約】  画像処理装置コア（２６）は、複数の処理パイプライン（３８，４０，４２，４４）を含む。処理パイプラインによって実行されるプログラム命令のスレッドのプログラム命令は、関心のある処理スレッド内で現在プログラム命令に続く次プログラム命令の命令タイプを示す次命令タイプフィールド（３６）を含んでいる。この次命令タイプフィールドは、次の命令が取り出されて解読される前に、どの処理パイプラインに次の命令を送るかの選択を制御するために用いられる。次命令タイプフィールドは、現在プログラム命令（３２）に関連するプログラムカウンタ値内の最下位の４ビットとして、処理パイプラインに沿って渡され得る。次命令タイプフィールドは、次プログラム命令が取り出されるか、または解読される前にスレッドが処理パイプラインの間で移動するときに、処理パイプライン間でのスレッド状態変数の転送の制御に用いられる。
2013542500.tif 000002
【特許請求の範囲】
【請求項１】
プログラム命令の１つ以上のスレッドに応じてデータを処理するための装置であって、
プログラム命令のスレッド内の現在プログラム命令に応答して、前記現在プログラム命令によって指定された現在データ処理動作を実行するように構成されたデータ処理回路を具備し、
前記現在プログラム命令は、前記スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを有していることを特徴とする装置。
【請求項２】
前記データ処理回路が、前記次命令タイプフィールドの制御下で、前記次プログラム命令の処理の一部を形成する１つ以上の処理動作を実行することを特徴とする請求項１に記載の装置。
【請求項３】
前記次プログラム命令を格納しているメモリから前記次プログラム命令のすべてが取り出される前に、前記処理の一部が実行されることを特徴とする請求項２に記載の装置。
【請求項４】
前記処理回路が複数の処理パイプラインを有していることを特徴とする請求項２または３に記載の装置。
【請求項５】
前記複数の処理パイプラインが複数の異なるタイプの処理パイプラインを含んでおり、
前記異なるタイプの処理パイプラインは、それぞれ異なるタイプの処理動作を実行するように構成されていることを特徴とする請求項４に記載の装置。
【請求項６】
前記複数の処理パイプラインが、
演算処理動作を実行するように構成された演算パイプラインと、
ロード／ストア処理動作を実行するように構成されたロード／ストアパイプラインと、
ピクセルテクスチャリング処理動作を実行するように構成されたテクスチャリングパイプラインと
のうちの１つ以上を含むことを特徴とする請求項４または５に記載の装置。
【請求項７】
前記次プログラム命令の処理の一部が、前記複数の処理パイプラインのうち、前記次プログラム命令を実行するために当てられる次の処理パイプラインの選択を含むことを特徴とする請求項４ないし６のいずれか１項に記載の装置。
【請求項８】
前記次命令タイプフィールドに応答して、前記次の処理パイプラインによる実行のために前記次プログラム命令をスケジューリングするように構成されたスケジューリング回路をさらに具備することを特徴とする請求項７に記載の装置。
【請求項９】
前記次の処理パイプラインが、
前記複数の処理パイプラインのうち、前記現在の処理パイプラインと同一のパイプラインと、
前記複数の処理パイプラインのうち、前記現在の処理パイプラインとは異なるパイプラインと
のうちの１つであることを特徴とする請求項８に記載の装置。
【請求項１０】
前記次の処理パイプラインが、前記次の処理パイプラインによって実行されるプログラム命令のキューを格納するように構成されたキュー回路を有しており、
前記現在の処理パイプラインが、前記次命令タイプフィールドの制御下で、前記次プログラム命令を前記キューに加えることを制御することを特徴とする請求項８または９に記載の装置。
【請求項１１】
前記次プログラム命令が、前記現在の処理パイプラインから退く前記現在プログラム命令に応答して、前記キューに加えられることを特徴とする請求項１０に記載の装置。
【請求項１２】
前記処理の一部が、前記次プログラム命令に関連する１つ以上の状態変数を前記次の処理パイプラインにルーティングすることを含むことを特徴とする請求項７ないし１１のいずれか１項に記載の装置。
【請求項１３】
前記処理の一部が、
前記次プログラム命令をプリデコードすることと、
前記次プログラム命令をプリフェッチすることと、
前記次プログラム命令をディスパッチすることと
のうちの１つ以上を含むことを特徴とする請求項２ないし１２のいずれか１項に記載の装置。
【請求項１４】
前記処理回路が前記現在データ処理動作を実行するときに、現在のプログラムのカウンタ値が前記現在プログラム命令に関連付けて格納され、
前記現在のプログラムのカウンタ値の最下位ビット位置から伸びる前記現在のプログラムのカウンタ値の一部が、前記次命令タイプフィールドを表す値を格納していることを特徴とする請求項１ないし１３のいずれか１項に記載の装置。
【請求項１５】
前記現在プログラム命令を格納するメモリ内のメモリアドレスが、前記メモリアドレスの最下位ビット端に一致する前記次命令タイプフィールドとの論理和演算を行って、前記現在のプログラムのカウンタ値を形成することを特徴とする請求項１４に記載の装置。
【請求項１６】
前記１つ以上のスレッドが複数のスレッドを含んでいることを特徴とする請求項１ないし１５のいずれか１項に記載の装置。
【請求項１７】
前記次命令タイプフィールドが、前記プログラム命令のスレッドのプログラム命令内の固定された所定位置に配置されることを特徴とする請求項１ないし１６のいずれか１項に記載の装置。
【請求項１８】
前記次命令タイプフィールドの１つの値が、前記スレッドが終了することを示す終了タイプであることを特徴とする請求項１ないし１７のいずれか１項に記載の装置。
【請求項１９】
前記現在プログラム命令が間接的な分岐命令である場合、前記次命令タイプフィールドが、前記次プログラム命令を格納する前記間接的な分岐のターゲットメモリアドレスの一部を形成するために用いられることを特徴とする請求項１ないし１８のいずれか１項に記載の装置。
【請求項２０】
前記処理回路が、前記次命令タイプフィールドと前記次プログラム命令との間の不一致に応答して、前記次命令タイプフィールドと前記次プログラム命令とのうちの少なくとも１つの破損を表す例外を生成することを特徴とする請求項１ないし１９のいずれか１項に記載の装置。
【請求項２１】
前記処理の一部が実行された後に、前記次プログラム命令の完全な解読が生じることを特徴とする請求項２ないし２０のいずれか１項に記載の装置。
【請求項２２】
前記処理回路が画像処理装置を有しており、
前記１つ以上のスレッドが複数の並列な画像処理スレッドを含んでいることを特徴とする請求項１ないし２１のいずれか１項に記載の装置。
【請求項２３】
プログラム命令の１つ以上のスレッドに応じてデータを処理するための装置であって、
プログラム命令のスレッド内の現在プログラム命令によって指定された現在データ処理動作を実行するためのデータ処理装置を具備し、
前記現在プログラム命令は、前記スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含んでいることを特徴とする装置。
【請求項２４】
プログラム命令の１つ以上のスレッドに応じてデータを処理する方法であって、
プログラム命令のスレッド内の現在プログラム命令に応答して、前記現在プログラム命令によって指定された現在データ処理動作を実行する段階を有し、
前記現在プログラム命令は、前記スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含んでいることを特徴とする方法。
【請求項２５】
非一時的な形態を有するとともに、プログラム命令の１つ以上のスレッドに応じてデータ処理を実行するデータ処理装置を制御するためのコンピュータプログラムを格納するコンピュータプログラム製品であって、
前記コンピュータプログラムは、プログラム命令のスレッドの現在プログラム命令を含み、
前記現在プログラム命令は、前記スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含んでいることを特徴とするコンピュータプログラム製品。
【請求項２６】
前記スレッドが複数のプログラム命令を含んでおり、
前記スレッド内の全ての前記プログラム命令が次プログラムタイプフィールドを含んでいることを特徴とする請求項２５に記載のコンピュータプログラム製品。
【請求項２７】
請求項１ないし２４のいずれか１項に記載のデータ処理装置を提供するためのプログラムを実行するコンピュータを備える仮想マシン。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理システムの分野に関する。より詳しくは、本発明は、実行されるべき次の命令がデータ処理システム内においてどのように規定されるかに関する。
【背景技術】
【０００２】
実行のためのプログラム命令のスレッドからプログラム命令のシーケンスを実行するデータ処理システムを提供することが知られている。そのようなシステムの内部では、実行されるべき新しい命令を分岐命令が解決する前に処理パイプラインが供給できるように、実行されるべき命令を先取りしかつ分岐に出会ったときに実行の流れを予測する、命令先取（プリフェッチ）回路および分岐予測回路が用いられている。これらの措置は、深い処理パイプラインがサポートされ、かつ高い効率で利用されるようにするためには有効である。しかしながら、回路面積、回路の複雑さ、電力消費、およびこれらのメカニズムに関連付けられる費用の面から、オーバーヘッドはますます重要になっている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
また、複数のプログラムスレッドを同時に実行するデータ処理システムを提供することも知られている。そのようなシステムの一例は画像処理装置であるが、そこにおいては、例えば１００を超えるプログラムスレッドが並列に実行され、かつ各プログラムスレッドは処理される画像イメージの異なる部分に対応している。命令を先取りし分岐を予測する既知のメカニズムは、そのようなシステムには良好に拡張できない。これらのメカニズムに関連するオーバーヘッドは、この多数のプログラムスレッドについて分岐応答を予測することに加えて、多数の別個のスレッドについてプリフェッチ命令を探すときには不利である。しかしながら、実行されるプログラム命令の完了を単に待ち、かつその後で次の命令を取り出すことは、かなりの先取り待ち時間を招く。この欠点はまた、多数の並行スレッドを実行するシステムの使用がより広範囲になるとともに（画像処理の分野を越えて）先取り待ち時間がより明白になるより多くの汎用処理に適用されると、より重要になる。
【課題を解決するための手段】
【０００４】
一態様によれば、本発明は、プログラム命令の１つ以上のスレッドに応じてデータを処理するための装置であって、プログラム命令のスレッド内の現在プログラム命令に応答して、現在プログラム命令によって指定された現在データ処理動作を実行するように構成されたデータ処理回路を具備し、上記現在プログラム命令は、スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含んでいる装置を提供する。
【０００５】
本技術は、現在プログラム命令内に次命令タイプフィールドを提供する。これは、プログラム命令のサイズを減少させようとする、この分野における技術的な先入観に逆行する。この技術的な先入観を念頭におくと、次プログラム命令それ自体を提供することに加えて、現在プログラム命令内に次の命令タイプのフィールドを提供することが、プログラムの冗長さを意味するということは、十分に理解されるであろう。次プログラム命令それ自体が次プログラム命令のタイプを指定するからである。しかしながら、本技術は、現在プログラム命令内の次命令タイプフィールドによる追加のプログラムサイズオーバーヘッドは、いくつかの実際的な利点をもたらすために活用できると認識する。
【０００６】
データ処理回路は、次命令タイプフィールドの制御下で、１つ以上の処理動作を実行し得る。これは、現在プログラム命令が、そうでなければ次プログラム命令が例えば取り出されて解読されるまで待たなければならない、次の命令に関連付けられた処理動作を開始することを可能にする。
【０００７】
いくつかの実施態様では、次命令タイプフィールドに応じて実行される処理の一部が、次プログラム命令を格納しているメモリから次プログラム命令がすべて取り出されあるいは取り出され始める前に着手され得る。
【０００８】
本技術は、多数の処理パイプラインを含むシステムの分野に特別な有用性を有している。複数の処理パイプラインはすべて同一であってもよいが、多くの実施態様においては、複数の異なるタイプの処理パイプラインには、異なるタイプの処理動作を実行するように構成されたそれぞれ異なるタイプの処理パイプラインが提供される。一例として、複数の処理パイプラインには、演算パイプライン、ロード／ストアパイプラインおよびテクスチャリングパイプラインが含まれ得る。
【０００９】
システムが複数の処理パイプラインを含む情況においては、次命令タイプフィールドの制御下で実行される次プログラム命令の処理の一部は、次プログラム命令を実行するために当てられる次の処理パイプラインの選択を含み得る。したがって、例えば、次命令タイプフィールドは、次プログラム命令を適切な次の処理パイプラインにスケジューリングするスケジューリング回路を制御するために用いられる。一例として、算術命令は演算パイプラインに向けられてもよいし、ロード／ストア命令はロード／ストアパイプラインに向けられてもよく、かつテクスチャリング命令はテクスチャリングパイプラインに向けられてもよい。
【００１０】
現在の処理パイプラインによって現在プログラム命令を実行する間に、次命令タイプフィールドが次プログラム命令を向ける次処理パイプラインは、現在の処理パイプラインと同一の処理パイプラインであってもよいし、または現在の処理パイプラインとは異なる処理パイプラインであってもよい。
【００１１】
各処理パイプラインは、そのパイプラインによって実行されるプログラム命令のキューを格納するために提供された、関連するキュー回路を有していてもよい。そのようなシステムの内部では、現在の処理パイプラインは、次命令タイプフィールドに一致するキューへの次プログラム命令の追加を生じさせるために、次命令タイプフィールドによって制御されてもよい。
【００１２】
そのようなキューへの次プログラム命令の追加は、便利には、現在の処理パイプラインから退いた現在プログラム命令に応じて実行され、１つのプログラム命令が退くとすぐに、そのスレッドのための他のプログラム命令が実行される命令のキューに追加される。多数の異なるスレッドからのプログラム命令は異なるパイプライン内の異なるパイプラインステージにおいて同時に処理されるので、そのスレッドの次プログラム命令が実行のためにキューに入れられる前に、そのスレッドの現在プログラム命令が退くまで待機しても、全体的なデータ処理量が大幅に減少することはない。異なるスレッドからのプログラム命令がハードウェアにおいて既に実行されているので、ハードウェアのハイレベルな利用および効率が維持される。
【００１３】
次命令タイプフィールドによって制御され得る処理の一部の別の例には、次プログラム命令に関係する１つ以上の状態変数の次の処理パイプラインへのルーティングが含まれる。このように、スレッドがパイプラインの間で移動する場合、現在プログラム命令内の次命令タイプフィールドによって提供される移動のより早い表示により、そのスレッドに関連する状態変数は新しいパイプラインでより素早く利用可能となり得る。
【００１４】
次命令タイプフィールドによって制御され得る処理の一部の別の例には、次プログラム命令の事前の解読（プリデコード）、次プログラム命令の事前の取り出し（プリフェッチ）、および次プログラム命令のディスパッチが含まれる。
【００１５】
現在プログラム命令は、現在のプログラムのカウンタ値を関連付け得る。その最下位ビット位置から伸びる現在のプログラムのカウンタ値の一部は、次命令タイプフィールドを表す値を格納するために用いられ得る。プログラムカウンタの下位部分は、比較的大きなプログラム命令が整列しているシステムにおいては、多くの場合に使用されない。
【００１６】
そのようなシステムの内部では、プログラムカウンタ値は、現在プログラム命令を格納しているメモリ内の記憶アドレスと記憶アドレスの最下位ビット端に一致する次の命令タイプフィールドを組み合わせる論理和演算によって抽出され得る。
【００１７】
留意すべきは、本技術は、プログラム命令の単一スレッドを実行するシステムに用いることができる一方で、複数のスレッドが実行されるときに特に有用であることである。
【００１８】
本技術の実施は、次命令タイプフィールドがプログラム命令内の固定された所定位置に位置する場合に単純化される。
【００１９】
プログラム命令のスレッドは無期限には実行されず、従って、スレッドが終了するときに実行される動作の制御は、次命令タイプフィールドの１つの値がこのスレッドは現在命令で終了することを示す終了タイプである実施態様において便利にサポートされ得る。
【００２０】
ここで当業者が留意すべきは、現在プログラム命令の１つのタイプは、間接的な分岐動作であり得ることである。そのような間接的な分岐命令では、次プログラム命令を格納している記憶アドレスに対するポインタは、次の間接的な分岐命令自体によって計算される。次プログラム命令のタイプが知られていて間接的な分岐命令の次命令タイプフィールド内に符号化されているとき、間接的な分岐命令のためのターゲットアドレスは、次命令タイプフィールドで計算されたアドレスを組み合わせることによって形成され、それによって、プログラムカウンタ値に基づいて処理の一部を制御するメカニズムは、間接的な分岐命令によってターゲットアドレスとして計算されたポインタに基づいて再使用され得る。
【００２１】
上述したように、次命令タイプフィールドおよび次プログラム命令は、共にスレッドのプログラム命令の内部に存在する冗長情報の程度を表している。この冗長度は、次命令タイプフィールドと次プログラム命令の間の何らかの誤った組合せを検知して、これらのアイテムのうちの少なくとも１つの破損を表す例外を生じさせるために活用することができる。このように、保護の程度は命令のデータ破損に対して達成され得る。
【００２２】
次命令タイプフィールドの制御下で実行される処理は、多くの場合、次プログラム命令の解読が生じる前に実行される。このようにして、次命令タイプフィールドは、次プログラム命令の完全な取り出し、発行、および解読が生じるまで待たなければならないことに関連する待ち時間について少なくとも部分的に取り組む方法を提供する。
【００２３】
ここで留意すべきは、本技術が一般的に汎用プロセッサ、デジタル信号プロセッサ等のようなデータ処理装置の分野に用途を有することである。しかしながら、本技術は、処理装置が画像処理装置を有しており、かつ１つ以上のスレッドが多数の画像処理スレッドを含んでいるシステムに特に適している。これらの高度な並列マルチスレッドシステムは、従来の命令先取メカニズムおよび分岐予測メカニズムには不適当であり、かつ現在プログラム命令内の次命令タイプフィールドの使用から著しく利益を得ることとなる。
【００２４】
別の態様によれば、本発明は、プログラム命令の１つ以上のスレッドに応じてデータを処理するための装置であって、プログラム命令のスレッド内の現在プログラム命令によって指定された現在データ処理動作を実行するためのデータ処理装置を具備し、上記現在プログラム命令は、スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含む装置を提供する。
【００２５】
さらに別の態様によれば、本発明は、プログラム命令の１つ以上のスレッドに応じてデータを処理する方法であって、プログラム命令のスレッド内の現在プログラム命令に応答して、現在プログラム命令によって指定された現在のデータ処理動作を実行する段階を有し、上記現在プログラム命令は、スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含む方法を提供する。
【００２６】
さらに別の態様によれば、本発明は、非一時的な形式を有し、データ処理装置がプログラム命令の１つ以上のスレッドに応じてデータ処理を実行するように制御するためのコンピュータプログラムを格納するコンピュータプログラム製品であって、上記コンピュータプログラムは、プログラム命令のスレッドの現在プログラム命令を含み、上記現在プログラム命令は、スレッド内で実行される次プログラム命令のタイプを指定する次命令タイプフィールドを含むコンピュータプログラム製品を提供する。
【００２７】
さらに別の態様によれば、本発明は、上記のようなデータを処理する装置の仮想マシン実施を提供するべくプログラムを実行するコンピュータを備える仮想計算機を提供する。ここで留意すべきは、処理装置の仮想化がより実際的になってきていることであり、したがって、本技術の１つのタイプの実施は、仮想マシン実施であってよく、汎用プロセッサは、上記のような処理装置として機能するようにコンピュータプログラムによって制御される。
【００２８】
以下では、本発明の実施形態について、単なる実施例として添付の図面を参照しつつ説明する。
【図面の簡単な説明】
【００２９】
【図１】現在プログラム命令内の次命令タイプフィールドを利用する画像処理装置を含む処理装置を概略的に示す図である。
【図２】並列に実行する多数のプログラムスレッドを概略的に示す図である。
【図３】現在プログラム命令内の次命令タイプフィールド概略的に示す図である。
【図４】画像処理装置のコアを概略的に示す図である。
【図５】現在プログラム命令を格納するメモリアドレスを次命令タイプフィールドに組み合わせてプログラムカウンタ値を生じさせることを概略的に示す図である。
【図６】処理パイプラインの選択を概略的に示す流れ図である。
【図７】不一致例外生成に関連した処理を概略的に示す流れ図である。
【図８】異なるタイプの次プログラム命令を表すために用いられる、異なるタイプの次命令タイプフィールドの実施例を示す図である。
【図９】本技術の仮想計算機タイプの実施を提供する装置を概略的に示す図である。
【発明を実施するための形態】
【００３０】
図１は、メモリ６に接続されたシステムオンチップ集積回路４を含むデータ処理システム２を概略的に示している。システムオンチップ集積回路４は、汎用プロセッサコア８、画像処理装置１０、システムオンチップキャッシュメモリ１２、およびメモリコントローラ１４を有しており、それらの全てがシステムバス１６を介してリンクしている。メモリコントローラ１４は、メモリ６へのアクセスを提供する。メモリ６は、メインプロセッサ８によって実行される汎用プログラム１８、画像処理装置１０によって実行される画像プログラム２０、汎用コア８による操作のための汎用データ２２、および画像処理装置１０による操作のための画像データ２４を格納している。
【００３１】
画像処理装置１０は、各コアの内部で、およびコアの間で、それぞれ並列にマルチスレッドのプログラム命令を実行する多数の画像処理装置コア２６を有している。画像処理装置コア２６はそれぞれ多重処理パイプラインを有しており、かつ処理パイプラインはそれぞれ、その命令パイプラインの異なる段階において異なるプログラムスレッドからのプログラム命令を実行する。したがって、画像処理装置１０によって任意の所与時間に実行されるプログラムスレッドの総数は多く、例えば１００を超える。
【００３２】
画像処理装置コア２６は、それぞれ、それ自体の使用のために関連付けられた１次キャッシュ２８を有している。また、画像処理装置コア２６は、画像処理装置１０の一部として提供される２次キャッシュ３０を共有している。ここで留意すべきは、画像処理装置１０は、その性能を改善するために多くのさらなるローカルキャッシュおよびデータストアを含み得ることである。これらの詳細は、明瞭さのために図１から省略されている。
【００３３】
図２は、画像処理装置１０によって並列に実行され得るプログラム命令の複数のスレッドを概略的に示している。この実施例においては、並列に実行されるプログラム命令のＮ＋１のスレッドがある。スレッド０は、Ｘ＋１のプログラム命令を含んでいる。スレッド０のこれらのプログラム命令は、終了条件が満たされるまでループで実行される。この技術分野の当業者が留意すべきは、同一プログラムの多くの段階が、画像イメージの異なる領域において同一操作を実行する別個のスレッドとして並列に実行されることが典型的であるということである。この場合、異なるプログラムスレッドは、そこに配置された同数のプログラム命令を有する。また、異なるプログラムスレッドが異なるコードを用いてかつ異なる目的のために実行されることも可能である。そのようなスレッドも並列に実行される。一つの実施例として、算術演算（例えば頂点回転）を実行する１セットのスレッドおよびピクセル値上でテクスチャリング動作を実行するスレッドの異なるセットがあり得る。
【００３４】
図３は、現在プログラム命令３２を概略的に示している。現在プログラム命令３２は、その第１のバイト内に４ビットの現在命令タイプフィールド３４と、４ビットの次命令タイプフィールド３６とを含んでいる。現在命令タイプフィールド３４は、現在命令３２に対応する命令タイプ、例えば、現在命令３２が算術命令、ロード／ストア命令、テクスチャ命令、分岐命令等であるかどうかを符号化している。次命令タイプフィールド３６は、現在プログラム命令３２に続く次プログラム命令に関するこの同一タイプの情報を、実行されるプログラム命令のスレッド内に符号化している。次命令タイプフィールド３６は、現在プログラム命令３２のサイズを増加させるが、次プログラム命令が解読される前に、または次プログラム命令が取り出される前に、次プログラム命令に関連する処理の一部を実行する可能性をもたらす。これは、次プログラム命令の取り出しおよび解読に関連する待ち時間を減少させることができる。
【００３５】
図４は画像処理装置コア２６を概略的に示している。画像処理装置コア２６は、第１の算術および分岐パイプライン３８、第２の算術および分岐パイプライン４０、ロード／ストアおよび変数パイプライン４２、およびテクスチャパイプライン４４を含む多数の処理パイプラインを有している。これらの異なる処理パイプライン３８，４０，４２，４４は、異なるタイプであり、かつ異なるタイプの処理動作を実行する。算術および分岐パイプライン３８，４０は、それぞれ算術と分岐の処理動作を実行する。ロード／ストアおよび変数パイプライン４２は、固定された、またはプログラム可能な変数に関連する動作に加えて、メモリ６へのロードおよびストアに関連する処理動作を実行する。テクスチャパイプライン４４は、生成される画像イメージ内のピクセル値を生成する色彩補正プログラムによって用いられる画像データ２４の内部に保存されたテクスチャーデータを利用して、テクスチャピクセル処理動作を実行する。
【００３６】
各処理パイプライン３８，４０，４２，４４は、関連する命令キュー４６，４８，５０，５２を有しており、それらの内部には、その処理パイプライン３８，４０，４２，４４によって実行されるプログラム命令が、処理パイプライン３８，４０，４２，４４への発行を保留しつつ配置される。スケジューリング回路５４は、各命令キュー４６，４８，５０，５２にプログラム命令を加える責任を負っている。したがって、スケジューリング回路５４は、プログラム命令が配置される適正な処理パイプライン３８，４０，４２，４４を選択する。テクスチャリング命令は、命令キュー５２に配置され、かつロード／ストア命令および変数に関連する命令は、命令キュー５０内に配置されるべきである。算術命令およびブランチ命令は、命令キュー４６または命令キュー４８のうちの１つに配置されるべきである。
【００３７】
新しいスレッドが初めて実行されるとき、そのスレッドの第１命令は、命令キュー４６，４８，５０，５２のうちのいずれにその第１命令を配置するかを決定するために、スケジューリング回路５４によって少なくとも部分的に解読される必要がある。あるいは、新しいスレッドにおける第１命令のポインタは、以下にさらに説明するように、その最下位ビットにその第１命令のタイプを符号化する。プログラムスレッドの第１プログラム命令が実行され、かつその適正な処理パイプライン３８，４０，４２，４４内でその退避段階に達すると、その現在プログラム命令に関連する次命令タイプフィールド３６は、現在プログラム命令の次命令タイプフィールド３６に一致する（つまり指定された）命令キュー４６，４８，５０，５２に次プログラム命令をスケジューリングするべく、スケジューリング回路５４を制御するために用いることができる。第１プログラム命令が算術命令であり、かつ第２プログラム命令もまた算術命令であった場合、次命令タイプフィールド３６は、第２プログラム命令が第１プログラム命令と同一の命令キューに配置されるべきことを示す（これは、スレッド状態変数（データ）を他の演算パイプラインに移動させなければならないことを回避する）。しかしながら、プログラムスレッドは、その内部でスレッドが実行を要求する異なるタイプのプログラム命令として、処理パイプライン３８，４０，４２，４４の間で移動させることは可能である。したがって、スレッドの第１部分は、１つ以上のテクスチャリング命令が後続する算術命令とすることができる。プログラムスレッドが移動する時に、算術命令の最後で次命令タイプフィールド３６によって示されるように、スレッドに関連するスレッド状態変数は、算術および分岐パイプライン３８，４０のうちの関連する１つからテクスチャリングパイプライン４４へと移動する。スレッド状態変数には、プログラムカウンタ値、スレッド識別子、スレッドに関連するディスクリプタ等が含まれる。このスレッド状態は、スレッドが移動する処理パイプライン４４によって要求される。スレッド状態変数のこの移動は、直前の処理パイプライン３８，４０上で実行された最後のプログラム命令内の次命令タイプフィールドによって制御され、したがって実際に取り出されあるいは解読された新しい処理パイプライン４４上で実行される第１プログラム命令に先立って開始される。
【００３８】
ここで留意すべきは、スケジューリング回路５４の制御が次命令タイプフィールド３６に基づいて実行されることである。次命令タイプフィールド３６は、大きな整列命令を使用する結果として処理パイプライン３８，４０，４２，４４内の各段階で各プログラム命令に関係するプログラムカウンタ値の未使用の最下位ビットを用いることにより、便利なやり方で命令パイプライン３８，４０，４２，４４の内部に格納され得る。この例示的な実施形態におけるプログラム命令の長さは１２８ビットの倍数であるので、最下位の４ビットのプログラムカウンタＰＣ［３：０］は使用されず（プログラム命令はメモリ６の内部で整列した１２８ビットである）、プログラムカウンタ値内のこのビットスペースは、プログラムカウンタ値ＰＣに対応する現在プログラム命令に関係した次命令タイプフィールド３６を格納するために便利に用いることができる。したがって、図４に示したように、現在プログラム命令が処理パイプライン３８，４０，４２，４４の端部に達してパイプラインから退くとき、この段階では、プログラムカウンタＰＣ［３：０］の最下位ビット部分は、次プログラム命令のタイプを示すとともに次の命令を受けるように命令キュー４６，４８，５０，５２に命令するべく、スケジューリング回路５４に供給することができる。
【００３９】
次命令タイプフィールド３６はまた、処理パイプライン３８，４０，４２，４４による現在プログラム命令の進行に沿った他の時点において、次プログラム命令に関係する処理の一部を制御するために用いることができる。このように制御される次プログラム命令の処理の一部には、次プログラム命令の前もっての解読（プリデコード）、次プログラム命令の前もっての取り出し（プリフェッチ）、および次プログラム命令の発送（ディスパッチ）のうちの一つ以上が含まれる。次プログラム命令の処理の一部の他の可能性は、この技術分野の当業者には明らかであり、かつ本技術の範囲内に包含される。
【００４０】
また、画像処理装置コア２６は、レジスタファイル５６を有している。レジスタファイル５６は、異なる処理パイプライン３８，４０，４２，４４間でのデータ値の通信に加えてそれらのパイプライン間でのデータ値の操作のために異なる処理パイプライン３８，４０，４２，４４によって用いられるレジスタを有している。
【００４１】
図５は、現在プログラム命令３２に関連するメモリアドレス５８（現在命令のメモリアドレスに現在命令の長さを加えることによって次の命令を指示するために用いることができる）が、その処理パイプライン３８，４０，４２，４４に沿って進行するにつれて現在プログラム命令３２に格納され、かつ伴うプログラムカウンタ値６０を生み出すために、次命令タイプフィールド３６の最下位の４ビットに関して、どのようにして論理和演算に従うかを概略的に示している。プログラム命令の長さが１２８ビットの倍数であるとともにメモリ６内に整列した１２８ビットであるので、最下位の４ビットのメモリアドレス５８は未使用であり、従って論理和演算を用いて次命令タイプフィールド３６が詰め込まれる。現在命令がその処理パイプラインから退くときに、プログラムカウンタ値は、次の命令を適切な命令キュー４６，４８，５０，５４に導くとともに、記憶システムからの次の命令の取り出しを開始するために、スケジューリング回路５４によって直接用いられる。
【００４２】
図６は、スケジューリング回路５４によって実行されるパイプライン選択を概略的に示す流れ図である。ステップ６２では、最下位の４ビットのプログラムカウンタ値６０が読まれる（これらは、現在プログラム命令が退くと、プロセス段階３８，４０，４２，４４のうちの１つの端部から供給される）。ステップ６４では、ＰＣ［３：０］によって表される次命令タイプフィールドは、現在プログラム命令３２がプログラムスレッドにおいて最後であるかどうかを判断するために終了コードと比較される。現在プログラム命令３２がそのプログラムスレッドにおいて最後である場合、そのスレッドのためのパイプラインの選択は終了する（それは新しいスレッドのための別個のプロセスによって取り扱われる）。スレッドが終了していない場合、ステップ６６はＰＣ［３：０］を用いて次プログラム命令が出されるパイプラインを選択する。この段階では、図６の流れ図は、ステップ６６で選択されたパイプラインに配置された次プログラム命令に関して実行される処理を説明し続ける。ステップ６８では、このプログラム命令が解読される。その後、ステップ７０は解読された命令の長さと一致する量だけプログラムカウンタをインクリメントする。同時に図５に示されている論理和演算は、インクリメントされたプログラムカウンタ値の最下位の４ビットに次命令タイプフィールド３６を入れるたに実行することができる。これにより、プログラムカウンタ値は、次命令のタイプを示す最下位の４ビットのプログラムカウンタで次プログラム命令のメモリアドレスを指示する。次命令タイプフィールド３６は、図３に示されたビット位置からの命令から読むことができる。これらのビット位置は、全ての命令のために固定されかつ予め決定されているので容易に識別される。
【００４３】
ステップ７２は、ステップ６８の命令デコーダが間接的な分岐命令であるかどうかを判断する。もし確認されれば間接的な分岐命令はステップ７４に進み、ステップ７０で生成されたプログラムカウンタ値を、その分岐命令のためのターゲットアドレスとして、かつその最下位の４ビットに次命令タイプフィールド３６を含む、分岐命令によって計算されたものと交換する。ステップ７２またはステップ７４の後で、関連する処理パイプライン３８，４０，４２，４４から命令が退くときに、処理はステップ６２に進む。
【００４４】
図７は、解読された命令と前の命令からの次命令タイプフィールドとの間に不一致（ミスマッチ）が生じた際の例外の生成を概略的に示す流れ図である。ステップ７６は命令を解読する。ステップ７８は、その命令の解読に由来する命令のタイプと、スレッド内の前の命令から読まれたその命令のための次命令タイプフィールドに示された命令のタイプとを比較する。これらの異なるメカニズムによって確認されたタイプ間に不一致がある場合、処理はステップ８０に進み、命令タイプの不一致が生じたことを示す例外が生成される。これは、次命令タイプフィールド３６またはプログラム命令３２それ自体のいずれか（または両方−２つの破損がそろって起こらないとした場合）における破損に対する抵抗の程度を提供する。不一致がない場合、ステップ８２は命令を実行する。
【００４５】
図８は、次命令タイプフィールド３６によって表される異なるタイプの命令を示している。ロード／ストアパイプライン４２によって実行される命令に対応する１つのタイプが存在する。テクスチャリングパイプライン４４によって実行される少なくとも１つの命令タイプが存在する。算術および分岐パイプライン３８，４０の１つによって実行される異なる長さのプログラム命令に対応する、複数の命令タイプが存在する。算術および分岐パイプライン３８，４０の１つによって実行される間接的な分岐に対応する命令タイプも存在する。４ビットの次命令タイプフィールド３６によって表される残りの可能な符号化は未使用である。ここで留意すべきは、次命令タイプフィールド３６のための異なる４ビットパターンは、異なるタイプの命令を表すために任意の異なる方法で割り付けられることである。
【００４６】
図９は、使用され得る仮想マシン実施を示している。上記の実施形態は、関心のある技術をサポートする特定処理ハードウェアを動作させる装置および方法の点から本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実施を提供することが可能である。これらの仮想マシン実施は、仮想マシンプログラム５１０をサポートするホストオペレーティングシステム５２０を実行するためのホストプロセッサ５３０上で動作する。典型的に、合理的な速度で動作する仮想マシン実施を提供するためには大きく強力なプロセッサが要求されるが、そのようなアプローチは、互換性または再使用のために他のプロセッサに固有のコードを実行する希望があるときといった、ある状況下においては正当化され得る。仮想マシンプログラム５１０は、仮想マシンプログラム５１０によってモデル化されたデバイスである実際のハードウェアによって提供されるアプリケーションプログラムインターフェイスと同一のアプリケーションプログラムインターフェイスをアプリケーションプログラム５００に提供する。したがって、上記のメモリーアクセス制御を含むプログラム命令は、仮想マシンハードウェアでそれらの相互作用をモデル化するように仮想マシンプログラム５１０を用いてアプリケーションプログラム５００の内部から実行され得る。
【符号の説明】
【００４７】
２  データ処理システム
４  システムオンチップ（ＳｏＣ）集積回路
６  メモリ
８  汎用プロセッサ（ＣＰＵ）
１０  画像処理装置（ＧＰＵ）
１２  キャッシュメモリ
１４  メモリコントローラ
１６  システムバス
１８  汎用プログラム
２０  画像プログラム
２２  汎用データ
２４  画像データ
２６  画像処理装置コア
２８  １次キャッシュ
３０  ２次キャッシュ
３８  第１の算術および分岐パイプライン
４０  第２の算術および分岐パイプライン
４２  ロード／ストアおよび変数パイプライン
４４  テクスチャリングパイプライン
４６，４８，５０，５２  命令キュー
５４  スケジューリング回路
５６  画像処理装置レジスタファイル
【図１】
2013542500.tif 000003
【図２】
2013542500.tif 000004
【図３】
2013542500.tif 000005
【図４】
2013542500.tif 000006
【図５】
2013542500.tif 000007
【図６】
2013542500.tif 000008
【図７】
2013542500.tif 000009
【図８】
2013542500.tif 000010
【図９】
2013542500.tif 000011
【国際調査報告】
2013542500.tif 000012
2013542500.tif 000013
2013542500.tif 000014