| 発売日 | 2010年4月 |
|---|---|
| 製造元 | TSMC |
| デザイン: | エヌビディア |
| 製造プロセス | 40 nmと28 nm [要出典] |
| 歴史 | |
| 前任者 | テスラ |
| 後継 | ケプラー |
| サポート状況 | |
| サポートされていません | |

Fermi は、 NVIDIAが開発したグラフィックス プロセッシング ユニット(GPU)マイクロアーキテクチャのコードネームであり、 Teslaマイクロアーキテクチャの後継として 2010 年 4 月に初めて市販されました。GeForce 400 シリーズおよび500 シリーズで使用された主要なマイクロアーキテクチャです。デスクトップ Fermi GPU はすべて 40nm で製造され、モバイル Fermi GPU は 40nm と28nmで製造されました[要出典]。Fermi は、Microsoft のレンダリング API Direct3D 12 機能レベル 11 をサポートする NVIDIA の最も古いマイクロアーキテクチャです。
Fermi の後継としてKeplerが登場し、 GeForce 600 シリーズ、GeForce 700 シリーズ、GeForce 800 シリーズで Kepler と並んで使用され、最後の 2 つはモバイルGPU でのみ使用されました。
ワークステーション市場では、Fermi はQuadro x000 シリーズ、Quadro NVS モデル、およびNvidia Teslaコンピューティング モジュールで使用されています。
この建築物はイタリアの物理学者エンリコ・フェルミにちなんで名付けられました。
概要
[編集]

図の表記: オレンジ - スケジューリングとディスパッチ、緑 - 実行、水色 - レジスタとキャッシュ。

Fermi グラフィック プロセッシング ユニット ( GPU ) には 30 億個のトランジスタが搭載されており、その回路図が図 1 に示されています。
- ストリーミング マルチプロセッサ (SM): 32 個のCUDAコアで構成されます (ストリーミング マルチプロセッサと CUDA コアのセクションを参照)。
- GigaThread グローバル スケジューラ: スレッド ブロックを SM スレッド スケジューラに配布し、実行中にスレッド間のコンテキスト切り替えを管理します (「ワープ スケジューリング」セクションを参照)。
- ホスト インターフェイス: PCI-Express v2 バス (ピーク転送速度 8 GB/秒) を介して GPU を CPU に接続します。
- DRAM: 64 ビット アドレス指定機能により、最大 6 GB の GDDR5 DRAM メモリをサポートします (メモリ アーキテクチャ セクションを参照)。
- クロック周波数: 1.5 GHz (Nvidia からはリリースされていませんが、Insight 64 による推定値)。
- ピークパフォーマンス: 1.5 TFlops。
- グローバル メモリ クロック: 2 GHz。
- DRAM帯域幅: 192 GB/s。
- H.264 FHD デコードのサポート。
ストリーミングマルチプロセッサ
[編集]各 SM には、32 個の単精度 CUDA コア、16 個のロード/ストア ユニット、4 つの特殊関数ユニット (SFU)、64 KB ブロックの高速オンチップ メモリ (L1+共有メモリのサブセクションを参照)、および L2 キャッシュへのインターフェイス (L2 キャッシュのサブセクションを参照) が搭載されています。
ロード/ストアユニット
[編集]1クロックあたり16スレッドのソースアドレスと宛先アドレスを計算できます。キャッシュまたはDRAMとの間でデータのロードとストアが可能です。
特殊機能ユニット(SFU)
[編集]正弦、余弦、逆数、平方根などの超越関数命令を実行します。各SFUは、スレッドごとに1クロックあたり1命令を実行します。ワープは8クロックにわたって実行されます。SFUパイプラインはディスパッチユニットから分離されているため、SFUが占有されている間もディスパッチユニットは他の実行ユニットに命令を発行できます。
CUDAコア
[編集]整数算術論理ユニット(ALU)
[編集]標準プログラミング言語の要件に準拠し、すべての命令で完全な 32 ビット精度をサポートします。[ which? ]また、ワークステーションおよびサーバー モデルで 64 ビットを効率的にサポートするように最適化されていますが、コンシューマー バージョンでは人工的に機能が制限されています。
浮動小数点ユニット(FPU)
[編集]新しいIEEE 754-2008浮動小数点規格を実装し、単精度および倍精度演算の両方にFMA( Fused Multiply-Add)命令を提供します。1クロックあたり、SMあたり最大16回の倍精度FMA演算を実行できます。[ 1 ]
融合乗算加算
[編集]融合積和演算(FMA)は、乗算と加算(例:A*B+C)を1回の最終丸め処理で実行します。加算の精度は損なわれません。FMAは、演算を個別に実行するよりも正確です。
ワープスケジューリング
[編集]Fermi アーキテクチャは、2 レベルの分散スレッドスケジューラを使用します。
各 SM は、図 1 の回路図に示されている 4 つの緑色の実行列のうち任意の 2 つを消費する命令を発行できます。たとえば、SM は、最初の 16 列のコアからの 16 の操作と 2 番目の 16 列のコアからの 16 の操作を組み合わせたり、ロード/ストア ユニットからの 16 の操作と SFU からの 4 つの操作を組み合わせたり、プログラムで指定されるその他の組み合わせを行ったりできます。
64 ビット浮動小数点演算では最初の 2 つの実行列の両方が必要なので、32 ビット演算の半分の速度で実行されます。
デュアルワープスケジューラ
[編集]SMレベルでは、各ワープ・スケジューラは32スレッドのワープを実行ユニットに分配します。各SMは2つのワープ・スケジューラと2つの命令ディスパッチ・ユニットを備えており、2つのワープを同時に発行・実行できます。デュアル・ワープ・スケジューラは2つのワープを選択し、各ワープから1つの命令を16個のコア、16個のロード/ストア・ユニット、または4個のSFUに発行します。ほとんどの命令はデュアル発行が可能で、整数命令2個、浮動小数点命令2個、または整数命令、浮動小数点命令、ロード/ストア命令、SFU命令の組み合わせを同時に発行できます。倍精度命令は、他の演算とのデュアル・ディスパッチをサポートしていません。[要出典]
パフォーマンス
[編集]Fermi GPUの理論的な単精度演算能力( GFLOPS)は、2(CUDAコア1個あたりFMA命令1回あたりの演算数、サイクルあたり)×CUDAコア数×シェーダクロック速度(GHz)で計算されます。前世代のTeslaは、 CUDAコアとSFUにMAD+MULを並列にデュアル発行できましたが、FermiではSM1個あたりサイクルあたり32命令しか発行できず、32個のCUDAコアのみを最大限に活用できるため、この機能は失われました。[ 2 ]したがって、SFUを活用してCUDAコア1個あたりサイクルあたり2演算以上を達成することはできません。
Fermi GPUの理論上の倍精度処理能力は、GF100/110の単精度性能の1/2です。しかし、実際にはこの倍精度処理能力はプロ仕様のQuadroとTeslaカードでのみ利用可能であり、コンシューマー向けGeForceカードでは1/8に制限されています。[ 3 ]
メモリ
[編集]SM ごとの L1 キャッシュと、すべての操作 (ロード、保存、テクスチャ) を処理する統合 L2 キャッシュ。
レジスター
[編集]各SMには32Kの32ビットレジスタがあります。各スレッドは自身のレジスタにアクセスでき、他のスレッドのレジスタにはアクセスできません。CUDAカーネルで使用できるレジスタの最大数は63です。スレッド数の増加に伴い、ワークロード(およびリソース要件)が増加すると、使用可能なレジスタの数は63から21へと徐々に減少します。レジスタの帯域幅は約8,000GB/秒と非常に高い帯域幅を備えています。
L1+共有メモリ
[編集]オンチップメモリ。個々のスレッドのデータをキャッシュするため(レジスタスピル/L1キャッシュ)、および/または複数のスレッド間でデータを共有するために使用できます(共有メモリ)。この64KBのメモリは、48KBの共有メモリと16KBのL1キャッシュ、または16KBの共有メモリと48KBのL1キャッシュとして構成できます。共有メモリにより、同じスレッドブロック内のスレッドが連携できるようになり、オンチップデータの広範な再利用が促進され、オフチップトラフィックが大幅に削減されます。共有メモリは、同じスレッドブロック内のスレッドからアクセスできます。中程度の量のデータ(一連の計算の中間結果、行列演算の1行または1列のデータ、ビデオの1ラインなど)に対して、低レイテンシ(10~20サイクル)のアクセスと非常に高い帯域幅(1,600GB/秒)を提供します。David Pattersonは、この共有メモリはローカルスクラッチパッドの考え方を利用していると述べています[ 4 ]
ローカルメモリ
[編集]ローカルメモリとは、「スピルされた」レジスタを保持するためのメモリ位置を指します。レジスタのスピルは、スレッドブロックがSMで利用可能なレジスタ領域よりも多くのレジスタ領域を必要とする場合に発生します。ローカルメモリは、一部の自動変数(デバイスコード内で__device__、__shared__、または__constant__修飾子を使用せずに宣言されている変数)にのみ使用されます。通常、自動変数は、以下の例外を除き、レジスタに格納されます。(1) コンパイラが定数インデックスであると判断できない配列。(2) レジスタ領域を過度に消費する大きな構造体または配列。カーネルがSMで利用可能なレジスタ領域よりも多くのレジスタを使用する場合に、コンパイラがローカルメモリへのスピルを決定した変数。
L2キャッシュ
[編集]768KBの統合L2キャッシュは16個のSM間で共有され、CPUホストとの間のコピーやテクスチャリクエストを含む、グローバルメモリへのロードとストアのすべてを処理し、処理します。L2キャッシュサブシステムは、スレッドブロック間、さらにはカーネル間で共有する必要があるデータへのアクセスを管理するために使用されるアトミック操作も実装しています。
グローバルメモリ
[編集]グローバルメモリ(VRAM)は、すべてのスレッドから直接アクセスできるだけでなく、PCIeバスを介してホストシステムからもアクセスできます。レイテンシは400~800サイクルと高くなっています。[要出典]
ビデオの解凍/圧縮
[編集]Nvidia NVDEC (旧称 NVCUVID) およびNvidia PureVideo を参照してください。
Nvidia NVENCテクノロジーはまだ利用できませんでしたが、後継のKeplerで導入されました。
フェルミチップ
[編集]- GF100
- GF104
- GF106
- GF108
- GF110
- GF114
- GF116
- GF117
- GF119
参照
[編集]参考文献
[編集]- ^ 「NVIDIAの次世代CUDAコンピューティングアーキテクチャ:Fermi」 (PDF) 2009年。 2015年12月7日閲覧。
- ^ Glaskowsky, Peter N. (2009年9月). 「NVIDIAのFermi:初の完全なGPUコンピューティングアーキテクチャ」(PDF) . p. 22. 2015年12月6日閲覧.
Fermi SM内の4つの実行ブロックのうち2つに、1つまたは2つのワープから合計32個の命令をサイクルごとにディスパッチできます。
- ^ ライアン・スミス(2010年3月26日)「NVIDIAのGeForce GTX 480とGTX 470:6ヶ月遅れ、待つ価値はあったか?」 AnandTech 、 6ページ。2010年4月2日時点のオリジナルからアーカイブ。 2015年12月6日閲覧。GTX
400シリーズのFP64性能は、FP32性能の1/8(12.5%)に制限されている。これは、ハードウェアがネイティブにFP32性能の1/2(50%)を実現できるのとは対照的である。
- ^ Patterson, David (2009年9月30日). 「NVIDIA Fermiアーキテクチャにおけるトップ10のイノベーションと、今後のトップ3の課題」(PDF) . Parallel Computing Research Laboratory & NVIDIA . 2013年10月3日閲覧.
一般的な
[編集]- N. Brookwood、「NVIDIA が GPU コンピューティング パズルを解決」
- PN Glaskowsky、「NVIDIA の Fermi: 最初の完全な GPU コンピューティング アーキテクチャ」
- N. Whitehead、A. Fit-Florea、「精度とパフォーマンス: NVIDIA GPU の浮動小数点と IEEE 754 準拠」、2011 年。
- Oberman, SF; Siu, MY (2005). 「高性能・面積効率に優れた多機能補間器」.第17回IEEEコンピュータ算術シンポジウム (ARITH'05) . pp. 272– 279. doi : 10.1109/arith.2005.7 . ISBN 0-7695-2366-8. S2CID 14975421 .
- R. Farber、「CUDA アプリケーションの設計と開発」、Morgan Kaufmann、2011 年。
- NVIDIA アプリケーション ノート「Fermi 向け CUDA アプリケーションのチューニング」。
外部リンク
[編集]- Orange Owl Solutions の NVIDIA Fermi アーキテクチャ ( Wayback Machineで 2022 年 1 月 4 日にアーカイブ)