モンテカルロ法を使用して確率微分方程式をシミュレートしています。これは、異なる実現が互いに依存しないため、原則として openMP に完全に適しています。残念ながら、openMP をオンにするとすぐに間違った結果が生成されるコードの問題に直面しています。それがなければ、それは完全にうまく機能します。私の「クリティカル」ループは次のようになります。
double price = 0.0
#pragma omp parallel for private(VOld, VNew)
for (long i = 0; i < NSim; ++i){
VOld = S_0;
for (long index = 0; index < Nt; ++index){
VNew = VOld + (dt * r * VOld) + (sqrdt * sig * VOld * dW());
VOld = VNew;
}
double tmp = myOption.PayOff(VNew);
price += (tmp)/double(NSim);
}
助けていただければ幸いです。前もって感謝します :-)