2013-01-17 7 views
0

저는 미분 방정식으로 작동하는 프로그램을 병렬 처리하기위한 간단한 OpenMP 코드를 작성하라는 프로젝트를 진행하고 있습니다. 우리는 또한 컴파일러 최적화가 있거나없는 코드의 성능을 테스트하도록 요청 받았다. 나는 옵션컴파일러 최적화가 있거나없는 병렬 OpenMP 코드의 성능 (Sun CC)

-xopenmp -fast 

을 사용 optmized 버전, 그래서 일 CC 컴파일러 작업을 훨씬이었다에 비의 컴파일러 최적화와 실행 시간을 놀라 울 정도로

-xopenmp=noopt 

하지

을 최적화하고있어 다른 경우보다 낮습니다. 놀랍게도 비 최적화 버전에서 스케일링 성능이 훨씬 향상되었습니다. 여기서 성능은 속도 향상 계수, 즉 M 프로세서에서 실행 된 프로그램의 실행 시간 비율이며 프로그램 실행 시간은 1 프로세서에서 실행되었습니다.

최적화 된 버전이 메모리 바인딩 된 반면 최적화되지 않은 버전은 CPU 바인딩 된 사실에 의존 할 수 있음을 암시했습니다. "boundness"가 내 코드의 확장 기능에 어떻게 영향을 미칠지 잘 모르겠습니다. 어떤 제안이 있으십니까?

답변

0

대부분의 멀티 프로세서 시스템에서 여러 CPU 코어는 메모리에 대한 단일 경로를 공유합니다. 주어진 출력 바이너리는 스레드 당 고유의 계산 강도 (액세스 된 바이트 당 계산)를가집니다. 코드를 실행중인 코어 수가 지원되는 메모리 대역폭보다 큰 작동 속도를 초과하면 추가 코어로 스케일링이 중지됩니다. 이런 종류의 문제에 대해 추론하는 방법에 대한 좋은 견해를 얻으려면 '지붕 모델'을 찾아보십시오.

최적화를 사용하면 두 가지 변경 사항을 기대할 수 있습니다. 그 중 하나는 최적화가 메모리 접근을 줄이기 위해 어떤 종류의 루프 차단을 제공한다면 계산 강도가 어느 정도 증가해야한다는 것입니다. 다른 하나는 벡터화 기회와 이후의 명령 선택 및 스케줄링을보다 잘 파악하면 원시 작업 속도가 높아야한다는 것입니다. 이 두 가지는 크기 조정 효율에 반대 효과가 있어야하지만 후자의 경우에는 분명히 우위를 점합니다.