国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種多核心cpu視頻轉(zhuǎn)碼調(diào)度方法及系統(tǒng)的制作方法

      文檔序號(hào):6432906閱讀:197來(lái)源:國(guó)知局
      專利名稱:一種多核心cpu視頻轉(zhuǎn)碼調(diào)度方法及系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及視頻轉(zhuǎn)碼領(lǐng)域,尤其涉及一種多核心CPU視頻轉(zhuǎn)碼調(diào)度方法及系統(tǒng)。
      背景技術(shù)
      目前在交通、安防、生產(chǎn)監(jiān)控、環(huán)保等領(lǐng)域有大量的網(wǎng)絡(luò)監(jiān)控視頻流。這些視頻流一般具有較高的分辨率和較大的碼率,以便更細(xì)致地記錄現(xiàn)場(chǎng)情況。然而隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,人們希望通過(guò)手機(jī)也能很方便的觀看遠(yuǎn)程現(xiàn)場(chǎng)情況。由于移動(dòng)信道傳輸?shù)膸捰邢?,以及手機(jī)終端的解碼能力比較弱,因此需要對(duì)原始的監(jiān)控視頻流進(jìn)行轉(zhuǎn)碼,把視頻的分辨率、幀率、碼率等參數(shù)都降低,使得視頻可以更流暢的在移動(dòng)信道傳輸以及在于機(jī)終端解碼播放。在目前服務(wù)器CPU領(lǐng)域,基本都使用了多核心的架構(gòu)。多核心CPU具有很強(qiáng)的多任務(wù)并發(fā)執(zhí)行能力。由于手機(jī)視頻所要求的分辨率、碼率等參數(shù)都不高,轉(zhuǎn)碼所需要的運(yùn)算量不大,在單臺(tái)服務(wù)器上究全可以并發(fā)進(jìn)行多個(gè)轉(zhuǎn)碼任務(wù)。但如果不對(duì)這些任務(wù)使用硬親和性(hard affinity)進(jìn)行調(diào)度,這些轉(zhuǎn)碼任務(wù)可能不會(huì)在固定的CPU核心中運(yùn)行,尤其是當(dāng)轉(zhuǎn)碼任務(wù)并發(fā)量大的時(shí)候,該現(xiàn)象更為明顯。轉(zhuǎn)碼進(jìn)程在多個(gè)CPU核心之間米回切換會(huì)使得CPU的cache命中率下降,降低系統(tǒng)的整體運(yùn)行效率,同時(shí)也可能導(dǎo)致各個(gè)CPU核心之間負(fù)載不均衡。

      發(fā)明內(nèi)容
      本發(fā)明實(shí)施例的目的在于提出一種多核心CPU視頻轉(zhuǎn)碼調(diào)度方法,旨在解決現(xiàn)有技術(shù)中當(dāng)轉(zhuǎn)碼任務(wù)并發(fā)量大時(shí),轉(zhuǎn)碼任務(wù)可能不會(huì)在固定的CPU核心中運(yùn)行,使得CPU的 cache命中率下降,系統(tǒng)的整體運(yùn)行效率不高的問(wèn)題。本發(fā)明實(shí)施例的方法是這樣實(shí)現(xiàn)的,一種多核心CPU視頻轉(zhuǎn)碼調(diào)度方法,所述方法包括以下步驟初始化每一個(gè)CPU核心執(zhí)行任務(wù)數(shù)為0 ;判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),是則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,否則判斷是否有轉(zhuǎn)碼任務(wù)停止,若判定有轉(zhuǎn)碼任務(wù)停止,則進(jìn)行已有任務(wù)分配調(diào)度,若沒(méi)有轉(zhuǎn)碼任務(wù)停止,則返回步驟“判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),是則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,否則判斷是否有轉(zhuǎn)碼任務(wù)停止”。優(yōu)選地,所述多核心CPU視頻轉(zhuǎn)碼調(diào)度方法還包括;判斷是否收到終止所有轉(zhuǎn)碼任務(wù)的通知,是則終止所有轉(zhuǎn)碼任務(wù),否則進(jìn)入步驟 “判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),是則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,否則判斷是否有轉(zhuǎn)碼任務(wù)停止”。優(yōu)選地,所述步驟“初始化每一個(gè)CPU核心執(zhí)行任務(wù)數(shù)為0”之前還包括
      測(cè)量出單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù)。本發(fā)明實(shí)施例的另一目的在于提出一種多核心CPU視頻轉(zhuǎn)碼調(diào)度系統(tǒng),所述系統(tǒng)包括CPU核心初始化模塊和任務(wù)調(diào)度模塊;所述任務(wù)調(diào)度模塊包括檢測(cè)單元、新任務(wù)分配調(diào)度單元、已有任務(wù)分配調(diào)度單元和轉(zhuǎn)碼任務(wù)終止單元;CPU核心初始化模塊,用于在轉(zhuǎn)碼任務(wù)調(diào)度前,初始化所有CPU核心,初始化每一個(gè)CPU核心執(zhí)行任務(wù)數(shù)為0 ;任務(wù)調(diào)度模塊,用于根據(jù)對(duì)轉(zhuǎn)碼任務(wù)執(zhí)行情況的檢測(cè)結(jié)果,執(zhí)行相應(yīng)的分配調(diào)度方法,當(dāng)檢測(cè)為有新轉(zhuǎn)碼任務(wù)到達(dá)時(shí),則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,當(dāng)檢測(cè)為有轉(zhuǎn)碼任務(wù)停止時(shí),則進(jìn)行已有任務(wù)分配調(diào)度,當(dāng)收到終止所有轉(zhuǎn)碼任務(wù)的通知時(shí),終止所有轉(zhuǎn)碼任務(wù);檢測(cè)單元,與所述CPU核心初始化模塊、新任務(wù)分配調(diào)度單元、已有任務(wù)分配調(diào)度單元和轉(zhuǎn)碼任務(wù)終止單元相連,用于對(duì)轉(zhuǎn)碼任務(wù)的執(zhí)行情況進(jìn)行檢測(cè),并將檢測(cè)結(jié)果反饋給任務(wù)調(diào)度模塊;新任務(wù)分配調(diào)度單元,與檢測(cè)單元和CPU核心初始化模塊相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)有新轉(zhuǎn)碼任務(wù)到達(dá)時(shí),進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度;已有任務(wù)分配調(diào)度單元,與檢測(cè)單元和CPU核心初始化模塊相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)有轉(zhuǎn)碼任務(wù)停止,進(jìn)行已有任務(wù)分配調(diào)度;轉(zhuǎn)碼任務(wù)終止單元,與檢測(cè)單元相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)收到終止轉(zhuǎn)碼任務(wù)的通知,終止所有轉(zhuǎn)碼任務(wù)。本發(fā)明的有益效果在本發(fā)明實(shí)施例中,轉(zhuǎn)碼服務(wù)器有兩個(gè)或兩個(gè)以上CPU核心,在調(diào)度方案實(shí)施前對(duì)轉(zhuǎn)碼服務(wù)器進(jìn)行靜態(tài)壓力測(cè)試,測(cè)量出單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù); 調(diào)度方案實(shí)施開(kāi)始,初始化所有CPU核心的當(dāng)前執(zhí)行任務(wù)數(shù)為0,判斷如果有新轉(zhuǎn)碼任務(wù)到達(dá),則按照新任務(wù)的分配調(diào)度方法進(jìn)行調(diào)度;判斷如果有轉(zhuǎn)碼任務(wù)停止,則按照已有任務(wù)分配調(diào)度方法進(jìn)行調(diào)度;判斷如果收到終止所有轉(zhuǎn)碼任務(wù)的通知,則退出程序,否則重新判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),進(jìn)行循環(huán)處理。本發(fā)明方法使得轉(zhuǎn)碼任務(wù)盡量保持在同一 CPU核心中運(yùn)行,有效提高了 CPU cache的命中率,從而提升了系統(tǒng)的運(yùn)算效率;同時(shí)該方法可以使各個(gè)CPU核心之間負(fù)載盡可能的均衡。


      圖1是本發(fā)明優(yōu)選實(shí)施例一種多核心CPU視頻轉(zhuǎn)碼調(diào)度方法流程圖;圖2是本發(fā)明優(yōu)選實(shí)施例有新轉(zhuǎn)碼任務(wù)時(shí)視頻轉(zhuǎn)碼調(diào)度方法流程圖;圖3是本發(fā)明優(yōu)選實(shí)施例有新轉(zhuǎn)碼任務(wù)時(shí),新轉(zhuǎn)碼任務(wù)分配調(diào)度示意圖;圖4是本發(fā)明優(yōu)選實(shí)施例有轉(zhuǎn)碼任務(wù)停止時(shí),視頻轉(zhuǎn)碼調(diào)度方法流程圖;圖5是本發(fā)明優(yōu)選實(shí)施例有轉(zhuǎn)碼任務(wù)停止時(shí),已有轉(zhuǎn)碼任務(wù)分配調(diào)度示意圖;圖6是本發(fā)明優(yōu)選實(shí)施例一種多核心CPU視頻轉(zhuǎn)碼調(diào)度系統(tǒng)結(jié)構(gòu)圖;圖7是圖6所示系統(tǒng)中的新任務(wù)分配調(diào)度單元結(jié)構(gòu)示意圖;圖8是圖6所示系統(tǒng)中的已有任務(wù)分配調(diào)度單元結(jié)構(gòu)示意圖。
      具體實(shí)施方式
      為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明,為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。應(yīng)當(dāng)理解,此處所描寫(xiě)的具體實(shí)施例,僅僅用于解釋本發(fā)明,并不用以限制本發(fā)明。在本發(fā)明方法中,轉(zhuǎn)碼服務(wù)器有兩個(gè)或兩個(gè)以上CPU核心,在調(diào)度方案實(shí)施前對(duì)轉(zhuǎn)碼服務(wù)器進(jìn)行靜態(tài)壓力測(cè)試,測(cè)量出單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù);調(diào)度方案實(shí)施開(kāi)始,初始化所有CPU核心的當(dāng)前執(zhí)行任務(wù)數(shù)為0,判斷如果有新轉(zhuǎn)碼任務(wù)到達(dá),則按照新任務(wù)的分配調(diào)度方法進(jìn)行調(diào)度;判斷如果有轉(zhuǎn)碼任務(wù)停止,則按照已有任務(wù)分配調(diào)度方法進(jìn)行調(diào)度;判斷如果收到終止所有轉(zhuǎn)碼任務(wù)的通知,則退出程序,否則重新判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),進(jìn)行循環(huán)處理。本發(fā)明方法使得轉(zhuǎn)碼任務(wù)盡量保持在同一 CPU 核心中運(yùn)行,有效提高了 CPU cache的命中率,從而提升了系統(tǒng)的運(yùn)算效率;同時(shí)該方法可以使各個(gè)CPU核心之間負(fù)載盡可能的均衡。如圖1所示為本發(fā)明優(yōu)選實(shí)施例一種多核心CPU視頻轉(zhuǎn)碼調(diào)度方法流程圖。在進(jìn)行視頻轉(zhuǎn)碼調(diào)度之前,對(duì)轉(zhuǎn)碼服務(wù)器進(jìn)行靜態(tài)壓力測(cè)試,測(cè)量出單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù)為C。設(shè)本發(fā)明實(shí)施例中的轉(zhuǎn)碼服務(wù)器共有N個(gè)CPU核心,N為自然數(shù)。設(shè)每一個(gè)CPU核心當(dāng)前執(zhí)行任務(wù)數(shù)為Ti,其中1 < i <N,其中i為CPU核心的編號(hào)。所述多核心CPU視頻轉(zhuǎn)碼調(diào)度方法包括以下步驟S101、初始化所有CPU核心,初始化每一個(gè)CPU核心執(zhí)行任務(wù)數(shù)Ti為0 ;S102、判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),是則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,否則進(jìn)入步驟
      5103;所述新轉(zhuǎn)碼任務(wù)的數(shù)量可以為一個(gè)或一個(gè)以上,若所述新轉(zhuǎn)碼任務(wù)的數(shù)量為一個(gè)以上,則在處理完一個(gè)新轉(zhuǎn)碼任務(wù)的分配調(diào)度后,循環(huán)返回至步驟S102進(jìn)行新轉(zhuǎn)碼任務(wù)是否到達(dá)的判斷,直至所有新轉(zhuǎn)碼任務(wù)的分配調(diào)度處理完畢。S103、判斷是否有轉(zhuǎn)碼任務(wù)停止,是則進(jìn)行已有任務(wù)分配調(diào)度,否則進(jìn)入步驟
      5104;轉(zhuǎn)碼任務(wù)停止的數(shù)量可以為一個(gè)或一個(gè)以上,若所述轉(zhuǎn)碼任務(wù)停止的數(shù)量為一個(gè)以上,則根據(jù)有一個(gè)轉(zhuǎn)碼任務(wù)停止進(jìn)行已有任務(wù)分配調(diào)度后,循環(huán)返回至步驟S102,再進(jìn)入步驟S103進(jìn)行是否有轉(zhuǎn)碼任務(wù)停止的判斷,直至所有停止的轉(zhuǎn)碼任務(wù)的分配調(diào)度處理完畢。S104、是否收到終止所有轉(zhuǎn)碼任務(wù)的通知,是則終止所有轉(zhuǎn)碼任務(wù),結(jié)束;否則進(jìn)入步驟S102。步驟S102中,當(dāng)有新轉(zhuǎn)碼任務(wù)到達(dá)時(shí),進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度包括以下步驟 (如圖2所示)Sl 1、從各個(gè)CPU核心中,找出當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心j,滿足Tj = min ITi, 1 ^ i ^ N}其中j為CPU核心的編號(hào),Tj為編號(hào)為j的CPU核心當(dāng)前執(zhí)行任務(wù)數(shù)。S12、判斷如果Tj = C,調(diào)度結(jié)束,否則進(jìn)入步驟S13 ;當(dāng)& = C,說(shuō)明所有CPU核心都處于滿負(fù)荷工作,可告知添加任務(wù)者任務(wù)添加失敗。C為單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù),Tj為編號(hào)為j的CPU核心當(dāng)前執(zhí)行任務(wù)數(shù),故Tj的值不可能大于C,如果判定"Tj Φ C”,則Tj必然小于C。S13、啟動(dòng)新轉(zhuǎn)碼任務(wù),將新轉(zhuǎn)碼任務(wù)綁定到CPU核心j中執(zhí)行。此處可利用操作系統(tǒng)的硬親和性API將新轉(zhuǎn)碼任務(wù)綁定到CPU核心j中執(zhí)行。2. 6 版本的Linux內(nèi)核包含了一種機(jī)制,其讓開(kāi)發(fā)人員可以編程實(shí)現(xiàn)硬CPU親和性(affinity), 應(yīng)用程序可以顯式地指定進(jìn)程在哪個(gè)(或哪些)處理器上運(yùn)行。S14、T」一Τ」+1,其中“一”表示賦值。為進(jìn)一步說(shuō)明,以下列舉具體實(shí)施例對(duì)進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度進(jìn)行詳細(xì)說(shuō)明, 如圖3所示是本發(fā)明優(yōu)選實(shí)施例有新轉(zhuǎn)碼任務(wù)時(shí),新轉(zhuǎn)碼任務(wù)分配調(diào)度示意圖。設(shè)轉(zhuǎn)碼服務(wù)器共有4個(gè)CPU核心,每個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù)為4。新轉(zhuǎn)碼任務(wù)到達(dá)前,第一、第四個(gè)CPU核心分別運(yùn)行了 2個(gè)轉(zhuǎn)碼任務(wù),第二、第三個(gè)CPU 核心分別運(yùn)行了 3個(gè)轉(zhuǎn)碼任務(wù)。新任務(wù)到達(dá)后,從4個(gè)CPU核心中,找出當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心,CPUl和 CPU4當(dāng)前執(zhí)行任務(wù)數(shù)最少,均為2,且均小于每個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù) 4,此時(shí)可任意選一當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心,本實(shí)施例中選擇的CPU核心為CPUlJf 一新轉(zhuǎn)碼任務(wù)綁定到當(dāng)前轉(zhuǎn)碼任務(wù)數(shù)最少的CPUl中執(zhí)行。調(diào)度結(jié)束后,CPUl變成了 3個(gè)轉(zhuǎn)碼任務(wù)在運(yùn)行,其他CPU核心轉(zhuǎn)碼任務(wù)數(shù)不變。步驟S103中,轉(zhuǎn)碼任務(wù)停止,進(jìn)行已有任務(wù)分配調(diào)度包括以下步驟(如圖4所示)°S21、找出待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心k,k為CPU核心編號(hào);S22、結(jié)束所述待結(jié)束轉(zhuǎn)碼任務(wù),更新Tk — Tk_l,其中“一”表示賦值,Tk為編號(hào)為 k的CPU核心當(dāng)前執(zhí)行任務(wù)數(shù)。S23、從各個(gè)CPU核心中,找出當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心j,滿足Tj = max (Ti, 1 ^ i ^ N}S24、判斷Tj-Tk彡2是否成立,是則進(jìn)入步驟S25,否則調(diào)度結(jié)束;S25、從CPU核心j中取出一轉(zhuǎn)碼任務(wù),將取出的轉(zhuǎn)碼任務(wù)從CPU核心j中解除綁定;S26,將取出的轉(zhuǎn)碼任務(wù)重新綁定到CPU核心k中;327、更新1\一1\+1,1^一1^-1。為進(jìn)一步說(shuō)明,以下列舉具體實(shí)施例對(duì)有轉(zhuǎn)碼任務(wù)停止時(shí),對(duì)已有轉(zhuǎn)碼任務(wù)進(jìn)行分配調(diào)度進(jìn)行詳細(xì)說(shuō)明,如圖3所示是有轉(zhuǎn)碼任務(wù)停止時(shí),已有轉(zhuǎn)碼任務(wù)分配調(diào)度示意圖;設(shè)轉(zhuǎn)碼服務(wù)器共有4個(gè)CPU核心,每個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù)為4。轉(zhuǎn)碼任務(wù)均在運(yùn)行時(shí),第一、第四個(gè)CPU核心分別運(yùn)行了 2個(gè)轉(zhuǎn)碼任務(wù),第二、第三個(gè) CPU核心運(yùn)行了 3個(gè)轉(zhuǎn)碼任務(wù)。隨后,CPU核心4中的一個(gè)轉(zhuǎn)碼任務(wù)結(jié)束了,則CPU核心4上面的轉(zhuǎn)碼任務(wù)數(shù)變成 1 了。從4個(gè)CPU核心中,找出當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心,CPU2和CPU2當(dāng)前執(zhí)行任務(wù)數(shù)最少多,均為3,此時(shí)可任意選一當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心,本實(shí)施例中選擇的 CPU核心為CPU2,CPU核心2上面有3個(gè)轉(zhuǎn)碼任務(wù),比CPU核心4多了 2個(gè)。因此從CPU核心2中遷移一個(gè)轉(zhuǎn)碼任務(wù)到CPU核心4當(dāng)中。調(diào)度結(jié)束后,CPU核心2和核心4上面的轉(zhuǎn)碼任務(wù)數(shù)都變成了 2個(gè)。
      本發(fā)明實(shí)施例方法可使得轉(zhuǎn)碼任務(wù)盡量保持在同一 CPU核心中運(yùn)行,有效提高了 CPU cache的命中率,從而提升了系統(tǒng)的運(yùn)算效率;同時(shí)該方法可以使各個(gè)CPU核心之間負(fù)載盡可能的均衡。如圖5所示圖6是本發(fā)明優(yōu)選實(shí)施例一種多核心CPU視頻轉(zhuǎn)碼調(diào)度系統(tǒng)結(jié)構(gòu)圖。所述系統(tǒng)包括CPU核心初始化模塊和任務(wù)調(diào)度模塊;所述任務(wù)調(diào)度模塊包括檢測(cè)單元、新任務(wù)分配調(diào)度單元、已有任務(wù)分配調(diào)度單元和轉(zhuǎn)碼任務(wù)終止單元。CPU核心初始化模塊,用于在轉(zhuǎn)碼任務(wù)調(diào)度前,初始化所有CPU核心,初始化每一個(gè)CPU核心執(zhí)行任務(wù)數(shù)為0 ;任務(wù)調(diào)度模塊,用于根據(jù)對(duì)轉(zhuǎn)碼任務(wù)執(zhí)行情況的檢測(cè)結(jié)果,執(zhí)行相應(yīng)的分配調(diào)度方法。當(dāng)檢測(cè)為有新轉(zhuǎn)碼任務(wù)到達(dá)時(shí),則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,當(dāng)檢測(cè)為有轉(zhuǎn)碼任務(wù)停止時(shí),則進(jìn)行已有任務(wù)分配調(diào)度,當(dāng)收到終止所有轉(zhuǎn)碼任務(wù)的通知時(shí),終止所有轉(zhuǎn)碼任務(wù)。檢測(cè)單元,與所述CPU核心初始化模塊、新任務(wù)分配調(diào)度單元、已有任務(wù)分配調(diào)度單元和轉(zhuǎn)碼任務(wù)終止單元相連,用于對(duì)轉(zhuǎn)碼任務(wù)的執(zhí)行情況進(jìn)行檢測(cè),并將檢測(cè)結(jié)果反饋給任務(wù)調(diào)度模塊;所述檢測(cè)結(jié)果包括3種情況;有新轉(zhuǎn)碼任務(wù)到達(dá)、有轉(zhuǎn)碼任務(wù)停止和收到終止轉(zhuǎn)碼任務(wù)的通知。新任務(wù)分配調(diào)度單元,與檢測(cè)單元和CPU核心初始化模塊相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)有新轉(zhuǎn)碼任務(wù)到達(dá)時(shí),進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度;已有任務(wù)分配調(diào)度單元,與檢測(cè)單元和CPU核心初始化模塊相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)有轉(zhuǎn)碼任務(wù)停止,進(jìn)行已有任務(wù)分配調(diào)度;轉(zhuǎn)碼任務(wù)終止單元,與檢測(cè)單元相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)收到終止轉(zhuǎn)碼任務(wù)的通知,終止所有轉(zhuǎn)碼任務(wù);所述新任務(wù)分配調(diào)度單元包括第一查找子單元、第一判斷子單元、第一綁定子單元、第一更新子單元。第一查找子單元,用于從各個(gè)CPU核心中,找出當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心;第一判斷子單元,用于判斷當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心的執(zhí)行任務(wù)數(shù)是否等于單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù),若相等,則通知任務(wù)調(diào)度模塊結(jié)束調(diào)度, 若不相等,則將結(jié)果發(fā)送給第一綁定子單元;第一綁定子單元,用于啟動(dòng)新轉(zhuǎn)碼任務(wù),將新轉(zhuǎn)碼任務(wù)綁定到當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心中執(zhí)行;第一更新子單元,用于更新CPU核心的執(zhí)行任務(wù)數(shù)。所述已有任務(wù)分配調(diào)度單元包括第二查找子單元、待結(jié)束轉(zhuǎn)碼任務(wù)終止子單元、 第三查找子單元、第二判斷子單元、解除綁定子單元、第二綁定子單元、第二更新于單元。第二查找子單元,用于找出待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心;待結(jié)束轉(zhuǎn)碼任務(wù)終止子單元,用于結(jié)束所述待結(jié)束轉(zhuǎn)碼任務(wù),并更新所述待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心的執(zhí)行任務(wù)數(shù);第三查找子單元,用于找出當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心;第二判斷子單元,用于判斷當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心執(zhí)行任務(wù)數(shù),與更新后的待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心執(zhí)行任務(wù)數(shù)的差值是否大于或等于2,是則將結(jié)果發(fā)送給解除綁定子單元,否則通知任務(wù)調(diào)度模塊結(jié)束調(diào)度,;
      解除綁定子單元,用于從當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心中取出一轉(zhuǎn)碼任務(wù),將其解除綁定;第二綁定子單元,用于將將取出的轉(zhuǎn)碼任務(wù)重新綁定到所述待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心中;第二更新子單元,用于更新所述待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心執(zhí)行任務(wù)數(shù)和所述當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心執(zhí)行任務(wù)數(shù)。本發(fā)明實(shí)施例可使得轉(zhuǎn)碼任務(wù)盡量保持在同一 CPU核心中運(yùn)行,有效提高了 CPU cache的命中率,從而提升了系統(tǒng)的運(yùn)算效率;同時(shí)該方法可以使各個(gè)CPU核心之間負(fù)載盡可能的均衡。本領(lǐng)域的普通技術(shù)人員可以理解,實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過(guò)程序指令相關(guān)硬件來(lái)完成的,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中, 所述的存儲(chǔ)介質(zhì)可以為ROM、RAM、磁盤、光盤等。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
      權(quán)利要求
      1.一種多核心CPU視頻轉(zhuǎn)碼調(diào)度方法,其特征在于,所述方法包括以下步驟 初始化每一個(gè)CPU核心執(zhí)行任務(wù)數(shù)為0 ;判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),是則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,否則判斷是否有轉(zhuǎn)碼任務(wù)停止,若判定有轉(zhuǎn)碼任務(wù)停止,則進(jìn)行已有任務(wù)分配調(diào)度,若沒(méi)有轉(zhuǎn)碼任務(wù)停止,則返回步驟 “判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),是則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,否則判斷是否有轉(zhuǎn)碼任務(wù)停止”。
      2.如權(quán)利要求1所述的多核心CPU視頻轉(zhuǎn)碼調(diào)度方法,其特征在于,所述方法還包括 判斷是否收到終止所有轉(zhuǎn)碼任務(wù)的通知,是則終止所有轉(zhuǎn)碼任務(wù),否則進(jìn)入步驟“判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),是則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,否則判斷是否有轉(zhuǎn)碼任務(wù)停止”。
      3.如權(quán)利要求1所述的多核心CPU視頻轉(zhuǎn)碼調(diào)度方法,其特征在于,所述步驟“初始化每一個(gè)CPU核心執(zhí)行任務(wù)數(shù)為0”之前還包括測(cè)量出單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù)。
      4.如權(quán)利要求1所述的多核心CPU視頻轉(zhuǎn)碼調(diào)度方法,其特征在于,所述進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度包括以下步驟從各個(gè)CPU核心中,找出當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心j,滿足Tj = HiiniTi, 1 < i彡N},其中j為CPU核心的編號(hào),L為編號(hào)為j的CPU核心當(dāng)前執(zhí)行任務(wù)數(shù),i為CPU 核心的編號(hào),Ti為編號(hào)為i的CPU核心當(dāng)前執(zhí)行任務(wù)數(shù),N為轉(zhuǎn)碼服務(wù)器的CPU核心數(shù)量, N為自然數(shù)。判斷L = C是否成立,是則結(jié)束調(diào)度,否則啟動(dòng)新轉(zhuǎn)碼任務(wù),將新轉(zhuǎn)碼任務(wù)綁定到CPU 核心j中執(zhí)行,其中C為單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù); Τ」一 Τ」+1,其中“一”表示賦值。
      5.如權(quán)利要求1所述的多核心CPU視頻轉(zhuǎn)碼調(diào)度方法,其特征在于,所述已有任務(wù)分配調(diào)度包括以下步驟找出待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心k,k為CPU核心編號(hào); 結(jié)束所述待結(jié)束轉(zhuǎn)碼任務(wù),更新Tk — 1-1,其中“一”表示賦值,Tk為編號(hào)為k的CPU核心當(dāng)前執(zhí)行任務(wù)數(shù);從各個(gè)CPU核心中,找出當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心j,滿足Tj = maxITi, 1 < i彡N},其中j為CPU核心的編號(hào),L為編號(hào)為j的CPU核心當(dāng)前執(zhí)行任務(wù)數(shù),i為CPU 核心的編號(hào),Ti為編號(hào)為i的CPU核心當(dāng)前執(zhí)行任務(wù)數(shù),N為轉(zhuǎn)碼服務(wù)器的CPU核心數(shù)量, N為自然數(shù);判斷Tj-Tk ^ 2是否成立,否則結(jié)束調(diào)度,是則從CPU核心j中取出一轉(zhuǎn)碼任務(wù),將取出的轉(zhuǎn)碼任務(wù)從CPU核心j中解除綁定;將取出的轉(zhuǎn)碼任務(wù)重新綁定到CPU核心k中; 更新Tk — Tk+1,Tj — Tj-I,其中“一”表示賦值。
      6.一種多核心CPU視頻轉(zhuǎn)碼調(diào)度系統(tǒng),其特征在于,所述系統(tǒng)包括所述系統(tǒng)包括CPU 核心初始化模塊和任務(wù)調(diào)度模塊;所述任務(wù)調(diào)度模塊包括檢測(cè)單元、新任務(wù)分配調(diào)度單元、 已有任務(wù)分配調(diào)度單元和轉(zhuǎn)碼任務(wù)終止單元;CPU核心初始化模塊,用于在轉(zhuǎn)碼任務(wù)調(diào)度前,初始化所有CPU核心,初始化每一個(gè)CPU核心執(zhí)行任務(wù)數(shù)為0 ;任務(wù)調(diào)度模塊,用于根據(jù)對(duì)轉(zhuǎn)碼任務(wù)執(zhí)行情況的檢測(cè)結(jié)果,執(zhí)行相應(yīng)的分配調(diào)度方法, 當(dāng)檢測(cè)為有新轉(zhuǎn)碼任務(wù)到達(dá)時(shí),則進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度,當(dāng)檢測(cè)為有轉(zhuǎn)碼任務(wù)停止時(shí), 則進(jìn)行已有任務(wù)分配調(diào)度,當(dāng)收到終止所有轉(zhuǎn)碼任務(wù)的通知時(shí),終止所有轉(zhuǎn)碼任務(wù);檢測(cè)單元,與所述CPU核心初始化模塊、新任務(wù)分配調(diào)度單元、已有任務(wù)分配調(diào)度單元和轉(zhuǎn)碼任務(wù)終止單元相連,用于對(duì)轉(zhuǎn)碼任務(wù)的執(zhí)行情況進(jìn)行檢測(cè),并將檢測(cè)結(jié)果反饋給任務(wù)調(diào)度模塊;新任務(wù)分配調(diào)度單元,與檢測(cè)單元和CPU核心初始化模塊相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)有新轉(zhuǎn)碼任務(wù)到達(dá)時(shí),進(jìn)行新轉(zhuǎn)碼任務(wù)分配調(diào)度;已有任務(wù)分配調(diào)度單元,與檢測(cè)單元和CPU核心初始化模塊相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)有轉(zhuǎn)碼任務(wù)停止,進(jìn)行已有任務(wù)分配調(diào)度;轉(zhuǎn)碼任務(wù)終止單元,與檢測(cè)單元相連,用于根據(jù)檢測(cè)單元的反饋結(jié)果,當(dāng)收到終止轉(zhuǎn)碼任務(wù)的通知,終止所有轉(zhuǎn)碼任務(wù)。
      7.如權(quán)利要求6所述的多核心CPU視頻轉(zhuǎn)碼調(diào)度系統(tǒng),其特征在于,所述新任務(wù)分配調(diào)度單元包括第一查找子單元、第一判斷子單元、第一綁定子單元、第一更新子單元。第一查找子單元,用于從各個(gè)CPU核心中,找出當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心; 第一判斷子單元,用于判斷當(dāng)前執(zhí)行任務(wù)數(shù)最少的CPU核心的執(zhí)行任務(wù)數(shù)是否等于單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù),若相等,則通知任務(wù)調(diào)度模塊結(jié)束調(diào)度,若不相等,則將結(jié)果發(fā)送給第一綁定子單元;第一綁定子單元,用于啟動(dòng)新轉(zhuǎn)碼任務(wù),將新轉(zhuǎn)碼任務(wù)綁定到當(dāng)前執(zhí)行任務(wù)數(shù)最少的 CPU核心中執(zhí)行;第一更新子單元,用于更新CPU核心的執(zhí)行任務(wù)數(shù)。
      8.如權(quán)利要求6所述的多核心CPU視頻轉(zhuǎn)碼調(diào)度系統(tǒng),其特征在于,所述已有任務(wù)分配調(diào)度單元包括第二查找子單元、待結(jié)束轉(zhuǎn)碼任務(wù)終止子單元、第三查找子單元、第二判斷子單元、解除綁定子單元、第二綁定子單元、第二更新子單元。 第二查找子單元,用于找出待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心; 待結(jié)束轉(zhuǎn)碼任務(wù)終止子單元,用于結(jié)束所述待結(jié)束轉(zhuǎn)碼任務(wù),并更新所述待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心的執(zhí)行任務(wù)數(shù);第三查找子單元,用于找出當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心; 第二判斷子單元,用于判斷當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心執(zhí)行任務(wù)數(shù),與更新后的待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心執(zhí)行任務(wù)數(shù)的差值是否大于或等于2,是則將結(jié)果發(fā)送給解除綁定子單元,否則通知任務(wù)調(diào)度模塊結(jié)束調(diào)度;解除綁定子單元,用于從當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心中取出一轉(zhuǎn)碼任務(wù),將其解除綁定;第二綁定子單元,用于將將取出的轉(zhuǎn)碼任務(wù)重新綁定到所述待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的 CPU核心中;第二更新子單元,用于更新所述待結(jié)束轉(zhuǎn)碼任務(wù)所綁定的CPU核心執(zhí)行任務(wù)數(shù)和所述當(dāng)前執(zhí)行任務(wù)數(shù)最多的CPU核心執(zhí)行任務(wù)數(shù)。
      全文摘要
      本發(fā)明公開(kāi)一種多核心CPU視頻轉(zhuǎn)碼調(diào)度方法,屬于視頻轉(zhuǎn)碼領(lǐng)域,在調(diào)度方案實(shí)施前對(duì)轉(zhuǎn)碼服務(wù)器進(jìn)行靜態(tài)壓力測(cè)試,測(cè)量出單個(gè)CPU核心所能承受的最大轉(zhuǎn)碼任務(wù)并發(fā)數(shù);調(diào)度方案實(shí)施開(kāi)始,初始化所有CPU核心的當(dāng)前執(zhí)行任務(wù)數(shù)為0,判斷如果有新轉(zhuǎn)碼任務(wù)到達(dá),則按照新任務(wù)的分配調(diào)度方法進(jìn)行調(diào)度;判斷如果有轉(zhuǎn)碼任務(wù)停止,則按照已有任務(wù)分配調(diào)度方法進(jìn)行調(diào)度;判斷如果收到終止所有轉(zhuǎn)碼任務(wù)的通知,則退出程序,否則重新判斷是否有新轉(zhuǎn)碼任務(wù)到達(dá),進(jìn)行循環(huán)處理。本發(fā)明使得轉(zhuǎn)碼任務(wù)盡量保持在同一CPU核心中運(yùn)行,有效提高了CPU cache的命中率,提升了系統(tǒng)的運(yùn)算效率,還可以使各個(gè)CPU核心之間負(fù)載盡可能的均衡。
      文檔編號(hào)G06F9/50GK102325255SQ20111026706
      公開(kāi)日2012年1月18日 申請(qǐng)日期2011年9月9日 優(yōu)先權(quán)日2011年9月9日
      發(fā)明者葉迎憲 申請(qǐng)人:深圳市融創(chuàng)天下科技股份有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1