• 締切済み

マルチコアを有効利用するプログラミングについて

マルチコアを有効に利用するプログラムを作りたいと考えています。 マルチコア、マルチスレッドが、よく理解できていないところもありますが、ご容赦お願いいたします。 OSはWindows XP、開発環境はVisual C++ 6.0です。 1.マルチスレッド対応すれば、マルチコアを有効利用できるのでしょうか?(複数のコアの使用率を均等に上手く割り振ってくれるのでしょうか) 2.Windows APIにSetThreadAffinityMask()、SetThreadIdealProcessor()なるAPIがあるのですが、これらを使用しないと、割り振れないものなのでしょうか? 3.少し調べたのですが、OpenMP、MPIなる技術があるようなのですが、このような特殊な処理を加えないとダメなのでしょうか。 個人的には、マルチスレッド対応さえすれば、あとはOS(Windows)が上手くやってくれれば、、、と思っているのですが。

みんなの回答

回答No.2

スレッドハンドルをSetThreadIdealProcessor APIに渡してください。 スチームなどではシングルコア時代のゲームがWindows Vista/7/8対応で再販されてますが、近代のマルチコア対応ゲームと比較すると全コアを活かしきれていないです。

  • MASA_H
  • ベストアンサー率42% (64/151)
回答No.1

1) 各スレッドの処理量が均等になるように割り振れれば、後はOSに任せてもそれなりにうまくやってくれます。 2) 別に使わなくてもOSが適当に割り振りますが、スレッドごとに処理量が大きく異なる等で割り振りかたを制御したいときに使います。 3) MPIはスレッドレベルというよりプロセスレベルで並列化させるときに使う技術です。スレッドレベルでの並列化の場合は必要ありません。

関連するQ&A

  • マルチコアのパソコンについて

    マルチコア(マルチスレッド)のパソコンはマルチスレッド非対応のソフトを何個か同時に使った時、 自動的に処理を各コアに分散して負荷を低減してくれたりするんでしょうか?

  • 古いマルチスレッドプログラムはマルチコアに対応しているのか

    Windows上での話という事でお願いいたします。 HTが出始めた頃の高級言語C++やDelphi等で作成した、マルチスレッドプログラムは、そのままでマルチコアに対応しているのでしょうか? 多くの記事やネット上の情報およびインテルのQuad coreのプロモーションを見る限り、プログラムがマルチスレッドならば、そのままマルチコアを有効に利用できるような事が書いてありますが、プログラミングにおいて、特別にマルチコアに対応するようなコードは必要ないのでしょうか? C#用のQuad Core対応といったようなライブラリもあり、特別な処理が必要なのではという雰囲気がただよっているのですが・・・。 (ライブラリのソースまで見れたわけではないので、実態がよくわからない) Quad Core対応のライブラリというのは、いったい何をしていると予想されますでしょうか。 4スレッドで動く事を前提に最適化されているだけなのでしょうか。 といった疑問なのですが、お暇がありましたら ご回答いただければ幸いです。

  • マルチコアCPUはコア数が多ければ多い程有利なのではないのですか?

    最近マルチコアのCPUをよく見かけます、 それで、例えば、Core2DuoとCore2Quadを比べた質問、についてですが、 この手の質問では、Quadはマルチスレッド対応アプリを使わなければ Duoと大きな違い感じられないという回答がよく見られます。 又、むしろ消費電力が大きくなり2コアに比べクロック数も低いので 対応アプリを使わなければ逆に4コアは不利であるという意見もあります。 しかしどうも疑問を感じます。 上記の内容はあくまで一つのアプリを動作させた場合の事を想定した物なのでは? ごく日常での使用ではコア数が多い方が有利なのではないですか? 私の考えとしては、まずPCを扱う際一つのアプリのみを起動しPCを使用する人はまずいないという事から、 使用中に他のアプリや別のプログラムを実行するという場合も大いに考えられますし、 実際にタスクマネージャなどを見てもOSを起動起動するだけでかなりのプロセスが実行されいくらかCPUを食っています。 するとその様なマルチコア向けのアプリケーションを使用せずとも多数のシングルスレッドのプロセス実行と共に 複数のスレッドが発生し、結果例え速度的な変化は感じられずともマルチコアの恩恵を受ける事が出来るのではないか? と、私は思うのですがこれは間違いなのでしょうか。 それとも実際は上記の内容は間違いでそう都合良くは出来ていない物なのでしょうか? 長くなってしまいましたが回答いただけると幸いです、よろしくお願いします。

  • linuxマルチコアCPU環境においてコアの使われ方について

    linuxマルチコアCPU環境においてコアの使われ方について マルチコアCPUがLinxu環境において(その他Linuxでないプラットフォームにおいても)、 実際に搭載されているCPUのコア数が正常にOSに認識されているというだけではなく、 各プロセスの処理に対して複数のコアが適宜効果的に利用されているのかどうか?? ということが知りたく、添付画像に私の疑問点をまとめてみました。 ■ポイント ++++++++++++++++++++++++++++++++++++++++++++++++ 投稿した画像の色がついている4つの矢印は1つ1つそれぞれがDB接続クライアントがmysqlに投げているSQL文(クエリ)をイメージしています。 Mysqlを起動させているlinux kernelは、このクエリを受け取り自身が管理しているCPUがマルチコアであった場合、どのようなロジックで複数のコアの中から4つのクエリを処理させるCPUコアを選択しているのでしょうか? 例)kernelが未使用のCPUコアを都度選んで1クエリの処理を担当するよう制御している ⇒コアによって処理する数は異なる 例)kernelが4つのクエリに対して4つのCPUコアをラウンドロビン分散させて処理させている。 ⇒コアが処理する数は均等になる ++++++++++++++++++++++++++++++++++++++++++++++++ どなたか、私の疑問についてご存知でしたらご教授いただけますでしょうか。 よろしくお願します。

  • マルチコア上のLinux環境にて、スレッドを任意のコアに割り当てることは可能か?

    こんにちは。cstepと申します。 Intel Core 2 Quad(コア数x4)のマシン上の ReaHat Linux 9(Kernel 2.4.20-8)環境で、pthread(glibc-2.3.2-11.9, NPTL 0.29, gcc 3.2.2)を使用したマルチスレッド・プログラミングをしています。 各スレッドのコア割り当てを(OSの自動スケジューリングではなくて)手動で固定的に割り当てることは可能でしょうか? 可能な場合それを実現するAPIや実現方法をご教授いただけますでしょうか。 例えば、8つのスレッドからなるプログラムだとした場合、 ・スレッド1と5 → コア1に割り当て ・スレッド2と6 → コア2に割り当て ・スレッド3と7 → コア3に割り当て ・スレッド4と8 → コア4に割り当て というふうに、各スレッド(1~8)を任意のコア(1~4)に固定的に割り当てて動作させたいと考えております。 Windowsの場合は、SetThreadAffinityMask() または SetThreadIdealProcessor() といったAPIを使うことで上記の要求は可能かと思いますが、Linuxでの方法が分からず、質問させていただきました。 よろしくお願い致します。

  • マルチコアプロセッサと、ソフトウェアの関係

    最近、マルチコアプロセッサ搭載のパソコンが、よく売られていますよね、私が今度、購入するパソコンは、ワークステーション級の物で、 CPUにはOpteron(バルセロナCPU=1CPUに4コア)を2個搭載=8コア、搭載(稼働)する物を選びました。4コア以上のCPU全てが働くには、64ビットのOSが前提ですが、各ソフトウェアも、「マルチコアプロセッサ対応のソフトウェア」でなくてはならないですよね。 そこで、質問です。 1 マルチコアプロセッサ対応の、ソフトウェアは、今市場に出ているソフトウェアで、何がありますか?代表的なソフトウェア・私の知らないソフトウェア、なんでもよいので教えてください。 2 このソフトウェアは、マルチコアプロセッサ対応かどうかを見分けるマークのような物はないですか?ない場合は、どうやって見分ければよいのですか?やっぱり、取扱説明書を見るか、そのメーカーに問い合わせをするぐらいでないとダメですか? 私は、以前メーカーに問い合わせても、調べるから待っていてくれと言われました。 3 今後、家庭用のパソコンのCPUは、もっとコアの数が増えた物になるのでしょうか? 4 3の質問に関連してるのですが、もっとコアの数が増えたCPUになったとして、そのCPUがもっと増えたパソコンやマザーボードが出てくるのでしょうか? では、よろしく、お願いします。

  • 非マルチスレッドソフトの挙動

    デュアルコアを使っています。 マルチスレッドじゃないソフトでも両方のコアに均等に負荷が分けられていますが、これは正常なんですか? 一つのコアに負荷が集中するものだと思っていましたが。2つのコアに割り当てることは可能なのですか? しかし、マルチスレッドでないものは負荷が両方のコアに均等に掛かり50%までしか行きません。 しかし、対応しているものでは100%になります。

  • タスクの割り振りについて

    一応、クアッドコア対応ですが、 タスクのコアへの割り振りなどの効率には改善の余地はOS側には ないんでしょうか? XPよりVistaのほうがいいんでしょうか. マルチコアはマルチスレッド対応などソフトの対応が必要ですが、 複数ソフトを立ち上げた場合のコアへのソフトの割り振りは あまり重要じゃないのでしょうか.

  • マルチスレッド対応ソフト

    デュアルコアを使っている場合、 マルチスレッド対応のソフトを使っていると 2つのコアを使うので 早くなります。 マルチスレッド対応のソフトというのは エンコード系しかないのでしょうか? また、どのソフトがマルチスレッドに対応しているかという判断はどうやってしたらいいんですか? HTは擬似的なデュアルコアですが、 HTに対応していたら、 マルチスレッドに対応、 つまりデュアルコアでも効果が発揮できるのでしょうか? HTとマルチコアだと ソフト側の対応が違いそうな気がしますが。

  • 仮想PCはマルチコアの方がパフォーマンス高い?

    VMWareでマルチコアの仮想マシンを作成できますが、 シングルコアと比べてパフォーマンスは有効なのでしょうか? 私の環境は、 ホストPCは、 ・Core2Duo ・Windows7 Ultimate32bit版 ・メモリ4GB ・VMWare Server2.0.2 です。 Windows7またはXPの仮想マシンを作成するにあたり、 コア数を1か2を選ぶ事が出来ますが大きな差はあるんでしょうか。 開発者がシミュレーションするためにコア2環境を再現できるだけのことであって、 クライアントマシンとして使用する場合、コアを2つにしたからといって特にパフォーマンスが向上することはなく、 むしろ複雑な処理をせずにコアを1つにした方がパフォーマンスが良いと想像するのですが、いかがでしょうか? こんな場合はコアを1つの方が良くて、こんな場合は2つにした方がパフォーマンス向上が期待できる・・・みたいな情報が欲しいです。 詳しい方ご教授願えますでしょうか?