정상적인 날에 프로그래밍 할 때, 나는 모든 가지가 찍히지 않을 것입니다.for 루프 반복은 분기로 동일합니까?
int retval = do_somting();
if(!retval) { /* Less-than-likely event*/ }
이렇게하면 분기 예측이 최적화되어 CPU 예측기 비트가 "수행하지 않음"으로 설정됩니다. 그러나 for 루프 이후에 예측 변수 비트가 강제로 "take"로 돌아 가게됩니까?
// prediction = "likely take"
if(false) { }
// prediction = "probably take"
if(false) { }
// prediction = "probably not take"
if(false) { }
// prediction = "likely not take"
if(false) { }
/* ... thousands of other if(false) that are speedy-fast */
for(int i = 0; i < 5; i++) { }
// prediction = "likely take"?
나는 그것이 비현실적이고 소문자 최적화 알고 있지만, 헤이, 더 많은 것을 당신은 알고있다.
편집 : GCC가 위의 코드를 모두 지우지 않고 amd64 아키텍처에 대해서만 이야기 해 봅시다. 이 질문이 얼마나 저급인지는 몰랐습니다.
컴파일러와 CPU 최적화로 인해 최적화가 끝날지 확실하지 않습니다. – AntonH
시간을 낭비하지 마십시오. 더 많이 배울수록 덜 알게 될 것입니다 :-) – buffjape
@AntonH 분명히 0 개의 컴파일러 최적화가 수행 된 것처럼 할 수 있습니다. 예를 들어, GCC에서이 코드를 보면 거의 모든 코드를 버릴 것입니다. –