• ベストアンサー

デュアルコアCPUのマルチスレッド処理について

デュアルコアCPUにおけるマルチスレッドの処理について質問です。 ハイパースレッドをオフにしデュアルコアの CPU を 4 つ乗せた。 本来であれば、 8 CPU で処理が行なわれるはずであり、別途プロセスが立ち上がっての処理の場合は問題なく処理が行なわれているのだが、マルチスレッドにて処理を行なった場合、各 CPU の片側のみで処理が行なわれてしまう。(タスクマネージャーにて使用率を確認) この現象についてそれぞれのCPUを効率的に使う方法として、何か御座いましたらご教示頂きたく存じます。 宜しく御願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • precog
  • ベストアンサー率22% (966/4314)
回答No.4

> おっしゃるように割合でCPUを振るような設定があれば良いのですが・・・ 割合で振るのは、Win9x系ですけど、使用率100%まで持ってくると間に合わない処理が出てくるので使いづらいですよ。(割り込みは生きてるけど最後はメインプロセスにイベントを投げないといけないので、イベントが溢れる) 最大4core分までしか動かないということなら、リソースの競合ではないかと思います。CPU以外のリソースと、試験条件の差を確認してみてください。 例えば、8プロセスで起動しているときは試験DBが8つなんだけど、1プロセスのときは1つだとするとDBの競合でシリアライズされているのかもしれません。(NWリソース等も要確認) 試験だと、同じデータを叩きがちなので、この点も注意です。 ディスク使用率にも注意してみましょう。アクセスが設計どうり分散されてないのかもしれません。 後は、スループットに注目して、8プロセスのときのパフォーマンスと1プロセスのときのパフォーマンスを比べてみてください。Windowsでは起きないとは思いますが、CPU処理が軽くなったために相対的にディスクの性能不足に陥っているのかもしれません。 その他、可能性としては、DBを使っている場合など、ロック資源のロックの仕方がプロセスを分けたときとスレッドのときで違うのかもしれません。Oracleなどは確か1プロセスで受けるので同じはずなんですけど、内部ロックの競合などかもしれません (中が複雑なんでよくわからない) インストールを正しく行わないとその辺がおかしくなることもあるので要注意です。(エラーも出さず、一見正しく動いてるように見える)

snafkin7
質問者

お礼

丁寧ないつもご回答ありがとうございます。 最大4core分までしか動かないということなら、リソースの競合ではないかと思います。CPU以外のリソースと、試験条件の差を確認してみてください。 →その他のリソースも確認いたします。 DBでは使用していないので、その他のリソースを確認するように致します。 有難うございました。

その他の回答 (3)

  • precog
  • ベストアンサー率22% (966/4314)
回答No.3

>8つのCPUのうち、4つ(デュアルコアの片側のみ)を使い処理をしているようにみえ、その4つの使用率は50~60%であり他の4つはまったく使用していないようです。 あぁ、4パラでは動いてて、8パラにならないという意味でしたか。 であれば、CPU使用率をちゃんと合算してみたほうがいいですね。何かわかるかもしれません。 やってみて欲しいことがあるのですが、コア6つ (or4つ) にしても半分でしか動かないのでしょうか? 常に4つ分で動くなら単に並列度が不足しているのだと思います。 それと、スレッドの並列度 (8パラ → 16パラ等) は変えてみましたか? それで使用率が変わるなら、IO処理の関係でパラレル度が足りないだけか、割合でCPUを振るような設定があるのかもしれません。 または、各スレッドの依存性があるなら、リソースの競合かもしれません。(共有リソースへのアクセスが全スレッドにあり、トランザクション処理時間のうち、共有リソースの占有時間が1/4を越える等) >OSはWindowsでOS側の制限があるのかMSにも問い合わせてみたのですが >そのようなものはないと言われました。 NT系なら、かっちり100%まで振れる筈ですね。 >トレースをみるのが一番確実という事ですね。 すいません、これは全くパラレルになってないという意味かと思って書きました。4パラで動いてるなら、トレースを見る前に出来ることはあります。

snafkin7
質問者

お礼

ご丁寧なご回答本当にありがとうござます! >やってみて欲しいことがあるのですが、コア6つ (or4つ) にしても半分でしか動かないのでしょうか? 常に4つ分で動くなら単に並列度が不足しているのだと思います。 →コア4つ(デュアルコア2WAY)のときは4パラで動きます。コア2つ(デュアルコア1WAY)のときも2つで動きます。6つは試していませんが、アプリか何かで最大CPU4つしか使わないような制限があるのかなぁと考えています。 それと、スレッドの並列度 (8パラ → 16パラ等) は変えてみましたか? それで使用率が変わるなら、IO処理の関係でパラレル度が足りないだけか、割合でCPUを振るような設定があるのかもしれません。 →並列度を変更しても使用率に変化はありませんでした。  おっしゃるように割合でCPUを振るような設定があれば良いのですが・・・

  • precog
  • ベストアンサー率22% (966/4314)
回答No.2

マルチスレッドプログラミングを行っているのだが、処理が並列にならないという解釈で宜しいですか? 危険領域の管理フラグでお互いにロックしちゃってシリアライズされてるんじゃないですか? または、デッドロックからの自動解除の可能性も検討してみてください。 ロックのロジックをレビューして見直してみてください。それで発見できないならライブラリーやDBステートメントに含まれるインプリシットなロックが悪さしていると思われます。スレッドのトレースを取って、どこでコンテクストスイッチングが起きているか見るしかないように思います。机上で発見できないときは、時間はかかりますが、手当たり次第なことをするよりトレースを見るのが確実です。 OSが何かもわからないし、具体的なアドバイスは出来ませんけど。

snafkin7
質問者

お礼

ご回答有難うございます。 ご指摘頂いた解釈の通りです。 8つのCPUのうち、4つ(デュアルコアの片側のみ)を使い処理をしているようにみえ、その4つの使用率は50~60%であり他の4つはまったく使用していないようです。 これを他のCPUに割り振り処理させるようにしたいのですが。 OSはWindowsでOS側の制限があるのかMSにも問い合わせてみたのですが そのようなものはないと言われました。 トレースをみるのが一番確実という事ですね。 また何かございましたらアドバイスください。 有難う御座いました。

  • NogNog
  • ベストアンサー率20% (6/30)
回答No.1

マルチCPU、マルチ・スレッドに対応しているアプリケーションは、一部の科学技術計算用アプリしかないと思います。 複数のアプリを立ち上げれば、OSが勝手に判断して、CPU、スレッドに分散してますよね? 単一のアプリで負荷分散等を行って、効率よく使うためには、自分でプログラムを書くしかないと思います。 自分は、VS2005、VS2008βで、マルチ・スレッド・アプリケーションを書いて、負荷分散してます。

snafkin7
質問者

お礼

ご回答有難うございます。 アプリケーションが、マルチスレッドに対応していない可能が高いという事ですね。 アプリは単一で動いており、このアプリが同時実行スレッドを制限しているのかもしれないですね。 確認してみます。 ありがとうございました。

関連するQ&A

  • デュアルコアCPUはマルチスレッドに最適?

    デュアルコアCPUはマルチスレッドに有効と聞きますが、マルチスレッドとはどういうものでしょうか? (1)単純に、3Dゲームをし、ネットをし、同時にエンコードをし、同時に画像処理し・・・っていう作業の「マルチ」ですか? (2)それとも、単独アプリケーション自体にマルチスレッド対応(?)のものがあるのですか? よく、3Dゲームはシングルスレッドのため、デュアルコアCPUの優位性を引き出せないといいますが、上記(1)の場合に当てはまりますか?

  • マルチスレッドとマルチプロセスの違い

    マルチスレッドとマルチプロセスの違い は例えて言うなら1つのプロセスをデュアルコアで処理するのがマルチスレッドで 2つのプロセスをシングルコアで処理するのがマルチプロセスってことでいいですか?

  • TMPGEnc2.5 マルチスレッド

    TMPGEnc2.5という古いVerの製品を使っています。 マルチスレッドが使えるみたいなのですが、デュアルコアCPUや ハイパースレッディングに対応しているのかわかりません。 ご存知の方は教えてください。 もうひとつ質問なのですが、TMPGEncのマルチスレッド機能を使うには、 インテルとAMDどちらのCPUが効果的なのでしょうか?

  • デュアルコアの使われ方

    デュアルコアCPUで マルチスレッド対応のソフトなら 2つのコアを使うと思うのですが、 非対応のソフトでのソフトで 2つのCPUにまたがって 処理することはあるんですか? もし、またがってしまうことがあるなら マルチスレッド対応ソフトと 変わらないような気がするのですが。

  • マルチタスクについて

    今現在大量の画像を元に3次元形状の再構成を行うプログラムを作成しているのですが、タスクマネージャを見てもHT(ハイパースレッディング)での2スレッドともにCPU使用率が100%にならず効率がとても悪いです。 そこで両方共に100%となるように処理を2スレッド化して行いたいのですが、何か参考になるようなページはあるでしょうか? 実際にマルチスレッド化ができるのならば画像の枚数を分割して並行処理を行いたいと考えています。 よろしくお願いします。

  • マルチスレッド

    ウインドウズプログラミングを始めて1ヶ月弱の初心者です。 色々探してみたのですが、結局良く分かりませんでした。 宜しくお願いします。 以下のリンクにおいて、 http://wisdom.sakura.ne.jp/system/winapi/win32/win143.html 1)主スレッドとは、具体的にソースファイルのどこからどこまでのことを言うのでしょうか? そもそもスレッドとは何でしょうか?関数のことでしょうか? また、タスクとは、実行ファイルと考えて良いのでしょうか? 2)副スレッド(ThreadFunc)を作成すると、主スレッド(WinMain?)と副スレッドで並列処理をするとのことですが、CPUは普通一つしかないので、実際は、主スレッド(WinMain?)と副スレッドを常に切り替えながら動作すると思います。が、ここで疑問なのですが、主スレッドと副スレッドの切り替えはいつ誰が行うのでしょうか?また、切り替えタイミング(例えば1ms毎に切り替えたいとか)は自由に設定出来るのでしょうか? 3)"マルチスレッドは親プロセスのメモリ空間を共有します" とあるのですが、これは CreateThread(NULL , 0 , ThreadFunc , (LPVOID)hWnd , 0 , &dwID) の(LPVOID)hWnd を、副スレッド(ThreadFunc)に引数として渡しているから、つまり、主スレッドと副スレッドは、(LPVOID)hWnd だけがメモリを共有する、ということでしょうか? 主スレッドと副スレッドでメモリを共有すると、どんなメリットがあるのでしょうか? 4)マルチスレッドはこういう時に使うとよい、 というような大まかな判断基準があれば教えて下さい。 分かり辛い質問で申し訳有りません。宜しくお願い致します。

  • CPU デュアルコア

    デュアルコアはファイルの圧縮も高速になりますか? 圧縮ソフトがマルチスレッドに対応していないとあまり意味がないと思いますが。 フリーでマルチスレッドに対応している圧縮ソフトなんてあるのでしょうか? 現在、Athlon64 3500+ でwinrarを試用してrarファイルに圧縮していますが、とても遅いです。 そこで、Athlon64 X2 3800+ にCPUを変更した場合、どの程度の高速化が望めるのでしょう? 調べてみましたが、マルチスレッドに対応した動画圧縮のテストなどではかなりの高速化が望めるようですね。

  • デュアルコアについて

    デュアルコアCPU搭載のパソコンを買ったのですが、タスクマネージャーのCPU使用率の欄が1つしかありません。どうやったら2つでてくるのでしょう?

  • マルチスレッド マルチCPU環境にて

    thread1() { while( 1 ) { procA(); //ある程度時間のかかる処理 countA++; } } thread2() { while( 1 ) { if ( countA>=countB ) { procB(); countB++; } nanosleep( minimum ); //*1 } } thread1のprocAの終了にあわせて、thread2でprocBを処理しています。 *1のsleepを入れない場合、thread2がthread1の待ちの間、1つのCPUを100%使ってしまいます。 procA終了後、procBの処理は、なるべくリアルタイムに近づけたいのですが、 sleepを入れず、1つのCPUを100%使ってProcAの処理を監視した場合とどちらが効率がいいのでしょうか? 2CPUと4CPUでも話は違ってくるのでしょうか。。 procAの終了後にthread2にsignalを送る方法は、今回考えていません。

  • デュアルコアで動いてない。

    CPUをデュアルコアのものに交換しましたが、 タスクマネージャで確認するとデュアルコア製品の場合 CPU使用率グラフが二つ表示されるとのことらしいのですが どうやらデュアルコアとして動いていないようです。 どうすれば、デュアルコアとして認識させることができるのでしょうか? ダウンロードしたりするものがあったり、作業をする必要があるとしたら そこらへんも詳しく教えていただきたいです。 デバイスマネージャでプロセッサを確認すると AMD athlon(tm) 64 X2 Dual Core Processor 3800+ が二つ表示されている状態です。 PC:J6452 emachines 一応デュアルコアでも問題なく動く使用のPCです。 既存CPU:Athlon64 3700+ 変更後CPU:Athlon64 X2 3800