2012-02-21 3 views
1

リリースモードで、VS2008のx64 "モード"でコードを実行しているとき、非常に奇妙な動作に気付きました。パフォーマンスがOpenMPでx64になる

私はパフォーマンスの向上を追求していますので、プロジェクトをx64プラットフォームに変更しました(私のオリジナルプロジェクトはコンソールアプリケーションWin32として書かれています)。

私は確かにいくつかの改善を得ましたが、実行中に非常に奇妙な動作を見つけました。私はループを並列化するためにOpenMPプラグマを使用します(for)。したがって、私のプログラム(Win32)をクアッドコアi5プロセッサで実行すると、100%のCPU負荷と4つのスレッドが表示されます。大丈夫です。 (3〜5分後)を75%、50%、または25に低下させます(プロジェクトのプロパティ - >設定マネージャ - > ...)。x301 %。しかし、依然として4つの(!)スレッドが実行されています。 (リソースモニターに従って)。

すべての4つのトレッドで合計CPUパフォーマンスの25%しかいかないのはどうですか?各スレッドは個々のコアで動作すると仮定します。

P.S. OS Windows 7 x64およびVS 2008.

ありがとうございます!どんな提案も大歓迎です!

A.K。私は私の質問の答えを知っていますかと思う

を:解決

+1

SSCCEを投稿できますか? – Mysticial

+0

残念ながら、短く自己完結した部分がないので不可能です。大まかに言えば、2つのネストされた "for"ループがあり、各行列セルで2D行列を厄介な積分表現で満たす。 – Pomeron

答えて

0

CPU負荷のわずか25%にすべての4つのトレッドが有効な間は、4つのコアの3が自分の仕事を終え、最後コアを待つことを意味し彼の仕事を終わらせる。おそらく、このコアには計算が残っています(積分計算があり、積分が収束しなければ、ステップサイズを減らして計算を継続しようとします)。

私は確かに分かりませんが、それは私の推測です。

関連する問題