• ベストアンサー

マルチタスクについて

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

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

処理系が書かれていませんが、とりあえずWindowsを前提に話をします。 WinAPIのCreateThreadを使って処理を分割する。それだけです。 http://www.doumo.jp/postgretips/tips.jsp?tips=89 あと気をつけなければいけないのは 排他処理です。平行処理をすると二つのスレッドが同時に通ると都合の 悪い箇所ができるのでその際は CriticalSectionやCreateSemaphore、CreateMutex等のAPIを使います。 http://www.doumo.jp/postgretips/tips.jsp?tips=104 http://www.doumo.jp/postgretips/tips.jsp?tips=92 http://www.doumo.jp/postgretips/tips.jsp?tips=91 例えばC++のstl等は内部がスレッドセーフなつくりではないため、 要素を追加する時などには必ず排他処理が必要になります。 マルチタスクというかマルチスレッドという方が適切だと思いますが デュアルコアならともかく HTはあくまで一つのコアで空き時間を割り当てるだけなので 目に見える速度効果は望めないと思います。 ※UNIX系の場合はpthreadで検索してみてください。マルチタスクならforkですが スレッドの方がパフォーマンスが良いです。

noconan
質問者

お礼

返信ありがとうございました。 これらのサイトを参考に処理を行っていこうと思います。詳しい説明ありがとうございました^^ 処理系はWindowsですが、本当のことを言うとCPUはXeonであり論理方CPUが4つ(CPU2つ分)存在するので、個々に並行処理をさせようと考えていましたが、最初は2スレッドとして行ってみようと思い質問してみました。 パフォーマンスはあんまり望めませんか・・・残念ながらUNIX系は入っていません。RedHatでも入れようかな・・・・・ でもいい経験になると思います。  ありがとうございました^^

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • Core i3 と i5の違いが解る方教えて下さい

    Core i3が2COREで、ハイパースレッドにより 合計4スレッド。 Core i5が4COREで、ハイパースレッディング無しで、 合計4スレッド。 自分の手前のクライアントで画像処理のソフトウェアを動かしたりする場合と、 サーバーPCとして使う場合では、CPUの使い方にどの様な違いが出るのでしょうか? 画像処理の命令セットがCPUに組み込まれているらしいのは、知っています。

  • Hyper-Threading Technologyって

    (1)Hyper-Threading Technology対応の2.8Cを使っています。聞いた所によると、タスクマネージャで、パフォーマンスを見ると、CPUが二つに見えるように出来る。との事ですが、どうすれば、その様になるのでしょう? (2)また、そうした場合、二つの処理を同時に行う時処理が早くなる、しかし、対応ソフトなどではない場合さほど変化は感じられないとも、聞きましたが、どうなんでしょう?

  • 【ハイパースレッディングが認識しない】

    システムInfo CPU: Intel Core i7 950(4Core) Mother: ASUS P6X58D-E OS: Windows7 Professional(SP1) 表題の件につきまして、BIOS上ではハイパースレッディングが有効になっているのに、タスクマネージャー上では4コア分のグラフしか表示されないのですが、デバイスマネージャー上ではCPUが8つとも表示されている状態です。(正常動作しているとのことです。) 以前はタスクマネージャー上で8スレッド分のグラフが表示されていたと認識しております。(日頃タスクマネージャーを常に起動する訳ではございませんでしたので、いつからこの状態かは不明です。) またBIOS、CPU(Chip Set)ドライバーにつきましては、最新バージョンになっているのを確認済みです。 ここで下記の質問です。 1. この場合、ハイパースレッディングが有効になっているのでしょうか?また、併せてハイパースレッディングの有効無効を上記以外で確認する方法はあるのでしょうか?(極力、専用アプリケーションをインストールしない方向でお願いできれば幸いです。) 2. 上記症状につきまして、考えられる原因をお教えいただけますでしょうか?また、その場合の改善方法も併せてご教授願います。 何卒、宜しくお願いいたします。

  • WIN2kとハイパースレッディング設定CPUを使っている方に・・・

    http://momokans.hp.infoseek.co.jp/makepc/os.htm ココ↑に Pentium4のHyper-Threadingを利用したい場合必ずOSはWindowsXPになります。 Windows2000はHyper-Threadingに非対応で問題なく動いているように見えますがHyper-Threadingは ソフトが最適化しないと逆に遅くなったりします。 OS上で動くアプリケーションに関しては非対応でも問題なく動作しますが、基幹ソフトであるOSは推奨されていない ことは避けるべきです。 と書いてあります。 実際にHT設定ON、OFFを比較してOFFの方が処理が速いと感じた事はありますか。(特に動画の再圧縮のような作業において) WIN2KといえどもHT設定にすれば、イロイロ差し引きした結果少しは速くなる!というならHTができるCPUにしたいんですが。 あと、その比較の時使ったソフトはHT対応かも教えてください。どうぞよろしくおねがいします。

  • ハイパースレッディングで複数の数値計算を完了する時間は速くなるのでしょ

    ハイパースレッディングで複数の数値計算を完了する時間は速くなるのでしょうか? 例えば、Core i7 だと ・コアが4つ ・スレッドが8つ(1コア2スレッド) となっています。 時間のかかる数値計算のプログラム(ロケットの軌道の計算など)をパラメータ(初期条件など)を変えて8つ計算したい時、 (1)8つの計算を一気に計算する のと (2)4つずつ、2回に分けて計算する のではどちらが効率がよい、あるいは、速く終了するでしょうか? ハイパースレッディングについての説明を読みました。あまり分かり易いものがなかなか見つからなかったのですが、↓ここを見て何となく原理が分かりました。 http://shop.tsukumo.co.jp/special/030626a/ これをみると、作業をする人(?)がハイパースレッドだとスレッド倍になるので、(1)のように、1つのコアに1つの作業をさせるより2つの作業をさせた方が良いのかなとも思います。 よろしくお願いします。

  • デュアルプロセッサーとの違いは

    HT(ハイパースレッディング)対応のMPUと、デュアルプロセッサーとの違いは、なんでしょうか? 仮に、同じ処理速度で、ベースクロックも同じタイプの、HT型MPUとデュアルプロセッサーでは、処理速度と総合的な機能の差は、どうなるんでしょうか?

  • ハイパー・スレッディング・テクノロジで

    http://support.intel.co.jp/jp/support/platform/ht/faq.htm#comfirm (ハイパー・スレッディング・テクノロジが有効でかつ正常に機能していることは、どうすれば確認できますか?)  を見てタスクマネージャを確認したのですが 私のパソコンでは、CPU 使用率の履歴内にCPUが2つ表示されていません。(一つだけです) デバイスマネージャではプロセッサ内にプロセッサが 2つが表示されてはいます。 BIOS 設定画面では、Enable になっています。 これで正常なのでしょうか? インテルペンティアム4プロセッサ540 3.2Ghz よろしくおねがいします。

  • 「スレッド」の概念について質問

    スレッドとは、「1つのプログラムにおいての1つの処理(メソッド)」のことで、これはシングルスレッドともよぶ。 マルチスレッドは、複数の処理を「同時に実行する」こと。但し、実際にはcpuは1つなので、擬似的に複数処理をしているようにみせかけている。 例えば、マルチスレッドは、ブラウザに例えれば、画像をダウンロードしながら、画面をスクロールしたりというように、複数の処理を同時に実行している。そして、この処理の1つ1つがスレッド。 こういうことでしょうか?

    • ベストアンサー
    • Java
  • ハイパースレッドについて

    現在、Corei3を使っています。 2コア4スレッドですが、タスクマネージャーで見ると 1、3番目のコアだけがよく動いています。 ハイパースレッド(論理コア、2,4番目)は物理コアが負荷で耐え切れなくなったら 動き始めるのですか?