(57)【要約】算術演算を効率的に実行しそして初等関数を計算できる図形プロセッサが記述される。図形プロセッサは算術演算を実行できる少なくとも１つの算術論理ユニット（ＡＬＵ）および初等関数を計算できる少なくとも１つの初等関数ユニットを有する。ＡＬＵおよび初等関数ユニットはそれらが処理能力を改善するために同時に動作できるように調整されることができる。図形プロセッサはまた複数ＡＬＵ、例えば、４ＡＬＵより少数の初等関数ユニットと単一の初等関数ユニットとを含んでもよい。４ＡＬＵは（１）１画素について１属性の４コンポーネントおよび（２）４画素について１属性の１コンポーネント上で算術演算を実行できる。単一の初等関数ユニットは一度に１画素の１コンポーネント上で動作できる。単一の初等関数ユニットの使用はなお良好な性能を提供する一方でコストを引き下げることができる。
2009538486.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
算術演算を実行するように動作する少なくとも１つの算術論理ユニット（ＡＬＵ）と、そして
初等関数を計算するように動作する少なくとも１つの初等関数ユニットとを含み、該少なくとも１つの初等関数ユニットおよび該少なくとも１つのＡＬＵが複数スレッド上で同時に動作可能である
装置。
【請求項２】
および４ＡＬＵを含む請求項１記載の装置。
【請求項３】
該４ＡＬＵが１画素について１属性の４コンポーネントまでの上で算術演算を実行するように動作可能である、請求項２記載の装置。
【請求項４】
該４ＡＬＵが４画素までについて１属性の１コンポーネントの上で算術演算を実行するように動作可能である、請求項２記載の装置。
【請求項５】
およびＡＬＵよりも少数の初等関数ユニットを含む請求項１記載の装置。
【請求項６】
および単一の初等関数ユニットを含む請求項１記載の装置。
【請求項７】
該少なくとも１つの初等関数ユニットに関する命令が負荷命令として同期と共にコンパイルされる、請求項１記載の装置。
【請求項８】
制御ビットが該少なくとも１つの初等関数ユニットに関する該命令による他の命令と共に該少なくとも１つの初等関数ユニットに関する命令の同期のために使用される、請求項１記載の装置。
【請求項９】
該少なくとも１つのＡＬＵが第１のスレッドに関する第１の命令を実行するように動作可能であり、そして該少なくとも１つの初等関数ユニットが第２のスレッドに関する第２の命令を該少なくとも１つのＡＬＵと同時に実行するように動作可能である、請求項１記載の装置。
【請求項１０】
該少なくとも１つのＡＬＵおよび該少なくとも１つの初等関数ユニットが異なる待ち時間を有する、請求項１記載の装置。
【請求項１１】
さらに、該少なくとも１つのＡＬＵとメモリシステムとの間および該少なくとも１つの初等関数ユニットと該メモリシステムとの間のデータの交換を容易とするように動作する負荷制御ユニットを含む、請求項１記載の装置。
【請求項１２】
該少なくとも１つの初等関数ユニットが該負荷制御ユニットに連結される、請求項１１記載の装置。
【請求項１３】
該少なくとも１つの初等関数ユニットが該負荷制御ユニットと同時に動作可能である、請求項１１記載の装置。
【請求項１４】
該少なくとも１つの初等関数ユニットに関する要求および該負荷制御ユニットに関する負荷要求がバスを共有し、そして該少なくとも１つの初等関数ユニットおよび該負荷制御ユニットが異なるスレッドを同時に実行するように動作可能である、請求項１２記載の装置。
【請求項１５】
さらに少なくとも１つの図形アプリケーションからスレッドを受信するようにおよび該少なくとも１つのＡＬＵおよび該少なくとも１つの初等関数ユニットによって該スレッドの実行を予定するように動作するスケジューラを含む、請求項１記載の装置。
【請求項１６】
該少なくとも１つの初等関数ユニットが該スケジューラに連結される、請求項１５記載の装置。
【請求項１７】
さらに、該少なくとも１つのＡＬＵおよび該少なくとも１つの初等関数ユニットと連結されたおよび該少なくとも１つのＡＬＵおよび該少なくとも１つの初等関数ユニットからの結果を蓄積するように動作する出力バッファを含む、請求項１記載の装置。
【請求項１８】
集積回路であって、
算術演算を実行するように動作する少なくとも１つの算術論理ユニット（ＡＬＵ）と、そして
初等関数を計算するように動作する少なくとも１つの初等関数ユニットとを含み、該少なくとも１つの初等関数ユニットおよび該少なくとも１つのＡＬＵが複数スレッド上で同時に動作可能である
集積回路。
【請求項１９】
および、４ＡＬＵおよび４よりも少数の初等関数ユニットを含む請求項１８記載の集積回路。
【請求項２０】
無線装置であって、
算術演算を実行するように動作する少なくとも１つの算術論理ユニット（ＡＬＵ）および初等関数を計算するように動作する少なくとも１つの初等関数ユニットを含む図形プロセッサと、なお該少なくとも１つの初等関数ユニットおよび該少なくとも１つのＡＬＵが複数スレッド上で同時に動作可能であり、そして
該図形プロセッサに関するデータを蓄積するように動作するメモリシステムと、
を含む無線装置。
【請求項２１】
該図形プロセッサが４ＡＬＵおよび４よりも少数の初等関数ユニットを含む、請求項２０記載の無線装置。
【請求項２２】
装置であって、
算術演算を実行するように動作する少なくとも１つの算術論理ユニット（ＡＬＵ）と、そして
初等関数を計算するように動作する少なくとも１つの初等関数ユニットとを含み、該少なくとも１つの初等関数ユニットの数が該少なくとも１つのＡＬＵの該数よりも少数である
装置。
【請求項２３】
該少なくとも１つのＡＬＵが該少なくとも１つの初等関数ユニットと同時に動作可能である、請求項２２記載の装置。
【請求項２４】
さらに、該少なくとも１つのＡＬＵとメモリシステムとの間および該少なくとも１つの初等関数ユニットと該メモリシステムとの間のデータの交換を容易とするように動作する負荷制御ユニットを含む請求項２２記載の装置。
【請求項２５】
該少なくとも１つの初等関数ユニットが該負荷制御ユニットに連結される、請求項２４記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
［分野］
本開示は一般に回路に関し、そしてより詳しくは図形プロセッサに関する。
【０００２】
［背景］
図形プロセッサはビデオゲーム、図形、計算機利用設計（ＣＡＤ）、シミュレーションおよび可視化ツール、イメージング、等のような、いろいろなアプリケーションのための２次元（２−Ｄ）および３次元（３−Ｄ）画像を表現するために広く使用される。３−Ｄ画像は表面でモデル化され、そして各表面は多角形（典型的に三角形）で近似されることができる。３−Ｄ画像を表すために使用された三角形の数は画像の望ましい解像度と同様に表面の複雑性に左右され、そして非常に大きくなり、例えば、数百万であるかもしれない。各三角形は３つの頂点によって定義され、そして各頂点は空間配位、カラーバリュー、およびテクスチャ配位のようないろいろな属性と関連する。各属性は４コンポーネントまで持つことができる。
【０００３】
図形プロセッサは１画像を表現するためにいろいろな図形演算を実行できる。図形演算はラスター化、ステンシルおよび深さ試験、テクスチャマッピング、シェーディング、等を含んでもよい。画像は多くの三角形よりなり、そして各三角形は画像素子（画素）よりなる。図形プロセッサはその三角形内の各画素のコンポーネント値を決定することによって各三角形を表現する。
【０００４】
図形プロセッサはシェーディングのようなある図形演算を実行するためにシェーダコアを使用してもよい。シェーディングはライティング、シャドーイング、等を含む高度に複雑な図形演算である。シェーダコアは正弦、余弦、逆数、対数、指数、平方根、および逆平方根のような超越初等関数を計算するために必要であるかもしれない。これらの初等関数は多項式で近似されることができ、それは算術論理ユニット（ＡＬＵ; arithmetic logic unit）によって実行される比較的単純な命令を用いて評価されることができる。しかしながら、シェーダ性能評価はＡＬＵを使用しているこの方法で初等関数を計算することに大いに苦しむかもしれない。
【発明の概要】
【０００５】
［概要］
算術演算（arithmetic operation）を効率的に実行しそして初等関数(elementary function)を計算できる図形プロセッサがこの中に記述される。述語“演算”および“機能”は時には互換的に使用される。図形プロセッサはシェーダコアおよび多分他のユニットを具備する。シェーダコアは算術演算を実行できる少なくとも１つのＡＬＵおよび初等関数を計算できる少なくとも１つの初等関数ユニットを有する。ある実施形態では、ＡＬＵおよび初等関数ユニットはそれらが処理能力を改善するために同じまたは異なるスレッド（thread）に関する命令上で同時に動作できるように調整および相互接続される。例えば、ＡＬＵは１つのスレッドに関する１つの命令を実行でき、そして初等関数ユニットはもう１つのスレッドに関するもう１つの命令を同時に実行できる。これらのスレッドは同じまたは異なる図形アプリケーションのためのものであってもよい。
【０００６】
他の実施形態では、シェーダコアは複数のＡＬＵ、例えば、４ＡＬＵよりも少数の初等関数ユニットと単一の初等関数ユニットとを有する。４ＡＬＵは（１）１画素について１属性（attribute）の４コンポーネントまでまたは（２）４画素までについて１属性の１コンポーネントの上で算術演算を実行できる。単一の初等関数ユニットは一度に１画素の１コンポーネントの上で動作できる。単一の初等関数ユニットの使用は、（初等関数は算術演算よりも低い平均使用率を有するので）なお良好な性能を提供する一方で、（初等関数ユニットはＡＬＵよりも複雑で高価であるので）コストを低減できる。
【図面の簡単な説明】
【０００７】
【図１】図形アプリケーションをサポートする図形プロセッサを示す図。
【図２】画素の属性およびコンポーネントを示す図。
【図３Ａ】４つのスカラーＡＬＵを有する画素並列処理を示す図。
【図３Ｂ】１つのカッドＡＬＵを有するコンポーネント並列処理を示す図。
【図４】４ユニットＡＬＵコアおよび４ユニット初等関数（ＥＦ）コアを有するシェーダコアを示す図。
【図５】並列ＡＬＵコアおよびＥＦコアを有するシェーダコアを示す図。
【図６】４ユニットＡＬＵコアおよび１ユニットＥＦコアを有するシェーダコアを示す図。
【図７】図形プロセッサを有する無線装置を示すブロック図。
【発明を実施するための形態】
【０００８】
［詳細な説明］
この発明のいろいろな局面および実施形態がさらに詳細に下記される。
【０００９】
本発明の特徴および性質は、全体を通して同じ参照記号が相応に識別される図面とともに採用された時に下に述べられた詳細説明からもっと明白になるであろう。
【００１０】
術語“例示的な”は“一例、事例、または実例として機能すること”を意味すべくこの中で使用されている。ここで“例示的な”として記述された任意の実施形態または構成は必ずしも他の実施形態または構成以上に好ましいとか有利であると解釈されるべきではない。
【００１１】
図１は図形アプリケーション／プログラム１１０ａ乃至１１０ｎ、ここで通常Ｎ≧１、をサポートする図形システム１００のブロック図を示す。図形システム１００はスタンドアローンシステムかまたは計算システム、無線通信装置、等のようなより大きいシステムの部分であってもよい。図形アプリケーション（graphics application）１１０ａ乃至１１０ｎはビデオゲーム、図形等、のためのものであってもよく、そして同時に動作してもよい。各図形アプリケーション１１０は望ましい結果を達成するためにスレッドを生成できる。スレッド（または実行のスレッド）は一連の１つまたはそれ以上の命令を用いて実行され得る特定のタスクを指示する。スレッドは図形アプリケーションに異なるユニットによって同時に実行される複数のタスクを持たせ、そしてさらに異なる図形アプリケーションに資源を共有させる。
【００１２】
図形プロセッサ１２０は図形アプリケーション１１０ａ乃至１１０ｎからスレッドを受信し、そしてこれらのスレッドによって指示されたタスクを実行する。図１内に示された実施形態では、図形プロセッサ１２０はシェーダコア／プロセッサ１３０、テクスチャエンジン１４０、およびキャッシュメモリシステム１５０を含む。コアは通常集積回路内の処理ユニットを指す。術語“コア”、“エンジン”、“プロセッサ”および“処理ユニット”はしばしば互換的に使用される。シェーダコア１３０はシェーディングのようなある図形演算を実行でき、そして超越初等関数を計算できる。テクスチャエンジン１４０はテクスチャマッピングのような他の図形演算を実行できる。キャッシュメモリシステム１５０は１つまたはそれ以上のキャッシュを含んでもよく、それはシェーダコア１３０およびテクスチャエンジン１４０に関するデータおよび命令を蓄積できる。
【００１３】
図形プロセッサ１２０は他の処理および制御ユニット、エンジン、およびメモリを含んでもよい。例えば、図形プロセッサ１２０は三角形セットアップ、ラスター化、ステンシルおよび深さ試験、属性構成、画素補間、等を実行する１つまたはそれ以上の追加のエンジンを含んでもよい。この中に記述されたいろいろな図形演算はこの分野では周知である。追加のエンジンは図形アプリケーション１１０とシェーダコア１３０との間に連結されるかあるいはシェーダコア１３０に連結されてもよい。図形プロセッサ１２０はオープン図形ライブラリ（ＯｐｅｎＧＬ）、ダイレクト３Ｄ等、のようなソフトウェアインターフェイスを実施できる。ＯｐｅｎＧＬは、公的に使用可能である、２００４年１０月２２日付けの、標題“ＯｐｅｎＧＬ(R)図形システム：仕様書”第２．０版の文書内に記述される。
【００１４】
主記憶１６０は図形プロセッサ１２０からさらに離れて配置された（例えば、オフチップ）、大きい、より遅いメモリである。主記憶１６０はキャッシュメモリシステム１５０内のキャッシュの中にロードされることができるデータまたは命令を蓄積する。
【００１５】
図２は画素の属性およびコンポーネントを示す。上記したように、２−Ｄまたは３−Ｄ画像は多くの三角形から構成されることができ、そして各三角形は画素から構成されることができる。各画素は空間配位、カラーバリュー、テクスチャ配位、等のようないろいろな属性を持つことができる。各属性は４コンポーネントまで持つことができる。例えば、空間配位は水平と垂直配位（ｘとｙ）および深さ（ｚ）に関する３コンポーネントによって、あるいは４コンポーネントｘ，ｙ，ｚおよびｗ、ここでｗはホモジニアス配位に関する第４項である、によって与えられることができる。ホモジニアス配位は変換、スケーリング、ローテーション、等のような、ある図形演算のために有用である。カラーバリューは典型的に赤（ｒ）、緑（ｇ）、および青（ｂ）によって与えられる。テクスチャ配位は典型的に水平および垂直配位（ｕおよびｖ）によって与えられる。画素はまた他の属性と関連するかもしれない。
【００１６】
多くの場合、表現されるべき１画像内の画素グループ上で演算することが望ましい。グループサイズはハードウェア条件、性能、等のようないろいろなファクタに基づいて選択されることができる。２×２のグループサイズはいろいろなファクタ間に良好なトレードオフを提供できる。２×２グリッド内の４画素上の処理はいくつかの手法で実行されることができる。
【００１７】
図３Ａは４つの同じスカラーＡＬＵの、ＡＬＵ１乃至ＡＬＵ４をそれぞれ有する４つの画素１乃至４上での画素並列処理を示す。この例では、動作中の１属性の４コンポーネントはＡp,1，Ａp,2，Ａp,3およびＡp,4として示され、ここでｐは画素インデックスであり、そして画素１乃至４に関してｐ∈{１，２，３，４}である。これらのコンポーネントは空間配位、カラーバリュー、テクスチャ配位、等のためのものであってもよい。４コンポーネントに適用されるべき４オペランドは、ｐ∈{１，２，３，４}に関して、Ｂp,1，Ｂp,2，Ｂp,3およびＢp,4として示され、そして定数であってもよい。この例では、ＡＬＵは積和（ＭＡＣ）演算を実行する。各画素の４コンポーネントはこのように４オペランドと掛け合わされ、そして４つの中間結果がこの画素に関する最終結果を生成するために累算される。
【００１８】
図３Ａにおける画素並列処理に関して、各スカラーＡＬＵは１画素の４コンポーネントについて演算し、そして４ＡＬＵは４画素について同時に演算する。ＡＬＵ１は第１のクロック周期Ｔ1 においてコンポーネントＡ1,1 をＢ1,1 と掛け合わせ、その後第２のクロック周期Ｔ2 においてコンポーネントＡ1,2 をＢ1,2 と掛け合わせそしてこの結果を以前の結果と累算し、その後第３のクロック周期Ｔ3 においてコンポーネントＡ1,3 をＢ1,3 と掛け合わせそしてこの結果を以前の結果と累算し、その後第４のクロック周期Ｔ4 においてコンポーネントＡ1,4 をＢ1,4 と掛け合わせそしてこの結果を以前の結果と累算する。ＡＬＵ２乃至ＡＬＵ４は同様に、それぞれ、画素２乃至４のコンポーネントについて演算する。
【００１９】
図３Ｂは、ベクトルベースのＡＬＵとも呼ばれることができる、１つのカッドＡＬＵを有する４画素上のコンポーネント並列処理を示す。コンポーネント並列処理に関して、カッドＡＬＵは一度に１画素の全４コンポーネントについて演算する。従って、カッドＡＬＵはコンポーネントＡ1,1，Ａ1,2，Ａ1,3およびＡ1,4 を、それぞれ、オペランドＢ1,1，Ｂ1,2，Ｂ1,3およびＢ1,4 と掛け合わせ、そして第１のクロック周期Ｔ1 において第１の画素に関する最終結果を得るために４つの中間結果を累算する。カッドＡＬＵは同様に、それぞれ、クロック周期Ｔ2 ，Ｔ3 およびＴ4 における第２，第３および第４の画素のコンポーネントについて演算する。
【００２０】
図３Ａおよび図３Ｂは４画素までについて１属性の４コンポーネントまでの上でカッド処理を実行するための２つのスキームを示す。算術演算のためのカッド処理は単一のカッドＡＬＵまたは４スカラーＡＬＵによって実行されることができる。以下の説明では、ＡＬＵはもしほかに説明がなければスカラーＡＬＵであるとみなされる。カッド処理は本質的に性能を改善する。従って、シェーダコア１３０はカッド処理を実行するための能力で示されてもよい。
【００２１】
図４は４ユニットＡＬＵコア４４０および４ユニット初等関数コア４５０を有するシェーダコア／プロセッサ１３０ａの１実施形態のブロック図を示す。シェーダコア１３０ａは図１におけるシェーダコア１３０として使用されることができる。
【００２２】
シェーダコア１３０ａ内で、マルチプレクサ（Ｍｕｘ）４１０は図形アプリケーション１１０ａ乃至１１０ｎからスレッドを受信し、そしてこれらのスレッドをスレッドスケジューラ(thread scheduler)およびコンテキストレジスタ４２０に供給する。スレッドスケジューラ４２０はスレッドの実行の予定を立てて管理するためにいろいろな機能を実行する。スレッドスケジューラ４２０は新スレッドを受け入れるかどうかを決定し、各受け入れられたスレッドのためのレジスタマップテーブルを生成し、そして資源をこのスレッドに割り当てる。レジスタマップテーブルは実レジスタファイルアドレスへの論理レジスタアドレス間のマッピングを指示する。各スレッドについて、スレッドスケジューラ４２０はそのスレッドのために必要な資源の準備ができているかどうかを決定し、もしそのスレッドのためにいずれの資源（例えば、命令、レジスタファイル、またはテクスチャリード）も準備ができなければこのスレッドを休止キュー内に押し込み、そして資源のすべての準備ができた時にこのスレッドを休止キューからアクティブキューに移動させる。スレッドスケジューラ４２０はこのスレッドのための資源をシンクロナイズさせるために負荷制御ユニット（load control unit）４６０とインターフェイスする。
【００２３】
スレッドスケジューラ４２０はまたスレッドの実行を管理する。スレッドスケジューラ４２０は各スレッドに関する命令を命令キャッシュ４２２から取ってきて、もし必要なら各命令を復号し、そしてこのスレッドについてフロー制御を実行する。スレッドスケジューラ４２０は実行のためのアクティブスレッドを選択し、この選択されたスレッドの間の読取り／書込みポートの競合についてチェックし、そしてもし競合が無ければ、１つのスレッドに関する命令を処理コア４３０の中に送り、そしてもう１つのスレッドに関する命令を負荷制御ユニット４６０に送る。スレッドスケジューラ４２０は各スレッドに関するプログラム／命令カウンタを維持し、そして命令が実行されるかまたはプログラムフローが変更される時にこのカウンタを更新する。スレッドスケジューラ４２０はまた紛失した命令について取ってくるように要求を出し、そして完了されるスレッドを取り除く。
【００２４】
命令キャシュ４２２はスレッドに関する命令を蓄積する。これらの命令は各スレッドについて実行されるべき特定の演算を指示する。各演算は算術演算、初等関数、メモリアクセス演算、等であってもよい。命令キャッシュ４２２は、必要な時に、負荷制御ユニット４６０を介して、キャッシュメモリシステム１５０および／または主記憶１６０からの命令とともに負荷されてもよい。
【００２５】
図４に示された実施形態では、処理コア４３０はＡＬＵコア４４０および初等関数コア４５０を含む。ＡＬＵコア４４０は加算、減算、乗算、積和、絶対、否定、比較、飽和、等のような算術演算を実行する。ＡＬＵコア４４０はまたＡＮＤ、ＯＲ、ＸＯＲ、等のような論理演算を実行する。ＡＬＵコア４４０はまた書式変換、例えば、整数から浮動小数点数へ、および逆もまた同様に実行する。図４に示された実施形態では、ＡＬＵコア４４０は単一のカッドＡＬＵまたは４スカラーＡＬＵであってもよい。ＡＬＵコア４４０は、図３Ａに示されるように、４画素までについて１属性の１コンポーネント上で画素並列処理を実行できる。あるいは、ＡＬＵコア４４０は、図３Ｂに示されるように、単一の画素について１属性の４コンポーネントまでの上でコンポーネント並列処理を実行できる。
【００２６】
図４に示された実施形態では、初等関数コア４５０は４画素（画素並列）までについて１属性の１コンポーネントのための初等関数または１画素（コンポーネント並列）について１属性の４コンポーネントまで計算することができる４つの初等関数ユニットよりなる。初等関数コア４５０は、シェーダ命令内で広く使用される、正弦、余弦、逆数、対数、指数、平方根、および逆平方根、等のような超越初等関数を計算できる。初等関数コア４５０は単純命令を使用している初等関数の多項式近似を実行するのに必要な時間よりもずっと少ない時間で初等関数を計算することによってシェーダ性能を改善することができる。
【００２７】
負荷制御ユニット４６０はシェーダコア１３０ａ内のいろいろなユニットに関するデータのフローおよび命令を制御する。負荷制御ユニット４６０はキャッシュメモリシステム１５０とインターフェイスし、キャッシュメモリシステム１５０からのデータおよび命令を用いて命令キャッシュ４２２、定数バッファ４３２、およびレジスタファイルバンク／出力バッファ４７０を負荷する。負荷制御ユニット４６０はまたキャッシュメモリシステム１５０への出力バッファ４７０内のデータを保存する。負荷制御ユニット４６０はまた命令をテクスチャエンジン１４０に供給する。
【００２８】
定数バッファ４３２はＡＬＵコア４４０によって使用された定数値を蓄積する。出力バッファ４７０はスレッドに関するＡＬＵコア４４０および初等関数コア４５０からの最終結果と同様に一時的結果を蓄積する。デマルチプレクサ（Ｄｅｍｕｘ）４８０は実行されたスレッドに関する最終結果を出力バッファ４７０から受信し、そしてこれらの結果を図形アプリケーションに供給する。
【００２９】
図４に示された実施形態では、処理コア４３０はＡＬＵコア４４０および初等関数コア４５０の両方を含む。この実施形態はＡＬＵコア４４０および初等関数コア４５０に、コア４４０および４５０をシェーダコア１３０ａ内の他のユニット（例えば、スレッドスケジューラ４２０および出力バッファ４７０）に連結するバスを共有させる。
【００３０】
初等関数ユニットは通常ＡＬＵよりもより複雑である。費用効率の高い実施の形態でさえ、初期関数ユニットは典型的にＡＬＵよりも大きい回路面積を占有し、従ってＡＬＵよりも高価である。すべてのシェーダ命令について高いシェーダ処理能力を達成するために、初等関数ユニットの数はＡＬＵの数に匹敵するように選択されてもよく、それは図４に示された実施形態では４である。しかしながら、研究は、たとえ初等関数が広く使用されるとしても、初等関数の平均使用率はＡＬＵ演算の平均使用率よりもかなり低いことを示した。より低い平均使用率は、算術演算よりも初等関数によって演算されているより少数のコンポーネントと同様に算術演算ほど度々でないと言われている初等関数に起因する。例えば、初等関数は典型的に算術演算ほど度々でないと言われ、従ってより少ない初等関数ユニットによって適切にサポートされる。さらに、それはその後４ＡＬＵを有する恩恵を被るであろう、１属性の全４コンポーネント上で加算または乗算を実行することが一般的でありうる一方で、それは全４コンポーネント上で１初等関数を実行するほど一般的ではない。よって、より少数の初等関数ユニットは、初等関数がサブセットのコンポーネントのみ、例えば、１または２コンポーネントの上で実行される多くの場合に良好な性能を提供することができるかもしれない。より少数の初等関数ユニットを実施することは、なお良好な性能を提供する一方でコストを下げることができる。
【００３１】
図５は４ユニットＡＬＵコア５４０およびＬユニット初等関数コア５５０、ここで１≦Ｌ＜４、を有するシェーダコア１３０ｂの１実施形態のブロック図を示す。シェーダコア１３０ｂはまた図１内のシェーダコア１３０として使用されることもできる。シェーダコア１３０ｂは、それぞれ、図４内のユニット４１０、４２０、４２２、４３２、４４０、４５０、４６０、４７０および４８０と同じ方法で動作する、マルチプレクサ５１０、スレッドスケジューラおよびコンテキストレジスタ５２０、命令キャッシュ５２２、定数バッファ５３２、ＡＬＵコア５４０、初等関数コア５５０、負荷制御ユニット５６０、レジスタファイルバンク／出力バッファ５７０、およびデマルチプレクサ５８０を含む。
【００３２】
ＡＬＵコア５４０は単一のカッドＡＬＵまたは４つのスカラーＡＬＵであってもよい。ＡＬＵコア５４０は１組のバスを介してスレッドスケジューラ５２０、定数バッファ５３２、および出力バッファ５７０に連結する。初等関数コア５５０は１画素のＬコンポーネントまたはＬ画素の１コンポーネントのいずれかに関する初等関数を計算できる１，２または３（Ｌ）初等関数ユニットから構成されてもよい。初等関数コア５５０はもう１組のバスを介してスレッドスケジューラ５２０、定数バッファ５３２、および出力バッファ５７０に連結する。図５に示された実施形態では、ＡＬＵコア５４０および初等関数コア５５０は互いに別々に実施され、そして別個のバスを介してシェーダコア１３０ｂ内の他のユニットに連結される。ＡＬＵコア５４０および初等関数コア５５０はその後異なる命令上で同時に動作できる。これらの命令は同じか異なる図形アプリケーションのためのものであってもよい。
【００３３】
図５に示された実施形態では、初等関数ユニットの数はＡＬＵの数よりも少数であり、そしてコストと性能との間の取引に基づいて選択されることができる。多くの場合、初等関数コア５５０は、初等関数のより低い平均使用率のためにＡＬＵコア５４０と歩調を合わせることができるであろう。スレッドスケジューラ５２０は、Ｌ（４のかわりに）初等関数ユニットが使用可能である認識で初等関数演算を適切にスケジュールする。
【００３４】
図６は４ユニットＡＬＵコア６４０および１ユニット初等関数コア６５０を有するシェーダコア／プロセッサ１３０ｃの１実施形態のブロック図を示す。シェーダコア１３０ｃはまた図１内のシェーダコア１３０として使用されることもできる。シェーダコア１３０ｃは、それぞれ、図４内のユニット４１０、４２０、４２２、４３２、４４０、４５０、４６０、４７０および４８０と同じ方法で動作する、マルチプレクサ６１０、スレッドスケジューラおよびコンテキストレジスタ６２０、命令キャッシュ６２２、定数バッファ６３２、ＡＬＵコア６４０、初等関数コア６５０、負荷制御ユニット６６０、レジスタファイルバンク／出力バッファ６７０、およびデマルチプレクサ６８０を含む。
【００３５】
ＡＬＵコア６４０は単一のカッドＡＬＵまたは４つのスカラーＡＬＵであってもよい。ＡＬＵコア６４０は１組のバスを介してスレッドスケジューラ６２０、定数バッファ６３２、および出力バッファ６７０に連結する。初等関数コア６５０は一度に１画素の１コンポーネントに関する１初等関数を計算できる単一の初等関数ユニットから構成されてもよい。図６に示された実施形態では、初等関数コア６５０は負荷制御ユニット６６０および出力バッファ６７０に連結する。この実施形態は別個のＡＬＵコア６４０および初等関数コア６５０をサポートするためのバスの数を減少させる。この実施形態はまたレジスタファイル読出し／書込みポート、命令符号化、等のような資源のより効率的な共有のような他の恩恵も提供できる。
【００３６】
初等関数に関する命令（またはＥＦ命令）はシェーダコア１３０ｃ内の初等関数コア６５０の配置と同様に構成を与えられた適切な方法で発生されることができる。もしもＥＦユニットの数がＡＬＵユニット（例えば、図４に示されたような）の数に等しいならば、そしてもしもＥＦユニットがＡＬＵユニットと同じパイプライン待ち時間を有するならば、その時ＥＦ命令は予測できるパイプライン遅延を有するＡＬＵ命令とみなされることができる。しかしながら、ＡＬＵコア６４０および初等関数コア６５０の一様でない実施形態は一様でない処理能力という結果になる。このように、１実施形態では、シェーダコア１３０ｃは初等関数コア６５０を負荷供給源とみなし、そしてＥＦ命令を類似の方法でおよび、例えば、テクスチャ負荷またはメモリ負荷と同じ同期を用いて処理する。例えば、シェーダコンパイラはＡＬＵ命令としてのかわりにテクスチャ負荷に関する命令としてＥＦ命令をコンパイルしてもよく、それは図４および５に示された実施形態の場合であってもよい。
【００３７】
シェーダコンパイラは適切なように命令内に同期（ｓｙｎｃ）ビットを含んでもよい。ｓｙｎｃビットは、このｓｙｎｃビットを含む現在の命令が１つまたはそれ以上の以前の命令とデータ従属性を有することを示し、以前の命令は予測不能の遅延または待ち時間を有してもよい。予測不能の待ち時間はいくつかの原因によるかもしれない。第１に、テクスチャ負荷またはメモリ負荷の予測不能の待ち時間はキャッシュヒット／ミス、メモリアクセス能力、メモリアクセスシーケンス、等のような予測不能の実行条件が原因となるかもしれない。第２に、予測不能の待ち時間はＡＬＵコアおよび初等関数コアの一様でない実施によって引き起こされるかもしれない。シェーダコンパイラは、予測不能の遅延を有するかもしれない、以前のＥＦ命令とデータ従属性を有する命令内にｓｙｎｃビットを挿入できる。これらのｓｙｎｃビットは、この命令がそれらの従属ＥＦ命令にフォローし、よって固有のデータについて演算することを保証する。
【００３８】
図６に示された実施形態では、スレッドスケジューラ６２０はデータ負荷要求（load request）とバスを共有できる初等関数要求を発生することができる。この共有されたバスはスレッドスケジューラ６２０から負荷制御ユニット６６０へのバスを具備してもよい。しかしながら、初等関数コア６５０は負荷制御ユニット６６０内の負荷命令（load instruction）を用いて同時に実行することができる。もう１つの実施形態では、初等関数コア６５０は、例えば、図５内に示されたように、専用バスを介してスレッドスケジューラ６２０に直接連結される。この実施形態では、初等関数要求およびデータ負荷要求は別個のバスを使用できる。両実施形態では、スレッドスケジューラ６２０、ＡＬＵコア６４０、初等関数コア６５０、および負荷制御ユニット６６０は改善された性能のために異なるスレッド上で同時に動作することができる。
【００３９】
図４乃至６はシェーダコア１３０ａ、１３０ｂおよび１３０ｃの特定の実施形態を示す。シェーダコア１３０ａ、１３０ｂおよび１３０ｃの他の変種も可能である。例えば、図４における初等関数コア４５０は４初等関数ユニットよりも少数の初等関数ユニットを含んでもよい。もう１つの例として、図６における初等関数ユニット６５０は１つよりも多い初等関数ユニット、例えば、２初等関数ユニットを含んでもよい。
【００４０】
一般に、シェーダコアは、任意の方法で配置されることができる、任意の数の処理、制御およびメモリユニットを含むことができる。これらのユニットはまた他の名称によって参照されるかもしれない。例えば、負荷制御ユニットはまた入力／出力（Ｉ／Ｏ）インターフェイスユニットと呼ばれるかもしれない。ある実施形態では、性能におけるわずかな劣化でコストを引き下げるためにＡＬＵよりも少数の初等関数ユニットを含むかもしれない。他の実施形態では、シェーダコアは同じまたは異なる図形アプリケーションに関する異なる命令上で同時に動作できる別個のＡＬＵコアおよび初等関数コアを含むかもしれない。ＡＬＵおよび初等関数ユニットはこの分野で既知のいろいろな構成を用いて実施されることができる。シェーダコアはまた同期および／または非同期インターフェイスを介して外部ユニットとインターフェイスすることもできる。
【００４１】
この中に記述された図形プロセッサおよびシェーダコアは無線通信、演算、ネットワーク通信、個人エレクトロニクス、等のために使用されることができる。無線通信用の図形プロセッサの例示的な使用が下記される。
【００４２】
図７は無線通信システム内の無線装置７００の１実施形態のブロック図を示す。無線装置７００はセルラ電話機、端末、ハンドセット、パーソナルディジタルアシスタント（ＰＤＡ）、または何か他の装置であってもよい。無線通信システムは符号分割多重アクセス（ＣＤＭＡ）システム、移動通信用グローバルシステム（ＧＳＭ）、または何か他のシステムであってもよい。
【００４３】
無線装置７００は受信パスおよび送信パスを介して双方向通信を提供することが可能である。受信パス上では、基地局によって送信された信号はアンテナ７１２によって受信され、そして受信器（ＲＣＶＲ）７１４に供給される。受信器７１４はこの受信された信号を調節してディジタル化し、そしてさらなる処理のためのディジタルセクション７２０にサンプルを供給する。送信パス上では、送信器（ＴＭＴＲ）７１６はディジタルセクション７２０から送信されるべきデータを受信し、このデータを処理および調節し、そしてアンテナ７１２を介して基地局に送信される、変調された信号を生成する。
【００４４】
ディジタルセクション７２０は、例えば、モデムプロセッサ７２２、ビデオプロセッサ７２４、アプリケーションプロセッサ７２６、ディスプレイプロセッサ７２８、コントローラ／プロセッサ７３０、図形プロセッサ７４０、および外部バスインターフェイス（ＥＢＩ）７６０のようないろいろな処理およびインターフェイスユニットを含む。モデムプロセッサ７２２はデータ送受信に関する処理（例えば、符号化、変調、復調、および復号化）を実行する。ビデオプロセッサ７２４はポータブルビデオカメラ、ビデオ再生、およびビデオ会議のようなビデオ応用に関するビデオ内容（例えば、スチール画像、ムービングビデオ、およびムービングテキスト）上の処理を実行する。アプリケーションプロセッサ７２６は多元呼、ウェブブラウジング、メディアプレーヤー、およびユーザインターフェイスのようないろいろなアプリケーションに関する処理を実行する。ディスプレイプロセッサ７２８はディスプレイユニット７８０上のビデオ、図形、およびテキストの表示を容易とするための処理を実行する。コントローラ／プロセッサ７３０はディジタルセクション７２０内のいろいろな処理およびインターフェイスユニットの動作を指示できる。
【００４５】
図形プロセッサ７４０は図形アプリケーションに関する処理を実行し、そして上述されたように実施されることができる。例えば、図形プロセッサ７４０は図１内のシェーダコア／プロセッサ１３０およびテクスチャエンジン１４０を含んでもよい。キャッシュメモリシステム７５０は図形プロセッサ７４０に関するデータおよび／または命令を蓄積する。キャッシュメモリシステム７５０は（１）図形プロセッサ７４０内で異なるエンジンに割り当てられることができる構成可能なキャッシュおよび／または（２）特定のエンジンに割り当てられる専用キャッシュを用いて実施されてもよい。ＥＢＩ７６０はディジタルセクション７２０（例えば、キャッシュ）および主記憶７７０の間のデータ転送を容易とする。
【００４６】
ディジタルセクション７２０は１つまたはそれ以上のディジタル信号プロセッサ（ＤＳＰ）、マイクロプロセッサ、既約命令セットコンピュータ（ＲＩＳＣ）、等を用いて実施されることができる。ディジタルセクション７２０はまた１つまたはそれ以上の特定用途向け集積回路（ＡＳＩＣ）または何か他のタイプの集積回路（ＩＣ）上に組み立てられてもよい。
【００４７】
この中に記述された図形プロセッサおよびシェーダコア／プロセッサはいろいろなハードウェアユニット内で実施されることができる。例えば、図形システムおよびシェーダコア／プロセッサはＡＳＩＣ、ディジタル信号プロセッサ（ＤＳＰ）、ディジタル信号処理装置（ＤＳＰＤ）、プログラマブル論理装置（ＰＬＤ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサ、および他の電子ユニット内で実施されてもよい。
【００４８】
図形プロセッサのある部分はファームウェアおよび／またはソフトウェア内で実施されることができる。例えば、スレッドスケジューラおよび／または負荷制御ユニットは、この中に記述された機能を実行するファームウェアおよび／またはソフトウェアモジュール（例えば、手順、機能、等）を用いて実施されることができる。ファームウェアおよび／またはソフトウェア符号はメモリ（例えば、図７内のメモリ７５０または７７０）内に蓄積され、そしてプロセッサ（例えば、プロセッサ７３０）によって実行されることができる。メモリはプロセッサ内でまたはプロセッサと無関係に実施されることができる。
【００４９】
開示された実施形態の前の説明はこの分野における任意の技術者に本発明を製作または使用することを可能にするように提供される。これらの実施形態へのいろいろな変更はこの分野の技術者にはたやすく明白であるだろうし、そしてこの中に定義された包括的な原理はこの発明の精神または範囲から逸脱すること無しに他の実施形態に適用されることができる。従って、本発明はこの中に示された実施形態に限定されるつもりはないが、しかしこの中に開示された原理および新規な特徴と矛盾しない最も広い範囲が許容されるべきである。
【図１】
2009538486.tif 000003
【図２】
2009538486.tif 000004
【図３Ａ】
2009538486.tif 000005
【図３Ｂ】
2009538486.tif 000006
【図４】
2009538486.tif 000007
【図５】
2009538486.tif 000008
【図６】
2009538486.tif 000009
【図７】
2009538486.tif 000010
【国際調査報告】
2009538486.tif 000011
2009538486.tif 000012