gcc features likely/unlikely hints 컴파일러가 더 나은 분기 예측으로 기계 코드를 생성하는 데 도움이됩니다.가능성 있음 /있을 법하지 않은 힌트 사용에 대한 성능 테스트 결과가 있습니까?
이러한 힌트를 올바르게 사용했는지 또는 사용하지 못했는지에 대한 데이터가 실제 시스템의 실제 코드 성능에 영향을 줍니까?
gcc features likely/unlikely hints 컴파일러가 더 나은 분기 예측으로 기계 코드를 생성하는 데 도움이됩니다.가능성 있음 /있을 법하지 않은 힌트 사용에 대한 성능 테스트 결과가 있습니까?
이러한 힌트를 올바르게 사용했는지 또는 사용하지 못했는지에 대한 데이터가 실제 시스템의 실제 코드 성능에 영향을 줍니까?
Peter Cordes's answer (this question)에 대한 질문은 분명히 다릅니다.). 최신 CPU는 정적 힌트를 무시하고 동적 분기 예측을 사용합니다.
힌트에 관한 것만은 아닌 것처럼 보입니다 - http://hyhtech.blogspot.com/2008/08/likelyunlikely-macros-in-linux-kernel.html - 언제 기본값으로 설정되는 경로에 어떤 지점 코드가 놓여 지는지 CPU는 처음으로 코드를 실행하며 코드가 어떻게 작동하는지 전혀 알지 못합니다. – sharptooth
나는 그런 특별한 힌트에 대한 철저한 분석을 모른다. 어떤 경우 이건, 매우 CPU에 특정한 것입니다. 일반적으로 가능성 (예 :> 90 %)에 대해 확신하는 경우 개선 사항은 특정 사용 사례와 많이 다르지만 이러한 주석을 추가하는 것이 좋습니다.
Modern Desktop CPU는 매우 좋은 분기 예측을하는 경향이 있습니다. 어쨌든 코드가 핫 경로에 있으면 동적 분기 예측자는 해당 분기가 자체적으로 편향되어 있음을 신속하게 파악합니다. 이러한 힌트는 동적 분기 정보를 사용할 수없는 경우 시작되는 정적 예측자를 돕는 데 주로 유용합니다.
x86에서 정적 예측기는 이 아닌 인 브랜치를 예측하고 (일반적으로 루프를 나타 내기 때문에) 역방향 분기를 수행 할 것으로 예측합니다. 따라서 컴파일러는 예측과 일치하도록 정적 코드 레이아웃을 조정합니다. (이는 또한 인접 캐시 라인에 핫 경로를 추가하는 데 도움이 될 수 있습니다.)
PPC에서 일부 점프 명령어는 가능성 있음을 예측할 비트가 있습니다. 나는 컴파일러가 코드를 재정렬할지 여부를 모른다.
ARM CPU가 분기를 예측하는 방법을 모르겠습니다. 저전력 디바이스로서 덜 정교한 분기 예측을 가질 수 있고 정적 예측은 더 많은 영향을 미칠 수 있습니다.
마이크로 메트릭이 강하게 존재할 것이라고 생각하지 않습니다. 마이크로 최적화이기 때문에 힌트의 정확성이나 빈도, 'if/else' 블록의 바이너리 코드 크기에 따라 달라집니다 어쩌면 달의 위상도 가능합니다. –
기본적으로 이것은 CPU의 분기 예측기에 매핑됩니다. 바이너리 코드의 크기는 부적합하다. – MSalters
성능면에서 나는 벤치 마크가 없지만 gcc에서 그러한 힌트를 사용하여 생성 한 어셈블러가 훨씬 더 명확하다고 말할 수 있습니다. –