2011-09-21 5 views
4

C에서 switch 문을 사용하면 (점프 테이블을 사용한다고 가정) x86 프로세서의 파이프 라인이 비어 있습니까? 그 다음에 실행할 명령어를 알기 위해 테이블 ​​조회의 결과가 필요하기 때문에 그렇게 생각할 수 있습니다. 파이프 라인이 완전히 비워지지 않을만큼 일찍 그 결과를 되돌릴 수 있습니까?C에서 switch 문을 사용하여 x86 파이프 라인을 비 웁니다.

+1

일반적으로 조건부 점프는 파이프 라인을 스 래시 (thrash)합니다. –

답변

7

점프 테이블이 반드시 파이프 라인을 비우는 것은 아닙니다. 간접 분기는 현대 프로세서에서 예측되며 분기 예측자는 예상보다 나은 작업을 수행합니다. 분명히 정확하게 예측 된 간접 분지는 실속을 일으키지 않습니다.

전혀 분기하지 않는 것이 바람직하지만 종종 불가능합니다 (또는 순 손실로 인한 많은 오버 헤드가 발생 함). 점진표를 일련의 조건부 분기로 대체하는 것이 때로는 유익하지만 대체 시퀀스의 분기 수가 합리적으로 작은 경우에만 유용합니다.

관련 문제