투기적 실행 (speculative execution)

컴퓨터과학·AI
한 줄 정의: 결과가 확정되기 전에 미리 명령을 실행해 두고 아니면 되돌리는 프로세서 최적화 기법입니다.

쉽게 풀면

프로세서는 기다리는 시간을 싫어해서, 아직 확정되지 않은 조건의 결과를 추측해 그 뒤의 일을 먼저 해 둡니다. 추측이 맞으면 이미 끝난 일이라 시간을 크게 아끼고, 틀리면 해 둔 결과를 버리고 올바른 경로로 다시 갑니다. 버려지는 계산이 있더라도 평균적으로는 이득이기 때문에 현대 고성능 프로세서의 기본 동작입니다.

왜 중요한가

메모리 접근 지연과 분기 대기를 감추어 명령어 수준 병렬성을 끌어내는 핵심 수단으로, 오늘날 프로세서 성능의 상당 부분이 여기서 나옵니다. 동시에 2018년 스펙터·멜트다운 취약점이 드러나면서 성능 최적화가 보안 전제를 무너뜨릴 수 있음을 보여 준 사례가 되었습니다. 컴퓨터 구조와 시스템 보안이 만나는 대표적 주제입니다.

논문에서는 이렇게 쓰입니다

"투기적 실행 중 접근된 데이터가 캐시에 남아 권한 검사 이전 정보가 부채널로 유출될 수 있음이 보고되었다."

되돌려진 계산이라도 캐시에 흔적을 남겨 비밀 정보가 새어 나갈 수 있다는 지적입니다.

조금 더 깊게 보면

분기 예측 결과를 따라 명령을 미리 실행하되, 결과는 재정렬 버퍼에 임시로 보관했다가 확정된 순서대로만 확정 반영합니다. 그래서 아키텍처 상태는 항상 프로그램 순서대로만 변하지만, 캐시나 예측기 같은 미시적 상태는 되돌려지지 않은 채 남습니다. 이 비대칭이 스펙터 계열 공격의 근원이며, 대응책으로 투기 장벽 명령, 간접 분기 제어, 주소 공간 분리 등이 도입되었고 대부분 성능 비용을 수반합니다.

주의할 점

비순차 실행이 의존성이 해소된 명령의 실행 순서를 바꾸는 기법이라면, 투기적 실행은 실행 여부 자체가 아직 확정되지 않은 명령을 앞당겨 수행한다는 점에서 다릅니다. 이름의 ‘투기’는 금융적 의미가 아니라 확정 전 선행 수행을 뜻합니다.

관련 용어