장점은 exception이 발생하지 않는 상황에선 예외가 일어났는지 안 일어났는지 branch 명령어로 비교할 필요가 없으니 성능적으로 이득이다. 무슨 말이냐면 소프트웨어 인터럽트 이므로 폴링이 필요가 없다. branch predication을 지원하는 프로세서에서는 예외가 일어난 경우와 안 일어난 경우를 모두 돌려서 하나만 파이프라인의 commit point에서 반영하면 되지만 이 경우 전력소모가 늘어난다.
단점은 exception이 발생하면 소프트웨어 시그널 핸들러로 전환하고 다시 돌아오는 과정에서 컨텍스트 스위칭 코스트가 2번 발생한다. 컨텍스트 스위칭 코스트는 단순 브랜치 비용보다 훨씬 크다.
다만 현대의 프로세서들은 branch prediction 장치가 있으므로 예외가 일어날 일이 드무므로 발생하지 않는 쪽으로 예측하고 돌게되므로 branch 명령어의 오버헤드를 배제시킬 수 있다.
즉 현대에선 exception은 절대 일어나면 안되는 일에 거는일에나 써야할 것이다.
+ 아니면 브랜치 명령어가 많아 branch prediction 유닛의 테이블 엔트리를 줄이고 싶은경우에도 적절하다.
댓글 0