第22講 素数探索を題材としたマルチスレッドプログラミングの学習
第1話 マルチスレッドプログラミングとは?

マルチスレッド対応プログラムの説明をします。
非常に処理時間のかかるソフトを起動してください。
例えば、末講確定法による魔方陣ソフト作成ソフトをダブルクリックして開き、
TextBoxに10などを入力して実行ボタンを押してください。
これは、10次魔方陣を1000個作らせるようになっているので、
処理時間がかなりかかります。
CPU使用率を見て頂くためにわざと、処理時間がかかるようにしてあります。
起動中にタスクバーを右クリックしてください。
タスクバーとは画面の一番下にある

バーです。
右クリックすると、サブメニューが開かれその中にタスクマネージャーというのがあります。
これをクリックして起動させると、というWindowが開きます。
上の図に用にパフォーマンスタブをクリックすると、現在稼働中の末講確定法による魔方陣ソフト作成ソフトのCPU使用率が分かります。
私のパソコンでは末講確定法による魔方陣ソフト作成ソフトはCPU使用率がたったの25%しかありません。
環境(パソコンのスペック=性能)によって違いますので、皆さんのコンピュータでは違う結果が出ているでしょうが、
おそらく100%のCPU使用率になっている方はいらっしゃらないと思います。
私のパソコンは、マルチコア4で4つのCPUを積んでいます。
4つあるのに実質1個分しかCPUが働いていないのです。
実質というのは、のグラフを見ると一応すべてのCPUが働いていることは分かるからです。
4つのグラフが、それぞれ4つのCPUに対応しています。2番目のCPUが最も働いていて、
3番目と4番目はほとんど働いていません。
4つのCPUのトータル稼働率が25%というわけです。
ですから、実質4×0.25=1個分しか作動していないのです。

これは、私の作った末講確定法による魔方陣ソフト作成ソフトのできが悪いわけでなく、
マルチコワ対応のソフトでない限り、ほとんどのソフトがCPU使用率25%程度です。
(もっとも、私が使っているAI将棋Ver.14はマルチコワに対応していて、パソコンが考えているときはCPU使用率100%です。)

尚、このタスクマネージャーはいろいろと使い勝手がありますのでいろいろと利用して下さい。
例えば、今起動中の末講確定法による魔方陣ソフト作成ソフトを強制的に終了させるには、
タスクマネージャーのアプリケーションというタブをクリックして頂くと、
現在起動しているソフトが明らかになります。
Form1が末講確定法による魔方陣ソフト作成ソフトですので、これを選んでタスクの終了を押せば、
強制的にソフトを終了させることができます。

さて、話をCPU使用率に戻しましょう。
このCPU使用率を、100%までもっていくには、
マルチスレッド対応プログラミングをしなければならないのです。
マルチとは多数という意味であり、スレッドとはソフトウェアの実行単位です。
スレッドが1個しかない場合がシングルスレッドで、多数ある場合がマルチスレッドです。
今までプログラミングの勉強をかなりしてきましたが、
今までのソフトは、実はすべてシングルスレッドです。
Visual Basicでは、マイクロソフトはマルチスレッド対応プログラムが可能であると唱っていますが、
実際にはできないというのが、ネット上のもっぱらの評判です。
VBAを使っていた時代に、大部調べていろいろ試してみましたが、
CPU使用率は残念ながら25%程度で変わりませんでした。
それで、マイクロソフトに問い合わせしましたが、
その情報提供料として2万8千円という信じられない料金を示されました。
この値段が、VBではマルチスレッドプログラミングが普通の方法では不可能であることを示しています。
それで、エクセルのVBAによる数独問題作成ソフトの開発をVer7でやめて、
Visual C++に乗り替えたというわけです。

シングルスレッドとマルチスレッドは、それぞれ直列処理と並列処理と言い換えることもできます。
プログラムは、普通は直列処理です。
ですから、VB当たりでマルチスレッド処理ができないのは、普通であると言えます。
基本的にプログラム言語は、シングルコア(CPUが1つ)の時代に考えられたものですから、
マルチスレッドに対応していないのが普通なのです。
C時代から対応していた、C++がむしろ特別だと言ってもいいでしょう。
直列処理というのは、
A→B→C→D→・・・と直線に進んでいく処理です。
Aと後に、Bを行い、次にCを行うというように時系列に処理が進んでいきます。
それに対して、並列処理とは、

A,B,C,Dの処理が同時に並行して処理されます。
ですから、マルチコア(複数のCPU)に適したプログラム方法です。
実際にはそれほど単純ではありませんが、
イメージとしてはA,B,C,Dの処理をそれぞれのCPUに担当させると考えればよいのです。
このあと4スレッドに挑みますが、4スレッドでCPU使用率は100%になります。


Visual Basicで困難なマルチスレッドがVisual C++ならば簡単にできます。
普通、初心者用の入門書では触れられませんが、
決して、難しいものではありません。
マルチスレッド化する方法は、いろいろあります。
ですから、複数講に渡ってマルチスレッド対応プログラムについて説明していきます。


第21講第6話へ 第22講第2話へ



VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座