CUDA日記3

シェアードメモリはL1キャッシュに相当するらしい。グローバルメモリはキャッシュされないので必要があれば自分で明示的にキャッシュする。グローバルメモリから読めと指示するのは4クロックで済むが、実際にデータが送られてくるまでに400〜600クロックのレイテンシがある。その間十分な個数の独立な処理があればそっちをやれるのでレイテンシを隠すことが出来る。

今日の1つ目のエントリーで書いた、CPUと違って分岐をすると両方の時間がかかるという話、cuda programming guideにちゃんと書いてあった。

clock関数が返してくる値の単位って「the value of a per-multiprocessor counter that is incremented every clock cycle」なんだな。で、コアクロック600MHz、シェーダクロック1500MHzのいったいどっちのクロックなんだろう?シェーダクロックという理解で正しいんだろうか。

だとすると最中限の最終ターンの読み切りは12000クロック程度なので最終ラウンド全体だと1.3秒か。今14個あるブロックのうちの1個しか使っていないのでうまく並列化すれば単純に14倍速くなって0.09秒と。C++のコードの6倍速くなることになるのかな。まぁ、他の計算処理の速くなり具合を見る感じだとそれくらいが妥当なんだろうか。やっぱり一桁速くなってほしかったなぁ。頑張れば一桁速くなるかなぁ。

>>> 12000 * 4 * 9 * 8 * 5 * 11 * 10 / 1500000000.0
1.2672000000000001
>>> _ / 14
0.090514285714285728