Computing

Parallelism의 종류 : data vs task vs pipeline 본문

Parallel | Distributed Computing/개념

Parallelism의 종류 : data vs task vs pipeline

jhson989 2022. 3. 15. 23:31

Parallelism

Parallelism은 한국어로 뭐라 번역해야 할 지 잘 모르겠지만 (병렬성?), 프로그램의 병렬화된 상태라고 생각하면 좋을 것 같다. 프로그램이 parallelism을 가진다는 것은 해당 프로그램이 병렬로 실행됨을 의미하고, parallelism을 가지는 프로그램에 대하여 일들을 어떻게 병렬로 실행하는 지에 대해서도 얘기할 수 있다.

 

Parallelism의 종류에는 일반적으로 data parallelism, task parallelism, pipeline parallelism이 존재한다. 일반적으로 data parallelism과 task parallelism을 비교하여 설명하는데, 최근 FPGA를 공부하면서 관심을 가지고 있는 pipeline parallelism도 추가하였다.

 

  • Data parallelism : 프로그램이 각 data를 병렬로 처리함. 각 data는 동일한 process로 처리됨
    • 예) 1, 2, ...., N까지 수에 대하여 제곱을 구할 때, P개의 프로세서가 N/P개씩 맡아 제곱을 구함
    • SIMD (Single Instruction, Multiple Data, 다수의 데이터 처리를 동일한 명령어로 처리), SPMD (Single Program, Multiple Data, 다수의 데이터를 동일한 프로그램or커널or함수으로 처리), vector 연산이 이에 해당함
    • 대부분의 GPU kernel (OpenCL ND-range or CUDA Grid)는 data parallelism으로 구현됨
  • Task parallelism : 프로그램이 각 task를 병렬로 처리함
    • 예) P개의 프로세서가 func1(), func2(), ..., funcN()을 맡아 처리함
    • OpenMP의 tasking은 task parallelism을 구현함. 각 프로세서가 매우 다양한 workload를 가지기에 Multi CPU를 이용한 구현이 쉬움.
    • Deep learning에서 model parallelism이 이에 해당함
  • Pipeline paralleism : 프로그램이 Pipeline 구조로 설계되어 data를 병렬로 처리함. 이때 Pipeline의 각 stage는 다른 task를 실행함
    • 각각의 Data가 병렬로 처리되지만 각각 다른 routine(task)로 처리됨
    • 예) FPGA의 가장 기본이 되는 parallelism
    • 프로그램이 밑의 그림과 같이 N개의 stage들로 구성된 pipeline으로 구현됨. N개의 processor는 N개의 stage를 맡아 실행함
      • (ex 명령어 실행 파이프라인은 fetch - decode - execute - write로 구성됨)
    • n번째 stage를 맡은 프로세서는 i번째 데이터를 처리한 후 (i+1)번째 데이터를 처리함. n번째 stage를 통과한 i번째 데이터는 (n+1)번째 stage로 넘어가 처리됨

quora.com/What-is-pipelining Pipeline 기본 개념