OpenMPを使用して並列化したシリアルアプリケーションがあります。ワーカースレッドは一瞬のうちに作業を中止します
うまく機能しているようだ#pragma omp parallel for default(shared)
for (int i = 0; i < numberOfEmitters; ++i)
{
computeTrajectoryParams* params = new computeTrajectoryParams;
// defining params...
outputs[i] = (int*) ComputeTrajectory(params);
delete params;
}
:最初に、私のすべてのワーカースレッドがループの繰り返しを実行し、すべてが速くなって、私は100%のCPU負荷を持っている私は単に私のメインループに以下の追加しました(クアッドコアマシン上)。唯一のメインスレッドが動作したままになるまでしかし、...など、その後、別の、一瞬の後、ワーカースレッドの1が停止し、vcomp90.dll
から_vcomp::PersistentThreadFunc
(ファイルがvctools\openmprt\src\ttpool.cpp
である)と呼ばれる関数内に留まります。
これはなぜ起こるのでしょうか?これは、反復の約半分が実行された後に開始されます。
ありがとう、これはまさに問題でした!私はプラグマを '#pragma omp parallel for default(shared)schedule(dynamic)'に変更しました。これで期待通りに動作します:100%のCPU負荷があります!再度、感謝します ! – Wookai
うわー。絶対に正しいとupVoteはありません。ここに私のものがあります。 –
私はupvoteしたかったが、私のクォータはその日に失効したことを知っています。私は今日戻った;)! – Wookai