勉強してわかったこと教えて下さい:
メモ
CUDA
- すごくはやい
- MBA late 2010のGeforce 320MですらULV C2Dよりずっとはやい。
- 多粒子系などデータセットが大きいときよいと思います。
- ただ、メモリ参照がコンフリクトすると待たされるらしい。相互作用が複雑なときは注意したほうがよいかも。まあそこまでは気にならないですが。
- thread(3次元)とblock(2次元)という単位で実行
- GPUには複数のプロセッサがあり、それぞれのプロセッサが複数スレッドを実行する
- なるべく複数プロセッサで複数スレッドを実行させたほうがよい
- 多次元配列は扱えない。1次元でなくてはいけない。
- #define GET_SUFFIX(i, j, n) ( (i) * (n) + (j) ) みたいなことをすればよい。
- メモリアクセスは遅め。
- なるべくCPU-GPU間のコピーは少ないほうがよさそう。
- GPU中でのメモリ参照も少なくすべき
- shared memoryというのを使うと速くなるらしい、が未検証
使用上の注意
- vimだと勝手にハイライトしてくれた。
- コンパイラはnvcc。普通のC++ compiler
- ただよほど変なことをするとおかしくなるらしいのでso/dylibにして呼ぶのがよいのかも。
- doubleは基本使わない。
- 浮動小数リテラルは「0.0f」みたくしないとワーニングがでる。うざい。
- CUT_DEVICE_INITマクロは呼ばなくていい。EXITも多分呼ばなくていい。cudaFreeはきちんと呼びましょう
二次元の波動をつくってみた
- 一次元は軽すぎてprocessingでも余裕だったので…。
- CPUだと重くて無理
- CUDAでdylibをつくりopenframeworksで呼ぶ。
- JNI経由でprocessing使おうとしたらなんか重かったのでやめた
.
最終更新:2011年12月19日 17:16