访问向量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