すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

Core 2 Duo で、1つの計算プログラム(マルチコア非対応。)を実行すると、同時に2つのCPUが動いています(タスクマネージャの情報)。私の認識では、マルチコア非対応プログラムの場合は、1CPUで実行されると思っていたのに、2つで実行されているということは、並列化をしていないのに並列化が自動でされているということでしょうか?
また、1CPUだけで実行させる方法を知っている方がいらしたら、その方法や、方法が載っているサイト等を教えてください。

  • 質問者:ss
  • 質問日時:2009-01-30 10:57:59
  • 0

並び替え:

プログラムがマルチコア非対応でも、スレッドを作成して開始終了を繰り返すとスレッドのスケジューリングのアルゴリズムで効率の良い方へ割り振られる為に二つのコアで実行される事は有ります。もし、重複してスレッドが作成された場合(Aスレッド起動後終了を待たずにBスレッド起動等)は当然AとBが同時に二つのコアに割り当てられて同時に実行する可能性は有ります。

また、シングルスレッドのプログラムでも、他のプロセスへのタイムスケジュールの分配の関係で前回実行していたコアとは別のコアに割り振られる事は頻繁に生じます。ただし、二つのコアで同時に実行される事はありません。なので、ご質問の状況は普通に発生します。

マルチスレッド化は昔から行われていますが、その中でもマルチコアの対応と言うのはCPUのコア数をプログラムが自ら認識してコア数を設定できたり、最適にスレッド起動~終了の調整を行うソフトと考えても良いです。

で、CPUコアを限定する手法ですが、先ずWindows XPの場合はタスクマネジャを起動してプロセスタブを選択してください。そこに『何とか.exe』とか沢山並んでいますので、そこからコア数を限定したいプログラムを右クリックします。

そのメニューの中に『関係の設定』と言う項目が有りますので、そこで使用したいCPUコアにチェックを付け、使用したくないコアではチェックをハズせば、そのプロセスで実行するCPUコアを限定する事が可能です。

===補足===
返信有難うございます。御免なさい、説明の仕方が悪かったようです。

シングルスレッドはマルチコア非対応ですが、マルチコア非対応でもシングルスレッドではないプログラム(マルチスレッド)は沢山有ります。マルチコア非対応かつマルチスレッドの例としては、ユーザインタフェースと内部計算を分離して実装しているプログラム、例えばメールソフト等が該当します。

受信コマンドを打ち込んで沢山のメールを読み込んでいる間も、一覧から他のメールを選んで読む事が出来るかと思います。これはマルチコアには対応はしていませんが、マルチスレッドで動作していると言う事になります。もしシングルスレッドだとメールを受信中はサーバとのやり取りに専念せざるを得ないのでユーザの入力が出来なくなります。

どのような時にその様な使い方をするかと言うと、メールソフトの例でご理解いただけるかと思いますが、何かコマンドを打ち込んで待ち状態になる時、シングルスレッドだとそのコマンドが終了するまで入力を待たされますが、コマンドを打ち込んでから内部で計算や処理をしつつ、即座に次のコマンド待ちになるような場合は多用します。

マルチコア対応プログラムの一例としてはExcel2007等が挙げられます。Excelも計算とユーザインタフェースを複数のスレッドに分けて実行するソフトの好例で、ユーザ入力を処理するスレッドの他に時間の掛かる計算を普通は1つの計算専用スレッドを起動して実行する訳です。以前のバージョンのExcelではマルチコア非対応でしたがマルチスレッド動作で、バックグラウンドで計算やエラー処理などを行っていました。

が、コアが2つ有る事をプログラムが知っていれば通常は計算スレッドを1つ起動する所で、スレッドを2つ起動してやればシートやブックに分けて別々に並列計算すれば最高で半分の処理時間で済む事になります。このような用途でコアが一つしかないのに二つスレッドを起動するとスレッド間の調停処理の為にむしろ無駄時間が増える事になるわけです。ただしシステム全体で見た場合はそのプロセスのスレッド数が増えるので、そのプロセス単独で見た場合はトータルでのプロセスに与えられる時間資源は多く割り当てられる事になります。

(もしExcelをご存知で無かった場合は御免なさい。)

このようにプログラムが自分の実行環境のコア数を把握して起動スレッド数等の調整を行うプログラムをマルチコア対応と呼んでいます。

# Sooda!システムの都合上、補足が1回しか出来ないのが残念ですが、コレでご理解頂ければ感謝です。

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

詳しい説明ありがとうございます。
マルチコア非対応=シングルスレッド
ということですよね。
ありがとうございました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る