명령 파이프라인링
Instruction pipelining클럭 사이클 인스톨. 아니요. | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
1 | 한다면 | 아이디 | EX | 메모리 | WB | ||
2 | 한다면 | 아이디 | EX | 메모리 | WB | ||
3 | 한다면 | 아이디 | EX | 메모리 | WB | ||
4 | 한다면 | 아이디 | EX | 메모리 | |||
5 | 한다면 | 아이디 | EX | ||||
(IF = 명령 가져오기, ID = 명령 디코드, EX = Execute, MEM = 메모리 액세스, WB = 라이트백 등록). 네 번째 클럭 사이클(녹색 열)에서 가장 빠른 명령은 MEM 단계이며 최신 명령은 아직 파이프라인에 진입하지 않았습니다. |
컴퓨터 과학에서 명령 파이프라인은 단일 프로세서 내에서 명령 수준의 병렬 처리를 구현하기 위한 기술입니다.파이프라인은 입력 명령어를 다른 프로세서 유닛에 의해 실행되는 일련의 순차적 단계(이명 "파이프라인")로 분할하여 프로세서의 모든 부분을 어떤 명령어로 비지 상태로 유지하려고 합니다.
개념과 동기
파이프라인 컴퓨터에서는 명령이 중앙처리장치(CPU)를 통해 단계적으로 흐릅니다.예를 들어 von Neumann 사이클의 각 단계에 대해 하나의 단계가 있을 수 있습니다.명령어를 가져오고, 오퍼랜드를 가져오고, 명령을 수행하고, 결과를 기록합니다.파이프라인 컴퓨터는 보통 각 단계 뒤에 "파이프라인 레지스터"가 있습니다.이들은 다음 단계의 논리 게이트가 다음 단계를 수행할 수 있도록 명령 및 계산의 정보를 저장합니다.
이 배열에 의해 CPU는 각 클럭 사이클마다 명령을 완료할 수 있습니다.짝수 스테이지가 사각파 클럭의 한쪽 에지에서 동작하고 홀수 스테이지가 다른 쪽 에지에서 동작하는 것이 일반적입니다.이것에 의해, 특정의 클럭 레이트로 멀티 사이클 컴퓨터보다 많은 CPU 스루풋이 가능하게 됩니다만, 파이프 라이닝 프로세스 자체의 오버헤드가 증가하기 때문에, 지연이 증가할 가능성이 있습니다.또, 전자 로직이 최대 속도를 일정하게 하고 있어도, 파이프라인내의 스테이지수를 변화시키는 것으로, 파이프라인 컴퓨터를 고속 또는 저속으로 할 수 있다.스테이지가 많을수록 각 스테이지의 동작은 적어지기 때문에 스테이지가 로직게이트로부터의 지연이 적어지기 때문에 클럭 레이트가 높아집니다.
컴퓨터의 파이프라인 모델은 비용이 명령당 초당 논리 게이트로 측정될 때 가장 경제적입니다.각 시점에서 명령은 하나의 파이프라인 단계에 있으며 평균적으로 파이프라인 단계는 다륜차 컴퓨터보다 비용이 적게 든다.또한 잘 만들어지면 파이프라인 컴퓨터의 논리는 대부분 사용되고 있습니다.이와는 대조적으로, 고장난 컴퓨터는 보통 어느 순간에나 대량의 유휴 로직을 가지고 있습니다.비슷한 계산을 통해 파이프라인 컴퓨터는 명령당 소비 전력이 적다는 것을 알 수 있습니다.
그러나 파이프라인 컴퓨터는 보통 비슷한 다륜차 컴퓨터보다 더 복잡하고 더 비싸다.일반적으로 더 많은 논리 게이트, 레지스터 및 더 복잡한 제어 장치가 있습니다.마찬가지로 명령당 소비되는 에너지는 적지만 총 에너지 소비량은 더 많을 수 있습니다.CPU는 한 번에 여러 명령을 수행할 수 있기 때문에 보통 초당 더 많은 명령을 수행할 수 있습니다.
파이프라인 컴퓨터에서 제어부는 플로우가 시작, 계속 및 정지되도록 프로그램 명령으로 배열합니다.명령 데이터는 보통 파이프라인 레지스터에서 한 단계에서 다음 단계로 전달되며, 각 단계에서 제어 로직은 다소 분리되어 있습니다.컨트롤 유닛은 또한 각 단계의 명령이 다른 단계의 지침 작동을 해치지 않도록 보장합니다.예를 들어, 두 단계가 동일한 데이터를 사용해야 하는 경우 제어 로직은 이 사용이 올바른 순서로 수행되도록 보장합니다.
효율적으로 작동하면 파이프라인 컴퓨터는 각 단계에서 명령을 받게 됩니다.그 후, 그 모든 지시를 동시에 실시하고 있습니다.클럭의 각 사이클에 대해 약 1개의 명령을 완료할 수 있습니다.그러나 프로그램이 다른 명령 시퀀스로 전환되면 파이프라인이 처리 중인 데이터를 폐기하고 재시작해야 할 수 있습니다.이것은 "스톨"이라고 불립니다.
파이프라인 컴퓨터 설계의 대부분은 각 단계 간의 간섭을 방지하고 스톨을 줄입니다.
스텝 수
종속 단계의 수는 기계 아키텍처에 따라 달라집니다.예를 들어 다음과 같습니다.
- 1956-61년 IBM Stretch 프로젝트에서 보편화된 Fetch, Decode 및 Execute라는 용어를 제안했습니다.
- 기존의 RISC 파이프라인은 다음과 같이 구성됩니다.
- 명령 가져오기
- 명령 디코딩 및 레지스터 가져오기
- 실행
- 메모리 액세스
- 라이트백 등록
- Atmel AVR과 PIC 마이크로컨트롤러에는 각각 2단계 파이프라인이 있습니다.
- 많은 설계에는 7, 10, 심지어 20 스테이지의 파이프라인이 포함되어 있습니다(인텔 Pentium 4와 동일).
- 인텔의 최신 "Prescott" 및 "Cedar Mill" Netburst 코어와 최신 Pentium 4 모델 및 Pentium D 및 Xeon 파생 모델에 사용된 최신 "Prescott" 및 "Cedar Mill" Netburst 코어는 긴 31단계 파이프라인을 갖추고 있습니다.
- Xelated X10q Network Processor에는 1,000개 이상의 파이프라인이 있는데, 이 경우 이 단계 중 200개는 개별적으로 프로그래밍된 명령을 사용하여 독립된 CPU를 나타냅니다.나머지 단계는 메모리 및 온칩 기능 [1][2]장치에 대한 액세스를 조정하는 데 사용됩니다.
파이프라인이 「디퍼」(의존 스텝의 수가 증가)되기 때문에, 소정의 스텝을 심플한 회로로 실장할 수 있기 때문에, 프로세서 클럭의 동작 속도가 [3]빨라질 가능성이 있습니다.이러한 파이프라인을 슈퍼 파이프라인이라고 [4]부릅니다.
프로세서가 모든 사이클에서 명령을 가져올 수 있는 경우 프로세서는 완전히 파이프라인으로 처리된다고 합니다.따라서 일부 명령 또는 조건에 따라 새 명령을 가져올 수 없는 지연이 필요한 경우 프로세서가 완전히 파이프라인으로 연결되어 있지 않습니다.
역사
이 섹션은 확인을 위해 추가 인용문이 필요합니다. 않은 및 될 수 . (2019년 3월) ( 및 ) |
파이프라인의 주요 용도는 [5]ILLIAC II 프로젝트와 IBM Stretch 프로젝트에 있었지만 1939년 Z1과 1941년 Z3에 간단한 버전이 사용되었습니다.
파이프라이닝은 1970년대 후반 벡터 프로세서 및 어레이 프로세서 [citation needed]등의 슈퍼컴퓨터에서 본격적으로 시작되었습니다.초기의 슈퍼컴퓨터 중 하나는 Control Data Corporation이 만든 Cyber 시리즈였다.주 설계자인 시모어 크레이는 나중에 크레이 리서치를 이끌었다.Cray는 XMP 슈퍼컴퓨터 라인을 개발하여 멀티플 및 가감산 기능 모두에 파이프라이닝을 사용했습니다.이후 Star Technologies는 Roger Chen에 의해 개발된 병렬 기능(병렬로 작동하는 여러 파이프라인 기능)을 추가했습니다.1984년 스타 테크놀로지는 제임스 브래들리가 개발한 파이프라인 분할 회로를 추가했습니다.1980년대 중반까지, 파이프라인은 [citation needed]전 세계의 많은 다른 회사들에 의해 사용되었다.
파이프라인은 슈퍼컴퓨터에 국한되지 않았다.1976년 Amdahl Corporation의 470 시리즈 범용 메인프레임에는 7단계 파이프라인과 특허받은 분기 예측 [citation needed]회로가 있었습니다.
위험 요소
순차 실행 모델에서는 각 명령이 다음 명령이 시작되기 전에 완료된다고 가정합니다. 파이프라인 프로세서에서는 이 가정이 사실이 아닙니다.예상 결과에 문제가 있는 상황을 위험이라고 합니다.가상 프로세서에 대한 다음 두 가지 레지스터 명령을 상상해 보십시오.
1: R5에 1 추가 2: R5를 R6에 복사
프로세서가 첫 번째 그림에 나열된 5단계(기사 첫머리의 '기본 5단계 파이프라인')를 가지고 있는 경우 명령 1은 t시에1 가져오고 실행은 t시에5 완료됩니다.명령 2는 t에2 가져와 t에6 완료됩니다.첫 번째 명령에서는 5단계(레지스터 라이트백)로서5 증가된 숫자를 t로 R5에 저장할 수 있습니다.그러나 두 번째 명령은 시간3 t에 두 번째 단계(명령 디코딩 및 레지스터 페치)에서 R5(R6에 복사)에서 번호를 얻을 수 있습니다.그때까지 첫 번째 명령이 값을 증가시키지 않았을 것 같습니다.위 코드는 위험을 유발합니다.
컴파일러가 위험을 회피하는 기계코드를 생성하도록 설계될 수 있기 때문에 컴파일된 언어로 컴퓨터 프로그램을 작성해도 이러한 문제가 발생하지 않을 수 있습니다.
회피책
일부 초기 DSP 및 RISC 프로세서에서 이 문서는 프로그래머에게 인접 및 거의 인접한 명령(지연 슬롯이라고 함)에서 이러한 의존성을 피하도록 권고하거나 두 번째 명령이 원하는 값이 아닌 오래된 값을 사용한다고 선언합니다(위의 예에서는 프로세서가 증가하지 않은 값을 직감적으로 복사할 수 있습니다).또는 사용하는 값이 정의되어 있지 않음을 선언합니다.프로그래머는 그동안 프로세서가 수행할 수 있는 관련 없는 작업을 가지고 있을 수 있습니다.또는 올바른 결과를 얻기 위해 NOP를 코드에 삽입하여 파이프라이닝의 이점을 부분적으로 부정할 수 있습니다.
솔루션
파이프라인 프로세서는 프로그래머가 각 명령이 다음 명령이 시작되기 전에 완료된다고 가정할 때 일반적으로 다음 세 가지 기술을 사용하여 예상대로 작동합니다.
- 필요한 값을 사용할 수 있을 때까지 파이프라인이 지연되거나 새 명령 예약을 중지할 수 있습니다.이로 인해 파이프라인에 빈 슬롯 또는 버블이 발생하여 작업이 수행되지 않습니다.
- 연산된 값을 생성한 명령이 완전히 폐기되기 전에 파이프라인의 다른 곳에 있는 미래 명령으로 라우팅하는 데이터 경로를 추가할 수 있으며, 이를 오퍼랜드 [6][7]포워딩이라고 한다.
- 프로세서는 현재 명령에 의존하지 않고 위험 없이 즉시 실행할 수 있는 다른 명령을 찾을 수 있습니다. 이 명령어는 순서가 잘못된 실행으로 알려져 있습니다.
나뭇가지
정상적인 명령 시퀀스를 벗어난 가지에는 위험이 수반되는 경우가 많습니다.프로세서가 단일 시간 사이클로 브랜치에 영향을 주지 않는 한 파이프라인은 명령을 순차적으로 가져옵니다.프로그래머가 제어 권한을 프로그램의 다른 부분으로 전환했기 때문에 이러한 명령은 효력을 발휘할 수 없습니다.
조건부 지부는 더 문제다.프로세서는 아직 계산되지 않은 계산에 따라 분기하거나 분기하지 않을 수 있습니다.다양한 프로세서가 정지하거나 분기 예측을 시도하거나 분기 실행(eager 실행)을 시작할 수 있으며, 각각 분기 실행 여부를 가정하여 잘못된 [a]추측과 관련된 모든 작업을 폐기할 수 있습니다.
보통 올바른 예측을 하는 분기 예측을 구현한 프로세서는 분기로 인한 성능 저하를 최소화할 수 있습니다.그러나 브랜치가 제대로 예측되지 않으면 올바른 위치에서 실행을 재개하기 전에 파이프라인에서 실행을 시작한 잘못된 코드 경로를 플러싱하는 등 프로세서에 더 많은 작업이 발생할 수 있습니다.
파이프라인 프로세서용으로 작성된 프로그램은 속도 손실을 최소화하기 위해 의도적으로 분기를 회피합니다.예를 들면, 프로그래머는, 통상의 케이스를 순차적으로 실행해, 비정상적인 케이스를 검출했을 때만 브랜치를 실시할 수 있다.gcov와 같은 프로그램을 사용하여 코드 커버리지를 분석함으로써 프로그래머는 특정 브랜치가 실제로 실행되는 빈도를 측정하고 코드를 최적화하는 데 필요한 통찰력을 얻을 수 있습니다.경우에 따라 프로그래머는 브랜치프리 코드로 일반적인 케이스와 특이한 케이스 모두를 처리할 수 있습니다.
특별한 상황
- 프로그램 자체 수정
- 파이프라인 프로세서에서 코드를 스스로 수정하는 기술은 문제가 될 수 있습니다.이 기술에서 프로그램의 효과 중 하나는 앞으로 다가올 명령어를 수정하는 것입니다.프로세서에 명령 캐시가 있는 경우 원래 명령이 이미 프리페치 입력 큐에 복사되어 있을 수 있으며 변경은 적용되지 않습니다.Zilog Z280과 같은 일부 프로세서는 데이터만 가져오거나 일반적인 메모리 주소 공간의 일부로 온칩 캐시 메모리를 구성할 수 있으며, 자체 수정 명령으로 이러한 문제를 방지할 수 있습니다.
- 중단 없는 명령
- 명령어는 두 항목을 교환하는 경우와 같이 원자성을 보장하기 위해 중단되지 않을 수 있습니다.시퀀셜 프로세서는 명령 간의 인터럽트를 허용하지만 파이프라이닝 프로세서는 명령을 오버랩하기 때문에 무정전 명령을 실행하면 일반 명령의 일부도 인터럽트할 수 없게 된다.Cyrix 혼수 버그는 무한 루프를 사용하여 단일 코어 시스템을 매달아 놓는데, 무한 루프는 항상 파이프라인에 중단되지 않는 명령이 있습니다.
설계에 관한 고려 사항
- 스피드
- 파이프라이닝은 프로세서의 모든 부분을 점유한 상태로 유지하며 프로세서가 일정 시간 내에 수행할 수 있는 유용한 작업의 양을 늘립니다.파이프라이닝은 일반적으로 프로세서의 사이클 타임을 단축하고 명령의 throughput을 높입니다.속도 우위성은 실행이 이상적인 속도 이하로 느려져야 하는 위험에 직면할 정도로 감소한다.비파이프라인 프로세서는 한 번에 하나의 명령만 실행한다.다음 명령의 시작은 위험 요소가 아니라 무조건 지연됩니다.
- 파이프라인 프로세서가 모든 작업을 모듈러 스텝으로 정리해야 할 경우 레지스터의 복제가 필요할 수 있으며, 이로 인해 일부 명령의 지연이 증가합니다.
- 경제.
- 파이프라이닝을 사용하면 수치 계산 등 복잡한 회로를 추가하는 것보다 각 종속 단계를 간소화함으로써 복잡한 작업을 경제적으로 수행할 수 있습니다.그러나 파이프라이닝으로 속도를 높이는 것을 거부하는 프로세서는 제조가 더 간단하고 저렴할 수 있습니다.
- 예측 가능성
- 프로그래머가 위험을 회피하거나 회피할 필요가 있는 환경에 비해 파이프라인 없는 프로세서를 사용하면 프로그래머의 프로그래밍과 훈련이 쉬워질 수 있습니다.파이프라인 없는 프로세서를 사용하면 주어진 일련의 명령의 정확한 타이밍을 쉽게 예측할 수 있습니다.
예시
오른쪽에는 fetch, decode, execute 및 write-back의 4가지 단계가 있는 범용 파이프라인이 있습니다.위쪽 회색 상자는 실행 대기 중인 명령 목록이고 아래쪽 회색 상자는 실행이 완료된 명령 목록이며 가운데 흰색 상자는 파이프라인입니다.
실행은 다음과 같습니다.
시계 | 실행 |
---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
파이프라인 버블
파이프라인 프로세서는 파이프라인에 버블을 생성함으로써 위험에 대처할 수 있으며, 이로 인해 유용한 일이 발생하지 않는 사이클이 1개 이상 발생할 수 있습니다.
오른쪽 그림에서 사이클 3에서는 프로세서가 녹색 명령의 실행에 의해 생성된 결과에 따라 디코딩이 다르다고 판단하기 때문에 프로세서는 보라색 명령을 디코딩할 수 없다.녹색 명령은 일정에 따라 실행 단계로 이동한 다음 다시 쓰기 단계로 진행할 수 있지만, 보라색 명령은 가져오기 단계에서 한 사이클 동안 정지됩니다.사이클 3 중에 가져오기로 되어 있던 파란색 명령은 그 뒤의 빨간색 명령과 마찬가지로 한 사이클 동안 정지됩니다.
버블(그림의 파란색 타원) 때문에 프로세서의 디코드 회로는 사이클 3 중에 유휴 상태입니다.이그제큐트 회로는 사이클 4 중에 아이돌 상태이고 라이트백 회로는 사이클 5 중에 아이돌 상태입니다.
버블이 파이프라인 밖으로 이동하면(사이클 6), 정상 실행이 재개됩니다.하지만 지금은 모든 것이 한 사이클 늦었다.컬러로 [b]표시된 4가지 명령을 완전히 실행하려면 7이 아닌 8사이클(1~8사이클)이 소요됩니다.
「 」를 참조해 주세요.
메모들
- ^ Hewlett-Packard의 PA-RISC 프로세서 등 이러한 휴리스틱이 없는 초기 파이프라인 프로세서는 프로그래머에게 경고하는 것만으로 위험에 대처했습니다.이 경우 브랜치를 취득했는지 여부에 관계없이 브랜치에 이은1개 이상의 명령이 실행됩니다.예를 들어 레지스터의 숫자를 계산한 후 조건부 분기를 레지스터에 로드하여 분기와 비분기의 경우 모두 후속 계산에 더 유용한 값을 로드할 수 있습니다.
- ^ 단, 버블이 발생하더라도 적어도 이 경우 프로세서는 파이프라인 처리되지 않은 프로세서보다 훨씬 빠르게 일련의 명령을 실행할 수 있습니다.
레퍼런스
- ^ Glaskowsky, Peter (Aug 18, 2003). "Xelerated's Xtraordinary NPU — World's First 40Gb/s Packet Processor Has 200 CPUs". Microprocessor Report. 18 (8): 12–14. Retrieved 20 March 2017.
- ^ https://www.eetimes.com/xelerated-brings-programmable-40-gbits-s-technology-to-the-mainstream-ethernet/#
- ^ John Paul Shen, Mikko H. Lipasti (2004). Modern Processor Design. McGraw-Hill Professional. ISBN 9780070570641.
- ^ Sunggu Lee (2000). Design of Computers and Other Complex Digital Devices. Prentice Hall. ISBN 9780130402677.
- ^ Rojas, Raúl (April–June 1997). "Konrad Zuse's Legacy: The Architecture of the Z1 and Z3" (PDF). IEEE Annals of the History of Computing. 19 (2): 5–16. doi:10.1109/85.586067. Archived (PDF) from the original on 2022-07-03. Retrieved 2022-07-03. (12페이지)
- ^ "CMSC 411 Lecture 19, Pipelining Data Forwarding". University of Maryland Baltimore County Computer Science and Electrical Engineering Department. Retrieved 2020-01-22.
- ^ "High performance computing, Notes of class 11". hpc.serc.iisc.ernet.in. September 2000. Archived from the original on 2013-12-27. Retrieved 2014-02-08.