DOI QR코드

DOI QR Code

CPU Parallel Processing and GPU-accelerated Processing of UHD Video Sequence using HEVC

HEVC를 이용한 UHD 영상의 CPU 병렬처리 및 GPU가속처리

  • 홍성욱 (세종대학교 컴퓨터공학과 DMS 연구실) ;
  • 이영렬 (세종대학교 컴퓨터공학과 DMS 연구실)
  • Received : 2013.09.02
  • Accepted : 2013.11.11
  • Published : 2013.11.30

Abstract

The latest video coding standard HEVC was developed by the joint work of JCT-VC(Joint Collaborative Team on Video Coding) from ITU-T VCEG and ISO/IEC MPEG. The HEVC standard reduces the BD-Bitrate of about 50% compared with the H.264/AVC standard. However, using the various methods for obtaining the coding gains has increased complexity problems. The proposed method reduces the complexity of HEVC by using both CPU parallel processing and GPU-accelerated processing. The experiment result for UHD($3840{\times}2144$) video sequences achieves 15fps encoding/decoding performance by applying the proposed method. Sooner or later, we expect that the H/W speedup of data transfer rates between CPU and GPU will result in reducing the encoding/decoding times much more.

최신 동영상 압축 표준화 기술인 HEVC(High Efficiency Video Coding)는 ITU-T(VCEG)와 ISO-IEC(MPEG)에서 JCT-VC(Joint Collaborative Team on Video Coding)라는 팀을 이루어 진행했으며 표준화의 막바지에 다다르고 있다. 기존 H.264/AVC에 약 50% 이상의 성능 향상을 가져왔으나, 다양한 압축 기술을 사용함에 따라 부호화 및 복호화의 복잡도가 매우 증가하는 문제가 있다. 제안하는 방법은 CPU 병렬처리와 GPU 가속처리를 통해 HEVC의 복잡도를 줄이고, 이를 UHD(Ultra High Definition) 초고해상도 영상에 적용하는 방법으로 UHD($3840{\times}2144$) 영상에서 15fps 이상 인코딩/디코딩의 속도를 가지며, CPU와 GPU간의 데이터 전송 방법의 발전으로 추가적인 속도 향상이 기대된다.

Keywords

Ⅰ. 서 론

HEVC(High Efficiency Video Coding) 동영상 압축 표준화는 ISO-IEC의 산하의 MPEG(Moving Picture Experts Group)과 ITU-T의 VCEG(Video Coding Experts Group)의 공동으로 표준화를 진행하고 있으며, 2010년 독일 드레스덴 미팅을 시작으로 JCT-VC(Joint Collaborative Team on Video Coding)를 결성 표준화에 열을 가하고 있다[1]. 이 표준화 기술은 기존 표준화 기술인 H.264/AVC의 50% 이상의 성능 향상 및 고화질, 고성능 비디오 압축 기술을 목표로 표준화의 막바지에 이르고 있다[2]. 이와 같은 성능 향상을 위해서 화면 내 예측(Intra Prediction), 화면 간 예측(Inter Prediction), 변환(Transform), 양자화(Quantization)등의 유사 방법과 동시에 SAO(Sample Adaptive Offset), Motion Vector Merge, CU(Coding Unit) 단위 코딩 등 다양한 방법들을 통해 성능 향상을 가진다.

그림 1은 HEVC의 인코더의 블록다이어그램을 나타낸다. 특히, 다양한 방법 중 MB(Macro Block)단위의 처리 방법에서 CU(Coding Unit)의 단위의 코딩 단위 변화를 통해 많은 성능 향상을 가져왔다. 그림 2와 같이 CU단위의 코딩은 쿼드-트리 구조의 형태를 가지며, HEVC의 기본 설정으로 64x64의 LCU를 시작으로 3단계 깊이의 8x8크기의 CU를 기본 단위로 부호화 및 복호화를 수행한다. 이 같은 쿼드-트리 구조의 예측 단위인 PU(Prediction Unit)의 크기로 인트라/인터 예측을 수행한다. 이처럼 HEVC 동영상 표준 기술은 기존 H.264/AVC 보다 더욱 뛰어난 압축률을 가지며, 특히 고해상도 동영상 콘텐츠에 적합한 높은 압축 효율을 가진다.

그림 1.HEVC 인코더 블록 다이어그램 Fig. 1. HEVC encoder block diagram

그림 2.HEVC의 CU(Coding Unit) 구조 Fig. 2. CU(Coding Unit) structure of HEVC

HEVC는 2013년 1월 FDIS를 기점으로 표준화가 완성 단계이며, 이에 따라 다양한 분야에서 빠르게 적용될 가능성이 높다. 기존 코덱보다 고화질/고해상도를 지원하는 HEVC 실시간 코덱으로 타 코덱을 대체할 것으로 기대 된다. 초고해상도 TV 송수신 장비, 멀티미디어 컨텐츠 서버, 초고화질 실감형 미디어 서비스, 개인용 PC 및 이동형 단말 등 비디오 서비스가 필요한 모든 장비 및 서비스에 적용가능하다. 하지만 다양한 최신 압축 기술을 통한 성능향상과 동시에 많은 시간 및 계산이 소요되는 문제점을 가지고 있다. 이 논문은 초고해상도 영상을 이용한 HEVC 코덱의 속도 개선을 위해, GPU와 CPU의 병렬처리를 통해 부호화/복호화의 속도향상을 가져오는 방법을 제안한다.

본 논문은 다음과 같은 순서로 구성된다. 2장에서는 UHD(Ultra High Definition) 영상의 발전과 UHD 영상의 부호화/복호화를 위한 HEVC의 속도 개선 방법을 설명하고, 3장에서는 2장에서 논의 된 방법을 HEVC에 적용하는 상세한 방법을 설명한다. 4장에서는 제안된 방법을 HEVC에 적용한 실험 및 결과를 분석하며, 마지막으로 5장에서 결론을 맺는다.

 

Ⅱ. UHD(Ultra High Definition)의 발전

고화질의 비디오의 발전과 관련 하드웨어의 발달로 인해 향후 시장에서 서비스되는 비디오 신호의 해상도는 HD급을 넘어서는 초고해상도 영상으로 발전되고 있다. 특히, 이전 고화질 영상의 발전에 30년 전 개발하기 시작한 고화질(HD)은 보편화를 이루었고 현재는 4K(초고화질) 일명 UHD와 3D(입체영상)의 기술에 발전이 크게 이루어지고 있다. UHD는 그림 3에서 보는 바와 같이 기존 HD보다 약 8배 이상의 선명도를 갖춘 단계로 일반 TV에서 구현되는 최고 화질인 풀HD(1920x1080) 보다 4배정도의 초고해상도이다. 초고화질 TV의 시장은 국내 기업에서도 2013년 월드 IT 쇼에서 세계 최대 85형 UHD TV를 출시했다. UHD TV의 시장에서는 Up-scaling을 통한 화질 향상 방법으로 실제로 실시간 UHD 영상을 사용하지 못하는 현실이다.

그림 3.Full HD와 UHD의 영상 크기 비교 Fig. 3. Sequence size comparison of Full HD and UHD

이처럼 UHD 초고화질 영상에 HEVC를 적용하는 경우 많은 문제점이 있으며, 특히 UHD의 비디오 인코딩, 디코딩은 매우 많은 연산을 요구하여 CPU에 큰 부담을 주어 대부분의 단말에서 실시간 서비스가 불가능 하다. 본 논문에서는 이와 같은 UHD영상을 HEVC에 적용함에 있어서 병렬 처리 및 GPU를 이용한 고속연산 방법을 통해 UHD에 적합한 방법을 제안한다.

 

Ⅲ. GPU 및 OpenMP를 이용한 병렬처리 방법

제안하는 방법은 OpenMP와 GPU(Graphic Processing Unit)를 통해 CPU의 병렬처리 방법과 GPU의 다수의 Core를 효과적인 병렬처리 방법을 적용 전체 HEVC의 속도 개선을 가져오는 방법이다. 현재 GPU가 점점 더 고성능 병렬 컴퓨팅 기능을 지원하는 쪽으로 발전하게 되자 GPU를 이용하여 많은 계산 량이 요구되는 과학 또는 공학적 문제를 해결하는 방법이 선행연구 되었다[5][6]. GPGPU(General Purpose GPU)는 그래픽 카드의 코어라 할 수 있는 GPU가 CPU의 계산을 대신하게 되는 것이다. CPU의 성능 개선에 따라 발열처리 문제를 가지며 다양한 반도체 업체에서는 CPU 클럭 수의 증가 보다는 병렬 응용 프로그램의 처리량에 초점을 맞춘 매니코어(many- core) 개념에 초점을 맞추어 소규모의 코어를 대량으로 동시 처리하는 방식의 개발이 진행되는 추세이다. 일반 CPU는 정수 계산에는 매우 빠르지만 부동소수점 계산에서는 성능이 저하되는 반면 GPU는 부동소수점의 계산에 탁월하여 병렬처리에 특화되어 있는 장점이 있어 GPU로 서버를 구축하였을 경우 적은 비용으로 구축이 가능한 장점이 있다.

GPGPU는 3D그래픽 연산에 특화된 GPU라고 할 수 있으며, 다양한 분야에서 응용 가능하다. 간단히 말해 하나의 Co-Processor처럼 활용하는 기술이다. 하지만 계산이 가능한 Core의 증가라는 장점 이외의 느린 메모리 접근의 문제 및 CPU와 GPU간의 메모리 상호관계의 중요성이 매우 크다는 단점도 가지고 있다. 그림 4는 CPU와 GPU간의 메모리 전송 및 Core의 사용에 관한 구조를 나타내며, 이와 같이 GPU는 하나의 Core가 아닌 수십~수천 개 이상의 Core를 사용 가능하며 이를 모두 사용한 연산이 가능하다는 장점을 가진다.

그림 4.CPU와 GPU의 구조

제안하는 방법은 이와 같은 GPU의 장점을 HEVC에 적용하였으며, 이는 HEVC에 필요한 많은 연산을 GPU에 할당하여 CPU와 GPU의 역할을 모두 수행함으로써 전체 코덱의 속도 향상을 가져오는 방법이다. CPU와 GPU간의 메모리 전송 과정을 거치며, GPU가 적용된 HEVC 코덱의 전체 구조는 그림 5와 같이 나타난다. 그림 5에서와 같이 CPU와 GPU의 역할을 나누어 GPU의 빠른 연산을 효과적으로 이용하는 방법이다. 그림에서 보는바와 같이 CPU와 GPU의 역할을 나누어 각각 슬라이스 단위의 처리가 이루어진다. CPU와 GPU간의 연산을 구분하는 방법은 슬라이스단위의 병렬처리 구조와 각 프레임의 메모리 전송에 따라 구분하였을 때, 크게 ME(Motion Estimation), 변환(Transform), 양자화(Quantization) 등의 작업은 GPU에서 이루어지고, 스캐닝(Scanning), CABAC 엔트로피 코딩 등의 작업은 CPU에서 이루어진다. 이 방법의 슬라이스는 그림 5와 같이 영상을 분할하여 각각의 슬라이스 단위의 HEVC 코딩을 수행 가능한 구조이며, CPU에서 처리되는 Entropy Coding의 경우는 OpenMP를 통해 슬라이스 단위 병렬프로세싱을 따로 수행하도록 처리 된다. CPU와 GPU는 상호 메모리 전송이외에 CPU와 GPU간의 병렬처리를 모두 수행한다.

그림 5.제안하는 방법의 코덱 구조 Fig. 5. The codec structure of the proposed method

그림 5.제안하는 방법의 구조 Fig. 5. The structure of the proposed method

제안하는 방법은 GPU 가속처리 및 CPU의 병렬처리를 이용한 방법으로 GPU와 CPU의 활용 가능한 Core를 모두 사용하는 병렬처리 고속화 코덱이다. 즉, GPU의 사용가능한 Core를 이용하기 위해 프레임 단위의 메모리를 GPU로 전송하고 GPU의 많은 연산 가능한 Core를 이용해 HEVC의 주요 알고리즘 중 핵심 알고리즘이라고 할 수 있는 ME, 변환 및 양자화, MC와 같은 반복적인 계산이나 프레임단위로 처리할 수 있는 모듈에 대한 연산을 GPU의 장점을 통해 빠르게 연산하고, CABAC과 스캐닝과 같은 순차적인 방법으로 처리해야 하는 모듈인 경우는 슬라이스 단위 병렬처리를 통해 CPU의 스레드 방법을 통해 속도 향상을 가지는 방법이다. 이와 같이 제안하는 방법은 UHD 영상과 같은 초고해상도 및 초고화질의 영상을 부호화 복호화 하는데 특히 효과적으로 적용 가능하며, 향후 UHD의 영상의 서비스가 늘어남에 따라 CPU 병렬처리 및 GPU 가속처리를 통한 코덱의 발전 가능성이 매우 기대된다.

 

Ⅳ. 결과 및 분석

HEVC의 Syntax에 맞추어 소프트웨어를 새롭게 만들었고, 여기서 GPU 가속처리는 NVIDIA에서 제공하는 CUDA를 이용하였으며, CPU의 병렬처리는 OpenMP를 사용하였다. 제안하는 방법의 최대 크기의 CU(Coding Unit)은 32로 결정하고 MV와 양자화 및 변환의 크기를 4로 고정하였으며, 각 프레임은 슬라이스 단위로 병렬처리 되며, 실험 조건은 IPPP, QP는 32, 실험 영상은 3840x2144로 UHD(Ultra High Definition)급 50 fps 4개 영상 등 상세한 실험 조건은 표 1과 같다. 실험 영상의 경우 국제 표준화에서 사용했던 UHD 영상을 사용했으며 각 프레임에 상응하는 메모리가 CPU와 GPU 사이에 메모리 이동하며 GPU에서 변환 및 양자화를 수행하는 형태로 그림 5과 동일한 방법을 사용하였을 때, 모든 시퀀스의 인코더/디코더의 평균 초당 15프레임(fps) 이상의 속도를 가진다[3]. 제안하는 방법은 UHD 영상의 경우 GPU와 CPU의 병렬처리를 통해 실시간 가능 여부를 우선 확인하고 실시간에 가까운 고속화 알고리즘을 개발하는 것에 중점을 두었으며, 실시간에 가까운 고속화 알고리즘의 개발의 완성 여부에 따라 성능향상에 관한 추가적인 알고리즘 개발이 가능하다. 향후 다양한 실험 조건과 다양한 영상에 실험이 추가적 진행되어야 하며, 현재는 속도 향상을 위해 고정 크기의 TU 사용 및 성능 향상 알고리즘을 사용하지 않아 성능 매우 높으며 개선 방안이 필요하다.

표 1.Table 1. Test sequences

표 2.Table 2. Memory copy time

위 표 2는 NVIDIA에서 제공하는 CPU와 GPU간의 메모리 복사의 대역폭(속도)의 측정 결과이다. 이와 같이 Original(원본프레임), Recon(복원프레임), Coefficient(계수)로 크게 3가지 메모리가 CPU와 GPU간에 발생한다. 프로그램 실행 결과를 보면 한 프레임에 약 0.019초가량의 데이터 이동 시간이 필요하다. 현재 개발한 코덱의 성능은 약 15fps (Encoder & Decoder)가 나오며, 이는 각 프레임에 0.06~0.05초의 인코딩 혹은 디코딩 시간이 소비됨을 의미한다. 즉, 이러한 CPU와 GPU간의 데이터 전송인 0.019의 시간을 제외하게 되면 각 프레임 당 약 0.03의 시간까지 단축이 되며 이는 30fps이상의 성능을 보인다. 현재 GPU의 개발 업체에서 GPU와 CPU간의 데이터 이동 속도 개선에 관한 다양한 기술이 개발 중에 있으며, CPU와 GPU가 공통된 메모리를 액세스 하는 새로운 메모리 접근 기술이 개발 중에 있다고 한다. 이와 같은 메모리 복사 시간의 문제가 해결 된다면 더욱 향상된 코덱의 성능향상을 기대할 수 있다.

제안하는 CPU의 병렬처리 및 GPU의 가속처리를 이용한 방법은 현재 추가적인 보완이 필요한 단계이지만, 향후 UHD의 서비스에 적합한 방법으로 GPU와 CPU의 데이터 전송 방법의 개선 및 추가적인 속도 향상 및 성능 개선을 통해 향후 UHD 실시간 서비스에 적용 가능한 방법으로 기대된다.

 

Ⅴ. 결 론

초고해상도 비디오 UHD(Ultra High Definition)을 위한 HEVC 고속 인코더/디코더 개발로써, GPGPU(General-Purpose GPU) 가속처리 및 CPU의 OpenMP를 활용한 슬라이스 단위 병렬처리 프로세싱을 통한 고속 코덱을 제안하였다. 즉, UHD 영상을 HEVC를 통한 실시간 인코딩/디코딩을 위한 CPU와 GPU를 활용한 연구 및 데이터 처리를 연구를 통해, 실험 결과에서 나타난 바와 같이 UHD 영상의 인코딩/디코딩 15fps 이상의 속도 향상을 가졌다. 향후 CPU와 GPU간의 데이터 전송 및 기술을 발전에 따라 HEVC의 인코딩 디코딩에 GPU 및 병렬처리의 장점을 이용한 UHD의 실시간 인코딩 디코딩의 가능성을 가진다.

References

  1. G. J. Sullivan, J. Ohm, H. Woo-Jin, T. Wiegand. "Overview of the High Efficiency Video Coding (HEVC) Standard", Circuits and Systems for Video Technology, IEEE Transactions on, Vol 22, Issue 12, Dec, 2012
  2. T. Wiegand, G. J. Sullivan, G. Bjontegaard, and A. Luthra. "Overview of the H.264/AVC Video Coding Standard.", IEEE Transactions on Circuits and Systems for Video Technology, 13(7):560{576, July 2003. https://doi.org/10.1109/TCSVT.2003.815165
  3. Frank Bossen. Common test conditions and software reference congurations. Technical Report JCTVC-E700, Jan. 2011.
  4. G. Bjontegaard, "Calculation of Average PSNR Differences Between RD-Curves," document VCEG-M33 of ITU-T VCEG, Apr. 2001.
  5. Jie Zhao and Andrew Segall. Parallel prediction unit for parallel intra cod-ing. Technical Report JCTVC-B112, Joint Collaborative Team on Video Coding(JCT-VC) of ITU-T and ISO/IEC, July 2010.
  6. D.K. Lee, S.J. Oh , "Variable Block Size Motion E stimation Implementation on Compute Unified Device Architecture(CUDA)" , ICCE2013, Jan. 2013