
Keplerは、 Nvidiaが開発したGPUマイクロアーキテクチャのコードネームで、 Fermiマイクロアーキテクチャの後継として2012年4月に初めて市販されました[ 1 ] 。Keplerは、エネルギー効率に重点を置いたNvidia初のマイクロアーキテクチャでした。GeForce 600シリーズのほとんど、GeForce 700シリーズのほとんど、および一部のGeForce 800MシリーズのGPUはKeplerに基づいており、すべて28nmで製造されました。Keplerは、 Tegra K1 SoCのGPUコンポーネントであるGK20A 、Quadro Kxxxシリーズ、Quadro NVS 510、およびTeslaコンピューティングモジュールで使用されました。
Keplerの後継としてMaxwellマイクロアーキテクチャが登場し、 GeForce 700シリーズおよびGeForce 800MシリーズでMaxwellと併用されました。
この建築物は、ドイツの数学者であり、17世紀の科学革命における重要人物であるヨハネス・ケプラーにちなんで名付けられました。

Nvidiaの以前のアーキテクチャの目標は、演算とテッセレーションのパフォーマンス向上に重点を置いた設計でした。Keplerアーキテクチャでは、Nvidiaは効率、プログラマビリティ、パフォーマンスに重点を置きました。[ 2 ] [ 3 ]効率の目標は、統一されたGPUクロックの使用、命令の静的スケジューリングの簡素化、ワットあたりのパフォーマンスの重視によって達成されました。[ 4 ]以前のGPU設計にあったシェーダークロックを廃止することで、より高いレベルのパフォーマンスを達成するには追加のコアが必要になりますが、効率が向上します。これは、コアがより電力効率が良い(Nvidiaの数値によると、2つのKeplerコアは1つのFermiコアの90%の電力を使用)だけでなく、統一されたGPUクロック方式への変更により、その領域の消費電力が50%削減されるためでもあります。[ 5 ]
プログラマビリティの目標は、KeplerのHyper-Q、動的並列処理、および複数の新しいCompute Capabilities 3.x機能によって達成されました。これにより、GK GPUでより高いGPU利用率と簡素化されたコード管理が可能になり、Kepler GPUのプログラミングの柔軟性が向上しました。[ 6 ]
最後に、パフォーマンス目標として、追加の実行リソース(より多くのCUDAコア、レジスタ、キャッシュ)と、Keplerが7GHzのメモリクロック速度を達成できる能力により、Keplerのパフォーマンスは以前のNvidia GPUと比較して向上しています。[ 5 ] [ 7 ]
GKシリーズGPUは、旧世代のFermiと新世代のKeplerの両方の機能を備えています。Keplerベースの製品には、以下の標準機能が追加されています。

KeplerはSMXと呼ばれる新しいストリーミングマルチプロセッサアーキテクチャを採用しています。CUDA実行コア数は、16個のSMあたり32個から8個のSMXあたり192個に増加しました。レジスタファイルはSMXあたり65,536 x 32ビットに倍増しただけで、全体的な比率は低くなっています。これと他の妥協により、CUDAコアとクロックの増加(Fermi 580と比較して680)が全体で3倍になったにもかかわらず、ほとんどの演算における実際のパフォーマンス向上は3倍をはるかに下回りました。以前のように2つのFP32コアを1つのユニットとして扱うのではなく、専用のFP64 CUDAコアが使用され、コンシューマーモデルにはごく少数しか含まれていないため、FP32と比較してFP64の計算速度は1/24となっています。[ 9 ]
HPC モデルである GK110/210 では、製品に応じて SMX の数が 13~15 に増加し、FP64 コアがさらに追加されて、演算比率が 1/3 FP32 にまで引き上げられました。GK110 では、スレッドごとのレジスタ制限が fermi の 4 倍の 255 になりましたが、それでもレジスタの半分を使用するスレッドは、各 SMX の 1/4 までしか並列化できません。GK210 (同時にリリース) では、レジスタ制限が 512 に増加し、このようなレジスタ負荷の高い状況でのパフォーマンスが向上しました。以前の世代ではプログラマが読み取り専用バッファとして演算に使用していたテクスチャ キャッシュは、サイズが拡大され、この方法を使用した場合のスループットが高速化されるようにデータ パスが最適化されました。レジスタ ファイルを含むすべてのレベルのメモリもシングル ビット ECC です。
もう1つの注目すべき特徴は、Fermi GPUは一度に1つのCPUスレッドしかアクセスできなかったのに対し、HPC Kepler GPUはマルチスレッドをサポートし、コア数の多いプロセッサが32の接続を開いて計算能力をより容易に飽和させることができた点である。[ 10 ]
データハザードの防止を処理する複雑なハードウェアブロックを削除することで、さらにダイスペースの削減と電力消費の削減が実現しました。[ 3 ] [ 5 ] [ 11 ] [ 12 ]
GPU Boost は、CPU のターボブーストにほぼ相当する新機能です。GPU は常に「ベースクロック」と呼ばれる最低クロック速度で動作することが保証されています。このクロック速度は、最大負荷時でもGPU がTDP仕様内に収まるように設定されています。 [ 3 ]ただし、負荷が低い場合は、TDP を超えずにクロック速度を上げることができます。このような場合、GPU Boost は、GPU がデフォルトで 170W (680 カードの場合) の事前定義された電力ターゲットに達するまで、クロック速度を段階的に徐々に上げていきます。[ 5 ]このアプローチを採用することで、GPU はクロックを動的に上げ下げし、TDP 仕様内に収まりながら可能な限り最大の速度を提供します。
電力ターゲットとGPUが取るクロック増加ステップのサイズは、どちらもサードパーティ製ユーティリティで調整可能であり、Keplerベースのカードをオーバークロックする手段を提供する。[ 3 ]
GeForce 600 シリーズの Nvidia Fermi および Kepler GPU は Direct3D 11.0 仕様をサポートしています。Nvidia は当初、Kepler アーキテクチャはDirect3D 11.1 パスを含む DirectX 11.1 を完全にサポートしていると述べていました。[ 13 ]ただし、次の「モダン UI」 Direct3D 11.1 機能はサポートされていません。[ 14 ] [ 15 ]
Microsoft の定義によれば、Direct3D 機能レベル11_1 が完全である必要があり、そうでない場合は Direct3D 11.1 パスを実行できません。[ 16 ] Kepler アーキテクチャの統合 Direct3D 機能は、GeForce 400 シリーズの Fermi アーキテクチャのものと同じです。[ 15 ]
Nvidia Kepler GPUのGeForce 600/700シリーズはDirect3D 12機能レベル11_0をサポートしています。[ 17 ]
Kepler GPU専用のTXAAは、ゲームエンジンに直接実装できるように設計されたNvidiaの新しいアンチエイリアシング手法です。TXAAはMSAA技術とカスタム解決フィルタに基づいています。これは、ゲームにおけるちらつきや時間的エイリアシングとして知られる主要な問題に対処するように設計されています。TXAAは、動いているシーンを滑らかにすることでこれを解決し、ゲーム内のシーンからエイリアシングやちらつきを完全に除去します。[ 3 ]
GK110 では、パフォーマンスをさらに向上させるために少数の命令が追加されました。新しいシャッフル命令により、ワープ内のスレッド間でデータを共有できるようになり、以前はローカルメモリへの 2 回のアクセスが必要だった通常のストアおよびロード操作を 1 つの命令で完了できるため、ローカルデータストレージを使用する場合よりも処理が約 6% 高速化されます。アトミック操作も改善され、一部の命令の速度が 9 倍向上し、min、max、and、or、xor などの 64 ビットのアトミック操作が追加されました。[ 11 ]
Hyper-Q は、GK110 ハードウェアのワーク キューを 1 から 32 に拡張します。これは、ワーク キューが 1 つしかない場合、すべての SM を埋めるのに十分なワークがキューにないため、Fermi が時々過少稼働状態になる可能性があることを意味します。32 個のワーク キューを持つことで、GK110 は、アイドル状態になる SMX にさまざまなタスク ストリームを配置できるため、多くのシナリオでより高い利用率を実現できます。Hyper-Q のシンプルさは、HPC でよく使用される一般的なメッセージ パッシング インターフェースである MPI に簡単にマッピングできるという事実によってさらに強化されます。元々マルチ CPU システム用に設計され、誤った依存関係によってボトルネックになっていた従来の MPI ベースのアルゴリズムに、解決策ができました。MPI ジョブの数を増やすことで、コード自体を変更することなく、これらのアルゴリズムで Hyper-Q を利用して効率を向上させることができます。[ 11 ]
動的並列処理機能とは、カーネルが他のカーネルをディスパッチできるようにする機能です。Fermiでは、CPUのみがカーネルをディスパッチできたため、CPUに通信を戻す必要があり、一定のオーバーヘッドが発生しました。GK110では、カーネルが自身の子カーネルをディスパッチできるようにすることで、CPUに問い合わせる必要がなくなり時間を節約できるだけでなく、CPUを他のタスクに解放することもできます。[ 11 ]
動的並列処理を有効にするには、新しいグリッド管理およびディスパッチ制御システムが必要です。新しいグリッド管理ユニット(GMU)は、実行するグリッドを管理し、優先順位を付けます。GMUは、新しいグリッドのディスパッチを一時停止し、実行準備が整うまで保留中および中断中のグリッドをキューに格納できるため、動的並列処理などの強力なランタイムを有効にするための柔軟性が提供されます。KeplerのCUDAワークディストリビュータは、ディスパッチ準備が整ったグリッドを保持し、32個のアクティブなグリッドをディスパッチできます。これは、Fermi CWDの容量の2倍です。Kepler CWDは双方向リンクを介してGMUと通信し、GMUが新しいグリッドのディスパッチを一時停止し、必要になるまで保留中および中断中のグリッドを保持できるようにします。GMUはまた、Kepler SMXユニットに直接接続されており、動的並列処理によってGPU上で追加の作業を開始するグリッドが、優先順位付けとディスパッチのために新しい作業をGMUに送信できるようにします。追加のワークロードをディスパッチしたカーネルが一時停止した場合、GMU は依存する作業が完了するまでそれを非アクティブ状態に保ちます。[ 12 ]
Nvidia GPUDirect は、単一のコンピュータ内の GPU、またはネットワークを介して配置された異なるサーバーの GPU が、CPU/システム メモリにアクセスすることなくデータを直接交換できるようにする機能です。GPUDirect の RDMA 機能により、SSD、NIC、IB アダプタなどのサードパーティ デバイスが同じシステム内の複数の GPU のメモリに直接アクセスできるようになり、GPU メモリとの間で MPI の送受信メッセージのレイテンシが大幅に削減されます。[ 18 ]また、システム メモリ帯域幅の要求が軽減され、GPU DMA エンジンが他の CUDA タスクで使用できるようになります。Kepler GK110 ダイは、ピアツーピアやビデオ用 GPUDirect など、他の GPUDirect 機能もサポートしています。
NVENCは、Nvidiaの電力効率に優れた固定機能エンコードであり、コーデックを受け取り、H.264ベースのコンテンツをデコード、前処理、エンコードすることができます。NVENC仕様の入力フォーマットはH.264出力に限定されています。しかし、NVENCは、その限定されたフォーマットを通して、最大4096x4096のエンコードをサポートできます。[ 19 ]
IntelのQuickSyncと同様に、NVENCは現在独自のAPIを通じて公開されていますが、NvidiaはCUDAを通じてNVENCの使用を提供する計画があります。[ 19 ]
Kepler GPUの理論上の単精度演算能力(GFLOPS)は、2(1サイクルあたりのCUDAコアあたりのFMA命令あたりの演算回数)×CUDAコア数×コアクロック速度(GHz)として計算されます。なお、前世代のFermiと同様に、KeplerはTeslaのようにMAD+MULを二重発行することで処理能力を向上させることはできません。
Kepler GK110/210 GPU の理論上の倍精度演算能力は、単精度演算能力の 1/3 です。ただし、この倍精度演算能力は、プロフェッショナル向けのQuadro、Tesla、およびハイエンドの Titan ブランドのGeForceカードでのみ利用可能であり、コンシューマー向け GeForce カードのドライバでは、パフォーマンスが単精度演算能力の 1/24 に制限されています。[ 20 ]パフォーマンスの低い GK10x ダイも同様に、単精度演算能力の 1/24 に制限されています。[ 21 ]
ケプラー
ケプラー2.0
カードのドライバは、GK110のFP64ユニットをGPUのクロックレートの1/8で意図的に動作させている。これを単精度と倍精度のCUDAコアの3:1の比率で乗算すると、1/24のレートになる。