(58)【調査した分野】(Int.Cl.,DB名)
前記動的に無効化することは、前記1つ以上のSIMDユニットをアクティブ実行期間の間に無効化することを備え且つ前記1つ以上のSIMDユニットのシェーダエンジンにおけるアクティビティとは無関係である請求項1の方法。
処理作業負荷、アプリケーション要求及び前記1つ以上の動作条件のうち1つ以上に基づいて、前記構成レジスタの1つ以上のビットインデックスを設定することを更に備える請求項1の方法。
前記動的に無効化することは、前記1つ以上のSIMDユニットにおける使用されていない論理への1つ以上のクロックツリーを無効化することを更に備える請求項1の方法。
前記GPUは、前記1つ以上のSIMDユニットをアクティブ実行期間の間に無効化するように更に構成され且つ前記1つ以上のSIMDユニットのシェーダエンジンにおけるアクティビティとは無関係である請求項7のシステム。
【発明を実施するための形態】
【0030】
上述したように、本発明の実施形態は、シェーダコンプレックスにおける個々のSIMDを動的にアクティブにすること及び非アクティブにすることによって、電力節約を可能にする。
【0031】
実施形態は、グラフィクス処理ユニットの性能要求の低減又は熱設計電力(TDP)を低下させることのいずれかのために、SIMDを動的に無効化する。また実施形態は、グラフィクス処理ユニットのグラフィクスパイプをフラッシュする必要性なしに、無効化されたSIMDを高性能アプリケーションに対して有効化する。このことは、SPをフラッシュすることなしにSIMDの数を動的に切り換えることによって達成される。動的な制御(又は切り換え)は、一連のレジスタを適切にプログラムすることによって、部分的には達成される。
【0032】
ある実施形態においては、シェーダパイプ補間器(shader pipe interpolator)(SPI)は、どのSIMDがアクティブであるのかを表すように動的に構成されるレジスタに基き新たな作業(又はスレッド)を割り当てる。ある実施形態においては、そのような動的な構成は、無効化されるべきSIMDによってインフライト要求(in-flight requests)(又は係属中要求(pending requests))がサービスされた後に、効力を生じることになる。一旦無効化されると、SPIからの新たな要求は無効化されたSIMDへは渡らず、またハーベスト可能論理(harvestable logic)のクロック(例えばsp4−vspクロック及びテクスチャクロック)がシャットオフされてグラフィクス処理ユニットのTDPを低減する。無効化されたSIMDが有効化されると、SPIは有効化されたSIMDに作業を割り当てることを再び開始し、グラフィクス処理ユニットの更に高い性能を提供する。
【0033】
ある実施形態においては、SIMDをアクティブにすること及び非アクティブにすること並びにアクティブ/非アクティブにされるべきSIMDの数は、動作条件(例えば温度、電流、CAC)、アプリケーション(例えばエネルギーを節約するための可変の利用)、作業負荷又は他の要求(例えば性能要求、電力要求)等の種々の要因に依存する。
【0034】
〔SIMDの動的制御〕
図1Aは本発明の実施形態が実装される例示的なシェーダコンプレックス100を示している。上述したように、シェーダコンプレックスはシェーダパイプライン(SP)を含むことができる。より高い性能を達成するために、多重SPが共に積層型SPとして動作するように構成され得る。これらのSPは、クワッドパイプ(QP)のアレイ186及び複数のSIMDとして構築され得る。各SIMDの全てのシェーダユニットは、プリミティブ、頂点又は画素の値の異なるセットに対して同一のALU命令を条件付きで実行することができる。ある実施形態においては、シェーダコンプレックス100は、複数のSIMDと2つのシェーダエンジン、即ちシェーダエンジン120及びシェーダエンジン122とを含む。シェーダコンプレックス100はまた、テクスチャキャッシュ130(又はレベル2テクスチャキャッシュ)、複数のシェーダパイプ補間器(SPI)及び頂点キャッシュを含む。シェーダコンプレックス100には更に、複数の冗長シェーダスイッチ(RSS)、シェーダシーケンサ(SQ)、レベル1テクスチャキャッシュ(TCP)及びテクスチャデータ論理(TD)が含まれる。(明確化のために少数のSIMDが図示されているが、本発明は図示される実施形態に限定されないこと及びシェーダコンプレックス100は拡大縮小可能であり任意の数のSIMDを含み得ることが理解されるべきである。)
【0035】
上述したように、本発明の実施形態は、SPをフラッシュすることなしにSIMDの数を動的に切り換える。そのような動的な制御(又は切り換え)は、一連のレジスタを適切にプログラムすることによって、部分的には達成される。ある実施形態においては、SPIは、どのSIMDがアクティブであるのかを表すように動的に構成されるレジスタに基き新たな作業(又は作業スレッド)を割り当てる。
【0036】
以下の欄では、SIMD及びQPマスクを制御する例示的なレジスタを論じる。
【0037】
図1Bは「CC_GC_SHADER_PIPE_CONFIG」という名称のレジスタを示している。ある実施形態においては、このレジスタはリセット/構成ユニット(RCU)によりフューズマスク設定に基きプログラムされる。例としては、このレジスタはハーベスト目的(harvesting purposes)でプログラムされ得る。
【0038】
同様に、
図1Cに示される「RCU_CG_GC_SHADER_PIPE」及び「RCU_CC_GC_SHADER_PIPE1」レジスタは、「CC_GC_SHADER−PIPE_CONFIG」レジスタのシャドーされたバージョン(shadowed version)である。これらのレジスタは、フューズマスク又はSMCマイクロコードに基きプログラムされる。
【0039】
図1Dに示されるレジスタ「GC_USER_SHADER_PIPE_CONFIG」は、動作中のSIMD(及び/又はQP)の数を制限するためにユーザによってプログラム可能である。このレジスタは、グラフィクスレジスタバスマネージャ(GRBM)から受け取ったインデックス毎にシェーダエンジンによってマッピングされ且つシャドーされるメモリであってよい。
【0040】
「CC_GC_SHADER_PIPE_CONFIG」(
図1B)のレジスタ設定は、実際上は静的であり、またチップに対して1回プログラムされる。対照的に、レジスタ「GC_USER_SHADER_PIPE_CONFIG」のレジスタ設定は、常に動的にプログラムされ得る(即ちオンザフライ)。本発明の実施形態は、「GC_USER_SHADER_PIPE_CONFIG」レジスタをSIMDの動的制御のために構成する。
【0041】
ある実施形態においては、「CC_GC_SHADER_PIPE_CONFIG」レジスタ及び「GC_USER_SHADER_PIPE_CONFIG」レジスタの論理和の結果の値は、新たなスレッド(作業)が割り当てられるべき有効化されたSIMDをSPIが決定する(オンザフライで)ために用いられる。ある実施形態においては、グラフィクスパイプ内の全ての他の設計ブロックは、それら自身を非アクティブなSIMD/QPのために静的に無効化するために、「CC_GC_SHADER_PIPE_CONFIG」レジスタを利用する。ある実施形態においては、そのような設計ブロックは、当該動作がシェーダパイプラインの不所望な「フリージング(freezing)」を生じさせる場合に、「GC_USER_SHADER_PIPE_CONFIG」レジスタを精査する必要はない。
【0042】
図2に示される例示的なタイミング図を参照すると、SIMDの制御は、シェーダエンジンにおけるアクティビティとは無関係に達成され得る。たとえ特定のSIMDが命令を実行するのにビジーであるとしても、実施形態は、そのSIMDのアクティブな実行期間の間そのSIMDを無効化することができる。例えば
図2を参照すると、SIMD0はそのアクティブな実行期間の間、無効化され得る。
【0043】
ある実施形態においては、本発明を限定する意図はないが、無効化された(又は非アクティブにされた)SIMDが再度有効化されるまで、SPIはその無効化されたSIMDには作業を割り当てない。無効化されたSIMDは必然的に、それにおける現在の作業又は作業シーケンサパイプにおける係属中作業の完了に際して作業スレッドを流出させる。一旦空になると、動的粒度クロックゲーティング(後で更に説明する)は、無効化されたSIMD内の論理へのクロック信号を無効化することができる。無効化されたSIMDの再有効化に際しては、SPIは、有効化されたSIMDへ新たなスレッド(作業要求)を提出することを再び開始する。SIMD制御設定は、GRBMレジスタ書き込みを介してプログラムされ、またドライバ又はSMCマイクロコードにより動的に設定され得る。
【0044】
システム設計の観点からは、SIMDはいつでも有効化又は無効化され得る(即ちオンザフライ)。電力節約の観点からは、有効化されたSIMDからSIMD無効化状態への切り換えの時間は、SIMDパイプ内に係属中の作業負荷に依存し得る。無効化されたSIMDを有効化するのに必要な時間(又はその逆)は、SPIがスレッドをそのSIMDに割り当てる準備が整ったときにGRBMレジスタに書き込むのと同じくらい速い。例としては、両方の場合に対して、必要な時間は数マイクロ秒であり得る。
【0045】
〔動作の例示的なシナリオ〕
以下は、本発明の実施形態及びSIMDの動的な制御が用いられる例示的な動作シナリオである。
【0046】
A.条件ベースの制御
SIMDの動的な制御は条件依存であり得る。そのような例示的な条件は、限定はされないが以下を含む。
【0047】
(1)温度トリップ:外部ソースがより高いプロセッサ温度を示しており、また電力消費を低減する(又は適用可能な場合に上げる)必要がある場合。
【0048】
(2)電流トリップ:外部ソースがより大きなプロセッサ電流を示しており、また電力消費を低減する(又は適用可能な場合に上げる)必要がある場合。
【0049】
(3)CAC管理:オンチップCACマネージャが処理アクティビティの増大に気付き、より多くのSIMDを有効化することによって性能を高める決定をする場合、又はオンチップCACマネージャがアクティビティの低下に気付き、性能の低下を伴うことなしに幾つかのSIMDを無効化することによって電力を低減する決定をする場合。
【0050】
B.アプリケーションベースの制御
SIMDの動的な制御はアプリケーション依存でもあり得る。そのような例示的なアプリケーションは、可変の利用(variable utilization)がエネルギーを節約することを可能にするアプリケーションを含む。例えば、アプリケーションのユーザモードで検出されるプロセッサ集約的なアプリケーション(例えば3Dグラフィクス処理)からそれほど集約的でないアプリケーション(例えばDVD再生)への変化が、実施形態に従ってSIMDの動的な制御のために用いられ得る。例えばユーザインタフェース(UI)入力メカニズム又はアプリケーションプログラミングインタフェース(API)を介してのユーザ入力又はアプリケーション入力もまた、SIMDの動的な制御を提供するために用いられてよい。これらの入力メカニズムは、処理アプリケーションに対して要求される電力レベルを設定するために用いられ得る。そのような入力メカニズムは、ソフトウエア(例えばアプリケーション又はオペレーティングシステム)、ファームウエア、ハードウエア又はこれらの種々の組み合わせを通して有効化され得る。
【0051】
C.作業負荷ベースの制御
SIMDの動的な制御は作業負荷依存であり得る。例として、SIMDの動的な制御は、以下に記載される限定されない例示的なGPU条件の1つ以上に基きトリガーされ得る。
【0052】
(1)静的スクリーン条件(無負荷)(TDPの5%未満)
【0053】
(2)アイドル条件(極めて軽い負荷)(TDPの10%未満)
【0054】
(3)中負荷条件(TDPの50%未満)
【0055】
(4)重負荷条件(TDPの90%未満)
【0059】
(5)極めて重い負荷(TDPの90%超)
【0060】
D.要求ベースの制御
SIMDの動的な制御は、要求依存であり得るし、また性能要求及び電力要求に基き得る。ドライバはGPUのTDPをモニタリングし、そして最大TDP負荷に近づくと、SIMDを無効化してTDPを低減する。SIMDのそのような無効化は、GPUの周波数及び電圧の調整を伴い又は伴わずに達成され得る。
【0061】
上述の例示的な制御条件は、ドライバ及び/又はSMU管理のSMCマイクロコードを用いて検出及び実装可能である。実施形態はまた、有効化されたSIMDの数を自己制御することに専用の制御をも可能にする。
【0062】
〔SIMDを有効化及び無効化するための例示的なレジスタ設定〕
上述の条件モード(又は他のシナリオ)のいずれにおいても、ドライバは、レジスタ「GC_USER_SHADER_PIPE_CONFIG」のビットフィールド(例えばビットフィールド[31:16])に書き込んでSIMDを無効化及び有効化することができる。
図3Aに示されるように、「0」を書き込むことはSIMDを有効化し、「1」を書き込むことはSIMDを無効化する。
【0063】
グラフィクス処理ユニットは、2つのシェーダエンジン(例えばSE0及びSE1)を含むことができる。このシナリオにおいては、実施形態は、これらのシェーダエンジンに対して異なるSIMDを有効化及び無効化することができる。このことは、
図3Bに示されるようなGRBMインデックスレジスタを用いてシェーダエンジンを別個にプログラムすることによって達成可能である。
【0065】
(1)SE0(即ちシェーダエンジン0)の「GC_USER_SHADER_PIPE_CONFIG」に書き込むためには、以下の例示的な命令が使用可能である。
mmGRBM_GFX_INDEX=0x40000000//SE0を指向
mmGC_USER_SHADER_PIPE_CONFIG=0xFF000000//無効化//SIMD8及びSIMD9
mmGRBM_GFX_INDEX=0xC0000000//GRBMインデックスを回復//レジスタを既定値に
【0066】
(2)SE1(即ちシェーダエンジン1)の「GC_USER_SHADER_PIPE_CONFIG」に書き込むためには、以下の例示的な命令が使用可能である。
mmGRBM_GFX_INDEX=0x40010000//SE1を指向
mmGC_USER_SHADER_PIPE_CONFIG=0xFC030000//SIMD1無効化且つ//SIMD0
mmGRBM_GFX_INDEX=0xC0000000//GRBMインデックスレジスタを既定値に回復
【0067】
(3)SE0及びSE1(即ちシェーダエンジン1)の両方の「GC_USER_SHADER_PIPE_CONFIG」に書き込むためには、以下の例示的な命令が使用可能である。
mmGC_USER_SHADER_PIPE_CONFIG=0xFC0C0000//SE0及びSE1の両方のSIMD3&SIMD2を無効化
【0068】
シェーダエンジン(例えばSE0,SE1等)毎に有効化されたSIMDは、作業が適用されている最中の各サブセット内の各シェーダエンジンに対して少なくとも1つのSIMDが有効化されたままである限りは、オンザフライで変化させることができる。つまり、例えば、SIMDが異なる種類の作業に対して区分化されており、即ちテセレーションシェーダ(tessellation shaders)のためにサイド毎に2つのSIMDがあり、且つ残りのSIMDが頂点作業及び画素作業で共有されている場合、テセレーションシェーダのための2つのSIMDは有効化されたままであってよく、また画素及び頂点のための残りのSIMDの1つは有効化されてよい。
【0069】
図3Cはある実施形態に従う例示的な全体動作を示すフローチャートである。
【0070】
ステップ302では、所与の処理動作に対して要求される性能レベルが決定される。例としては、そのような性能レベルは、アプリケーション、条件、作業負荷又は要求に依存し得る。
【0071】
ステップ304では、シェーダエンジンにおける異なるSIMDを有効化及び無効化するために、1つ以上のレジスタが構成される。例としては、そのような構成は、
図3Bに示されるようなGRBMインデックスレジスタを用いてシェーダエンジンを別個にプログラムすることによって達成可能である。
【0072】
ステップ306では、ステップ304で構成されたレジスタに基づき1つ以上のレジスタが有効化又は無効化される。
【0073】
以下の欄は、性能と電力節約の間でのトレードオフ決定をなす上で実施形態を支援し得る例示的なプロットを示している。
【0074】
〔電力節約対性能影響〕
SIMDが有効化されると、電力を消費する。処理アクティビティの増大に伴い、SIMDはより大きな電力を消費することになる。逆に処理アクティビティの低下に伴い、SIMDはより小さな電力を消費することになる。アイドル状態においては、SIMDは、最小ではあるがSIMDのサイズ(例えば面積、セル数等)に基く測定可能な量の電力を消費するはずである。
【0075】
図4Aのプロットは、有効化されたSIMDの数の増加に伴うコア電力の線形増加を示している。プロットは、アプリケーションがSIMD拘束であるシナリオを示している。つまり、アプリケーションは、全ての利用可能なSIMD資源を費やす電力集約的アプリケーションである。
【0076】
グラフィクス処理ユニットの性能はSIMDの数の増大に伴って高まるはずであるというのが一般的な想定である。しかし、この意見は、集約的処理タスクに対して一般的に真実であり得る。多くのシナリオにおいては、従来の手法は、軽処理負荷であっても全てのSIMDを有効化された状態に保つので、負荷条件に応じて電力を消費するであろう。
【0077】
以下の欄では、異なる種類のアプリケーションに対する例示的なワット毎SIMD性能プロットを論じる。
【0078】
(1)理想的な負荷を伴うアプリケーション
図4Bは理想的な負荷を伴うアプリケーションに対するワット毎性能プロットを示す。
図4Bに示されるように、SIMDの数が増えるのに従って、グラフィクス処理ユニットのワット毎性能は、一定のSIMD毎電力消費で線形的に高まる。
【0079】
(2)バランスされた負荷を伴うアプリケーション
図4Cはバランスされた負荷を伴うアプリケーションに対するワット毎性能プロットを示す。
図4Cに示されるように、SIMDの数が増えてもワット毎性能は維持される。
【0080】
(3)現実的な負荷を伴うアプリケーション
多くの場合、現実的なシナリオにおいては、処理負荷は、ワット毎性能特性が理想的な負荷に対する特性とバランスされた負荷に対する特性との間にあるようなものである。
図4Dに示されるように、SIMDの増加に伴い、ワット毎性能は最初は高まるが、その後飽和して一定レベルを保つか、場合によっては低下することもある。ワット毎性能が低下すると、相対的に低い性能利得でより大きな電力が消費される。このことは、それぞれ
図4E及び
図4Fに示される軽負荷及び中/重負荷プロットから判る。
【0081】
図5Aはバランシングを伴わない従来のSIMD負荷挙動を示すグラフ的な
図500である。本発明の実施形態はまた、個々のSIMD内での利用を最大化する。利用を最大化することによって、それぞれのSIMDのオーバヘッドサイクルが低減され、追加的な電力節約が結果としてもたらされる。
【0082】
従来のSQブロックが対応するSIMDへと命令を発行すると、そのSIMDに対応するビジー信号が送信されて、これは典型的には13クロックサイクル502の間続く。それら13サイクルに4サイクルの作業サイクル504が続き、次いで25サイクルのアイドル又はウォーターフォールサイクル506が続く。
図5Aは、アレイ(
図1Aのアレイ186と同様)内の全てのSIMDがアクティブにされているが、各SIMDは完全には利用されていない例を示している。この例においては、各SIMDは、
図5Aに示されるように単にアイドリングし又は部分的にウォーターフォーリングするだけで、38オーバヘッドサイクル(13+25)を浪費することになる。
【0083】
しかし、より多くの命令が各SIMDへ発行されるのに従って、オーバヘッドサイクルの割合は小さくされ、パイプライン内のより少ないバブル及びこれに伴いよりよい利用をもたらす。
図5Bは本発明の原理に従い強化された利用を示している。
【0084】
図5Bは本発明の実施形態に従うSIMD負荷挙動のグラフ的な
図508である。
図5Bはアレイ186内の2つのSIMDのみが有効化されている例を示している。しかし、
図5Bにおいては、これら2つのSIMDは、上述の
図5Aにおいて全ての利用可能なSIMDが行っていたのと同じ量の作業を行っている。
【0085】
図5Bにおいては、各SIMDの利用を最大化する負荷スキームの下で、アイドルサイクル510は13サイクルを含む。アイドルサイクル510の後に、100サイクルの作業を含む作業サイクル512が続く。作業サイクル512に続き、25サイクルの間続くアイドルサイクル514がある。
【0086】
図5Bにおいても38オーバヘッドが浪費されるが、それらは当該アレイの利用可能なSIMDの各々においてではなく、2つのSIMDにおいて浪費されるのみである。また、命令の発行はウォーターフォールサイクルを連続的に(back to back)利用して、先行する命令の実行をコンパクトにする。これら2つの要因は組み合わされて、アクティブなSIMDに対する効果的な利用サイクルを大きく改善する。従って、
図5Bの利用配置は、同じ量の作業を行い、同じレベルの性能をもたらすが、極めて小さい電力を消費する。
図5Bの例示的な実施形態に示されるように、各有効化されたSIMDの利用を最大化することにより、電力が節約される。全体性能を低下させることなしに電力節約が可能である場合には、チップ効率(即ち性能/ワット)が増大する。
【0087】
図6は本発明の実施形態に従いSIMD利用を評価するために用いられる単純化されたプログラム可能参照テーブル(programmable lookup table)600を示す図である。本発明の実施形態においては、SIMD利用レベルは、予め定められた期間にわたって各SIMDに対してSQにより発行された命令をカウントすることによって測定される。
【0088】
命令をカウントする典型的な手法を用いて、特定のSIMDの利用に対する定量的測度を推測することができる。このプロセスはアレイ186内のSIMDの各々に対して行われ、そして結果は予め定められた期間にわたって平均化される。有効化されたSIMDについて予め定められた期間にわたって平均化することにより、有効化されたSIMDの各々の総利用の公正な近似が与えられる。平均化された利用数は次いで、参照テーブル600における値と比較される。参照テーブル値に応じて、追加的なSIMDを有効化するか、又は現在アクティブなSIMDを最適な利用レベルへと無効化するかの決定がなされる。
【0089】
本発明の実施形態は、SIMDの現在の状態におけるSIMDの利用に関連しており、またSIMDの未来の状態に関する予測を含む。各SIMDは、2つの部分、即ち(a)テクスチャフェッチ関連命令及び(b)ALU関連命令に分類される多重種の命令を実行する。従って、本発明の技術を用いて、ハードウエア及びファームウエア制御器の専用の組み合わせが、各SIMD内でのALU命令及びフェッチ命令の実行をモニタリング及び測定する。
【0090】
現在の利用に対しては、ALU命令及びフェッチ命令に関連する情報は、クロック毎ベースで各SIMDにおいて動的に捕獲及び計算される。即ち、予め定められた期間にわたって、各SIMDにおいて実行されるALU命令及びフェッチ命令の数がカウントされる。この数は現在の利用/SIMDを表す。ALU命令及びフェッチ命令が各SIMDにおいてカウントされている間、ウエーブフロントのような他のアクティビティ及びパイプライン内で生じているスレッド割り当ては、未来のサイクルにおけるSIMD内での実行のためにキューされる。
【0091】
これらウエーブフロントキュー及びスレッドキューは、これらモジュールの両方とも作業負荷をバッファリングする役割を果たすので、例えばそれぞれSPIモジュール102及び/又はSQ内に存在し得る。上述したように、SPIモジュール102は、シェーダ種類に基くウエーブフロントを生成する。所与のシェーダ種類に対してSPIモジュール102は、例えば、特定のSIMDのために特定の種類のウエーブフロントが実行されるべきであることを示すことになる。多重スレッドはSQ内の各ウエーブフロントから生成される。
【0092】
上述の情報はテーブル600内のエントリと比較される。テーブル600は、まさにデルタテーブルの可能な実装の例である。このテーブル600は、例えば、利用下方限界602、利用上方限界604及びSIMD%増分(デルタ)606を含む。SIMD%増分606は、例えば正又は負であり得る(即ち減少までを示す)。テーブル600に示されるような予め定められた表集計値を用いることによって、使用可能な範囲でSIMD利用が評価及び比較される。この比較は次いで、もっと多くのSIMDを有効化する又はアクティブなSIMDの幾つかを無効にする必要性があるかどうかを決定するために用いられる。
【0093】
予測及び評価は、作業を行うのに幾つのSIMDが必要であるのかを決定するときに、未来のSIMD動作に関してもなされ得る。上述の実施形態はALU命令及びフェッチ命令に焦点を当てているが、本発明はそれらに限定されない。SIMD利用を決定するために他の種類の命令を用いることもでき、それらは例えばベクターALU(Vector ALU)、スカラーALU(Scalar ALU)、テクスチャフェッチ(Texture Fetch)、LDS及び他の命令である。
【0094】
テーブル600において、ランタイムのある点で評価期間にわたって有効化される20個のSIMD(例として)があったとすると、利用数は30%になる。この数は範囲608内にある(
図1はSE毎に13個のSIMDを有しており、また2つのSEがあるので、図示されるシステムには全部で26個のSIMDがある)。従って、制御器によってなされる動作は、「SIMD(%)増分」列に従って、有効化されたSIMDの40%を無効化することになるはずである。結果として、8つのSIMD(20個のアクティブなSIMD×40%減少)がシャットオフされることになり、コアは、実質的な性能影響なしに前述したようにより高い利用を達成するために、更なるウエーブフロントを残りの12個のSIMDへと押し込むことを余儀なくされる。制御器は、システム利用をモニタリングし続け、そして有効化されている資源を、入ってくる作業負荷に合うように正常に適合させる。上述の例では、制御器は、各有効化されたSIMDが(80〜90%)利用される範囲「4」へとシステムを収束させることになる。更に、評価期間長及びデルタテーブル値を調整することによって、制御器動作の粒度(controller action’s granularity)を変化させて現実世界での応用に適合させることができる。
【0095】
図7は本発明の実施形態に従いSIMD負荷バランシングを実装する方法700の例示的なフローチャートである。
図7においてはステップ702で初期化が始まる。ステップ702では、チップはリセットを経てALU及びフェッチの命令カウント値に従って初期化される。これは例えばRLCのスクラッチメモリレジスタ内で生じ得る。テーブル600は、(0〜100%)の利用範囲をより小さな区間へと分割し、また特定の利用区間に対してアクティブ又は非アクティブにされるべきSIMDの数を特定する。
【0096】
ステップ704では、割り込みが発生するのを待機する。内側ループ(即ち早いループ)706では、係属中のウエーブフロント及びスレッドのカウントがサンプリングされる。このことは、係属中ウエーブフロントカウントを表すSPIモジュール102内のFIFOを介して行われ、また係属中スレッドカウントを表すSQのFIFOは、SIMD未来予測データを抽出するためにサンプリングされ得る。このデータは、SIMD利用が増大又は低下する傾向を表すのかを決定するために解析され得る。予め定められた数のサンプル、例えば10サンプルが取られてパラメータ化され得る。サンプル数が予め定められた最大数に達すると、プロセスは主ループ607へと移行する。例示的な主ループ607の付加的な詳細は
図9に示されており、後で論じられる。
【0097】
図7を再び参照すると、内側ループ706及び主ループ607が終了した後、方法700は経路708に沿って割り込みステップ704へ戻る。内側ループ706の一部として、
図8のサンプリングステップ800が実行される。
【0098】
図8はFIFOサンプリングを行うための例示的な方法800のフローチャートである。FIFOサンプリング方法800は、例えば、FIFOにおけるエントリの数をサンプリングし、そして上述した傾向データマイニング(trend data mining)を行うことによって未来の傾向を決定する。この傾向データは、SIMD利用を評価するための二次的要因として用いられる。方法800においては、ステップ802でSQが読まれ、アレイ186内の各SIMDに対する係属中スレッドが示される。このデータは、先の読み808よりも大きい(ステップ804)か、又は小さい(ステップ806)か、を決定するために比較され、傾向が決定される。傾向が上昇である場合(例えばSPIM100からのデータとの比較により)には、上昇フラグがセットされてよい。小さい場合には、別のフラグ(下降)がセットされ得る。このデータは最後の読み810として記憶される。
【0099】
上述したように、トレンドは、所与の作業負荷に対して必要な最適数SIMDを決定するために用いられる1つの要因である。例えば、現在の利用はゼロであるが、予測された未来の利用が30%である場合、SIMDの90%は無効にされてよい。一方、現在の利用はゼロであるが、未来の傾向が80%の更なる作業を示している場合、性能に妥協することなく現在のSIMDの90%を無効化することはできないので、現在の利用が極めて低いとしても、SIMDは減少させられない。
【0100】
図9は
図7に示される主ループステップ607の更に詳細なフローチャートである。方法900は、他のステップからデータを収集し、このデータを用いてSIMD利用決定プロセスと共に本質的な決定を実行する。中でもステップ902においては、有効化されているSIMDの数の評価がなされる。この数は固定ではなく、例えば、ハーベスト又は縮小された構成の欠陥許容値若しくは検討された意図(harvesting or defect tolerance or deliberate intent of reduced configuration)に依存し得る。
【0101】
より具体的には、ステップ902では、シェーダエンジン114及び116の各々に対して、システムは、最適化プロセスに含まれるのに適するSIMDのベースラインを確立する。もしシェーダ種類が全てのSIMDではなくSIMDのサブセットに限定されている場合には、そのサブセットはベースラインSIMDマスクから除去され、最適化プロセス内にあるとは見なされない。
【0102】
ステップ904では、以下の例示的な動作が行われる。
0≦Δ≦63 非アクティブ化 #simds={(64−Δ)/64}×active_simds
Δ=64 何もせず #simds=0
65≦Δ≦127 アクティブ化 #simds={(Δ−64)/64}×active_simds
【0103】
ステップ904では、ベースラインデルタ最大値が、有効化又は無効化することをアルゴリズムに伝える。次いで、ALUカウントに対応するデルタ値が参照される。デルタ値は、負荷をバランスさせるためにアクティブ/非アクティブにされる必要のある現在アクティブなSIMDの数に対するSIMDの割合を表す。デルタは0〜127の値を有する。控えめにみて、より多くのSIMDをアクティブにし又は最小としてはより少ないSIMDを非アクティブにすることを促進する、より大きなデルタ値が選択され得る。
【0104】
デルタが中立スレッショルドを越えており、より多くのSIMDがアクティブにされるべきである場合、SIMDの数が計算され、そして利用可能なシェーダエンジンの間でバランスさせられる。デルタが中立スレッショルドを下回っており、より多くのSIMDが非アクティブにされるべきである場合、作業負荷傾向と係属中作業負荷キューの状態とをチェックすることによって、未来の負荷が十分なSIMDを確実に有するように、更なる(二次的な)決定がなされる。ウエーブフロントカウント及びクローズ(clause)(スレッド)カウントが例えば減少傾向又は安定傾向を示しており且つスレッショルドを下回るものとして報告されている場合には、非アクティブ化が生じ得る。いずれかが増加傾向を示しており、又はスレッショルドを越えていると報告している場合には、非アクティブ化はなされず、また次の反復がクリーンアップするために残されない。
【0105】
ステップ904におけるデルタが予め定められたスレッショルドを越えている場合には、ステップ906が実施される。ステップ906では、アクティブにされるべきSIMDの数が決定され適用される。ステップ904におけるデルタが予め定められたスレッショルドより小さい場合には、技術はステップ907へ進む。ステップ907では、前述した要因に基きSIMDの数を減少させる決定がなされ、そして必要であればステップ908で処置が取られる。ステップ908はステップ906と同様であるので、追加的な詳細は論じない。
【0106】
上述したLBPW技術は、di/dtの悪影響の低減をも支援することができる。その結果、電圧レギュレータに対する雑音マージンを改善することができ、低コストのレギュレータの使用が可能になる。電流が高速に変化すると、これを補償するために周波数が低下させられる必要がある。周波数低下は性能の低下を結果としてもたらすことになる。di/dtが減少させられると、周波数を増大することができ、結果として性能の向上がもたらされる。di/dtの減少はまた、VDDC動作の低減を可能にし、その結果、動的な電力消費を低減することができる。
【0107】
本発明の実施形態の追加的な利益は、所与の熱設計電力(TDP)プランに対するワット毎最大性能の促進である。シェーダ計算処理能力は、TDP固定により調節することができる。これを達成するための1つの例示的な手法は、バウンディングボックス(bounding box)を含む。当業者によって理解されるように、バウンディングボックスは、ビニングプロセス(binning process)の間にチップの動作条件を定義するときに用いられる技術である。例えばチップは異なる動作構成を有し得るので、異なる市場SKUがもたらされ得る。各SKUはTDPのためのバウンディングボックスを有する。市場SKUにおける異なるばらつきの全ては、異なるTDP値(SKUに対するバウンディングボックス)を有する。本発明のLBPW技術は、所与のバウンディングボックスに対して最良のワット毎性能を達成することを支援する。
【0108】
〔動作の各モードのための節約〕
図4A〜
図4Fにおけるプロットから判るように、実施形態に従う電力節約は、アプリケーション毎に変化し得る。多くのアプリケーションにおいては、例えば、実施形態は性能に妥協することなく電力を節約する。そのようなアプリケーションは、SIMD処理負荷が軽いものであり得るDVD再生アプリケーションを含む。
【0109】
単に例示的であり限定的でない例としては、「eclk=875MHz」及び「mclk=90MHz」を伴うAMDのR770プロセッサ上では、SIMD毎電力消費は、重負荷で約4.5ワットである。より軽負荷では、実施形態に従い、クロックゲーティング及び動的なSIMD制御に起因して、電力消費は低減され得る。例えば、電力をあるレベルに固定することが必要である場合、重負荷でSIMDの数を減少させることにより顕著な節約が可能になる。ある実施形態においては、アプリケーションは、グラフィクス処理ユニットにおいて有効化又は無効化されるSIMDの数を決定することもできる。
【0110】
〔動的粒度クロックゲーティング〕
上述したように、従来の手法においては、シェーダコンプレックスにおける全てのSIMDユニットのクロッキングは、同時に有効化されるか又は無効化されるかのいずれかである。多くのアプリケーションにおいて、全てのSIMDが作業を割り当てられるわけではない。しかし、従来の手法は、そのようなSIMDに対してクロック信号を能動的に供給し続ける。この手法はグラフィクス処理ユニットの電力消費を増大させ、非効率である。従来の手法はシェーダコンプレックスブロックのための静的なクロックゲーティングを含むことがあり、この場合、SPIによって要求が開始されると、シェーダコンプレックスブロックのクロックは、di/dt(即ち電流の変化の速度)回避カウント遅延を伴って、1つずつオンにされる。一旦開始されると、クロックは、シェーダコンプレックス内の多くのブロックに対する作業がない場合でも、シェーダコンプレックス全体のためにクロッキングし続ける。つまり、任意の所与の時間では、少しのSIMDのみがアクティブである。作業が一旦シェーダコンプレックスによって完了されると、クロックはdi/dt回避カウント遅延を用いて自動的にシャットオフされる。このように従来の手法においては、クロックゲーティングは本来的に静的であり、そしてシェーダコンプレックスを単一システムとして取り扱う。
【0111】
従来の手法とは対照的に、本発明の実施形態は、シェーダコンプレックスにおける個々のSIMDの動的粒度(例えば中間粒度)クロックゲーティングを達成する。使用していない論理へのクロックツリーをシャットダウンすること、及びクロックオンデマンドメカニズム(例えば真クロックオンデマンドメカニズム)を提供することによって、スイッチング電力が低減される。このようにしてクロックゲーティングが強化されて、SIMDがアイドルである(又は作業を割り当てられていない)期間に対してスイッチング電力を節約することができる。
【0112】
本発明の実施形態はまた、シェーダコンプレックスにおける各SIMDへのクロックの動的な制御を含む。各SIMDは、それ自身のクロックを管理するシェーダコンプレックスサブシステムとして取り扱われる。SIMDにおける各ブロック/タイルのための動的な制御もまた提供される。クロッキングは、実際の作業がSIMDに到着する前に始まることができ、またSIMDによって全ての作業が完了するまで有効化されたままでいることができる。
【0113】
本発明の実施形態の種々の側面がソフトウエア、ファームウエア、ハードウエア(又は例えばベリログ(Verilog)若しくはハードウエア記述言語命令等のソフトウエアによって表されるハードウエア)、又はそれらの組み合わせにおいて実装され得る。
図1Aは例示的なコンピュータシステムを示す図であり、このシステムにおいては、本発明又はその部分がコンピュータ可読コードとして実装され得る。尚、本発明の種々の実施形態のシミュレーション、合成及び/又は製造は、部分的には、一般的なプログラミング言語(C又はC++等)、例えばベリログHDL(Verilog HDL)、VHDL、アルテラHDL(Altera HDL)(AHDL)等のハードウエア記述言語(HDL)、若しくは他の利用可能なプログラミングを含むコンピュータ可読コード、及び/又は回路等キャプチュアツール(例えば回路キャプチュアツール)の使用を通して達成され得る。このコンピュータ可読コードは、半導体、磁気ディスク、光学ディスク(CDROM、DVD−ROM等)を含むあらゆる既知のコンピュータ使用可能媒体内に配置され得るし、またコンピュータ使用可能(例えば可読)な伝送媒体(例えば搬送波又はデジタル、光学的若しくはアナログベースの媒体等のあらゆる他の媒体)において具現化されるコンピュータデータ信号として処理され得る。従って、コードは、インターネットを含む通信ネットワークを介して伝送され得る。上述したシステム及び技術により達成される機能及び/又は提供される構造は、プログラムコードにおいて具現化されるコア(GPUコア等)内に表現することができ、また集積回路の生産の一部としてハードウエアに変換され得ることが理解される。
【0114】
〔結論〕
概要及び要約の欄ではなく、詳細な説明の欄が特許請求の範囲を解釈するために用いられることが意図されていると理解されるべきである。概要及び要約の欄は、発明者によって検討された本発明の1つ以上のしかし全部ではない例示的な実施形態を説明することができ、従って本発明及び添付の特許請求の範囲を限定することが意図されているわけではけっしてない。
【0115】
特定の機能の実装及びそれらの関係性を示す機能構築ブロックを補助として、本発明が上述のように説明されてきた。これらの機能構築ブロックの境界は、説明の便宜上ここでは適宜画定されてきた。特定の機能及びそれらの関係性が適切に実行される限りにおいて、代替的な境界が画定され得る。
【0116】
特定の実施形態の上述した説明は、本発明の一般的性質を十分に明らかにするであろうから、他者は、当業者における知識を適用することによって、過度の実験を必要とせず、本発明の一般的概念から逸脱することなく、そのような特定の実施形態を容易に修正し且つ/又は種々の応用に適応させることができる。従って、そのような適応及び修正は、ここに提示されている教示及び指針に基いて、開示されている実施形態と均等なものの意味及び範囲の範疇にあることが意図されている。ここでの用語等は、説明を目的としたものであって限定を目的としていないことが理解されるべきであり、本出願書類の用語等は教示及び指針の下で当業者によって解釈されるべきである。
【0117】
本発明の広さ及び範囲は、上述したいかなる例示的な実施形態によっても限定されるべきではなく、以下の特許請求の範囲及びそれらと均等なものに従ってのみ画定されるべきである。