マルチスレッド版数独自動生成ソフトC++コードを題材とする超初心者のためのVisual Studio C++講義
第11章 マルチスレッドプログラミング
第17話 5次魔方陣シングルスレッド版対マルチスレッド版実験結果
シングルスレッド版

(
13 22 2 7 21
4 20 17 19 5
16 10 8 6 25
19 22 13 8 3
10 1 24 23 7
15 16 2 11 21
4 20 14 18 9
17 6 12 5 25
20 12 22 8 3
10 1 19 24 11
18 15 2 9 21
4 23 16 17 5
13 14 6 7 25
21 11 14 15 4
10 1 22 19 13
12 24 2 7 20
5 23 18 16 3
17 6 9 8 25
22 14 19 7 3
8 1 21 23 12
18 16 2 9 20
4 24 17 15 5
13 10 6 11 25
23 13 17 8 4
3 1 22 20 19
11 24 2 16 12
10 21 15 14 5
18 6 9 7 25
24 19 14 5 3
10 1 20 22 12
9 16 2 17 21
7 23 18 13 4
15 6 11 8 25
25 17 11 9 3
4 1 22 23 15
14 19 2 12 18
6 21 20 13 5
16 7 10 8 24
魔方陣生成時間は8907.84秒です。
生成された魔方陣個数は2500個です。
マルチスレッド版全過程修了
)
マルチスレッド版

(
13 22 2 7 21
4 20 17 19 5
16 10 8 6 25
19 22 13 8 3
10 1 24 23 7
15 16 2 11 21
4 20 14 18 9
17 6 12 5 25
20 12 22 8 3
10 1 19 24 11
18 15 2 9 21
4 23 16 17 5
13 14 6 7 25
21 11 14 15 4
10 1 22 19 13
12 24 2 7 20
5 23 18 16 3
17 6 9 8 25
22 14 19 7 3
8 1 21 23 12
18 16 2 9 20
4 24 17 15 5
13 10 6 11 25
23 13 17 8 4
3 1 22 20 19
11 24 2 16 12
10 21 15 14 5
18 6 9 7 25
24 19 14 5 3
10 1 20 22 12
9 16 2 17 21
7 23 18 13 4
15 6 11 8 25
25 17 11 9 3
4 1 22 23 15
14 19 2 12 18
6 21 20 13 5
16 7 10 8 24
魔方陣生成時間は800.565秒です。
生成された魔方陣個数は2500個です。
マルチスレッド版全過程修了
)
マルチスレッド
対シングルスレッド![]()
速度比は
8907.84÷800.565 = 11.12694159749677
約11.1倍です。
25スレッドで20倍はいくかと思いましたが、
私のパソコンは6物理CPU・12論理CPUですから、理想的なスレッド数は12です。
対象によっても異なりますが、
論理CPUの個数とスレッド数が一致するときが最大とされるからです。
読者のパソコンはおそらく12物理CPU・24論理CPUでしょうから、
おそらく20倍近い実験結果が出ていると思います。
物理CPUと論理CPUの個数は、スタートを右クリックして
→タスクマネージャー→
パフォーマンスの順
に進んで


赤い囲いを見ると確認できます。コアが物理CPU個数で論理プロセッサ数が論理CPU個数です。
ですから、私のパソコンは6物理CPU・12論理CPUです。
尚私が論理CPU12個なのに20倍を期待した理由は、
扱っている数字が25以下の数字で小さいからです。
対象となる数字が小さい場合は、
最適スレッド数は論理CPUの個数を上回ることが経験則からわかっているからです。
6つの物理コアは常に協力し合っていて、自分の仕事が終わると苦戦している物理コアの応援に行くからです。
念のためにCPU使用率も見ておきましょう。
シングルスレッド版

マルチスレッド版

両者の差は歴然としております。
ほぼ10%対100%です。
シングルスレッドの場合は90%近くを遊ばせていることになります。
さて、第18話では6次魔方陣シングルスレッド版対6次魔方陣36スレッド版
結果はどのようになるでしょうか。