2013-12-12 2 views
0

각 실행에 대해 grad로 overall_grad를 합산하려고했습니다. 경주 조건을 막기 위해 원자를 사용했습니다. 그러나 컴파일러는 말한다 :omp to 고유 행렬

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를 업데이트합니다.

답변

1

예 원자 조작은 소수의 원시 유형에만 해당됩니다. 귀하의 경우 중요한 섹션을 사용해야합니다 :

#pragma omp critical 
{ 
    ... 
} 
+0

더 구체적으로 할 수 있습니까? 감사! – user2684645