數據由一 行行的像素行組成,運算過程中的數據處理依賴關系不大,因此,可W W組成待解碼數據的 像素行為單位劃分數據單元,等等。對于其他編碼格式的圖像,也可W按照上述原則對待解 碼數據劃分為多個數據單元,為后續的并行化處理做準備。
[0034] S103 ;將每個數據單元內部的數據進行并行處理,W便在數據單元內部進行單指 令多數據流的并行處理;
[0035] 在將待解碼數據劃分為多個數據單元之后,可在數據單元內部進行單指令多數據 流的并行處理,此時,解碼器可W將每個數據單元內部的數據進行并行處理,也即同時對一 組數據(又稱"數據矢量")中的每一個分別執行相同的操作從而實現空間上的并行性。例 女口,對于JPEG格式的圖像來說,在解碼過程中的IDCT處理環節中,每個數據單元為一個MCU 塊,可將每個MCU塊內部的數據進行并行處理,比如,可利用SIMD機制對MCU塊內部的數據 處理進行加速;在解碼過程中的上采樣及顏色空間轉換處理環節中,每個數據單元為一個 像素行,因此,將每個像素行內部的數據進行并行處理,比如,可利用SIMD機制對每個像素 行內部的數據處理進行加速。
[003引S104 ;創建多個子線程,并將各個數據單元分發到各個子線程中,W更利用當前終 端設備內部署的多核處理器在不同的數據單元之間進行多核多線程的并行處理。
[0037] 在對每個數據單元內部的數據進行并行處理的同時,還可創建多個子線程并將各 個數據單元分發到各個子線程中,并由運行時環境將子線程分配給不同的處理器,W在不 同的數據單元之間進行多核多線程的并行處理。
[0038] 例如,對于JPEG格式的圖像來說,在解碼過程中的IDCT處理環節中,每個數據單 元為一個MCU塊,可創建多個子線程,并將每個MCU塊分發給該些子線程來執行數據處理, 后續的運行環境可根據不同移動終端設備中處理器的實際情況將該些子線線程分配給不 同的處理器進行并行處理(運行時環境分配給每個處理器的子線程數取決于使用方法、機 器負載和其他因素。子線程的數目可W通過環境變量或者代碼中的函數來指定),W充分利 用到移動終端設備中的多核處理器;在解碼過程中的上采樣及顏色空間轉換處理環節中, 每個數據單元為一個像素行,由于在進行每個像素行之間的處理時存在大量的數據計算且 像素行間的處理具有各自的獨立性,因此可創建多個子線程,并將每個像素行分發給該些 子線程來執行數據處理,可根據不同移動終端設備中處理器的實際情況將該些子線線程分 配給不同的處理器進行并行處理,W充分利用到移動終端設備中的多核處理器。
[0039] 總之,在本申請實施例中,可將請求解碼的圖像的待解碼數據劃分為多個數據單 元,對數據單元內部進行單指令多數據流的并行處理且對在不同數據單元之間進行多核多 線程的并行處理。也就是說,在將待解碼數據劃分為多個數據單元之后,可W將數據單元分 配到多個處理器進行并行多核多線程的處理,在每個處理器對某個數據單元進行解碼時, 還可W通過單指令多數據流進行并行處理,送樣,將單指令多數據流并行處理方式與多核 多線程并行處理方式相結合,可W有效提高圖像的解碼效率。
[0040] 其中,本申請的發明人在實現本申請的過程中還發現,在對待解碼數據進行多核 多線程的并行處理過程中,需要進行線程的創建、切換等一系列的輔助操作,對于解碼負載 較小的圖片來說,送些輔助操作帶來的開銷可能將抵消其并行處理帶來的加速,反而可能 會導致解碼時間的增加。因此,在本申請實施例中,在進行多核多線程的并行處理之前,還 可W首先對當前圖像的數據量進行判斷,只有當數據量較大時,才按照步驟S104的方式進 行多核多線程的并行化處理,否則,僅使用單個處理器進行單指令多數據流的并行化處理 即可。
[0041] 但是,具體在進行上述判斷時,應該是多大的數據量作為判斷的基準,則成為需要 考慮的問題。送是因為,不同機型處理器核數不同,其并行化處理能力亦有較大差異,線程 數、循環體大小、調度策略也會導致化enMP并行處理時間的不同,因此,不建議使用統一的 標準來對具體的解碼過程進行評判。為此,在本申請實施例中,在對具體的待解碼圖像進行 解碼之前,還可W首先確定當前終端設備在僅利用單指令多數據流方式進行解碼時的負載 闊值(后文中對該概念會有詳細介紹),然后在創建子線程之前,將確定的待解碼數據的數 據量與所述負載闊值進行比較,如果所述待解碼數據的數據量大于所述負載闊值,則觸發 執行創建多個子線程及后續步驟,如果所述待解碼數據的數據量小于所述負載闊值,則僅 W單指令多數據流的方式執行數據處理,W此,來避免在解碼負載較小的情況下創建多個 子線程所帶來的解碼時間的延長,W實現更合理的利用多核處理器,并可進一步優化解碼 效率。
[0042] 其中,考慮到實際應用中的圖像一般有多種編碼類型,例如,可W包括JPEG格式 tif格式、bmp格式等等,同一格式下還可能有多種細分的編碼類型,例如,對于JPEG格式 的圖像而言,IDCT方式有低速高精度整數方式、高速次精度整數方式W及快速浮點類型, Upsample 又可 W 分為 fullsize、h2vl、h2v2、h2vl_fan巧 W及 h2v2_fan巧等等,不同的 IDCT、化sample方式可W組合成多種具體的編碼類型;而同一終端設備對不同編碼類型的 圖像的并行化處理能力可能也是不同的。因此,確定當前終端設備在僅利用單指令多數據 流方式進行解碼時的負載闊值時,可W分別確定出當前設備在僅利用單指令多數據流方式 對各種編碼類型的圖像進行解碼時的負載闊值。送樣,在對當前圖像進行解碼時,可W首先 確定出指定圖像的編碼類型,然后再確定當前終端設備在僅利用單指令多數據流方式對該 編碼類型的圖像進行解碼時的負載闊值。送樣,在創建子線程之前,可先將待解碼數據的數 據量與該編碼類型對應的負載闊值相比較,根據比較結果來確定在是否需要對待解碼數據 進行多核多線程的并行化處理,W避免在解碼負載較小的時候創建多個子線程而產生額外 的數據處理開銷,在可避免不必要的系統資源浪費的同時,還可優化圖像解碼速度。
[0043] 其中,所謂的負載闊值也即在使用單指令多數據流方式進行處理時,可承受的最 大數據量,一般而言,圖像的數據量與圖像的尺寸成正比,因此,可W用圖像的尺寸來代表 一幅圖像的數據量,例如,某圖像為的寬度為1024像素,高度為2048像素,則該圖像的尺寸 為1024X2048,相應的,也可W用1024X2048來表示該圖像的數據量。當然,送里的"可承 受"的概念,并不是指當待解碼數據的數據量大于該最大數據量時就會導致解碼器崩潰等 嚴重程度,而是指當待解碼數據的數據量大于該最大數據量時,僅使用單指令多數據流方 式進行解碼所需的時間會比較長,并且如果結合多核多線程并行處理,會明顯起到加速的 作用,換言之,只有當待解碼圖像的數據量大于該最大數據量時,進行多核多線程的并行處 理才更有價值。
[0044] 具體實現時,可W通過多種方式來確定當前終端設備在僅利用單指令多數據流方 式進行解碼時的負載闊值。例如,考慮到相同型號的終端設備,由于具有相同的硬件配置信 息,例如,處理器核數等,其并行化處理能力可能也是相同的。所W,可W預先通過測試等方 式建立一個數據庫,在該數據庫中保存有多個終端設備的型號與其僅利用單指令多數據流 方式進行解碼時的負載闊值之間的對應關系,因此,在當前終端設備中接收到解碼請求時, 就可W首先獲取當前終端設備的型號,然后可W利用該型號在前述數據庫中查找到該終端 設備僅利用單指令多數據流方式進行解碼時的負載闊值。例如,在實際應用中,該第一數據 庫的結構可W如W下表1所示:
[0045] 表 1
[0046]
[0047] 當然,該數據庫中還可W保存有各個終端設備分別在解碼各種編碼類型的圖像時 對應的負載闊值。此時,數據庫的結構可W如W下表2所示:
[0048] 表 2
[0049]
[0050] 送樣,在對當前圖像進行解碼是,就可W根據當前終端設備的型號W及待解碼圖 像的編碼類型,從表2中查詢出具體的負載闊值,并與當前圖像的解碼數據量進行比較。
[0051] 當然,在實際應用中,具體到終端設備中,其多核多線程的并行處理能力可能不僅 僅與處理器核數有關,還可W能與其內存占用情況等有關,因此,通過上述查表的方式獲取 負載闊值時,可能并不能很準確的體現出具體的終端設備的情況