(57)【要約】  例えば、グラフィック、及び／又はビデオ処理のような二つのプロセッサの負荷分散用の方法、装置、デバイス、及び／又はシステムの実施の形態を、開示する。【選択図】  図１
2008513890.tif 000002
【特許請求の範囲】
【請求項１】
プログラム可能なＧＰＵとＣＰＵとの間で負荷を分散する方法であって、
各々が少なくとも部分的に前記ＧＰＵ及び前記ＣＰＵによって処理され得る別個のワークユニットをもつ両端キューを形成するステップと、
前記ＧＰＵ及び前記ＣＰＵに前記キューの両端からそれぞれワークユニットを選択させることによって、前記ワークユニットを処理するステップと、
を含む方法。
【請求項２】
前記ＣＰＵが前記ＧＰＵへ問い合わせる処理を含む、請求項１に記載の方法。
【請求項３】
前記ＣＰＵが前記ＧＰＵへ実質的に所定の間隔で問い合わせる、請求項２に記載の方法。
【請求項４】
前記ＣＰＵは、前記ＧＰＵによって開始された最新のワークユニットの処理の量に少なくとも部分的に基づく時間に、前記ＧＰＵへ問い合わせる、請求項２に記載の方法。
【請求項５】
前記ＣＰＵが、可変の時間に、前記ＧＰＵへ問い合わせる、請求項２に記載の方法。
【請求項６】
前記両端キューが、それぞれのワークユニットを効率的に処理するために前記ＧＰＵ及び前記ＣＰＵのうち一方の能力に少なくとも部分的に基づいて順序付けされる、請求項１に記載の方法。
【請求項７】
前記それぞれのワークユニットを処理するための前記ＧＰＵ及び前記ＣＰＵのうち一方の前記能力は、前記特定のそれぞれのワークユニットに対する光線のバッチのサイズに少なくとも部分的に基づいて測定される、請求項６に記載の方法。
【請求項８】
前記ＣＰＵは、該ＣＰＵがワークユニットを完了した後に、前記ＧＰＵへ問い合わせる、請求項２に記載の方法。
【請求項９】
前記ＣＰＵは、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットの処理を該ＧＰＵが停止していないことを示す場合に、別のワークユニットを開始する、請求項８に記載の方法。
【請求項１０】
前記ＧＰＵ及びＣＰＵはそれぞれ、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットの処理を前記ＧＰＵが停止していることを示す場合に、別のワークユニットを開始する、請求項８に記載の方法。
【請求項１１】
前記ＧＰＵは、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットを前記ＧＰＵが完了していることを示す場合に、別のワークユニットを開始する、請求項８に記載の方法。
【請求項１２】
前記ＧＰＵによって処理される前記ワークユニットの少なくとも幾つかについて、処理が前記ＣＰＵによって完了される、請求項２記載の方法。
【請求項１３】
前記ＧＰＵによって処理される前記ワークユニットの少なくとも幾つかについて、前記ＣＰＵが光線とプリミティブとの交差を計算する、請求項２に記載の方法。
【請求項１４】
前記ＧＰＵ及び前記ＣＰＵによって実行される前記処理は、少なくとも部分的に一時的に一致する、請求項１に記載の方法。
【請求項１５】
命令を格納している記録媒体を備える製品であって、
該命令は、
実行時に、プログラム可能なＧＰＵとＣＰＵとの間で負荷を分散する方法の実行をもたらす命令であり、
各々が少なくとも部分的に前記ＧＰＵ及び前記ＣＰＵによって処理され得る別個のワークユニットをもつ両端キューを形成し、
前記ＧＰＵ及び前記ＣＰＵに前記キューの両端からそれぞれワークユニットを選択させることによって、前記ワークユニットを処理する、
製品。
【請求項１６】
前記命令は、実行時に、前記ＣＰＵが前記ＧＰＵへ前記処理の間に問い合せることを更にもたらす、請求項１５に記載の製品。
【請求項１７】
前記命令は、実行時に、前記ＣＰＵが前記ＧＰＵへ実質的に所定の間隔で問い合せることを更にもたらす、請求項１６に記載の製品。
【請求項１８】
前記命令は、実行時に、前記ＣＰＵが前記ＧＰＵによって開始された最新のワークユニットの処理の量に少なくとも部分的に基づく時間に前記ＧＰＵへ問い合せることを更にもたらす、請求項１６に記載の製品。
【請求項１９】
前記命令は、実行時に、前記ＣＰＵが前記ＧＰＵへ可変の時間に問い合せることを更にもたらす、請求項１６に記載の製品。
【請求項２０】
前記命令は、実行時に、前記両端キューが、それぞれのワークユニットを効率的に処理するために前記ＧＰＵ及び前記ＣＰＵのうち一方の能力に少なくとも部分的に基づいて順序付けされることを更にもたらす、請求項１５に記載の製品。
【請求項２１】
前記命令は、実行時に、前記それぞれのワークユニットを処理するための前記ＧＰＵ及び前記ＣＰＵのうち一方の前記能力が、前記特定のそれぞれのワークユニットに対する光線のバッチのサイズに少なくとも部分的に基づいて測定されることを更にもたらす、請求項２０に記載の製品。
【請求項２２】
前記命令は、実行時に、前記ＣＰＵがワークユニットを完了した後に、該ＣＰＵが前記ＧＰＵへ問い合わせることを更にもたらす、請求項１６に記載の製品。
【請求項２３】
前記命令は、実行時に、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットの処理を該ＧＰＵが停止していないことを示す場合に、前記ＣＰＵが別のワークユニットを開始することを更にもたらす、請求項２２に記載の製品。
【請求項２４】
前記命令は、実行時に、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットの処理を前記ＧＰＵが停止していることを示す場合に、前記ＧＰＵ及びＣＰＵがそれぞれ別のワークユニットを開始することを更にもたらす、請求項２２に記載の製品。
【請求項２５】
前記命令は、実行時に、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットを前記ＧＰＵが完了していることを示す場合に、前記ＧＰＵが別のワークユニットを開始することを更にもたらす、請求項２２に記載の製品。
【請求項２６】
前記命令は、実行時に、前記ＧＰＵによって処理される前記ワークユニットの少なくとも幾つかについて、処理が前記ＣＰＵによって完了されることを更にもたらす、請求項１６に記載の製品。
【請求項２７】
前記命令は、実行時に、前記ＧＰＵによって処理される前記ワークユニットの少なくとも幾つかについて、前記ＣＰＵが光線とプリミティブの交差を計算することを更にもたらす、請求項１６に記載の製品。
【請求項２８】
前記命令は、実行時に、前記ＧＰＵ及び前記ＣＰＵによって実行される前記処理が、少なくとも部分的に一時的に一致することを更にもたらす、請求項１５に記載の製品。
【請求項２９】
ＣＰＵと、プログラム可能なＧＰＵと、を備える装置であって、
前記ＣＰＵ及びＧＰＵは、各々が少なくとも部分的に前記ＧＰＵ及び前記ＣＰＵによって処理され得る別個のワークユニットをもつ両端キューを形成するようになっており、
前記ＣＰＵ及びＧＰＵは、前記キューの両端からそれぞれワークユニットを選択するようになっている、
装置。
【請求項３０】
前記ＣＰＵが前記ＧＰＵへ問い合わせるように更になっている、請求項２９に記載の装置。
【請求項３１】
前記ＣＰＵが前記ＧＰＵへ実質的に所定の間隔で問い合わせるようになっている、請求項３０に記載の装置。
【請求項３２】
前記ＣＰＵは、前記ＧＰＵが開始した最新のワークユニットの処理の量に少なくとも部分的に基づく時間に、前記ＧＰＵへ問い合わせるようになっている、請求項３０に記載の装置。
【請求項３３】
前記ＣＰＵが、可変の時間に、前記ＧＰＵへ問い合わせるようになっている、請求項３０に記載の装置。
【請求項３４】
前記ＣＰＵは、該ＣＰＵがワークユニットを完了した後に、前記ＧＰＵへ問い合わせるようになっている、請求項３０に記載の装置。
【請求項３５】
前記ＣＰＵは、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットの処理を該ＧＰＵが停止していないことを示す場合に、別のワークユニットを開始するようになっている、請求項３４に記載の装置。
【請求項３６】
前記ＧＰＵ及びＣＰＵはそれぞれ、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットの処理を前記ＧＰＵが停止していることを示す場合に、別のワークユニットを開始するようになっている、請求項３４に記載の装置。
【請求項３７】
前記ＧＰＵは、前記問い合わせの結果が前記ＧＰＵによって開始された前記最新のワークユニットを前記ＧＰＵが完了していることを示す場合に、別のワークユニットを開始するようになっている、請求項３４に記載の装置。
【請求項３８】
前記ＧＰＵによって処理される前記ワークユニットの少なくとも幾つかについて、前記ＣＰＵが光線とプリミティブの交差を計算するようになっている、請求項３０に記載の装置。
【請求項３９】
前記プログラム可能なＧＰＵが、デスクトップコンピュータ、モバイルコンピュータ、ゲームコンソール、ハンドヘルドデバイス、無線通信デバイス、ネットワークデバイス、ディスプレイシステム、マザーボード、グラフィックカード、及び集積回路チップのうち少なくとも一つに組み込まれている、請求項２９に記載の装置。
【請求項４０】
処理用の第２の手段に結合された処理用の第１の手段を備え、
処理用の前記第２の手段はグラフィック処理用の手段を有しており、
前記第１の手段及び前記第２の手段は、各々が少なくとも部分的に前記第１の手段及び前記第２の手段によって処理され得る別個のワークユニットをもつ両端キューを形成するようになっており、
前記第１の手段及び前記第２の手段は更に、前記キューの両端からそれぞれワークユニットを選択するようになっている、
装置。
【請求項４１】
前記第１の手段が更に、前記第２の手段へ問い合せるようになっている、請求項４０に記載の装置。
【請求項４２】
前記第１の手段が、実質的に所定の間隔で、前記第２の手段に問い合せるようになっている、請求項４１に記載の装置。
【請求項４３】
前記第１の手段は、前記第２の手段によって開始された最新のワークユニットの処理の量に少なくとも部分的に基づく時間に、前記第２の手段へ問い合わせるようになっている、請求項４１に記載の装置。
【請求項４４】
前記第１の手段が、可変の時間に、前記第２の手段へ問い合わせるようになっている、請求項４１に記載の装置。
【請求項４５】
前記第１の手段は、該第１の手段がワークユニットを完了した後に、前記第２の手段へ問い合わせるようになっている、請求項４１に記載の装置。
【請求項４６】
前記第１の手段は、前記問い合わせの結果が前記第２の手段によって開始された前記最新のワークユニットの処理を該第２の手段が停止していないことを示す場合に、別のワークユニットを開始するようになっている、請求項４５に記載の装置。
【請求項４７】
前記第１の手段及び第２の手段はそれぞれ、前記問い合わせの結果が前記第２の手段によって開始された前記最新のワークユニットの処理を前記第２の手段が停止していることを示す場合に、別のワークユニットを開始するようになっている、請求項４５に記載の装置。
【請求項４８】
前記第２の手段は、前記問い合わせの結果が前記第２の手段によって開始された前記最新のワークユニットを前記第２の手段が完了していることを示す場合に、別のワークユニットを開始するようになっている、請求項４５に記載の装置。
【請求項４９】
前記第２の手段によって処理される前記ワークユニットの少なくとも幾つかについて、前記第１の手段が光線とプリミティブの交差を計算するようになっている、請求項４１に記載の装置。
【請求項５０】
前記第２の手段がプログラム可能なＧＰＵである、請求項４０に記載の装置。
【請求項５１】
前記プログラム可能なＧＰＵが、デスクトップコンピュータ、モバイルコンピュータ、ゲームコンソール、ハンドヘルドデバイス、無線通信デバイス、ネットワークデバイス、ディスプレイシステム、マザーボード、グラフィックカード、及び集積回路チップのうち少なくとも一つに組み込まれている、請求項５０に記載の装置。
【請求項５２】
プログラム可能なＧＰＵを使用して光線とピリミティブとの交差の計算を削減する方法であって、
前記プログラム可能なＧＰＵ上で、複数の光線と少なくとも一つのグラフィックオブジェクトを境界付ける表面のセットとの交差を計算するステップを、
含む方法。
【請求項５３】
前記少なくとも一つのグラフィカルオブジェクトは、複数のグラフィカルオブジェクトである、請求項５２に記載の方法。
【請求項５４】
前記計算が並列に実行される、請求項５３に記載の方法。
【請求項５５】
前記並列の計算は、プログラム可能なピクセルシェーダによって実行される、請求項５４に記載の方法。
【請求項５６】
前記プログラム可能なピクセルシェーダは、大きさの一つが２の倍数であるピクセル配列を用いて、前記交差を計算する、請求項５５に記載の方法。
【請求項５７】
前記境界付ける表面のうち少なくとも幾つかが、凸面である、請求項５３に記載の方法。
【請求項５８】
前記境界付ける凸面のセットのうち少なくとも幾つかは、バウンディングボックスである、請求項５７に記載の方法。
【請求項５９】
前記境界付ける表面のセットは、階層状である、請求項５３に記載の方法。
【請求項６０】
ＣＰＵ上で、前記複数の光線のうち少なくとも幾つかと前記複数のグラフィカルオブジェクトのうち少なくとも幾つかとの交差を、前記ＧＰＵによって計算された交差に少なくとも部分的に基づいて計算するステップを更に含む、請求項５３に記載の方法。
【請求項６１】
前記ＧＰＵの計算と前記ＣＰＵの計算との間で負荷を分散するステップと更に含む、請求項６０に記載の方法。
【請求項６２】
前記ＣＰＵ上で、別の複数の光線と別の複数のグラフィカルオブジェクトとの交差を計算するステップと、
前記ＧＰＵの計算と前記ＣＰＵの計算との間で負荷を分散するステップと、
を更に含む、請求項５３に記載の方法。
【請求項６３】
前記光線の数が２の倍数である、請求項５２に記載の方法。
【請求項６４】
前記光線の数が１０であり、前記境界付ける表面の数が８である、請求項６３に記載の方法。
【請求項６５】
前記少なくとも一つのグラフィカルオブジェクトがプリミティブのセットを備え、前記プリミティブは各々、四角形状である、請求項５２に記載の方法。
【請求項６６】
命令を格納している記録媒体を備える製品であって、
該命令は、
実行時に、プログラム可能なＧＰＵを用いることによってレイトレーシングを行って光線とプリミティブとの交差の数を削減する方法の実行をもたらす命令であり、
前記プログラム可能なＧＰＵ上で、複数の光線と少なくとも一つのグラフィカルオブジェクトを境界付ける表面のセットとの交差を計算する、
製品。
【請求項６７】
前記少なくとも一つのグラフィカルオブジェクトは、複数のグラフィカルオブジェクトである、請求項６６に記載の製品。
【請求項６８】
前記命令は、実行時に、前記計算が並列に実行されることを更にもたらす、請求項６７に記載の製品。
【請求項６９】
前記並列の計算がプログラム可能なピクセルシェーダによって実行される、請求項６８に記載の製品。
【請求項７０】
前記命令は、実行時に、大きさの一つが２の倍数であるピクセル配列を用いて前記プログラム可能なピクセルシェーダが前記交差を計算することを更にもたらす、請求項６９に記載の製品。
【請求項７１】
前記命令は、実行時に、前記境界付ける表面のうち少なくとも幾つかが凸面であることを更にもたらす、請求項６７に記載の製品。
【請求項７２】
前記命令は、実行時に、前記境界付ける凸面のセットのうち少なくとも幾つかがバウンディングボックスであることを更にもたらす、請求項７１に記載の製品。
【請求項７３】
前記命令は、実行時に、前記境界付ける表面のセットが階層状であることを更にもたらす、請求項６７に記載の製品。
【請求項７４】
前記命令は、実行時に、ＣＰＵ上で、前記複数の光線のうち少なくとも幾つかと前記複数のグラフィカルオブジェクトのうち少なくとも幾つかとの交差を、前記ＧＰＵによって計算された交差に少なくとも部分的に基づいて計算することを更にもたらす、請求項６７に記載の製品。
【請求項７５】
前記命令は、実行時に、前記ＧＰＵの計算と前記ＣＰＵの計算との間で負荷を分散することを更にもたらす、請求項７４に記載の製品。
【請求項７６】
前記命令は、実行時に、
前記ＣＰＵ上で、別の複数の光線と別の複数のグラフィカルオブジェクトとの交差を計算することと、
前記ＧＰＵの計算と前記ＣＰＵの計算との間で負荷を分散することと、
を更にもたらす、請求項６７に記載の製品。
【請求項７７】
前記命令は、実行時に、前記光線の数が２の倍数であることを更にもたらす、請求項６６に記載の製品。
【請求項７８】
前記命令は、実行時に、前記光線の数が１０であり、前記境界付ける表面の数が８であることを更にもたらす、請求項７７に記載の製品。
【請求項７９】
前記少なくとも一つのグラフィカルオブジェクトがプリミティブのセットを備え、前記プリミティブは各々、四角形状である、請求項６６に記載の製品。
【請求項８０】
グラフィックパイプラインを備える装置であって、
前記グラフィックパイプラインは、レイトレーシング用の光線とプリミティブとの交差の計算の数を、該グラフィックパイプライン上で、複数の光線と少なくとも一つのグラフィックオブジェクトを境界付ける表面のセットとの交差を計算することによって、削減するようになっている、
装置。
【請求項８１】
前記グラフィックパイプラインがプログラム可能なＧＰＵに組み込まれている、請求項８０に記載の装置。
【請求項８２】
前記少なくとも一つのグラフィカルオブジェクトが、複数のグラフィカルオブジェクトである、請求項８１に記載の装置。
【請求項８３】
前記プログラム可能なＧＰＵが、並列に前記計算を実行するようになっている、請求項８２に記載の装置。
【請求項８４】
前記プログラム可能なＧＰＵが、並列の計算を、プログラム可能なピクセルシェーダを用いて実行するようになっている、請求項８３に記載の装置。
【請求項８５】
前記プログラム可能なピクセルシェーダは、フラグメントプログラムによって、大きさのうち一つが２の倍数であるピクセル配列を用いて、前記交差を計算するようになっている、請求項８４に記載の装置。
【請求項８６】
前記プログラム可能なＧＰＵは、前記境界付ける表面のうち少なくとも幾つかを凸面とするようになっている、請求項８２に記載の装置。
【請求項８７】
前記プログラム可能なＧＰＵは、前記境界付ける凸面のセットのうち少なくとも幾つかをバウンディングボックスとするようになっている、請求項８６に記載の装置。
【請求項８８】
前記プログラム可能なＧＰＵは、前記境界付ける表面のセットを階層状とするようになっている、請求項８２に記載の装置。
【請求項８９】
ＣＰＵを更に備え、
前記ＣＰＵが、前記複数の光線のうち少なくとも幾つかと前記複数のグラフィカルオブジェクトのうち少なくとも幾つかとの交差を、前記ＧＰＵによって計算された交差に少なくとも部分的に基づいて計算するようになっている、
請求項８２に記載の装置。
【請求項９０】
前記ＣＰＵ及びＧＰＵは、ＧＰＵの計算とＣＰＵの計算との間で負荷を分散するようになっている、請求項８９に記載の装置。
【請求項９１】
前記ＣＰＵが、別の複数の光線と別の複数のグラフィカルオブジェクトとの交差を計算するようになっており、
前記ＣＰＵ及びＧＰＵが、ＧＰＵの計算とＣＰＵの計算との間で負荷を分散するようになっている、
請求項８２に記載の装置。
【請求項９２】
前記プログラム可能なＧＰＵは、前記光線の数を２の倍数とするようになっている、請求項８１に記載の装置。
【請求項９３】
前記プログラム可能なＧＰＵは、前記光線の数を１０とし、前記境界付ける表面の数を８とするようになっている、請求項９２に記載の装置。
【請求項９４】
前記プログラム可能なＧＰＵが、デスクトップコンピュータ、モバイルコンピュータ、ゲームコンソール、ハンドヘルドデバイス、無線通信デバイス、ネットワークデバイス、ディスプレイシステム、マザーボード、グラフィックカード、及び集積回路チップのうち少なくとも一つに組み込まれている、請求項８２に記載の装置。
【請求項９５】
処理用の第２の手段に結合された処理用の第１の手段を備え、
前記第２の手段は、グラフィック処理用の手段を有し、
グラフィック処理用の前記第２の手段は、レイトレーシング用の光線とプリミティブとの交差の計算の数を、前記グラフィック処理用の手段上で、複数の光線と少なくとも一つのグラフィカルオブジェクトを境界付ける表面のセットとの交差を計算することによって、削減するようになっている、
装置。
【請求項９６】
前記グラフィック処理用の手段は、プログラム可能なＧＰＵに組み込まれている、請求項９５に記載の装置。
【請求項９７】
前記少なくとも一つのグラフィカルオブジェクトが、複数のグラフィカルオブジェクトである、請求項９５に記載の装置。
【請求項９８】
前記グラフィック処理用の手段が、並列に前記計算を実行するようになっている、請求項９７に記載の装置。
【請求項９９】
前記グラフィック処理用の手段が、並列の計算を、プログラム可能なピクセルシェーダを用いて実行するようになっている、請求項９８に記載の装置。
【請求項１００】
前記プログラム可能なピクセルシェーダは、フラグメントプログラムによって、大きさのうち一つが２の倍数であるピクセル配列を用いて、前記交差を計算するようになっている、請求項９９に記載の装置。
【請求項１０１】
前記グラフィック処理用の手段は、前記境界付ける表面のうち少なくとも幾つかを凸面とするようになっている、請求項９７に記載の装置。
【請求項１０２】
前記グラフィック処理用の手段は、前記境界付ける凸面のセットのうち少なくとも幾つかをバウンディングボックスとするようになっている、請求項１０１に記載の装置。
【請求項１０３】
前記グラフィック処理の手段は、前記境界付ける表面のセットを階層状とするようになっている、請求項９７に記載の装置。
【請求項１０４】
前記第１の手段がＣＰＵであり、
前記ＣＰＵが、前記複数の光線のうち少なくとも幾つかと前記複数のグラフィカルオブジェクトのうち少なくとも幾つかとの交差を、前記グラフィック処理の手段によって計算された交差に少なくとも部分的に基づいて計算するようになっている、
請求項９７に記載の装置。
【請求項１０５】
前記グラフィック処理の手段がプログラム可能なＧＰＵであり、前記ＣＰＵ及びＧＰＵが、ＧＰＵの計算とＣＰＵの計算との間で負荷を分散するようになっている、請求項１０４に記載の装置。
【請求項１０６】
前記第１の手段がＣＰＵであり、
前記ＣＰＵが、別の複数の光線と別の複数のグラフィカルオブジェクトとの交差を計算するようになっており、
前記ＣＰＵ及びＧＰＵが、ＧＰＵの計算とＣＰＵの計算との間で負荷を分散するようになっている、
請求項９６に記載の装置。
【請求項１０７】
前記プログラム可能なＧＰＵは、前記光線の数を２の倍数とするようになっている、請求項９６に記載の装置。
【請求項１０８】
前記プログラム可能なＧＰＵは、前記光線の数を１０とし、前記境界付ける表面の数を８とするようになっている、請求項１０７に記載の装置。
【請求項１０９】
前記プログラム可能なＧＰＵが、デスクトップコンピュータ、モバイルコンピュータ、ゲームコンソール、ハンドヘルドデバイス、無線通信デバイス、ネットワークデバイス、ディスプレイシステム、マザーボード、グラフィックカード、及び集積回路チップのうち少なくとも一つに組み込まれている、請求項９６に記載の装置。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
本願は、Dan  Wexler等によって２００４年９月１６日に出願された「負荷分散（ロードバランシング）」と題する米国特許仮出願第６０／６１０，８７３号の優先権及び利益を主張するものであり、当該仮出願の全開示内容は、その全体を説明しているが如くに参照することによって本明細書に援用されるものである。
【背景】
【０００２】
本開示内容は、例えば、コプロセッサ間におけるような、負荷分散（ロードバランシング）に関するものである。
【０００３】
コンピュータグラフィックスは、過去２０年近くにわたって、非常に多くのハードウェア及びソフトウェアの開発が行われてきた広い分野である。例えば、１９９７年にAddison-Wesleyによって発行されたFoley,  Van  Dam,  Feiner,  及びHughesによる「コンピュータグラフィックス：原理と実践（Computer  Graphics:  Principles  and  Practice」を参照されたい。通常、コンピュータプラットフォーム、又は、他の同様の計算デバイスでは、専用のグラフィックハードウェアを用いて、例えばコンピュータゲームに関連して使用される画像のようなグラフィック画像をレンダリングする。かかるシステムでは、専用グラフィックハードウェアは、ハードウェアのフレキシビリティ及び／又はそのレンダリング性能を含むグラフィックスの品質に影響する可能性がある点において、制限されることがある。
【０００４】
グラフィックスにおいては、通常、標準計算プラットフォームは、中央処理ユニット（ＣＰＵ）及びグラフィック処理ユニット（ＧＰＵ）を備える。ＧＰＵがより複雑になり続けて多くの計算タスクを処理する能力をもつようになるにつれて、プロセッサ間の負荷分散処理のための技術が更に必要になっている。
【概要】
【０００５】
グラフィックス及び／又はビデオ処理用といった二つのプロセッサの負荷分散のための方法、装置、デバイス、及び／又はシステムの実施の形態を、開示する。ある実施の形態では、プログラム可能なＧＰＵ（プログラマブルＧＰＵ）とＣＰＵとの間での負荷分散の方法は、以下の内容を含む。両端キューが、少なくとも部分的にＧＰＵ及びＣＰＵによって処理し得る別個のワークユニットで形成される。ＧＰＵ及びＣＰＵは、当該ＧＰＵ及びＣＰＵにキューのそれぞれの端からワークユニットを選択させることによって、ワークユニットを処理する。
【０００６】
本発明を、詳細に説明し、特許請求の範囲の欄において明確に主張する。しかしながら、特許請求の範囲に記載の本発明は、編成及び動作方法、並びに、その目的、特徴、及び利点に関して以下の詳細な説明を添付の図面と共に参照することによって、最も良く理解することができる。
【発明を実施するための最良の形態】
【０００７】
以下の詳細な説明において、多くの特定の詳細を説明し、本発明の完全な理解を可能とする。しかしながら、本発明は、これら特定の詳細が無くとも、実施し得ることが、当業者には理解されよう。その他の事例においては、周知の方法、手続き、コンポーネント、及び／又は回路については、発明を不明確としないように、詳細には説明していない。
【０００８】
コンピュータグラフィックスは、過去２０年近くにわたって、非常に多くのハードウェア及びソフトウェアの開発が行われてきた広い分野である。例えば、１９９７年にAddison-Wesleyによって発行されたFoley,  Van  Dam,  Feiner,  及びHughesによる「コンピュータグラフィックス：原理と実践（Computer  Graphics:  Principles  and  Practice」を参照されたい。通常、コンピュータプラットフォーム又はその他の同様の計算デバイスでは、専用グラフィックハードウェアを用いて、例えばコンピュータゲームに関連して使用される画像のような、グラフィック画像をレンダリングする。かかるシステムでは、専用グラフィックスハードウェアは、ハードウェアのフレキシビリティ及び／又はそのレンダリング性能を含むグラフィックスの品質に影響する可能性がある点において、制限されることがある。しかしながら、高品質グラフィックスは、技術及びマーケットが進展し続けていることにより、要望され続けている。したがって、高品質グラフィックスを生成するという点において、既存のハードウェアの性能を拡張する信号処理及び／又はその他の技術が、研究領域となり続けている。
【０００９】
先述したように、専用グラフィックハードウェアは、グラフィック・レンダリング性能及び／又はフレキシビリティといった性能を制限されていることがある。これは、少なくとも部分的には、例えば、かかるハードウェアへの要求に対して改善された能力を提供するハードウェアのコストに起因する。しかしながら、このような事情にもかかわらず、近年、最先端のコンピュータプラットフォーム又は同様の計算システム上に設けられた専用ハードウェアの能力は、改善してきており、また、改善しつづけている。例えば、固定関数パイプラインが、プログラム可能な頂点処理ステージ及びフラグメント処理ステージに置き換えられている。６年前には、大部分の民生用３次元（３Ｄ）グラフィックオペレーションは、主にＣＰＵ上で計算されており、グラフィックカードは、主にフレームバッファとして計算結果を表示していた。しかしながら、専用グラフィックハードウェアは、数千万のトランジスタを備えるグラフィックパイプラインへと進化してきた。今日、プログラム可能なグラフィック処理ユニット（ＧＰＵ）は、単純なフィードフォワードトライアングルレンダリング以上の能力を有している。NVIDIA  GeForce  4、及び、ATI  Radon  9000のような最先端のグラフィックチップは、例えば、固定関数の頂点処理ステージ及びフラグメント処理ステージを、より詳細には後述するように、プログラム可能なステージへと置き換えるものである。これらプログラム可能な頂点処理ステージ及びフラグメント処理ステージは、より詳細には後述するように、シェーディング計算及び／又はテクスチャ計算に対する制御を可能にするプログラムを実行する能力を有している。
【００１０】
ＣＰＵアークテクチャと同様に、ＧＰＵは、パイプラインステージに分割される。しかしながら、ＣＰＵが任意のプログラムを実行するために使用される汎用設計を具現化しているのに対して、ＧＰＵは、例えば、未加工の幾何データを処理して、最終的には、モニタのようなディスプレイ上にピクセルとして情報を表示するように設計されている。図１は、典型的なグラフィックパイプラインの概念を示すブロック図である。
【００１１】
通常、描かれるべきオブジェクト（対象物）について、以下のオペレーションが、かかるパイプラインによって実行される。
１．ＣＰＵ上で実行しているアプリケーションが、ＧＰＵにメモリの一部にある１０５のような頂点データの場所を指令する。
２．頂点ステージ１１０が、頂点データをモデル空間からクリッピング空間に変換して、照明計算等を実行する。
３．頂点ステージ１１０がテクスチャ座標を数式から生成する。
４．三角形、点、四角形等といったプリミティブを、フラグメントへとラスタライズする。
５．フラグメント処理ステージ１８０を介してフラグメントを処理することによって、フラグメントの色を決定する。当該フラグメント処理ステージ１８０はまた、幾つかのオペレーションの中で、テクスチャメモリのルックアップも実行する。
６．幾つかのテストを実行して、フラグメントが廃棄されるべきか否かを決定する。
７．ピクセルの色を、少なくとも部分的にはフラグメントの色に基づいて、また、フラグメントの又はピクセルのアルファチャンネルに通常は関連するその他のオペレーションに基づいて、計算する。
８．ピクセル情報をフレームバッファ１６０に提供する。
９．ピクセルを、ディスプレイ１７０等によって、表示する。
【００１２】
図１のブロック１１５によって示すように、高次の表面テッセレーションは、グラフィックパイプラインの幾何処理フェイズにおいて早期に発生する。高次の表面は、数式及び／又は関数を使用して３次元（３Ｄ）の表面を表現する。その例には、不均一有理Ｂスプライン（NURB）、ベジエ曲線、Ｎパッチ、等がある。転送されたデータにテッセレーション処理を行って、より複雑なモデルを生成する。ＧＰＵは、したがって、より詳細且つ複雑な幾何形状を動的に生成、即ち、アプリケーションからの初期のモデルデータからより詳細且つ複雑な幾何形状へのテッセレーションを行う。
【００１３】
ブロック１２０によって示し、また、先述したように、グラフィックパイプラインは、通常、変換及び照明（Ｔ＆Ｌ）オペレーション等を行う。ブロック１２０は、固定関数ユニットを示しているが、これらオペレーションは、頂点シェーダとも呼ばれるブロック１３０のような、プログラム可能な頂点ユニットによって更に置き換えてもよい。頂点シェーダ１３０は、頂点プログラムを頂点ストリームに適用する。したがって、このプログラムは、データを頂点レベルで処理する。大部分の処理は１サイクルで実行されるが、この制限は適用する必要があるものではない。典型的な頂点プログラムは、１００以上のオーダーの命令に基づいている。図４は、典型的なプログラム可能な頂点シェーダの実施の形態を示すブロック図である。図示するように、頂点属性４１０が、頂点プログラム４２０に与えられる。当該属性は、レジスタに格納されるものであり、上記プログラムは、レジスタ内にあるデータを処理する一連の命令を備えるものである。得られる処理データも、頂点出力データ４３０として図４に示すように、レジスタに格納される。通常、このプログラムを実行している間、当該プログラムは、図４では参照符号４５０によって示すプログラムパラメータを取得して、図４では参照符号４６０で示すように一時レジスタを利用する。
【００１４】
頂点ステージと同様に、フラグメント処理ステージは、ブロック１４０によって示すような固定関数ユニットから、ブロック１５０によって示すようなプログラム可能なユニットへと進化している。このように、以前には、テクスチャ処理、フィルタリング、ブレンディングは、固定関数状態マシーン又は同様のハードウェアを用いて実行されていた。頂点シェーダと同様に、ブロック１５０のようなピクセルシェーダは、プログラム可能なフラグメント処理ステージとも呼ばれるものであり、カスタマイズしたプログラム制御を可能とするものである。したがって、ピクセル単位で、プログラマーは、色等を計算して、所望のようにカスタマイズした視覚効果を生成することが可能である。図５は、典型的なピクセルシェーダ、即ちフラグメント処理ステージの実施の形態を示すブロック図である。頂点ステージにおける対応部分と同様に、実施の形態５００は、フラグメント入力データ５１０、フラグメントプログラム５２０、及びフラグメント出力データ５３０を有している。同様に、本ステージは、テクスチャメモリ５４０及び一時レジスタ５５０を有している。本明細書では、テクスチャメモリは、フラグメント処理ステージの一部として備えるＧＰＵのメモリ部を指しており、通常は、キャッシュメモリであり、ここには、頂点処理等の実行に引き続き、特定のピクセル値が、追加の処理ためにロードされる。この追加の処理は、例えば、フィルタリング、シェーディング、及び／又は、例えばレンダリングされるべきオブジェクトの可視表面の外観を生成することに通常は関連する処理のような同様の処理である。
【００１５】
これらグラフィックパイプラインのプログラム可能性（プログラマビリティ）のトレンドは、グラフィック処理ユニット（ＧＰＵ）及びその潜在的なアプリケーションを変化させている。したがって、かかるプロセッサ又は処理ユニットの一つの潜在的なアプリケーションは、例えば、アニメーション等を生成するためのような多様な状況において望まれるように、高品質のグラフィック処理を達成することである。より詳細には、近年、グラフィックハードウェアの性能は、中央処理ユニット（ＣＰＵ）の性能より急速に向上している。上述したように、ＣＰＵは、通常、順次発生するコードに対する高性能の処理を意図して設計されるものである。したがって、処理性能を向上するために追加のトランジスタを使用することは、更に挑戦的なこととなっている。一方、説明したように、プログラム可能なグラフィックハードウェアは、頂点及びフラグメントステージのコードを並列処理するために設計されている。したがって、ＧＰＵは、ＣＰＵより効率的に追加のトランジスタを使用して、処理性能を向上することができる。このように、ＧＰＵは、半導体製造技術が進展し続けるに連れて、処理性能の向上を持続する可能性をもたらすものである。
【００１６】
勿論、プログラム可能性は、比較的最近の革新である。さらに、異なる性能の範囲は、「プログラム可能性」の意味の範囲に含まれるものである。本特定の実施の形態の論議のために、頂点ステージではなくＧＰＵのフラグメント処理ステージに焦点を当てるが、勿論、本発明はこれに範囲を限定されるものではない。したがって、一つの実施の形態では、プログラム可能なＧＰＵは、単純な命令のセットを有するフラグメント処理ステージを備る。フラグメントプログラムのデータタイプは、主として、固定小数点の入力テクスチャである。出力フレームバッファにおける色は、通常、色成分ごとに８ビットを有する。同様に、ステージは、通常、限定された数のデータ入力エレメント及びデータ出力エレメント、限定された数のアクティブテクスチャ、並びに、限定された数の依存テクスチャを有する。さらに、一つのプログラムに対する命令の数、及びレジスタの数は、比較的少ない。ハードウェアは、プログラム内の特定のポイントのみにおいてテクスチャのアドレスを計算する特定の命令を許可するだけである。ハードウェアは、所与のパスに対してフレームバッファに書き込まれるべき単一の色値を許可するだけであり、プログラムは、ループしたり、条件分岐命令を実行することがない。本明細書では、このレベルの性能、又は同様のレベルの性能を有するＧＰＵの実施の形態を、固定小数点のプログラム可能なＧＰＵと称する。
【００１７】
一方、より進歩した専用グラフィックプロセッサ又は専用グラフィックハードウェアは、より強化された特徴を備えてもよい。フラグメント処理ステージは、例えば、浮動小数点命令及び／又はレジスタを有し、プログラム可能であってもよい。同様に、浮動小数点テクスチャフレームバッファ形式が利用可能であってもよい。フラグメントプログラムは、多様な操作を実行することが可能なアセンブリ言語レベルの命令のセットから作られていてもよい。かかるプログラムは、数百のオーダー又はそれより多い命令のように、比較的長いものであってもよい。テクスチャのルックアップは、フラグメントプログラム内で許可されていてもよく、ある実施の形態では、テクスチャのフェッチの数、又は、プログラム内でのテクスチャの依存性のレベル数に関して制限がなくてもよい。フラグメントプログラムは、テクスチャメモリ及び／又はステンシルバッファへの直接書き込みを行う能力を有していてもよく、例えば、ＲＧＢＡのように、浮動小数点ベクトルをフレームバッファに書き込む能力を有していてもよい。本明細書では、このレベルの性能又は同様のレベルの性能をもつＧＰＵの実施の形態を、浮動小数点のプログラム可能なＧＰＵと称することがある。
【００１８】
同様に、第３の実施の形態、即ち、専用グラフィックハードウェアの具体例は、本明細書では、プログラム可能なストリーミングプロセッサと称する。プログラム可能なストリーミングプロセッサは、データストリームをプロセッサに与えて当該プロセッサがデータストリームのエレメントに対して同様の計算又は処理を実行するプロセッサである。このシステムは、したがって、プログラム又はカーネルをストリームのエレメントに適用することによって、且つ、処理結果を出力ストリームに提供することによって、当該プログラム又はカーネルを実行する。本明細書では、同様に、プログラム可能なストリーミングプロセッサは、フラグメントのストリームを処理することに主に焦点を当てたものであり、プログラム可能なストリーミングフラグメントプロセッサである。かかるプロセッサでは、完全命令セット及びより大きなデータタイプが与えられてもよい。しかしながら、ストリーミングプロセッサであっても、ループ及び条件分岐は、通常、例えば、ＣＰＵからのように、専用グラフィックハードウェアの外部から発生する介入無しには実行することはできないことに留意されたい。繰り返すと、このレベルの性能又は同様の性能をもつＧＰＵの実施の形態は、本明細書ではプログラム可能なストリーミングプロセッサである。
【００１９】
図２は、実施の形態２００を示す概念図であり、この実施の形態２００は、例えばＧＰＵ２１０のような専用グラフィックハードウェアを採用するシステムを構成している。図２は、論議及び説明を簡単にするために単純化した図であることに留意されたい。したがって、メモリコントローラ／アービター、ＡＧＰ及び／又はＰＣＩのような標準インタフェイスプロトコルを実装するインターフェイスユニット、ディスプレイデバイス、入力デバイス等の特徴は、本論議を不必要に不明確なものとしないように、省略されている。
【００２０】
この特定の実施の形態では、ＧＰＵ２１０は、プログラム可能なＧＰＵの具体例であり、例えば、上述した三つの実施の形態のうちの一つのようなものである。しかしながら、論議の目的で、ＧＰＵ２１０は、プログラム可能な浮動小数点ＧＰＵであると仮定している。同様に、勿論、本発明は、先述した三つのタイプのみに、その範囲が限定されるものではないことを理解されたい。これら三つのタイプは、単に、典型的なプログラム可能なＧＰＵの説明として提供しただけのものである。現在知られている又は後に開発される他の全てのタイプのプログラム可能なＧＰＵが、本発明の範囲に含まれる。例えば、図２は、別個のグラフィックハードウェアを示しているが、これに代えて、ＩＣ上でグラフィックハードウェアがＣＰＵに統合されていてもよく、かかるグラフィックハードウェアも本発明の範囲に依然として含まれる。同様に、図２に示した実施の形態のように、システムの実施の形態のアプリケーションには、例えば、デスクトップ計算プラットフォーム、モバイル計算プラットフォーム、ハンドヘルドデバイス、ワークステーション、ゲームコンソール、セットトップボックス、マザーボート、グラフィックカード等の内部又は上におけるように、多くの潜在的なアプリケーションがある。
【００２１】
同様に、この単純化した実施の形態では、システム２００は、ＣＰＵ２３０、及びＧＰＵ２１０を備えている。この特定の実施の形態では、メモリ２４０が、ランダムアクセスメモリ、即ちＲＡＭであるが、本発明は、これにその範囲を限定されるものではない。現在知られている又は開発されるであろう多様なタイプのメモリのうち任意の一つを採用することができる。メモリ２４０は、この特定の実施の形態では、フレームバッファ２５０を有しているが、繰り返すと、本発明は、この点においてその範囲を限定されるものではない。例えば、図８は、同様の参照符号によって同様の特徴を特定したある実施の形態を示している。しかしながら、実施の形態６００では、フレームバッファ６５０は、メモリ６４０の内部に存在しない。様々なシステム要素間の通信は、この特定の実施の形態では、更に図２に示したように、バス２２０を介して行われる。
【００２２】
図２は、説明のために、単純化して提供したものであり、本発明の範囲を如何なる意味においても限定することを意図していないことを繰り返すことには、価値があろう。ＧＰＵ及びＣＰＵを有するシステムには多くのアーキテクチャが考えられ、本発明は、このようなアーキテクチャの全てを包含することを意図している。本発明は、既述の通り、図２に示した実施の形態にその範囲を限定するものではないけが、この特定の実施の形態は、二つのコプロセッサ、即ちＣＰＵ２３０及びＧＰＵ２１０を採用するシステムであることに留意されたい。したがって、少なくともこの点においては、本実施の形態は、最先端の計算プラットフォームの特色を有している。したがって、先述したように、かかるシステムを採用して高品質のグラフィック処理を実行する性能を有することが望ましい。しかしながら、本発明は高品質グラフィックスに限定されるべきものでなはないことに、同様に留意されたい。例えば、明確となるように、本発明の実施の形態は、コンピュータゲーム、及び／又はその他のローエンドのアプリケーションに関して、利益のあるものとなる。
【００２３】
グラフィックスでは、一つの典型的且つ頻出の計算は、「レイトレーシング」と称される。レイトレーシングは、陰、反射、及び／又は屈折等を含む照明効果を模擬するためのように、グラフィックスにおいては様々な形で用いられる。一般的には、レイトレーシングは、特定のグラフィック画像に存在する表面の可視性を、観察者の目からシーンにおけるオブジェクトまでの仮想の光線を追跡することによって、決定する処理を指す。例えば、「コンピュータグラフィックス（Computer  Graphics）」の１５．１０章、第７０１頁〜７１８頁を参照されたい。
【００２４】
レイトレーシングの問題の一つは、通常、それが、実行するのに最も時間を要するグラフィックオペレーションの一つであることである。さらに、レイトレーシングは、通常、ＧＰＵではなく、ＣＰＵで実行される。これは、少なくとも部分的には、関連の計算の複雑さに起因している。しかしながら、より最近になって、この計算プロセスにプログラム可能なＧＰＵを採用するための研究が始まっている。例えば、２００２年のACM  
Transactions  On  GraphicsにおけるTimothy  Purcell等による「プログラム可能なグラフィックハードウェア上でのレイトレーシング」では、ＧＰＵ上での汎用計算のためにデータを格納及び／又はデータをアクセスする興味深い方法が調査されている。しかしながら、Purcell等によって示唆された手法による一つの問題には、計算の実行の際に全シーンを格納するために必要となる大容量のストレージ能力がある。他の最近の論文、即ち、２００２年のGraphics  HardwareにおけるNathan  Carr等による「レイ・エンジン」には、ＧＰＵを採用して、光線と三角形との交差（ray-triangle intersections）を計算する手法が示唆されている。この手法の問題点は、光線と三角形との交差を、一度に一つの三角形についてＧＰＵで計算することにある。かかる手法は、したがって、時間を要するものであり、プログラム可能なＧＰＵによって利用可能な並列処理性能を完全に活用することができない。したがって、グラフィック処理用のレイトレーシングを実行するためにプログラム可能なＧＰＵを使用する更なる技術が望まれている。
【００２５】
レイトレーシングは、時間を要するオペレーションではあるが、少なくとも幾つかの計算では、実際に光線とプリミティブとの交差を実施して計算するのに要するよりも、レイトレーシングを利用する必要がない画像の部分を決定するのに多くの時間を要することがある。したがって、更に明確となるように、達成又は実行されるべき光線とプリミティブとの交差の計算の数を、レイトレーシングが必要とされない画像の部分を決定することによって、削減するために、プログラム可能なＧＰＵを適用することによって、処理の効果を得ることができる。
【００２６】
例えば、図３は、示唆したようなプログラム可能なＧＰＵを使用することによるレイトレーシングの方法の実施の形態を示すフローチャートである。この特定の実施の形態は、高いレベルでは、様々な実装の細部を有しているが、プログラム可能なＧＰＵを採用して、本明細書ではバッチと称する複数の光線と、特定の画像におけるオブジェクトの境界を作るように構成された階層状の表面との間の交差を計算する。これは、表面が交差しない場合に、当該表面によって境界づけられたプリミティブも交差しないので、レイトレーシングに対して、画像の部分を排除することを支援する。
【００２７】
この特定の実施の形態の別の側面は、ＧＰＵの並列処理性能を採用していることである。特に、複数の光線と階層状の境界表面との交差は、ＧＰＵによって効果的に実施し得る可能性のある反復計算を示唆する。以下の論議は、ＧＰＵ自体による処理と、ＧＰＵがＣＰＵと相互作用して負荷を分散し光線とピリミティブの交差を計算する方法とに焦点を当てる。したがって、この特定の実施の形態の更に別の側面は、ＧＰＵとＣＰＵとの間の負荷分散に関する。
【００２８】
ここで、図３を参照する。ブロック３１０は、この特定の実施の形態のために、画像をワークユニットに分割して、レイトレーシングの実行を支援する。先述したように、プログラム可能なＧＰＵを採用して、複数の光線と、グラフィックオブジェクトのセットに階層的に境界付ける表面のセットとの交差を計算する。しかしながら、当初には、画像を、オブジェクトを囲む重なり合わない表面を用いて分割する。したがって、本実施の形態では、画像を、少なくとも部分的には、オブジェクトの形状ではなく、表面によってオブジェクトを境界付けることに基づいて分割し、これによって、オブジェクトを空間的に分離する。この特定の実施の形態では、オブジェクトは、メッシュ状の四角形のプリミティブを有する。しかしながら、勿論、本発明は、この点にその範囲を限定されるものではない。本明細書では、プリミティブは、任意の多角形であってもよい。
【００２９】
境界となる表面の形状は、任意の形をとってもよいことに留意されたい。例えば、境界となる表面の形状は、球形、正方形、矩形、凸面、又は、表面の他のタイプであってもよい。この特定の実施の形態の場合、境界となる表面は、バウンディングボックスと称するボックスを備えている。ボックスを採用することの一つの利点は、実装が容易で高速であることである。本明細書では、バウンディングボックスを、ボクセル又はボリュームとも称する。少なくとも部分的にはバウンディングボックスをここで使用するために、画像の分割は、実質的には、例えば図６に示して以下に論議するように、グリッドべースである。示唆したように、グリッドによる手法は、単純さと、実装の容易さと、計算速度を含む利点を有する。しかしながら、この手法の不利益は、光線のプリミティブに対する交差を求める方法が、比較的粗いものとなることである。ここでは、このことに対処する一つの手法は、以下により詳細に説明するように、階層状のバウンディングボックスを使用してより優れた精度を提供することによるものである。
【００３０】
先に示唆したように、図６は、単純な二次元表現のグリッド手法を提供する概略図である。しかしながら、グリッドのボックスは、ここでは、異なるサイズを有している。グリッド６１０は、行１、列１、行２、列２、及び、行３、列３におけるボックス内に位置するオブジェクトを有する。オブジェクトは、この特定の例では、参照符号６２０、６３０、及び６４０でそれぞれ特定されている。勿論、本発明は、グリッド手法に、又は、この図示した例に、その範囲を限定されるものではない。
【００３１】
この特定の実施の形態では、光線は、図６に示すように、ピクセルで表現されている。したがって、プログラム可能なＧＰＵ上では、実際には、グリッド６１０を指す６５０のような光線のバッチを表す６６０のような四角形のピクセルを、図６に図示するように、レンダリングする。光線６５０及びピクセル６６０は、図６では、側面から表されている。図６には明示しないが、一連の隣接する他のピクセルは、紙面の平面を垂直に指す方向に示されるピクセルにそって配列されており、同様に対応する光線をもつ。図６には、正確な尺度で示していないが、視覚的に明らかなように、バウンディングボックスは、異なる部分又はボリュームを占有しており、結果的に異なるグラフィックオブジェクトを囲んでいる。勿論、繰り返すが、図６は、説明の目的で提供したグリッドの単純な２次元表現に過ぎない。
【００３２】
画像を空間的に分割した結果、ボクセルは、少なくとも部分的には、本明細書では光線のバッチと称する周縁に交差する光線の数に基づいて順位付けされる。ここでは、この特定の技術の特定のアプリケーションのために、光線は実質的にコヒーレントであることに留意されたい。したがって、周縁に交差する光線の数に少なくとも部分的に基づいて、バウンディングボックス、即ちボクセルは、本明細書では、プロセッサによって実行されるべきワークの量を表す。このワークの量は、本明細書では、アイテム又はワークのユニットと称する。特定のワークユニット、即ちワークアイテムのために実行されるべきワークの量は、特定のバウンディングボックスの境界に交差する光線の数に少なくとも部分的には関連している。さらに、バウンディングボックス内には、一連の更なるバウンディングボックス、即ち階層がある。したがって、例えば図６の行１、列１に示す特定のバウンディングボックスは、連続する階層のバウンディングボックスへと更に再分割される。しかしながら、本プロセルのこのステージでは、図３におけるブロック３２０によって示すように、バッチサイズを使用して「両端」キューを生成する。特に、ＧＰＵの並列処理性能をより完全に活用するために、ＧＰＵを、バッチ内に比較的多数の光線を有するボクセルに適用することが望ましい。同様に、ＧＰＵを使用して、比較的小さいバッチを有するボクセルを処理することも望ましい。
【００３３】
図３のブロック３３０に示すように、ＣＰＵ及びＧＰＵは、個別のワークユニットをキューの両端から処理し始める。ワークユニットを編成した手法によって、より詳細には後述するように、ワークユニットを、ＧＰＵ又はＣＰＵの何れかによって少なくとも部分的に処理することが可能となる。したがって、この時点で、ＧＰＵによる処理、及びＧＰＵとＣＰＵとの間の望ましい負荷分散に焦点を当てることが望ましい。本明細書では、負荷分散は、暗示的に又は明示的に、特定のプロセッサが処理負荷をプロセッサ間で割り当てることを可能とし、これによって、処理負荷を偶発的に割り当てる、即ちランダムに割り当てる場合よりも、更なる処理を達成するメカニズムを指す。
【００３４】
ＧＰＵが、ユニットのワーク、例えば、グリッド６１０の行１、列１として指定されるワークユニットを受け持つと、ボクセルを、１０本の光線及び八つのバウンディングボックスを１サイクルで処理する技術を用いて、処理することが可能である。しかしながら、勿論、本発明は、この点にその範囲を限定されるものではない。しかしながら、光線及びバウンディングボックスの数は、一つのＧＰＵのサイクルで処理するために、様々な因子に基づいて変化してもよい。また、本実施の形態では、同じ１０本の光線を適用していることにも留意されたい。さらに、この特定の実施の形態の場合には、八つのボックスは、階層的に連続するボックスであるが、本発明は、勿論、階層的に連続するボックスを採用することにその範囲を限定されるものではない。しがたって、特定の光線が、八つのバウンディングボックス全てに交差する場合には、これは、更なるグラフィック処理に使用される情報を、より詳細には以下に説明するように、提供する。
【００３５】
１０本の光線及び八つのバウンディングボックスを１サイクルで処理するために採用するメカニズムは、先述したように、プログラム可能なシェーダステージを有するＧＰＵのアーキテクチャの利点を活用するものである。したがって、光線の数は、例えば、ＧＰＵ上での処理を採用するために、少なくとも部分的には、アプリケーション及び特定の状況に応じて変化させてもよい。また、光線の数は、例えば、特定のＧＰＵ、その特定のアーキテクチャ、処理する特定の画像等のようなその他の因子に少なくとも部分的に基づいて、変化させてもよい。同様に、類似の変化をバウンディングボックスの数に適用して、１サイクルで処理してもよい。
【００３６】
先述したように、ピクセルシェーダは、所謂「フラグメントプログラム」を実行する。したがって、フラグメントステージ１８０のようなＧＰＵのフラグメントステージ、例えば、ボックス１５０のようなピクセルシェーダは、実行命令形式のフラグメントプログラムを与えられている。同様に、フラグメントプログラムを実行することが望ましい特定のピクセルが、指定されている。かかるプログラムを実行する際には、ＧＰＵは、通常、特定のピクセル用の特定の位置に値を生成、又は出力する。このように、本実施の形態では、１サイクルで八つのバウンディングボックスといったように、並列計算を実行するために、特定の光線／ピクセルの計算の結果を、特定のロケーション、本実施の形態では、ステンシルバッファに書き込む。より詳細には、ピクセルシェーダによって処理されるピクセルについて、通常、ＧＰＵは、その色（例えば、赤、緑、青）、アルファ（例えば、カバレージ）深度、及び、特定のフラグメントプログラムに固有のその他の更なる値を計算する。この特定の実施の形態では、ステンシルバッファは、これらその他の追加の値を格納するために、バイト、即ち８ビットを有する。故に、この特定の実施の形態では、八つのバウンディングボックスは、各々がステンシルバイトの一つのビットを利用し、１サイクルで処理される。繰り返すが、本発明は、この特定の事項にその範囲を限定されるものではない。例えば、計算結果は、代わりに、深度として、色として、又は、そのためにＧＰＵが特定のバッファロケーションを有する他の属性として、格納されてもよい。ここでは、示したように、ステンシルバッファの各ビットは、特定の光線と特定のバウンディングボックスとの交差を計算した結果を表す。ステンシルバッファをここで採用することの利点は、入力／出力の観点から見ると、特定の計算結果をステンシルバッファの他のビットをマスクすることによって読み出すことが比較的容易であることである。
【００３７】
先述したように、この特定の実施の形態では、１０本の光線を１サイクルで処理する。この特定の実施の形態では、これは、２×５のピクセル配列の形態で行われる。しかしかしながら、本発明は、このことにその範囲を限定されるものではない。一般的には、ＧＰＵを有効に利用するために、２の倍数の大きさを有する配列を使用することが望ましい。勿論、本発明は、２×Ｎの配列を採用することにその範囲が限定されるものではない。なお、ここでのＮは、任意の正の整数である。したがって、この特定の実施の形態では、並列処理の効果を得るために、この特定の実施の形態用に、１０本の光線を１サイクルで処理している。
【００３８】
この特定の実施の形態では、バウンディングボックスは、Ｘにおけるある範囲、Ｙにおけるある範囲、Ｚにおけるある範囲を表している。したがって、フラグメントプログラムは、１０個のピクセルについて、これらピクセルに関連する光線がバウンディングボックスに交差するか否かを求めるように、書き換えられてもよい。交差が生じる場合には、ビットが特定のピクセル用のステンシルバッファにセットされる。同様に、フラグメントプログラムを用い、八つのバウンディングボックスを１サイクルで計算することによって、ＧＰＵのハードウェアのアーキテクチャを、先述したように、活用する。
【００３９】
ＧＰＵを採用する際の一つの問題は、処理が停止する時を決定することである。これを求めるために、ＣＰＵはＧＰＵに問い合わせを行う。しかしながら、かかる問い合わせは、いくつかの効率性に関する影響をもたらす。ＧＰＵに問い合わせることによって、ＧＰＵは、ＣＰＵにデータを提供するよう、その処理を停止することになる。したがって、頻繁に問い合わせることは、処理の不効率を招くので、望ましくない。しかしながら、同様に、あまりに低頻度にＧＰＵへ問い合わせることも、ＧＰＵが停止するとアイドル状態になり、処理時間の浪費となるので、望ましくない。
【００４０】
この特定の実施の形態の場合、両端キューが、先述したように、これら考慮すべき事項の均衡を保つメカニズムを、より詳細には後述するように、提供する。本明細書では、示唆したように、ＣＰＵがＧＰＵメカニズムに問い合わせる頻度は、ＧＰＵによる処理の効率に影響を与えることがある。したがって、特定の実装又は実施の形態に応じて、この頻度を変更することが望ましい。
【００４１】
先述したように、ＧＰＵとＣＰＵは、図３のブロック３３０によって示すように、別個のワークユニットを最初に処理し始める。したがって、この実施の形態の場合、ＣＰＵ及びＧＰＵは、複数の光線と、一以上のグラフィックオブジェクトを境界づける表面のセットとの交差を計算する。しかしながら、本明細書では、グラフィックオブジェクトは、プリミティブのセットを有することに留意されたい。この特定の実施の形態の場合、本発明は、このことにその範囲を限定されるものではないが、図３のブロック３４０によって更に示すように、ＣＰＵがそのワークユニットの処理を完了したか否か、及び、何時完了したかは、判定箇所となる。本明細書では、ワークユニットを完了することは、その特定のワークユニットの処理を停止することを意味し、利用可能な場合に、他のワークユニットを処理し始めることを意味する。ＣＰＵが停止していない、又は処理を完了していない場合には、次いで、ＣＰＵ及びＧＰＵが、ブロック３７０によって示すように、処理を続行する。しかしながら、ＣＰＵは、終了すると、ＧＰＵへ当該ＧＰＵが処理を停止しているか否かを、図３のブロック３５０によって示すように、問い合わせる。ＧＰＵは、開始した最新のワークユニット用の更なる処理を有する場合には、続行する。更なるワークユニットがキューに残っている場合には、次いで、完了しているＣＰＵは、キューの端から別のワークユニットを取り出す。次いで、以前のように、ＣＰＵは、そのワークユニットが完了するまで処理を続行し、次いで、再び、ＧＰＵに問い合わせる。この時点で、ＧＰＵが処理を完了している場合には、次いで、ＧＰＵは、例えば、「ヒット」、即ち交差が発生したか否かのような情報をＣＰＵに提供する。ヒットが発生していない場合には、これは、如何なる光線も、ＧＰＵによって処理されたボクセル、即ちワークユニット用のバウンディングボックスに交差し得ていないことを示す。したがって、このワークユニットは、如何なる光線もプリミティブに交差していないので、完了している。更なるワークユニットがある場合には、ＧＰＵ及びＣＰＵは、次いで、更なるワークユニットを取得して、ループを続ける。これは、図３において、ブロック３８５、３３５、３６５、及び３５５を含むループによって示されている。勿論、説明したように、例えば、ブロック３８６によって、ワークユニットが無くなり、ＣＰＵ及びＧＰＵが、それぞれのワークユニット用の更なる処理をもたなくなった場合には、この特定の実施の形態では、プロセスが完了することに留意されたい。
【００４２】
しかしながら、代替手法として、ＧＰＵがヒットを報告しなかった場合に、このことが、特定のボクセルのバウンディングボックスに幾つかの光線が交差したことを意味する。ＧＰＵは、交差が発生した場合に光線に関してＣＰＵにデータを提供することによって、ＣＰＵが更なる処理のために「アクティブ」のままとなっている光線の数を求めることを支援する。この情報によって、ＣＰＵは、先述した両端キューにおける更なるワークユニットをスケジュールすることが可能になる。このＣＰＵによるスケジューリングは、特定のボクセル用の更なる処理がＧＰＵ又はＣＰＵによって実行されるか否かを決定する。
【００４３】
しかしながら、ある時点において、階層内に更なるバウンディングボックスが無くなる。このことが発生すると、ＧＰＵがヒットを報告していないものと見なし、これによって、バウンディングボックスによって境界づけされたプリミティブに光線が交差するか否かを求める計算が実行されることを示す。この特定の実施の形態では、この後者の計算は、ＧＰＵではなくＣＰＵによって実行される。したがって、ＣＰＵは、一以上の光線と一以上のグラフィックオブジェクトとの交差を、ＧＰＵによって実行された計算に少なくとも部分的に基づいて計算する。ＣＰＵは、特定のワークユニット用のかかる処理を、光線が任意のプリミティブに交差しているか否かを求めることによって達成する。このことは、図３において、ブロック３７５及び３７１によって示されている。図３に示すように、ブロック３８０では、ＣＰＵが、ワークユニット用の光線とプリミティブとの交差の計算を完了すると、ＣＰＵ及びＧＰＵの両者が、利用可能であれば、更なるワークユニットを取得する。以前のように、このことは、ブロック３３５、３６５、３５５を含むループによって示されている。
【００４４】
光線が、二つ又は三つのオブジェクトに交差することもある。これに対処するために、光線とプリミティブとの交差を、Ｚバッファを用いてキャッシュ及びソートし、どのプリミティブが最初の交差、即ち最も近傍の交差であるかを求める。
【００４５】
勿論、本発明は、例えば、ＣＰＵがＧＰＵに問い合わせを行う特定の時刻に関することのように、この特定の実施の形態にその範囲を限定するものではない。一例として、ＣＰＵは、ＧＰＵに、略所定の時間間隔で問い合わせを行ってもよい。或いは、適応アプローチでは、ＣＰＵは、ＧＰＵによって開始された最新のワークユニットに関してＧＰＵが行う処理の量に少なくとも部分的に基づいて問い合わせを行ってもよい。上述したように、ＣＰＵがＧＰＵに問い合わせを行う方式は、ＧＰＵの処理効率に影響を与えることがある。したがって、本発明の範囲内には、ＣＰＵがＧＰＵに問い合わせを行う任意の且つ全ての方法が含まれることを意図している。明確であるように、ＧＰＵ及びＣＰＵの処理を一時的に一致又は重複させることが好ましい。一般的には、両プロセッサが並列に処理を行う時間が多くなるにつれて、スループットが大きくなる。したがって、ＣＰＵによるＧＰＵへの問い合わせは、可能な限り、プロセッサによる処理の一時的な重複を形成するように、発生することが望ましい。勿論、先述したように、このことを効果的に達成する方式は、特定の実施の形態に応じて変化してもよい。したがって、先にも示唆したように、ＧＰＵを用いて、この特定の実施の形態では、光線とプリミティブとの交差を計算する試行が望ましくないボクセルを決定するＣＰＵを支援することによって、処理を高速化する。
【００４６】
任意の時刻でのＧＰＵへの問い合わせを説明するために、図７に、図３の方法の実施の形態の代替手法を示す部分的なフローチャートを示す。図７は、図３と直接比較し得るものである。特に、図７は、図３のブロック３３０とブロック３７５との間に適合し、ブロック３４０〜３６０に置き換わる。したがって、図７に示すフローチャートは、図３のフローチャートと類似するものであるが、示唆したように、ＣＰＵがワークユニットを完了した場合にＧＰＵが必ずしも問い合わせを受けないことが異なる。このことは、例えば、ブロック７４０に示されている。特に、この判定ブロックは、ＣＰＵによるＧＰＵへの問い合わせを示す。しかしながら、ＣＰＵがＧＰＵへ問い合わせを行うか否かによらず、７４５又は７６５の判定ブロックは、それぞれ、ＣＰＵがワークユニットの処理を完了したたか否かを求める。完了していない場合には、ブロック７８０及び７９１によってそれぞれ示されるように、ＧＰＵ及びＣＰＵは、処理を続行する。しかしながら、ＣＰＵがその処理を完了している場合には、ブロック７８５及び７９５にそれぞれ示すように、更なるワークユニットが利用可能か否かについての判定がなされる。
【００４７】
この特定の実施の形態では、示唆したように、問い合わせ時に、処理が完了している場合には、ＧＰＵがＣＰＵへ、バウンディングボックスが交差しているか否か、又は、光線が特定のボクセルにおけるオブジェクトに当たっていないか否かに関する情報を提供する。ヒット、即ちバウンディングボックスの交差は、更なる処理が必要であることを意味する。しかしながら、バウンディングボックスがヒットしていない、即ち、交差していない場合には、同様に、ボックスによって境界づけられたプリミティブは、交差しない。勿論、所望の情報は、光線がプリミティブに交差したことだけではなく、交差がどの場所で発生しているか、また、最近傍の光線とプリミティブとの交差は何であるのかといったことでもあることに留意されたい。これは、階層内に更なるバウンディングボックスがなくなると、ＧＰＵによって開始された処理をＣＰＵに完了させる理由である。ＧＰＵは、本質的には、特定のセル、即ちボクセルに関して光線とプリミティブとの交差をＣＰＵに計算させることが望ましい場合を決定するために、採用されている。しかしながら、ＧＰＵを「階層を進む（walk  the  hierarchy）」ために適時に採用することの利点には、ＧＰＵがＣＰＵと並列に計算を実施し得ることがあり、また、ＧＰＵが、ＣＰＵより効率的にある計算を実行し得ることがある。
【００４８】
要約すると、この特定の実施の形態では、階層ボクセルのセット又はバウンディングボックスを採用している。実質的にコヒーレントな光線のバッチは、バウンディングボックスの階層を通じて反復される。あるボクセルの処理が完了した後、光線のバッチは、次のボクセルのセットに進む。このプロセス内では、ボクセルに含まれる光線の数を用いて、両端キューを介し、計算がＧＰＵによって実行される方が良いか又はＣＰＵによる方が良いかを、負荷分散のために、暗示的に決定する。先述したように、多くのバッチをＧＰＵで処理し、少ないバッチをＧＰＵによって処理し、これらそれぞれのプロセッサの特定の性能の利点を活用することが望ましい。
【００４９】
勿論、少なくとも部分的には上記の開示内容に基づいて、所望のグラフィック処理を生成することが可能なソフトウェアを製造し得ることが理解されよう。また、勿論、特定の実施の形態を説明してきたが、本発明は、特定の実施の形態又は実装にその範囲を限定するものではないことが理解されよう。例えば、一つの実施の形態は、先述したようなデバイス又はデバイスの結合体上で動作するよう実装したような、ハードウェアであってもよく、一方、他の実施の形態は、ソフトウェアであってもよい。同様に、ある実施の形態は、例えば、ファームウェアに、若しくは、ハードウェア、ソフトウェア、及び／又はファームウェアの結合によって、実装されてもよい。同様に、本発明は、このことにその範囲を限定するものではないが、ある実施の形態は、記録媒体のような、一以上の製品であってもよい。この記録媒体は、例えば、一以上のＣＤ−ＲＯＭ及び／又はディスクのようなものであり、命令を格納しており、例えば、コンピュータシステム、コンピュータプラットフォーム、ＧＰＵ、ＣＰＵ、他の任意のデバイスマハタシステム、若しくは、これら結合のようなシステムによって実行されたときに、例えば、上述した実施の形態のうちの一つのように、本発明に基づく方法の実施の形態を実行する。一つの考えられる例として、計算プラットフォームは、一以上の処理ユニット、即ちプロセッサ、ディスプレイ、キーボード、及び／又はマウスといった一以上の入力／出力デバイス、並びに／若しくは、スタティックランダムアクセスメモリ、ダイナミックランダムアクセスメモリ、及び／又はハードドライブといった一以上のメモリを備えていてもよい。しかしながら、繰り返すが、本発明は、この例にその範囲を限定するものではない。
【００５０】
以上の説明では、本発明の種々の側面を説明してきた。説明の目的で、特定の数、システム、及び構成を述べ、本発明の完全な理解を可能としている。しかしながら、本発明の利益を享受する当業者には、特定の詳細が無くとも、本発明を実施し得ることが理解されよう。他の例では、周知の特徴を省略して、本発明を不明確にしないよう簡単なものとした。ある特徴を本明細書に示し、及び／又は説明してきたが、多くの変形態様、置換態様、変更態様、及び／又は均等の態様を、当業者であれば思いつくであろう。したがって、添付の特許請求の範囲は、かかる変形態様及び／又は変更態様の全てを、本発明の真の精神に入るように、保護することを意図するものであることが理解されよう。
【図面の簡単な説明】
【００５１】
【図１】典型的なグラフィックパイプラインの実施の形態を示すブロック図である。
【図２】プログラム可能なＧＰＵのような専用グラフィックハードウェアを備えるコンピュータプラットフォームの実施の形態の概略図である。
【図３】負荷分散の方法の実施の形態を示すフローチャートである。
【図４】典型的なプログラム可能な頂点シェーダの実施の形態を示すブロック図である。
【図５】典型的なプログラム可能なフラグメント処理ステージの実施の形態を示すブロック図である。
【図６】グラフィカルオブジェクトを境界付けるボックスを有する二次元グリッドの実施の形態を示す概略図である。
【図７】負荷分散の方法の他の実施の形態の一部を示すフローチャートの一部である。
【図８】コンピュータプラットフォームの他の実施の形態の概略図である。
【図１】
2008513890.tif 000003
【図２】
2008513890.tif 000004
【図３】
2008513890.tif 000005
【図４】
2008513890.tif 000006
【図５】
2008513890.tif 000007
【図６】
2008513890.tif 000008
【図７】
2008513890.tif 000009
【図８】
2008513890.tif 000010
【手続補正書】
【提出日】平成19年5月2日(2007.5.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラム可能なＧＰＵとＣＰＵとの間で負荷を分散する方法であって、
各々が少なくとも部分的に前記ＧＰＵ及び前記ＣＰＵによって処理され得る別個のワークユニットをもつ両端キューを形成するステップと、
前記ＧＰＵ及び前記ＣＰＵに前記キューの両端からそれぞれワークユニットを選択させることによって、前記ワークユニットを処理するステップと、
を含む方法。
【請求項２】
前記ＣＰＵが前記ＧＰＵへ問い合わせる処理を含む、請求項１に記載の方法。
【請求項３】
前記ＣＰＵが前記ＧＰＵへ実質的に所定の間隔で問い合わせる、請求項２に記載の方法。
【請求項４】
前記ＣＰＵは、前記ＧＰＵによって開始された最新のワークユニットの処理の量に少なくとも部分的に基づく時間に、前記ＧＰＵへ問い合わせる、請求項２に記載の方法。
【請求項５】
前記ＣＰＵが、可変の時間に、前記ＧＰＵへ問い合わせる、請求項２に記載の方法。
【請求項６】
前記両端キューが、それぞれのワークユニットを効率的に処理するために前記ＧＰＵ及び前記ＣＰＵのうち一方の能力に少なくとも部分的に基づいて順序付けされる、請求項１に記載の方法。
【請求項７】
前記ＣＰＵは、該ＣＰＵがワークユニットを完了した後に、前記ＧＰＵへ問い合わせる、請求項２に記載の方法。
【請求項８】
前記ＧＰＵによって処理される前記ワークユニットの少なくとも幾つかについて、処理が前記ＣＰＵによって完了される、請求項２記載の方法。
【請求項９】
前記ＧＰＵによって処理される前記ワークユニットの少なくとも幾つかについて、前記ＣＰＵが光線とプリミティブとの交差を計算する、請求項２に記載の方法。
【請求項１０】
前記ＧＰＵ及び前記ＣＰＵによって実行される前記処理は、少なくとも部分的に一時的に一致する、請求項１に記載の方法。
【国際調査報告】
2008513890.tif 000011
2008513890.tif 000012
2008513890.tif 000013