国产精品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>

      一種訪問共享顯示數(shù)據(jù)的方法及系統(tǒng)與流程

      文檔序號(hào):12363194閱讀:173來源:國知局
      一種訪問共享顯示數(shù)據(jù)的方法及系統(tǒng)與流程

      本發(fā)明涉及圖形加速驅(qū)動(dòng)技術(shù)領(lǐng)域,具體涉及一種訪問共享顯示數(shù)據(jù)的方法及系統(tǒng)。



      背景技術(shù):

      EXA是一套在Linux桌面環(huán)境下廣泛使用的2D加速驅(qū)動(dòng)架構(gòu),它通過硬件驅(qū)動(dòng)實(shí)現(xiàn)EXA定義的加速結(jié)構(gòu),進(jìn)而實(shí)現(xiàn)GPU對(duì)Linux桌面環(huán)境的2D加速。

      GPU(Graphics Processing Unit,圖形處理器)是一種專門在個(gè)人電腦、工作站、游戲機(jī)和一些移動(dòng)設(shè)備(如平板電腦、智能手機(jī)等)上進(jìn)行圖像運(yùn)算工作的微處理器。在現(xiàn)代桌面圖形系統(tǒng)中,通常使用GPU來加速桌面圖形的繪制。PC的高性能GPU通常帶有自己獨(dú)立的顯存,GPU顯存主要用來存儲(chǔ)二維和三維的顯示數(shù)據(jù),以及最終顯示到屏幕上的幀緩沖區(qū)。

      由于GPU和CPU是異構(gòu)的,其尋址空間不統(tǒng)一,系統(tǒng)內(nèi)存和GPU顯存之間的顯示數(shù)據(jù)交互直接影響到了系統(tǒng)的圖形性能。

      當(dāng)GPU和CPU都需要訪問一組顯示數(shù)據(jù)時(shí),這組數(shù)據(jù)成為了共享顯示數(shù)據(jù),在EXA圖形系統(tǒng)加速驅(qū)動(dòng)架構(gòu)下,現(xiàn)有技術(shù)中對(duì)這種共享顯示數(shù)據(jù)的訪問方案之一是將數(shù)據(jù)放置在CPU的系統(tǒng)內(nèi)存中,當(dāng)CPU需要修改該數(shù)據(jù)時(shí),直接在系統(tǒng)內(nèi)存中修改;當(dāng)GPU需要處理該數(shù)據(jù)時(shí),從系統(tǒng)內(nèi)存中使用DMA(Direct Memory Access,直接內(nèi)存訪問)接口讀取,并將處理后的最終數(shù)據(jù)放入GPU顯存的幀緩沖區(qū)中。這種處理方式的缺點(diǎn)是:(1)GPU需要大量訪問CPU的系統(tǒng)內(nèi)存,而GPU訪問系統(tǒng)內(nèi)存的速度慢于訪問顯存的速度,從而降低了GPU的工作效率;(2)GPU占用了較多的系統(tǒng)內(nèi)存帶寬,降低了整個(gè)系統(tǒng)的訪存性 能。

      現(xiàn)有技術(shù)中的另一種訪問方案是將數(shù)據(jù)放置在GPU的獨(dú)立顯存中,當(dāng)CPU需要修改該數(shù)據(jù)時(shí),訪問GPU的顯存;當(dāng)GPU需要處理該數(shù)據(jù)時(shí),則直接從其顯存中獲取數(shù)據(jù),并將處理后的最終數(shù)據(jù)放入顯存的幀緩沖區(qū)中。這種處理方式的缺點(diǎn)是:(1)由于CPU準(zhǔn)備數(shù)據(jù)的時(shí)間較長,而GPU在CPU準(zhǔn)備好數(shù)據(jù)之前無法工作,從而降低了GPU的使用效率;(2)CPU訪問顯存速度緩慢,降低了系統(tǒng)的整體性能。



      技術(shù)實(shí)現(xiàn)要素:

      (一)要解決的技術(shù)問題

      本發(fā)明的目的在于提供一種訪問共享顯示數(shù)據(jù)的方法及系統(tǒng),以解決在現(xiàn)有EXA圖形系統(tǒng)加速驅(qū)動(dòng)架構(gòu)下,CPU和GPU操作同一顯示數(shù)據(jù)時(shí),將該顯示數(shù)據(jù)僅放置在CPU內(nèi)存或GPU顯存中所引起的遠(yuǎn)端訪問性能較低下以及系統(tǒng)整體性能下降的問題。

      (二)技術(shù)方案

      為了實(shí)現(xiàn)上述目的,一方面,本發(fā)明提供一種訪問共享顯示數(shù)據(jù)的方法,包括以下步驟:

      當(dāng)操作系統(tǒng)非空閑時(shí),將未被訪問過的顯示數(shù)據(jù)存放在CPU的內(nèi)存中,所述存放的顯示數(shù)據(jù)稱為新數(shù)據(jù);

      當(dāng)操作系統(tǒng)空閑時(shí),循環(huán)執(zhí)行同步步驟;其中,所述同步步驟包括:根據(jù)CPU與GPU訪問同一新數(shù)據(jù)的次數(shù),將所述新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中存放或繼續(xù)存放在CPU的內(nèi)存中。

      優(yōu)選地,所述根據(jù)CPU與GPU訪問同一新數(shù)據(jù)的次數(shù),將所述新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中存放或繼續(xù)存放在CPU的內(nèi)存中包括:

      針對(duì)任意新數(shù)據(jù),分別記錄CPU和GPU訪問所述新數(shù)據(jù)的次數(shù);

      根據(jù)記錄的CPU訪問所述新數(shù)據(jù)的次數(shù)和GPU訪問所述新數(shù)據(jù)的次數(shù)確定將所述新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中或是繼續(xù)存放在CPU的內(nèi)存中,其中,所述確定過轉(zhuǎn)移或繼續(xù)存放的新數(shù)據(jù)稱為舊數(shù)據(jù);

      優(yōu)選地,將GPU對(duì)所有新數(shù)據(jù)的訪問次數(shù)[M1,M2,…,Mn]以及CPU對(duì)所有新數(shù)據(jù)的訪問次數(shù)[N1,N2,…,Nn]均置零,其中n表示新數(shù)據(jù)的個(gè)數(shù);

      所述根據(jù)CPU與GPU訪問同一新數(shù)據(jù)的次數(shù),將所述新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中存放或繼續(xù)存放在CPU的內(nèi)存中包括:

      針對(duì)第k個(gè)新數(shù)據(jù),GPU每訪問一次內(nèi)存中的所述第k個(gè)新數(shù)據(jù),對(duì)應(yīng)的Mk加1,CPU每訪問一次內(nèi)存中的所述第k個(gè)新數(shù)據(jù),對(duì)應(yīng)的Nk加1;其中,k=1,2….n;

      當(dāng)?shù)趉個(gè)新數(shù)據(jù)被GPU和CPU訪問的次數(shù)之和Mk+Nk超過預(yù)設(shè)訪問次數(shù)閾值時(shí),判斷Mk/Nk是否超過第一比值閾值,若超過所述第一比值閾值,則將第k個(gè)新數(shù)據(jù)從CPU的內(nèi)存轉(zhuǎn)移到GPU的顯存中存放,若未超過第一比值閾值,則第k個(gè)新數(shù)據(jù)繼續(xù)存放在CPU的內(nèi)存中。

      另一方面,本發(fā)明還提供了一種訪問共享顯示數(shù)據(jù)的系統(tǒng),包括:

      初始化模塊,用于在操作系統(tǒng)非空閑時(shí),將未被訪問過的顯示數(shù)據(jù)存放在CPU的內(nèi)存中,所述存放的顯示數(shù)據(jù)稱為新數(shù)據(jù);

      同步模塊,用于在操作系統(tǒng)空閑時(shí)循環(huán)執(zhí)行同步子模塊,所述同步子模塊,用于根據(jù)CPU與GPU訪問同一新數(shù)據(jù)的次數(shù),將所述新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中存放或繼續(xù)存放在CPU的內(nèi)存中。

      優(yōu)選地,所述同步子模塊包括第一同步單元;

      所述第一同步單元,用于針對(duì)任意新數(shù)據(jù),分別記錄CPU和GPU訪問所述新數(shù)據(jù)的次數(shù);根據(jù)記錄的CPU訪問所述新數(shù)據(jù)的次數(shù)和GPU訪問所述新數(shù)據(jù)的次數(shù)確定將所述新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中或是繼續(xù)存放在CPU的內(nèi)存中,其中,所述確定過轉(zhuǎn)移或繼續(xù)存放的新數(shù)據(jù)稱為舊數(shù)據(jù)。

      優(yōu)選地,所述初始化模塊還用于將GPU對(duì)所有新數(shù)據(jù)的訪問次數(shù)[M1,M2,…,Mn]以及CPU對(duì)所有新數(shù)據(jù)的訪問次數(shù)[N1,N2,…,Nn] 均置零,其中n表示新數(shù)據(jù)的個(gè)數(shù);

      所述同步子模塊包括:第二同步單元;

      所述第二同步單元,用于針對(duì)第k個(gè)新數(shù)據(jù),GPU每訪問一次內(nèi)存中的所述第k個(gè)新數(shù)據(jù),對(duì)應(yīng)的Mk加1,CPU每訪問一次內(nèi)存中的所述第k個(gè)新數(shù)據(jù),對(duì)應(yīng)的Nk加1;其中,k=1,2….n;當(dāng)?shù)趉個(gè)新數(shù)據(jù)被GPU和CPU訪問的次數(shù)之和Mk+Nk超過預(yù)設(shè)訪問次數(shù)閾值時(shí),判斷Mk/Nk是否超過第一比值閾值,若超過所述第一比值閾值,則將第k個(gè)新數(shù)據(jù)從CPU的內(nèi)存轉(zhuǎn)移到GPU的顯存中存放,若未超過第一比值閾值,則第k個(gè)新數(shù)據(jù)繼續(xù)存放在CPU的內(nèi)存中。

      (三)有益效果

      本發(fā)明根據(jù)CPU與GPU對(duì)顯示數(shù)據(jù)的訪問次數(shù)等統(tǒng)計(jì)信息,選擇同步策略,將顯示數(shù)據(jù)放置在CPU的內(nèi)存內(nèi)或GPU的顯存內(nèi),實(shí)現(xiàn)CPU和GPU對(duì)顯示數(shù)據(jù)的高效訪問,同時(shí)不影響整個(gè)系統(tǒng)的工作性能。

      附圖說明

      圖1為本發(fā)明實(shí)施例中CPU與GPU訪問共享顯示數(shù)據(jù)的原理圖;

      圖2為本發(fā)明實(shí)施例中提供的一種CPU與GPU訪問共享顯示數(shù)據(jù)的方法的流程圖;

      圖3為本發(fā)明實(shí)施例中提供的一種CPU與GPU訪問共享顯示數(shù)據(jù)方法的步驟S2的詳細(xì)流程圖;

      圖4為本發(fā)明實(shí)施例中提供的一種訪問共享顯示數(shù)據(jù)的系統(tǒng)的結(jié)構(gòu)示意圖;

      圖5為本發(fā)明實(shí)施例中提供的一種訪問共享顯示數(shù)據(jù)的系統(tǒng)的另一結(jié)構(gòu)示意圖。

      具體實(shí)施方式

      為使本發(fā)明的目的、內(nèi)容、和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。

      圖1為本發(fā)明實(shí)施例CPU與GPU訪問共享顯示數(shù)據(jù)的原理圖。參照?qǐng)D1所示,為實(shí)現(xiàn)在現(xiàn)有Linux操作系統(tǒng)的EXA驅(qū)動(dòng)架構(gòu)下,CPU和GPU對(duì)共享顯示數(shù)據(jù)的高效訪問,本實(shí)施例首先需要在CPU內(nèi)存和GPU顯存內(nèi)為每個(gè)顯示數(shù)據(jù)設(shè)置了大小相同的數(shù)據(jù)區(qū)域,用于存儲(chǔ)顯示數(shù)據(jù),數(shù)據(jù)區(qū)域兩兩一組,一組數(shù)據(jù)區(qū)域?qū)?yīng)一個(gè)顯示數(shù)據(jù),例如,對(duì)第一個(gè)顯示數(shù)據(jù),CPU內(nèi)存和GPU顯存內(nèi)均設(shè)置有大小相同的數(shù)據(jù)區(qū)域1,對(duì)第二個(gè)顯示數(shù)據(jù),CPU內(nèi)存和GPU顯存內(nèi)均設(shè)置有大小相同的數(shù)據(jù)區(qū)域2,等等。每個(gè)數(shù)據(jù)區(qū)域的指針都保存在同一個(gè)指針數(shù)組中,并利用哈希算法對(duì)指針?biāo)甘镜臄?shù)據(jù)區(qū)域進(jìn)行定位,以提高數(shù)據(jù)定位速度。

      優(yōu)選方案中,本實(shí)施例還設(shè)置有監(jiān)測(cè)線程和同步線程,監(jiān)測(cè)線程用于監(jiān)測(cè)并記錄CPU和GPU對(duì)每個(gè)顯示數(shù)據(jù)的訪問次數(shù)和每次訪問的數(shù)據(jù)量大小,并能根據(jù)監(jiān)測(cè)和記錄的信息,進(jìn)行閾值判斷和數(shù)據(jù)是否變化的判斷,對(duì)已被訪問的顯示數(shù)據(jù)設(shè)定優(yōu)先級(jí);同步線程,用于根據(jù)所述監(jiān)測(cè)線程所監(jiān)測(cè)的信息以及對(duì)顯示數(shù)據(jù)制定的優(yōu)先級(jí)對(duì)顯示數(shù)據(jù)在CPU系統(tǒng)內(nèi)存和GPU顯存之間進(jìn)行轉(zhuǎn)移或者備份。

      圖2為本發(fā)明實(shí)施例CPU與GPU訪問共享顯示數(shù)據(jù)的方法流程圖,參照?qǐng)D2所示,本實(shí)施例方法包括以下步驟:

      S1、當(dāng)操作系統(tǒng)非空閑或啟動(dòng)時(shí),將未被訪問過的顯示數(shù)據(jù)存放在內(nèi)存中,所述未被訪問過的顯示數(shù)據(jù)稱為新數(shù)據(jù),將圖形處理器GPU對(duì)所有新數(shù)據(jù)的訪問次數(shù)[M1,M2,…,Mn](即Mn表示GPU對(duì)第n個(gè)新數(shù)據(jù)的訪問次數(shù))以及CPU對(duì)所有新數(shù)據(jù)的訪問次數(shù)[N1,N2,…,Nn](即Nn表示GPU對(duì)第n個(gè)新數(shù)據(jù)的訪問次數(shù))均置零,其中n表示新數(shù)據(jù)的個(gè)數(shù);

      本步驟中,考慮到GPU遠(yuǎn)程訪問內(nèi)存的速度比CPU遠(yuǎn)程訪問顯存的速度快,因此,默認(rèn)地先把所有顯示數(shù)據(jù)都存儲(chǔ)在CPU系統(tǒng)的內(nèi)存中,以提高GPU和CPU訪問共享數(shù)據(jù)的初始訪問效率。

      S2、當(dāng)Linux操作系統(tǒng)空閑時(shí),循環(huán)執(zhí)行同步步驟,當(dāng)操作系統(tǒng)非空閑時(shí)返回步驟S1。

      參考圖3所示,所述同步步驟S2包括:

      步驟S21:根據(jù)CPU與GPU訪問同一新數(shù)據(jù)的次數(shù),將新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中存放或繼續(xù)存放在CPU的內(nèi)存中。

      該S21實(shí)現(xiàn)方式可以為:針對(duì)任意新數(shù)據(jù),分別記錄CPU和GPU訪問所述新數(shù)據(jù)的次數(shù);

      具體而言,GPU每訪問一次內(nèi)存中的所述第k個(gè)新數(shù)據(jù),監(jiān)測(cè)線程將對(duì)應(yīng)的Mk加1,CPU每訪問一次內(nèi)存中的所述第k個(gè)新數(shù)據(jù),監(jiān)測(cè)線程將對(duì)應(yīng)的Nk加1,其中,k=1,2,…,n,即k可以是任意一個(gè)n的取值;

      根據(jù)記錄的CPU訪問所述新數(shù)據(jù)的次數(shù)和GPU訪問所述新數(shù)據(jù)的次數(shù)確定將所述新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中或是繼續(xù)存放在CPU的內(nèi)存中,其中,所述確定過轉(zhuǎn)移或繼續(xù)存放的新數(shù)據(jù)稱為舊數(shù)據(jù)。

      具體而言,當(dāng)?shù)趉個(gè)新數(shù)據(jù)被GPU和CPU訪問的次數(shù)之和Mk+Nk超過預(yù)設(shè)訪問次數(shù)閾值時(shí),監(jiān)測(cè)線程判斷Mk/Nk是否超過所述第一比值閾值,若超過第一比值閾值,則同步線程將第k個(gè)新數(shù)據(jù)從CPU的內(nèi)存轉(zhuǎn)移到GPU的顯存中存放,若未超過第一比值閾值,則第k個(gè)新數(shù)據(jù)繼續(xù)存放在CPU的內(nèi)存中。

      本步驟是為了通過統(tǒng)計(jì)新數(shù)據(jù)被訪問的次數(shù),實(shí)現(xiàn)將總訪問量達(dá)到一定次數(shù)(說明CPU和GPU對(duì)該顯示數(shù)據(jù)的總訪問次數(shù)已達(dá)到影響系統(tǒng)整體工作效率和整體性能的程度,需要關(guān)注其所處存儲(chǔ)位置是否需要被調(diào)整),且GPU訪問次數(shù)多于CPU訪問次數(shù)達(dá)一定程度的顯示數(shù)據(jù)從默認(rèn)的內(nèi)存轉(zhuǎn)移到顯存中進(jìn)行存儲(chǔ),避免GPU遠(yuǎn)程訪問此類數(shù)據(jù)所造成的效率低下和系統(tǒng)性能降低。在實(shí)現(xiàn)此策略的過程中,還提供了下述優(yōu)選方案S22,通過對(duì)數(shù)據(jù)進(jìn)行優(yōu)先級(jí)的設(shè)置及排序,以區(qū)分新、舊數(shù)據(jù),也供在后續(xù)可能要執(zhí)行的進(jìn)一步優(yōu)選的同步 策略中使用。其中第一比值閾值的設(shè)定根據(jù)操作系統(tǒng)軟、硬件配置而定,以不降低系統(tǒng)整體工作效率和整體性能為準(zhǔn)。

      步驟S22:新數(shù)據(jù)被訪問的過程中,監(jiān)測(cè)線程將還根據(jù)對(duì)各新數(shù)據(jù)的訪問統(tǒng)計(jì)信息,對(duì)各新數(shù)據(jù)進(jìn)行優(yōu)先級(jí)的排序;依次按照所述優(yōu)先級(jí)從高到低的次序,確定各次序上的舊數(shù)據(jù)是是否需要轉(zhuǎn)移。

      其中,訪問統(tǒng)計(jì)信息包括對(duì)新數(shù)據(jù)的訪問次數(shù)和每次訪問的數(shù)據(jù)大小,監(jiān)測(cè)線程在排序時(shí)首先根據(jù)訪問次數(shù)與訪問數(shù)據(jù)大小的加權(quán)和計(jì)算新數(shù)據(jù)的總被訪問數(shù)據(jù)量,從而確定被訪問數(shù)據(jù)的優(yōu)先級(jí)。例如,數(shù)據(jù)a的總被訪問數(shù)據(jù)量=Σ(b×c),c表示數(shù)據(jù)a中數(shù)據(jù)量b被訪問的次數(shù)。

      上述確定各次序上的舊數(shù)據(jù)是是否需要轉(zhuǎn)移具體為:判斷當(dāng)前次序中的第k個(gè)舊數(shù)據(jù)被CPU和GPU分別訪問的次數(shù)比值是否超過第二比值閾值,若超過,則將第k個(gè)舊數(shù)據(jù)在內(nèi)存中存放,否則將第k個(gè)舊數(shù)據(jù)在顯存中存放;

      執(zhí)行本步驟的目的是,在舊數(shù)據(jù)被CPU與GPU訪問的次數(shù)比例有變化且滿足一定條件時(shí),對(duì)其所處存儲(chǔ)位置進(jìn)行重新調(diào)整,實(shí)現(xiàn)新的訪問策略。該第二比值閾值的設(shè)定根據(jù)操作系統(tǒng)軟、硬件配置而定,以不降低系統(tǒng)整體工作效率和整體性能為準(zhǔn),可以是與第一比值閾值的倒數(shù)為不同的數(shù)值。

      具體而言,在實(shí)際操作中,為了優(yōu)先保證CPU的工作需求,在不考慮數(shù)據(jù)從顯存轉(zhuǎn)移至內(nèi)存過程中的資源損耗的理想情況下,可將第一比值閾值與第二比值閾值設(shè)置為互為倒數(shù);而若考慮到數(shù)據(jù)轉(zhuǎn)移過程這一行為本身也需要消耗系統(tǒng)資源,可將第二比值閾值設(shè)置為與第一比值閾值的倒數(shù)之間存在一定差值,此差值設(shè)置的原則是要保證數(shù)據(jù)轉(zhuǎn)移之后所節(jié)省的系統(tǒng)資源大于數(shù)據(jù)轉(zhuǎn)移過程所消耗的系統(tǒng)資源,以保證高效訪問且不影響系統(tǒng)性能。

      需要說明的是,在本步驟中,系統(tǒng)的空閑時(shí)間長短不確定,為了 盡可能的提高系統(tǒng)的工作效率,較佳的方法就是按照已經(jīng)確定的優(yōu)先級(jí)別,優(yōu)先對(duì)級(jí)別高的顯示數(shù)據(jù)的存放位置進(jìn)行分配,也即校正的過程,優(yōu)先級(jí)別高的顯示數(shù)據(jù)存放位置的校正,能夠?qū)ο到y(tǒng)整體工作效率和整體性能帶來較大的影響。在系統(tǒng)空閑時(shí)間不充足的情況下,優(yōu)先級(jí)別低的顯示數(shù)據(jù)存放位置即使不能得到校正,因?yàn)樵擄@示數(shù)據(jù)被訪問的次數(shù)和每次訪問的數(shù)據(jù)量不大,所以也不會(huì)對(duì)統(tǒng)整體工作效率和整體性能帶來實(shí)質(zhì)性影響。

      步驟S23:按照所述優(yōu)先級(jí)從高到低的次序,判斷當(dāng)前次序中的舊數(shù)據(jù)k是否滿足如下條件:若被GPU訪問的次數(shù)Mk大于GPU訪問閾值,被CPU訪問的次數(shù)Nk大于CPU訪問閾值,且Mk與Nk的差值不超過差值閾值;若滿足,則將第k個(gè)舊數(shù)據(jù)在另一存放位置進(jìn)行備份,其中,被訪問的次數(shù)多的新數(shù)據(jù)屬于優(yōu)先級(jí)別高的。

      本步驟中,CPU和GPU對(duì)新的顯示數(shù)據(jù)的訪問次數(shù)滿足本步驟的判斷標(biāo)準(zhǔn)則說明CPU和GPU對(duì)該顯示數(shù)據(jù)的總訪問次數(shù)已達(dá)到影響系統(tǒng)整體工作效率和整體性能的程度,以及CPU和GPU對(duì)該顯示數(shù)據(jù)的總訪問次數(shù)接近;此時(shí),將該顯示數(shù)據(jù)僅放置在系統(tǒng)內(nèi)存中或僅放置在GPU顯存中,都會(huì)造成一個(gè)處理器的遠(yuǎn)端訪問,對(duì)系統(tǒng)整體工作效率和整體性能帶來不良影響,因此本步驟通過同步線程將該顯示數(shù)據(jù)在系統(tǒng)內(nèi)存和GPU顯存內(nèi)進(jìn)行同步備份,系統(tǒng)內(nèi)存和GPU顯存內(nèi)同時(shí)存放該顯示數(shù)據(jù),CPU通過訪問系統(tǒng)內(nèi)存來訪問該顯示數(shù)據(jù),GPU通過訪問GPU顯存來訪問該顯示數(shù)據(jù)。

      已訪問的顯示數(shù)據(jù)進(jìn)行再次分配時(shí)在系統(tǒng)內(nèi)存和GPU顯存內(nèi)同步備份的情況下,在顯示數(shù)據(jù)訪問過程中,如果該顯示數(shù)據(jù)在系統(tǒng)內(nèi)存或GPU顯存中其中一個(gè)數(shù)據(jù)區(qū)域內(nèi)發(fā)生變化,另一個(gè)數(shù)據(jù)區(qū)域內(nèi)沒有同步發(fā)生變化,此時(shí)如果仍然是CPU通過訪問系統(tǒng)內(nèi)存來訪問該顯示數(shù)據(jù),GPU通過訪問GPU顯存來訪問該顯示數(shù)據(jù)的方式,則會(huì)造成其中一個(gè)處理器所訪問的顯示數(shù)據(jù)為錯(cuò)誤數(shù)據(jù),為了避免這種失誤出 現(xiàn),本步驟在其中一個(gè)數(shù)據(jù)區(qū)域內(nèi)的顯示數(shù)據(jù)發(fā)生變化時(shí),將未被及時(shí)同步的數(shù)據(jù)區(qū)域內(nèi)的顯示數(shù)據(jù)刪除,以避免被訪問,此時(shí)CPU和GPU均訪問已發(fā)生變化的數(shù)據(jù)區(qū)域內(nèi)的顯示數(shù)據(jù),刪除顯存中對(duì)應(yīng)的備份數(shù)據(jù)后,GPU通過直接內(nèi)存訪問DMA接口訪問內(nèi)存中發(fā)生變化的舊數(shù)據(jù),可以提高訪問速率。被刪除的顯示數(shù)據(jù),待到系統(tǒng)空閑時(shí)即可根據(jù)所對(duì)應(yīng)數(shù)據(jù)區(qū)域內(nèi)顯示數(shù)據(jù)的變化由同步線程進(jìn)行同步。

      需要說明的是,本步驟S2都是在系統(tǒng)空閑的時(shí)候才執(zhí)行,優(yōu)選地,當(dāng)系統(tǒng)空閑時(shí),首先執(zhí)行步驟S21,當(dāng)還有空閑時(shí)間時(shí)再執(zhí)行步驟S22,仍有空閑時(shí)再執(zhí)行步驟S23,一次循環(huán)執(zhí)行完之后還有空閑時(shí)間則返回步驟S21開始下一次循環(huán)。又或者,在執(zhí)行S21時(shí),同時(shí)適當(dāng)?shù)膱?zhí)行S22的優(yōu)先級(jí)排序等。即,待到下次系統(tǒng)空閑到來時(shí),不對(duì)上次系統(tǒng)空閑時(shí)未完成的進(jìn)程進(jìn)行繼續(xù)處理,而是按照上述處理過程重新開始顯示數(shù)據(jù)存放位置的分配,以利于顯示數(shù)據(jù)存放位置的及時(shí)更新。

      上述方法中是結(jié)合同步進(jìn)程和監(jiān)控進(jìn)程為執(zhí)行主體為例進(jìn)行描述的,但并不僅限于同步進(jìn)程和監(jiān)控進(jìn)行才能夠完成,例如可以控制CPU和GPU訪存的其他應(yīng)用程序或系統(tǒng),如Linux系統(tǒng)等,還可以是可以運(yùn)行該其他應(yīng)用程序或系統(tǒng)的設(shè)備,如PC機(jī)等。

      與上述方法對(duì)應(yīng)地,本發(fā)明還提供了一種訪問共享顯示數(shù)據(jù)的系統(tǒng),如圖4所示,包括:初始化模塊41,同步模塊42。

      初始化模塊41,初始化模塊,用于在操作系統(tǒng)啟動(dòng)或非空閑時(shí),將未被訪問過的顯示數(shù)據(jù)存放在CPU的內(nèi)存中,存放的顯示數(shù)據(jù)稱為新數(shù)據(jù);

      同步模塊42,用于在操作系統(tǒng)空閑時(shí)循環(huán)執(zhí)行同步子模塊420,同步子模塊,用于根據(jù)CPU與GPU訪問同一新數(shù)據(jù)的次數(shù),將新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中存放或繼續(xù)存放在CPU的內(nèi)存中。

      優(yōu)選地,如圖5所示,同步子模塊420包括第一同步單元4201 和/第二同步單元4202;

      第一同步單元4201,用于針對(duì)任意新數(shù)據(jù),分別記錄CPU和GPU訪問新數(shù)據(jù)的次數(shù);根據(jù)記錄的CPU訪問新數(shù)據(jù)的次數(shù)和GPU訪問新數(shù)據(jù)的次數(shù)確定將新數(shù)據(jù)轉(zhuǎn)移到GPU的顯存中或是繼續(xù)存放在CPU的內(nèi)存中,其中,確定過轉(zhuǎn)移或繼續(xù)存放的新數(shù)據(jù)稱為舊數(shù)據(jù)。

      其中,初始化模塊41還用于將GPU對(duì)所有新數(shù)據(jù)的訪問次數(shù)[M1,M2,…,Mn]以及CPU對(duì)所有新數(shù)據(jù)的訪問次數(shù)[N1,N2,…,Nn]均置零,其中n表示新數(shù)據(jù)的個(gè)數(shù);

      第二同步單元4202,用于針對(duì)第k個(gè)新數(shù)據(jù),GPU每訪問一次內(nèi)存中的第k個(gè)新數(shù)據(jù),對(duì)應(yīng)的Mk加1,CPU每訪問一次內(nèi)存中的第k個(gè)新數(shù)據(jù),對(duì)應(yīng)的Nk加1;其中,k=1,2….n;當(dāng)?shù)趉個(gè)新數(shù)據(jù)被GPU和CPU訪問的次數(shù)之和Mk+Nk超過預(yù)設(shè)訪問次數(shù)閾值時(shí),判斷Mk/Nk是否超過第一比值閾值,若超過第一比值閾值,則將第k個(gè)新數(shù)據(jù)從CPU的內(nèi)存轉(zhuǎn)移到GPU的顯存中存放,若未超過第一比值閾值,則第k個(gè)新數(shù)據(jù)繼續(xù)存放在CPU的內(nèi)存中。

      優(yōu)選地,同步子模塊420還包括:

      排序單元4203,用于根據(jù)各新數(shù)據(jù)的訪問統(tǒng)計(jì)信息,對(duì)各新數(shù)據(jù)進(jìn)行優(yōu)先級(jí)的排序;

      轉(zhuǎn)移單元4204,用于依次按照優(yōu)先級(jí)從高到低的次序,確定各次序上的舊數(shù)據(jù)是是否需要轉(zhuǎn)移。

      具體地,轉(zhuǎn)移單元4204,具體用于判斷當(dāng)前次序中的第k個(gè)舊數(shù)據(jù)被CPU和GPU分別訪問的次數(shù)比值是否超過第二比值閾值,若超過,則將第k個(gè)舊數(shù)據(jù)在內(nèi)存中存放,否則將第k個(gè)舊數(shù)據(jù)在顯存中存放。

      同步子模塊420還包括備份單元4205;

      備份單元4205,用于按照優(yōu)先級(jí)從高到低的次序,判斷當(dāng)前次序中的舊數(shù)據(jù)k是否滿足如下條件:

      被GPU訪問的次數(shù)Mk大于GPU訪問閾值,

      被CPU訪問的次數(shù)Nk大于CPU訪問閾值,

      Mk與Nk的差值不超過差值閾值;

      若滿足,則將第k個(gè)舊數(shù)據(jù)在另一存放位置進(jìn)行備份。

      備份單元4205,還用于在備份后,內(nèi)存和顯存中有一方的舊數(shù)據(jù)發(fā)生變化時(shí),將另一方中對(duì)應(yīng)的備份數(shù)據(jù)刪除。

      備份單元4205,還用于在刪除顯存中對(duì)應(yīng)的備份數(shù)據(jù)后,使GPU通過直接內(nèi)存訪問DMA接口訪問內(nèi)存中發(fā)生變化的舊數(shù)據(jù)。

      優(yōu)選方案中,本實(shí)施例提供的該系統(tǒng)還包括:

      數(shù)據(jù)區(qū)域分配模塊,用于在初始化模塊執(zhí)行初始化步驟之前,在內(nèi)存和顯存中分配同樣大小的兩個(gè)數(shù)據(jù)區(qū)域,且每個(gè)數(shù)據(jù)區(qū)域的指針都保存在同一個(gè)指針數(shù)組中。

      優(yōu)選方案下,所述同步模塊420的功能由內(nèi)存中建立的監(jiān)測(cè)線程和同步線程來執(zhí)行,其中所有的,計(jì)數(shù)、閾值判斷,數(shù)據(jù)是否變化的判斷,以及優(yōu)先級(jí)排序的步驟都由監(jiān)測(cè)線程來執(zhí)行,其中的存放位置轉(zhuǎn)移,以及備份步驟都由同步線程來執(zhí)行。

      由以上實(shí)施例可以看出,本發(fā)明根據(jù)CPU與GPU對(duì)顯示數(shù)據(jù)的訪問次數(shù)等統(tǒng)計(jì)信息,選擇不同的同步策略,將顯示數(shù)僅放置在系統(tǒng)內(nèi)存內(nèi)或GPU顯存內(nèi),或同步備份在系統(tǒng)內(nèi)存內(nèi)和GPU顯存內(nèi),實(shí)現(xiàn)CPU和GPU對(duì)顯示數(shù)據(jù)的高效訪問,同時(shí)不影響整個(gè)系統(tǒng)的工作性能。

      以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和變形,這些改進(jìn)和變形也應(yīng)視為本發(fā)明的保護(hù)范圍。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1