第19講 .NETによるマルチスレッドプログラミング
第1話 普遍版魔方陣自動生成プログラムをマルチスレッド化するには?
さて、第17講で作った普遍版魔方陣自動生成プログラムをマルチスレッド化しましょう。
これで4コアパソコンなら4倍化に成功します。
まもなく8コアパソコンも市場に出てくるといわれていますから、
8スレッドにすれば8倍化にも成功します。
もっとも普遍版魔方陣自動生成プログラムを文字通り、
普遍版にするためには8倍化ではまったくお話にならず、
さらに、それを数億倍、数京倍、京×京倍化していかなければなりません。
そうすれば26次魔方陣でも1秒で数百から数千の単位で生成できるようになります。
私のサイトにある魔方陣作成プログラムは、
基本的にVBAで作ったもので、シングルスレッドですがそれでも26次魔方陣を1秒に数百の単位で作り出します。
魔方陣(細胞構成法)
魔方陣普遍超高速版
魔方陣普遍行列交換派生版
さて、話題をマルチスレッドに戻しましょう。
実は、数独・魔方陣・将棋などはマルチスレッドに向いています。
囲碁もそうです。
囲碁の場合まだまだのようにですが、
将棋は、すでにもとプロの名人である米長邦夫(引退棋士)を破っています。
現役名人に勝つ日は数年以内に、もしかすると半年以内に訪れるでしょう。
将棋や魔方陣は、なぜマルチスレッドに向いているのでしょうか。
将棋は、指した手によって可能性が分岐していきます。
盤面にもよるのですが、それぞれの局面のおいて可能な手は50手近くがあります。
樹形図にすると、
1手先で50の枝が、
2手先で50×50=2500の枝が、
3手先で50×50×50=125000の枝が、
4手先で50×50×50×50=6250000の枝が
分岐していきます。
4手先で6250000の枝があるわけですが、
1手目の50手によって分類することができます。
50スレッドにして研究することができます。
CPUが4つに対して50スレッドは不可能だと思うかもしれませんが、
マルチスレッドはシングルコアの時代から研究されてきました。
シングルコアでも論理的には複数のコアにすることができます。
もちろん仮想マルチコアです。
CPUを時間で区切って、それぞれのスレッドを担当させれば、
シングルコアでもマルチスレッドを扱うことが可能になるのです。
最初の0.0001秒において1つめのスレッドを
0.0001秒から0.0002秒において2つめのスレッドを
0.0002秒から0.0003秒において3つめのスレッドを
0.0003秒から0.0004秒において4つめのスレッドを
といういうに切り分けるわけです。
ひとつのCPUを時間で区切って4つCPUがあるように見せることを
論理CPUが4つであるというのです。
論理的は4つですが物理的には1つです。
物理CPUが1つで、論理CPUが4つなどと表現するわけです。
まあ、論理CPUの話はおいておいて、
最初の50手を何らかの形で4分類にすれば4スレッドが実現します。
おそらく、今市販されている将棋ソフトは基本的にマルチコア対応ではないでしょうか。
少なくとも私が持っている2つのソフトは、マルチコア対応です。
すなわち、マルチスレッドプログラミングです。
将棋よりもっと向いているのは、数独や魔方陣でしょう。
最初の手の分類が非常に簡単であるからです。
魔方陣は、最初のセル=セル番号gが0のセルに入れる数字によって分類すればよいのです。
4次魔方陣であれば、4分類は1~4、5~8、9~12、13~16で分類すればよいですね。
あるいは、素数探索でやったように4で割った余りが0のもの、1のもの、2のもの、3のもので4つに分類してよいですね。
では、第18講のマルチスレッドプログラミングを参考にして第17講の普遍版魔方陣自動生成プログラムをマルチスレッド化しましょう。
第18講第6話へ 第2話へ
C言語 C++講義第1部へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)