• The added line is THIS COLOR.
  • The deleted line is THIS COLOR.
  • Go to 2012-06-02/6.

(発表6回) NVIDIA GPU のメモリモデルと仲良くなる。 @fjnli

Fortran から cuda に落とすツールがある?
どれ? CUDA, OpenCL, DirectCompute,GLSL
--
- NVIDIA CPU のみ対象
  CUDA 対象。

Motivation

CUDAはプログラマが明治的にメモリを操作する必要がある。
約束事が多い。CPU の様に組むと遅くなる。

- Fermi アーキテクチャ。汎用計算フレンドリ。2009年末に導入
- Kepler 2012/05 GeForce GTX680 これから主力
 更に汎用計算重視。ベンチマーク取ったけど、あまり速くなかった。
  CudaToolkit5 からが本番?

------
Geforce と Tesla
  - 単精度でよく歩留まり気にしなければ Geforce 。安いし速い事が多い。
   - ECC 12.5%のloss
-----

Global Memory 
  - いわゆる VRAM
  - ホストから読み書き出来るこはここだけ

- L1cache
coalesce の衰退。
 - とはいえいたずらにアクセスすると global との帯域使い過ぎて性能落ちる。
 - アラインメントが取れない場合に、以前は shared メモリにもってきて処理してた。

- CUDA C Programming Guide 5.0
  
- レジスタ
ーコンパイラが割り当てる。意識しなくても動く。
- すべての計算命令はレジスタ間で行われる。(ロードストア以外は)

volatile でレジスタへの cache はさけられるけど、最適化も消えるので嫌。

シェアドメモリは全スレッドから使える(レジスタはスレッドローカル)
スレッド間のデータ交換に使える。(配列の総和を求めるとか)
ソフトウェアキャッシュ(勝手に追い出されない、ヒット率100%)

*Shared めもり [#g02cca22]
- Bank Conflict (性能の低下)
  - 条件は緩和される方向に。頻繁にかわる。
  - Fermi => Kepler で緩和. GT200 => Fermi も。

- Occupancy スレッド割当率

- Fermi では 1024 使いたいけど性能落ちた。SM 毎のスレッドが少ないので。
  Kepler ではSM毎のスレッドが2000位なので、Occupancy 落ちない。

nvcc -ptxas-options=v でレジスタの使用量が分かる。

Occypancy 計算面倒 > Compute Profiler 使いましょう。

低い Occypancy でも十分な性能が出る場合も多い。

Constant Memory
- カーネル引数は Constant Memory 渡し。
  - Fermi以前は1 Shared Memory 渡しだった。
   地味に改善されてる。

1-----
- Texture Memory
  - Texture Unit の提供する機能を使える
GPGPU 的には独自のキャッシュがある。L1 と別に欲しい時に性能が上げられる。事がある。

clock() 取ると、ストールで数10clock 消費されて重たい
clock を shift してる。(read => write でストールする)
Kepler では解決されてる、

Fermi 時代はホットクロックで、CUDA Core は周りの2倍で動いてた。
ので、シフトしてたのでは。

Kepler ではやめたので。このシフトが無い。

性能測定時のノイズが減るかも。(Kepler あまり使ってないので、要出典)




Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes