基于MPI的H.264并行編碼代碼移植與優化

2010 03 25
基于MPI的H.264并行編碼代碼移植與優化
范 文
洛陽理工學院計算機信息工程系 洛陽 471023
摘 要 H.264獲得出色壓縮效果和質量的代價是壓縮編碼算法復雜度的增加。為了尋求更高的編碼速
度,集群并行計算被運用到H.264的視頻編碼計算中。分析H.264可實現并行計算的任務單元選擇;采用
了片(slice)級的H.264并行編碼計算方法,實現了基于MPI并行環境的X264源代碼移植;針對實驗室的小
型集群平臺,通過測試給出較優的并行任務分配方案,結果表明對標清視頻在分8片以上并行編碼時能夠
達到實時編碼的要求。
關鍵詞 H.264;視頻編碼;并行計算;MPI
引言
隨著計算機、通信、廣播等技術的發展,數字視
頻(Digital Video)已應用于許多領域,如可視電話、會
議電視、安全監控、高清晰度電視(HDTV),視頻點播
(VOD)等。多媒體視頻應用的廣泛普及,高質量的視頻
服務市場潛力巨大。實時的高清晰視頻編碼傳輸技術成
為視頻發展重點。視頻業務的實時應用,面臨著視頻圖
像的大數據量、有限的通信信道的傳輸率、存儲容量及
計算機的處理速度的瓶頸。如果單靠增加通信信道的帶
寬、存儲器容量及提高計算機的運算速度,效果有限而
且也不經濟。而對視頻數據進行高效的編碼壓縮,不僅
可以提高通信傳輸效率也節省了存儲空間。
數字視頻壓縮技術在各種需求的推動下,不斷得到
發展和提高。由視頻編碼專家小組(VCEG)和運動圖像
專家小組(MPEG)成立的聯合視頻專家小組JVT (Joint
Video Term)共同制定的H.26L標準草案,其成果成為
MPEG-4的第十部分,于2002年底正式命名為H.264,
并且成為ITU-T和MPEG聯合專家組JVT制訂的下一代
視頻編碼標準AVC(Advanced Video Coding)的基礎[1]。
它具備很多以往同類標準沒有的優點,適用范圍廣泛,
發展潛力巨大。
為了獲得更好的視頻編碼效果,視頻編碼計算的復
雜性也就隨之極大的增加,它對計算機的處理能力要求
也越來越高。僅依賴于單核計算機處理器速度的提高,
現在還無法達到高清和標清視頻的實時H.264編碼壓
縮。因此需要尋求一種利用現有的資源能夠更高效地完
成復雜任務的方法:通過高速網絡,充分利用網絡連接
的計算機資源,實現復雜問題的并行計算。本文研究利
用MPI來實現視頻編碼的并行處理,實現H.264并行視
頻編碼計算,從而有效提升了H.264編碼的速度。在實
時的高清、標清視頻編碼壓縮方面,對H.264編碼壓縮
代碼的并行處理移植實現,是一個較新并具有應用價值
的研究,這也是本論文研究的主要課題。
1 并行計算
并行計算,簡單地講就是在并行計算機或分布式計
算機等高性能計算系統上所做的大型復雜計算,其物質
基礎是高性能并行計算機(包括分布式網絡計算機)。并
行計算的發展基于兩方面的認識:第一,單處理機性能
不可能滿足大規模計算和工程問題計算的需求,而并行
計算機則是實現高性能計算、解決挑戰性問題的唯一途
徑;第二,同時性和并行性是客觀物質世界存在的普遍
屬性,具有實際物理背景的計算問題在許多情況下都可
劃分為能夠并行計算的多個子任務。
實現并行算法的常用軟件環境是操作系統( 如
Research & Development
研究與開發
Research & Development
26 信息通信技術
L i n u x , Windows等)配合并行計算環境加上工具
語言(如C, C++, Fortran)。并行計算環境隨著近
年來分布式M P P 系統與工作站集群系統的發展得
到了迅速發展,相繼出現了PVM,MPI,Express,
Linda,PARMACS,P4,Nx和Zipcode等基于消息傳遞的
并行計算環境,目前常用的是PVM和MPI。我們選用
MPI并行環境進行研究。
MPI(Message Passing Interface)是并行計算機的
消息傳遞接口標準的簡稱,提供了一組可用于消息傳
遞的通信原語。MPI的標準化開始于1992年4月29日至
30在威吉尼亞的威廉姆斯堡召開的分布存儲環境中消
息傳遞標準的討論會,由Dongarra、Hempel、Hey和
Walker建議的初始草案,在1992年11月推出并在1993
年2月完成了修訂版,這就是MPI1.0。1995年6月推出
了MPI的新版本MPI1.1,對原來的MPI作了進一步的
修改完善和擴充。MPI僅僅提供并行庫,而不是一門語
言,是一種對原來的串行程序設計改動最小的并行化方
法[2]。這樣,原來的串行編譯器也能夠使用,不需要任
何修改。編程者只需要在原來的串行程序中加入對并行
庫的調用,就可以實現并行程序設計。
MPI庫可以被Fortran77,Fortran90,C,C++調
用,從語法上說它遵守所有對庫函數/過程的調用規
則,和一般的函數/過程沒有什么區別。MPI是目前最
重要的并行編程工具,它具有移植性好,功能強大,效
率高等多種優點。
2 H.264并行化編碼分析與實現
H.264的碼流數據層次包括一個表頭、一個或多
個圖像片及序列的結束標志碼。如圖1所示,視頻序
列(Sequence)是由一系列的圖像(Picture)組成,每幀圖
像由一個或多個片(slice)組成,每個片又由多個宏塊
(Macroblock)組成[3]。
為了追求更高的壓縮效率,去除圖像序列間時間冗
余度,同時滿足多媒體播放等隨機存取要求,H.264將
視頻序列中的圖像幀劃分為I幀圖像(幀內編碼圖像)、P
幀圖像(預測編碼圖像)和B幀圖像(雙向預測編碼圖像);
組成圖像的16×16大小的宏塊(Macroblock)又可以分為
4個8×8的塊(Block)。在H.264中,組成片(Slice)的連
續宏塊是按照一定編碼順序排列的,Slice表示的是一個
獨立的編碼單元,也就是說它不需要參考同一幀中其他
Slice來進行編碼。通過有效的調度算法,從以上這些數
據結構中選擇一個合適的并行任務單元,能夠獲得一個
高效率的并行編碼處理器[4]。
主從模式并行處理的工作流程模型如圖1所示。
本論文試驗環境為小型的工作站集群。工作站機群
是將聯網的多臺工作站組成一個并行集群,適用于中等
規模的并行系統,價格便宜、配置靈活,但規模及并行
效率受網絡設備的制約。所用的節點機器是由5臺DELL
工作站組成,由千兆交換機和千兆網卡連接組成的小型
集群,采用Windows操作系統。每臺工作站的配置為
Intel Xeon DualCore CPU 5130 2.0GHz兩顆、內存
4G、千兆網卡。每臺機器安裝有MPI的MPICH-1.2.5
實現版本。本文選擇X264源代碼作為實現H.264并行編
碼的原因,是由于X264中采用了一些算法優化,程序
結構優化及MMX, SSE, SSE2等指令優化,對原本消
耗較大的去塊濾波器等做了較大程度的優化。
具體實現過程如圖2所示。
3 結論
移植后的并行H.264編碼程序可以運行在不同的
系統平臺上。根據實驗室使用的Windows平臺小型集
群,每個節點有兩個雙核2.0GHz CPU的特點,我們
用多個不同的視頻序列,采用不同的任務分配方式,測
試并行編碼統計數據。
通過測試結果及實驗分析,得出以下結論:影響
大分辨率視頻H.264并行編碼加速比的一個主要原因是
網絡通信問題。提高并行編碼速度的一種方法是做并
行編碼時先把要編碼視頻數據存放在各臺節點機器上,
讓每個節點機器上運行的任務程序從本節點機器上讀取
相應的數據片進行編碼。因為YUV的視頻序列數據量
很大,這種靜態的數據獲取可以節約大量的通信開銷。
但是這種靜態的數據調用,對于要實現實時分發并行編
研究與開發
2010 03 27
碼是沒有意義的,所以我們的H.264并行編碼方案是直
接從主機向各從機實時的分配圖像幀片數據。由于要通
過一個節點機器的網卡出口,同時向多臺從機節點并發
數據,所以主機網絡發送就成為一個提高并行編碼速度
的瓶頸。雖然對于目前的720*576數據可以達到實時編
碼,但是更高分辨率的視頻圖像,數據增加必然給主機
端的網絡發送造成壓力。這些可能需要雙網卡的綁定,
或者其他的數據獲取方式,提高并行傳輸的數據量。
實現并行編碼還要根據不同的平臺,實現不同的策
略。如上述的實驗室5臺工作站組成的集群平臺,根據
它的特點我們得出適應并行編碼的最佳條件:
1) 當分配相同工作任務數量時,在主機上工作的
任務數越多效率越高,因為每臺機器是2個雙核CPU相
當于有4個核,可以同時執行4個任務。在主機上工作任
務多就意味著可以盡量少的通過網絡傳輸數據,節省整
體的通信時間。
2) 同樣并行片編碼任務數目時,在充分利用主機
的處理器條件下,相同的任務數量分配機器數越多速度
越快。因為H.264編碼對內存的要求較高,當多個任務
分配在一個節點機器上的不同CPU核時,在一個節點
機器上各處理器共享內存,工作時對內存資源的需求造
成了沖突。所以要獲得高的并行效率,需要根據集群平
臺的實際情況優化任務分配策略,這也是同一個程序能
獲得不同并行效果的因素。
3) 經過多組視頻圖像的測試,發現在8片時編碼的
平均速度為27.32fps,并且每組視頻序列也都達到了實
時編碼的要求。
在實驗室5臺并行機器能實現上述任意任務的分
配,是由于我們可以寫配置文件來指定任務工作方式、
任務分配節點位置、數量。在這種小型的集群平臺上我
們可以按照我們的要求,最優地分配任務。學校集群平
臺上的實驗結果與實驗室5臺有所不同,是因為我們不
Research & Development
圖1 主從模式并行處理的工作模型
28 信息通信技術
圖2 X264程序并行執行流程
研究與開發
2010 03 29
作者簡歷
H.264 Code Parallel Implementation and Optimization
Based on MPI
Fan Wen
Computer and Information Engineering Department, Luoyang Institute of Science and
Technology, Luo Yang 471023, China
Abstract The cost of H.264 geting good coding effect and quality is algorithms complexity increased.
The High Perfermance Parallel Computing was used in the H.264 video coding for getting faster
speed, Choosing slice as a unit for H.264 Parallel Computing and implementing X264 codec Parallel
Computing with MPI, then the best Parallel task work effi ciency based on lab′s cluster was got and test
results indicated that the parallel coding speed of SD Video can meet real-time requirement when sliceses
are more than 8.
Keywords H.264; Video Coding; Parallel Computing; MPI
范 文
洛陽理工學院,計算機與信息工程系。
能像實驗室平臺那樣可以在主機上多分配執行任務,節
省部分通信時間。學校的集群平臺上完全是把每片數據
都通過網絡發送給從機節點進行編碼計算,耗費網絡通
信時間較多,這是兩個平臺實驗數據有差別的一個原
因。學校這種規模較大,為眾多公眾服務的集群,我們
不易按配置文件來指定任務在節點的工作方式,因為可
能同時有別的用戶在使用。對于不同的集群平臺要根據
實際情況優化并行任務。
參考文獻
[1]
[2]
[3]
[4]
Iain E.G.Richardson.H.264 and MPEG-4
Video Compression Wiley.2003
都志輝.高性能計算之并行編程技術—MPI并行程
序設計.北京:清華大學出版社,2001
I T U - T R e c . H . 2 6 4 / I S O / I E C 1 1 4 9 6 - 1 0 .
Advanced Video Coding.Final Committee
Draft,Document JVT-F100,2002.12
孫彥輝.基于H_264編碼碼率控制方法研究[D].中
南大學大學碩士學位論文,2008
Research & Development

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python自動取款機程序_python ATM取款機----運維開發初學(上篇)

自動取款機基本功能:可以存取轉賬,刷卡信息查詢,銀行卡號歷史信息查詢,消費記錄查詢,修改密碼。思維導圖如下:數據庫設計:mysql> desc balan_list; #保存賬號交易記錄option_type-----------…

java的運行參數

貼個java的運行參數: Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select t…

阿里服務器+Centos7.4+Tomcat+JDK部署

適用對象 本文檔介紹如何使用一臺基本配置的云服務器 ECS 實例部署 Java web 項目。適用于剛開始使用阿里云進行建站的個人用戶。 配置要求 這里列出的軟件版本僅代表寫作本文檔使用的版本。操作時,請您以實際軟件版本為準。 操作系統:CentOS 7.4Tomcat …

php輸出mysqli查詢出來的結果

php連接mysql我有文章已經寫過了,這篇文章主要是介紹從mysql中查詢出結果之后怎么輸出的問題。 一:mysqli_fetch_row(); 查詢結果:array([0]>小王) 查詢: [php] view plaincopy while ($row mysqli_fetch_assoc($result)) …

rhel mysql安裝_RHEL6.4下MySQL安裝方法及簡單配置

1.MySQL安裝方法簡介 1.rpm包yum安裝 2.通用二進制包安裝 3.源碼編譯安裝 注意:實驗所采用的系統平臺為:RHEL6.4 2.rpm ins首頁 → 數據庫技術背景:閱讀新聞RHEL6.4下MySQL安裝方法及簡單配置[日期:2014-04-08]來源:Li…

H.264算法的DSP移植與優化

摘要:在TMS320DM643平臺上實現H.264基檔次編碼器的移植與優化顯得格外實用和必要。基于對DSP平臺的結構特性和H.264的計算復雜度分析,主要從核心算法、數據傳輸和存儲器/Cache使用幾方面對H.264編碼器進行了…

IDA*與A*

我實在懶得寫博客了,直接放上來之前講課做的的PPT得了。 PPT_Source Code.zip 轉載于:https://www.cnblogs.com/zzzc18/p/8323927.html

java 子類 父類 轉換_Java子類與父類之間的類型轉換

1.向上轉換父類的引用變量指向子類變量時,子類對象向父類對象向上轉換。從子類向父類的轉換不需要什么限制,只需直接蔣子類實例賦值給父類變量即可,這也是Java中多態的實現機制。2.向下轉換在父類變量調用子類特有的、不是從父類繼承來的方法…

H.264視頻編解碼的代碼移植和優化

基于DSP系統開發的視頻編解碼系統,國內幾乎都是走的移植,優化的路線,并且移植的代碼,都是開源的。畢竟花費大量的人力,物力去開發一套自己的代碼,并不見得比一些成熟的開源代碼效率更高,健壯性更…

SublimeText2 快捷鍵

SublimeText2 快捷鍵,與對應功能一覽表: 快捷鍵功能ctrlshiftn打開新Sublimectrlshiftw關閉Sublime,關閉所有打開文件ctrlshiftt重新打開最近關閉文件ctrln新建文件ctrls保存ctrlshifts另存為ctrlf4關閉文件ctrlw關閉ctrlk, ctrlb切換側邊欄顯…

java-linux-eclipse配置

轉載于:https://www.cnblogs.com/sheying/p/8327517.html

n皇后問題java_經典n皇后問題java代碼實現

問題描述:在n*n的二維表格,把n個皇后在表格上,要求同一行、同一列或同一斜線上不能有2個以上的皇后。例如八皇后有92種解決方案,五皇后有10種解決方案。public class TestQueen {int n; //皇后的個數int num 0; // 記錄方案數int…

ffmpeg mplayer x264 代碼重點詳解 詳細分析

ffmpeg和mplayer中求平均值得方法 1 ordinary c language level #define avg2(a,b) ((ab1)>>1) #define avg4(a,b,c,d) ((abcd2)>>2) 顯而易見...,注意a,b宏表達式可能引出的副作用 2 SIMD by software…

nagios監控服務器的搭建

nagios 概述: 開源的免費的網絡監視工具。 監控: windows, Linux,Unix,交換機和路由器。報警。 Nagios是插件式的結構,它本身沒有任何監控功能,所有的監控都是通過插件進行的,因此其是高度模塊化和富于彈性的。Nagios…

BZOJ1031: [JSOI2007]字符加密Cipher

1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7882 Solved: 3425[Submit][Status][Discuss]Description 喜歡鉆研問題的JS同學,最近又迷上了對加密方法的思考。一天,他突然想出了一種他認為是終極的加密辦法&#…

java棧頂元素_棧在Java類庫中的實現

棧是一種后進先出的數據結構。在它之上,主要有三種操作:(1)判斷棧是否為空——empty();(2)在棧頂添加一個元素——push(E);(3)刪除并返回棧頂元素——pop()。在Java類庫中,Stack類實現了棧,它繼承自Vector類…

LoadRunner遠程監測Centos服務性能配置過程

由于公司的需要,經過一段時間的探索,參考了很多業內人士的文檔,終于完成LoadRunner遠程監測centos服務器的配置過程。 首先監測所需要服務是否存,如果存在就不必要安裝,如果不存在,需要安裝對應的服務。 監…

day 68 增刪改查 語法

1 普通正則 2 分組正則 url(r/blog/(\d)/(\d),views.blog) blog(request,arq1,arq2) 按照位置傳參 3 分組命名 url(r/blog/(?P<year>\d)/(?P<month>\d),views.blog) blog(request,year,month) 4 用name 指定別名 url(r/blog/(?P<year>\d)/(?P…

編譯器入門 語法分析器 java_從零開始寫個編譯器吧 - Parser 語法分析器

Parser(語法分析器)的編寫相對于 Tokenizer (詞法分析器)要復雜得多&#xff0c;因此&#xff0c;在編寫之前可能也會鋪墊得更多一些。當然&#xff0c;本系列旨在“寫出”一個編譯器&#xff0c;所以理論方面只會簡單介紹 tao 語言所涉及的部分。之前的幾章中&#xff0c;我純…

017——數組(十七) asort ksort rsort arsort krsort

<?php /*** 數組 asort ksort rsort arsort krsort*///asort()對數組按值排序&#xff0c;保留鍵名&#xff1a; /*$arrarray(bbs_url>bbs.lantian.com,web_url>www.lantian.com,bbs_name>免費視頻教程,www_name>PHP項目開發, ); asort($arr); print_r($arr);…