OpenMP를 사용하여 응용 프로그램을 작성했습니다. 나는 두 개의 섹션을 만들어 두 개의 객체를 넣었습니다. 그들 각각은 거의 22-23 초를 실행하는 방법을 호출합니다. 두 섹션은 모두 독립적입니다.OpenMP - 섹션
num_threads(1)
으로 설정하면 응용 프로그램 실행에 46 초가 걸립니다. 2 × 23 = 46이기 때문에 괜찮습니다.
내가 num_threads(2)
으로 설정하면 응용 프로그램을 실행하는 데 35 초가 걸리지 만 ~ 25 초가 걸렸습니다.
내가 말했듯이 섹션은 독립적입니다. cm1
및 cm2
은 외부 변수를 사용하지 않습니다. 그래서, 누군가 내 앱이 내가 예상했던 것보다 10 초 더 느린 이유를 말할 수 있습니까? 낮은 수준의 동기화가 있습니까?
t1 = clock();
#pragma omp parallel num_threads(2)
{
#pragma omp sections
{
#pragma omp section
{
Cam cm1;
cm1.solveUsingCost();
}
#pragma omp section
{
Cam cm2;
cm2.solveUsingTime();
}
}
}
t2 = clock();
'clock()'은 실제 시간 (또는 벽시계)이 아닌 CPU 시간을 측정한다는 것을 알고 계실 것입니다. –
여기에 상관 없다고 생각합니다. 나는 스톱워치를 사용할 수 있었고 여전히 차이점을 볼 수있었습니다. – user1475838
다른 사람들이 귀하의 질문을 읽는 것에 대한 언급입니다 - omp_get_wtime() 대신에'clock()'을 사용하는 대부분의 사람들은 OpenMP를 사용하여 속도가 향상되는 것을 보지 못합니다 :) Intel VTune (상용 라이센스 필요) 또는 하드웨어 성능 카운터를 기록하는 유사한 성능 도구는 성능 문제를 스레딩하는 데 많은 도움이 될 수 있습니다. –