- 【GPGPU】くだすれCUDAスレ part7【NVIDIA】 [転載禁止]©2ch.net
774 :754[sage]:2016/03/02(水) 01:23:35.90 ID:n1GLxV/f - >>770-771
キャッシュローカリティって何さ…となったので、Google先生に勧められた wikiの『参照の局所性』を読んで、ちょっとわかった気がします。 自分が作ったバイトニックソートは大規模データの場合、 各threadがほとんど毎回前回と異なる&近傍でもないメモリ参照することになるので 時間的にも空間的にも最適化ができてないみたいです。 ない知恵絞ってif文減らして実質1つにした結果がこれだよ! あ、いや、thread単位はそうでも、warpとかblock単位で見れば近傍データなのか…?これはバンクの話か…? 実装のややこしさを飲み込めばシェアソートの方が参照の局所性は大きくしやすいのかな…? まだよくわかってないことが1つありまして、 プログラム上では何万何十万の計算を並列に扱ったとしても、 物理的にはハード側の制限があるわけじゃないですか。 GTX760ならCUDAコア1152基なわけで、一万を並列化しても 実際には同時じゃなくて9回くらいに分けて順に処理する、みたいな。 となると、その9回で各CUDAコアは別のメモリを参照するわけなんですが、 この時前回のキャッシュって残るんでしょうか? 残らない…ですよね? それともカーネルとしての処理が終わるまでは残るんでしょうか? はたまたプログラムが終わるまでは念のため残しておく、とか? キャッシュの利用自体が悪いんじゃなくて、 キャッシュにも収まらないデータ量がよくないってのはわかってるんですが、 なんかこのあたりの理解がまだ曖昧なんです。
|
- 【GPGPU】くだすれCUDAスレ part7【NVIDIA】 [転載禁止]©2ch.net
775 :754[sage]:2016/03/02(水) 01:46:45.38 ID:n1GLxV/f - だらだら長文書いたわりに今自分の気になることからは逆に離れた気がする。
手っ取り早く要約すると、CPU↔メモリ(キャッシュ)の速度は CUDAコア↔各種メモリの速度のどの当たりに相当するのか、でしょうか? GPU内ならレジスタ>shared(キャッシュ)>globalの順で速いとかは聞きますけど、 もう一歩踏み込んで『この不等号の列に割り込ませるなら』CPUの速度はこのあたり、という指標が見つからないんですよね。 もちろん機種によって千差万別だとは思いますが、 傾向としてはこのくらいかなあ、みたいな話でもいいので教えていただけたら幸いです。 あ、もちろん>>774の質問も答えていただけると助かります。 キャッシュがよくわかってないのも確かなので。
|
- 【GPGPU】くだすれCUDAスレ part7【NVIDIA】 [転載禁止]©2ch.net
779 :754[]:2016/03/02(水) 17:56:48.93 ID:n1GLxV/f - あっ
|
- 【GPGPU】くだすれCUDAスレ part7【NVIDIA】 [転載禁止]©2ch.net
782 :デフォルトの名無しさん[]:2016/03/02(水) 20:08:27.14 ID:n1GLxV/f - >>776
なるほど。基本的に残ってないと考えた方がよさそうですね。 バイトニックソートは綺麗に並列化できちゃうので、並び替えは無理っぽいです。 >>778 Occupancy確認しました。ビンゴでした。4%とかなにそれクソ使えてない。 というか、よくよく確認したらsharedもまだまだ余裕があったので、 要素数256でsharedの利用を切り替えていたのを2048まで拡張しました。 8192越えたあたりで悪化し始める、という性質こそ変わりませんでしたが sharedの恩恵を受けられる範囲が増えたおかげか悪化しつつも 約100万要素でもCPUより7倍強速くすることができました。これでOccupancyは50%。 100%にするにはsharedのサイズの設定を変えなきゃならないけどやり方わかんない…。 しかし、こんなアホみたいな理由で遅くなっていたなんて。 みなさまにはご迷惑おかけしました……。 >>780 やっぱりCPUですか。GPUの性能をフルに発揮させるには それなりに大きい規模を並列化して誤魔化さないといけないわけですね。
|
- 【GPGPU】くだすれCUDAスレ part7【NVIDIA】 [転載禁止]©2ch.net
783 :754[sage]:2016/03/02(水) 20:12:34.57 ID:n1GLxV/f - 名前入れ忘れたりsage忘れたりしてますが>>782は754です。
IDで察してくださいすみません。
|