4月初旬、新しい主要なインデックスコンピューティング機能3.0を備えたnVidiaからの新しいビデオカードの発表を見ました。 仕様を慎重に検討したところ、驚いたことに、分岐が最悪の結果、つまりパフォーマンスの大きな損失につながると思われました。 バージョンごとにブランチの役割はますます小さくなり、ケプラーはこの点で一歩後退したように思えました。 私の脳では、これがほとんど不可能であることに気づき、少し待つことにしました。
そして今週、新しいケプラーアーキテクチャグラインダーに関するホワイトペーパーを入手し、多くのことを明らかにしました。
始まり
最初は、この記事は対象者のみを対象に考案されましたが、念のため、CUDAの計算機能について説明します。
そのため、nVidiaは5年間、一般的なコンピューティング用のグラフィックスカードを開発しています。 それ以前はGPUを頼りにすることは不可能であったとは言わないが、それをすることは普通の人にとって非常に不快だった。 2007年に、ビデオカードに基づくコンピューティングデバイス(CUDA)のユニバーサルアーキテクチャが提案されました。 これにより、アーキテクチャの主な機能を維持しながら、デバイスの能力を大幅に向上させることができました。 つまり、プロセッサの数とメモリの量は絶えず増加していますが、共有/グローバル/テクスチャとレジスタへのメモリの分割は古代から保存されています(SS 2.0では表面といくつかのキャッシュも登場しましたが、これは別の歌です)。
ただし、何も静止しておらず、アーキテクチャとコマンドセットは時間とともに変化します。 ここでは、同じアーキテクチャのGPUファミリを表示するために、Compute Capability(CC)のバージョンが定義されました。 たとえば、CC 1.0のデバイスは一般にアトミック操作を行うことができませんでした。CC1.1ではグローバルメモリに、CC 1.2ではグローバルと共有の両方にできました。 従来、さまざまなSSの機能の完全なリストは、CUDA Cプログラミングガイドの最後に記載されています。
ケプラーは何をもたらしますか?
まず、巨大な新しいマルチプロセッサ。 以前のマルチプロセッサに8(CC 1.x)、32(CC 2.0)または48(CC 2.1)ストリームプロセッサがあった場合、Keplerは192プロセッサに新しいチップを使用します。 他の特徴も印象的です:
FERMI GF100 | FERMI GF104 | ケプラーGK104 | ケプラーGK110 | |
---|---|---|---|---|
CCバージョン | 2.0 | 2.1 | 3.0 | 3.5 |
Warp'eのストリーム | 32 | 32 | 32 | 32 |
マルチプロセッサごとのワープの数 | 48 | 48 | 64 | 64 |
マルチプロセッサへのスレッド | 1536 | 1536 | 2048 | 2048 |
マルチプロセッサブロック | 8 | 8 | 16 | 16 |
マルチプロセッサあたり32ビットレジスタ | 32768 | 32768 | 65536 | 65536 |
レジスタ/ストリームの最大数 | 63 | 63 | 63 | 255 |
共有メモリ構成 | 16K
48K | 16K
48K | 16K
32K 48K | 16K
32K 48K |
X軸の最大グリッドサイズ | 2 ^ 16-1 | 2 ^ 16-1 | 2 ^ 16-1 | 2 ^ 32-1 |
ハイパー‐ Q | いや | いや | いや | あります |
動的並行性 | いや | いや | いや | あります |
このプレートからどのような結論を引き出すことができますか? ワープのサイズは同じままで、これは賑やかです。 私が恐れていた主なことは、ワープのサイズの増加でした。これは、分岐中の不必要なダウンタイムにつながります。 しかし、すべてがバラ色ではありません。 ここで、レジスタにさらに注意を払う必要があります-SMXの負荷を最大化するには(同時にロードされるブロック/スレッドの数によって)使用する必要はさらに少なくなります...保管するよりも、今ではそれほど単純ではありません。 したがって、最適化パスにもう1つの分岐があります。計算結果をストリームに保存できますが、SMXに収まるブロックが少なくなり、RAMの読み取り/書き込みのダウンタイムが発生する可能性が非常に高くなります。
その倍精度の計算と特別な処理に気付くことさえあります。 関数(sin、cosなど)がより高速に実行されるようになりました。
2番目の注目すべき革新は、新しいWarp Schedulerです。 各マルチプロセッサには4つのスケジューラがあり、それぞれがサイクルごとに2つのワープ命令を実行できます。 要するに、面白い小さなことです。 ブランチワープ内に最大2つのパスがあることを確認してください)
さらに理解できないもの:
動的並列処理 -ようやくそれがどのように機能するのか理解できませんでしたが、スレッドは新しいグリッドを起動できるようです...どうなるか見てみましょう。 すぐにI / Oのみがホストになり、カーネルの管理機能があるため、他のすべてをGPUで起動できるようになります。
GPUDirect-ホストなしで、あるGPUから別のGPUにデータを直接取得して転送できるようになりました。 そして、ネットワーク経由でも。 見るまで信じられません かっこいいですね。
あらゆる種類の素敵なこと:
- シャッフル命令 -ブロック内のスレッド間でデータを交換する新しい方法。 個別の共有メモリを選択してアクセスを制御するのが面倒な場合は、ローカル変数を取得して、ストリームからストリームへとジャグリングします。
- 倍精度の原子操作 。 さて、カップルを追加しました。 主なもの-彼らは最大9倍の加速を約束します!
- 新しい読み取り専用データキャッシュ。 L1およびL2データキャッシュがFermiに登場し、ケプラーではデータを読み取り専用としてマークできます(
)コンパイラがこの新しいキャッシュにそれらを詰め込むようにします。 その前に、このためにデータをテクスチャに詰めました。 えーconst __restrict
- L2キャッシュの改善。 第一に、それは2倍大きくなり、第二に、それへのアクセスは2倍高速になりました。
- Hyper-Q、グリッド管理ユニット -Fermiは、複数のタスクを一度に実行できるようになりました。 しかし、これら2つのテクノロジーを使用すると、これを正しく行うことができますが、ハードウェアレベルで機能し、GPUのより完全なロードからのみこれに気付くでしょう。
そして最後に、非常にクール-nVidiaは数人のエンジニアの魂をエネルギーの神々に売りました。そして今、GTX 680はW / FLOPSの計算から、同様のフェルミよりも少ない量を食べることを約束します。 まあ、それはクールだよね? 少なくとも古い280ストーブは捨ててください。 そして、彼らは130度まで加熱され、彼らのために予備の1.5 kWを割り当てる必要がありました。
おわりに
要するに、私はあなたのことを知りませんが、新しいケプラーを待つのを楽しみにしています! GPU SS 3.5で2台のコンピューターにアクセスできるかどうかはわかりません。GPUDirectを感じることができます。 誰かがそれを持っている場合-私はそれに触れさせて、大丈夫?