파이프라이닝 (Pipelining)

컴퓨터과학·AI
한 줄 정의: CPU가 명령어 하나를 끝까지 처리한 뒤 다음 명령어를 시작하지 않고, 여러 명령어의 처리 단계를 겹쳐서 동시에 진행하는 실행 방식입니다.

쉽게 풀면

세탁소에서 옷을 "세탁 → 건조 → 다림질" 순서로 처리한다고 해봅시다. 한 벌씩 세탁이 끝나야 다음 옷의 세탁을 시작한다면 매우 느립니다. 대신 첫 번째 옷이 건조기로 넘어가는 순간 두 번째 옷을 세탁기에 넣고, 첫 번째 옷이 다림질대로 넘어가는 순간 두 번째 옷을 건조기에 넣으면 전체 작업 속도가 훨씬 빨라집니다. CPU도 마찬가지로 명령어를 "가져오기(Fetch) → 해석(Decode) → 실행(Execute)" 같은 단계로 나누고, 한 명령어가 해석 단계에 있을 때 다음 명령어는 이미 가져오기 단계를 진행하는 식으로 여러 명령어를 겹쳐 처리합니다. 이렇게 하면 명령어 하나하나의 처리 시간은 그대로지만, 단위 시간당 처리되는 명령어의 개수(처리량)는 크게 늘어납니다.

왜 중요한가

파이프라이닝은 트랜지스터 속도 향상만으로는 성능 개선이 한계에 다다른 상황에서 처리량을 늘리는 대표적인 방법이라, 컴퓨터 구조 및 프로세서 설계 논문에서 빠지지 않고 등장합니다. CPU뿐 아니라 GPU, 신경망 가속기, 네트워크 라우터 등 데이터를 연속적으로 처리하는 거의 모든 하드웨어 설계에 같은 원리가 응용되기 때문에, 고성능 컴퓨팅과 반도체 설계 전반을 이해하는 데 기초가 되는 개념입니다.

논문에서는 이렇게 쓰입니다

"제안된 프로세서는 5단계 파이프라이닝(pipelining)을 적용하여 명령어 처리량을 기존 설계 대비 약 1.8배 향상시켰다."

이 문장은 명령어 실행 과정을 여러 단계로 나누어 겹쳐 처리함으로써, 프로세서가 초당 처리할 수 있는 명령어 수가 늘어났다는 뜻입니다.

"딥러닝 가속기 아키텍처는 행렬 곱셈 연산을 파이프라이닝하여 연산 유닛의 유휴 시간을 줄이는 방식으로 설계되었다."

하드웨어 가속기 설계 논문에서 연산 자원의 활용률을 높이는 기법을 설명할 때 쓰이는 표현입니다.

"네트워크 라우터의 패킷 처리 파이프라인은 헤더 파싱, 라우팅 테이블 조회, 포워딩 단계를 겹쳐 실행하도록 구성되었다."

네트워크 시스템 설계 분야에서 패킷 처리 지연을 줄이는 구조를 설명할 때 사용되는 문장입니다.

조금 더 깊게 보면

파이프라인 단계가 늘어날수록 이론적인 처리량은 높아지지만, 데이터 위험(data hazard), 제어 위험(control hazard), 구조적 위험(structural hazard) 같은 문제로 인해 실제 성능 향상 폭은 제한됩니다. 이를 완화하기 위해 포워딩(forwarding), 분기 예측(branch prediction), 명령어 재정렬 같은 보조 기법이 함께 쓰이며, 논문에서 파이프라인 성능을 평가할 때는 이상적인 처리량뿐 아니라 정체(stall)로 인한 손실 사이클(CPI 증가분)을 함께 보고하는 경우가 많습니다.

주의할 점

파이프라이닝은 개별 명령어 하나의 처리 지연시간(latency)을 줄여주는 기법이 아니라, 여러 명령어를 겹쳐 실행해 전체 처리량(throughput)을 높이는 기법입니다. 또한 이전 명령어의 결과를 다음 명령어가 곧바로 필요로 하는 경우나 조건 분기가 발생하는 경우에는 파이프라인이 잠시 멈추는 "파이프라인 정체(stall)"가 생길 수 있으며, 이를 얼마나 잘 처리하느냐가 CPU 스케줄링 및 명령어 실행 효율과 함께 프로세서 성능을 좌우합니다.

관련 용어