2014-02-13 6 views
-1

프로그램을 병렬 처리하는 데 어려움을 겪고 있습니다. 일부 변수 (예 : opencv Mat) 및 함수 run을 포함하는 클래스 Program이 있습니다.OpenMP에서 클래스 멤버 변수의 데이터 공유 특성

class Program { 
    Mat image; 
    ... 
    void run(string inputFileName) { 
     ... 
     someFunctionInAnotherFile(image, ...); // call by reference, image gets manipulated 
    } 
    ... 
}; 

int main() { 
    #pragma omp parallel default(none) shared(inputVector) 
    Program program; 

    #pragma omp for schedule(guided,1) 
    for(unsigned int inputNumber = 0; inputNumber < inputVector.size(); ++inputNumber) { 
    program.run(inputVector[ inputNumber ]); 
} 
} 

변수 program 오른쪽 parallel 지역 내에서 선언 이후 민간해야 하는가? 그러나 회원 image은 어떨까요? 개인 정보도 포함됩니까? OpenMP 스펙에서 동적 변수에 관한 정보 만 찾을 수는 없었습니다 (하지만 어떤 스토리지 클래스가 클래스 멤버입니까?).
run 자체는 다른 .cpp 파일에 정의 된 함수를 호출합니다. 이 함수 내부의 지역 변수는 비공개입니까? 나는 그렇게 희망한다.
큰 문제 : 여러 프로그램 실행간에 결과가 변경되기 때문에 주목할만한 경쟁 조건이 있습니다. 따라서 대답해야 할 질문은 "이 프로그램에서 레이스를 일으키는 어떤 공유 변수가있을 수 있습니까?"와 같은 것이어야합니다.
이 문제를 조사하는 데 도움이 필요하시면 언제든지 알려 주시기 바랍니다. 필요한 경우 추가 정보를 제공해 드리겠습니다.
편집 :
다른 기능이 포함 된 파일에 전역 변수가 포함되어 있음을 발견했습니다. 이것이 문제가 될 수 있습니까? 나는 그렇게 생각한다.

답변

0

내 문제는 실제로 다른 파일에 도입 된 전역 변수입니다. 내 첫 질문에 대한 대답은 다음과 같습니다 :
클래스 멤버 변수는 자신이 속한 개체의 데이터 공유 특성을 상속합니다. 비록 내가 맞다면, 이것은 클래스 인스턴스화를 위해 new을 사용하지 않는 한 유지됩니다.

관련 문제