Signle sycle과 Pipe라인
명령 실행은 5단계를 진행하면서 실행된다. Single cycle로 실행되면 작동하지 않고 쉬는 단계가 있다. 그래서 지속적으로 입력되는 명령을 한 단계가 끝나면 다음 명령을 작동되지 않는 이전 단계를 실행할 수 있게 해서 성능을 향상시킬 수 있다. 이것을 pipe 라인이라고 한다.
특징
- 실행되는 과정의 실행시간이 달라서 Pipe라인으로 실행시키기 위해서는 각 단계를 cycle을 가장 오래걸리는 단계의 실행시간으로 통일해야한다.
- 단계별로 시간을 보면 오래걸린 것처럼 보이지만 전체시간을 보면 성능이 향상된다.
- 여러 단계가 동시에 진행되면서 다른 자원에 접근한다.
- 명령에 따라 모든 단계를 실행하지 않을 수도 있는데 Pipe라인의 경우 모든 단계를 통과해야한다.
- 명령이 시작되고 끝나는 과정에서 작동하지 않는 단계가 생겨 성능향상이 줄어든다.
- Pipe라인의 수가 많아지면 많아질수록 성능이 향상된다.
- 하나의 명령이 문제가 생기면 다음 명령들도 문제가 생긴다.
문제점
현재 명령이 문제가 생기면 다음 명령이 실행될 때 문제가 발생할 수 있다.
struct 문제점
같은 resource를 사용하는 문제가 발생합니다. 두 개의 명령어가 동시에 Memory에 접근하거나 registers file에 접근하는 문제가 발생할 수 있습니다.
해결 : 동시에 Memory에 접근하는 경우를 위해서 명령어 Memory와 데이터 Memory를 분리한다. 동시에
registers file에 접근할 경우를 위해서는 register 읽기, 쓰기를 cycle의 전반부와 후반부로 분리한다.
이와 같이 동시 접근에 문제는 하드웨어 resource를 분리해서 해결할 수 있다.
data 문제점
현재 명령어의 결과를 다음 명령어에서 사용해야할 때 갱신되지 않는 값을 이용하게 된다. Backward
해결 1 : forwarding, 해당 명령의 전체과정이 종료되기전에 이미 값이 계산되어 있으면 미리 저장을 해서 다음 명령이 갱신된 값을 이용할 수 있는 방법입니다. 하지만 만약 다음 명령어가 Load명령일 경우 forwarding으로도 해결되지 않습니다. 그래서 다음 명령을 한번 쉬도록 할 수 있는데 이 방법은 성능향상에 도움이 되지 않는다.
해결 2 : code를 scheduling합니다. 다음으로 실행해도 문제가 되지 않는 명령을 먼저 실행하도록 scheduling해서 해결할 수 있다.
control 문제점
Branch 명령 다음으로 실행될 명령어는 Branch 명령의 결과에 의해서 실행되기 때문에 발생한다.
해결 1 : Branch 명령은 ALU에서 연산이 되는데 쉬운 연산이기 때문에 registers file에서 먼저 비교를 해서 값을 전달 할 수 있도록 하는 것이다. 하지만 이것도 두번째 ID단계까지 종료되어야하므로 적어도 한번은 쉬어야한다. 해결 2 : 일단 예측해서 해보는 것이다. Branch 명령 다음에 실행될 명령을 예측해서 실행할 경우 예측이 틀렸을 경우에만 손실이 있고 큰 확률로 성능을 향상 시킬 수 있다.
해결 3 : Branch명령 뒤에서 실행되해도 아무 문제가 없는 명령을 실행시키도록 scheduling을 할 수 있다.
Pipeline register
pipe라인으로 명령이 실행될 때 각 단계에서 계산된 값을 pipeline register에 저장해서 다음 명령어가 이전 명령어의 결과값을 이용해야할 경우 바로 사용할 수 있도록 만들어준다. 이때 결과값뿐만 아니라 control을 같이 저장해서 바로 다음 명령어를 준비한다.
'컴퓨터 구조' 카테고리의 다른 글
컴퓨터 구조 13장 - Parallel Processor (0) | 2020.06.17 |
---|---|
컴퓨터구조 12장 - Memory 2 : Virtual Memory (0) | 2020.06.17 |
컴퓨터구조 12장 - Memory 2 : Associative Caches (1) | 2020.06.17 |
컴퓨터 구조 11장 - Memory 1 (0) | 2020.06.16 |
컴퓨터 구조 6장 - Processor (0) | 2020.05.12 |