맨위로가기

비순차적 명령어 처리

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

비순차적 명령어 처리는 명령어의 실행 순서를 미리 정해진 프로그램 순서와 다르게 처리하여, 프로세서의 성능을 향상시키는 기술이다. 최초의 비순차적 명령어 처리 기기는 1964년의 CDC 6600이며, 1990년 POWER1 프로세서에서 상용화되었다. 이 기술은 명령어 수준의 병렬성을 활용하여 데이터 의존성으로 인한 지연을 줄이고, 레지스터 리네이밍, 예약 스테이션, 재정렬 버퍼 등의 기술을 사용한다. 하지만 복잡성 증가, 전력 소비, 상호 의존적인 코드에서의 성능 저하, 분기 예측 실패 등의 한계가 있으며, 2018년에는 멜트다운, 스펙터와 같은 보안 취약점이 발견되기도 했다.

더 읽어볼만한 페이지

  • 명령어 처리 - 멀티스레딩
    멀티스레딩은 프로세스 내에서 여러 스레드를 동시 실행하여 처리 능력을 향상시키는 기술로, 응답성 향상과 자원 공유 등의 장점이 있지만, 자원 간섭과 소프트웨어 복잡성 증가 등의 단점도 존재하며, 다양한 모델과 구현 방식, 스레드 스케줄러, 가상 머신 활성화 가능성 등을 고려해야 한다.
  • 명령어 처리 - 마이크로아키텍처
    마이크로아키텍처는 명령어 집합 아키텍처를 구현하는 프로세서의 구성 요소, 상호 연결, 작동 방식을 포괄하는 개념으로, 동일 ISA에서 반도체 기술 발전과 새로운 구조 및 회로를 통해 성능 향상을 가능하게 한다.
비순차적 명령어 처리
개요
유형컴퓨팅 패러다임
목적컴퓨터 연산 효율성 향상
상세 내용
설명비순차적 명령어 처리는 명령어의 실행 순서를 프로그램에 명시된 순서와 다르게 재배열하여 명령어의 실행 속도를 향상시키는 CPU 설계 기술임. 데이터 의존성이 없는 명령어를 먼저 실행하여 전체적인 처리량과 효율성을 증가시킴.
특징명령어가 원래 프로그램 순서대로 실행되지 않을 수 있음
데이터 의존성이 없는 명령어는 순서에 상관없이 먼저 실행됨
전체적인 처리량과 효율성 향상
관련 용어순서대로 실행 (In-order execution)
동적 스케줄링
역사
개발1960년대 IBM의 System/360 Model 91에서 처음 사용됨. 로버트 토마술로가 개발한 토마술로 알고리즘을 기반으로 함.
발전현재 대부분의 고성능 마이크로프로세서에서 사용되는 핵심 기술 중 하나임.

2. 역사

비순차적 명령어 처리는 1970년대와 1980년대 초반 컴퓨터 구조의 주요 연구 분야였던 데이터 플로우 아키텍처의 제한된 형태이다. 최초로 비순차적 명령어 처리를 수행한 기기는 1960년대의 CDC 6600이며, 스코어보딩 기법을 통해 WAW(Write-After-Write) 및 WAR(Write-After-Read) 문제를 해결했지만, 레지스터 리네이밍은 수행하지 않았다.[5] 이후 IBM System/360 Model 91(1966년)이 토마술로 알고리즘을 도입하였다.[6] 스코어보딩과 토마술로 알고리즘은 이 분야의 기본적인 아이디어이다.

1980년대에는 데이터 플로우 머신이 컴퓨터 아키텍처 연구의 주된 분야였다. 실제 컴퓨터에서는 0으로 나누기나 페이지 폴트와 같은 예외가 발생하는데, 비순차적 명령어 처리 중 이러한 예외를 다루는 것은 어려운 문제였다.

비순차적 명령어 처리를 상용화한 최초의 마이크로프로세서는 1990년에 발표된 POWER1이다. x86에서는 P6 마이크로아키텍처(펜티엄 프로, 1995년) 및 Cyrix 6x86(1995년)이 최초이다. 그 외에도 IBM모토로라의 PowerPC 601(1992/1993), 후지쯔와 HAL의 Sparc641(1995), 휴렛 팩커드PA-8000(1996), MIPS의 MIPS R10000(1996), AMD K5(1996), DEC 알파의 21264(1998) 등이 있다.

썬의 Ultra SPARC(SPARC T3 이전), 인텔휴렛 팩커드가 공동 개발한 아이테니엄, 트랜스메타의 Crusoe 등은 비순차적 명령어 처리를 채택하지 않았다.

비순차적 명령어 처리는 프로세서 소자 수 증가 및 전력 소비 증가, 상호 의존성이 높은 코드에서의 성능 저하 등의 문제점이 있어, 아톰이나 ARM과 같이 비순차적 명령어 처리 기능을 생략하고 멀티 코어와 클럭 향상을 조합하는 기법이 주류가 되고 있다.

2. 1. 초기 슈퍼컴퓨터

최초로 비순차적 명령어 처리를 적용한 기기는 제임스 E. 손턴이 설계한 CDC 6600(1964년)이다. 이 기기는 명령어 간 충돌을 해결하기 위해 스코어보딩 기법을 사용했다.[5] CDC 6600은 소스 피연산자(읽기) 레지스터가 아직 실행되지 않은 이전 명령어에 의해 기록되지 않고(진정한 종속성), 대상(쓰기) 레지스터가 아직 실행되지 않은 이전 명령어에서 사용되지 않는 경우(거짓 종속성)에 명령어를 실행할 수 있었다. 그러나 CDC 6600은 거짓 종속성(중단)으로 인한 실행 유닛의 파이프라인 정지를 피할 수 있는 수단이 부족했다. 즉, 쓰기 후 쓰기(WAW) 및 읽기 후 쓰기(WAR) 충돌을 완전히 해결하지 못했다.[5]

약 2년 후, IBM System/360 Model 91(1966년)은 토마술로 알고리즘을 사용하여 레지스터 이름 변경을 도입했다.[6] 이를 통해 거짓 종속성(WAW 및 WAR) 문제를 해결하여 완전한 비순차적 실행을 가능하게 했다. Model 91은 레지스터 이름 변경을 ''공통 데이터 버스''(CDB)를 통해 구현했으며, 이를 통해 여러 사이클 동안 물리적 아키텍처 레지스터를 사용하지 않고도 명령어를 처리할 수 있었다. 또한, 동일한 실행 유닛 내에서도 비순차적으로 명령어를 실행할 수 있었으며, 이는 예약 스테이션을 통해 가능했다.[12] Model 91은 이전 로드 및 저장보다 먼저 로드 및 저장을 재정렬하여 실행할 수도 있었다.[12] 그러나 부동 소수점 레지스터만 이름이 변경되었기 때문에, 고정 소수점 계산에서는 CDC 6600과 동일한 WAW 및 WAR 제한이 있었다.

2. 2. 정확한 예외 처리

정확한 예외를 가지려면, 예외 발생 시 프로그램 실행의 적절한 순서 내 상태가 사용 가능해야 한다. 1985년 제임스 E. 스미스와 앤드루 R. 플레즈쿤은 비순차적 명령어 처리에서 예외를 잘 처리하는 기법을 제시하였다.[8]

실제 컴퓨터에서는 0으로 나누기나 페이지 폴트와 같은 예외가 발생하는데, 이러한 예외에 대처하는 것은 어려운 문제였다. 이 주제에 대한 중요한 학술 연구는 예일 패트가 HPSm 시뮬레이터를 통해 주도했다.[10]

2. 3. 분리형 아키텍처

제임스 E. 스미스는 서로 다른 실행 유닛이 서로, 메모리, 프론트 엔드 및 분기에서 더 독립적으로 작동하도록 하는 방법에 대해 연구했다.[11] 그는 이러한 아이디어를 Astronautics ZS-1(1988)에 구현했는데, 정수/로드/저장 파이프라인을 부동 소수점 파이프라인에서 분리하여 파이프라인 간 재정렬을 허용했다. ZS-1은 또한 이전 저장보다 먼저 로드를 실행할 수 있었다. 그의 1984년 논문에서 그는 정수/메모리 파이프라인에 대해서만 정확한 예외를 적용하는 것이 많은 사용 사례에 충분하며, 이는 심지어 가상 메모리도 허용한다고 언급했다. 각 파이프라인에는 명령어 디코더에서 분리되어 프론트 엔드의 중단을 방지하기 위한 명령어 버퍼가 있었다. 메모리 접근을 실행에서 더 분리하기 위해 두 파이프라인 각각은 제한적인 레지스터 이름 변경을 효과적으로 수행하는 두 개의 주소 지정 가능한 큐와 연결되었다.[12] 비슷한 분리형 아키텍처는 이보다 조금 앞서 Culler 7에서 사용되었다.[13] ZS-1의 ISA는 IBM의 후속 POWER와 마찬가지로 분기의 조기 실행을 지원했다.

2. 4. 연구 성과의 상용화

POWER1(1990)은 레지스터 이름 변경(부동 소수점 레지스터에 한함)과 정확한 예외 처리를 결합한 최초의 프로세서였다. 이 프로세서는 재정렬 버퍼 대신 '물리적 레지스터 파일'(커밋되지 않은 값과 커밋된 값을 모두 포함하는 동적 재매핑 파일)을 사용했다. 명령어 취소 기능은 카운트, 링크 및 조건 레지스터 변경을 취소하기 위해 IBM에서 '프로그램 카운터 스택'이라고 명명한 기록 버퍼를 구현하는 분기 장치에서만 필요했다. POWER1은 부동 소수점 산술 명령어 결과를 순서대로 제공했기 때문에 대상 레지스터의 이름이 바뀌지 않았고, 동일한 실행 장치의 비순차적 사용에 필요한 예약 스테이션도 갖추고 있지 않았다.[14][15] 유니시스(Unisys)의 A19는 1991년에 출시되어 경쟁사보다 3~5년 앞선 비순차적 명령어 처리 기술을 적용했다.[17][18]

2. 5. 폭넓은 채택

1990년대 초, 무어의 법칙에 따른 트랜지스터 수 증가와 함께 비순차적 명령어 처리 기술은 개인용 컴퓨터에도 빠르게 확산되었다. 이 기술은 모토로라 88110(1992), PowerPC 601(1993), 넥젠 Nx586(1994), PowerPC 603(1994) 등 다양한 프로세서에 적용되었다.

PowerPC 604(1995), HAL SPARC64(1995), 펜티엄 프로(1995)는 더욱 발전된 비순차적 명령어 처리 기술을 선보였다. 1996년 이후, 사이릭스 6x86, AMD K5, MIPS R10000, HP PA-8000 등이 출시되며 비순차적 명령어 처리는 주류 기술로 자리매김했다.

DEC 알파 21264 (1998) 이후, 고성능 비순차적 프로세서 코어는 인텔 아이테니엄 2와 IBM POWER6 외에는 순차적 코어에 의해 따라잡히지 못했다.

2. 6. 저전력 프로세서의 적용

2010년경까지 휴대폰 및 기타 저가형 애플리케이션에 사용되는 거의 모든 프로세서는 순차적 방식을 유지했다. 퀄컴의 Scorpion(재정렬 거리 32)이 스냅드래곤에 탑재되면서 처음으로 비순차적 명령어 처리 기술이 적용되기 시작했고[36], 그 후 Arm의 A9이 A8을 계승했다. 저가형 x86 개인용 컴퓨터의 경우, 초기 인텔 아톰 프로세서의 순차적 보넬 마이크로아키텍처는 AMD의 밥캣 마이크로아키텍처에 의해 도전받았고, 2013년에는 비순차적 실버몬트 마이크로아키텍처로 대체되었다.[37]

3. 기본 개념

프로그래머는 자신이 작성한 코드가 분기문이 없다면 위에서 아래로 순차적으로 실행될 것이라고 예상한다. 순차 프로세서는 이러한 순서를 그대로 따르지만, 비순차 프로세서는 하드웨어가 실시간으로 명령어 수준 병렬성(Instruction Level Parallelism, ILP)을 찾아 명령어 처리율을 크게 높인다. ILP는 코드에 적힌 순서가 아닌 데이터나 제어 흐름의 의존성에 의해 제약된다. 이러한 의존성에는 데이터 의존성, 컨트롤 의존성, 메모리 의존성이 있다.

비순차적 명령어 처리는 데이터 흐름을 찾아 처리하는 프로세서로 볼 수 있다. 그러나 하드웨어 제약으로 인해 ILP를 찾을 수 있는 범위는 제한적이며, 이를 명령어 윈도(Instruction Window)라고 부른다. 현대 프로세서는 대략 100개 이상의 명령어 내에서 ILP를 찾아 비순차적으로 실행한다.

비순차적 명령어 처리는 1970년대와 1980년대 초반 컴퓨터 구조의 주요 연구 분야였던 데이터 플로우 아키텍처의 제한된 형태이다.

3. 1. 순차적 처리 프로세서

과거 프로세서는 명령어를 순차적으로 처리했으며, 다음과 같은 단계를 거쳤다.[38]

1. 명령어 인출.

2. 입력 피연산자가 사용 가능하면 (예: 프로세서 레지스터에) 해당 명령어가 적절한 기능 유닛으로 전송된다. 현재 클럭 사이클 동안 하나 이상의 피연산자를 사용할 수 없는 경우 (일반적으로 메모리에서 가져와야 하기 때문에) 프로세서는 해당 피연산자를 사용할 수 있을 때까지 멈춘다.

3. 명령어가 적절한 기능 유닛에 의해 실행된다.

4. 기능 유닛은 결과를 레지스터 파일에 다시 기록한다.

데이터 의존성이 발생하면, 해당 데이터가 준비될 때까지 프로세서는 대기해야 했다.[38]

3. 2. 비순차적 처리 프로세서

비순차적 처리 프로세서는 명령어 수준 병렬성(ILP)을 활용하여 명령어 처리율을 높이는 프로세서이다. 이는 코드에 명시된 순서가 아닌, 데이터나 제어 흐름에 따른 의존성에 기반하여 명령어를 처리한다.

비순차적 처리 프로세서는 명령어 실행을 다음과 같은 단계로 나눈다.

단계설명
명령어 인출명령어를 읽어들인다.
명령어 디스패치명령어 대기열(예약 스테이션)에 명령어를 배치하고, 리오더 버퍼(Reorder buffer)에도 할당한다.
명령어 실행대기열의 명령어는 피연산자(operand)가 준비되면 순서에 관계없이 실행된다. 필요한 연산 장치(execution unit)를 받아 실행된 후, 결과를 대기열에서 기다리는 다른 명령어들에게 전달한다.
결과 기록리오더 버퍼에 완료를 표시하고, 자신이 가장 오래된 명령어라면 연산 결과를 반영(commit)한다.



명령어 인출 및 완료 단계는 순차적으로 이루어져 프로그램의 정확성을 보장한다. 리오더 버퍼는 명령어 완료를 순차적으로 처리하는 데 사용된다.

비순차적 프로세서는 WAR/WAW 위험을 겪을 수 있으며, 이를 해결하기 위해 레지스터 리네이밍(register renaming) 기법을 사용한다.

최초의 비순차적 명령어 처리 기기는 제임스 E. 손턴이 설계한 CDC 6600 (1964년)이며, 스코어보딩을 사용하여 충돌을 피했다.[5] IBM System/360 Model 91(1966년)은 토마술로 알고리즘을 사용하여 레지스터 이름 변경을 도입, 거짓 종속성(WAW 및 WAR)을 제거하여 완전한 비순차적 실행을 가능하게 했다.[6] POWER1(1990)은 레지스터 이름 바꾸기와 정확한 예외 처리를 결합한 최초의 프로세서였다.[14][15]

4. 핵심 요소 기술

비순차적 명령어 처리는 명령어 수준 병렬성(ILP)을 활용하여 명령어 처리율을 높이는 기술이다. 현대 프로세서는 일반적으로 100개 이상의 명령어 내에서 ILP를 찾아 비순차 실행을 수행한다. 명령어 수준 병렬성은 코드에 명시된 순서가 아닌, 데이터, 제어, 메모리 의존성에 의해 제약을 받는다.

비순차적 명령어 처리는 다음과 같은 핵심 요소 기술을 통해 구현된다.


  • 명령어 디스패치 및 발행 분리: 명령어 디스패치 단계와 발행 단계를 분리하여 명령어 실행 순서를 유연하게 조정한다. 분리형 아키텍처라고도 불리며, 메모리 지연을 효과적으로 숨길 수 있다.
  • 레지스터 이름 변경: 가짜 피연산자 의존성을 제거하여 명령어 발행 제약을 완화한다. IBM System/360 Model 91에서 처음 도입되었으며, 토마술로 알고리즘을 사용한다.
  • 결과 큐 (리오더 버퍼): 분기 예측 실패 및 예외 발생 시 프로그램의 정확한 재시작을 지원한다. 투기적 실행과 함께 사용되어 분기 예측이 맞았을 경우에만 결과를 반영한다.
  • 투기적 실행: 아직 해결되지 않은 분기를 넘어 명령어를 발행하는 기능이다.

4. 1. 명령어 디스패치 및 발행 분리

명령어 디스패치 단계와 발행 단계를 분리하여, 명령어 큐(예약 스테이션 또는 명령어 버퍼)를 통해 명령어 실행 순서를 유연하게 조정한다. 이 패러다임은 초기에는 "분리형 아키텍처"라고 불렸다.[39] 이전의 순차적 프로세서는 이러한 단계들이 락스텝 방식으로 파이프라인을 이루며 작동했다.[39]

분리형 아키텍처는 메모리 접근과 실행 기능을 분리하고, 둘 사이의 미세한 병렬성을 활용하여 성능을 높인다.[40] 이를 통해 프로세서 관점에서 메모리 지연을 효과적으로 숨길 수 있다.

새로운 패러다임은 명령어 처리를 다음과 같은 단계로 나눈다:[39]

# 명령어 인출.

# 명령어 디코딩.

# 명령어 이름 변경.

# 명령어 큐(예약 스테이션 또는 명령어 버퍼)로의 명령어 디스패치.

# 명령어는 입력 피연산자가 사용 가능해질 때까지 큐에서 대기한다. 명령어는 이전 명령어보다 먼저 큐를 떠날 수 있다.

# 명령어는 적절한 기능 유닛으로 발행되어 해당 유닛에 의해 실행된다.

# 결과는 큐에 넣는다.

# 모든 이전 명령어가 결과가 레지스터 파일에 기록된 후에만 이 결과가 레지스터 파일에 다시 기록된다. 이것을 졸업 또는 은퇴 단계라고 한다.

이러한 분리를 통해 프로세서는 데이터 누락으로 인한 정지를 피하고, 다른 준비된 명령어를 처리하여 성능을 향상시킬 수 있다.

하지만, 분리된 아키텍처는 큰 버퍼로 인해 분기 예측 실패 시 효율성이 감소하고, 더 많은 열과 다이 공간을 사용하는 단점이 있다.[40] 이러한 이유로 현대 프로세서 설계자들은 멀티 스레드 방식을 선호한다. 또한, 제어 집약적인 코드(예: 운영 체제 커널의 중첩 분기) 처리에 약점이 있어 범용 컴퓨팅에는 유용하지 않다고 여겨진다.[41]

레지스터 이름 변경은 순서에 상관없이 명령어 발행을 방해하는 잘못된 피연산자 종속성을 해결하는 기술이다. 아키텍처에 정의된 것보다 더 많은 물리적 레지스터를 사용하여 동일한 아키텍처 레지스터의 여러 버전이 동시에 존재하도록 한다.

4. 2. 레지스터 이름 변경

레지스터 이름 변경은 가짜 피연산자 의존성(실제로는 필요하지 않음에도 특정 피연산자가 요구되는 것처럼 보이는 것)을 제거하여 명령어 발행의 제약을 완화하는 기술이다. 이 방식에서는 아키텍처에 의해 정의된 것보다 더 많은 물리적 레지스터가 존재한다. 물리적 레지스터는 동일한 아키텍처 레지스터의 여러 버전이 동시에 존재할 수 있도록 태그가 지정된다.[40]

IBM System/360 Model 91(1966년)은 토마술로 알고리즘을 사용하여 레지스터 이름 변경을 도입하고,[6] 거짓 종속성(WAW 및 WAR)을 제거하여 완전한 비순차적 실행을 가능하게 했다. 레지스터 ''rn''에 쓰기를 처리하는 명령어는 이전 명령어보다 먼저 실행될 수 있는데, 실제로는 대안(이름이 변경된) 레지스터 ''alt-rn''에 기록함으로써 가능하다. 이 ''alt-rn''은 ''rn''에 대한 모든 이전 명령어가 실행된 경우에만 일반 레지스터 ''rn''으로 전환되지만, 그 전까지는 이전 명령어에 ''rn''이 주어지고, ''rn''을 처리하는 이후 명령어에 ''alt-rn''이 주어진다.

Model 91에서 레지스터 이름 변경은 ''공통 데이터 버스''(CDB)라고 하는 우회 및 메모리 소스 피연산자 버퍼로 구현되었으며, 미실행 명령어가 처리하는 레지스터의 가장 오래된 상태가 CDB에 있기 때문에 물리적 아키텍처 레지스터는 여러 사이클 동안 사용되지 않는다.

POWER1(1990)은 레지스터 이름 바꾸기(부동 소수점 레지스터에만 해당)와 정확한 예외 처리를 결합한 최초의 프로세서였다.

4. 3. 결과 큐 (리오더 버퍼)

결과 큐(리오더 버퍼)는 분기 예측 실패 및 예외/트랩 발생 시 프로그램의 정확한 재시작을 지원한다.[39] 명령어는 프로그램 순서대로 완료되어야 하며, 예측 실패 또는 예외 발생 시 불필요한 결과를 폐기할 수 있다.

예외가 발생하면 프로그램은 예외 발생 지점부터 다시 시작해야 한다. 결과 큐는 명령어가 프로그램 순서대로 완료되도록 보장하여, 정확한 재시작을 가능하게 한다. 예측이 실패한 분기 명령어 또는 예외를 발생시킨 명령어보다 나중에 실행된 명령어의 결과는 결과 큐에서 제거되어 프로그램 상태를 올바르게 유지한다.

투기적 실행은 아직 완료되지 않은 분기 명령어 이후의 명령어를 실행하는 것을 말한다. 결과 큐는 투기적으로 실행된 명령어의 결과를 임시 저장하고, 분기 예측이 맞았을 경우에만 결과를 반영한다.

4. 4. 투기적 실행

투기적 실행은 아직 해결되지 않은 분기를 넘어 명령어를 발행하는 기능이다.[10] 실행 결과를 저장하는 대기열은 분기 예측이 빗나갔을 때 및 예외/트랩 처리 시 발생하는 문제를 해결하기 위해 필수적이다. 예외가 발생한 경우에는 프로그램 순서대로 명령이 실행될 필요가 있는데, 결과 대기열이 있기 때문에 예외를 일으킨 후에도 해당 프로그램을 재실행할 수 있다. 이전에 실행했던 분기 명령의 예측이 실패했거나, 예외가 발생했을 때는, 이 대기열에서 (아직 기록되지 않은 단계에서) 쓸모 없게 된 결과를 삭제할 수 있다.

분기를 넘어서는 명령 발행은 현재도 미해결 문제이며, 투기적 실행이라는 이름으로 알려져 있다.[10]

5. 마이크로아키텍처 선택

프로그래머는 코드가 순차적으로 실행될 것이라고 예상하지만, 실제로는 명령어 수준 병렬성(ILP)을 활용하여 비순차적으로 실행될 수 있다. 비순차적 프로세서는 하드웨어가 실시간으로 ILP를 찾아 명령어 처리율을 높인다. 이러한 프로세서는 일반적으로 슈퍼스케일러 프로세서 형태로 작성되어 여러 명령어를 동시에 병렬로 처리한다. 명령어 수준 병렬성은 데이터 의존성, 제어 의존성, 메모리 의존성과 같은 의존성에 의해 제약받는다. 비순차적 명령어 처리를 구현하는 마이크로아키텍처는 다양한 방식으로 구성될 수 있다.

5. 1. 중앙 집중식 vs. 분산 명령어 큐

IBM PowerPC 프로세서는 기능 유닛별로 분산된 큐를 사용하는 반면, 다른 비순차적 프로세서는 중앙 집중식 큐를 사용한다. IBM은 분산 큐를 ''예약 스테이션''이라고 부른다.[14]

5. 2. 결과 큐 vs. 레지스터 파일 직접 기록

초기 인텔 비순차적 프로세서는 재정렬 버퍼라는 결과 큐를 사용했지만, 대부분의 후기 프로세서는 레지스터 맵을 사용한다.[43]

보다 정확하게는, 인텔 P6 제품군 마이크로프로세서는 재정렬 버퍼(ROB)와 레지스터 별칭 테이블(RAT)을 모두 갖추고 있다.[43] ROB는 주로 분기 예측 실패 복구를 위해 고안되었다.

P6 제품군은 초기 OoOE 마이크로프로세서에 속하지만 NetBurst 아키텍처에 의해 대체되었다. 수년 후, NetBurst는 훨씬 더 높은 작동 주파수의 가능성을 가정한 긴 파이프라인으로 인해 막다른 골목임이 입증되었다. 열 문제로 인해 재료가 디자인의 야심찬 클럭 목표에 부합할 수 없었고, NetBurst를 기반으로 한 후기 디자인인 Tejas와 Jayhawk는 취소되었다. 인텔은 Core 및 Nehalem 마이크로아키텍처의 기반으로 P6 디자인으로 되돌아갔다. 후속 Sandy Bridge, Ivy Bridge, Haswell 마이크로아키텍처는 P6에서 사용된 재정렬 기술에서 벗어나 EV6 및 P4의 재정렬 기술을 사용하지만 약간 더 짧은 파이프라인을 가지고 있다.[43][44]

6. 비순차적 명령어 처리의 한계 및 극복

비순차적 명령어 처리는 명령어 수준 병렬성(ILP)을 활용하여 명령어 처리율을 높이지만, 하드웨어 제약으로 인해 ILP를 찾을 수 있는 범위(명령어 윈도)가 제한적이다. 현대 프로세서는 약 100여 개 이상의 명령어 내에서 ILP를 찾아 비순차 실행을 수행한다.[1]

7. 취약점

O-o-O 기법에 기인한 멜트다운스펙터와 같은 취약점이 2018년 1월에 발표되어 업계에 충격을 주었다.[45]

참조

[1] 서적 Power and Performance: Software Analysis and Optimization https://books.google[...] Morgan Kaufman 2015
[2] 웹사이트 Out-of-order execution http://courses.cs.wa[...] cs.washington.edu 2014-01-17
[3] 웹사이트 The Centennial Celebration https://www.regis.or[...] 2022-06-25
[4] 웹사이트 Out-of-order Execution http://www.pcguide.c[...] pcguide.com 2014-01-17
[5] 간행물 1970
[6] 논문 An Efficient Algorithm for Exploiting Multiple Arithmetic Units https://pdfs.semanti[...] 1967
[7] 간행물 1970
[8] 저널 Implementation of precise interrupts in pipelined processors https://dl.acm.org/d[...] 1985-06
[9] 웹사이트 On Precise Interrupts https://citeseerx.is[...] 1996-01
[10] 서적 HPSm, a high performance restricted data flow architecture having minimal functionality http://dl.acm.org/ci[...] ACM 2013-12-06
[11] 저널 Decoupled Access/Execute Computer Architectures https://course.ece.c[...] 1984-11
[12] 저널 Dynamic Instruction Scheduling and the Astronautics ZS-1 https://course.ece.c[...] 1989-07
[13] 웹사이트 Culler-7 https://people.compu[...]
[14] 저널 Machine organization of the IBM RISC System/6000 processor http://www.research.[...] 1990-01
[15] 저널 The Microarchitecture of Superscalar Processors https://courses.cs.w[...] 1995-12
[16] 저널 Design of the IBM Enterprise System/9000 high-end processor http://www.research.[...] 1992-07
[17] 뉴스 Unisys Unveils 'Top Gun' Mainframe Computers https://apnews.com/a[...] 1991-03-07
[18] 뉴스 Unisys' New Mainframe Leaves Big Blue In The Dust https://www.bloomber[...] 1991-03-25
[19] 저널 The MC88110 Implementation of Precise Exceptions in a Superscalar Architecture https://dl.acm.org/d[...] Motorola Inc. 1993-03
[20] 웹사이트 Motorola MC88110 Overview http://www.m88k.com/[...] 1994-04-29
[21] 저널 Organization of the Motorola 88110 superscalar RISC microprocessor http://cjat.ir/image[...] 1992-04
[22] 서적 Proceedings of the 26th Annual International Symposium on Microarchitecture 1993-12
[23] 웹사이트 PowerPC™ 601 RISC Microprocessor Technical Summary https://www.nxp.com/[...] 2022-10-23
[24] 저널 The PowerPC 601 microprocessor https://www.research[...] 1993-09
[25] 웹사이트 PowerPC 601 Microprocessor https://old.hotchips[...] Hot Chips 1993-08
[26] 저널 PowerPC 601 and Alpha 21064: A Tale of Two RISCs https://www.eecg.uto[...] 1994-06
[27] 저널 The design space of register renaming techniques https://www.research[...] 2000-09
[28] 웹사이트 NexGen Enters Market with 66-MHz Nx586 https://www.ardent-t[...] 1994-03-28
[29] 저널 The PowerPC 603 microprocessor 1994-06
[30] 웹사이트 PowerPC™ 603 RISC Microprocessor Technical Summary https://www.nxp.com/[...] 2022-10-27
[31] 저널 The PowerPC 604 RISC microprocessor https://www.complang[...] 1994-10
[32] 웹사이트 SPARC64+: HAL's Second Generation 64-bit SPARC Processor https://old.hotchips[...]
[33] 웹사이트 Le Sparc64 https://www.irisa.fr[...]
[34] 웹사이트 Intel's P6 Uses Decoupled Superscalar Design http://www.cs.cmu.ed[...] 1995-02-16
[35] 저널 IBM POWER6 microarchitecture https://course.ece.c[...] 2007-11
[36] 웹사이트 Qualcomm High Performance Processor Core and Platform for Mobile Applications http://rtcgroup.com/[...]
[37] 웹사이트 Intel's Silvermont Architecture Revealed: Getting Serious About Mobile http://www.anandtech[...] 2013-05-06
[38] 웹사이트 Inside the Minor CPU model: Scoreboard https://pages.cs.wis[...] 2017-06-09
[39] 간행물 Processor Microarchitecture https://link.springe[...] 2011
[40] 간행물 Decoupled access/execute computer architectures 1984
[41] 간행물 Memory latency effects in decoupled architectures https://pdfs.semanti[...] 1994
[42] 간행물 Multithreaded decoupled architecture https://www.research[...] 1995
[43] 웹사이트 Intel's Sandy Bridge Microarchitecture http://www.realworld[...] 2010-09-25
[44] 웹사이트 The Haswell Front End - Intel's Haswell Architecture Analyzed: Building a New PC and a New Intel https://www.anandtec[...]
[45] 웹사이트 Meltdown and Spectre: Here's what Intel, Apple, Microsoft, others are doing about it https://arstechnica.[...] 2018-01-05



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com