Skip to content

Out-of-order execution

비순차적 명령어 처리(Out-of-order execution, 줄여서 OoOE) 또는 비순차적 실행은 고성능 마이크로프로세서가 특정한 종류의 지연으로 인해 낭비될 수 있는 명령 사이클을 이용하는 패러다임이다. 명령 실행 효율을 높이기 위해 순서에 따라 처리하지 않는 기법이며 수많은 프로세서가 채용하고 있다.

기본 개념

프로그래머는 프로그램을 짤 때 자신이 만든 코드가 차례대로 (분기문이 없다면 위에서 아래로) 실행될 것으로 믿는다. 순차 프로세서는 이 순서를 그대로 지켜가며 실행한다. 그러나 어떤 메모리 로드 명령어가 캐시 미스를 겪고 있다고 가정해 보자. 만약 이를 뒤따르는 명령어 가운데 이 로드 명령어와 상관이 없는 것이라면 분명 미리 실행할 수 있을 것이다. 또, 싱글 스레드 프로그램이라도 분명 동시에 처리할 수 있는 명령어가 있다. 이것을 명령어 수준 병렬성(Instruction Level Parallelism, ILP)이라 부른다. 비순차 프로세서는 하드웨어가 직접 실시간으로 ILP를 찾아 명령어 처리율을 극적으로 높인다. 보통 비순차 프로세서는 수퍼스케일러 프로세서 형태로 작성된다. 그래야 동시에 두 개 이상의 병렬로 실행가능한 명령어를 효과적으로 처리할 수 있기 때문이다. 이 명령어 수준 병렬성은 코드 상에 적혀진 순서가 아닌 데이터 혹은 제어의 흐름으로 제약된다. 이를 의존성이라 부르며 대표적으로 데이터 의존성, 컨트롤 의존성, 메모리 의존성이 있다. 요약하면 비순차 프로세서는 데이터 흐름을 찾아 처리하는 프로세서로 볼 수 있다. 그러나 하드웨어의 제약으로 ILP를 찾을 수 있는 범위가 제약적이다. 이 범위를 보통 명령어 윈도(Instruction Window)라 부르기도 한다. 현대 프로세서는 약 100여개 이상의 명령어 속에서 ILP를 찾아 비순차 실행을 한다.

See also

Favorite site