명령 파이프라인이란 무엇입니까?

모든 프로세서 명령에는 여러 단계의 작업이 있습니다. 이러한 각 단계는 완료하는 데 단일 CPU 주기가 걸립니다. 이러한 단계는 명령 페치, 명령 디코드, 실행, 메모리 액세스 및 쓰기 되돌림입니다. 이들은 각각 완료해야 하는 명령을 받고, 작동 중인 값과 작업을 분리합니다. on, 프로세스를 실행하고 결과가 기록될 레지스터를 열고 열린 결과를 기록합니다. 등록하다.

과거 주문 프로세서

초기 컴퓨터에서 CPU는 명령 파이프라인을 사용하지 않았습니다. 이러한 CPU에서는 모든 명령에 대해 각 단일 주기 작업이 발생해야 했습니다. 이것은 다음 명령이 시작될 수 있기 전에 평균 명령이 완전히 처리되는 데 5개의 클록 사이클이 걸렸다는 것을 의미했습니다. 일부 작업은 레지스터에 결과를 기록할 필요가 없을 수 있습니다. 즉, 메모리 액세스 및 다시 쓰기 단계를 건너뛸 수 있습니다.

파이프라인이 없는 서브스칼라 프로세서에서는 각 명령어의 각 부분이 순서대로 실행됩니다.

그러나 다음 명령으로 넘어갈 수 있기 전에 완전한 명령을 순서대로 실행할 때 문제가 숨어 있습니다. 문제는 캐시 미스입니다. CPU는 레지스터에 적극적으로 처리 중인 데이터를 저장합니다. 이것은 1주기 대기 시간으로 액세스할 수 있습니다. 문제는 레지스터가 프로세서 코어에 내장되어 있기 때문에 작다는 것입니다. 데이터가 아직 로드되지 않은 경우 CPU는 더 크지만 더 느린 L1 캐시로 이동해야 합니다. 거기에 없으면 더 크고 느린 L2 캐시로 다시 이동해야 합니다. 다음 단계는 L3 캐시입니다. 마지막 옵션은 시스템 RAM입니다. 이러한 각 옵션은 확인하는 데 점점 더 많은 CPU 주기가 필요합니다.

이제 이렇게 추가된 대기 시간은 다음 명령어를 시작하기 전에 각 명령어를 순서대로 완료해야 하는 시스템에서 큰 문제가 될 수 있습니다. 명령어 프로세서당 5사이클이었던 것이 갑자기 수십 또는 수백 클록 사이클 동안 하나의 명령어에 중단될 수 있습니다. 그 동안 컴퓨터에서는 아무 일도 일어나지 않습니다. 기술적으로 이것은 두 개의 독립적인 코어를 사용함으로써 어느 정도 완화될 수 있습니다. 그러나 둘 다 잠재적으로 동시에 같은 일을 하는 것을 막을 수 있는 것은 없습니다. 따라서 멀티 코어 경로로 이동하면 이 문제가 해결되지 않습니다.

클래식 RISC 파이프라인

RISC는 Reduced Instruction Set Computer의 약자입니다.. 각 명령어를 더 쉽게 디코딩하여 성능을 최적화하는 프로세서 설계 스타일입니다. 이는 동일한 작업을 수행하는 데 필요한 명령어 수가 더 적은 더 복잡한 명령어 세트를 설계하는 CISC 또는 복잡한 명령어 세트 컴퓨터와 비교됩니다.

고전적인 RISC 설계에는 명령 파이프라인이 포함됩니다. 주어진 주기에서 5개 명령 단계 중 하나를 실행하는 대신 파이프라인을 통해 5개 단계를 모두 수행할 수 있습니다. 물론 한 사이클에서 한 명령어의 다섯 단계를 모두 실행할 수는 없습니다. 그러나 각각 한 단계의 오프셋으로 5개의 연속 명령어를 대기열에 넣을 수 있습니다. 이렇게 하면 각 클록 주기마다 새 명령을 완료할 수 있습니다. 코어 복잡성의 상대적으로 낮은 증가에 대해 잠재적인 5배의 성능 향상을 제공합니다.

스칼라 파이프라인 프로세서에서 명령 실행의 각 단계는 클록 주기당 한 번 수행될 수 있습니다. 이것은 사이클당 하나의 완료된 명령어의 최대 처리량을 허용합니다.

파이프라인이 없는 프로세서는 사이클당 하나의 완전한 명령을 실행할 수 없기 때문에 항상 하위 스칼라일 수 있습니다. 이 기본 5단계 파이프라인을 사용하여 모든 프로세스에 대한 명령을 완료할 수 있는 스칼라 CPU를 만들 수 있습니다. 훨씬 더 광범위한 파이프라인을 생성하여 클록 주기당 둘 이상의 명령을 실행할 수 있는 슈퍼스칼라 CPU를 만들 수 있습니다. 물론 여전히 잠재적인 문제가 있습니다.

여전히 순차

이 중 어느 것도 다양한 수준의 캐시 및 RAM을 쿼리해야 할 때 응답을 위해 많은 주기를 기다리는 문제를 해결하지 못합니다. 또한 새로운 문제를 소개합니다. 한 명령어가 이전 명령어의 출력에 의존한다면 어떻게 될까요? 이러한 문제는 고급 디스패처로 독립적으로 해결됩니다. 다른 명령의 출력에 의존하는 명령이 너무 가깝지 않도록 실행 순서를 신중하게 계획합니다. 또한 명령어를 파킹하고 파이프라인에서 다른 명령어로 교체하여 캐시 미스를 처리합니다. 실행할 준비가 되어 있고 결과가 필요하지 않은 명령, 실행될 때 명령을 다시 시작 준비가 된.

이러한 솔루션은 파이프라인이 없는 프로세서에서 작동할 수 있지만 클럭당 하나 이상의 명령을 실행하는 슈퍼스칼라 프로세서에 필요합니다. 분기 예측기는 둘 이상의 잠재적 결과가 있는 명령의 결과를 예측하고 달리 입증되지 않는 한 계속해서 정확하다고 가정할 수 있으므로 매우 유용합니다.

결론

파이프라인을 통해 프로세서의 모든 고유한 기능을 모든 주기에서 사용할 수 있습니다. 이는 서로 다른 명령의 여러 단계를 동시에 실행하여 수행합니다. 이것은 CPU 설계에 많은 복잡성을 추가하지 않습니다. 또한 하나 이상의 명령어가 사이클당 단일 단계를 수행할 수 있는 방법을 제공합니다.