투기적 실행, 예측 실행, 추측 실행(speculative execution)은 컴퓨터 시스템이 필요하지 않을 수 있는 일부 작업을 수행하는 최적화 기술이다. 작업은 실제로 필요한지 여부를 알기 전에 완료된다. 이는 필요하다고 알려진 후에 작업을 수행하여 발생해야 하는 지연을 방지하기 위한 것이다. 결국 작업이 필요하지 않은 것으로 판명되면 작업으로 인해 변경된 대부분이 되돌려지고 결과가 무시된다.
목표는 추가 리소스를 사용할 수 있는 경우 더 많은 동시성을 제공하는 것이다. 이 접근 방식은 파이프라인 프로세서의 분기 예측, 값 지역성을 활용하기 위한 값 예측, 메모리 및 파일 프리페치, 데이터베이스 시스템의 낙관적 병행 수행 제어 등 다양한 영역에서 사용된다.[1][2][3]
투기적 멀티스레딩은 투기적 실행의 특별한 경우이다.
관련 개념
느긋한 실행
느긋한 실행은 열정적 실행의 반대이며 추측을 포함하지 않는다. 느긋한 언어인 하스켈 프로그래밍 언어의 구현에 투기적 실행을 통합하는 것이 현재 연구 주제이다. 언어의 변형인 이거 하스켈(Eager Haskell)은 투기적 실행이라는 아이디어를 중심으로 설계되었다. 2003년 박사 논문에서는 GHC가 낙관적 실행이라는 잘못된 선택이 있을 경우 철회하는 낙태 메커니즘(abortion mechanism)을 갖춘 일종의 투기적 실행을 지원하도록 했다. 이는 너무 복잡하다고 생각되었다.
같이 보기
각주