電子書籍の厳選無料作品が豊富!

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

A 回答 (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ですが
スレッドの方がパフォーマンスが良いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/28 04:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!