第18講 マルチスレッドプログラミング=並列処理プログラミング

第2話 マルチスレッドプログラミングのヒント

マルチスレッド対応プログラムによって、
CPU使用率が100%になっている状態を最初に見て頂きましょう。

(マルチコア4の場合=物理CPU4個、論理CPUがない場合です。)

これをご覧になった読者の皆さんは、すぐにもマルチスレッドの方法を知りたいでしょうが、
少々お待ちください。
マルチスレッド対応プログラムの題材の方を先に示さなければならないからです。
今回の題材は、第16講で扱った素数の探索にしたいと思います。
ただし、第5話 奇数ではなく素数で割って素数判定をする
で考えた素数で割った行くということは、断念しなければなりません。

シングルスレッドの場合、順々に素数が配列に入っていきますが、
並列処理=マルチスレッドの場合、
各スレッドがそれぞれ素数探索を行っているために、
素数の順番がばらばらになってしまうからです。
最もばらばらになったものをもう一度大小の順に並び直せば使えますが、
並び換えのプログラムはまだ学習していません。
大小の順への(ランク順への)並び換えのプログラムについては、
いくつかの講で学ぶ予定になっています。
ですから、学んだ後に再び素数で割っていくというプログラムも
考えることになるかも知れません。
ですが、すでに第16講で学んだ通り、
奇数でなく素数で割っていっても、思うような高速化は出来ません。
ですから、奇数で割っていくプログラムをマルチ化する方が、
遙かに高速化できます。
皆さんのコンピュータの環境にもよりますが、
論理CPUが8個の場合、
少なくとも5倍加は期待できます。
上手くいくと6倍加・7倍加も出来るかも知れません。
論理CPUが8個なら、
8倍加出来るのでは?
と思いになるかも知れませんが、
論理CPUの個数は、
あくまで見かけのCPU個数です。
物理的には4個しかないわけですから、
8個分の働きをさせることが出来たら、
魔法ということになりますが、
5,6個分の働きしかさせられないのが、現状です。
ですが、4個を上回る働きさせることが出来るから、
1つのCPUを時間で区切り、
あたかも複数のCPUがあるかのように見える論理CPUを採用しているわけです。

では、第16講の
第3話 素数探索プログラム例
第4話 素数探索プログラムに時間計測を付け加える

で考えたシングルスレッドプログラミングを
いかにしたら、マルチ化できるでしょうか。

プログラミングには、実はマルチ化しやすいものと、
マルチ化が困難なものとがあります。
第1話で、私がもっている将棋ソフトはマルチコア対応であると書きましたが、
将棋や囲碁は、マルチスレッド=並行処理が比較的しやすいゲームです。
なぜなら、
A手を選んだ場合、
B手を選んだ場合、
C手を選んだ場合、
D手を選んだ場合、
E手を選んだ場合、
G手を選んだ場合、
のそれぞれの場合について、
各スレッドで検索させれば良いからです。
人間の場合には、同時に複数の場合を考えることが出来ませんから、
1つの場合を手を読んだ後、次の場合を検討する・・・
という方法しかないわけですが、
マルチスレッドプログラミンが出来るパソコンの場合、
それぞれの場合を同時に探索出来るのです。
6スレッドの場合、あたかも6台のコンピュータがあるかのように、
探索可能なわけです。

では、素数探索の場合は、
どのようにしたら並列処理が可能なのでしょうか。





第1話へ 第3話へ

a

eclipse c++ 入門講義第1部へ

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ