並行コンピューティング技法2章

1
Shinichi Tokunaga @deepneko

タスク分解では粒度(タスクの処理量)に注目したと思うけど、それとは別にデータ分解ではチャンクの形状に注意しなければいけない。

2010-01-02 19:59:47
Shinichi Tokunaga @deepneko

1要素ごとに分割、行で分割、列で分割、ブロックで分割。

2010-01-02 20:00:17
Shinichi Tokunaga @deepneko

何を気にしてるかっていうと、チャンク同士の境界面が多いか少ないか。データ更新が起きるとチャンク同士でデータ交換を行うことがあるから、境界面は少ないほうがオーバーヘッドは少ない。

2010-01-02 20:02:33
Shinichi Tokunaga @deepneko

隣接したチャンク間でデータを交換するには2つの方法がとりあえず思いつく。

2010-01-02 20:12:09
Shinichi Tokunaga @deepneko

タスク(スレッド)専用の領域にデータをコピーしておくか、必要になった時点で隣接チャンクへアクセスするか。

2010-01-02 20:13:00
Shinichi Tokunaga @deepneko

データのコピーで不利な点はタスクそれぞれに追加のローカルメモリ(ゴーストセル)が必要になること。

2010-01-02 20:13:34
Shinichi Tokunaga @deepneko

もちろんコピー回数が増えたり、コピーするデータ量が増えるとオーバーヘッドが増えます。

2010-01-02 20:25:01
Shinichi Tokunaga @deepneko

必要に応じて隣接チャンクにアクセスする方式は、共有メモリ通信の恩恵を最大限に受けられるし、データが必要になるまでスレッド間の連携を遅らせることができる。

2010-01-02 20:26:15
Shinichi Tokunaga @deepneko

ただし必要なときにデータが正しい値になっていることが保証されていなければならない。

2010-01-02 20:26:44
Shinichi Tokunaga @deepneko

データが更新処理中だったり古いデータだったりすると意味ないからね。

2010-01-02 20:28:57
Shinichi Tokunaga @deepneko

なんかこの本、サンプルを載せてくれるのはいいんだが、最終的にスレッド化したものを書いてくれてないんだが。今のところ。

2010-01-02 20:30:53
Shinichi Tokunaga @deepneko

解説だけ載ってるからあとは自分で書いてみろってことなんだろうけど。

2010-01-02 20:31:05
Shinichi Tokunaga @deepneko

並列化できない(しづらい)アルゴリズム

2010-01-02 20:43:38
Shinichi Tokunaga @deepneko

状態を持つもの。次の処理へ進む際に何かしらの情報を維持するもの。乱数生成のseed、ファイルI/Oのseek位置など。

2010-01-02 20:44:40
Shinichi Tokunaga @deepneko

漸化式。ただしprefix sumは可能。

2010-01-02 20:45:45