对于每次运行,我想将grad与sum_grad相加。为了防止比赛条件,我用原子。但是编译器说:
error: invalid expression type for ‘#pragma omp atomic’
码
#pragma omp atomic
overall_grad.h += grad.h;
overall_grad.w += grad.w;
数据类型
struct Grad {
Eigen::MatrixXd h;
Eigen::MatrixXd w;
};
omp是否仅支持+ =原始类型?如何将特征矩阵求和?谢谢!
注意,我没有使用Eigen库提供的并行功能,只是对所有样本运行并行,并更新overall_grad。
答案 0 :(得分:1)
是原子操作仅适用于少数原生类型。在您的情况下,您需要使用关键部分:
#pragma omp critical
{
...
}