0. 팹리스 vs 파운드리
팹리스는 반도체를 직접 생산하지 않고, 설계만을 전문적으로 하는 회사를 일컫는 말이다.
반대로 파운드리는 위탁 생산 전문 업체가 된다.
대표적인 회사들을 좀 알아둬야, 수업 시간에 교수님이 하는 말씀이 자연스레 이해가 될 것 같아 정리해보았다.
팹리스 : apple, 퀄컴, 엔비디아(젠슨 황), amd(리사 수), arm
파운드리 : TSMC, 삼성
cf : 나만 젠슨황, 리사수가 누군지 몰랐던 걸까...? 이제 나도 안다!!!ㅎㅎ
1. pipelined 5 stage의 효과
우선 5 stage는 IF, ID, EX, MEM, WB 의 5단계로 구성된다.
이때 inst의 각 단계를 오버랩하여 pipelined 5 stage로 업그레이드를 한다.
예를들어 pipeline되지 않았을 때 하나의 inst이 5단계를 진행하는 데에 1cycle, 5nsec(각 단계당 1nsec라고 간주)가 걸렸다면,
pipeline 되어 이전 inst의 ID에 다음 inst의 IF가 시작되기 때문에 하나의 inst이 5단계를 진행할 때 1cycle, 1nsec가 걸리게 된다.
(1cycle 씩 5단계니 5cycle이라고 반문할 수 있지만, 바로 다음 inst이 실행되니 전체적으로는 한 inst당 1cycle인 셈이다!)
이것은 1 cycle당 1nsec가 걸린 것으로 생각할 수 있다... ==> CCT의 감소
pipeline에 의해 한 cycle의 개념이 축소되었다고 이해할 수 있다.
한 cycle당 해결해야하는 일이 줄었다고 보면 되고, 덕분에 cct라는 factor가 감소하는 효과를 얻은 셈이다.
그러나 항상 완벽히 오버랩될 수 없다. 이것은 나중에 설명할 stall 때문인데,
이 stall에 의해 1cycle이었던 CPI가 좀 더 증가하는 역효과가 난다.
2. 3가지 종류의 Hazard
① Data Hazard : 이전 inst에서 write한 후 다음 inst에서 read해야하는 경우 등, 필요한 data가 준비되지 않아 생기는 stall을 말한다.
→ forwarding 으로 해결한다. forwarding은 이전 inst의 EX 단계에서 결과를 다음 inst의 EX단계로 바로 넘겨주는 방법이다.
② Control Hazard(Branch Hazard) : branch inst의 결과가 나와야(EX) 다음 inst을 fetch할 수 있기 때문에 생기는 stall이다.
→ branch prediction으로 해결한다.
③ Structural Hazard : 연속된 두 inst의 MEM과 IF가 동일 cycle에 일어날 때 발생하는 stall이다.
둘다 메모리에 접근하는 stage인데, MEM은 data 영역에 접근하고, IF는 inst 영역에 접근한다.
→ 메인 메모리를 I$와 D$로 분리하여 복제해놓는다. (이때, HW쪽에서 일하는 사람들은 이러한 경우 보통 '복제'의 방법을 택하고, SW쪽은 '스케줄링'을 택한다고 한다.ㅋㅋㅋ)
3. 5 stage pipeline의 진화
① Deeper pipelines : stage 개수를 5개에서 20, 30개로 늘리는 방식이다.
single cycle에서 pipelining했을 때 생긴 변화와 마찬가지로, CCT가 감소하는 효과가 있다.
그러면 f가 증가하게 되는데, f의 증가는 발열과 이어지기 때문에 stage 늘리는 데에는 한계가 있다.
(발열 문제는 무한히 해결하기엔 한계에 봉착했기 때문에, 발열을 계속 늘리는 것은 좋지 않다.)
또한 stall CPI가 증가한다. 하나의 stage를 여러 stage로 나누기 때문에, 하나의 stage를 한 cycle에 진행하던 것이 여러 cycle에 나누어 진행하게 되고, 더 많은 dependencies가 생긴다.
그러면 그 여러 cycle 중에서 stall이 걸리는 경우에 의해 stall CPI가 증가하게 된다.
또한 CCT, 즉 clock cycle time의 감소로 clock과 clock간 매우 짧은 시간을 더이상 무시할 수 없게 된다.
이를 clock overhead라 한다.
② Wider pipelines (Superscalar pipelines) : 여러 inst을 동일한 cycle에 동시에 실행하는 방식이다.
CPI(ideal)이 1보다도 감소하는 효과가 있다.
수업 중 누군가 질문한 내용인데, 이것이 core를 여러개 두는 것과 무슨 차이가 있느냐 하면,
core를 여러개 두는 것은 process, thread - level의 병렬성인데 반해
superscalar방식은 instruction - level의 병렬성이다.
③ Diversified pipelines
다양한 종류의 inst들을 고려하여 pipeline의 갈래를 나누는 방식이다.
예를 들어 intAdd, intMult, FPU, Memory access 등 inst의 종류에 따라 다른 갈래를 따라 진행하도록 설계하는 방식이다.
상대적으로 느린 FP 연산이 뒤이어 들어오는 integer 연산들을 block하는 대신 서로 다른 갈래로 가기 때문에
CPI(stall)을 줄이는 효과가 있다.
그러나 완료되는 순서가 달라져 WAW hazard가 생길 수 있다.
④ Out-of-order execution
CPI(stall)을 줄이는 효과가 있다.
'컴퓨터 구조' 카테고리의 다른 글
Speculative Tomasulo's Algorithm (0) | 2024.03.16 |
---|---|
Dynamic Branch Prediction Overview (0) | 2024.03.16 |
Data Hazard 3가지 - RAW, WAR, WAW (0) | 2024.03.16 |
자주 나오는 공식 리뷰 (0) | 2024.03.11 |
[Cache] Cache의 종류와 Memory System (2) | 2023.11.06 |