티스토리 뷰

728x90
반응형

본 포스팅은 "프로그래머가 몰랐던 멀티코어 CPU 이야기" 를 읽고 주인장의 생각을 정리한 게시글 입니다.

책정보, 프로그래머가 몰랐던 멀티코어 CPU 이야기 : 네이버 책 (naver.com)

 

프로그래머가 몰랐던 멀티코어 CPU 이야기

CPU는 그저 복잡한 하드웨어가 아니다!블로그에서 바로 읽는 듯한 생생한 개발 노하우「BOLG2BOOK」시리즈 제 9권 『프로그래머가 몰랐던 멀티코어 CPU 이야기』. 이 책은 기본적인 CPU 구조에 대한

book.naver.com

1. Pipeline?

프로그래밍을 한번이라도 해보신 분이라면, 이 Pipeline이라는 말을 많이 들어보셨을 겁니다.

 

Pipelinging은 Pipeline을 일련된 작업은 단계를 나누고, 여러 작업을 중첩되게 실행시켜 throughput을 높이는 방법 입니다.

(가장 대표적으로 명령어 처리 단계를 5단계로 나눈 것이라고 볼 수 있습니다)

 

아래 예시를 보시죠

         === : 처리 완료, --- : 처리 중
         명령어 인출기 | 명령어 해독기 | 피연산자 인출기 | 연산기 | 피연산자 저장기
 명령어1 =========================================================----------------
 명령어2 ================================================--------
 명령어3 ===============================-----------------
 명령어4 ===============---------------
 명령어5 ---------------
 
 5단계의 Pipelining로 동시에 5개의 명령어가 중첩되어 처리되는 중

각 단계가 3초가 걸린다고 할 때, Pieplining화가 없으면 3*5*5 = 75초가 걸립니다.

 

하지만, Pieplining화 된 경우, 이상적이라면 3*5+12 = 27초가 걸립니다.

(명령어 1이 15초후에 완료되고, 나머지 명령어가 3초마다 차례대로 완료됨)

         (각 Symbol 1개당 1초라고 가정 했을 때)
         명령어 인출기   : ***
         명령어 해독기   : ///
         피연산자 인출기 : ---
         연산기          : ===
         피연산자 저장기 : &&&
 
 *** /// --- === &&&(명령어1) *** /// --- === &&&(명령어2) .... *** /// --- === &&&(명령어5)
Pipelining화 없이 처리 모습 (총 75초 소요)


 명령어1 *** /// --- === &&&
 명령어2     *** /// --- === &&&
 명령어3         *** /// --- === &&&
 명령어4             *** /// --- === &&&
 명령어5                 *** /// --- === &&&
Pipelining화 되었을 경우의 처리 모습(27초 소요)

Pipeline으로 나눈 작업이 이상적으로 같은 시간이 걸린다는 가정 하에, Pipeline을 나눌 수록 throughput을 올라가게 됩니다.

 

2. 현실적인 Pipeline

하지만 녹녹하지 않습니다. 쪼갠 작업이 모두 비슷하면 좋겠지만, 아래와 같은 Pipeline의 단계에 불균형이 존재할 경우 큰 효과를 보기 어렵습니다.

         (각 Symbol 1개당 1초라고 가정 했을 때)
         명령어 인출기   : *
         명령어 해독기   : //////
         피연산자 인출기 : --
         연산기          : ========
         피연산자 저장기 : &&
 
 명령어1 * ///// -- ======== &&
 명령어2   *    ///// --    ======== &&
 명령어3     *       ///// --       ======== &&
 명령어4       *          ///// --          ======== &&
 명령어5         *             ///// --             ======== &&          
안타까운 모습의 Pipelining 결과

위처럼 명령어1의 명령어 해독 중에 명령어2가 명령어 해독을 기다리게 되면서 명령어2의 Pipeline이 멈추는 현상이 발생하며, 이를 Pipeline Stall이라고 합니다.

 

Pipeline Stall은 throughput을 감소시킬 뿐 아니라, 특정 명령어의 처리가 지연되면서 Latency발생의 원인이 됩니다.

 

Pipeline의 단계를 많이 나눌수록 이런 Pipeline Stall이 상대적으로 감소하지만, Pipeline의 깊이가 너무 깊어지면 이를 위한 H/W나 여러모로 Cost가 증가하게 됩니다.

 

나중에 이야기 하지만, 이 Pipeline의 깊이는 CPU의 Clock과도 밀접한 연관이 있습니다.

 

한 단계의 Pipeline은 CPU의 1 Cycle과 대응되기 때문 이죠.

(그래서, 다른 Technique이 없이 일반적인 이상적으로 Pipelineing 된 CPU의 경우 1Core에서 IPC가 1이 나오게 됩니다 = 1Cycle마다 명령어가 하나씩 완료됨)

 

 

728x90
반응형

'컴퓨터과학 > CPU' 카테고리의 다른 글

비순차 실행(1편)  (0) 2022.07.01
명령어 파이프라인(2편)  (0) 2022.06.29
CPU동작(BackEnd)  (0) 2022.06.02
CPU동작(FrontEnd)  (0) 2022.05.12
CPU의 성능 지표(CPI, IPC, Clock...)  (0) 2022.05.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함