(57)【要約】【解決手段】  グラフィクス処理ユニットにおける性能を改善するためのシステム及び方法がここに説明される。実施形態は、多重ＳＩＭＤユニットを備えるシェーダコンプレックスにおける個々のＳＩＭＤを動的にアクティブにすること及び非アクティブにすることによって、グラフィクス処理ユニットにおける電力節約を達成する。個々のＳＩＭＤのオンザフライの動的な無効化及び有効化は、所与の処理アプリケーションに対して必要な性能及び電力レベルを達成する上での柔軟性を提供する。このようにして、実施形態はグラフィクス処理ユニットの最適な使用を達成する。本発明の実施形態はまた、シェーダコンプレックスにおけるＳＩＭＤの動的粒度（例えば中間粒度）クロックゲーティングを達成する。実施形態は、使用していない論理へのクロックツリーをシャットダウンすること及びクロックオンデマンドメカニズムを提供することによって、スイッチング電力を低減する。このようにして実施形態は、クロックゲーティングを強化して、ＳＩＭＤがアイドルである（又は作業を割り当てられていない）期間に対してスイッチング電力を更に節約する。【選択図】図１Ａ
2013532855.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングシステムにおける性能を改善する方法であって、
処理アプリケーションのために必要な電力レベルを決定することと、
前記電力レベルに基づきシェーダコンプレックスにおける１つ以上の単一命令多重データユニット（ＳＩＭＤ）を動的に有効化及び無効化することと、を備える方法。
【請求項２】
前記ＳＩＭＤがいつ有効化及び無効化されることになるのかを示す複数のレジスタをリアルタイムで構成することを更に備える請求項１の方法。
【請求項３】
前記処理アプリケーションに必要なＳＩＭＤの数を決定することを更に備える請求項１の方法。
【請求項４】
前記構成されたレジスタを精査することと、
前記レジスタの構成に基づき作業スレッドを割り当てることと、を更に備える請求項２の方法。
【請求項５】
前記構成することに先立ち１つ以上の係属中作業要求をサービスすることを更に備える請求項２の方法。
【請求項６】
前記動的に有効化及び無効化することは、前記ＳＩＭＤをそれらのアクティブ実行期間に有効化及び無効化することを備え且つ前記ＳＩＭＤに関連するシェーダエンジンにおけるアクティビティとは無関係である請求項１の方法。
【請求項７】
無効化されるべき１つ以上のＳＩＭＤへの作業スレッドを無効化することと、
前記無効化されるべきＳＩＭＤにおける全ての係属中作業スレッドがいつクリアされるのかを決定することと、を更に備える請求項２の方法。
【請求項８】
前記有効化及び無効化することは、処理作業負荷、アプリケーション要求及び動作条件の１つ以上に依存する請求項１の方法。
【請求項９】
前記ＳＩＭＤに動的中間粒度クロックゲーティングを供給することを更に備える請求項１の方法。
【請求項１０】
前記ＳＩＭＤにおける使用されていない論理へのクロックツリーを無効化することを更に備える請求項９の方法。
【請求項１１】
前記ＳＩＭＤにクロッキングをオンデマンドで供給することを更に備える請求項１の方法。
【請求項１２】
コンピューティングシステムにおける性能を改善するシステムであって、
処理アプリケーションのための電力レベルを決定するように構成される第１のモジュールと、
前記電力レベルに基づきシェーダコンプレックスにおける１つ以上の単一命令多重データユニット（ＳＩＭＤ）を動的に有効化及び無効化するように構成される第２のモジュールと、を備えるシステム。
【請求項１３】
前記第２のモジュールは、前記ＳＩＭＤがいつ有効化及び無効化されることになるのかを示す複数のレジスタをリアルタイムで構成する請求項１２のシステム。
【請求項１４】
前記第２のモジュールは、
前記構成されたレジスタを精査することと、
前記レジスタの構成に基づき作業スレッドを割り当てることと、のために更に構成される請求項１３のシステム。
【請求項１５】
前記第２のモジュールは、前記構成することに先立ち１つ以上の係属中作業要求をサービスする請求項１３のシステム。
【請求項１６】
前記第２のモジュールは、前記ＳＩＭＤをそれらのアクティブ実行期間に有効化及び無効化するように更に構成され且つ前記ＳＩＭＤに関連するシェーダエンジンにおけるアクティビティとは無関係である請求項１２のシステム。
【請求項１７】
処理アプリケーションのために必要な電力レベルを決定することと、
前記電力レベルに基づきシェーダコンプレックスにおける１つ以上の単一命令多重データユニット（ＳＩＭＤ）を動的に有効化及び無効化することと、がプロセッサによって実行されるように構成される命令を記憶するコンピュータ可読媒体。
【請求項１８】
前記ＳＩＭＤがいつ有効化及び無効化されることになるのかを示す複数のレジスタをリアルタイムで構成することが前記プロセッサによって実行されるように構成される命令を更に備える請求項１７のコンピュータ可読媒体。
【請求項１９】
前記処理アプリケーションに必要なＳＩＭＤの数を決定することが前記プロセッサによって実行されるように構成される命令を更に備える請求項１７のコンピュータ可読媒体。
【請求項２０】
前記構成されたレジスタを精査することと、
前記レジスタの構成に基づき作業スレッドを割り当てることと、が前記プロセッサによって実行されるように構成される命令を更に備える請求項１８のコンピュータ可読媒体。
【請求項２１】
複数の命令データモジュールを含むプロセッサにおける作業配分を管理する方法であって、
前記プロセッサにより受け取られる作業ユニットを解析することと、
前記複数のモジュール内のアクティブなモジュールの利用レベルをスレッショルド値と比較することと、
前記解析すること及び前記比較することに基き前記命令データモジュールの選択されたモジュールにわたって前記作業ユニットを分配することと、を備える方法。
【請求項２２】
前記比較することは、前記アクティブなモジュールの各々が前記スレッショルド値の１つ以上よりも低い利用レベルを有しているかどうかを決定することを含む請求項２１の方法。
【請求項２３】
前記１つ以上のスレッショルド値よりも低い利用レベルの前記アクティブなモジュールを無効化することを更に備える請求項２２の方法。
【請求項２４】
前記分配することは、前記スレッショルド値の１つ以上よりも低い利用レベルを有しているアクティブなモジュールに前記作業ユニットの部分を割り当てることを含む請求項２１の方法。
【請求項２５】
前記分配することは非アクティブなモジュールを有効化することを更に含む請求項２１の方法。
【請求項２６】
前記アクティブなモジュールの利用レベルが前記スレッショルド値の１つ以上よりも高いときに前記作業ユニットの部分を前記有効化されたモジュールに割り当てることを更に備える請求項２５の方法。
【請求項２７】
前記分配することは前記有効化されたモジュールの１つ以上の完全利用を達成する請求項２６の方法。
【請求項２８】
前記比較することは前記命令データモジュール内で実行中の命令をカウントすることを含み、前記命令は前記作業ユニットを表す請求項２１の方法。
【請求項２９】
前記カウントすることは予め定められた期間にわたって生じる請求項２８の方法。
【請求項３０】
前記命令は演算論理ユニット（ＡＬＵ）命令及びフェッチ命令を含む群からの少なくとも１つを含む請求項２９の方法。
【請求項３１】
前記利用レベルは現在の利用及び予測された利用を含む群からの少なくとも１つを含む請求項２１の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、概してグラフィクス処理ユニット（ＧＰＵ）における単一命令多重データ（ＳＩＭＤ）ユニットの制御に関する。
【背景技術】
【０００２】
グラフィクスプロセッサの計算ユニットは、整数、論理及び単一／二重の精密浮動小数点動作を行うように構成される複数の演算論理ユニット（ＡＬＵ）又は複数の計算ユニットを含む。
【０００３】
グラフィクスプロセッサは、シェーダコアとして知られるそのような複数の計算ユニットのアレイを含み得る。シェーダコアはシェーダパイプライン（ＳＰ）を含む。より高い性能を達成するために、多重ＳＰが積層型(stacked)ＳＰとして共に動作するように構成され得る。ＳＰはクワッドパイプ(quad pipes)（ＱＰ）のアレイ及びＳＩＭＤとして構築され得る。各ＳＩＭＤの全てのシェーダユニットは、プリミティブ、頂点又は画素の値の異なるセットに対して同一のＡＬＵ命令を条件付きで実行することができる。このようにして、ＳＩＭＤは数学的処理能力をグラフィクスプロセッサにもたらす。
【０００４】
積層型ＳＰを有する従来のグラフィクスプロセッサにおいては、ＳＩＭＤは静的に有効化され又は無効化され得る。例えばＳＰがフォールトである(faulty)と判定されたとすると、フューズマスク(fuse mask)がプログラムされてフォールトであるＳＰを無効化することができる。同様に、ユーザアクセス可能なレジスタがプログラムされて特定のＳＩＭＤ又はＳＩＭＤの特定のグループを有効化／無効化することができる。しかし、そのような方法は、グラフィクスプロセッサのグラフィクスパイプをフラッシュすること(flushing)を必要とし、また新たな作業要求をＳＩＭＤへ送る前に、フラッシュされたグラフィクスパイプへと新たな値を再プログラムすることを必要とする。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
シェーダエンジン性能はＳＩＭＤの数の対応する増大に伴って高まるはずであるというのが一般的な想定である。しかし、この意見は大きな作業負荷条件の間等の限定された状況においてのみ真実である。しばしば起こり得るもっと小さな作業負荷シナリオに対しては、ＳＩＭＤの数が増大したからといってシェーダエンジンの性能は必ずしも高くならないことがある。そのような状況において、もし全てのＳＩＭＤが有効化されると、十分に活用されていないＳＩＭＤ（即ちより軽い作業負荷又は無作業負荷を伴うＳＩＭＤ）までもが有効化されアクティブのままになるので、電力が無駄になる。
【０００６】
従来のグラフィクスシステムは、特定の動作に対して用いられるシェーダエンジン内の全てのＳＩＭＤにわたる作業負荷を単純に分割する。しかし、この手法は電力効率が極めて悪い。効率の悪さは、システム性能を落とすことなしに動作を行うために、より少ないＳＩＭＤが用いられ得るかどうかの判断がないことにより生じている。このように、従来のシステムは、シェーダエンジン内の全てのＳＩＭＤを、それらが動作を行う必要があるかどうかにかかわらずアクティブに保つ。
【０００７】
上述したように、ＳＩＭＤが有効化されると、それらは電力を消費する。アイドル状態にあってさえも、ＳＩＭＤは、最小ではあるが測定可能な量の電力を消費する。従って、使用されていない又は十分に活用されていないにもかかわらず、全ての利用可能なＳＩＭＤを有効化された状態に保つことは、電力を無駄にする。また、作業負荷を可能な限り少ない数のＳＩＭＤへ詰め込むことができれば、これも有益であろう。この手法は、全ての利用可能なＳＩＭＤに作業負荷を提示する不要なオーバヘッドを低減する。
【０００８】
更に、従来の手法においては、シェーダコンプレックス内のＳＩＭＤユニットのクロッキングは、同時に有効化され又は無効化される。多くのアプリケーションにおいて、全てのＳＩＭＤが作業を割り当てられるわけではない。しかし、従来の手法は、そのようなＳＩＭＤにクロック信号を能動的に供給し続ける。この手法はグラフィクスプロセッサの電力消費を増大し得るので、効率的でない。
【０００９】
そこで、ＳＩＭＤの動的な制御を可能にし、且つＳＩＭＤが処理タスクを行っていなくてよいときにグラフィクスプロセッサの電力消費を低減するシステム及び方法が必要である。
【課題を解決するための手段】
【００１０】
本発明の実施形態は、多重ＳＩＭＤを備えるシェーダコンプレックスにおける個々のＳＩＭＤを動的にアクティブにすること及び非アクティブにすることによって、グラフィクス処理ユニットにおける電力節約を可能にする。個々のＳＩＭＤのオンザフライ(On-the-fly)の動的な無効化及び有効化は、所与の処理アプリケーションに対して必要な性能及び電力レベルを達成する上での柔軟性を提供する。このようにして、グラフィクス処理ユニットの最適な使用が達成される。
【００１１】
より具体的には、本発明の実施形態はワット当たり負荷バランシング技術(load balancing per watt technique)（ＬＢＰＷ）を提供する。１つの実装においては、このＬＢＰＷ技術は、各ＳＩＭＤ内で実行される演算論理ユニット（ＡＬＵ）命令及びフェッチ命令の数をモニタリングする。加えて、新たに割り当てられたスレッド負荷（即ちウエーブフロント(wavefronts)）がキューされ(queued)且つモニタリングされる。このモニタリングは、ＳＩＭＤの現在の及び未来の利用を評価するために用いられる。このスキーム下では、シェーダエンジン内の所与の作業負荷を処理することが実際に必要な又は予測されるＳＩＭＤのみがアクティブのままになる。必要とされないＳＩＭＤは非アクティブにされる。必要とされないＳＩＭＤを非アクティブにすることによって、電力消費が低減される。追加的な利益として、本発明の実施形態は、システム性能を顕著に損なうことなしにワット当たり性能を改善する。
【００１２】
本発明の更に別の実施形態においては、グラフィクスチップ内におけるｄｉ／ｄｔが減少させられることで、信頼性が高まり、またより低い電圧での周波数が向上する。そのような減少は材料の請求に影響し、より安価な部品の使用が可能になる。
【００１３】
本発明の実施形態はまた、シェーダコンプレックスにおけるＳＩＭＤの動的粒度(dynamic grain)（例えば中粒度）クロックゲーティングを達成する。クロックオンデマンドメカニズムを提供することにより不使用論理へのクロックツリーをシャットダウンすることによって、スイッチング電力が低減される。このようにしてクロックゲーティングが強化され、ＳＩＭＤがアイドルである（又は割り当て負荷がない）期間に対するスイッチング電力が節約される。
【００１４】
本発明の実施形態は、任意のコンピューティングシステム（例えば従来のコンピュータ（デスクトップ、ノートブック等）システム、コンピューティングデバイス、エンタテーメントシステム、メディアシステム、ゲームシステム、通信デバイス、パーソナルデジタルアシスタント）、又は１つ以上のプロセッサを用いている任意のシステムにおいて使用可能である。
【００１５】
１つの種類のプロセッサに対して開発されたコードは、たいした追加的な努力を必要とせずに別の種類のプロセッサ上で展開され得るので、本発明の実施形態は、例えば多重コアＣＰＵ、ＧＰＵ及び／又はＧＰＣＰＵを有する処理システムのために用いられる。例えばＧＰＵカーネルとしても知られるＧＰＵ上での実行のために開発されたコードは、本発明の実施形態を用いてＣＰＵ上で実行されるように展開され得る。
【図面の簡単な説明】
【００１６】
ここに組み込まれ且つ出願書類の一部をなす添付の図面は本発明の実施形態を示し、そして上述の一般的な説明及び下記の実施形態の詳細な説明と共に、本発明の原理を説明することに役立つ。
【００１７】
【図１Ａ】図１Ａは実施形態に従うシェーダコンプレックスを示す図である。
【００１８】
【図１Ｂ】図１Ｂは実施形態に従いＳＩＭＤを制御するように構成され得るレジスタを示す図（その１）である。
【図１Ｃ】図１Ｃは実施形態に従いＳＩＭＤを制御するように構成され得るレジスタを示す図（その２）である。
【図１Ｄ】図１Ｄは実施形態に従いＳＩＭＤを制御するように構成され得るレジスタを示す図（その３）である。
【００１９】
【図２】図２は実施形態に従う例示的なタイミング図である。
【００２０】
【図３Ａ】図３Ａは実施形態に従いＳＩＭＤを有効化及び無効化するための例示的なレジスタ設定を示す図（その１）である。
【図３Ｂ】図３Ｂは実施形態に従いＳＩＭＤを有効化及び無効化するための例示的なレジスタ設定を示す図（その２）である。
【００２１】
【図３Ｃ】図３Ｃは実施形態に従う例示的な動作を示すフローチャートである。
【００２２】
【図４Ａ】図４Ａは実施形態に従う例示的な性能プロットを示す図（その１）である。
【図４Ｂ】図４Ｂは実施形態に従う例示的な性能プロットを示す図（その２）である。
【図４Ｃ】図４Ｃは実施形態に従う例示的な性能プロットを示す図（その３）である。
【図４Ｄ】図４Ｄは実施形態に従う例示的な性能プロットを示す図（その４）である。
【図４Ｅ】図４Ｅは実施形態に従う例示的な性能プロットを示す図（その５）である。
【図４Ｆ】図４Ｆは実施形態に従う例示的な性能プロットを示す図（その６）である。
【００２３】
【図５Ａ】図５Ａはバランシングを伴わない従来のＳＩＭＤ負荷挙動を示すグラフ的な図である。
【００２４】
【図５Ｂ】図５Ｂは本発明の実施形態に従うＳＩＭＤ負荷挙動を示すグラフ的な図である。
【００２５】
【図６】図６は本発明の実施形態に従いＳＩＭＤアクティビティを評価するための例示的なプログラム可能参照テーブルを示す図である。
【００２６】
【図７】図７は本発明の実施形態に従いＳＩＭＤ負荷バランシングを行うための例示的な方法の例示的なフローチャートである。
【００２７】
【図８】図８は図７に示される先入れ先出し（ＦＩＦＯ）サンプリングを行うためのより詳細なフローチャートである。
【００２８】
【図９】図９は図７に示される方法ステップのより詳細なフローチャートである。
【００２９】
【図１０】図１０は実施形態に従う動的粒度クロックゲーティングのための例示的なシステムを示す図である。
【発明を実施するための形態】
【００３０】
上述したように、本発明の実施形態は、シェーダコンプレックスにおける個々のＳＩＭＤを動的にアクティブにすること及び非アクティブにすることによって、電力節約を可能にする。
【００３１】
実施形態は、グラフィクス処理ユニットの性能要求の低減又は熱設計電力（ＴＤＰ）を低下させることのいずれかのために、ＳＩＭＤを動的に無効化する。また実施形態は、グラフィクス処理ユニットのグラフィクスパイプをフラッシュする必要性なしに、無効化されたＳＩＭＤを高性能アプリケーションに対して有効化する。このことは、ＳＰをフラッシュすることなしにＳＩＭＤの数を動的に切り換えることによって達成される。動的な制御（又は切り換え）は、一連のレジスタを適切にプログラムすることによって、部分的には達成される。
【００３２】
ある実施形態においては、シェーダパイプ補間器(shader pipe interpolator)（ＳＰＩ）は、どのＳＩＭＤがアクティブであるのかを表すように動的に構成されるレジスタに基き新たな作業（又はスレッド）を割り当てる。ある実施形態においては、そのような動的な構成は、無効化されるべきＳＩＭＤによってインフライト要求(in-flight requests)（又は係属中要求(pending requests)）がサービスされた後に、効力を生じることになる。一旦無効化されると、ＳＰＩからの新たな要求は無効化されたＳＩＭＤへは渡らず、またハーベスト可能論理(harvestable logic)のクロック（例えばｓｐ４−ｖｓｐクロック及びテクスチャクロック）がシャットオフされてグラフィクス処理ユニットのＴＤＰを低減する。無効化されたＳＩＭＤが有効化されると、ＳＰＩは有効化されたＳＩＭＤに作業を割り当てることを再び開始し、グラフィクス処理ユニットの更に高い性能を提供する。
【００３３】
ある実施形態においては、ＳＩＭＤをアクティブにすること及び非アクティブにすること並びにアクティブ／非アクティブにされるべきＳＩＭＤの数は、動作条件（例えば温度、電流、ＣＡＣ）、アプリケーション（例えばエネルギーを節約するための可変の利用）、作業負荷又は他の要求（例えば性能要求、電力要求）等の種々の要因に依存する。
【００３４】
〔ＳＩＭＤの動的制御〕
図１Ａは本発明の実施形態が実装される例示的なシェーダコンプレックス１００を示している。上述したように、シェーダコンプレックスはシェーダパイプライン（ＳＰ）を含むことができる。より高い性能を達成するために、多重ＳＰが共に積層型ＳＰとして動作するように構成され得る。これらのＳＰは、クワッドパイプ（ＱＰ）のアレイ１８６及び複数のＳＩＭＤとして構築され得る。各ＳＩＭＤの全てのシェーダユニットは、プリミティブ、頂点又は画素の値の異なるセットに対して同一のＡＬＵ命令を条件付きで実行することができる。ある実施形態においては、シェーダコンプレックス１００は、複数のＳＩＭＤと２つのシェーダエンジン、即ちシェーダエンジン１２０及びシェーダエンジン１２２とを含む。シェーダコンプレックス１００はまた、テクスチャキャッシュ１３０（又はレベル２テクスチャキャッシュ）、複数のシェーダパイプ補間器（ＳＰＩ）及び頂点キャッシュを含む。シェーダコンプレックス１００には更に、複数の冗長シェーダスイッチ（ＲＳＳ）、シェーダシーケンサ（ＳＱ）、レベル１テクスチャキャッシュ（ＴＣＰ）及びテクスチャデータ論理（ＴＤ）が含まれる。（明確化のために少数のＳＩＭＤが図示されているが、本発明は図示される実施形態に限定されないこと及びシェーダコンプレックス１００は拡大縮小可能であり任意の数のＳＩＭＤを含み得ることが理解されるべきである。）
【００３５】
上述したように、本発明の実施形態は、ＳＰをフラッシュすることなしにＳＩＭＤの数を動的に切り換える。そのような動的な制御（又は切り換え）は、一連のレジスタを適切にプログラムすることによって、部分的には達成される。ある実施形態においては、ＳＰＩは、どのＳＩＭＤがアクティブであるのかを表すように動的に構成されるレジスタに基き新たな作業（又は作業スレッド）を割り当てる。
【００３６】
以下の欄では、ＳＩＭＤ及びＱＰマスクを制御する例示的なレジスタを論じる。
【００３７】
図１Ｂは「ＣＣ＿ＧＣ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」という名称のレジスタを示している。ある実施形態においては、このレジスタはリセット／構成ユニット（ＲＣＵ）によりフューズマスク設定に基きプログラムされる。例としては、このレジスタはハーベスト目的(harvesting purposes)でプログラムされ得る。
【００３８】
同様に、図１Ｃに示される「ＲＣＵ＿ＣＧ＿ＧＣ＿ＳＨＡＤＥＲ＿ＰＩＰＥ」及び「ＲＣＵ＿ＣＣ＿ＧＣ＿ＳＨＡＤＥＲ＿ＰＩＰＥ１」レジスタは、「ＣＣ＿ＧＣ＿ＳＨＡＤＥＲ−ＰＩＰＥ＿ＣＯＮＦＩＧ」レジスタのシャドーされたバージョン(shadowed version)である。これらのレジスタは、フューズマスク又はＳＭＣマイクロコードに基きプログラムされる。
【００３９】
図１Ｄに示されるレジスタ「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」は、動作中のＳＩＭＤ（及び／又はＱＰ）の数を制限するためにユーザによってプログラム可能である。このレジスタは、グラフィクスレジスタバスマネージャ（ＧＲＢＭ）から受け取ったインデックス毎にシェーダエンジンによってマッピングされ且つシャドーされるメモリであってよい。
【００４０】
「ＣＣ＿ＧＣ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」（図１Ｂ）のレジスタ設定は、実際上は静的であり、またチップに対して１回プログラムされる。対照的に、レジスタ「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」のレジスタ設定は、常に動的にプログラムされ得る（即ちオンザフライ）。本発明の実施形態は、「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」レジスタをＳＩＭＤの動的制御のために構成する。
【００４１】
ある実施形態においては、「ＣＣ＿ＧＣ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」レジスタ及び「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」レジスタの論理和の結果の値は、新たなスレッド（作業）が割り当てられるべき有効化されたＳＩＭＤをＳＰＩが決定する（オンザフライで）ために用いられる。ある実施形態においては、グラフィクスパイプ内の全ての他の設計ブロックは、それら自身を非アクティブなＳＩＭＤ／ＱＰのために静的に無効化するために、「ＣＣ＿ＧＣ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」レジスタを利用する。ある実施形態においては、そのような設計ブロックは、当該動作がシェーダパイプラインの不所望な「フリージング(freezing)」を生じさせる場合に、「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」レジスタを精査する必要はない。
【００４２】
図２に示される例示的なタイミング図を参照すると、ＳＩＭＤの制御は、シェーダエンジンにおけるアクティビティとは無関係に達成され得る。たとえ特定のＳＩＭＤが命令を実行するのにビジーであるとしても、実施形態は、そのＳＩＭＤのアクティブな実行期間の間そのＳＩＭＤを無効化することができる。例えば図２を参照すると、ＳＩＭＤ０はそのアクティブな実行期間の間、無効化され得る。
【００４３】
ある実施形態においては、本発明を限定する意図はないが、無効化された（又は非アクティブにされた）ＳＩＭＤが再度有効化されるまで、ＳＰＩはその無効化されたＳＩＭＤには作業を割り当てない。無効化されたＳＩＭＤは必然的に、それにおける現在の作業又は作業シーケンサパイプにおける係属中作業の完了に際して作業スレッドを流出させる。一旦空になると、動的粒度クロックゲーティング（後で更に説明する）は、無効化されたＳＩＭＤ内の論理へのクロック信号を無効化することができる。無効化されたＳＩＭＤの再有効化に際しては、ＳＰＩは、有効化されたＳＩＭＤへ新たなスレッド（作業要求）を提出することを再び開始する。ＳＩＭＤ制御設定は、ＧＲＢＭレジスタ書き込みを介してプログラムされ、またドライバ又はＳＭＣマイクロコードにより動的に設定され得る。
【００４４】
システム設計の観点からは、ＳＩＭＤはいつでも有効化又は無効化され得る（即ちオンザフライ）。電力節約の観点からは、有効化されたＳＩＭＤからＳＩＭＤ無効化状態への切り換えの時間は、ＳＩＭＤパイプ内に係属中の作業負荷に依存し得る。無効化されたＳＩＭＤを有効化するのに必要な時間（又はその逆）は、ＳＰＩがスレッドをそのＳＩＭＤに割り当てる準備が整ったときにＧＲＢＭレジスタに書き込むのと同じくらい速い。例としては、両方の場合に対して、必要な時間は数マイクロ秒であり得る。
【００４５】
〔動作の例示的なシナリオ〕
以下は、本発明の実施形態及びＳＩＭＤの動的な制御が用いられる例示的な動作シナリオである。
【００４６】
Ａ．条件ベースの制御
ＳＩＭＤの動的な制御は条件依存であり得る。そのような例示的な条件は、限定はされないが以下を含む。
【００４７】
（１）温度トリップ：外部ソースがより高いプロセッサ温度を示しており、また電力消費を低減する（又は適用可能な場合に上げる）必要がある場合。
【００４８】
（２）電流トリップ：外部ソースがより大きなプロセッサ電流を示しており、また電力消費を低減する（又は適用可能な場合に上げる）必要がある場合。
【００４９】
（３）ＣＡＣ管理：オンチップＣＡＣマネージャが処理アクティビティの増大に気付き、より多くのＳＩＭＤを有効化することによって性能を高める決定をする場合、又はオンチップＣＡＣマネージャがアクティビティの低下に気付き、性能の低下を伴うことなしに幾つかのＳＩＭＤを無効化することによって電力を低減する決定をする場合。
【００５０】
Ｂ．アプリケーションベースの制御
ＳＩＭＤの動的な制御はアプリケーション依存でもあり得る。そのような例示的なアプリケーションは、可変の利用(variable utilization)がエネルギーを節約することを可能にするアプリケーションを含む。例えば、アプリケーションのユーザモードで検出されるプロセッサ集約的なアプリケーション（例えば３Ｄグラフィクス処理）からそれほど集約的でないアプリケーション（例えばＤＶＤ再生）への変化が、実施形態に従ってＳＩＭＤの動的な制御のために用いられ得る。例えばユーザインタフェース（ＵＩ）入力メカニズム又はアプリケーションプログラミングインタフェース（ＡＰＩ）を介してのユーザ入力又はアプリケーション入力もまた、ＳＩＭＤの動的な制御を提供するために用いられてよい。これらの入力メカニズムは、処理アプリケーションに対して要求される電力レベルを設定するために用いられ得る。そのような入力メカニズムは、ソフトウエア（例えばアプリケーション又はオペレーティングシステム）、ファームウエア、ハードウエア又はこれらの種々の組み合わせを通して有効化され得る。
【００５１】
Ｃ．作業負荷ベースの制御
ＳＩＭＤの動的な制御は作業負荷依存であり得る。例として、ＳＩＭＤの動的な制御は、以下に記載される限定されない例示的なＧＰＵ条件の１つ以上に基きトリガーされ得る。
【００５２】
（１）静的スクリーン条件（無負荷）（ＴＤＰの５％未満）
【００５３】
（２）アイドル条件（極めて軽い負荷）（ＴＤＰの１０％未満）
【００５４】
（３）中負荷条件（ＴＤＰの５０％未満）
【００５５】
（４）重負荷条件（ＴＤＰの９０％未満）
【００５６】
（ａ）ＡＬＵ拘束
【００５７】
（ｂ）テクスチャフェッチ拘束
【００５８】
（ｃ）メモリスループット拘束
【００５９】
（５）極めて重い負荷（ＴＤＰの９０％超）
【００６０】
Ｄ．要求ベースの制御
ＳＩＭＤの動的な制御は、要求依存であり得るし、また性能要求及び電力要求に基き得る。ドライバはＧＰＵのＴＤＰをモニタリングし、そして最大ＴＤＰ負荷に近づくと、ＳＩＭＤを無効化してＴＤＰを低減する。ＳＩＭＤのそのような無効化は、ＧＰＵの周波数及び電圧の調整を伴い又は伴わずに達成され得る。
【００６１】
上述の例示的な制御条件は、ドライバ及び／又はＳＭＵ管理のＳＭＣマイクロコードを用いて検出及び実装可能である。実施形態はまた、有効化されたＳＩＭＤの数を自己制御することに専用の制御をも可能にする。
【００６２】
〔ＳＩＭＤを有効化及び無効化するための例示的なレジスタ設定〕
上述の条件モード（又は他のシナリオ）のいずれにおいても、ドライバは、レジスタ「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」のビットフィールド（例えばビットフィールド［３１：１６］）に書き込んでＳＩＭＤを無効化及び有効化することができる。図３Ａに示されるように、「０」を書き込むことはＳＩＭＤを有効化し、「１」を書き込むことはＳＩＭＤを無効化する。
【００６３】
グラフィクス処理ユニットは、２つのシェーダエンジン（例えばＳＥ０及びＳＥ１）を含むことができる。このシナリオにおいては、実施形態は、これらのシェーダエンジンに対して異なるＳＩＭＤを有効化及び無効化することができる。このことは、図３Ｂに示されるようなＧＲＢＭインデックスレジスタを用いてシェーダエンジンを別個にプログラムすることによって達成可能である。
【００６４】
図３Ｂを参照する。
【００６５】
（１）ＳＥ０（即ちシェーダエンジン０）の「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」に書き込むためには、以下の例示的な命令が使用可能である。
ｍｍＧＲＢＭ＿ＧＦＸ＿ＩＮＤＥＸ＝０ｘ４０００００００／／ＳＥ０を指向
ｍｍＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ＝０ｘＦＦ００００００／／無効化／／ＳＩＭＤ８及びＳＩＭＤ９
ｍｍＧＲＢＭ＿ＧＦＸ＿ＩＮＤＥＸ＝０ｘＣ０００００００／／ＧＲＢＭインデックスを回復／／レジスタを既定値に
【００６６】
（２）ＳＥ１（即ちシェーダエンジン１）の「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」に書き込むためには、以下の例示的な命令が使用可能である。
ｍｍＧＲＢＭ＿ＧＦＸ＿ＩＮＤＥＸ＝０ｘ４００１００００／／ＳＥ１を指向
ｍｍＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ＝０ｘＦＣ０３００００／／ＳＩＭＤ１無効化且つ／／ＳＩＭＤ０
ｍｍＧＲＢＭ＿ＧＦＸ＿ＩＮＤＥＸ＝０ｘＣ０００００００／／ＧＲＢＭインデックスレジスタを既定値に回復
【００６７】
（３）ＳＥ０及びＳＥ１（即ちシェーダエンジン１）の両方の「ＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ」に書き込むためには、以下の例示的な命令が使用可能である。
ｍｍＧＣ＿ＵＳＥＲ＿ＳＨＡＤＥＲ＿ＰＩＰＥ＿ＣＯＮＦＩＧ＝０ｘＦＣ０Ｃ００００／／ＳＥ０及びＳＥ１の両方のＳＩＭＤ３＆ＳＩＭＤ２を無効化
【００６８】
シェーダエンジン（例えばＳＥ０，ＳＥ１等）毎に有効化されたＳＩＭＤは、作業が適用されている最中の各サブセット内の各シェーダエンジンに対して少なくとも１つのＳＩＭＤが有効化されたままである限りは、オンザフライで変化させることができる。つまり、例えば、ＳＩＭＤが異なる種類の作業に対して区分化されており、即ちテセレーションシェーダ(tessellation shaders)のためにサイド毎に２つのＳＩＭＤがあり、且つ残りのＳＩＭＤが頂点作業及び画素作業で共有されている場合、テセレーションシェーダのための２つのＳＩＭＤは有効化されたままであってよく、また画素及び頂点のための残りのＳＩＭＤの１つは有効化されてよい。
【００６９】
図３Ｃはある実施形態に従う例示的な全体動作を示すフローチャートである。
【００７０】
ステップ３０２では、所与の処理動作に対して要求される性能レベルが決定される。例としては、そのような性能レベルは、アプリケーション、条件、作業負荷又は要求に依存し得る。
【００７１】
ステップ３０４では、シェーダエンジンにおける異なるＳＩＭＤを有効化及び無効化するために、１つ以上のレジスタが構成される。例としては、そのような構成は、図３Ｂに示されるようなＧＲＢＭインデックスレジスタを用いてシェーダエンジンを別個にプログラムすることによって達成可能である。
【００７２】
ステップ３０６では、ステップ３０４で構成されたレジスタに基づき１つ以上のレジスタが有効化又は無効化される。
【００７３】
以下の欄は、性能と電力節約の間でのトレードオフ決定をなす上で実施形態を支援し得る例示的なプロットを示している。
【００７４】
〔電力節約対性能影響〕
ＳＩＭＤが有効化されると、電力を消費する。処理アクティビティの増大に伴い、ＳＩＭＤはより大きな電力を消費することになる。逆に処理アクティビティの低下に伴い、ＳＩＭＤはより小さな電力を消費することになる。アイドル状態においては、ＳＩＭＤは、最小ではあるがＳＩＭＤのサイズ（例えば面積、セル数等）に基く測定可能な量の電力を消費するはずである。
【００７５】
図４Ａのプロットは、有効化されたＳＩＭＤの数の増加に伴うコア電力の線形増加を示している。プロットは、アプリケーションがＳＩＭＤ拘束であるシナリオを示している。つまり、アプリケーションは、全ての利用可能なＳＩＭＤ資源を費やす電力集約的アプリケーションである。
【００７６】
グラフィクス処理ユニットの性能はＳＩＭＤの数の増大に伴って高まるはずであるというのが一般的な想定である。しかし、この意見は、集約的処理タスクに対して一般的に真実であり得る。多くのシナリオにおいては、従来の手法は、軽処理負荷であっても全てのＳＩＭＤを有効化された状態に保つので、負荷条件に応じて電力を消費するであろう。
【００７７】
以下の欄では、異なる種類のアプリケーションに対する例示的なワット毎ＳＩＭＤ性能プロットを論じる。
【００７８】
（１）理想的な負荷を伴うアプリケーション
図４Ｂは理想的な負荷を伴うアプリケーションに対するワット毎性能プロットを示す。図４Ｂに示されるように、ＳＩＭＤの数が増えるのに従って、グラフィクス処理ユニットのワット毎性能は、一定のＳＩＭＤ毎電力消費で線形的に高まる。
【００７９】
（２）バランスされた負荷を伴うアプリケーション
図４Ｃはバランスされた負荷を伴うアプリケーションに対するワット毎性能プロットを示す。図４Ｃに示されるように、ＳＩＭＤの数が増えてもワット毎性能は維持される。
【００８０】
（３）現実的な負荷を伴うアプリケーション
多くの場合、現実的なシナリオにおいては、処理負荷は、ワット毎性能特性が理想的な負荷に対する特性とバランスされた負荷に対する特性との間にあるようなものである。図４Ｄに示されるように、ＳＩＭＤの増加に伴い、ワット毎性能は最初は高まるが、その後飽和して一定レベルを保つか、場合によっては低下することもある。ワット毎性能が低下すると、相対的に低い性能利得でより大きな電力が消費される。このことは、それぞれ図４Ｅ及び図４Ｆに示される軽負荷及び中／重負荷プロットから判る。
【００８１】
図５Ａはバランシングを伴わない従来のＳＩＭＤ負荷挙動を示すグラフ的な図５００である。本発明の実施形態はまた、個々のＳＩＭＤ内での利用を最大化する。利用を最大化することによって、それぞれのＳＩＭＤのオーバヘッドサイクルが低減され、追加的な電力節約が結果としてもたらされる。
【００８２】
従来のＳＱブロックが対応するＳＩＭＤへと命令を発行すると、そのＳＩＭＤに対応するビジー信号が送信されて、これは典型的には１３クロックサイクル５０２の間続く。それら１３サイクルに４サイクルの作業サイクル５０４が続き、次いで２５サイクルのアイドル又はウォーターフォールサイクル５０６が続く。図５Ａは、アレイ（図１Ａのアレイ１８６と同様）内の全てのＳＩＭＤがアクティブにされているが、各ＳＩＭＤは完全には利用されていない例を示している。この例においては、各ＳＩＭＤは、図５Ａに示されるように単にアイドリングし又は部分的にウォーターフォーリングするだけで、３８オーバヘッドサイクル（１３＋２５）を浪費することになる。
【００８３】
しかし、より多くの命令が各ＳＩＭＤへ発行されるのに従って、オーバヘッドサイクルの割合は小さくされ、パイプライン内のより少ないバブル及びこれに伴いよりよい利用をもたらす。図５Ｂは本発明の原理に従い強化された利用を示している。
【００８４】
図５Ｂは本発明の実施形態に従うＳＩＭＤ負荷挙動のグラフ的な図５０８である。図５Ｂはアレイ１８６内の２つのＳＩＭＤのみが有効化されている例を示している。しかし、図５Ｂにおいては、これら２つのＳＩＭＤは、上述の図５Ａにおいて全ての利用可能なＳＩＭＤが行っていたのと同じ量の作業を行っている。
【００８５】
図５Ｂにおいては、各ＳＩＭＤの利用を最大化する負荷スキームの下で、アイドルサイクル５１０は１３サイクルを含む。アイドルサイクル５１０の後に、１００サイクルの作業を含む作業サイクル５１２が続く。作業サイクル５１２に続き、２５サイクルの間続くアイドルサイクル５１４がある。
【００８６】
図５Ｂにおいても３８オーバヘッドが浪費されるが、それらは当該アレイの利用可能なＳＩＭＤの各々においてではなく、２つのＳＩＭＤにおいて浪費されるのみである。また、命令の発行はウォーターフォールサイクルを連続的に(back to back)利用して、先行する命令の実行をコンパクトにする。これら２つの要因は組み合わされて、アクティブなＳＩＭＤに対する効果的な利用サイクルを大きく改善する。従って、図５Ｂの利用配置は、同じ量の作業を行い、同じレベルの性能をもたらすが、極めて小さい電力を消費する。図５Ｂの例示的な実施形態に示されるように、各有効化されたＳＩＭＤの利用を最大化することにより、電力が節約される。全体性能を低下させることなしに電力節約が可能である場合には、チップ効率（即ち性能／ワット）が増大する。
【００８７】
図６は本発明の実施形態に従いＳＩＭＤ利用を評価するために用いられる単純化されたプログラム可能参照テーブル(programmable lookup table)６００を示す図である。本発明の実施形態においては、ＳＩＭＤ利用レベルは、予め定められた期間にわたって各ＳＩＭＤに対してＳＱにより発行された命令をカウントすることによって測定される。
【００８８】
命令をカウントする典型的な手法を用いて、特定のＳＩＭＤの利用に対する定量的測度を推測することができる。このプロセスはアレイ１８６内のＳＩＭＤの各々に対して行われ、そして結果は予め定められた期間にわたって平均化される。有効化されたＳＩＭＤについて予め定められた期間にわたって平均化することにより、有効化されたＳＩＭＤの各々の総利用の公正な近似が与えられる。平均化された利用数は次いで、参照テーブル６００における値と比較される。参照テーブル値に応じて、追加的なＳＩＭＤを有効化するか、又は現在アクティブなＳＩＭＤを最適な利用レベルへと無効化するかの決定がなされる。
【００８９】
本発明の実施形態は、ＳＩＭＤの現在の状態におけるＳＩＭＤの利用に関連しており、またＳＩＭＤの未来の状態に関する予測を含む。各ＳＩＭＤは、２つの部分、即ち（ａ）テクスチャフェッチ関連命令及び（ｂ）ＡＬＵ関連命令に分類される多重種の命令を実行する。従って、本発明の技術を用いて、ハードウエア及びファームウエア制御器の専用の組み合わせが、各ＳＩＭＤ内でのＡＬＵ命令及びフェッチ命令の実行をモニタリング及び測定する。
【００９０】
現在の利用に対しては、ＡＬＵ命令及びフェッチ命令に関連する情報は、クロック毎ベースで各ＳＩＭＤにおいて動的に捕獲及び計算される。即ち、予め定められた期間にわたって、各ＳＩＭＤにおいて実行されるＡＬＵ命令及びフェッチ命令の数がカウントされる。この数は現在の利用／ＳＩＭＤを表す。ＡＬＵ命令及びフェッチ命令が各ＳＩＭＤにおいてカウントされている間、ウエーブフロントのような他のアクティビティ及びパイプライン内で生じているスレッド割り当ては、未来のサイクルにおけるＳＩＭＤ内での実行のためにキューされる。
【００９１】
これらウエーブフロントキュー及びスレッドキューは、これらモジュールの両方とも作業負荷をバッファリングする役割を果たすので、例えばそれぞれＳＰＩモジュール１０２及び／又はＳＱ内に存在し得る。上述したように、ＳＰＩモジュール１０２は、シェーダ種類に基くウエーブフロントを生成する。所与のシェーダ種類に対してＳＰＩモジュール１０２は、例えば、特定のＳＩＭＤのために特定の種類のウエーブフロントが実行されるべきであることを示すことになる。多重スレッドはＳＱ内の各ウエーブフロントから生成される。
【００９２】
上述の情報はテーブル６００内のエントリと比較される。テーブル６００は、まさにデルタテーブルの可能な実装の例である。このテーブル６００は、例えば、利用下方限界６０２、利用上方限界６０４及びＳＩＭＤ％増分（デルタ）６０６を含む。ＳＩＭＤ％増分６０６は、例えば正又は負であり得る（即ち減少までを示す）。テーブル６００に示されるような予め定められた表集計値を用いることによって、使用可能な範囲でＳＩＭＤ利用が評価及び比較される。この比較は次いで、もっと多くのＳＩＭＤを有効化する又はアクティブなＳＩＭＤの幾つかを無効にする必要性があるかどうかを決定するために用いられる。
【００９３】
予測及び評価は、作業を行うのに幾つのＳＩＭＤが必要であるのかを決定するときに、未来のＳＩＭＤ動作に関してもなされ得る。上述の実施形態はＡＬＵ命令及びフェッチ命令に焦点を当てているが、本発明はそれらに限定されない。ＳＩＭＤ利用を決定するために他の種類の命令を用いることもでき、それらは例えばベクターＡＬＵ(Vector ALU)、スカラーＡＬＵ(Scalar ALU)、テクスチャフェッチ(Texture Fetch)、ＬＤＳ及び他の命令である。
【００９４】
テーブル６００において、ランタイムのある点で評価期間にわたって有効化される２０個のＳＩＭＤ（例として）があったとすると、利用数は３０％になる。この数は範囲６０８内にある（図１はＳＥ毎に１３個のＳＩＭＤを有しており、また２つのＳＥがあるので、図示されるシステムには全部で２６個のＳＩＭＤがある）。従って、制御器によってなされる動作は、「ＳＩＭＤ（％）増分」列に従って、有効化されたＳＩＭＤの４０％を無効化することになるはずである。結果として、８つのＳＩＭＤ（２０個のアクティブなＳＩＭＤ×４０％減少）がシャットオフされることになり、コアは、実質的な性能影響なしに前述したようにより高い利用を達成するために、更なるウエーブフロントを残りの１２個のＳＩＭＤへと押し込むことを余儀なくされる。制御器は、システム利用をモニタリングし続け、そして有効化されている資源を、入ってくる作業負荷に合うように正常に適合させる。上述の例では、制御器は、各有効化されたＳＩＭＤが（８０〜９０％）利用される範囲「４」へとシステムを収束させることになる。更に、評価期間長及びデルタテーブル値を調整することによって、制御器動作の粒度(controller action’s granularity)を変化させて現実世界での応用に適合させることができる。
【００９５】
図７は本発明の実施形態に従いＳＩＭＤ負荷バランシングを実装する方法７００の例示的なフローチャートである。図７においてはステップ７０２で初期化が始まる。ステップ７０２では、チップはリセットを経てＡＬＵ及びフェッチの命令カウント値に従って初期化される。これは例えばＲＬＣのスクラッチメモリレジスタ内で生じ得る。テーブル６００は、（０〜１００％）の利用範囲をより小さな区間へと分割し、また特定の利用区間に対してアクティブ又は非アクティブにされるべきＳＩＭＤの数を特定する。
【００９６】
ステップ７０４では、割り込みが発生するのを待機する。内側ループ（即ち早いループ）７０６では、係属中のウエーブフロント及びスレッドのカウントがサンプリングされる。このことは、係属中ウエーブフロントカウントを表すＳＰＩモジュール１０２内のＦＩＦＯを介して行われ、また係属中スレッドカウントを表すＳＱのＦＩＦＯは、ＳＩＭＤ未来予測データを抽出するためにサンプリングされ得る。このデータは、ＳＩＭＤ利用が増大又は低下する傾向を表すのかを決定するために解析され得る。予め定められた数のサンプル、例えば１０サンプルが取られてパラメータ化され得る。サンプル数が予め定められた最大数に達すると、プロセスは主ループ６０７へと移行する。例示的な主ループ６０７の付加的な詳細は図９に示されており、後で論じられる。
【００９７】
図７を再び参照すると、内側ループ７０６及び主ループ６０７が終了した後、方法７００は経路７０８に沿って割り込みステップ７０４へ戻る。内側ループ７０６の一部として、図８のサンプリングステップ８００が実行される。
【００９８】
図８はＦＩＦＯサンプリングを行うための例示的な方法８００のフローチャートである。ＦＩＦＯサンプリング方法８００は、例えば、ＦＩＦＯにおけるエントリの数をサンプリングし、そして上述した傾向データマイニング(trend data mining)を行うことによって未来の傾向を決定する。この傾向データは、ＳＩＭＤ利用を評価するための二次的要因として用いられる。方法８００においては、ステップ８０２でＳＱが読まれ、アレイ１８６内の各ＳＩＭＤに対する係属中スレッドが示される。このデータは、先の読み８０８よりも大きい（ステップ８０４）か、又は小さい（ステップ８０６）か、を決定するために比較され、傾向が決定される。傾向が上昇である場合（例えばＳＰＩＭ１００からのデータとの比較により）には、上昇フラグがセットされてよい。小さい場合には、別のフラグ（下降）がセットされ得る。このデータは最後の読み８１０として記憶される。
【００９９】
上述したように、トレンドは、所与の作業負荷に対して必要な最適数ＳＩＭＤを決定するために用いられる１つの要因である。例えば、現在の利用はゼロであるが、予測された未来の利用が３０％である場合、ＳＩＭＤの９０％は無効にされてよい。一方、現在の利用はゼロであるが、未来の傾向が８０％の更なる作業を示している場合、性能に妥協することなく現在のＳＩＭＤの９０％を無効化することはできないので、現在の利用が極めて低いとしても、ＳＩＭＤは減少させられない。
【０１００】
図９は図７に示される主ループステップ６０７の更に詳細なフローチャートである。方法９００は、他のステップからデータを収集し、このデータを用いてＳＩＭＤ利用決定プロセスと共に本質的な決定を実行する。中でもステップ９０２においては、有効化されているＳＩＭＤの数の評価がなされる。この数は固定ではなく、例えば、ハーベスト又は縮小された構成の欠陥許容値若しくは検討された意図(harvesting or defect tolerance or deliberate intent of reduced configuration)に依存し得る。
【０１０１】
より具体的には、ステップ９０２では、シェーダエンジン１１４及び１１６の各々に対して、システムは、最適化プロセスに含まれるのに適するＳＩＭＤのベースラインを確立する。もしシェーダ種類が全てのＳＩＭＤではなくＳＩＭＤのサブセットに限定されている場合には、そのサブセットはベースラインＳＩＭＤマスクから除去され、最適化プロセス内にあるとは見なされない。
【０１０２】
ステップ９０４では、以下の例示的な動作が行われる。
０≦Δ≦６３  非アクティブ化  ＃ｓｉｍｄｓ＝｛（６４−Δ）／６４｝×ａｃｔｉｖｅ＿ｓｉｍｄｓ
Δ＝６４  何もせず  ＃ｓｉｍｄｓ＝０
６５≦Δ≦１２７  アクティブ化  ＃ｓｉｍｄｓ＝｛（Δ−６４）／６４｝×ａｃｔｉｖｅ＿ｓｉｍｄｓ
【０１０３】
ステップ９０４では、ベースラインデルタ最大値が、有効化又は無効化することをアルゴリズムに伝える。次いで、ＡＬＵカウントに対応するデルタ値が参照される。デルタ値は、負荷をバランスさせるためにアクティブ／非アクティブにされる必要のある現在アクティブなＳＩＭＤの数に対するＳＩＭＤの割合を表す。デルタは０〜１２７の値を有する。控えめにみて、より多くのＳＩＭＤをアクティブにし又は最小としてはより少ないＳＩＭＤを非アクティブにすることを促進する、より大きなデルタ値が選択され得る。
【０１０４】
デルタが中立スレッショルドを越えており、より多くのＳＩＭＤがアクティブにされるべきである場合、ＳＩＭＤの数が計算され、そして利用可能なシェーダエンジンの間でバランスさせられる。デルタが中立スレッショルドを下回っており、より多くのＳＩＭＤが非アクティブにされるべきである場合、作業負荷傾向と係属中作業負荷キューの状態とをチェックすることによって、未来の負荷が十分なＳＩＭＤを確実に有するように、更なる（二次的な）決定がなされる。ウエーブフロントカウント及びクローズ(clause)（スレッド）カウントが例えば減少傾向又は安定傾向を示しており且つスレッショルドを下回るものとして報告されている場合には、非アクティブ化が生じ得る。いずれかが増加傾向を示しており、又はスレッショルドを越えていると報告している場合には、非アクティブ化はなされず、また次の反復がクリーンアップするために残されない。
【０１０５】
ステップ９０４におけるデルタが予め定められたスレッショルドを越えている場合には、ステップ９０６が実施される。ステップ９０６では、アクティブにされるべきＳＩＭＤの数が決定され適用される。ステップ９０４におけるデルタが予め定められたスレッショルドより小さい場合には、技術はステップ９０７へ進む。ステップ９０７では、前述した要因に基きＳＩＭＤの数を減少させる決定がなされ、そして必要であればステップ９０８で処置が取られる。ステップ９０８はステップ９０６と同様であるので、追加的な詳細は論じない。
【０１０６】
上述したＬＢＰＷ技術は、ｄｉ／ｄｔの悪影響の低減をも支援することができる。その結果、電圧レギュレータに対する雑音マージンを改善することができ、低コストのレギュレータの使用が可能になる。電流が高速に変化すると、これを補償するために周波数が低下させられる必要がある。周波数低下は性能の低下を結果としてもたらすことになる。ｄｉ／ｄｔが減少させられると、周波数を増大することができ、結果として性能の向上がもたらされる。ｄｉ／ｄｔの減少はまた、ＶＤＤＣ動作の低減を可能にし、その結果、動的な電力消費を低減することができる。
【０１０７】
本発明の実施形態の追加的な利益は、所与の熱設計電力（ＴＤＰ）プランに対するワット毎最大性能の促進である。シェーダ計算処理能力は、ＴＤＰ固定により調節することができる。これを達成するための１つの例示的な手法は、バウンディングボックス(bounding box)を含む。当業者によって理解されるように、バウンディングボックスは、ビニングプロセス(binning process)の間にチップの動作条件を定義するときに用いられる技術である。例えばチップは異なる動作構成を有し得るので、異なる市場ＳＫＵがもたらされ得る。各ＳＫＵはＴＤＰのためのバウンディングボックスを有する。市場ＳＫＵにおける異なるばらつきの全ては、異なるＴＤＰ値（ＳＫＵに対するバウンディングボックス）を有する。本発明のＬＢＰＷ技術は、所与のバウンディングボックスに対して最良のワット毎性能を達成することを支援する。
【０１０８】
〔動作の各モードのための節約〕
図４Ａ〜図４Ｆにおけるプロットから判るように、実施形態に従う電力節約は、アプリケーション毎に変化し得る。多くのアプリケーションにおいては、例えば、実施形態は性能に妥協することなく電力を節約する。そのようなアプリケーションは、ＳＩＭＤ処理負荷が軽いものであり得るＤＶＤ再生アプリケーションを含む。
【０１０９】
単に例示的であり限定的でない例としては、「ｅｃｌｋ＝８７５ＭＨｚ」及び「ｍｃｌｋ＝９０ＭＨｚ」を伴うＡＭＤのＲ７７０プロセッサ上では、ＳＩＭＤ毎電力消費は、重負荷で約４．５ワットである。より軽負荷では、実施形態に従い、クロックゲーティング及び動的なＳＩＭＤ制御に起因して、電力消費は低減され得る。例えば、電力をあるレベルに固定することが必要である場合、重負荷でＳＩＭＤの数を減少させることにより顕著な節約が可能になる。ある実施形態においては、アプリケーションは、グラフィクス処理ユニットにおいて有効化又は無効化されるＳＩＭＤの数を決定することもできる。
【０１１０】
〔動的粒度クロックゲーティング〕
上述したように、従来の手法においては、シェーダコンプレックスにおける全てのＳＩＭＤユニットのクロッキングは、同時に有効化されるか又は無効化されるかのいずれかである。多くのアプリケーションにおいて、全てのＳＩＭＤが作業を割り当てられるわけではない。しかし、従来の手法は、そのようなＳＩＭＤに対してクロック信号を能動的に供給し続ける。この手法はグラフィクス処理ユニットの電力消費を増大させ、非効率である。従来の手法はシェーダコンプレックスブロックのための静的なクロックゲーティングを含むことがあり、この場合、ＳＰＩによって要求が開始されると、シェーダコンプレックスブロックのクロックは、ｄｉ／ｄｔ（即ち電流の変化の速度）回避カウント遅延を伴って、１つずつオンにされる。一旦開始されると、クロックは、シェーダコンプレックス内の多くのブロックに対する作業がない場合でも、シェーダコンプレックス全体のためにクロッキングし続ける。つまり、任意の所与の時間では、少しのＳＩＭＤのみがアクティブである。作業が一旦シェーダコンプレックスによって完了されると、クロックはｄｉ／ｄｔ回避カウント遅延を用いて自動的にシャットオフされる。このように従来の手法においては、クロックゲーティングは本来的に静的であり、そしてシェーダコンプレックスを単一システムとして取り扱う。
【０１１１】
従来の手法とは対照的に、本発明の実施形態は、シェーダコンプレックスにおける個々のＳＩＭＤの動的粒度（例えば中間粒度）クロックゲーティングを達成する。使用していない論理へのクロックツリーをシャットダウンすること、及びクロックオンデマンドメカニズム（例えば真クロックオンデマンドメカニズム）を提供することによって、スイッチング電力が低減される。このようにしてクロックゲーティングが強化されて、ＳＩＭＤがアイドルである（又は作業を割り当てられていない）期間に対してスイッチング電力を節約することができる。
【０１１２】
本発明の実施形態はまた、シェーダコンプレックスにおける各ＳＩＭＤへのクロックの動的な制御を含む。各ＳＩＭＤは、それ自身のクロックを管理するシェーダコンプレックスサブシステムとして取り扱われる。ＳＩＭＤにおける各ブロック／タイルのための動的な制御もまた提供される。クロッキングは、実際の作業がＳＩＭＤに到着する前に始まることができ、またＳＩＭＤによって全ての作業が完了するまで有効化されたままでいることができる。
【０１１３】
本発明の実施形態の種々の側面がソフトウエア、ファームウエア、ハードウエア（又は例えばベリログ(Verilog)若しくはハードウエア記述言語命令等のソフトウエアによって表されるハードウエア）、又はそれらの組み合わせにおいて実装され得る。図１Ａは例示的なコンピュータシステムを示す図であり、このシステムにおいては、本発明又はその部分がコンピュータ可読コードとして実装され得る。尚、本発明の種々の実施形態のシミュレーション、合成及び／又は製造は、部分的には、一般的なプログラミング言語（Ｃ又はＣ＋＋等）、例えばベリログＨＤＬ(Verilog HDL)、ＶＨＤＬ、アルテラＨＤＬ(Altera HDL)（ＡＨＤＬ）等のハードウエア記述言語（ＨＤＬ）、若しくは他の利用可能なプログラミングを含むコンピュータ可読コード、及び／又は回路等キャプチュアツール（例えば回路キャプチュアツール）の使用を通して達成され得る。このコンピュータ可読コードは、半導体、磁気ディスク、光学ディスク（ＣＤＲＯＭ、ＤＶＤ−ＲＯＭ等）を含むあらゆる既知のコンピュータ使用可能媒体内に配置され得るし、またコンピュータ使用可能（例えば可読）な伝送媒体（例えば搬送波又はデジタル、光学的若しくはアナログベースの媒体等のあらゆる他の媒体）において具現化されるコンピュータデータ信号として処理され得る。従って、コードは、インターネットを含む通信ネットワークを介して伝送され得る。上述したシステム及び技術により達成される機能及び／又は提供される構造は、プログラムコードにおいて具現化されるコア（ＧＰＵコア等）内に表現することができ、また集積回路の生産の一部としてハードウエアに変換され得ることが理解される。
【０１１４】
〔結論〕
概要及び要約の欄ではなく、詳細な説明の欄が特許請求の範囲を解釈するために用いられることが意図されていると理解されるべきである。概要及び要約の欄は、発明者によって検討された本発明の１つ以上のしかし全部ではない例示的な実施形態を説明することができ、従って本発明及び添付の特許請求の範囲を限定することが意図されているわけではけっしてない。
【０１１５】
特定の機能の実装及びそれらの関係性を示す機能構築ブロックを補助として、本発明が上述のように説明されてきた。これらの機能構築ブロックの境界は、説明の便宜上ここでは適宜画定されてきた。特定の機能及びそれらの関係性が適切に実行される限りにおいて、代替的な境界が画定され得る。
【０１１６】
特定の実施形態の上述した説明は、本発明の一般的性質を十分に明らかにするであろうから、他者は、当業者における知識を適用することによって、過度の実験を必要とせず、本発明の一般的概念から逸脱することなく、そのような特定の実施形態を容易に修正し且つ／又は種々の応用に適応させることができる。従って、そのような適応及び修正は、ここに提示されている教示及び指針に基いて、開示されている実施形態と均等なものの意味及び範囲の範疇にあることが意図されている。ここでの用語等は、説明を目的としたものであって限定を目的としていないことが理解されるべきであり、本出願書類の用語等は教示及び指針の下で当業者によって解釈されるべきである。
【０１１７】
本発明の広さ及び範囲は、上述したいかなる例示的な実施形態によっても限定されるべきではなく、以下の特許請求の範囲及びそれらと均等なものに従ってのみ画定されるべきである。
【図１Ａ】
2013532855.tif 000003
【図１Ｂ】
2013532855.tif 000004
【図１Ｃ】
2013532855.tif 000005
【図１Ｄ】
2013532855.tif 000006
【図２】
2013532855.tif 000007
【図３Ａ】
2013532855.tif 000008
【図３Ｂ】
2013532855.tif 000009
【図３Ｃ】
2013532855.tif 000010
【図４Ａ】
2013532855.tif 000011
【図４Ｂ】
2013532855.tif 000012
【図４Ｃ】
2013532855.tif 000013
【図４Ｄ】
2013532855.tif 000014
【図４Ｅ】
2013532855.tif 000015
【図４Ｆ】
2013532855.tif 000016
【図５Ａ】
2013532855.tif 000017
【図５Ｂ】
2013532855.tif 000018
【図６】
2013532855.tif 000019
【図７】
2013532855.tif 000020
【図８】
2013532855.tif 000021
【図９】
2013532855.tif 000022
【国際調査報告】
2013532855.tif 000023
2013532855.tif 000024
2013532855.tif 000025
2013532855.tif 000026
2013532855.tif 000027