訪問向量I具有矩陣:計算/使用並行編程C++
std::vector<std::vector<double> >* p_mat_cache =
new std::vector<std::vector<double> >(3, std::vector<double>());
和向量:
std::vector<double>* p_val_vec_1 = new std::vector<double>(*mpStages);
其中 'mpStages' 是一個int值。在某一點上,我應用了以下情況的功能:
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;
}
其中私有變量「*國會議員」,「* 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的兩個不同位置應用推回? – mwtmurphy