프로그램을 병렬 처리하는 데 어려움을 겪고 있습니다. 일부 변수 (예 : 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 파일에 정의 된 함수를 호출합니다. 이 함수 내부의 지역 변수는 비공개입니까? 나는 그렇게 희망한다.
큰 문제 : 여러 프로그램 실행간에 결과가 변경되기 때문에 주목할만한 경쟁 조건이 있습니다. 따라서 대답해야 할 질문은 "이 프로그램에서 레이스를 일으키는 어떤 공유 변수가있을 수 있습니까?"와 같은 것이어야합니다.
이 문제를 조사하는 데 도움이 필요하시면 언제든지 알려 주시기 바랍니다. 필요한 경우 추가 정보를 제공해 드리겠습니다.
편집 :
다른 기능이 포함 된 파일에 전역 변수가 포함되어 있음을 발견했습니다. 이것이 문제가 될 수 있습니까? 나는 그렇게 생각한다.