• ベストアンサー

マルチタスクについて

今現在大量の画像を元に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

専門家に質問してみよう