-
ILP - Instruction Level Parallelism대학/컴퓨터구조 2023. 6. 12. 22:26
여러 명령어를 동시에 처리하는 기술이다.
이를 달성하기 위해서는 pipeline을 더 세부적으로 쪼개거나,
pipeline stage에 동시에 여러 명령어를 수행하는 방법으로 달성할 수 있다.
이번 포스트에서는 pipeline stage에 여러 명령어를 동시에 수행하는 방법에 대해 알아보자.
64-bit 공간에 32-bit 명령어 2개를 넣어 두 개의 명령어를 동시에 처리하는 것이다.
하지만, 이 방법을 사용할 때는 반드시 지켜줘야 하는 규칙이 있는데,
명령어의 종류가 ALU/branch인 명령어와 Load/Store인 명령어만 동시에 처리할 수 있다는 것이다.
ALU, ALU 또는 ALU, branch 와 같이 성격이 비슷한 명령어를 동시에 처리할 수는 없다.
왜 그럴까? 회로를 살펴보면 알 수 있다.
회로의 복잡도를 크게 늘리지 않게하기 위해 최소한의 회로만 추가하다보니, Sign-extend와 +연산만 가능한 ALU만 추가하게 되었다.
그렇기에 성격이 다른 명령어는 각각의 회로로 동작하다보니, 성격이 비슷한 명령어는 동시에 돌릴 수 없는 것이다.
Hazard
같은 stage에서 두 개의 명령어가 돌아가는 만큼 data hazard 이슈를 피하기는 어렵다.
오히려 forward가 불가해서 1, 2개의 stall이 들어가야 하는 정도이다.
- stall 1개: ALU 연산이 필요한 경우 (add->add, add->load)
- stall 2개: 메모리 접근이 필요한 경우 (load->add)
이를 해결하기 위해서는 명령어 실행 순서를 변경하는 방법이 제일 좋다.
위의 경우처럼 명령어의 배치를 다르게하여 stall은 면할 수 있다.
하지만, 4번째 명령어가 3번째 명령어보다 먼저 수행됨에 따라 변화한 양 만큼 3번 명령어의 인덱스에 변화를 가해야 한다.
Loop Unrolling
위에서 봤던 명령어가 루프를 돈다고 가정해보자. 5개의 명령이 4 사이클 내로 처리되니 5/4IPC를 갖는다.
효율이 생각보다 많이 안나온다.
생각해보면 위 명령어는 값을 읽어오고, $s2의 값을 더한 다음 저장하는 일을 반복한다.
만약 한 번의 루프에서 이 동작을 1번 수행하는 것이 아닌 4번 수행한다면?
위와 같이 인덱스를 수정하고 명령어를 여러개 배치한다면 IPC의 극적인 향상을 볼 수 있을 뿐더러
stall 문제도 자연스레 해결할 수 있다.
'대학 > 컴퓨터구조' 카테고리의 다른 글
Virtual Memory (0) 2023.06.13 Memory hierarchy (0) 2023.06.13 Hazard (0) 2023.06.12 CPU circuit - Pipeline (0) 2023.06.11 CPU circuit - Basic (1) 2023.06.11