Hello Computer Vision

비전공생의 컴퓨터 구조 11, 12주차 강의 기록 본문

컴퓨터구조

비전공생의 컴퓨터 구조 11, 12주차 강의 기록

지웅쓰 2022. 11. 26. 01:21

이번 주에 과제가 너무 몰려서 정신이 없었는데 그나마 조금 정리가 되서 2개 강의를 한번에 

기록하려고 합니다.

 

지난 번에 이어 pipeline에 대한 예시들이 주로 이루었습니다.

 

파이프라이닝을 하지 않으면 데이터 의존성(Data dependences)를 신경쓸 필요 없다

(하지 않는다면 명령어들이 순서대로 들어와서 실행하게 되니까)

그러나 파이프라이닝을 한다면 명령어의 실행들이 overlap되기 때문에 신경써주어야 한다.

ex) 명령어가 fetch 하고 decoding할 때 그 다음 명령어가 fetch하는 과정을 거친다.

이러한 과정에서 명령어마다 read하는 속도가 다를 수 있는데 뒤에 있는 명령어의 read가 더 빨리 실행될 경우

뒤에 있는 명령어를 write하는 문제가 발생할 수 있음 --> 데이터 종속성 필요

 

그래서 명령어를 read할 때 잘 체크해야하며, 실행을 마칠 때까지 기다려줘야함

이렇게 파이프라이닝을 하는 과정에서 수시로 멈추면 효율성이 떨어지는데

해결책 : data bypass 

바로 앞에 있는 명령어를 가져와 실행한다.(이건 정확히 잘 이해 못했습니다..)

So 멈춤 없이 사용가능하다.

 

이러한 문제들은 레지스터 뿐만 아니라 메모리에서도 발생가능하다.

장소를 공유하기 때문에 발생하는 일.

 

파이프라인의 위험성은 이것뿐만 아니라 여러개 있는데

Structured Hazard, Control Hazard 가 추가로 있다.

 

Structured Hazard : 리소스가 제한되어 발생

ALU 가 1개인데 기다리는 명령어의 사이클이 많아서 기다릴 경우 발생

So Floating Point같은 실행이 오래걸리는 것들은 파이프라인을 안할 수도 있다.

 

Control Hazard(Branch Hazard)

Branch 명령어는 주소를 결정한다.

Integer spec의 24%는 branch라 계속 멈추게 된다.

실제로는 branch 를 관리해주는 하드웨어가 있는데 이것이 branch prediction

대표적 ex) BTB(branch target buffer)

처음에는 branch인지 아닌지 모르지만, 들어온 명령어의 주소를 기록 -> 기존의 것들과 비교하여 있으면 branch라 판단

 

강의 필기는 여기까지입니다.

아무래도 전기전자공학과에서의 컴퓨터 구조이다 보니 레지스터 연산, 프로세싱 부분을 굉장히

심도있고 자세히 다루는 것 같습니다.

 

해당 강의는 최린교수님의  강의를 필기한 것입니다.

https://www.youtube.com/watch?v=4ya12LcWI7g&list=PLL3t9Nt4Hrfv-6V3ylNL4N90TztqlSJOe&index=9