Top > 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 あまり使ってないので、要出典) |