CPU 및 코드 최적화에 대한 자세한 내용은 어셈블리 프로그래밍을 공부하기 시작했습니다. 또한 CPU가 스스로 속도를 높이는 "분기 예측"과 같은 영리한 최적화에 대해서도 읽었습니다."goto"문은 CPU의 "분기 예측"에 어떤 영향을 줍니까?
아직 주제를 잘 모르기 때문에 내 질문이 어리석은 것처럼 보일 수 있습니다.
CPU의 분기 예측과 잘 맞지 않기 때문에 (인터넷상의) goto
문은 프로그램의 성능이 저하된다는 매우 모호한 기억이 있습니다. 그러나 이것은 내가 만든 것으로 실제로 읽지 않은 것일 수도 있습니다.
사실 일 수 있다고 생각합니다. 나에게
int function(...) {
VARIABLES DECLARED HERE
if (HERE IS A TEST) {
CODE HERE ...
} else if (ANOTHER TEST) {
CODE HERE ...
} else {
/*
Let us assume that the CPU was smart and predicted this path.
What about the jump to `label`?
Is it possible for the CPU to "pre-fetch" the instructions over there?
*/
goto label;
}
CODE HERE...
label:
CODE HERE...
}
은 매우 복잡한 작업처럼 보인다 : 나는 그렇게 생각하는 이유
나는 명확하게이 예제 (의사 C에서)를 바랍니다. 그 이유는 CPU가 그곳에 명령을 프리 페치 (pre-fetch) 할 수 있기 위해서 goto
이 inorder로 점프하는 장소를 찾아야하기 때문입니다.
이것에 대해 아는 것이 있습니까?
'goto'는 분기 예측과 무관 한 100 % 무조건 점프입니다. 분기 예측은 while, for, virtual, 함수 포인터 등의 조건부 분기에 대한 것입니다. –
@Mooing 그러나 분기 예측은 조건부 분기에 포함 된 무조건 점프와 어떻게 상호 작용합니까? 그게 내 질문이다. – wefwefa3
분기 예측은 다른 모든 명령어와 마찬가지로 무조건 점프를 처리합니다. 완전히 무시됩니다. 나는 그 질문을 정말로 이해하지 못한다. CPU 파이프 라인이 어떻게 작동하는지 혼동하고 단순히 잘못된 용어를 사용하고 있습니까? "분기 예측 자"는 무엇을 의미합니까? –