專利名稱:基于多核架構(gòu)的大圖像實(shí)時(shí)瀏覽方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,尤其涉及一種基于多核架構(gòu)的大圖像 實(shí)時(shí)瀏覽方法。
背景技術(shù):
近年來,隨著數(shù)據(jù)獲取設(shè)備的不斷提高,越來越多的高精度大圖像出 現(xiàn)在醫(yī)學(xué)、遙感、氣象、考古等領(lǐng)域中。這些大圖像給使用者帶來更多細(xì) 節(jié)信息的同時(shí),也給計(jì)算機(jī)交互式的顯示它們帶來了巨大的挑戰(zhàn)。例如,我們使用Canon 5D相機(jī)在敦煌莫高窟285洞窟拍攝的"飛天"佛像全景 圖數(shù)據(jù)大小達(dá)到了 15G,遠(yuǎn)遠(yuǎn)超過了計(jì)算機(jī)內(nèi)存和顯存的容量限制,導(dǎo)致 了效率低下的out-of-core數(shù)據(jù)訪問,給圖片的實(shí)時(shí)瀏覽帶來了巨大的問題。以往對(duì)大圖像瀏覽的研究大多利用數(shù)據(jù)訪問的時(shí)間相關(guān)性和空間相 關(guān)性,通過緩存最近訪問的圖像數(shù)據(jù),最大P艮度的降低數(shù)據(jù)從硬盤到內(nèi)存 的延遲時(shí)間。這些算法存在兩個(gè)明顯的不足首先,這些算法都需要進(jìn)行 大量的預(yù)處理操作,這些操作是十分耗時(shí)的,大大降低了操作效率;其次, 這些算法都是通過設(shè)計(jì)一些存儲(chǔ)層次結(jié)構(gòu),來緩存已訪問的數(shù)據(jù),利用數(shù) 據(jù)使用的時(shí)間相關(guān)性和空間相關(guān)性,然而一旦需要訪問新的圖像數(shù)據(jù),就 不得不從硬盤調(diào)度,產(chǎn)生了明顯的i/o延遲,使圖像的實(shí)時(shí)瀏覽性能突然 下降。為此,我們提出了一種基于預(yù)測(cè)的數(shù)據(jù)管理方法,通過預(yù)測(cè)使用者 即將可能瀏覽的圖像數(shù)據(jù),利用多核架構(gòu)下的并行工作管道,將這些預(yù)測(cè) 數(shù)據(jù)快速的提前預(yù)取到內(nèi)存中,從而避免了數(shù)據(jù)訪問中可能產(chǎn)生的延遲。隨著計(jì)算機(jī)硬件計(jì)算能力呈指數(shù)速度的增長,尤其是多核技術(shù)的出現(xiàn),使數(shù)據(jù)的并行處理能力有了巨大的提高。Nvidia公司推出的GTX285 圖形卡已經(jīng)可以達(dá)到500Gflops的性能,其基于GT200架構(gòu)的圖形卡里包性能計(jì)算;另外,圖 形卡的可編程性也越來越靈活,Nvidia公司的CUDA編程架構(gòu)可以使編 程者靈活而且充分的利用GPU的強(qiáng)大并行計(jì)算能力進(jìn)行算法設(shè)計(jì)。
圖像處理本身就是十分適合并行處理的算法,因此4艮適合利用這些新 的硬件性能。為了充分挖掘硬件的并行計(jì)算能力,以實(shí)現(xiàn)大圖像的實(shí)時(shí)瀏 覽,所以必須重新設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和算法,否則無法發(fā)揮現(xiàn)有石更件的處理能 力。
發(fā)明內(nèi)容
本發(fā)明提出的是一種基于多核架構(gòu)的大圖像實(shí)時(shí)瀏覽方法,采用并行 工作管道和基于預(yù)測(cè)的數(shù)據(jù)處理技術(shù),不需要任何預(yù)處理操作,大大提高 了瀏覽的效率。
一種基于多核架構(gòu)的大圖像實(shí)時(shí)瀏覽方法,包括如下步驟
(1) 使用內(nèi)存映射技術(shù),將所述的大圖像中指定部位的圖象數(shù)據(jù)讀 取至緩存池;
讀取指定部位的圖象數(shù)據(jù)時(shí)是分若干數(shù)據(jù)塊讀入的,每個(gè)數(shù)據(jù)塊對(duì)應(yīng) 的一個(gè)圖象區(qū)域,每個(gè)圖象區(qū)域大小相同且均為矩形;
作為優(yōu)選,每個(gè)數(shù)據(jù)塊大小不超過cache的容量,每個(gè)數(shù)據(jù)塊對(duì)應(yīng)的 圖象區(qū)域?yàn)檎叫危叽鐟?yīng)該為2的冪次方。
(2) 根據(jù)瀏覽者的指定,將緩存池內(nèi)的對(duì)應(yīng)的數(shù)據(jù)塊以圖象形式進(jìn) 行顯示,所顯示的圖象區(qū)域即為當(dāng)前瀏覽區(qū)域,當(dāng)瀏覽者選擇當(dāng)前瀏覽區(qū) 域相鄰的圖象區(qū)域進(jìn)行瀏覽時(shí),緩存池內(nèi)的圖象數(shù)據(jù)按如下方法讀取和更 新
a) 設(shè)定位移閾值,若更新后的當(dāng)前瀏覽區(qū)域在大圖像中沿同一方 向連續(xù)移動(dòng)的位移絕對(duì)值未達(dá)到位移閾值時(shí),緩存池內(nèi)的圖象數(shù)據(jù)不做更 新;
b) 當(dāng)更新后的當(dāng)前瀏覽區(qū)域在大圖像中沿同一方向連續(xù)移動(dòng)的 位移絕對(duì)值達(dá)到位移閾值時(shí),僅將更新后的當(dāng)前瀏覽區(qū)域的在所述的同一方向側(cè)的鄰近范圍的圖象數(shù)據(jù)作為下次更新可能瀏覽的數(shù)據(jù)讀入緩存池; 將下次更新可能瀏覽的數(shù)據(jù)讀入緩存池時(shí),將與當(dāng)前瀏覽區(qū)域在所述
的同 一方向側(cè)相隔預(yù)定步長的圖象區(qū)域中的圖象數(shù)據(jù)淘汰;
所述的鄰近范圍的圖象數(shù)據(jù)是指當(dāng)前瀏覽區(qū)域同 一方向側(cè)正向及兩
個(gè)斜向的共三部分圖象數(shù)據(jù),而每部分的圖象數(shù)據(jù)包含一個(gè)數(shù)據(jù)塊的圖象
數(shù)據(jù)或是包含連續(xù)的多個(gè)數(shù)據(jù)塊的圖象數(shù)據(jù);
c)當(dāng)瀏覽方向發(fā)生改變時(shí),僅將改變?yōu)g覽方向后的當(dāng)前瀏覽區(qū)域
在改變后方向上直接相鄰的正向及兩個(gè)斜向共三個(gè)圖像區(qū)域的圖像數(shù)據(jù)
作為下次更新可能瀏覽的數(shù)據(jù)讀入緩存池;
所述的步驟(l)、步驟(2)中,在顯示當(dāng)前瀏覽區(qū)域的圖像數(shù)據(jù)以
及向緩存池內(nèi)讀取圖象數(shù)據(jù)時(shí)通過設(shè)立并行工作管道,利用CPU多核技
術(shù)使多個(gè)線程并行地處理;利用一個(gè)線程來顯示當(dāng)前瀏覽區(qū)域的圖像數(shù)
據(jù),利用其余的線程向緩存池內(nèi)讀取圖象數(shù)據(jù)。
以下結(jié)合各步驟詳細(xì)說明本發(fā)明方法 步驟(1)中
由于大圖像所含的數(shù)據(jù)量較大,數(shù)據(jù)并不會(huì)同時(shí)被使用,讀取暫時(shí)用 不到的數(shù)據(jù)浪費(fèi)了大量的硬盤讀取時(shí)間和帶寬, 一個(gè)比較重要的問題就是 一次應(yīng)該讀取多少數(shù)據(jù)。為了使數(shù)據(jù)從硬盤到內(nèi)存的載入速度加快, 一種 極端的做法可能是一次只讀取一個(gè)像素。這樣做盡管減少了進(jìn)行一次數(shù)據(jù) 傳輸?shù)臅r(shí)間,但卻大大增加了傳輸?shù)拇螖?shù),產(chǎn)生了更大的傳輸花費(fèi)。這里, 本發(fā)明主要從三方面考慮設(shè)計(jì)數(shù)據(jù)讀取塊的大小
因此本發(fā)明根據(jù)以下三個(gè)方面將整個(gè)大圖像劃分為若干數(shù)據(jù)塊
第一,由于CPU最終要通過其片上cache讀取數(shù)據(jù),為了增加其cache 命中率,使每次讀取的數(shù)據(jù)塊大小不超過cache的容量;
第二,所選取的數(shù)據(jù)塊形狀是等方性的,為了操作上的簡單,選取正 方形作為我們的數(shù)據(jù)塊形狀;
第三,為了加快內(nèi)存訪問的速度,凝:據(jù)塊的大小和尺寸應(yīng)該均為2的
6冪次方。設(shè)立了一個(gè)緩存池,用來存儲(chǔ)剛剛已經(jīng)訪問、正在訪問的以及我 們預(yù)測(cè)出的即將可能訪問的數(shù)據(jù)塊。這樣瀏覽者可以根據(jù)瀏覽需要,按需 的將所對(duì)應(yīng)的數(shù)據(jù)塊讀到我們所建立的緩存池中。同時(shí),本發(fā)明使用了內(nèi)
存映射技術(shù)進(jìn)行數(shù)據(jù)的讀取,極大的提高了讀取的效率;
所述的緩存池是一個(gè)長方形的二維結(jié)構(gòu),根據(jù)當(dāng)前圖像瀏覽的方向 性,可動(dòng)態(tài)的調(diào)整緩存池的長寬,也就是說,當(dāng)圖像^L橫向?yàn)g覽時(shí),緩存 池的長度會(huì)大于寬度,而當(dāng)圖像做縱向?yàn)g覽時(shí),緩存池的寬度則會(huì)大于長 度。當(dāng)然,緩存池的長寬變換并不是一步完成的,而是在并行工作管道中, 隨著圖像瀏覽方向的變化,逐漸的分幾步操作完成的,漸進(jìn)式的完成長寬 變換。
現(xiàn)有技術(shù)多數(shù)使用了虛擬內(nèi)存技術(shù),這種技術(shù)可能誘使人們想要把數(shù) 據(jù)全部一次性讀進(jìn)來,但卻忽視了兩個(gè)重要的方面首先,這些數(shù)據(jù)并不 會(huì)同時(shí)被使用,而讀取這些用不到的數(shù)據(jù)卻浪費(fèi)了大量的硬盤讀取時(shí)間和 帶寬;其次,內(nèi)存的容量遠(yuǎn)遠(yuǎn)小于硬盤,并沒有足夠的空間來存儲(chǔ)我們所 需要的大規(guī)模數(shù)據(jù)。另外, 一次虛擬存儲(chǔ)操作會(huì)產(chǎn)生兩次i/o操作, 一次 是從硬盤文件讀取數(shù)據(jù), 一次是進(jìn)行頁面置換操作,開銷是4艮大的。這里, 本發(fā)明采用內(nèi)存映射技術(shù),將數(shù)據(jù)直接映射到進(jìn)程的地址空間中去,如同 整個(gè)文件加載到了內(nèi)存中一樣,使訪問速度明顯加快。
本發(fā)明方法不需要象現(xiàn)有技術(shù)那樣必須預(yù)先對(duì)數(shù)據(jù)文件進(jìn)行分塊處 理和邏輯組織,而是在需要讀取時(shí)通過使用內(nèi)存映射技術(shù)根據(jù)圖像塊在整 個(gè)圖像文件的相對(duì)位置關(guān)系直接讀取,從而實(shí)現(xiàn)真正的"按需讀取"。大 圖像所包含的數(shù)據(jù)量是巨大的,每次瀏覽只需要其中的一部分?jǐn)?shù)據(jù),因此 只需要讀取所需的一部分?jǐn)?shù)據(jù),從而節(jié)省了大量的硬盤讀取時(shí)間和帶寬。
步驟(2)中
本發(fā)明根據(jù)圖像瀏覽行進(jìn)的特點(diǎn),預(yù)測(cè)出即將可能訪問的數(shù)據(jù)塊,即 進(jìn)行圖像瀏覽時(shí)在某一方向上的操作具有持續(xù)性的概率很大,因此可以將 緩存池設(shè)計(jì)成一個(gè)長方形二維結(jié)構(gòu)。第一,當(dāng)瀏覽者沿同一方向連續(xù)更新當(dāng)前瀏覽區(qū)域時(shí),僅將更新后的 當(dāng)前瀏覽區(qū)域的在所述的同一方向側(cè)的相隔一定步長的相鄰區(qū)域的圖象 數(shù)據(jù)作為下次更新可能瀏覽的數(shù)據(jù)讀入緩存池,置換上述方向側(cè)與當(dāng)前瀏 覽區(qū)域數(shù)據(jù)塊相隔一定步長的原有的相鄰數(shù)據(jù)塊,緩存池中其它的數(shù)據(jù)塊 保持不變。這里的相鄰數(shù)據(jù)塊是指同一方向側(cè)正向及兩個(gè)斜向的共三塊相 鄰區(qū)域的圖象數(shù)據(jù),而上述一定步長一般取為數(shù)據(jù)塊寬度的整數(shù)倍。由于 數(shù)據(jù)讀取的時(shí)間要大于數(shù)據(jù)顯示的時(shí)間,所以步長選的較長,可以防止可
能出現(xiàn)的數(shù)據(jù)等待;
第二,當(dāng)圖像的瀏覽方向發(fā)生改變,例如從橫向?yàn)g覽變成縱向?yàn)g覽時(shí), 為了減少數(shù)據(jù)傳輸?shù)呢?fù)擔(dān),只預(yù)測(cè)瀏覽方向側(cè)的部分?jǐn)?shù)據(jù),即空間上最相 鄰的三個(gè)數(shù)據(jù)塊,同時(shí)逐漸將緩存池形狀從長度大于寬度調(diào)整為寬度大于 長度;
第三,為了防止過多頻繁而無效的數(shù)據(jù)讀取操作,有效地利用緩存池 內(nèi)的數(shù)據(jù),設(shè)立了一個(gè)閾值,通常設(shè)為數(shù)據(jù)塊的長度或者寬度,只有當(dāng)圖 像瀏覽操作在某一方向上連續(xù)移動(dòng)的位移絕對(duì)值超過這個(gè)閾值,才進(jìn)行數(shù) 據(jù)塊的預(yù)測(cè)和置換更新工作。
針對(duì)下次操作可能瀏覽的數(shù)據(jù)的判斷在現(xiàn)有技術(shù)中多數(shù)都是根據(jù)數(shù) 據(jù)訪問的時(shí)間相關(guān)性和空間相關(guān)性,假定當(dāng)前訪問的數(shù)據(jù)在接下來幾次操 作中仍然可能會(huì)被訪問,利用存儲(chǔ)層次結(jié)構(gòu)和緩存機(jī)制,保存這些剛剛被 訪問的數(shù)據(jù)。然而,當(dāng)操作需要訪問新的數(shù)據(jù)塊,即前幾次操作中未使用 過的數(shù)據(jù)塊時(shí),就不得不從硬盤讀取,從而產(chǎn)生明顯的等待延遲,影響了 圖像瀏覽的實(shí)時(shí)性。
本發(fā)明方法中的當(dāng)前活躍的數(shù)據(jù)塊為當(dāng)前瀏覽區(qū)域以及與當(dāng)前瀏覽 區(qū)域相鄰的圖象數(shù)據(jù),這里所述的每一個(gè)相鄰區(qū)域的范圍大小與當(dāng)前瀏覽 區(qū)域的范圍大小相同,但作為優(yōu)選,由于在瀏覽者進(jìn)行圖像瀏覽時(shí),在某 一方向上的操作具有持續(xù)性的概率很大,也就是說,假如在對(duì)圖像進(jìn)行連 續(xù)橫向?yàn)g覽時(shí),很可能在接下來的若干步操作中仍然是橫向?yàn)g覽,很少會(huì) 出現(xiàn)一步橫向?yàn)g覽一步縱向?yàn)g覽的交叉操作。根據(jù)這一特點(diǎn),當(dāng)瀏覽者沿同一方向連續(xù)瀏覽時(shí),僅將當(dāng)前區(qū)域的在所述的同一方向側(cè)的相鄰區(qū)域的 數(shù)據(jù)作為下次操作可能瀏覽的數(shù)據(jù)讀入緩沖可以最大P艮度節(jié)省資源,增加
數(shù)據(jù)讀取和交換的速度,這里所述的沿同 一方向連續(xù)瀏覽中連續(xù)的次數(shù)可
以根據(jù)需要設(shè)定,例如沿同一方向連續(xù)3~5次選擇當(dāng)前圖象相鄰區(qū)域?yàn)g 覽時(shí),就可以以此為依據(jù)僅將當(dāng)前區(qū)域的在所述的同一方向側(cè)的相鄰區(qū)域 的數(shù)據(jù)作為下次操作可能瀏覽的數(shù)據(jù)讀入緩沖。
在向緩沖區(qū)讀入圖象數(shù)據(jù)的同時(shí),判斷出緩存池內(nèi)最不可能用到的數(shù) 據(jù),將其淘汰節(jié)省空間。
步驟(3)中
設(shè)立并行工作管道,利用CPU多核技術(shù)使多個(gè)線程并行地對(duì)圖象數(shù) 據(jù)進(jìn)行讀取和顯示,利用一個(gè)線程來顯示緩存池內(nèi)瀏覽者當(dāng)前正在瀏覽的 圖像區(qū)域,利用其余的多個(gè)線程將上述數(shù)據(jù)塊預(yù)測(cè)方法所預(yù)測(cè)出的數(shù)據(jù)塊 快速地讀取至緩存池內(nèi),同時(shí)使用CPU的SIMD指令進(jìn)一步加快數(shù)據(jù)的 讀取和顯示。所述的并行繪制管道是可擴(kuò)展的,不針對(duì)某個(gè)特定的處理核 數(shù)或者線程數(shù),只要發(fā)現(xiàn)存在可用的空閑線程,其都將會(huì)被加入到數(shù)據(jù)讀 取的線程組中。
本發(fā)明使用信號(hào)槽機(jī)制來保持此并行工作管道的高效性和可擴(kuò)展性。 當(dāng)需要進(jìn)行讀取操作時(shí),顯示操作線程將向讀取操作線程組發(fā)送一個(gè)執(zhí)行 信號(hào),讀取操作線程組收到這個(gè)信號(hào)后,組內(nèi)各個(gè)線程開始并行的讀取數(shù) 據(jù),當(dāng)某一線程完成其讀取任務(wù)后,它將查看執(zhí)行信號(hào)是否依然有效,如 果仍然有效,則此線程將繼續(xù)進(jìn)行新的數(shù)據(jù)讀取工作,從而保證所有線程 均一直處于工作狀態(tài)。當(dāng)所有的讀取任務(wù)執(zhí)行完畢后,執(zhí)行信號(hào)將會(huì)被設(shè) 置成無效狀態(tài)。另外,只要發(fā)現(xiàn)存在可用的空閑線程,其都將會(huì)被加入到 數(shù)據(jù)讀取的線程組中,從而保證了并行工作管道的可擴(kuò)展性,其不針對(duì)某 個(gè)特定的處理核數(shù)或者線程數(shù)。
基于預(yù)測(cè)的數(shù)據(jù)處理方法盡管可以有效的將瀏覽即將可能需要的數(shù) 據(jù)塊提前載入內(nèi)存,4旦卻需要在短時(shí)間內(nèi)進(jìn)行大量的硬盤讀取操作,這對(duì)于通常的單線程操作是一個(gè)巨大的挑戰(zhàn)。但是,隨著多核技術(shù)的出現(xiàn),程 序的并行執(zhí)行能力得到了革命性的增強(qiáng),這同時(shí)也讓數(shù)據(jù)的并行快速讀取
有了可能。我們采用CPU的多核技術(shù),同時(shí)使用了 SIMD(Single Instruction Multiple Data)技術(shù)來進(jìn)一步擴(kuò)大程序執(zhí)行的并行度。本發(fā)明所使用的并行 工作管道主要是并行的完成兩個(gè)任務(wù)圖像顯示和數(shù)據(jù)讀取。如果有n個(gè) 可以并行執(zhí)行的線程,只使其中的一個(gè)線程去處理圖像的顯示操作,而其 余n-l個(gè)線程均進(jìn)行數(shù)據(jù)的讀取操作。當(dāng)圖像瀏覽操作在某一方向上連續(xù) 移動(dòng)的位移超過某一閾值時(shí),進(jìn)行數(shù)據(jù)塊的預(yù)測(cè)和置換更新工作。顯示操 作線程將向讀取操作線程組發(fā)送一個(gè)執(zhí)行信號(hào),讀取操作線程組收到這個(gè) 信號(hào)后,組內(nèi)各個(gè)線程開始并行的讀取數(shù)據(jù),當(dāng)某一線程完成其讀取任務(wù) 后,它將查看執(zhí)行信號(hào)是否依然有效,如果仍然有效,則此線程將繼續(xù)進(jìn) 行新的數(shù)據(jù)讀取工作,從而保證所有線程均一直處于工作狀態(tài)。當(dāng)所有的 讀取任務(wù)執(zhí)行完畢后,執(zhí)行信號(hào)將會(huì)被設(shè)置成無效狀態(tài)。本發(fā)明的并行工 作管道是可擴(kuò)展的,它不針對(duì)某個(gè)特定的處理核數(shù)或者線程數(shù),只要發(fā)現(xiàn) 存在可用的空閑線程,其都將會(huì)被加入到數(shù)據(jù)讀取的線程組中。
在圖象瀏覽時(shí)需要對(duì)圖象放大或縮小
在圖像瀏覽過程中,對(duì)瀏覽區(qū)域進(jìn)行放大或者縮小是一種基本的操 作,尤其對(duì)高精度的大圖像來說, 一些細(xì)節(jié)信息必須要通過放大操作來觀 察。傳統(tǒng)的方法大多需要經(jīng)過預(yù)處理以對(duì)欲瀏覽圖像生成一系列不同分辨 率的圖片,這種方法顯然是耗時(shí)而且低效的。由于對(duì)圖像的放大縮小處理 都是對(duì)某一局部區(qū)域幾個(gè)像素的計(jì)算,與多數(shù)像素都是無關(guān)的,因此很適 合使用大量的線程進(jìn)行并行處理。
首先,根據(jù)瀏覽區(qū)域的圖像分辨率來自適應(yīng)的創(chuàng)建線程的數(shù)量;然后, 每個(gè)線程用來計(jì)算所顯示區(qū)域中的一個(gè)像素,這個(gè)像素是對(duì)原圖像中幾個(gè) 鄰近像素根據(jù)權(quán)值計(jì)算后的結(jié)果。
在進(jìn)行若干次圖像縮小操作之后, 一個(gè)線程要一次性處理大量的像 素,由于GPU的存儲(chǔ)能力十分有限,這種情況下不能把所有的像素?cái)?shù)據(jù)
10都導(dǎo)入到GPU中去。而且,隨著圖像的縮小,可以忽略一些細(xì)節(jié)信息的 現(xiàn)實(shí)。因此,這時(shí)只對(duì)一定間隔的像素進(jìn)行取樣,計(jì)算這些部分像素的權(quán) 值用來顯示。
本發(fā)明《吏用Nvidia公司推出的CUDA (Compute Unified Device Architecture)解決方案實(shí)時(shí)的對(duì)圖像進(jìn)行放大或者縮小。Nvidia公司的 GTX285圖形卡有240個(gè)處理器,高達(dá)141GB/S的吞吐能力,這為程序的 并行執(zhí)行提供了很好的支持。在CUDA架構(gòu)中,并行執(zhí)行的程序稱為核 (kernal),以網(wǎng)格(grid )的形式執(zhí)行, 一個(gè)網(wǎng)格中包含有大量的塊(block ), 大量的線程以塊作為組織單位,每個(gè)塊里包含有一定數(shù)量的線程,只有在 同 一個(gè)塊內(nèi)的線程才能進(jìn)行通信,不同的塊里的線程是無法直接進(jìn)行通信 的。塊里的線程以warp作為執(zhí)4亍單位,warp寬度為32,同一個(gè)warp內(nèi) 的線程執(zhí)行同一條指令,half-warp是存儲(chǔ)操作的基本單位。CUDA架構(gòu)提 供了容量較大的可供數(shù)據(jù)存儲(chǔ)的全局存儲(chǔ)區(qū)(global memory),但是在非 對(duì)齊模式下訪存花費(fèi)可高達(dá)500個(gè)時(shí)鐘周期;同時(shí)還有一種可供block內(nèi) 線程通訊和存儲(chǔ)使用的共享存儲(chǔ)區(qū)(shared memory),在不存在bank conflicts的情況下,訪存花費(fèi)僅為1個(gè)時(shí)鐘周期,但容量僅為16KB。很 明顯,對(duì)圖像進(jìn)行放大縮小操作將會(huì)有大量的訪存操作,如果使用全局存 儲(chǔ)區(qū)將會(huì)有明顯的延遲,但是共享存儲(chǔ)區(qū)的容量很小,也無法滿足我們對(duì) 圖像數(shù)據(jù)的存儲(chǔ)要求。因此,本發(fā)明選擇CUDA架構(gòu)提供的紋理單元作 為存儲(chǔ)載體,盡管紋理單元也屬于全局存儲(chǔ)區(qū)的一部分,4旦是它具有緩存 功能,對(duì)數(shù)據(jù)量較大時(shí)的隨機(jī)數(shù)據(jù)訪問或者非對(duì)齊訪問有良好的加速效 果。
首先,本發(fā)明根據(jù)瀏覽區(qū)域的圖像分辨率來自適應(yīng)的創(chuàng)建線程的數(shù) 量;然后,每個(gè)線程用來計(jì)算所生成圖片中的一個(gè)像素,這個(gè)像素是對(duì)原 圖像中幾個(gè)鄰近像素根據(jù)權(quán)值計(jì)算后的結(jié)果。隨著圖像的逐漸縮小,所采 樣的鄰近像素的間隔將會(huì)越來越大,意味著鄰近像素間所包含的像素越來 越多,由于GPU的存儲(chǔ)能力十分有限,這種情況下不能把所有的像素?cái)?shù) 據(jù)都導(dǎo)入到GPU中去。另一方面,根據(jù)測(cè)試,々支設(shè)幾個(gè)鄰近像素分別為
iiql,q2…qn,其權(quán)值分另'J為wl,w2…wn,令wl,…wn-l均為0, wn為I, 根據(jù)這樣的權(quán)值計(jì)算出來的結(jié)果盡管從圖像質(zhì)量上不如以前,但是從圖像 瀏覽的角度上看,是不影響其最終的觀看效果的。因此,可以根據(jù)放大或 者縮小的倍數(shù),當(dāng)達(dá)到一定倍數(shù)以后,根據(jù)一定的步長,將一些像素點(diǎn)權(quán) 值設(shè)置為1,另一些像素點(diǎn)權(quán)值設(shè)置為0,只導(dǎo)入權(quán)值為1的像素?cái)?shù)據(jù)進(jìn) 入GPU。需要注意的是,當(dāng)放大到一定倍數(shù)時(shí),圖像的瀏覽區(qū)域只是整幅 大圖像的一小塊區(qū)域,其數(shù)據(jù)量大小已經(jīng)滿足GPU的存儲(chǔ)要求,而這時(shí) 候圖像的細(xì)節(jié)信息對(duì)于瀏覽來說也是很必要的,所以這時(shí)可以向GPU導(dǎo) 入所有像素信息,以生成高質(zhì)量的圖片。
本發(fā)明方法可以使用GPU所提供的大量多線程并行運(yùn)算能力,實(shí)時(shí) 的對(duì)所瀏覽圖像進(jìn)行放大或縮小操作。另外本發(fā)明方法具有很好的穩(wěn)定 性, 一方面,不會(huì)因?yàn)榘l(fā)生數(shù)據(jù)等待而在某一時(shí)刻出現(xiàn)性能突降的情況, 另一方面,不受圖像大小的影響,對(duì)不同大小的圖片都取得了相近的性能; 同時(shí),對(duì)處理核的數(shù)量也表現(xiàn)了良好的可擴(kuò)展性。
盡管本發(fā)明方法主要針對(duì)大圖像數(shù)據(jù),但是也可以很容易拓展到其他 涉及到out-of-core數(shù)據(jù)的應(yīng)用中,比如在圖形繪制中,復(fù)雜模型常常具有 大量的點(diǎn)面數(shù)據(jù)和紋理數(shù)據(jù),并行工作管道和基于預(yù)測(cè)的數(shù)據(jù)管理方法可 以用到對(duì)這類問題的處理上。
圖la為本發(fā)明方法中緩沖池的結(jié)構(gòu)示意圖; 圖lb為圖la中橫向?yàn)g覽圖象時(shí)緩沖池內(nèi)數(shù)據(jù)的變化示意圖; 圖2為圖la中縱向?yàn)g覽圖象時(shí)未優(yōu)化前的緩沖池內(nèi)數(shù)據(jù)的示意圖; 圖3a為優(yōu)化后的緩沖池中以區(qū)域A為當(dāng)前瀏覽區(qū)域的示意圖; 圖3b為優(yōu)化后的緩沖池中以區(qū)域B為當(dāng)前瀏覽區(qū)域的示意圖; 圖3c為優(yōu)化后的緩沖池中以區(qū)域C為當(dāng)前瀏覽區(qū)域的示意圖; 圖3d為優(yōu)化后的緩沖池中以區(qū)域D為當(dāng)前瀏覽區(qū)域的示意圖; 圖4為優(yōu)化后的緩沖池中縱向?yàn)g覽過程的示意圖;圖5為并^f亍工作管道的工作原理示意圖。
具體實(shí)施例方式
本發(fā)明方法實(shí)施時(shí),首先設(shè)立了一個(gè)緩存池,用來存儲(chǔ)當(dāng)前活躍的數(shù) 據(jù)塊以及才艮據(jù)預(yù)測(cè)算法所預(yù)測(cè)出的即將可能訪問的數(shù)據(jù)塊,如圖la所示, 緩存池中包含有8*3個(gè)數(shù)據(jù)塊,初始狀態(tài)下,這24個(gè)數(shù)據(jù)塊對(duì)應(yīng)著需要 瀏覽的大圖像文件的一塊連續(xù)區(qū)域。根據(jù)圖像瀏覽的特點(diǎn),即在某一方向 上的操作具有持續(xù)性的概率很大,緩存池在設(shè)計(jì)時(shí)也充分考慮到了這一特 性。緩存池是一個(gè)長方形的二維結(jié)構(gòu),但是可以根據(jù)當(dāng)前圖像瀏覽的方向, 動(dòng)態(tài)的調(diào)整緩存池的長寬,也就是說,當(dāng)圖像〗坎橫向?yàn)g覽時(shí),我們的緩存 池的長度會(huì)大于寬度,而當(dāng)圖像做縱向?yàn)g覽時(shí),我們的緩存池的寬度則會(huì) 大于長度。當(dāng)然,緩存池的長寬變換并不是一步完成的,而是在并行工作 管道中,隨著圖#>瀏覽方向的變化,逐漸地分幾步操作完成的,漸進(jìn)式的 完成長寬變換。
根據(jù)上述數(shù)據(jù)塊預(yù)測(cè)和置換算法,即當(dāng)瀏覽者沿同 一方向連續(xù)更新當(dāng) 前瀏覽區(qū)域時(shí),僅將更新后的當(dāng)前瀏覽區(qū)域的在所述的同 一方向側(cè)的相隔 一定步長的相鄰區(qū)域的圖象數(shù)據(jù)作為下次更新可能瀏覽的數(shù)據(jù)讀入緩存 池,置換上述方向側(cè)與當(dāng)前瀏覽區(qū)域數(shù)據(jù)塊相隔一定步長的原有的相鄰數(shù) 據(jù)塊,緩存池中其它的數(shù)據(jù)塊保持不變。這里的相鄰數(shù)據(jù)塊是指同一方向 側(cè)正向及兩個(gè)斜向的共三塊相鄰區(qū)域的圖象數(shù)據(jù),而上述一定步長一般取 為數(shù)據(jù)塊寬度的整數(shù)倍。由于數(shù)據(jù)讀取的時(shí)間要大于數(shù)據(jù)顯示的時(shí)間,所 以步長選的較長,可以防止可能出現(xiàn)的數(shù)據(jù)等待,本實(shí)施例中暫時(shí)取步長 為數(shù)據(jù)塊寬度的3倍。
如圖la所示,假設(shè)是A圖像塊,與其相鄰的幾個(gè)瀏覽區(qū)域也已經(jīng)讀 到緩存池中了,那么隨著當(dāng)前瀏覽區(qū)域的更新,例如當(dāng)前的瀏覽方向是從 右向左橫向?yàn)g覽,對(duì)于數(shù)據(jù)塊A來說,除了數(shù)據(jù)塊E、 D、 F,其他所有 在緩存池中的數(shù)據(jù)塊都認(rèn)為是數(shù)據(jù)塊A鄰近范圍的圖象數(shù)據(jù),由于這些數(shù) 據(jù)已經(jīng)處于內(nèi)存中,而且大小均不超過cache的容量,使得訪問這些數(shù)據(jù) 13幾乎沒有延遲。由于緩存池的大小是不變的,隨著瀏覽操作的進(jìn)行,必須 要淘汰一些可能不再使用的數(shù)據(jù)而導(dǎo)入一些新的數(shù)據(jù)。目前,多數(shù)算法都 采用操作系統(tǒng)中虛擬內(nèi)存機(jī)制里一些頁面置換算法所采用的方法,比如
LRU、 FIFO等方法。本實(shí)施例中選擇數(shù)據(jù)塊E、 D、 F作為預(yù)淘汰的數(shù)據(jù) 塊,以便將來置換成根據(jù)瀏覽行進(jìn)方向所預(yù)測(cè)新的數(shù)據(jù)。
根據(jù)瀏覽方向的特點(diǎn),在進(jìn)行圖像瀏覽時(shí),在某一方向上的操作具有 持續(xù)性的概率很大,也就是說,假如在對(duì)圖像進(jìn)行橫向?yàn)g覽時(shí),很可能在 接下來的若干步操作中仍然是橫向?yàn)g覽,很少會(huì)出現(xiàn)一步橫向?yàn)g覽一步縱 向?yàn)g覽的交叉操作,例如以A區(qū)域?yàn)槠鹗嫉漠?dāng)前瀏覽區(qū)域,連續(xù)3次向左 瀏覽后當(dāng)前瀏覽區(qū)域?yàn)長區(qū)域(參見圖lb),接下來K、 M、 L相鄰的左 側(cè)區(qū)域(E、 D、 F區(qū)域)是即將最有可能被訪問的區(qū)域,于是將數(shù)據(jù)塊E 置換成在圖像文件中與數(shù)據(jù)塊K左相鄰的圖像數(shù)據(jù),數(shù)據(jù)塊D、 F也進(jìn)行 類似的處理。如圖lb所示。
預(yù)淘汰的數(shù)據(jù)塊也隨著當(dāng)前瀏覽區(qū)域的更新而變化,例如當(dāng)前瀏覽區(qū) 域?yàn)镚區(qū)域時(shí),所選的數(shù)據(jù)塊淘汰區(qū)域也相應(yīng)的按照同樣的方向行進(jìn)。數(shù) 據(jù)塊E、 D、 F已經(jīng)位于緩存池的最左端,因此轉(zhuǎn)到緩存池的最右端,將 數(shù)據(jù)塊H、 I、 J作為數(shù)據(jù)塊淘汰區(qū)域,同時(shí)導(dǎo)入所預(yù)測(cè)的數(shù)據(jù)。需要注意 的是,經(jīng)過預(yù)測(cè),數(shù)據(jù)塊H置換的是數(shù)據(jù)塊E在圖像文件中的相鄰左側(cè) 圖像塊,而數(shù)據(jù)塊N雖然在緩存池中是與數(shù)據(jù)塊H相鄰的,但是在圖像 文件中,它們卻是沒有任何相對(duì)位置關(guān)系的,類似的,數(shù)據(jù)塊I、 J也進(jìn)行 同樣的處理。
如圖2所示,當(dāng)圖像的瀏覽方向發(fā)生改變,即從橫向?yàn)g覽變成縱向?yàn)g 覽時(shí),例如當(dāng)前瀏覽區(qū)域從數(shù)據(jù)塊G移到數(shù)據(jù)塊O,而需要預(yù)測(cè)的區(qū)域則 大大增多,數(shù)據(jù)塊E應(yīng)置換成在圖像文件中數(shù)據(jù)塊F下方的數(shù)據(jù),數(shù)據(jù)塊 K、 R、 S、 B、 T、 N、 H也要做相應(yīng)的更新。盡管采用了漸進(jìn)式更新,甚 至是隨著瀏覽的進(jìn)行,舍棄一些數(shù)據(jù)塊的更新,但是經(jīng)過測(cè)試發(fā)現(xiàn)這種方 法仍然會(huì)給傳輸帶來了很大的負(fù)擔(dān),因此本發(fā)明將在滿足使用的前提下盡 量使所預(yù)測(cè)的數(shù)據(jù)量達(dá)到最小。根據(jù)實(shí)驗(yàn),將當(dāng)前瀏覽數(shù)據(jù)塊與同 一方向側(cè)更新區(qū)域數(shù)據(jù)塊的間隔步 長設(shè)為零時(shí),很少出現(xiàn)數(shù)據(jù)等待的情況,因此,為了減少數(shù)據(jù)的傳輸量,
將步長設(shè)為零。如圖3a所示,針對(duì)圖2中的情況進(jìn)一步優(yōu)化了緩存池, 圖3a至圖3d給出了從數(shù)據(jù)塊A->B->D->C的圖像瀏覽過程。將緩存池的 大小調(diào)整為4*3個(gè)數(shù)據(jù)塊,當(dāng)前瀏覽區(qū)域?yàn)閿?shù)據(jù)塊A,瀏覽方向是橫向向 左,根據(jù)本發(fā)明提出的預(yù)測(cè)算法,即將可能瀏覽的圖像區(qū)域是數(shù)據(jù)塊A在 原圖像區(qū)域上相鄰的同向及斜向三個(gè)數(shù)據(jù)塊,這樣并行工作管道開始并行 的將所預(yù)測(cè)的這三個(gè)數(shù)據(jù)塊讀取進(jìn)緩存池,置換數(shù)據(jù)塊A相鄰的三個(gè)數(shù)據(jù) 塊E、 B、 I中原有的數(shù)據(jù),完成數(shù)據(jù)的更新;同樣的,瀏覽操作繼續(xù)橫向 向左操作時(shí),這時(shí)當(dāng)前瀏覽區(qū)域是數(shù)據(jù)塊B,用同樣的預(yù)測(cè)方法將新數(shù)據(jù) 讀進(jìn)緩存池中的數(shù)據(jù)塊H、 D、 L位置處,更新后的緩存池中,數(shù)據(jù)塊B 和數(shù)據(jù)塊D中所包含的數(shù)據(jù)實(shí)際上在原圖像區(qū)域中是位置上橫向相鄰的; 當(dāng)瀏覽操作繼續(xù)4黃向向左操作,當(dāng)前瀏覽區(qū)域變?yōu)閿?shù)據(jù)塊D,與此同時(shí), 更新數(shù)據(jù)塊G、 C、 K里的數(shù)據(jù);繼續(xù)橫向向左操作,當(dāng)前瀏覽區(qū)域變?yōu)?數(shù)據(jù)塊C,而并行工作管道開始并行的更新數(shù)據(jù)塊F、 A、 J里的內(nèi)容。
與圖la所示的緩存池不同的是,優(yōu)化過后的緩存池中并不都是有效 的數(shù)據(jù)塊,如圖3a中的數(shù)據(jù)塊H、 D、 L。
如圖4所示,當(dāng)圖像瀏覽區(qū)域由數(shù)據(jù)塊A移到數(shù)據(jù)塊J時(shí),只更新數(shù) 據(jù)塊E、 F、 G,而^:據(jù)塊H、 D、 L并不作處理。
這里所說的無效數(shù)據(jù)塊,只是不再進(jìn)行數(shù)據(jù)的更新,但是由于里面仍 然存有以前曾經(jīng)瀏覽過的圖像數(shù)據(jù),因此仍起到了數(shù)椐緩存的作用。通過 進(jìn)行這樣的優(yōu)化,大大減少了數(shù)據(jù)的量,節(jié)省了傳輸時(shí)間。為了防止過多 頻繁而無效的數(shù)據(jù)讀取操作,需要設(shè)立了個(gè)閾值,通常設(shè)為數(shù)據(jù)塊的長度 或者寬度,只有當(dāng)圖像瀏覽操作在某一方向上連續(xù)移動(dòng)的位移絕對(duì)值超過 這個(gè)閾值,才進(jìn)行數(shù)據(jù)塊的預(yù)測(cè)和置換更新工作。
并行工作管道主要是并行的完成兩個(gè)任務(wù)圖像顯示和數(shù)據(jù)讀取。如
果有n個(gè)可以并行執(zhí)行的線程,我們只使其中的一個(gè)線程去處理圖像的顯 示操作,而其余n-l個(gè)線程均進(jìn)行數(shù)據(jù)的讀取操作。如圖5所示,顯示操
15作與讀取操作并行執(zhí)行,盡管顯示操作的執(zhí)行時(shí)間要少于讀取操作的執(zhí)行 時(shí)間,但是前面已經(jīng)說過,只有當(dāng)圖像瀏覽操作在某一方向上連續(xù)移動(dòng)的 位移超過某一閾值時(shí),才進(jìn)行數(shù)據(jù)塊的預(yù)測(cè)和置換更新工作,也就是說, 顯示操作的執(zhí)行次數(shù)要多于讀取操作的執(zhí)行次數(shù),這樣就平衡了兩種操作 的速度差異,避免了顯示操作因數(shù)據(jù)等待而可能出現(xiàn)的停滯。當(dāng)需要進(jìn)行 讀取操作時(shí),即達(dá)到閾值要求時(shí),顯示操作線程將向讀取操作線程組發(fā)送 一個(gè)執(zhí)行信號(hào),讀取操作線程組收到這個(gè)信號(hào)后,組內(nèi)各個(gè)線程開始并行 的讀取數(shù)據(jù),當(dāng)某一線程完成其讀取任務(wù)后,它將查看執(zhí)行信號(hào)是否依然 有效,如果仍然有效,則此線程將繼續(xù)進(jìn)行新的數(shù)據(jù)讀取工作,從而保證 所有線程均一直處于工作狀態(tài)。當(dāng)所有的讀取任務(wù)執(zhí)行完畢后,執(zhí)行信號(hào) 將會(huì)被設(shè)置成無效狀態(tài)。并行工作管道是可擴(kuò)展的,它不針對(duì)某個(gè)特定的 處理核數(shù)或者線程數(shù),只要發(fā)現(xiàn)存在可用的空閑線程,其都將會(huì)被加入到 數(shù)據(jù)讀取的線程組中。
在對(duì)圖像進(jìn)行放大縮小的操作時(shí),選擇CUDA架構(gòu)提供的紋理單元 作為圖像存儲(chǔ)的載體,盡管紋理單元也屬于全局存儲(chǔ)區(qū)的一部分,但是它 具有緩存功能,對(duì)數(shù)據(jù)量較大時(shí)的隨機(jī)數(shù)據(jù)訪問或者非對(duì)齊訪問有良好的 加速效果。
以縮小操作為例,根據(jù)瀏覽區(qū)域的圖像分辨率來決定創(chuàng)建線程的數(shù) 量,例如如果分辨率是1024*768,則創(chuàng)建1024*768個(gè)線程,每個(gè)線程用 來計(jì)算所生成圖片中的一個(gè)像素,這個(gè)像素是對(duì)原圖像中幾個(gè)鄰近像素根 據(jù)權(quán)值計(jì)算后的結(jié)果。隨著圖像的逐漸縮小,所采樣的鄰近像素的間隔將 會(huì)越來越大,意味著鄰近像素間所包含的像素越來越多,由于GPU的存 儲(chǔ)能力十分有限,這種情況下不能把所有的像素?cái)?shù)據(jù)都導(dǎo)入到GPU中去。 另一方面,根據(jù)測(cè)試,假設(shè)幾個(gè)鄰近像素分別為ql,q2…qn,其權(quán)值分別 為wl,w2…wn,令wl,...wn-l均為0, wn為1,根據(jù)這樣的權(quán)值計(jì)算出來
的結(jié)果盡管從圖像質(zhì)量上不如以前,但是從圖像瀏覽的角度上看,是不影 響其最終的觀看效果的。因此,可以根據(jù)放大或者縮小的倍數(shù),當(dāng)達(dá)到一
定倍數(shù)以后,根據(jù)一定的步長,將一些像素點(diǎn)權(quán)值設(shè)置為1,另一些像素點(diǎn)權(quán)值設(shè)置為O,只導(dǎo)入權(quán)值為1的像素?cái)?shù)據(jù)進(jìn)入GPU。需要注意的是, 當(dāng)放大到一定倍數(shù)時(shí),圖像的瀏覽區(qū)域只是整幅大圖像的一小塊區(qū)域,其 數(shù)據(jù)量大小已經(jīng)滿足GPU的存儲(chǔ)要求,而這時(shí)候圖像的細(xì)節(jié)信息對(duì)于瀏 覽來說也是很必要的,所以這時(shí)可以向GPU導(dǎo)入所有像素信息,以生成 高質(zhì)量的圖片。
在處理各種圖片的過程中,也遇到了 一些每個(gè)像素只占三個(gè)字節(jié)的圖 片,即只有R、 G、 B三個(gè)分量,這種存儲(chǔ)方式對(duì)于紋理單元的訪問是很 不友好的,因?yàn)樗鼤?huì)導(dǎo)致非合并訪問(uncoalesced access)的訪存行為, 使執(zhí)行效率P爭低。在這種情況下,以4個(gè)像素為一組,4姿組訪問,然后將 其放入共享存儲(chǔ)區(qū)中,再按照上面所講的方法進(jìn)行再處理。需要注意的是, 這種方式下訪問的順序^艮重要,同一個(gè)half-warp內(nèi)的線程的訪存地址一 定要連續(xù),以達(dá)到從紋理單元到共享存儲(chǔ)區(qū)的合并訪問(coalesced access )。
不需要進(jìn)行耗時(shí)的預(yù)處理操作,只有在對(duì)GPU設(shè)置工作環(huán)境時(shí)需要 大約172ms左右的時(shí)間,而這樣短的時(shí)間是可以忽略不計(jì)的;在對(duì)圖像進(jìn) 行縮小操作時(shí),在某些時(shí)刻所需時(shí)間會(huì)有一些波動(dòng),產(chǎn)生這些波動(dòng)的原因 是由于當(dāng)圖像瀏覽縮小到 一定倍數(shù)時(shí),不會(huì)把所有的圖像數(shù)據(jù)都導(dǎo)入到 GPU,而是根據(jù)取樣要求選擇一部分?jǐn)?shù)據(jù)導(dǎo)入GPU,而對(duì)這些數(shù)據(jù)的選擇 過程會(huì)增加一些尋址花費(fèi),也可能會(huì)產(chǎn)生訪存沖突,因此增加了生成圖片 的時(shí)間。在進(jìn)行圖像瀏覽操作時(shí),所產(chǎn)生的延遲時(shí)間則一直比較平穩(wěn),沒 有大的抖動(dòng),在某些時(shí)刻,會(huì)有一些比較小的抖動(dòng),這是由于圖像瀏覽的 行進(jìn)方向突然發(fā)生改變,使在并行工作管道里的數(shù)據(jù)傳輸量突然增多,而 且緩存池結(jié)構(gòu)也要進(jìn)行一些動(dòng)態(tài)的調(diào)整。并行工作管道是可擴(kuò)展的,在一 定范圍內(nèi),隨著處理核數(shù)目的增多,完成一次瀏覽行進(jìn)操作平均所需要的 時(shí)間逐漸減少,但是由于目前的硬盤的讀寫速率僅為35M/S左右,帶寬也 僅為100M/S左右,因此當(dāng)處理核增加到一定數(shù)量時(shí),必然會(huì)出現(xiàn)數(shù)據(jù)讀 取的瓶頸,因此當(dāng)處理核數(shù)量增加到32時(shí),所獲得的效果并不理想。
1權(quán)利要求
1、一種基于多核架構(gòu)的大圖像實(shí)時(shí)瀏覽方法,其特征在于,包括如下步驟(1)使用內(nèi)存映射技術(shù),將所述的大圖像中指定部位的圖象數(shù)據(jù)讀取至緩存池;讀取指定部位的圖象數(shù)據(jù)時(shí)是分若干數(shù)據(jù)塊讀入的,每個(gè)數(shù)據(jù)塊對(duì)應(yīng)的一個(gè)圖象區(qū)域,每個(gè)圖象區(qū)域大小相同且均為矩形;(2)根據(jù)瀏覽者的指定,將緩存池內(nèi)的對(duì)應(yīng)的數(shù)據(jù)塊以圖象形式進(jìn)行顯示,所顯示的圖象區(qū)域即為當(dāng)前瀏覽區(qū)域,當(dāng)瀏覽者選擇當(dāng)前瀏覽區(qū)域相鄰的圖象區(qū)域進(jìn)行瀏覽時(shí),緩存池內(nèi)的圖象數(shù)據(jù)按如下方法讀取和更新a)設(shè)定位移閾值,若更新后的當(dāng)前瀏覽區(qū)域在大圖像中沿同一方向連續(xù)移動(dòng)的位移絕對(duì)值未達(dá)到位移閾值時(shí),緩存池內(nèi)的圖象數(shù)據(jù)不做更新;b)當(dāng)更新后的當(dāng)前瀏覽區(qū)域在大圖像中沿同一方向連續(xù)移動(dòng)的位移絕對(duì)值達(dá)到位移閾值時(shí),僅將更新后的當(dāng)前瀏覽區(qū)域的在所述的同一方向側(cè)的鄰近范圍的圖象數(shù)據(jù)作為下次更新可能瀏覽的數(shù)據(jù)讀入緩存池;c)當(dāng)瀏覽方向發(fā)生改變時(shí),僅將改變?yōu)g覽方向后的當(dāng)前瀏覽區(qū)域在改變后方向上直接相鄰的正向及兩個(gè)斜向共三個(gè)圖像區(qū)域的圖像數(shù)據(jù)作為下次更新可能瀏覽的數(shù)據(jù)讀入緩存池;所述的步驟(1)、步驟(2)中,在顯示當(dāng)前瀏覽區(qū)域的圖像數(shù)據(jù)以及向緩存池內(nèi)讀取圖象數(shù)據(jù)時(shí)通過設(shè)立并行工作管道,利用CPU多核技術(shù)使多個(gè)線程并行地處理;利用一個(gè)線程來顯示當(dāng)前瀏覽區(qū)域的圖像數(shù)據(jù),利用其余的線程向緩存池內(nèi)讀取圖象數(shù)據(jù)。
2、 如權(quán)利要求1所述的大圖像實(shí)時(shí)瀏覽方法,其特征在于步驟(1)中每個(gè)數(shù)據(jù)塊大小不超過cache的容量,每個(gè)數(shù)據(jù)塊對(duì)應(yīng)的圖象區(qū)域?yàn)檎叫?,每個(gè)數(shù)據(jù)塊的尺寸均為2的冪次方。
3、 如權(quán)利要求1所述的大圖像實(shí)時(shí)瀏覽方法,其特征在于步驟(2)的操作a)中,將下次更新可能瀏覽的數(shù)據(jù)讀入緩存池時(shí),將與當(dāng)前瀏覽區(qū)域在所述的同一方向側(cè)相隔預(yù)定步長的圖象區(qū)域中的圖象數(shù)據(jù)淘汰。
4、 如權(quán)利要求1所述的大圖像實(shí)時(shí)瀏覽方法,其特征在于步驟(2)的操作a)中,所述的鄰近范圍的圖象數(shù)據(jù)是指當(dāng)前瀏覽區(qū)域同一方向側(cè)正向及兩個(gè)斜向的共三部分圖象數(shù)據(jù),而每部分的圖象數(shù)據(jù)包含一個(gè)數(shù)據(jù)塊的圖象數(shù)據(jù)或是包含連續(xù)的多個(gè)數(shù)據(jù)塊的圖象數(shù)據(jù)。
5、 如權(quán)利要求1所述的大圖像實(shí)時(shí)瀏覽方法,其特征在于利用GPU多核技術(shù)使用多線程并行地對(duì)所當(dāng)前瀏覽區(qū)域的圖像進(jìn)行放大或者縮小操作。
全文摘要
本發(fā)明公開了一種基于多核架構(gòu)的大圖像實(shí)時(shí)瀏覽方法,包括如下步驟(1)使用內(nèi)存映射技術(shù),將所述的大圖像中指定部位的圖象數(shù)據(jù)讀取至緩存池;(2)根據(jù)瀏覽者的指定,將緩存池內(nèi)的對(duì)應(yīng)的數(shù)據(jù)塊以圖象形式進(jìn)行顯示,所顯示的圖象區(qū)域即為當(dāng)前瀏覽區(qū)域,當(dāng)瀏覽者選擇當(dāng)前瀏覽區(qū)域相鄰的圖象區(qū)域進(jìn)行瀏覽時(shí),對(duì)緩存池內(nèi)的圖象數(shù)據(jù)進(jìn)行讀取和更新,步驟(1)、步驟(2)中,在顯示當(dāng)前瀏覽區(qū)域的圖像數(shù)據(jù)以及向緩存池內(nèi)讀取圖象數(shù)據(jù)時(shí)通過設(shè)立并行工作管道,利用CPU多核技術(shù)使多個(gè)線程并行地處理。本發(fā)明大圖像實(shí)時(shí)瀏覽方法,采用并行工作管道和基于預(yù)測(cè)的數(shù)據(jù)處理技術(shù),不需要任何預(yù)處理操作,大大提高了瀏覽的效率。
文檔編號(hào)G06T1/00GK101650820SQ20091015297
公開日2010年2月17日 申請(qǐng)日期2009年9月24日 優(yōu)先權(quán)日2009年9月24日
發(fā)明者唐大偉, 鑫 楊, 許端清, 磊 趙 申請(qǐng)人:浙江大學(xué)