문제

이 컴파일러 기능을 아는 사람이 있나요?GCC가 지원하는 것 같습니다.어떻게 작동하나요?잠재적 이득은 무엇입니까?어떤 경우에 좋은가요?내부 루프?

(이 질문은 일반적인 최적화에 관한 것이 아니라 구체적입니다. 감사합니다)

도움이 되었습니까?

해결책

각 코드 경로가 사용되는 횟수를 계산하기 위해 추가 코드를 배치하여 작동합니다.두 번째로 컴파일할 때 컴파일러는 이전에는 추측만 할 수 있었던 프로그램 실행에 대해 얻은 지식을 사용합니다.PGO가 작업할 수 있는 몇 가지 작업은 다음과 같습니다.

  • 호출 빈도에 따라 어떤 함수를 인라인할지 여부를 결정합니다.
  • 한 방향 또는 다른 방향으로 진행되는 호출의 비율을 기반으로 예측해야 하는 "if" 문의 분기에 대한 힌트를 배치하는 방법을 결정합니다.
  • 루프가 호출될 때마다 수행되는 반복 횟수에 따라 루프를 최적화하는 방법을 결정합니다.

테스트하기 전에는 이러한 것들이 얼마나 도움이 될 수 있는지 결코 알 수 없습니다.

다른 팁

PGO는 내가 작업 중인 프로젝트인 x264를 컴파일할 때 약 5%의 속도 향상을 제공하며 이를 위한 내장 시스템이 있습니다(make fprofiled).어떤 경우에는 무료 속도 향상이 가능하며 x264와 달리 손으로 작성한 어셈블리로 덜 구성된 응용 프로그램에서 더 도움이 될 것입니다.

Jason의 조언이 옳습니다.당신이 얻을 수 있는 최고의 속도 향상은 O(n2) 알고리즘이 내부 루프 어딘가에 들어가거나 비용이 많이 드는 함수 외부의 특정 계산을 캐시할 수 있다는 것입니다.

PGO가 실행할 수 있는 미세 최적화와 비교하면 이것이 가장 큰 승리자입니다.해당 수준의 최적화를 완료하면 PGO가 도움을 줄 수 있습니다.하지만 우리는 운이 별로 없었습니다. 계측 비용이 너무 커서 애플리케이션이 사용할 수 없을 정도로 느려졌습니다(몇 자릿수 정도).

Intel VTune을 프로파일러로 사용하는 것을 좋아하는 이유는 동작을 너무 많이 변경하는 계측 프로파일러에 비해 비침습적이기 때문입니다.

최적화의 재미있는 점은 예상치 못한 곳에서 속도 향상이 발견된다는 것입니다.

속도 문제가 어디에 있는지 추측하기보다는 프로파일러가 필요한 이유이기도 합니다.

프로파일러로 시작하는 것이 좋습니다(gperf GCC를 사용하는 경우) 몇 가지 일반적인 작업을 통해 애플리케이션을 실행한 결과를 살펴보기 시작하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top