読書活動 PPMP Ch.8
CHAPTER 8 Stencil
- Stencil は偏微分を計算するのに使います。Convolution に似てますが、問題の性質から最適化の仕方も変わります。
- 問題柄三次元で計算がちですが、三次元のタイルはあまりでかくできませせん。したがって halo の割合が大きく DRAM アクセス帯域の効率を下げがちです。
- そこで thread coarsening をします!つまりループを回して cube の一つの次元を iterate していく。Tile をシフトする必要があるが、再利用する cell は shared memory 間でのコピーなのでレイテンシの問題がない。
- これは面白いところだよな。CPU だと ring buffer 的にインデクス側で rotate しそうなものだけれど(というか GPU でも同じことはできるけど、説明を簡略化するためにそういうロジックは省いているのかもしれない。)
- アクセスパターンによっては shared memory を使うまでもなく、ループをまたいでレジスタ(ローカル変数)を使いまわせる。これを register coarsening という。
この本は地の文で「X 行目から Y 行目では ZZ をしています」とコードを解説するんだけど、あまりにフォローするのが難しいので文を読むのは諦めてコードをにらんで済ますことが多い。Literate programming スタイルで書いてくれればよいのになあ。