이 질문은 코드 최적화에 관한 것이 아니라 단락 논리 연산자와 정상 논리 연산자의 성능 차이에 대한 기술적 질문으로, 하드웨어 수준에서 수행되는 방법에 따라 내려갈 수 있습니다. .왜 단락 논리 연산자가 더 빠를 것인가?
기본적으로 논리적 인 AND
및 OR
은 1 사이클을 소요하는 반면 단락 회로 평가는 분기를 사용하고 다양한 양의 사이클을 취할 수 있습니다. 이제 분기 예측자는이 평가를 효율적으로 수행 할 수 있음을 알고 있지만 1주기보다 빠른 방법을 보지 못합니까?
예, 오른쪽 피연산자가 비용이 많이 드는 경우 평가하지 않으려 고하면 유용합니다. X & (Y | Z)
과 같은 간단한 조건의 경우 원자 변수라고 가정 할 때 비 단락 논리 연산자가 더 빠르게 수행됩니다. 내가 맞습니까? 순서로 명령을 실행하는 동안 그 점프를 만드는 방법 다른 사람 때문에
나는 (단지 자기 생각, 공식적인 소스) 단락 회로 논리 연산자 사용이 분기 없다고 가정한다?
이것은 새로운 생각은 아니지만 실제로 사이드 바에 * 관련되어있는 몇 가지 관련 답변이 있으며 [컴파일러도 이에 대해 알고 있습니다.] (https://godbolt.org/g/zU34MZ) - '&&'단락은 실제로 단락없이 구현됩니다. – harold
@harold 잘 알고 있습니다. 그래서 내 가정은 옳았다. 좋은 컴파일러는 그것을 돌볼 수 있습니다. –
및 and 및 또는 operation이 두 개 이상의 사이클을 사용하면 파이프 라인은 모든 것을 평균하여 한 사이클로 만듭니다. 마찬가지로 분기 및 분기 예측, 프리 페치 버퍼 등은 주목할만한 실속을 피하기 위해 파이프 가까이에 필요한 데이터를 얻으려고합니다. –