While GPGPU programming models such as CUDA and OpenCL are good for exploiting data
parallelism, it is difficult to exploit pipeline parallelism with them. Since there are many workloads
that spend a large portion of runtime on I/O device access, serial CPU thread execution and/or data
transfer through PCIe, performance can be significantly improved if pipeline parallelism between those
components is properly leveraged. Unfortunately, current GPGPU programming models can require a
signicant programmer eort to leverage the parallelism due to complex data dependency.
In this work, we propose a framework to exploit implicit pipeline parallelism, without requiring a
programmer to explicitly specify data dependency. We propose hardware-based dynamic dependency
tracking mechanism to overlap dierent stages of GPU-accelerated workloads and reduce runtime. Also,
our framework does not require any kernel modication or complex dependency tracking by programmer.
Our evaluation results show that the proposed framework signicantly reduces overall runtime that
includes not only kernel execution time but also I/O and data transfer time by up to 40% and by 24%
overall.
현재 GPGPU 프로그래밍 모델들은 데이터 병렬화를 수행하기에는 최적화되어 있지만 이를 가지고 여러 단게를 파이프라인 하기에는 어렵다. 하지만 전체 수행시간중에 입출력장치에 접근 시간, 일렬의 중앙처리장치의 쓰레드를 실행하는 시간이나 PCIe를 통해 데이터를 전달하는 시간등 커널의 수행시간을 제외한 많은 부분이 수행시간의 대부분을 차지하고 있는 워크로드가 많기 때문에 만약 이부분이 파이프라인화된다면 전체 성능이 크게 증가할 것이다. 수동적으로 CUDA 프로그래밍에서 파이프라인하기 위해서 프로그래머에게 많은 노력을 요구하며, 실제로 커널 사이의 의존성을 파악하기에 어렵다. 따라서 이 논문에서는 프로그래머에게 분명하게 의존성을 명시해야하는 노력을 요구하지 않는 암시적인 파이프라인 병렬화를 위한 프레임워크를 제안한다. 특히 의존성 확인 부분을 하드웨어 부분에서 처리함으로써 여러 스테이지를 오버랩을 가능하게 하며 또한 커널 코드의 수정이 필요하지 않게 하여 프로그래머의 노력을 최소한으로 하는 방안에 대해 다루고자 한다.