← 질문 목록
#328깊이 0
조건문 하나가 성능을 좌우하는 경우가 있는가?
있다. CPU는 조건의 답이 나오기 전에 한쪽을 골라 미리 일을 진행하는데, 틀리면 그동안 한 것을 버린다.
예측
진행
참일 것 같다고 보고 미리 실행한다
진행
확정
맞았다. 그대로 이어 간다
되돌림
틀렸다. 미리 한 것을 버린다
되돌림
예측 (앞의 상태로 돌아갑니다)
다시 채우고 처음부터 간다
틀렸을 때 버리는 것이 손해다. 채워 둔 것을 비우고 다시 채워야 한다. 몇 사이클을 잃는지는 CPU마다 다르지만 대개 열 몇에서 수십이다.
규칙적인 조건은 잘 맞힌다. 정렬된 데이터를 훑으며 기준값과 견주면 한동안 같은 쪽만 나오므로 거의 안 틀린다.
같은 데이터를 정렬만 해도 빨라지는 유명한 현상이 여기서 나온다. 하는 일은 똑같은데 예측이 맞는 비율이 달라진다.
분기를 아예 없애는 길도 있다. 조건 대신 산술로 고르면 예측할 것이 없다. 다만 읽기 어려워지므로 재 보고 정한다.