본문 바로가기

Paper

Work-In-Progress: Understanding the Effect of Kernel Scheduling on GPU Energy Consumption

 

 

Abstract

 임베디드 플랫폼에서 사용할 수있는 범용 그래픽 처리 장치 (GPU)는 실시간 사이버 물리 시스템에 많은 관심을 얻었습니다. GPU가 일반적으로 멀티 태스킹 환경의 많은 컴퓨팅 집약적 작업에서 CPU보다 성능이 뛰어나다는 사실에도 불구하고 높은 전력 소비는 여전히 어려운 문제입니다. 이 논문에서는 최신 상용 임베디드 하드웨어인 NVIDIA AGX Xavier GPU의 에너지 소비 특성에 대한 연구를 다양한 동시성 수준과 커널 스케줄링 순서에 따라 제공합니다. 우리의 연구 결과는 실시간 보장을 통해 GPU를위한 에너지 효율적인 스케줄러를 설계하는 길을 열었습니다.

 

I. INTRODUCTION

 요즘 GPU는 뛰어난 성능으로 인해 인기를 얻고 있습니다. 엄청난 양의 계산 및 병렬 처리가 필요한 작업을 GPU로 오프로드하면 사이버 물리 및 자율 애플리케이션의 성능이 크게 향상됩니다. 실시간 멀티 태스킹은 이러한 GPU 가속 애플리케이션을 개발하기위한 필수 전제 조건입니다. 예를 들어 사용자는 속도를 높이고 GPU 리소스 효율성을 개선하기 위해 여러 스트림을 생성하고 해당 스트림에 독립 커널을 할당하여 동시 커널을 실행할 수 있습니다. 전력 관리는 임베디드 환경에서 GPU를 효율적으로 사용하기 위한 주요 요소 중 하나입니다.

 [1]에 따르면 GPU 전력 관리는 커널 동기화 및 리소스 활용으로 인한 에너지 낭비 감소, 구성 요소 온도 감소를 통한 확장 성 및 신뢰성 향상, 추가 냉각 필요성 방지와 같은 다양한 이점을 가져올 수 있습니다.
 커널 스케줄링 순서는 GPU의 실행 효율성에 중요한 역할을 합니다. 커널에는 각각 여러개의 스레드가있는 스레드 블록 (TB) 세트가 포함됩니다. TB 수 (그리드 크기)와 각 TB의 스레드 수 (TB 크기)는 커널이 시작될 때 제공됩니다. 그런 다음 TB는 거의 라운드 로빈 방식으로 실행하기 위해 SM (Streaming Multiprocessors)에 연결됩니다 [2]. 각 SM에서 사용할  수 있는 리소스의 양은 하드웨어 아키텍처에 따라 다릅니다. 할당된 SM에서 각 TB의 실제 시작 시간은 공유 메모리, 스레드 수 및 레지스터 수와 같은 다양한 SM 리소스에 의해 결정됩니다. 여러 커널이 동시에 시작될 때 하드웨어 동작과 성능이 스케줄링 순서에 따라 달라질 수 있다는 점이 이전 작업 [3]에 나와 있습니다.

 이 논문에서는 커널 스케줄링이 GPU 에너지 소비에 미치는 영향에 대한 실험 결과를 제시합니다. [2]에 잘 설명된 NVIDIA GPU 스케줄링 정책을 기반으로 최신 Nvidia 임베디드 GPU 플랫폼인 AGX Xavier에 다양한 TB 크기의 합성 커널을 사용하여 다양한 제어 환경을 구축했습니다. 우리는 전력 소비와 커널 스케줄링 결정, 즉 sequential vs. concurrent 및 실행 순서 사이에 강한 관계가 있음을 발견했으며 이러한 정보를 사용하면 에너지 효율적인 실시간 GPU 스케줄러를 구축 할 수 있습니다.
 나머지 문서는 다음과 같이 구성되어 있습니다. 섹션 II는 실험 설정에 대한 간략한 요약을 제공하고 섹션 III 및 IV에서는 다양한 동시성 수준 및 커널 실행 순서에 따른 GPU 에너지 소비에 대해 설명하며 섹션 V는 문서를 마무리합니다.

 

II. EXPERIMENTAL ENVIRONMENT

 실험은 CUDA 10.0 SDK를 사용하여 Jetson AGX Xavier Developer Kit에서 수행됩니다. Xavier 플랫폼에는 CPU와 16GB 메모리를 공유하는 통합 512 코어 GPU가 있습니다. GPU에는 각각 64개의 CUDA 코어가 포함 된 8 개의 SM이 있습니다. SM 당 최대 활성 스레드 수는 2048 개입니다. GPU 전력 소비는 tegrastats [4]를 사용하여 측정하고 에너지 소비는 커널 실행 시간 동안 전력 소비 기록을 통합하여 얻습니다. 측정 부정확성을 최소화하기 위해 GPU의 동적 전압 / 주파수 스케일링 (DVFS)을 비활성화하고 실험 중에 고정 클록 주파수 세트를 사용했습니다. 기본적으로 플랫폼은 GPU 클럭 주파수가 670MHz로 설정되고 4개의 CPU 코어가 활성화 된 15W 모드에서 실행됩니다. GPU는 다른 주파수 (예 : 520, 900 및 1377MHz)에서 실행되도록 구성 할 수 있습니다. 그러나 다른 주파수에서의 에너지 소비 거동은 실험에서 유사한 패턴을 가지고 있기 때문에 단순화를 위해 670MHz에서 얻은 결과만 나타냅니다.

 

III. EFFECT OF KERNEL CONFIGURATION AND CONCURRENCY

 커널 매개 변수 및 실행 모드를 탐색하기 위해 컴퓨팅 집약적인 합성 커널 (compute-intensive synthetic kernels) 세트를 만들었습니다. 각 커널에는 사용된 각 스레드에 대해 고정된 양의 워크로드가 있습니다. 처리 요소에 초점을 맞추기 위해 이러한 커널에는 메모리 작업이 포함되지 않습니다. 각 커널의 TB 수 (그리드 크기)는 8로 설정됩니다. 이는 대상 GPU의 총 SM 수와 같으며 모든 TB가 하드웨어 스레드 블록 스케줄러[2]에 의해 모든 SM에 균등하게 분산되도록 합니다. 실험의 편의를 위해 사용자가 TB 수와 개별 커널의 TB 크기를 구성하고 실험에서 커널 수와 동시성(concurrency) 수준을 정의 할 수있는 도구를 개발했습니다.

 

Observation 1. 커널의 실행 시간은 TB 크기에 따라 선형적으로 감소하지 않습니다.


 실행 시간이 에너지 소비와 직접 관련이 있다고 가정하므로 먼저 TB 크기 (TB 당 스레드 수)가 다른 개별 커널의 실행 시간을 측정했습니다. 결과를 Table 1에 나타냅니다. 이 표에서 TB 크기 값은 각 스레드가 동일한 작업을 수행하고 다른 모든 매개 변수가 커널 전체에서 동일하기 때문에 해당 커널의 계산 워크로드의 상대적인 양을 나타냅니다. 실행 시간은 TB 크기와 함께 감소하고 TB 크기가 128보다 작아지면 정체됩니다. 이는 스레드 수가 너무 적으면 GPU가 잘 병렬화 할 수 없어 리소스 활용도가 떨어질 수 있음을 의미합니다.

 동시성 수준과 에너지 소비 간의 관계를 이해하기 위해 순차 및 동시 (sequential and concurrent) 실행 모드에서 합성 커널 세트를 실행합니다. 순차 모드(sequential mode)에서 세트의 다음 커널은 이전 커널이 완료된 경우에만 실행됩니다. 반면에 동시 모드에서는 세트에있는 모든 커널의 시작 요청이 각각 별도의 CUDA 스트림을 사용하여 GPU에 한 번에 제출됩니다.


Observation 2. 주어진 수의 커널에 대해 동시 실행 모드는 순차 모드에 비해 실행 시간과 에너지 소비를 향상 시키지만 향상 정도는 TB 크기에 따라 다릅니다.


 Table II와 III은 순차 및 동시 실행 모드에서 16개 커널 세트의 완료 시간과 에너지 소비를 비교합니다. 모든 커널의 그리드 크기(커널 당 TB 수)는 같습니다. 일반적으로 동시 모드는 TB 크기가 작을 때 큰 향상을 보입니다. 이러한 작은 TB 중 많은 수가 동일한 SM에서 동시에 실행될 수 있기 때문입니다. 그러나 TB 크기를 절반으로 줄여도 실행 시간이나 에너지 소비가 절반으로 줄어들지는 않습니다. 예를 들어 동시 실행시 TB 크기가 512에서 256으로. 또한 시간과 에너지의 향상 비율이 다릅니다.

 

Observation 3. GPU 전력 소비는 동시성 수준의 영향을 받지만 워크로드 양에 비례하지는 않습니다.

 

 그림 1은 동일한 커널 K1, K2 및 K3을 시작할 때의 전력 소비 곡선의 예를 보여줍니다. 각 커널의 TB 크기는 32이고 그리드 크기는 8입니다. 먼저 시간 0 (Phase 1)에 K1을 시작하고 K1이 완료된 직후에 K2와 K3을 동시에 시작합니다 (Phase 2). 곡선은 tegrastats 유틸리티에서 얻은 순간 전력 소비를 나타내며 점선은 각 단계가 종료되는 시간을 나타냅니다. Figure 1에서 볼 수 있듯이 처음에는 커널 인스턴스가 시작 되려고 할 때 전력 소비가 약 600mW 정도로 낮습니다. 이는 정적 전력 소비로 인한 것이며 0이 될 수 없습니다. 첫 번째 커널이 시작 되자마자 전력 소비가 상대적으로 높은 수준으로 증가합니다. 그런 다음 두 개의 동시 커널이 시작되면 더 많은 GPU 리소스가 사용되기 때문에 전력 소비가 더욱 높아집니다. 마지막으로 모든 커널이 완료되면 전력 소비가 초기 수준으로 돌아갑니다. Phase 1 and Phase 2의 전력 소비 차이는 약 150mW에 불과하지만 초기 상태와 Phase 1 간의 차이는 약 750mW로 훨씬 더 큽니다.

 

 

Observation 4. 동일한 커널 집합의 경우 총 완료 시간은 동시 실행 모드의 커널 수에 비례하지 않습니다.

 

 또한 모든 커널이 동일 할 때 커널 수가 미치는 영향에 대해서도 논의합니다. Table IV 및 V는 서로 다른 실행 모드에서 주어진 커널 개수에 대한 완료 시간 (duration), 전력 및 에너지 소비를 보여줍니다. Sequential mode (Table IV)에서 전력 소비는 커널 수에 관계없이 항상 동일하게 유지됩니다. 이 모드는 한 번에 하나의 커널만 실행하므로 이것은 분명합니다. 에너지 소비는 실행 시간의 선형 함수로 제공됩니다. 그러나 Concurrent mode에서는 완전히 다른 관찰이 이루어집니다. 전력 소비는 커널 수가 16개가 될 때까지 sub-linearly 증가합니다. 에너지 소비의 경우 16개까지 약간만 증가합니다(예 : 커널 수가 1개에서 8개로 증가하면 약 70%의 에너지 증가가 발생합니다.). 이후 커널 수에 따라 선형적으로 증가합니다. 즉, 동시 실행 모드에서 전력 및 에너지 소비가 반드시 커널 수에 비례하여 증가하지는 않습니다.

Observation 5. 일반적으로 동시 실행 모드는 에너지 소비 측면에서 순차 모드를 능가합니다.

 

 이 관찰은 두 모드의 에너지 소비를 비교하는 위의 모든 결과에 의해 뒷받침됩니다. 한 가지 경우를 제외하고 (Table III의 TB 크기=1024) 동시 실행 모드에서 상당한 양의 에너지가 절약됩니다. 이 효과는 특히 TB 크기가 작아지고 커널 수가 많을 때 중요하며 실험 결과에서 최대 83%의 에너지가 절약됩니다.

 

IV. EFFECT OF KERNEL SCHEDULING

 앞서 언급 한 결과를 바탕으로 커널 스케줄링 순서가 변경 될 때 에너지 소비도 달라지는 것을 보여주는 추가 실험이 수행됩니다. Table VI에 나열된 바와 같이, 우리는 TB 크기 128, 256 및 1024에 따라 3 개의 그룹으로 분류되는 40 개의 독립 커널 K1, K2, ..., K40을 사용합니다. 각 커널의 그리드 크기는 앞서 언급했듯이 Xavier GPU의 SM 수인 8로 선택됩니다. 이를 통해 각 SM에서 TB 실행을 쉽게 추적 할 수 있습니다. 각 커널에는 별도의 CUDA 스트림이 할당됩니다.

 이 구성에서는 (i) sequential, (ii) concurrent, and (iii) partially concurrent scheduling의 세 가지 커널 스케줄링 접근 방식이 고려됩니다. 첫째, sequential 스케줄링은 모든 커널 실행을 직렬화하고 ID 순서대로 커널을 시작합니다. 둘째, concurrent 스케줄링은 GPU의 동시성과 활용도를 극대화하기 위해 커널을 재정렬합니다. 마지막으로 부분 동시 스케줄링은 동시 커널 실행을 허용하지만 동시 커널 수를 언제든지 2개로 제한합니다.

 

 Fig. 2는 세 가지 스케줄링 방식에 따른 모든 커널의 TB 실행 타임 라인을 보여줍니다. 단순화를 위해 GPU의 첫 번째 SM 인 SM 0의 결과만 표시하지만 모든 SM이 각 커널에 대해 동일한 수의 TB를 할당하므로 다른 SM은 동일한 결과를 갖습니다. 이 그림에서 K_i : j는 커널 K_i의 j번째 TB를 나타냅니다. x축은 시간이고 y축은 해당 SM의 활성 스레드 수를 나타냅니다. Xavier GPU에서 지원하는 SM 당 최대 활성 스레드 수는 2048 개입니다.

 

 알 수 있듯이 순차 스케줄링 (Fig. 2a)은 한 번에 하나의 커널 만 실행하고 가장 긴 완료 시간을 생성합니다. 대조적으로, 동시 스케줄링 (Fig. 2b)은 Group 3, 2, 1의 순서로 커널을 시작하여 가장 짧은 완료 시간을 제공합니다. Group 3의 커널의 경우, 각 커널에는 1,024 개의 스레드가있는 TB를 갖고 그중 2개로 SM의 사용 가능한 모든 스레드를 완전히 차지합니다. 그런 다음 Group 2의 8개 커널이 동시에 실행되고 Group 1의 16개 커널이 모두 동일한 작업을 수행합니다. 부분 동시 스케줄링 (Fig. 2c)은 혼합된 결과를 보여줍니다. 완료 시간은 Concurrent 보다 길지만 제한된 동시성 수준으로 인해 Sequential 스케줄링 접근 방식보다 짧습니다.

 

 Table VII는 세 가지 스케줄링 접근법에 따른 실험 결과를 요약합니다. 주어진 워크로드의 에너지 소비에 대한 idle time의 영향을 고려하기 위해 세 가지 스케줄링 방법 중 가장 긴 완료 시간보다 약간 큰 320 초의 관찰을 선택합니다. Table의 'Duration'은 커널의 실제 실행 시간을 의미하고, 'Idling time'은 GPU에서 활성 스레드가 실행되지 않고 정적 전력 소비 만 존재하는 남은 시간입니다. 'SM 사용률(util)'은 모든 커널을 실행하는 동안 평균 스레드 점유율을 의미하며 다음과 같이 계산됩니다.

 여기서 t_total은 커널 실행의 총 기간, t_i는 각 커널 K_i의 실행 시간, TB_i는 K_i의 TB 크기, n_i는 K_i의 SM 당 TB 수, S_thread는 GPU에서 지원하는 SM당 최대 활성 스레드 수입니다(= 2048 on Xavier).
 partially concurrent scheduling은 가장 짧은 완료 시간을 제공하지 않지만 흥미롭게도 이 실험의 세 가지 접근 방식 중 가장 낮은 에너지 소비를 산출합니다 (concurrent 스케줄링에서 1.91 % 감소, sequential 스케줄링에서 8.57 % 감소). 추세는 커널 구성에 따라 다를 수 있으며 동시 스케줄링은 다른 경우에 다른 두 가지보다 성능이 우수 할 수 있습니다. 그럼에도 불구하고 우리의 실험 결과는 최적의 GPU 에너지 소비를 위한 새로운 스케줄러 설계의 개발을 장려합니다.

 

V. CONCLUSION

 이 논문에서는 다양한 동시성 수준과 커널 스케줄링 순서에 따른 GPU 에너지 소비 동작을 보여줍니다. 동시 커널 스케줄링이 실행 시간과 에너지 소비를 개선 할 수 있는 잠재력이 있음을 입증했지만 동시성 수준을 최대화한다고해서 가장 에너지 효율적인 스케줄이 생성되지는 않습니다. 따라서 실시간 요구 사항을 충족하는 한 에너지 소비와 관련하여 다양한 커널 일정을 비교할 가치가 있습니다. 그러나 우리는 독립적인 CUDA 커널을 사용했으며 실험에 메모리 작업이 포함되지 않았다는 점에 유의해야합니다. 실험적으로 검증하지는 않았지만 데이터를 전송하고 메모리에 액세스하면 공유 메모리 리소스 (예 : 복사 엔진, 버스 및 캐시)로 인해 논리적으로 독립적인 커널간에 간접적인 종속성이 생성되고 다른 관찰로 이어질 수 있습니다. 향후 작업을 위해 메모리 작업이있는 커널의 에너지 소비량을 조사하고, 공유 리소스로 인한 커널 간의 시간적 종속성을 고려하고, 에너지 효율적인 실시간 GPU 스케줄러를 개발할 계획입니다. 우리는 이 논문에서 발견한 내용이 이러한 방향에 대한 좋은 출발점이라고 믿습니다.

 

REFERENCES

[1] S. Mittal and J. Vetter, “A Survey of Methods For Analyzing and Improving GPU Energy Efficiency,” ACM Computing Surveys, vol. 47, 04 2014.

[2] T. Amert, N. Otterness, M. Yang, J. H. Anderson, and F. D. Smith, “GPU Scheduling on the NVIDIA TX2: Hidden Details Revealed,” in 2017 IEEE Real-Time Systems Symposium (RTSS), Dec 2017, pp. 104–115.

[3] R. A. Cruz, C. Bentes, B. Breder, E. Vasconcellos, E. Clua, P. M. de Carvalho, and L. M. Drummond, “Maximizing the GPU resource usage by reordering concurrent kernels submission,” Concurrency and Computation: Practice and Experience, vol. 31, no. 18, p. e4409, 2019, e4409 cpe.4409. [Online]. Available : https://onlinelibrary.wiley.com/doi/abs/10.1002/cpe.4409

[4] “NVIDIA Xavier - JetPack 4.1 - Performance Tuning - Evaluating Performance kernel description,” 

https://developer.ridgerun.com/wiki/index.php?title=Xavier/JetPack 4.1/Performance Tuning/Evaluating Performance.