(57)【特許請求の範囲】
【請求項１】
複数のＳＩＭＤ処理ユニットと、グローバルデータシェア（ＧＤＳ）と、を備えたグラフィックス処理ユニットであって、
各ＳＩＭＤ処理ユニットは、
複数のスレッドプロセッサと、
各々が前記複数のスレッドプロセッサの１つと通信する複数の汎用レジスタ（ＧＰＲ）ファイルと、
前記複数のスレッドプロセッサと双方向通信するローカルデータシェア（ＬＤＳ）と、を備えており、
前記複数のスレッドプロセッサは、実行のための複数のスレッドが割り当てられており、
前記ＬＤＳは、前記複数のスレッドプロセッサのうち１つのスレッドプロセッサに割り当てられたプライベート書き込みスペースを有しており、前記１つのスレッドプロセッサのみによる前記プライベート書き込みスペースへの書き込みアクセスを実行し、
前記複数のスレッドプロセッサは、前記プライベート書き込みスペースから読み出し可能であり、
前記ＧＤＳは、前記複数のＳＩＭＤ処理ユニットの各々における前記複数のスレッドプロセッサの各々と通信する、グラフィックス処理ユニット。
【請求項２】
前記複数のＧＰＲファイルの各々は、当該ＧＰＲファイルに関連する前記スレッドプロセッサで実行中の１つ以上のスレッドの第１のスレッドに割り当てられるレジスタのプライベートブロックと、レジスタのグローバルブロックと、を備えており、
前記第１のスレッドのみが前記プライベートブロックに対して読み出し及び書き込み可能であり、前記１つ以上のスレッドの任意のスレッドが前記グローバルブロックに対して読み出し及び書き込み可能である、請求項１に記載のグラフィックス処理ユニット。
【請求項３】
前記プライベート書き込みスペースのサイズが可変である、請求項１に記載のグラフィックス処理ユニット。
【請求項４】
前記ＧＤＳは、前記複数のＳＩＭＤ処理ユニットの前記複数のスレッドプロセッサのうち１つのスレッドプロセッサに割り当てられたプライベート書き込みスペースを備えている、請求項１に記載のグラフィックス処理ユニット。
【請求項５】
前記ＧＤＳは、前記複数のＳＩＭＤ処理ユニットの前記複数のスレッドプロセッサのうち前記１つのスレッドプロセッサのみによる前記プライベート書き込みスペースへの書き込みアクセスを実行し、
前記複数のＳＩＭＤ処理ユニットは、前記プライベート書き込みスペースから読み出し可能である、請求項４に記載のグラフィックス処理ユニット。
【請求項６】
複数のＳＩＭＤ処理ユニットを物理的に形成することと、グローバルデータシェア（ＧＤＳ）を物理的に形成することとを備えた製造の方法であって、
各ＳＩＭＤ処理ユニットは、
複数のスレッドプロセッサと、
各々が前記複数のスレッドプロセッサの１つと通信する複数の汎用レジスタ（ＧＰＲ）ファイルと、
前記複数のスレッドプロセッサと双方向通信するローカルデータシェア（ＬＤＳ）とを備えており、
前記複数のスレッドプロセッサは、実行のための複数のスレッドが割り当てられており、
前記ＬＤＳは、前記複数のスレッドプロセッサのうち１つのスレッドプロセッサに割り当てられたプライベート書き込みスペースを有しており、前記１つのスレッドプロセッサのみによる前記プライベート書き込みスペースへの書き込みアクセスを実行し、
前記複数のスレッドプロセッサは、前記プライベート書き込みスペースから読み出し可能であり、
前記ＧＤＳは、前記複数のＳＩＭＤ処理ユニットの各々における前記複数のスレッドプロセッサの各々と通信する、製造の方法。
【請求項７】
前記複数のＳＩＭＤ処理ユニットの各々を物理的に形成することは、前記複数のＧＰＲファイルの各々を物理的に形成することを備えており、
各ＧＰＲファイルは、当該ＧＰＲファイルに関連する前記スレッドプロセッサで実行中の１つ以上のスレッドの第１のスレッドに割り当てられるレジスタのプライベートブロックと、レジスタのグローバルブロックと、を備えており、
前記第１のスレッドのみが前記プライベートブロックに対して書き込み可能であり、前記１つ以上のスレッドの任意のスレッドが前記プライベートブロックから読み出し可能であり、前記１つ以上のスレッドの任意のスレッドが前記グローバルブロックに対して読み出し及び書き込み可能である、 請求項６に記載の方法。
【請求項８】
前記プライベート書き込みスペースのサイズが可変である、請求項６に記載の方法。
【請求項９】
前記ＧＤＳはプライベート書き込みスペースを備えており、
前記プライベート書き込みスペースは、前記複数のＳＩＭＤ処理ユニットの前記複数のスレッドプロセッサのうち１つのスレッドプロセッサに割り当てられている、請求項６に記載の方法。
【請求項１０】
前記ＧＤＳは、前記複数のＳＩＭＤ処理ユニットの前記複数のスレッドプロセッサのうち前記１つのスレッドプロセッサのみによる前記プライベート書き込みスペースへの書き込みアクセスを実行し、
前記複数のＳＩＭＤ処理ユニットは、前記プライベート書き込みスペースから読み出し可能である、請求項９に記載の方法。
【請求項１１】
コンピュータデバイスによって実行されるときに前記コンピュータデバイスに方法を実行させるコンピュータ実行可能命令が記憶されたコンピュータ可読記憶媒体であって、前記方法は、
画像の一連の画素を一連のＳＩＭＤプロセッサに割り振ることと、
前記一連の画素の一部の画素を前記一連のＳＩＭＤプロセッサの各々の処理レーンで実行中の各スレッドに割り振ることと、
各処理レーンに関連する汎用レジスタ（ＧＰＲ）ファイルに前記一部の画素を記憶することと、
前記ＧＰＲファイル内のプライベートスペースにおける前記一部の画素に基づいてスレッド毎プライベート結果を算出することと、
前記スレッド毎プライベート結果を同一のレーンからの複数のスレッドによって算出される複数の追加的なスレッド毎プライベート結果と共に蓄積して前記ＧＰＲファイル内のグローバルスペース内に記憶されるレーン毎ローカル結果を生成することと、
前記レーン毎ローカル結果を前記ＧＰＲファイル内の前記グローバルスペースから前記処理レーンに関連するローカルデータシェア（ＬＤＳ）のプライベート領域に書き込むことと、を備えており、
前記ＬＤＳは前記処理レーンを含む前記ＳＩＭＤプロセッサにのみ関連しているコンピュータ可読記憶媒体。
【請求項１２】
前記方法は、
各レーン毎ローカル結果を前記ＬＤＳから第１の単一の処理レーンの第１の単一のＧＰＲファイルに読み込むことと、
ＳＩＭＤローカル結果を見いだすために前記ＬＤＳからの全てのレーン毎ローカル結果の結果を縮小することと、
前記ＳＩＭＤローカル結果を前記第１の単一のＧＰＲファイルから前記第１の単一の処理レーンに関連するグローバルデータシェア（ＧＤＳ）のプライベート領域に書き込むことと、を更に備えている、請求項１１に記載のコンピュータ可読記憶媒体。
【請求項１３】
前記方法は、
各ＳＩＭＤローカル結果を前記ＧＤＳから第２の単一の処理レーンの第２の単一のＧＰＲファイルに読み込むことと、
最終的な結果を見いだすために前記ＧＤＳからの全てのＳＩＭＤローカル結果の結果を縮小することと、
前記最終的な結果を書き込むことと、を更に備えている、請求項１２に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記最終的な結果を書き込むことは前記最終的な結果をメモリロケーションに書き込むことを備えている、請求項１３に記載のコンピュータ可読記憶媒体。
【請求項１５】
前記最終的な結果を書き込むことは前記最終的な結果を前記ＧＤＳに書き込み直すことを備えており、前記方法は、
ブロードキャスト読み出し命令を実行することと、
前記ブロードキャスト読み出し命令に応答して前記ＧＤＳから前記最終的な結果を前記ＧＰＲファイルに投入することと、
前記最終的な結果を後続の計算における中間結果として用いて後続のスレッド毎プライベート結果を算出することと、を更に備えている、請求項１３に記載のコンピュータ可読記憶媒体。
【請求項１６】
画像の一連の画素を一連のＳＩＭＤプロセッサに割り振ることと、
前記一連のＳＩＭＤプロセッサの各々の処理レーンで実行中の各スレッドに前記一連の画素の一部の画素を割り振ることと、
各処理レーンに関連する汎用レジスタ（ＧＰＲ）ファイルに前記一部の画素を記憶することと、
前記ＧＰＲファイル内のプライベートスペースにおける前記一部の画素に基いてスレッド毎プライベート結果を算出することと、
前記スレッド毎プライベート結果を同一のレーンからの複数のスレッドによって算出される複数の追加的なスレッド毎プライベート結果と共に蓄積して前記ＧＰＲファイル内のグローバルスペース内に記憶されるレーン毎ローカル結果を生成することと、
前記レーン毎ローカル結果を前記ＧＰＲファイル内の前記グローバルスペースから前記処理レーンに関連するローカルデータシェア（ＬＤＳ）のプライベート領域に書き込むことと、を備えた方法であって、
前記ＬＤＳは前記処理レーンを含む前記ＳＩＭＤプロセッサにのみ関連している方法。
【請求項１７】
各レーン毎ローカル結果を前記ＬＤＳから第１の単一の処理レーンの第１の単一のＧＰＲファイルに読み込むことと、
ＳＩＭＤローカル結果を見いだすために前記ＬＤＳからの全てのレーン毎ローカル結果の結果を縮小することと、
前記ＳＩＭＤローカル結果を前記第１の単一のＧＰＲファイルから前記第１の単一の処理レーンに関連するグローバルデータシェア（ＧＤＳ）のプライベート領域に書き込むことと、を更に備えた、請求項１６に記載の方法。
【請求項１８】
各ＳＩＭＤローカル結果を前記ＧＤＳから第２の単一の処理レーンの第２の単一のＧＰＲファイルに読み込むことと、
最終的な結果を見いだすために前記ＧＤＳからの全てのＳＩＭＤローカル結果の結果を縮小することと、
前記最終的な結果を書き込むことと、を更に備えた、請求項１７に記載の方法。
【請求項１９】
前記最終的な結果を書き込むことは、前記最終的な結果をメモリロケーションに書き込むことを備えている、請求項１８に記載の方法。
【請求項２０】
前記最終的な結果を書き込むことは、前記最終的な結果を前記ＧＤＳに書き込み直すことを備えており、
前記方法は、
ブロードキャスト読み出し命令を実行することと、
前記ブロードキャスト読み出し命令に応答して前記ＧＤＳから前記最終的な結果を前記ＧＰＲファイルに投入することと、
前記最終的な結果を後続の計算における中間結果として用いて後続のスレッド毎プライベート結果を算出することと、を更に備えた、請求項１８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概してグラフィックス処理ユニットにおける実行スレッド間でのデータの共有を最適化することに関する。
【背景技術】
【０００２】
グラフィックス処理ユニット（ＧＰＵ）はグラフィックス処理動作に対して最適化された特殊目的の集積回路である。ＧＰＵは多くの場合、グラフィックス処理を必要とするアプリケーション、例えばビデオゲームアプリケーションを実行するために使用されるコンピュータデバイス（例えばパーソナルコンピュータ、レンダリングファーム又はサーバ、携帯型デバイス、デジタルテレビジョン等）内に組み込まれる。
【０００３】
処理効率を改善するために、ＧＰＵは一般的に、単一命令多重化データ(Single Instruction, Multiple Data)（「ＳＩＭＤ」又は「ベクター」）命令を用いる並列スレッドを実行してデータレベルでの並列処理を達成している。これにより、例えば個々のＳＩＭＤレーン(lane)上で各画素に対する動作の別々のスレッドを実行することによって、多重化画素のデータに対してＳＩＭＤプロセッサが同一の命令を実行することが可能になる。しかし、任意の１つのＳＩＭＤレーン内で生成されるデータは典型的には、計算する上での複雑で且つ費用のかかるデータ記憶及び検索命令の実行なくしては、他のＳＩＭＤレーンにアクセスすることができない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
よって、ＳＩＭＤレーン間でのデータの共有を可能にするための改良された技術が求められている。
【課題を解決するための手段】
【０００５】
本発明の実施形態は、複数のＳＩＭＤ処理ユニットと、グローバルデータシェア（ＧＤＳ）とを備えたグラフィックス処理ユニットを含み、各ＳＩＭＤ処理ユニットは、複数のスレッドプロセッサと、各々が複数のスレッドプロセッサの１つと通信する複数の汎用レジスタ（ＧＰＲ）ファイルと、複数のスレッドプロセッサの各々と通信するローカルデータシェア（ＬＤＳ）とを備えており、ＧＤＳは複数のＳＩＭＤ処理ユニットの各々における複数のスレッドプロセッサの各々と通信する。
【０００６】
本発明の実施形態は、複数のＳＩＭＤ処理ユニットを形成することと、グローバルデータシェア（ＧＤＳ）を形成することとを備えた製造の方法を更に含み、各ＳＩＭＤ処理ユニットは、複数のスレッドプロセッサと、各々が複数のスレッドプロセッサの１つと通信する複数の汎用レジスタ（ＧＰＲ）ファイルと、複数のスレッドプロセッサの各々と通信するローカルデータシェア（ＬＤＳ）とを備えており、ＧＤＳは複数のＳＩＭＤ処理ユニットの各々における複数のスレッドプロセッサの各々と通信する。
【０００７】
本発明の実施形態は、コンピュータデバイスによって実行されるときにコンピュータデバイスに方法を実行させるコンピュータ実行可能命令が記憶されたコンピュータ可読媒体を追加的に含み、方法は、画像の一連の画素を一連のＳＩＭＤプロセッサに割り振ることと、一連の画素の一部の画素を一連のＳＩＭＤプロセッサの各処理レーンに割り振ることと、各処理レーンに関連する汎用レジスタ（ＧＰＲ）ファイルに一部の画素を記憶することと、一部の画素に基いてレーン毎ローカル結果を算出することと、ＧＰＲファイルからのレーン毎ローカル結果を処理レーンに関連するローカルデータシェア（ＬＤＳ）のプライベート領域に書き込むこととを備えており、ＬＤＳは処理レーンを含むＳＩＭＤプロセッサにのみ関連している。
【０００８】
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に記述されている。本発明がここに記述される特定の実施形態に限定されないことを特記しておく。当該実施形態は例示の目的のみのためにここに提示されている。追加的な実施形態はここに含まれる教示に基き関連分野を含めた当業者にとって明らかであろう。
【図面の簡単な説明】
【０００９】
添付の図面は、ここに組み込まれまた出願書類の一部をなし、本発明の実施形態を示しそして、明細書と共に本発明の原理を説明し並びに関連分野を含めた当業者が本発明をつくり及び使用することを可能にするのに更に役立つ。
【００１０】
【図１】図１は本発明の実施形態に従うコンピューティングアーキテクチャを示す図である。
【００１１】
【図２】図２は本発明の実施形態に従うローカルデータシェアを示す図である。
【００１２】
【図３】図３は本発明の実施形態に従うグローバルデータシェアを示す図である。
【００１３】
【図４】図４は本発明に従い画像処理アルゴリズムを改善するためにコンピューティングアーキテクチャを利用可能なステップを示すフローチャートである。
【００１４】
【図５】図５は本発明の実施形態を実装可能な例示的なコンピュータシステムを示す図である。
【００１５】
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に記述されている。本発明がここに記述される特定の実施形態に限定されないことを特記しておく。当該実施形態は例示の目的のみのためにここに提示されている。追加的な実施形態はここに含まれる教示に基き関連分野を含めた当業者にとって明らかであろう。
【発明を実施するための形態】
【００１６】
Ｉ．序論
本発明の以下の詳細な説明は、この発明に合致する例示的な実施形態を示す添付の図面を参照する。他の実施形態も可能であり、本発明の精神及び範囲内で実施形態に対して修正がなされ得る。従って、詳細な説明は本発明を限定することを意図されたものではない。むしろ本発明の範囲は添付の特許請求の範囲によって画定される。
【００１７】
本発明はソフトウエア、ハードウエア、ファームウエア、及び／又は図面に示された実体の多くの異なる実施形態において後述するように実装又は実施され得ることが当業者にとって明らかであろう。本発明を実装又は実施するハードウエアの特別な制御を伴ういかなる現実的なソフトウエアコードも本発明を限定していない。このように、本発明の動作上の挙動は、ここに提示される詳細さのレベルを前提として実施形態の修正及び変更が可能であるとの理解のもとに記述されることになる。また、そして当業者にとって明らかであろうように、この発明の種々の実施形態のシミュレーション、合成及び／又は製造は、一つには、一般的なプログラミング言語（例えばＣ又はＣ＋＋）、ＶｅｒｉｌｏｇＨＤＬ、ＶＨＤＬ、ＡｌｔｅｒａＨＤＬ（ＡＨＤＬ）等を含むハードウエア記述言語（ＨＤＬ）、あるいは他の利用可能なプログラミングを含むコンピュータ可読コード（上述したような）及び／又は回路等キャプチュアツール（例えば回路キャプチュアツール）の使用を通して達成され得る。
【００１８】
このコンピュータ可読コードは、半導体、磁気ディスク、光学ディスク（例えばＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ）を含むあらゆる既知のコンピュータ使用可能媒体内に配置されてよく、またコンピュータが使用可能な（例えば可読な）伝送媒体（例えばデジタル、光学的、又はアナログ系の媒体を含む搬送波又は他のあらゆる媒体）において具現化されるコンピュータデータ信号として処置されてよい。従って、コードは、インターネット及びそれと同等のもの(the Internet and internets)を含む通信網を介して伝送されてよい。上述したシステム及び技術により達成される機能及び／又は提供される構造は、プログラムコードにおいて具現化されるコア（例えばＧＰＵコア）内に表現することができ、また集積回路の生産の一部としてハードウエアに変換されてよいことが理解される。
【００１９】
図１は本発明の実施形態に従うコンピューティングアーキテクチャ１００を示している。アーキテクチャ１００は１つ以上のＳＩＭＤプロセッサ１０２ａ〜１０２ｍを含む。各ＳＩＭＤプロセッサは本発明の実施形態に従いＳＩＭＤ＿０＿１０２ａ内に示される１つ以上のスレッドプロセッサ１０４ａ０〜１０４ａｎ及びＳＩＭＤ＿ｍ＿１０２ｍ内に示される１つ以上のスレッドプロセッサ１０４ｍ０〜１０４ｍｎを含む。各スレッドプロセッサはまた本発明の実施形態に従いＳＩＭＤ＿０＿１０２ａ内に示される汎用レジスタ（ＧＰＲ）ファイル１０６ａ０〜１０６ａｎ及びＳＩＭＤ＿ｍ＿１０２ｍ内に示されるＧＰＲファイル１０６ｍ０〜１０６ｍｎを伴う。各々が複数のスレッドプロセッサ及び複数のＧＰＲファイルを伴う複数のＳＩＭＤプロセッサが本発明の範囲内で意図されていることを参照符号は示しているが、場合によっては個々のＳＩＭＤプロセッサ、スレッドプロセッサ及びＧＰＲファイルが基本参照番号（例えば１０２、１０４、及び１０６）によって参照されるであろう。
【００２０】
単一のスレッドプロセッサ１０４及びそれに付随するＧＰＲファイル１０６の組み合わせは、一般的にはＳＩＭＤ処理レーン（あるいは単に「レーン」又は「ＳＩＭＤレーン」）と称される。関連分野を含めた当業者であれば理解するであろうように、スレッドプロセッサ１０４及びＧＰＲファイル１０６に付随する付加的な要素が単一のＳＩＭＤレーンの一部を構成してよく、また図１に示される特定の実施形態は例示を目的としたものであり限定を目的としたものではない。
【００２１】
本発明の実施形態によると、アーキテクチャ１００はローカルデータシェア（ＬＤＳ）１０８ａ〜１０８ｍを更に含み、１つのＬＤＳ１０８は各ＳＩＭＤプロセッサ１０２に付随する。また、アーキテクチャ１００は、各ＳＩＭＤプロセッサ１０２の各スレッドプロセッサ１０４によってアクセス可能なグローバルデータシェア（ＧＤＳ）１１０を含む。ＬＤＳ及びＧＤＳについては以下に更に論じられる。
【００２２】
アーキテクチャ１００での処理を実行するに際しては、処理は１つのＳＩＭＤプロセッサ１０２での実行のためのスレッドの集合を生じさせることができる。スレッドの集合における各スレッドはＳＩＭＤプロセッサ１０２内の特定のＳＩＭＤレーンに割り当てられ、従って各スレッドは特定のスレッドプロセッサ１０４及びＧＰＲファイル１０６に割り当てられる。本発明の実施形態によると、共通処理から生じるこのスレッドの集合は「ウエーブフロント(wavefront)」として１つのＳＩＭＤプロセッサ１０２に割り当てられ、ウエーブフロント内の個々のスレッドの実行を一時的にマスキングすることを可能にする。本発明の実施形態によると、多重化ウエーブフロントがスレッドの任意の他の集合として１つのＳＩＭＤプロセッサ１０２に割り当てられてよい。ＳＩＭＤプロセッサ１０２内で動作している全てのスレッドは多重化ウエーブフロント又はその任意の一部からなり、集合的に一群のスレッドと称される。
【００２３】
ＩＩ．汎用レジスタ
本発明の実施形態によると、各ＳＩＭＤプロセッサ１０２は１つ以上のスレッドプロセッサ１０４を含み、各スレッドプロセッサは１つのＧＰＲファイル１０６を伴う。上述したように、１つのウエーブフロントが１つのＳＩＭＤプロセッサに割り当てられる。ウエーブフロントの各スレッドは特定のＳＩＭＤレーンでの実行のために割り当てられ、従ってそのＳＩＭＤレーンに付随する特定のスレッドプロセッサ１０４及びＧＰＲファイル１０６に割り当てられる。スレッドプロセッサ１０４で実行されているスレッドは、同じレーンのＧＰＲファイル１０６のレジスタに対して読み出し及び書き込みが可能である。関連分野を含めた当業者であれば理解するであろうように、ＧＰＲファイル１０６内のレジスタにアクセスするためにスレッドプロセッサ１０４がＧＰＲファイル１０６と通信することを可能にする多くのレジスタアクセス実装が存在し、また本発明の実施形態はいかなる特定の実装にも限定されない。
【００２４】
各ＧＰＲファイル１０６は本発明の実施形態に従い、スレッドプロセッサ１０４で実行されているスレッドに関連付けられる指定プライベートスペース、即ちレジスタブロックを含む。本発明の更なる実施形態によると、ＧＰＲファイル１０６は複数のプライベートレジスタブロックに前もってセグメント化されている。スレッドプロセッサ１０４で実行されている新たなスレッドが最初の実行でのプライベートレジスタブロックを割り当てられて、それら新たなスレッドのみがそのプライベートレジスタブロックへの書き込みアクセスを有することとなる。
【００２５】
本発明の追加的な実施形態によると、ＧＰＲファイル１０６は共有グローバルプールを含み、スレッドプロセッサ１０４で実行されている任意のスレッドは、そのスレッドがどのウエーブフロントに関連付けられているかにかかわらず共有グローバルプールに対して書き込み及び読み出しが可能である。この機能は、予約されたグローバル領域に対して、近隣のスレッドがアクセスすることを可能にし、それにより順序無依存の連想グローバルデータ(order-independent associative global data)での読み出し、修正及び書き込みを可能にする。この機能は更に、同一のＳＩＭＤレーンに割り当てられているにもかかわらず異なるウエーブフロントに属する複数スレッド間での高速な共有を可能にする。
【００２６】
ＩＩＩ．ローカルデータシェア
上述したように各ＳＩＭＤプロセッサ１０２は１つのＬＤＳ１０８を含む。このＬＤＳ１０８は同一ＳＩＭＤプロセッサ１０２内で全てのスレッドプロセッサ１０４によって直接アクセス可能である。本発明の実施形態によると、ＬＤＳ１０８は複数のプライベート書き込みスペースにセグメント化され、各プライベート書き込みスペースは１つのスレッドプロセッサ１０４に対して実行される１つのスレッドに対応し且つそのスレッドのために予約される。本発明の追加的な実施形態によると、各プライベート書き込みスペースは１つのスレッドプロセッサ１０４に対応する。関連分野を含めた当業者であれば理解するであろうように、ＬＤＳ１０８のセグメント化の方法は変更され得るものであり、また前述したセグメント化フォーマットは例示を目的としたものであり限定を目的とはしていない。
【００２７】
本発明の実施形態によると、ＬＤＳ１０８のプライベート書き込みスペースに割り当てられたスレッドプロセッサ１０４で実行されているスレッドは、その割り当てられたプライベート書き込みスペースに対して書き込み及び読み出しが可能である。また、いずれのスレッドプロセッサ１０４もがＬＤＳ１０８のいずれのプライベート書き込みスペースからも読み出し可能であり、それにより複数のスレッドプロセッサ１０４がＳＩＭＤプロセッサ１０２内でデータを共有することを可能にしている。関連分野を含めた当業者であれば理解するであろうように、ＬＤＳ１０８は「オーナ書き込み」モデルを用いて動作するが他のアクセスモデルも利用可能であり、またオーナ書き込みモデルは例示を目的としたものであり限定を目的とはしていない。
【００２８】
本発明の追加的な実施形態によると、ＬＤＳ１０８のプライベート書き込みスペースに割り当てられた個々のスレッドは、割り当てられたプライベート書き込みスペースに対して書き込み及び読み出しが可能である。その結果、他のスレッドプロセッサ１０４で実行されているスレッドを含めＳＩＭＤプロセッサ１０２で実行されているいかなるスレッドも、その割り当てられたプライベート書き込みスペースからデータを読み出すことができる。
【００２９】
オーナ書き込みモデルを有するＬＤＳ１０８を設けることによって、上述のＧＰＲ共有におけるように単一のスレッドプロセッサ１０４で実行されている複数スレッドの間でだけでなく、ＳＩＭＤ１０２の全てのスレッドプロセッサ１０４で実行されている全てのスレッドの間でのデータの共有が可能になる。これにより、１つのウエーブフロント内の複数スレッドが当該ウエーブフロント内で他のスレッドとデータを共有することが可能になる。またこれにより、同一のＳＩＭＤ１０２で実行されている任意のウエーブフロント内で動作中の複数スレッドが、一群のスレッド内の他の任意のウエーブフロントに属する複数スレッドからのデータにアクセスすることが可能になる。
【００３０】
図２は本発明の実施形態によるＬＤＳメモリ書き込みアーキテクチャ２００を示しており、図１のＬＤＳ１０８ａ〜１０８ｍに対応している。関連分野を含めた当業者であれば、図２に示されているデータ幅及び論理レイアウトは図示されたとおり正確に実装される必要はなく、また種々のデータ幅及び論理レイアウトが適応可能であることを理解するであろう。単一のＳＩＭＤプロセッサ１０２内の全ＧＰＲファイル１０６の集合は、図２においてはＧＰＲ２０１として示されている。
【００３１】
本発明の実施形態によると、ＧＰＲ２０１からＬＤＳ２０３へのデータの書き込みは、スレッドベクター書き込み位置に対応するＬＤＳ内のアドレスにデータを書き込むことにより達成され、スレッドベクター書き込み位置は特定のスレッドの実行のために予約されたＬＤＳの区画である。これはＬＤＳ内でのスレッドのプライベート書き込みスペースと称される。関連分野を含めた当業者であれば理解するであろうように、幾つものアドレス指定モード(addressing modes)が使用可能であり、またここでのアドレス指定モードは例示を目的としたものであり限定を目的とはしていない。
【００３２】
本発明の更なる実施形態によると、ＬＤＳにおけるプライベート書き込みスペースは可変である。限定はされないが例えば、１６までのウエーブフロントに適応するプライベート書き込みスペースがスレッド毎に１つのレジスタとして割り当てられ、あるいは代替的には１６のレジスタ及び１つだけのウエーブフロントが割り当てられる。関連分野を含めた当業者であれば認識するであろうように、スレッド毎に割り当てられる多数のレジスタの多数の組み合わせ及び、結果としてＬＤＳに収容され得るウエーブフロントの総数が存在し、上述のグルーピングは例示的なものであり限定的なものではない。追加的な実施形態では、複数のウエーブフロントはスレッドの可変サイズの１群に分類することもができる。
【００３３】
本発明の追加的な実施形態によると、１つ以上のマルチプレクサ２０２がＧＰＲ２０１からＬＤＳ２０３へデータを書き込むために構成される。書き込みが予定されている場合、データはＧＰＲ２０１から読み出され、そしてＬＤＳ２０３へ書き込まれる。実施形態においては、４つのスレッドに対するデータが単一クロック周期においてＧＰＲ２０１からＬＤＳ２０３へ書き込まれる。
【００３４】
前述したように、本発明の実施形態ではＳＩＭＤプロセッサ１０２毎に１つのＬＤＳメモリ１０８／２０３がある。本発明の付加的な実施形態によると、ＳＩＭＤプロセッサ１０２で実行されている各ウエーブフロントはＬＤＳ１０８内のウエーブフロントメモリ領域に割り当てられる。ウエーブフロントを含む各スレッドはこのより大きなウエーブフロントメモリ領域内の特定のメモリ領域に割り当てられる。これにより、スレッドが、そのスレッドが割り当てられていないメモリ領域又はそのスレッドの対応するウエーブフロントの他のスレッドによって共有されていないメモリ領域にデータを書き込むことが防止されるにもかかわらず、スレッドがその割り当てられたメモリ領域内でデータを交換することが可能になる。
【００３５】
限定はされないが例えばＬＤＳメモリ２０３は、メモリを各ウエーブフロントに対応するメモリ領域に分けることによって索引を付される。例えば、メモリ領域２０６はウエーブフロント０に対応している。メモリ領域２０６へ書き込む場合、ウエーブフロント０のスレッド０〜３は符号２０４で示されるようにバンクインデックス０でＬＤＳ２０３へ書き込むことが予定される。ある実施形態では、この書き込みは単一クロック周期内に生じる。この処理はウエーブフロント０内の一連の４つのスレッドの各々に対して繰り返され、各連続する一連の４つのスレッドは続くクロック周期において次のバンクに対して書き込む。関連分野を含めた当業者であれば、タイミング及びメモリサイズのための値が限定ではなく例示のために提供されていることを理解するであろう。
【００３６】
本発明の更なる実施形態によると、ＬＤＳからのデータの高速読み出しを可能にする特別なブロードキャスト読み出しモードが利用可能であり、ＬＤＳからのデータはウエーブフロント内の全てのスレッド又は共有レジスタへ戻される。ある実施形態では、ブロードキャスト読み出しモードは１乃至４のダブルワード(dwords)のデータの高速読み出しを実行し、それぞれのウエーブフロント内の全てのスレッドに対してデータを４クロック周期内で戻す。
【００３７】
本発明の追加的な実施形態によると、バリア命令(barrier instructions)が実装される。このバリア命令は同一の処理から生じる全てのスレッド（例えば一群のスレッド、又はウエーブフロント）内に存在していてよく、スレッドの全てが開始前に当該バリアポイントに同期することを強制する。このことは、限定はされないが例えば、ＬＤＳにアクセスするときのハザード状態を回避するために用いられてよい。例えば、他のウエーブフロントからの異なるスレッドにより書き込まれたＬＤＳ内のデータに対する読み出し命令をスレッドが実行している場合、スレッドが読み出しを要求しているデータがこの時点で利用可能であるかは未知である。このデータを提供する書き込み命令をバリア命令に先立ち発行し、且つ読み出し命令をバリア命令の後に発行することによって、読み出し命令がＬＤＳから正確なデータを取得するのを保証することができる。関連分野を含めた当業者であれば理解するであろうように、限定はされないが例えば他のアクセスハザードの回避を含む他の利用がこのバリア命令にとって可能である。
【００３８】
ＩＶ．グローバルデータシェア
図３は本発明の実施形態に従い全てのＳＩＭＤ処理ユニットについての読み出し及び書き込み動作を支援するＧＤＳ３００である。また本発明の更なる実施形態によると、ＳＩＭＤ処理ユニットはブロードキャストを伴うＧＤＳ３００からデータを要求するように動作し、ＧＤＳがシステム内のＧＰＲファイルの全てをＧＤＳ３００からのブロードキャストデータで更新することが可能になる。
【００３９】
関連分野を含めた当業者であれば、図３に示されているデータ幅及び論理レイアウトは図示されたとおり正確に実装される必要はなく、また種々のデータ幅及び論理レイアウトが適応可能であることを理解するであろう。
【００４０】
Ｖ．アプリケーション例
図４は本発明の実施形態に従いプライベートＧＰＲスペース、グローバルＧＰＲスペース、ＬＤＳ、及びＧＤＳの前述した機能を利用するアプリケーション例を示すフローチャート４００である。限定はされないが例えばフローチャート４００は、単一経路における画像の特性、例えば画像の最大及び最小輝度値を算出するために利用することができる。関連分野を含めた当業者であれば理解するであろうように、他のアプリケーションもまたプライベートＧＰＲスペース、グローバルＧＰＲスペース、ＬＤＳ、及びＧＤＳの構成を利用することができ、フローチャート４００は例示を目的としたものであり限定を目的とはしていない。
【００４１】
方法はステップ４０２で開始されステップ４０４へ進み、画像の複数画素の一部(subset)が１つ以上のウエーブフロントに割り振られる。各ウエーブフロント内において、ウエーブフロントに割り当てられた複数画素の一部は、ＳＩＭＤプロセッサ１０２に割り当てられたウエーブフロントの各スレッドに割り振られる。ウエーブフロントの各スレッドは割り当てられたＳＩＭＤプロセッサ１０２のレーン内で実行され、そのレーンは特定のスレッドプロセッサ１０４及びそれに付随するＧＰＲファイル１０６に対応している。１つ以上のウエーブフロントが単一のＳＩＭＤプロセッサ１０２内で実行されていてよいので、フローチャート４００のステップを実行中の多重化スレッドは同一ＳＩＭＤプロセッサ１０２内の同一レーンに割り当てられてよい。
【００４２】
ステップ４０６では、各スレッドの対応する複数画素の一部がその関連するＧＰＲファイル１０６内に記憶される。スレッドプロセッサ１０４における個々のスレッドは次いでステップ４０８にて、スレッド毎プライベート結果を算出する。最大及び最小輝度値の例との関係では、スレッドプロセッサ１０４は実行中のスレッドが割り当てられた複数画素の一部に対して最大及び最小輝度値を算出する。ウエーブフロントの各レーンは、その結果を自動的に各レーンのグローバルＧＰＲスペース内に記憶されているレーン毎の結果と結びつける。画像の全ての画素の予定が決定されてから、ＬＤＳ１０８におけるスレッドのプライベート領域に書き込まれつつあるグローバルレジスタに記憶されている「ローカル結果」を伴って縮小段階(reduction phase)が開始される。
【００４３】
各ＳＩＭＤ１０２に対して、ＳＩＭＤ１０２の各レーンによって生成されるローカル結果の全てを読み出すために１つのレーンが次いでステップ４１２で構成され、ＳＩＭＤローカル結果を見いだすためにデータを縮小する。例えば、単一のスレッドプロセッサ１０４に対応する１つのレーンが割り当てられて、ＳＩＭＤローカル結果を見いだすために複数のローカル結果が縮小される。当該スレッドプロセッサ１０４は次いで全てのローカル結果をＬＤＳ１０８からＧＰＲファイル１０６へ読み込み、全てのローカル結果から最大及び最小輝度値を算出する。この計算の結果がＳＩＭＤローカル結果となる。ステップ４１４では、スレッドプロセッサ１０４がＳＩＭＤローカル結果をＧＤＳ１１０のプライベート領域に書き込む。
【００４４】
同様にステップ４１６では、単一のスレッドプロセッサ１０４がＳＩＭＤローカル結果の全てをＧＤＳ１１０から読み出すと共に収集し、最終的な結果を見いだすためにデータを縮小する。例えば、単一のスレッドプロセッサ１０４が全てのＳＩＭＤローカル結果をＧＤＳ１１０からそのＧＰＲファイル１０６へ読み込み、全てのＳＩＭＤローカル結果の間で最大及び最小輝度値を算出する。この計算の結果は縮小の最終的な結果となる。ステップ４１８では最終的な結果が次いでメモリロケーションに記憶される。本発明の追加的な実施形態によると、最終的な結果はＧＤＳに記憶し直され、記憶動作の後、フローチャート４００に説明される動作の第２の経路に対してＧＰＲファイル１０６を投入するための、ステップ４１８で算出された最終的な結果を中間結果として用いるブロードキャスト読み込みが続く。
【００４５】
ＶＩ．コンピュータシステム実装
本発明の種々の側面がソフトウエア、ファームウエア、ハードウエア、又はそれらの組み合わせによって実装され得る。図５は本発明又はその一部がコンピュータ可読コードとして実装され得る例示的なコンピュータシステム５００を示している。本発明の種々の実施形態がこの例示的なコンピュータシステム５００に関して説明される。本明細書を読んだ後で、どのようにして他のコンピュータシステム及び／又はコンピュータアーキテクチュアを用いて本発明を実施又は実装するかについて、関連分野を含めた当業者にとって明白になろう。
【００４６】
コンピュータシステム５００は１つ以上のプロセッサ、例えばプロセッサ５０４を含む。プロセッサ５０４は特定用途のあるいは汎用のプロセッサであってよい。プロセッサ５０４は通信基盤(communication infrastructure)５０６（例えばバス又はネットワーク）に接続される。
【００４７】
コンピュータシステム５００はまた、望ましくはランダムアクセスメモリ（ＲＡＭ）である主メモリ５０８を含み、更に補助メモリ５１０を含むことができる。補助メモリ５１０は例えば、ハードディスクドライブ５１２、リムーバブル記憶装置５１４、及び／又はメモリスティックを含んでいてよい。リムーバブル記憶装置５１４はフレキシブルディスクドライブ、磁気テープドライブ、光学ディスクドライブ、フラッシュメモリ等を備えていてよい。リムーバブル記憶装置５１４は周知の方法によりリムーバブル記憶ユニット５１８から読み出し及び／又はリムーバブル記憶ユニット５１８へ書き込みする。リムーバブル記憶ユニット５１８はフレキシブルディスク、磁気テープ、光学ディスク等を備えていてよく、リムーバブル記憶装置５１４によって読み出され且つ書き込まれる。関連分野を含めた当業者に理解されるであろうように、リムーバブル記憶ユニット５１８はコンピュータソフトウエア及び／又はデータが既に記憶されたコンピュータ利用可能記憶媒体を含む。
【００４８】
代替的な実装においては、補助メモリ５１０は、コンピュータプログラム又は他の命令がコンピュータシステム５００に読み込まれることを可能にする他の同様の手段を含むことができる。当該手段は例えばリムーバブル記憶ユニット５２２及びインタフェース５２０を含んでよい。当該手段の例は、プログラムカートリッジ及びカートリッジインタフェース（それらの例はビデオゲームデバイスにおいて見られる）、リムーバブルメモリチップ（例えばＥＰＲＯＭ又はＰＲＯＭ）及び関連するソケット、並びにソフトウエア及びデータをリムーバブル記憶ユニット５２２からコンピュータシステム５００へ転送することを可能にする他のリムーバブル記憶ユニット５２２及びインタフェース５２０を含むことができる。
【００４９】
コンピュータシステム５００はまた通信インタフェース５２４を含むことができる。通信インタフェース５２４はソフトウエア及びデータがコンピュータシステム５００と外部デバイスの間で転送されることを可能にする。通信インタフェース５２４はモデム、ネットワークインタフェース（例えばＬＡＮカード）、通信ポート、ＰＣＭＣＩＡスロット及びカード等を含むことができる。通信インタフェース５２４を介して転送されるソフトウエア及びデータは、電子的、電磁気的、光学的であってよい信号、又は通信インタフェース５２４によって受け取られることが可能な他の信号の形態にある。これらの信号は通信パス５２６を介して通信インタフェース５２４へ供給される。通信パス５２６は信号を伝え、ワイヤ若しくはケーブル、光ファイバ、電話線、携帯電話リンク、ＲＦリンク又は他の通信チャネルを用いて実装され得る。
【００５０】
この文書では、「コンピュータプログラム媒体」及び「コンピュータ使用可能媒体」という用語は、リムーバブル記憶ユニット５１８、リムーバブル記憶ユニット５２２、及びハードディスクドライブ５１２に組み込まれるハードディスクを一般的には参照して用いられる。通信パス５２６を介して伝えられる信号もまた、ここに説明される論理を具現化することができる。コンピュータプログラム媒体及びコンピュータ使用可能媒体はまた、主メモリ５０８及び補助メモリ５１０等のメモリ半導体（例えばＤＲＡＭ等）であってよいメモリを参照してよい。これらのコンピュータプログラム製品はコンピュータシステム５００にソフトウエアを供給するための手段である。
【００５１】
コンピュータプログラム（コンピュータ制御論理あるいはデータ及び／又は命令とも称される）は主メモリ５０８及び／又は補助メモリ５１０内に記憶される。コンピュータプログラムはまた、通信インタフェース５２４を介しても受け取られることができる。当該コンピュータプログラムは、実行されたときに、ここで論じられる本発明をコンピュータシステム５００が実施又は実装することを可能にする。特に、コンピュータプログラムは、実行されたときに、本発明の処理をプロセッサ５０４が実施又は実装することを可能にする。従って、当該コンピュータプログラムはコンピュータシステム５００の制御器に相当する。ソフトウエアを用いて本発明が実施又は実装される場合、ソフトウエアはコンピュータプログラム製品内に記憶されていてよく、リムーバブル記憶装置５１４、インタフェース５２０、ハードディスクドライブ５１２又は通信インタフェース５２４を用いてコンピュータシステム５００内に取り込まれてよい。
【００５２】
本発明はまた、任意のコンピュータ利用可能媒体に記憶されるソフトウエアを備えるコンピュータプログラム製品に向けられている。当該ソフトウエアは、１つ以上のデータ処理デバイス内で実行されたときに、１つ以上のデータ処理デバイスにここで説明されているような又は前述したような動作をさせ、ここに説明される本発明の実施形態を実行するコンピュータデバイス（例えばＡＳＩＣ又はプロセッサ）の合成及び／又は製造を可能にする。本発明の実施形態は、現在知られている又は将来知られることになる任意のコンピュータ使用可能又はコンピュータ可読の媒体を採用する。コンピュータ使用可能媒体の例は、限定はされないが、主要記憶デバイス（例えば任意の種類のランダムアクセスメモリ）、補助記憶デバイス（例えばハードドライブ、フレキシブルディスク、ＣＤ＿ＲＯＭ、ＺＩＰディスク、テープ、磁気記憶デバイス、光学記憶デバイス、ＭＥＭＳ、ナノテクノロジー記憶デバイス等）、及び通信媒体（例えば有線及び無線通信ネットワーク、ローカルエリアネットワーク、広域ネットワーク、イントラネット等）を含む。
【００５３】
ＶＩＩ．結論
本発明の種々の実施形態が上に説明されてきたが、それらは例示のみを目的として提示されたものであり、限定を目的とはしていない。添付の特許請求の範囲で画定されるような本発明の精神及び範囲から逸脱することなしに、形態及び詳細における種々の変更がここになされ得ることが関連分野をも含めた当業者によって理解されるであろう。本発明はこれらの例示に限定されないことが理解されるべきである。本発明はここに説明されるように動作する任意の要素に適用可能である。従って、本発明の広さ及び範囲は上述のいかなる例示的実施形態によっても限定されるべきではなく、後述の特許請求の範囲及びそれらの均等なものに従ってのみ画定されるべきである。
【図１】
0005461533.tif 000002
【図２】
0005461533.tif 000003
【図３】
0005461533.tif 000004
【図４】
0005461533.tif 000005
【図５】
0005461533.tif 000006