我有一个矩阵:
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'是一个整数值。在某个点上,我应用了一个函数,其具体如下:
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'的向量。'CalculateS'如下:
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 parallel”仅包含push backs时,这段代码仍然会崩溃。想知道是否有人知道为什么会发生这种情况?
我还在尝试进一步了解并行编程,以知道何时/何时不能在给定的函数中使用它,因为有时使某些方面并行化导致代码出现未知原因的崩溃。如果有人能提供帮助我解决这个问题的资源,那就太好了。