第18講 マルチスレッドプログラミング=並列処理プログラミング
第1話 マルチスレッドプログラミング=並列処理プログラミングとは?
マルチスレッドプログラミングとは何でしょうか。
並列処理プログラミングです。
では、並列処理プログラミングとは何でしょうか。
マルチや並列処理の意味を説明します。
非常に処理時間のかかるプログラムを起動しましょう。
例えば、
第9講 関数の再帰的使用
第10話 関数の再帰的使用による汎用的魔方陣自動生成ソフト非グローバル版小改良

参考ファイルをコピペして、実行して
a

5次魔方陣を作成させてみてみましょう。
プログラムを走らせながら、タスクバーを右クリックしてください。
タスクバーとは画面の一番下にある
s
バーです。
何もないところで右クリックすると、
dサブメニューが開かれその中にタスクマネージャというのがあります。
これをクリックして起動させると、タスクマネージャーというWindowが開きます。
パフォーマンスタブをクリックすると、
f
現在動いているプログラムのCPU使用率が分かります。
私のパソコンでは、CPU使用率がたったの21%しかありません。
環境(パソコンのスペック=性能)によって違いますので、
皆さんのコンピュータでは違う結果が出ているでしょうが、
おそらく100%のCPU使用率になっている方はいらっしゃらないと思います。
私のパソコンは、物理的に4つのCPUを積み、
論理CPUが8つになっています。
論理CPUとは見かけのCPUです。
1つのCPUを時間で区切り、あたかも2つのCPUが働いているように見せているために、
見かけ上は2倍の8個のCPUがあるように見えているわけです。
物理的には4つあるのに実質1個分もCPUが働いていないのです。
実質というのは、タスクマネージャーの下にあるg
リソースモニターをクリックしてグラフを見ると
h
一応すべての論理CPUが働いていることは分かるからです。

8つのグラフが、それぞれ8つの論理CPUに対応しています。
3番目のCPU2(0から始まっていますので2が3番目です。)
が最も働いていて、
1番目と4番目などはほとんど働いていません。
8つのCPUのトータル稼働率が21%というわけです。
物理CPU4つの合計稼働率が21%ですから、
物理CPUの1個分も稼働していないわけです。

これは、プログラムのできが悪いわけでなく、
マルチコア対応のソフトでない限り、ほとんどのソフトがCPU使用率20%以下です。
(もっとも、私が使っている将棋ソフトはマルチコアに対応していて、
パソコンが考えているときはCPU使用率100%です。)

尚、このタスクマネージャはいろいろと使い勝手がありますのでいろいろと利用してください。
例えば、今起動中のプログラムを強制的に終了させるには、
タスクマネージャのアプリケーションというタブをクリックして頂くと、
現在起動しているソフトが明らかになります。
j
魔方陣自動生成ソフト
(名称は皆さんの場合は、異なっていると思います。
自分で付けたプロジェクト名を探して下さい。)
は、計算終了までには1年ぐらい(ひょっとしたら10年以上かも)
かかりますので、
強制的に終了させましょう。
該当するプログラムを選び、
右下のkタスクの終了をクリックしますと、
強制的に魔方陣自動生成ソフトを終了させることができます。

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

シングルスレッドとマルチスレッドは、それぞれ直列処理と並列処理と言い換えることもできます。
プログラムは、普通は直列処理です。
ですから、VBあたりでマルチスレッド処理ができないのは、普通であると言えます。
基本的にプログラム言語は、シングルコア(CPUが1つ)の時代に考えられたものですから、
マルチスレッドに対応していないのが普通なのです。
C時代から対応していた、C++がむしろ特別だと言ってもいいでしょう。
直列処理というのは、
A→B→C→D→・・・と直線に進んでいく処理です。
Aと後に、Bを行い、次にCを行うというように時系列に処理が進んでいきます。
それに対して、並列処理とは、
l
A,B,C,Dの処理が同時に並行して処理されます。
ですから、マルチコア(複数のCPU)に適したプログラム方法です。
実際にはそれほど単純ではありませんが、
イメージとしてはA,B,C,Dの処理をそれぞれのCPUに担当させると考えればよいのです。
このあと7スレッドに挑みますが、
論理CPUが8の場合7スレッド程度で
CPU使用率は100%になります。


Visual Basicで困難なマルチスレッドがC/C++ならば簡単にできます。
普通、初心者用の入門書では触れられませんが、
決して、難しいものではありません。
マルチスレッド化する方法は、いろいろあります。
ですから、
今後時折講を設けて、
マルチスレッド対応プログラムを解説することになります。

第17講第8話へ
 第2話へ

a

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

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