>>770-771
キャッシュローカリティって何さ…となったので、Google先生に勧められた
wikiの『参照の局所性』を読んで、ちょっとわかった気がします。
自分が作ったバイトニックソートは大規模データの場合、
各threadがほとんど毎回前回と異なる&近傍でもないメモリ参照することになるので
時間的にも空間的にも最適化ができてないみたいです。
ない知恵絞ってif文減らして実質1つにした結果がこれだよ!
あ、いや、thread単位はそうでも、warpとかblock単位で見れば近傍データなのか…?これはバンクの話か…?
実装のややこしさを飲み込めばシェアソートの方が参照の局所性は大きくしやすいのかな…?

まだよくわかってないことが1つありまして、
プログラム上では何万何十万の計算を並列に扱ったとしても、
物理的にはハード側の制限があるわけじゃないですか。
GTX760ならCUDAコア1152基なわけで、一万を並列化しても
実際には同時じゃなくて9回くらいに分けて順に処理する、みたいな。
となると、その9回で各CUDAコアは別のメモリを参照するわけなんですが、
この時前回のキャッシュって残るんでしょうか? 残らない…ですよね?
それともカーネルとしての処理が終わるまでは残るんでしょうか?
はたまたプログラムが終わるまでは念のため残しておく、とか?
キャッシュの利用自体が悪いんじゃなくて、
キャッシュにも収まらないデータ量がよくないってのはわかってるんですが、
なんかこのあたりの理解がまだ曖昧なんです。