を用いてベクターにアクセスします。計算/ Iは、マトリックスを有する並列プログラミングC++
pMatCache->at(1).push_back((*pValVec1)[j+1]);
pMatCache->at(2).push_back((*pValVec1)[j]);
(*pValVec2)[j] = fmax(*mpK - CalculateS(i, j), *mpD *(0.5 * (*pValVec1)[j+1] +
0.5*(*pValVec1)[j]));
pMatCache->at(0).push_back((*pValVec2)[j]);
pValVec1とpMatCacheはローカル名に対応しています。時点で私は次のことが発生した関数を適用します。 pValVec2は、長さ 'mpStages-1'の別のベクトルです。 「を算出する」以下の通りです:
double AbstractOptionSolver::CalculateS(int n, int i)
{
return pow(*mpUp,i) * pow(*mpDown, n-i) * *mpS;
}
どこプライベート変数「* MPS」、「* mpUp」と「* mpDown」コードの実装時に変更されません。私は何をしようとしていますが、私は以下のように行うことができると仮定並行して、この部分を実行している:
#pragma omp parallel
{
pMatCache->at(1).push_back((*pValVec1)[j+1]);
pMatCache->at(2).push_back((*pValVec1)[j]);
(*pValVec2)[j] = fmax(*mpK - CalculateS(i, j), *mpD *(0.5 * (*pValVec1)[j+1] +
0.5*(*pValVec1)[j]));
}
pMatCache->at(0).push_back((*pValVec2)[j]);
しかし、このコードは、原因「OMP並列」のほかにクラッシュ私はちょうどOMPを持って続けても、プッシュバックのみを含む並列。誰が何が起こっているのか分からないのだろうか?
パラレルプログラミングをさらに理解して、時には特定のアスペクトをパラレルにすると、このコードが不明な理由でクラッシュしたときにいつ/いつ使用できないかを知りたいと思います。誰もがそれについて私を助けるための任意の情報源を持っていれば素晴らしいだろう。
競合状態ここに –
私はちょうど@appleappleの行列の2つの異なる場所にプッシュバックを適用していますか? – mwtmurphy