スケジューリング
http://www.gdep.jp/column/view/3 の
https://www.gdep.jp/files/image/column03_blocks_threads.jpg
の表なんだが、なんか似たような表を見たことがあるな…
僕がCUDAのコード書くときは面倒だからスレッド数128 or 256でブロック数=SM数決め打ちでやるのだが、ブロック数=SM数決め打ちはあんまりよくないみたい。
…と、いうのが、表を書くことでしかわからないというのが許せないのだった。
CUDAは、「命令のレイテンシ隠蔽」「メモリのレイテンシ隠蔽」「SIMD」「SMP」というあたりを全部まとめてマルチスレッドで扱えるのがシンプルで素晴らしいわけだが(実際にはブロック内のスレッドが微妙だけど)、これらの概念をひとつにまとめてしまったため、「マルチスレッド」という概念がいろんな要素を含んでしまって、「全部実測して表を書かないとわからない」という状況になってしまう。
CellのSPUのようにこれらを全部手で書くのと、CUDAのように全部まとめて扱ってしまうのと、どちらが簡単なのか、というと、個人的には、CellのSPUのほうが簡単な気がするのだが、いやでもそうか?実際最適化すると最後はトライアンドエラーになるわけで、そうなったら表を書くぐらい全然問題無いんでは?という気もしてきたな。えーと、特に結論とか有用な情報とかはない。