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

1
Shinichi Tokunaga @deepneko

並行コンピューティング技法3章:正当性の検証と性能測定

2010-01-05 12:09:36
Shinichi Tokunaga @deepneko

「プログラムとはアトミックな実行文の連続である」

2010-01-05 12:20:30
Shinichi Tokunaga @deepneko

アトミックについてはアセンブリ言語の1命令から高級言語ソースの1行まで色々考えられると思うが、ここではとりあえず高級言語ソースの1行で考えてよい。

2010-01-05 12:22:45
Shinichi Tokunaga @deepneko

「並行プログラムは複数のスレッド内のアトミックな実行文をインターリーブする」

2010-01-05 14:38:59
Shinichi Tokunaga @deepneko

「インターリーブする」ってのは・・・例えばスレッドT0、T1があって、アトミックな実行文s0、s1があったとすると・・・

2010-01-05 14:40:50
Shinichi Tokunaga @deepneko

[T0 s0], [T0 s1], [T1 s0], [T1 s1]

2010-01-05 14:43:46
Shinichi Tokunaga @deepneko

[T0 s0], [T1 s0], [T1 s1], [T0 s1]

2010-01-05 14:44:17
Shinichi Tokunaga @deepneko

[T1 s0], [T0 s0], [T1 s1], [T0 s1]

2010-01-05 14:44:31
Shinichi Tokunaga @deepneko

こんな風に各スレッドにおいてs0、s1の順に実行されるっていう制限がある状態で、処理の実行順序が決まること…かな?

2010-01-05 14:48:16
Shinichi Tokunaga @deepneko

今みたいに2スレッドでアトミックな実行文が2行だとインターリーブ数6。(6通りの実行順序)

2010-01-05 14:49:37
Shinichi Tokunaga @deepneko

3行になるとインターリーブ数20、4行になると70。スレッド数が増えるともっと増える。

2010-01-05 14:50:15
Shinichi Tokunaga @deepneko

「スレッド内のアトミックな実行文はいつかはインターリーブに含まれ実行される」

2010-01-05 14:52:58
Shinichi Tokunaga @deepneko

これを公平性という。これはつまり、どのインターリーブでもスレッドの実行文が不公平に除外されることはないことを意味している。

2010-01-05 14:55:27
Shinichi Tokunaga @deepneko

なんか話がすげぇ概念的になってきた…

2010-01-05 14:55:49
Shinichi Tokunaga @deepneko

著者はクリティカルセクションよりもクリティカルリージョンという呼び方が好きらしい。

2010-01-05 15:33:43
Shinichi Tokunaga @deepneko

他のスレッドがクリティカルリージョンを実行中は、スレッドがそのクリティカルリージョンへ入ることを禁止される。

2010-01-05 15:37:04
Shinichi Tokunaga @deepneko

どのスレッドもクリティカルリージョンへ入っていない場合に、クリティカルリージョンへ入れるスレッドは1つだけである。

2010-01-05 15:37:48
Shinichi Tokunaga @deepneko

スレッドがクリティカルリージョン外を実行中ならば、他のスレッドがクリティカルリージョンへ入ることを妨げてはならない。

2010-01-05 15:38:38
Shinichi Tokunaga @deepneko

まぁどれも排他制御には当たり前な話。

2010-01-05 15:39:02
Shinichi Tokunaga @deepneko

やべー、ソースが出てくるとつぶやけないだろこれは…

2010-01-05 15:41:58
Shinichi Tokunaga @deepneko

デッドロックを発生させる4つの条件。

2010-01-07 15:43:33
Shinichi Tokunaga @deepneko

1. 相互排除条件: あるリソースが同時に取りえる状態が、利用可能、もしくは1スレッドのみが使用中のいずれかである。

2010-01-07 15:44:31
Shinichi Tokunaga @deepneko

2. 獲得後のウェイト: 何らかのリソースを獲得済みのスレッドが新たなリソースを獲得しようとする。

2010-01-07 15:45:13
Shinichi Tokunaga @deepneko

3. プリエンプトなし: スレッドがリソースを獲得した後は、そのリソースを削除できるのは獲得したスレッドが自発的にリソースを解放したときだけ。

2010-01-07 15:46:12