명령어 수준 병렬성
명령어 수준 병렬성(ILP)은 단일 프로그램의 여러 명령어를 동시에 실행할 수 있는 잠재력으로, 사이클당 여러 명령어를 발행하고 완료하는 슈퍼스칼라 및 VLIW 프로세서에 의해 활용됩니다.
Definition
명령어 수준 병렬성은 단일 프로그램의 명령어가 병렬로 실행될 수 있는 정도를 나타냅니다. 프로세서는 데이터 및 제어 의존성에 따라 클록 사이클당 하나 이상의 명령어를 발행, 실행 및 완료함으로써 이를 활용합니다.
Scope
이 주제는 단일 명령어 스트림 내에서 사용 가능한 병렬성과 하드웨어 및 컴파일러가 이를 추출하는 방법을 다룹니다: 사이클당 여러 명령어의 슈퍼스칼라 발행, 초장명령어(VLIW) 설계, 의존성 분석, 레지스터 이름 변경, 그리고 추측 실행. 또한 사용 가능한 ILP의 한계도 다룹니다. 코어 및 레인 전반의 스레드 및 데이터 수준 병렬성(병렬 및 멀티코어 아키텍처)과 기본 단일 발행 파이프라인(파이프라이닝 및 해저드)은 제외됩니다.
Core questions
- 일반적인 프로그램의 명령어들 사이에 본질적으로 얼마나 많은 병렬성이 존재합니까?
- 슈퍼스칼라 프로세서는 어떤 명령어를 함께 발행할 수 있는지 어떻게 결정합니까?
- VLIW 설계는 병렬성을 찾는 부담을 컴파일러로 어떻게 전환합니까?
- 어떤 의존성과 해저드가 실현 가능한 ILP의 양을 제한합니까?
Key concepts
- 슈퍼스칼라 발행
- 초장명령어(VLIW)
- 데이터 및 이름 의존성
- 레지스터 이름 변경
- 다중 기능 단위
- 추측 실행
- ILP 한계
- 사이클당 명령어 수(IPC)
Key theories
- 동적 명령어 스케줄링
- 하드웨어는 의존성을 추적하고 준비된 명령어를 여러 기능 단위에 스케줄링함으로써 런타임에 ILP를 발견하고 활용할 수 있습니다. 예약 스테이션과 레지스터 이름 변경을 사용하는 토마술로 알고리즘은 순서 이탈 병렬 발행을 가능하게 하는 표준적인 메커니즘입니다.
Mechanisms
슈퍼스칼라 프로세서는 사이클당 여러 명령어를 가져오고 디코딩하며, 의존성을 확인하고, 거짓 의존성을 제거하기 위해 레지스터 이름을 변경하고, 독립적인 명령어를 여러 기능 단위로 발행합니다. VLIW 설계는 대신 컴파일러가 독립적인 연산을 넓은 명령어 워드로 묶는 데 의존합니다. 진정한 데이터 의존성과 제어 흐름은 실현 가능한 병렬성에 상한선을 설정하며, 추측 실행과 더 큰 명령어 윈도우는 이를 확장하려고 시도합니다.
Clinical relevance
ILP 기술은 수십 년간 단일 스레드 성능 성장을 이끌었으며 고성능 CPU 코어의 핵심으로 남아 있습니다. 사용 가능한 병렬성 및 복잡성 한계에 도달하면서 ILP의 수익 체감은 업계가 추가 확장을 위해 멀티코어 및 명시적 병렬성으로 전환한 주요 이유 중 하나였습니다.
History
여러 기능 단위와 동적 스케줄링은 1960년대 CDC 6600과 IBM System/360 Model 91에 등장했습니다. 슈퍼스칼라 설계는 1990년대에 주류가 되었고, 인텔의 아이테니엄과 같은 VLIW 아키텍처는 컴파일러 주도 병렬성을 추구했습니다. 1990년대 초 ILP 한계에 대한 연구는 단일 스레드 내 병렬성이 제한되는 이유를 명확히 했습니다.
Debates
- 하드웨어 주도 대 컴파일러 주도 ILP
- 슈퍼스칼라 순서 이탈 하드웨어는 복잡성과 전력 소모를 대가로 런타임에 병렬성을 동적으로 찾습니다. 반면 VLIW는 컴파일러가 병렬성을 정적으로 스케줄링하는 데 의존합니다. 경험적으로 동적 접근 방식이 다양한 워크로드에서 더 견고한 것으로 나타났으며, 정적 접근 방식은 예측 가능하고 저전력 설계에 여전히 매력적입니다.
Key figures
- Robert Tomasulo
- Yale Patt
- John L. Hennessy
- Joseph A. Fisher
- James E. Smith
Related topics
Seminal works
- hennessy2019
- tomasulo1967
Frequently asked questions
- 슈퍼스칼라와 VLIW의 차이점은 무엇입니까?
- 둘 다 사이클당 여러 연산을 실행합니다. 슈퍼스칼라 프로세서는 하드웨어에서 런타임에 어떤 명령어를 함께 발행할 수 있는지 결정합니다. VLIW 프로세서는 컴파일러가 독립적인 연산을 미리 넓은 명령어로 그룹화하는 데 의존하여 하드웨어를 단순화하지만 컴파일러에 더 많은 요구를 합니다.
- 명령어 수준 병렬성에 한계가 있는 이유는 무엇입니까?
- 실제 프로그램에는 진정한 데이터 의존성과 빈번한 분기가 있어 동시에 실행할 수 있는 명령어 수를 제한합니다. 특정 윈도우를 넘어서면 달성 가능한 병렬성이 포화 상태에 이르므로, 더 많은 ILP를 추출하는 것은 추가적인 하드웨어 복잡성과 전력 소모에 비해 수익 체감을 가져옵니다.