작성일: 2/7/2024, 2/10/2024
파이프라이닝 설명과 장단점
키워드:
병렬 프로그래밍
한 줄 요약:
대용량 데이터 처리를 효율적으로 처리하기 위한 병렬 프로그래밍 기법.
설명
Pipelining 기법을 설명하는 대표적인 예시
위 그림과 같이 옷을 세탁할 때는 1) 세탁물 이동, 2) 세탁기 기동, 3) 건조기 기동, 4) 의류 정리의 과정을 거치게 된다. 이때 20kg의 옷을 최대 용량이 10kg인 세탁기와 건조기를 사용한다고 했을 때 어떤 방식이 가장 효율적일까?
단일 사이클인 경우
만약 건조 기능이 포함된 세탁기를 사용한다고 했을 때, 가장 먼저 세탁기의 최대 용량인 10kg의 세탁물이 세탁기에 들어갈 것이다. 세탁이 끝난 뒤 건조기로 들어가고, 건조가 완료되면 10kg의 옷을 정리한다. 정리가 끝나면 나머지 10kg에 대한 작업을 다시 한번 수행한다.
10kg 세탁물 이동 → 10kg 세탁 수행 → 10kg 건조 수행 → 10kg 의류 정리 → 1회차 완료 → 10kg 세탁물 이동 → 10kg 세탁 수행 → 10kg 건조 수행 → 10kg 의류 정리 → 2회차 완료
파이프라이닝(Pipelining) 방식
10kg 건조기를 따로 사용하여 병렬적으로 작업을 수행하면 어떻게 될까? 10kg 세탁 과정까지는 공통으로 수행된다. 세탁이 끝난 후 10kg의 옷이 건조기로 이동되는 동시에 10kg의 세탁물이 다시 세탁기로 이동되어 작업을 수행한다. 건조기가 건조 작업을 끝내기 전에 다음 10kg의 세탁 작업이 끝난다면, 건조기는 쉬지 않고 계속 돌게 된다. 이 과정을 정리해 보면 아래와 같다.
10kg 세탁물 이동 → 10kg 세탁 수행 → 10kg 건조 수행 → 10kg 의류 정리 → 1회차 완료
다음 10kg 세탁물 이동 → 10kg 세탁 수행 → 10kg 건조 수행 → 10kg 의류 정리 → 2회차 완료
프로세스별로 30분의 시간이 소요된다고 가정했을 때 건조 기능이 포함된 세탁기 운용 시 총 4시간이 걸리지만, 건조기를 병렬로 운용할 시 2시간 30분이 걸리게 된다. 이 차이는 세탁물의 양이 많아질수록 커지게 된다.
예를 들어, 세탁물 프로세스가 총 4번 수행될 경우 아래와 같은 효율을 얻을 수 있다.
- Number of processes: N=4
- Duration of each process: D=30 minutes
- Total runs: R=4
- Total duration in linear execution: Tsequential=N×D×R=480 minutes
- Total duration in pipelining: Tpipeline=D+(N−1)×D+(R−1)×D=210 minutes
Efficiency Calculation
# Given values
N = 4 # Number of processes
D = 30 # Duration of each process in minutes
R = 4 # Total runs
# Linear execution time
T_linear = N * D * R
# Corrected calculation for pipelining execution time
T_pipeline = N * D + (R - 1) * D
# Efficiency calculation
efficiency = T_linear / T_pipeline
T_pipeline, efficiency
# Result: (210, 2.2857142857142856)
만약 건조기가 한 번에 처리할 수 있는 용량이 5kg이라면 어떨까? 회차별로 건조 기능이 총 2번 동작해야 하므로 세탁기가 생성한 세탁물이 건조되는 과정에서 병목현상이 발생하게 된다. 하지만 위 문제는 5kg 건조기를 한 대 더 운용함으로써 간단히 해결될 수 있다.
위 예시에서 세탁물은 data, 각 세탁 과정은 process, 세탁기와 건조기는 thread로 대입하여 생각한다면 파이프라이닝 방식을 쉽게 이해할 수 있다. 따라서 많은 데이터를 효율적으로 처리하기 위해서는 데이터를 병렬로 처리될 수 있는 프로세스로 구분한 뒤 프로세스 별로 필요한 자원을 할당하여 처리하는 방식이 적합하며, 이 것을 파이프라이닝(Pipelining)이라고 한다.
장점:
- Fast Processing: 작업 처리 시간을 줄일 수 있다. 순차적으로 처리되어야 하는 한 작업을 하위 작업으로 나누어 동시에 처리하는 방식으로 처리량을 높일 수 있다. 그 때문에 더 적은 시간으로 더 많은 작업을 처리할 수 있다.
- Improved Resource Utilization: 사용할 수 있는 자원을 더욱 효율적으로 사용할 수 있다. 위의 세탁 예시에서 건조 작업이 다른 작업보다 더 많은 시간과 자원이 필요한 경우, 건조기를 하나 더 추가하는 방식으로 병목 현상을 줄일 수 있었다. 이처럼 데이터 처리 과정에서 연산 작업 등 CPU 자원이 많이 사용되는 프로세스는 Thread를 추가하여 작업량과 처리 속도를 향상 수 있다.
- Flexibility: 파이프라인 구조에서는 하위 작업별로 퍼포먼스를 조절할 수 있기 때문에 상황에 맞춰 유연하게 데이터를 처리할 수 있다. 시스템 자원은 무한하지 않기 때문에 우선순위에 따라 자원 사용을 최적화할 필요가 있다. 특정 작업은 짧은 시간 안에 최대한 빠르게 결과물을 전달해 줄 수도 있고, 작업의 특정 단계까지는 빠르게 처리하고 이후 작업은 queue에 넣어서 가용 자원이 있을 때만 처리하도록 파이프라인을 구성할 수도 있다. 이처 파이프라이닝 기법을 사용하면 서버의 시스템 자원과 사용자의 목적에 따라 프로세스를 최적화할 수 있다.
- Lower Latency: 결과물을 받기까지의 지연 시간을 줄일 수 있다. 파이프라이닝은 한 작업을 하위 작업으로 나뉘어 동시에 처리하기 때문에 순차적으로 수행했을 때 겪게 되는 병목 현상을 줄여 사용자에게 더 빠르게 최종 결과물을 전달할 수 있다.
- Scalability: 확장성이 높다. 데이터의 규모가 커지고 처리 과정이 추가돼야 할 때, 파이프라이닝에서는 특정 단계의 작업에 자원을 추가하거나, 파이프를 추가하는 방식으로 빠르고 확실하게 대응이 가능하다. 따라서 데이터 크기와 프로세스 복잡도가 변동적인 경우, 파이프라이닝 기법은 가장 적합하게 사용될 수 있다.
단점:
- Pipeline Stalls: 파이프라인 정지. 파이프라인이 잘 관리되지 못하면 특정 단계에서 이전 단계의 데이터를 받지 못하여 계속 대기하고 있는 문제가 발생할 수 있다. 단계별로 enqueue, dequeue 데이터 처리량과 waiting time을 기록하여 상황과 환경에 따라 적절하게 병목현상을 해결할 수 있어야 한다.
- Increased Complexity: 데이터를 병렬적으로 처리하기 때문에 시스템 복잡도가 높아진다. 어떤 데이터가 어떤 단계에서 처리되고 있는지 디버깅하기 어려워지고 단계별로 요구되는 시스템 자원이 달라질 수 있기 때문에 운영에 필요한 지식이 더 많이 요구된다.
- Higher Overhead: 데이터를 처리하기 위해 들어가는
간접적인
처리 시간이 발생한다. 파이프라인의 단계별로 병렬 작업을 수행하기 위한 데이터의 정합성, 동시성, 병렬성을 보장하는 로직이 추가됨에 따라 overhead가 발생하는 문제가 있다. - Difficulty of Parallelization: 파이프라이닝은 순차적인 작업을 병렬화하기 위해 사용되기 때문에 병렬로 처리되기 어려운 데이터 프로세싱 작업을 처리하는 데는 적합하지 않다. 예를 들어, 이전 단계의 데이터가 반드시 순서대로 처리돼야 하거나 단계별로 의존성이 높은 작업이라면 파이프라이닝은 최선의 선택이 아닐 수 있다.
- Limited Scaling: 데이터의 크기와 프로세스의 복잡도 변화에 따라 파이프라인을 추가하는 방식으로 빠르고 확실하게 대응할 수 있지만, 파이프라인이 무한정 늘어나게 된다면 그만큼 overhead가 증가하게 되고, 관리해야 할 파이프라인이 증가함에 따라 pipeline stalls 현상이 발생할 확률도 증가한다. 따라서 적정선을 넘은 파이프라인은 성능과 관리 측면에서 효율적이지 않을 수 있다.
추후 커버할 주제: hazards, deadlock, mutex, Semaphore, event, barrier
참고 자료:
- Advantages and Disadvantages of Pipelining: https://aspiringyouths.com/advantages-disadvantages/pipelining/ (opens in a new tab)