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;
}
うまく機能しているようです: 最初は、すべてのワーカー スレッドがループの繰り返しを実行し、すべてが高速になり、CPU 負荷が 100% になります (クアッドコア マシン上)。ただし、しばらくすると、ワーカー スレッドの 1 つが停止し、(ファイルは)_vcomp::PersistentThreadFunc
から呼び出された関数にとどまり、次に別のスレッドなど... メイン スレッドだけが動作し続けるまで続きます。vcomp90.dll
vctools\openmprt\src\ttpool.cpp
なぜこれが起こるのか誰にも分かりますか?これは、反復の約半分が実行された後に発生し始めます。