2011-09-30 1 views
7

gcc features likely/unlikely hints 컴파일러가 더 나은 분기 예측으로 기계 코드를 생성하는 데 도움이됩니다.가능성 있음 /있을 법하지 않은 힌트 사용에 대한 성능 테스트 결과가 있습니까?

이러한 힌트를 올바르게 사용했는지 또는 사용하지 못했는지에 대한 데이터가 실제 시스템의 실제 코드 성능에 영향을 줍니까?

+1

마이크로 메트릭이 강하게 존재할 것이라고 생각하지 않습니다. 마이크로 최적화이기 때문에 힌트의 정확성이나 빈도, 'if/else' 블록의 바이너리 코드 크기에 따라 달라집니다 어쩌면 달의 위상도 가능합니다. –

+0

기본적으로 이것은 CPU의 분기 예측기에 매핑됩니다. 바이너리 코드의 크기는 부적합하다. – MSalters

+0

성능면에서 나는 벤치 마크가 없지만 gcc에서 그러한 힌트를 사용하여 생성 한 어셈블러가 훨씬 더 명확하다고 말할 수 있습니다. –

답변

3

Peter Cordes's answer (this question)에 대한 질문은 분명히 다릅니다.). 최신 CPU는 정적 힌트를 무시하고 동적 분기 예측을 사용합니다.

+1

힌트에 관한 것만은 아닌 것처럼 보입니다 - http://hyhtech.blogspot.com/2008/08/likelyunlikely-macros-in-linux-kernel.html - 언제 기본값으로 설정되는 경로에 어떤 지점 코드가 놓여 지는지 CPU는 처음으로 코드를 실행하며 코드가 어떻게 작동하는지 전혀 알지 못합니다. – sharptooth

0

나는 그런 특별한 힌트에 대한 철저한 분석을 모른다. 어떤 경우 이건, 매우 CPU에 특정한 것입니다. 일반적으로 가능성 (예 :> 90 %)에 대해 확신하는 경우 개선 사항은 특정 사용 사례와 많이 다르지만 이러한 주석을 추가하는 것이 좋습니다.

Modern Desktop CPU는 매우 좋은 분기 예측을하는 경향이 있습니다. 어쨌든 코드가 핫 경로에 있으면 동적 분기 예측자는 해당 분기가 자체적으로 편향되어 있음을 신속하게 파악합니다. 이러한 힌트는 동적 분기 정보를 사용할 수없는 경우 시작되는 정적 예측자를 돕는 데 주로 유용합니다.

x86에서 정적 예측기는 이 아닌 인 브랜치를 예측하고 (일반적으로 루프를 나타 내기 때문에) 역방향 분기를 수행 할 것으로 예측합니다. 따라서 컴파일러는 예측과 일치하도록 정적 코드 레이아웃을 조정합니다. (이는 또한 인접 캐시 라인에 핫 경로를 추가하는 데 도움이 될 수 있습니다.)

PPC에서 일부 점프 명령어는 가능성 있음을 예측할 비트가 있습니다. 나는 컴파일러가 코드를 재정렬할지 여부를 모른다.

ARM CPU가 분기를 예측하는 방법을 모르겠습니다. 저전력 디바이스로서 덜 정교한 분기 예측을 가질 수 있고 정적 예측은 더 많은 영향을 미칠 수 있습니다.