그라운드 임베디드 유튜브 구독

노트 / 컴퓨터구조

파이프라인: 명령어를 겹쳐서 처리하기

빨래를 세탁, 건조, 개기로 나눠 겹쳐 하듯 CPU도 명령어 처리 단계를 겹칩니다. 분기가 느린 이유도 여기서 나옵니다.

GROUND EMBEDDED · 정리 노트컴퓨터구조 03파이프라인클럭12FetchABDecodeA

명령어 하나를 끝까지 처리한 다음에 다음 명령어를 시작하면 각 단계 회로가 대부분 놀게 됩니다. 파이프라인은 단계별로 다른 명령어를 동시에 처리합니다.

클럭 1 2 3 4
Fetch A B C D
Decode A B C
Execute A B

명령어 하나에 걸리는 시간은 같지만 매 클럭마다 하나씩 끝나서 처리량이 늘어납니다. Cortex-M3/M4는 3단, M7은 6단 파이프라인입니다.

분기가 비싼 이유

조건 분기는 Execute 단계에 가서야 갈지 말지가 정해집니다. 그때까지 파이프라인에 들어온 다음 명령어들은 버려야 하고, 새 주소에서 다시 채우느라 몇 클럭을 잃습니다. 그래서 짧고 자주 도는 루프에서는 분기를 줄이는 것만으로도 빨라집니다.

실무에서 보는 곳

  • 데이터시트의 "인터럽트 지연 12클럭"에는 파이프라인을 비우고 다시 채우는 시간이 포함됩니다.
  • Flash가 CPU보다 느리면 대기 상태(wait state)가 생겨 파이프라인이 멈춥니다. STM32의 Flash 프리페치와 ART 가속기가 이를 줄이는 장치입니다.