4.최종 보고

                    종합설계 프로젝트 최종보고서 요약

팀명

 쿠CUDA스

제출일

2014 5 27

프로젝트 제목

HEVC 병렬 구현

설계 프로젝트 개요

(GitHub: https://github.com/qtsky89/HEVC_DECODER)

프로젝트 수행 내용 및 중간 결과

프로젝트 요약문

 디지털 기술 및 통신 기술의 발전으로 방송, 영화 뿐만 아니라 인터넷 및 개인 미디어 등의 다양한 영역에서 오디오/비디오 중심의 멀티미디어 컨텐츠 보급 및 수요가 급속도로 확대되고 있다. 입체감을 제공하는 3DTV/3D 영화가 보편화되기 시작하면서 사실감과 현장감을 제공하는 현실감 있는 미디어에 대한 소비자의 요구가 증가하고, 디스플레이 기술의 발전과 더불어 가정에서의 TV 화면이 대형화 됨에 따라 HD 이상의 고화질 컨텐츠를 즐기고자 하는 소비자가 증가하고 있다. 

 이에 따라 JCT-VC와 MPEG에서는 2013년 1월 UHD급 영상의 수요에 대응하기 위해 HEVC(High Efficiency Video Coding) 비디오 압축 코덱의 표준을 승인하였다. 하지만 현재 표준 참조 프로그램인 HM10.0의 성능으로는 실제 고화질 영상에 대한 서비스가 어려운 상황이다. 

 본 프로젝트는 고화질 영상의 실시간 스트리밍 서비스를 위해, HEVC Decoder의 성능을 CUDA 기반 병렬 처리로 개선하는 것이 목표이다. 

 프로젝트에서 개선 대상으로 사용할 HEVC Decoder 프로그램은 FFmpeg이다. FFmpeg은 오픈소스 라이브러리 프로그램으로, 현재 FFmpeg의 Decoder는 HM10.0의 최적화 버전이라고 볼 수 있다. 
 
 프로젝트 초기에는 CUDA 학습 및 성능 개선 정도의 시험 측정을 위해 HM10.0의 디코더를 병렬처리하고 , 본격적인 프로젝트는 FFmpeg으로 진행하도록 한다. 

 1. HM10.0의 병렬처리
     HM10.0의 Inter Prediction과 In-Loop Filter(Deblocking Filter, Sample Adaptive Offset Filter)에 대해서 병렬처리를 시도하였다.
  •     성과
         - CUDA의 성능은 Input Data의 크기가 약 1만개 이상일 때부터 효과적이다.
         - CUDA는 Memory Allocation/Free의 overhead가 매우 크다.
         - 순수 계산 시간은 CPU 시간에 비해 CUDA가 약 100배 빠른다.
         - CUDA C 학습 마무리.

 2. FFmpeg의 병렬처리
  •     성과
          - Intra Prediction과 Inter Prediction의 대부분을 CUDA 함수로 변경
          - CUDA 자체로는 의미가 없으며, 코드 최적화 단계가 필요
          - CPU 병렬 처리 기법 도입 검토

3. Decoding Mode 변경
    그동안 Frame Mode로 프로젝트를 진행해 왔으나, Frame 모드에서 CUDA 함수를 처리할 경우 I/O Overhead가 전체 Decoder의 성능에 영향을 미친다는 것을 확인, I/O Overhead가 상대적으로 작고 한번에 처리하는 입력 값의 크기가 큰 Tile Mode로 Decoding Mode 변경
 또 Frame 모드에서 CPU 병렬 처리를 하게 되면 하나의 Thread 가 하나의 프레임을 처리하게 됨으로 ,Inter Prediction이나 Intra Prediction의 알고리즘에서는 심각한 대기 현상이 일어나게 된다. 따라서 Tile 모드의 처리로 대기 시간을 줄이고자 한다.

마일스톤 수행 내용

1. 시연 그래프 제작

   프로젝트 시연 결과물로 디코딩 그래프를 제작하였다. 본 그래프는 0.8K, 1K, 2K 크기의 3가지 영상을 Frame 모드와 Tile 모드로 디코딩할 때, 매 초마다 복호화 되는 프레임의 개수를 그래프로 그려준다. 

  이렇게 Tile 모드가 Frame 모드에 비해 빠른 정도를 알 수 있도록 나타내었다. 

2. FFmpeg의 Decoder with CUDA C

 2차 중간 보고시 FFmpeg의 Inter Prediction과 Intra Prediction 주요 알고리즘들에 대한 CUDA 변경을 완료 하였다. 마지막 3차에서는 주요 알고리즘 이외의 나머지 부분들에 대한 CUDA 변경을 완료하였다. 


최종 보고 요약
  • 본 프로젝트는 HEVC Decoder의 병렬처리를 통한 성능 개선이 목표이다.
  • HM10.0의 Decoder를 병렬처리 한 결과 일정 수 이상의 데이터 값에서만 CUDA가 성능을 보인다는 것을 확인할 수 있었고, FFmpeg의 병렬처리 시 그 특정 크로스 포인트 이상 값이 처리되는 부분을 선택해 우선 CUDA로 병렬처리 할 수 있었다
    •  
      •  
  • 하지만 현재 프로젝트 진행의 대부분 시간이 관련 지식 학습에 소요되어 실제 병렬 처리르 구현하는 기간이 매우 짧았다.  이러한 이유로 본 프로젝트는 아직 완전히 마무리 되지 못했고, 본 프로젝트를 Capstone2로 연장하여 계속 진행할 예정이다. 
프로젝트 결과
  • HEVC는 Tile 모드를 지원하지만 실제로 표준 프로그램에는 구현되어 있지 않다. 따라서 이론상으로 존재하던 Tile 모드를 구현하였으며, Frame 모드보다 Tile 모드의 성능이 더 좋다는 것을 확인할 수 있었다. 
  • 프로젝트의 연구 결과를 비슷한 연구를 하는 사람들과 공유하여 많은 사람들에게 도움이 되길 바란다. 

동영상




ċ
2014_14조_쿠CUDA스_회의록.zip
(536k)
14조 캡스톤,
2014. 5. 27. 오전 1:59
Ċ
14조 캡스톤,
2014. 5. 27. 오전 7:40
ċ
결과요약정리PPT (3).zip
(11182k)
14조 캡스톤,
2014. 5. 28. 오전 5:29
Ċ
14조 캡스톤,
2014. 5. 27. 오전 12:11
ċ
포스터2.zip
(15893k)
14조 캡스톤,
2014. 5. 27. 오전 7:52
Comments