openMP로 프로젝트를 계산하고 있습니다. 이 프로젝트 내가 특히, 계산을 수행해야 DEFAULT_HEIGHT
는 상수이다 nthreads
모든 스레드에서 볼 수있는 변수의 단일 계산
gap = (DEFAULT_HEIGHT/nthreads);
내 병렬 영역 내부 스레드의 수이다. 내 문제는 내가 내부 nthreads
알고 있어야하기 때문에 변수 gap
병렬 영역 외부에서 계산할 수 없다는 것입니다. 그러나 다른 한편으로는 모든 스레드에 대해 gap
을 계산하고 싶지 않습니다. 또한 나는이 같은 코드를 설정할 수 없습니다 :
if(tid==0){
gap = (DEFAULT_HEIGHT/nthreads);
}
내가 모든 스레드의 esecution의 순서를 모르기 때문에를, 그래서 될 수있는 필요가 마지막으로 내 모든 다른 계산을위한 스레드 0 시작 gap
은 잘못 설정됩니다 (설정되지 않기 때문에). 따라서이 문제없이이 계산을 한 번만 수행하는 방법이 있습니까?
감사
그래, 나는 ComicsSansMS의 답변에 대해 같은 생각을한다. 그러나 간격을 공유하고 모든 스레드에 대한 계산을 수행해도 계산 시간이 변경되지는 않습니다. 그러나 나는 내가 당신에게 나의 대답을 줄 결과를 비교하자마자 이것을 시도하고있다. 모든 경우에있어서 –
@Smat에 감사드립니다. 'single' 구조체에 의해 도입 된 오버 헤드가 코드 성능에 중요한 영향을 미치는 경우, 처음에는 OpenMP 병렬화를위한 좋은 후보가 아닙니다. –
여기에서 싱글을 사용하는 것이 필요하거나 도움이됩니까? 경쟁 조건이지만 모든 쓰레드는 같은 값을 쓸 것입니다. 나는 그것들이 동기화를 요구하고 단일을 기다리는 것보다 느리다는 것을 의심한다. 가장 좋은 점은 단지 '갭'을 비공개로 설정하고 각 트레드에서 동일한 값을 계산하는 것입니다. –