چکیده
در این مقاله، ما، استفاده از واحدهای پردازنده گرافیکی چند هسته ای (GPUs) برای کدگذاری و کدگشایی ویدئوها را بررسی می کنیم. پس از بررسی اجمالی کدگذاری های ویدئویی و GPUs، برخی از کارهای قبلی را در مورد ساختاردهی ماژول های کدگذاری ویدئو مرور می کنیم به طوری که قابلیت پردازش موازی گسترده GPUs را می توان مهار نمود. همچنین کارهای قبلی انجام شده در مورد پارتیشن بندی جریان کدگشایی ویدئو بین واحد مرکزی پردازش (CPU) و (GPU) را مرور می کنیم. سپس، به صورت مفصل، برآورد حرکت سریع مبتنی بر GPU را برای نشان دادن برخی از ملاحظات طراحی در استفاده از GPUها در کدگذاری ویدئو و تعادل بین عملکرد افزایش سرعت و انحراف نرخ مورد بحث قرار می دهیم. نتایج ما، اهمیت مواجهه موازی سازی داده های ممکن را در طراحی الگوریتم ها برای GPUs برجسته می کند.
1. مقدمه
امروزه، کدگذاری ویدئو [1]-[5] تبدیل به یک تکنولوژی مرکزی در محدوده وسیعی از برنامه های کاربردی شده است. برخی از آنها شامل تلویزیون دیجیتال، دی وی دی، پخش اینترنتی ویدئو، ویدئو کنفرانس، آموزش از راه دور و مراقبت و امنیت می باشد. محدوده وسیعی از استانداردها و الگوریتم های کدگذاری ویدئو گسترش یافته اند (H.264/AVC, VC-1, MPEG-2, AVS) تا به نیازها و ویژگی های عملیاتی تجهیزات و نرم افزارهای کاربردی مختلف رسیدگی کنند. با برنامه های کاربردی رایج در فن آوری های کدگذاری ویدئویی، بررسی تغییرات موثر در سیستم های کدگذاری ویدئویی بر روی جایگاه و پردازنده های محاسبه گر متفاوت مهم است.
اخیراً، واحدهای پردازنده گرافیکی (GPUs) به شکل واحدهای پردازنده همراه با واحد مرکزی پردازش (CPU) بیرون آمده است تا تجهیزات و نرم افزارهای کاربردی مختلف عددی و پردازش سیگنال را شتاب دهد. GPUهای مدرن از صدها هسته پردازنده جدا که قادر به دستیابی به عملکرد بسیار زیاد محاسبات موازی می باشد، تشکیل شده است. برای مثال پردازنده NVIDIA GeForce 8800 GTS دارای 96 پردازنده جریان مستقل است که هر کدام در GHz 1.2 عمل می کند. پردازنده های جریان را می توان با هم گروه بندی کرد تا عملیات های Single Instruction Multiple Data (SIMD) (ساختار بندی داده های متعدد) را اجرا کند که برای برنامه های فشرده محاسباتی مناسب است. با مراجع در رابطه با ابزار کدگذاری GPU مانند موضوع و رابط کدگذاری C، GPUها را می توان برای انجام انواع وظایف پردازش علاوه بر عملیات متعارف راس و پیکسل مورد استفاده قرار داد.
با بسیاری از کامپیوترهای شخصی (PCs) و کنسول های بازی مجهز به GPUهای چند هسته ای که قادر به انجام محاسبات با هدف کلی هستند، مطالعه و بررسی چگونگی استفاده از GPU برای کمک به CPU در محاسبات فشرده مثل کارهایی از قبیل فشرده سازی ویدیو / باز کردن مهم است. در حقیقت، از آنجایی که محتویات HD عامه پسند می شود، کدگذاری ویدئو نیاز بیشتر و بیشتری به توان محاسبه دارد. بنابراین، اعمال نفوذ محاسباتی GPU می تواند یک روش مقرون به صرفه برای پاسخگویی به الزامات این تجهیزات و برنامه های کاربردی باشد. توجه کنید که با ده ها استاندارد ممکن در کدگذاری ویدئو (H.264, MPEG-2, AVS, VC-1WMV, DivX) پیروی از یک راه حل انعطاف پذیر در نرم افزار یک مزیت است.
با تمرکز بر روی تجهیزات و برنامه های کاربردی کدگذاری ویدئو که بر پایه نرم افزار هستند و در رایانه های شخصی اجرا می شوند و کنسول های بازی مجهز به CPU و GPU، این مقاله چگونگی استفاده از GPU برای شتاب دادن کدگذاری و کدگشایی ویدئو ها را بررسی می کند. فعالیت های اخیر بکارگیری GPU/CPU چند هسته ای را برای تجهیزات و برنامه های کاربردی پردازنده تصویر/ویدئو مختلف پیشنهاد داده است. جدول 1 برخی از آنها را خلاصه کرده است. در این مقاله، ما به بررسی کارهای قبلی بر روی کدگذاری ویدئو و کدگشایی آنها برای نشان دادن چالش ها و مزایای استفاده از اجرای GPU می پردازیم. به طور خاص، ما بحث کارهای قبلی در برآورد حرکت مبتنی بر GPU، جبران حرکت و پیش بینی داخلی را مطرح می کنیم. تمرکز ما بر روی این است که چگونه الگوریتم می تواند طراحی شود تا قابلیت پردازش موازی GPU را به شکل گسترده مهار کند. علاوه بر این، ما در مورد کارهای قبلی در پارتیشن بندی جریان کدگشایی بین CPU و GPU بحث می کنیم. (برای تکمیل بحث، ما همچنین گزارش تسریع در نتایج کار قبلی را ارائه می دهیم با این حال که چون فن آوری نرم افزار/سخت افزار/GPUهای چند هسته ای به طور چشمگیری در چند سال گذشته تکامل یافته، برخی از نتایج را می توان از رده خارج شده دانست). پس از آن، ما به بررسی برآورد حرکت سریع بر اساس GPU می پردازیم. ما در مورد برخی از استراتژی های شکستن وابستگی بین واحدهای مختلف داده ها و بررسی معاوضه بین افزایش سرعت و کارایی کدگذاری بحث خواهیم نمود.
بقیه این مقاله به شرح زیر سازماندهی شده است. ما برای اولین بار یک نمای کلی از وضعیت مدرن را در کدگذاری های ویدئویی و GPUها آماده می کنیم. ما همچنین از چالش های استفاده از GPUها برای کمک به کدگذاری های ویدئویی صحبت می کنیم. سپس، ما به مرور کار قبلی در کدگذاری های ویدئویی شتاب داده شده GPU می پردازیم. پس از آن، ما به مطالعه برآورد حرکت سریع مبتنی بر GPUمی پردازیم. در نهایت، این مقاله با نتیجه گیری به پایان می رسد.
2. پیش زمینه
.Aکدگذاری ویدئو
آخرین استانداردهای کدگذاری ویدئو از عملکرد کدگذاری مدرن بدست می آید. برای مثال، H.264/AVC، که آخرین استاندارد بین المللی کدگذاری ویدیو تایید شده توسط ITU-T و ISO / IEC می باشد، به طور معمول نیاز به 60٪ یا کمتر از نرخ بیت در مقایسه با استانداردهای قبلی برای رسیدن به همان کیفیت بازسازی دارد. [5]. سایر الگوریتم های پیشرفته کدگذاری ویدیو، مانند video- AVSتوسعه یافته بوسیله کارگروه استاندارد کدگذاری صوتی و ویدئویی چین، یا VC-1 در ابتدا توسط مایکروسافت نیز عملکرد فشرده سازی رقابتی را به دست آورده است. در زیر ما مروری بر استاندارد کدگذاری ویدیو H.264 ارائه خواهیم نمود.
استاندارد H.264 کدگذاری ویدیو مبتنی بر رویکرد کدگذاری ویدیو مبتنی بر بلوک ترکیبی طراحی می شود که به علت استانداردهای اولیه کدگذاری ویدئو استفاده می شود. الگوریتم کدگذاری از ارتباط فضایی بین پیکسل های کناری تصویر استفاده می کند. علاوه بر این نیز برای رسیدن به فشرده سازی، همبستگی زمانی بین تصاویر کناری را در دنباله ویدئویی ورودی مورد استفاده قرار می دهد. شکل 1، بلوک دیاگرام کدگذار را به تصویر می کشد. تصویر ورودی به بلوک های مختلف تقسیم می شود و هر بلوک می تواند با استفاده از پیکسل های بازسازی شده همجوار در همان چارچوب به عنوان پیش بینی کننده، پیش بینی داخلی را انجام دهد. H.264 از اندازه های 16*16، 8*8 و 4*4 بلوک پیش بینی داخلی پشتیبانی می کند، و روش های مختلف را برای ساخت نمونه های پیش بینی از پیکسل بازسازی شده مجاور میسر می سازد. متناوباً، بلوک ورودی ممکن است با استفاده از بلوک های بازسازی در چارچوب مرجع پیش بینی کننده، پیش بینی داخلی را انجام دهد. پیش بینی داخلی می تواند بر اساس اندازه پارتیشن 16*16، 16*8، 8*16، 8*8، 8*4، 4*8، یا 4*4 باشد. جابجایی بین بلوک حاضر و بلوک مرجع می تواند تا حدود دقت یک چهارم واحد باشد و با بردار حرکت و شاخص تصویر مرجع نمایان می شود.
Abstract
In this article, we investigate using multi-core graphics processing units (GPUs) for video encoding and decoding. After an overview of video coding and GPUs, we review some previous work on structuring video coding modules so that the massive parallel processing capability of GPUs can be harnessed. We also review previous work on partitioning the video decoding flow between the central processing unit (CPU) and GPU. After that, we discuss in detail a GPU based fast motion estimation to illustrate some design considerations in using GPUs for video coding, and the tradeoff between speedup and rate-distortion performance. Our results highlight the importance to expose as much data parallelism as possible in designing algorithms for GPUs.
I. INTRODUCTION
Today, video coding [1]–[5] has become the central technology in a wide range of applications. Some of these include digital TV, DVD, Internet streaming video, video conferencing, distance learning, and surveillance and security [6]. A variety of video coding standards and algorithms have been developed (e.g., H.264/AVC [5], VC-1 [7], MPEG2 [8], AVS [9]) to address the requirements and operating characteristics of different applications. With the prevalent applications of video coding technologies, it is important to investigate efficient implementation of video coding systems on different computing platforms and processors [10], [11].
Recently, Graphics Processing Units (GPUs) have emerged as co-processing units for Central Processing Units (CPUs) to accelerate various numerical and signal processing applications [10], [12]–[14]. Modern GPUs may consist of hundreds of highly decoupled processing cores capable of achieving immense parallel computing performance. For example, the NVIDIA GeForce 8800 GTS processor has 96 individual stream processors each running at 1.2 GHz [15]. The stream processors can be grouped together to perform Single Instruction Multiple Data (SIMD) operations suitable for arithmetic intensive applications. With the advances in GPU programing tools such as thread computing and C programming interface [16], [17], GPUs can be efficiently utilized to perform a variety of processing tasks in addition to conventional vertex and pixel operations.
With many personal computers (PCs) or game consoles equipped with multi-core GPUs capable of performing general purpose computing, it is important to study how GPU can be utilized to assist the main CPU in computation-intensive tasks such as video compression/decompression [18]. In fact, as high-definition (HD) contents are getting popular, video coding would require more and more computing power. Therefore, leveraging the computing power of GPU could be a cost-effective approach to meet the requirements of these applications. Note that with dozens of available video coding standards (H.264, MPEG-2, AVS, VC-1, WMV, DivX) it is advantage to pursue a flexible solution based on software.
Focusing on software-based video coding applications running on PCs or game consoles equipped with both CPUs and GPUs, this article investigates how GPUs can be utilized to accelerate video encoding/decoding. Recent work has proposed to apply multi-core GPU/CPU for various video/image processing applications. Table I summarizes some of them. In this article, we survey prior work on video encoding and decoding to illustrate the challenges and advantages of GPU implementation. Specifically, we discuss previous work on GPU-based motion estimation, motion compensation and intra prediction. Our focus is on how the algorithms can be designed to harness the massive parallel processing capability of GPU. In addition, we discuss previous work on partitioning the decoding flow between CPU and GPU (For completeness, we also report the speedup results in previous work. However, since the GPU/multi-core software/hardware technologies have evolved dramatically over the last few years, some of the results could be outdated). After that, we investigate a GPU based fast motion estimation. We discuss some strategy to break dependency between different data units, and examine the tradeoff between speedup and coding efficiency.
The rest of this article is organized as follows. We first provide an overview of the state of the art in video coding and GPUs. We also discuss the challenges to use GPUs to assist video coding. Then, we review previous work on GPUaccelerated video coding. After that, we study GPU based fast motion estimation. Finally, this article ends with concluding remarks.
II. BACKGROUND
A. Video coding
The latest video coding standards have achieved state-ofthe-art coding performance. For example, H.264/AVC, which is the latest international video coding standard approved by ITU-T and ISO/IEC, typically requires 60% or less of the bit rate compared to previous standards in order to achieve the same reconstruction quality [5]. Other advanced video coding algorithms, such as AVS-Video developed by the Audio and Video Coding Standard Working Group of China [9], or VC1 initially developed by Microsoft [7], have also achieved competitive compression performance. In the following we provide an overview on H.264 video coding standard.
H.264 video coding standard is designed based on the block-based hybrid video coding approach [2], [5], which has been used since earlier video coding standards. The coding algorithm exploits spatial correlation between neighboring pixels of the same picture. In addition, it also exploits temporal correlation between neighboring pictures in the input video sequence to achieve compression. Figure 1 depicts the encoder block diagram. The input picture is partitioned into different blocks, and each block may undergo intra prediction using neighboring reconstructed pixels in the same frame as predictor. H.264 supports intra prediction block sizes of 16 × 16, 8 × 8 and 4 × 4, and allows different ways to construct the prediction samples from the adjacent reconstructed pixels. Alternatively, the input block may undergo inter prediction using the reconstructed blocks in the reference frames as predictor. Inter prediction can be based on partition size of 16×16, 16×8, 8×16, 8×8, 8×4, 4×8, or 4×4. Displacement between the current block and the reference block can be up to quarter-pel accuracy and is signaled by the motion vector and the reference picture index [2].
چکیده
1. مقدمه
2. پیش زمینه
.A کدگذاری ویدئو
.B واحد های پردازنده گرافیکی (GPUs)
.Cکدگذاری ویدئو به کمک CPU: چالش ها
3. کار قبلي
A. تخمين حرکت روي GPUها
B. اعوجاج-سرعت بهینه سازی شده در تصمیم گیری مد روی CPUها
C. جبران حرکت بر روی GPUها
D. پارتیشن بندی وظیفه بین CPU و GPU
4. مطالعه موردی: تخمین حرکت FAST بر اساس GPU
A. برآورد حرکت سریع
B. اجرای GPU با استفاده از کاشی کاری
C. آزمایش
5. نتیجه گیری ها و بحث
منابع
Abstract
1. INTRODUCTION
2. BACKGROUND
A. Video coding
B. Graphics processing units (GPUs)
C. GPU-assisted video coding: Challenges
3. PREVIOUS WORK
A. Motion estimation on GPUs
B. Rate-distortion optimized intra mode decision on GPUs
C. Motion compensation on GPUs
D. Task partition between CPU and GPU
4. CASE STUDY: GPU BASED FAST MOTION ESTIMATION
A. Fast motion estimation
B. GPU implementation using tiling
C. Experiments
5. CONCLUSIONS AND DISCUSSION
REFERENCES