專利名稱:一種光線投射多核并行體繪制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種科學(xué)計(jì)算可視化處理方法,尤其涉及的是一種基于CellB.E.體系架構(gòu)的光線投射并行體繪制方法改進(jìn)。
背景技術(shù):
以體繪制技術(shù)為代表的科學(xué)可視化技術(shù)把抽象的數(shù)據(jù)變換成易于被人接受和理解的直觀形式一一圖形,為理解、發(fā)現(xiàn)科學(xué)計(jì)算過(guò)程中的各種現(xiàn)象、規(guī)律提供了有力工具。科學(xué)計(jì)算可視化的應(yīng)用領(lǐng)域十分廣泛,幾乎涉及一切自然學(xué)科和工程領(lǐng)域,其主要應(yīng)用領(lǐng)域有醫(yī)學(xué)、分子模型構(gòu)造、工業(yè)無(wú)損探傷、考古學(xué)、地質(zhì)勘探、氣象學(xué)、計(jì)算流體力學(xué)和有限元分析等。
此外,科學(xué)計(jì)算可視化還可應(yīng)用于空間探測(cè)、天體物理、數(shù)學(xué)領(lǐng)域等領(lǐng)域。體繪制技術(shù)能產(chǎn)生三維數(shù)據(jù)場(chǎng)的整體圖像,包含數(shù)據(jù)場(chǎng)的大量細(xì)節(jié),
繪制高質(zhì)量的圖像;但它涉及的數(shù)據(jù)量較多,計(jì)算量較大,因而繪制時(shí)間較長(zhǎng)。隨著應(yīng)用領(lǐng)域的發(fā)展,在數(shù)據(jù)規(guī)模急劇擴(kuò)大,繪制精度急劇增加的情況下,如何滿足研究者對(duì)繪制速度的需求已經(jīng)成為亟需解決的問(wèn)題。
相對(duì)于足跡算法、體元投影算法等其他體繪制算法而言,光線投射體繪制方法能繪制出具有更高質(zhì)量、體現(xiàn)更多內(nèi)部細(xì)節(jié)的圖像,是最基本、最常用的體繪制算法。其基本原理是根據(jù)視覺(jué)成像原理,構(gòu)造出理想化的物理視覺(jué)模型,即將每個(gè)體素都看成為能夠透射、發(fā)射和反射光線的粒子,然后根據(jù)光照模型或明暗模型,依據(jù)體素的介質(zhì)特性得到它們的顏色和不透明度,并沿著視線觀察方向積分,最后在屏幕圖像平面上形成具有半透明效果的圖像。由于繪制速度的原因,對(duì)于大部分使用者,光線投射體繪制方法被局限于處理較小規(guī)^莫的數(shù)據(jù)集。
光線投射體繪制方法的繪制處理非常耗時(shí),主要有以下兩個(gè)原因。一是,光線投射體繪制方法需要對(duì)屏幕上的每一個(gè)像素進(jìn)行繪制計(jì)算,
每個(gè)像素的繪制計(jì)算包括采樣、插值、明暗計(jì)算和顏色合成等費(fèi)時(shí)計(jì)算;當(dāng)觀察方向發(fā)生變化時(shí),數(shù)據(jù)場(chǎng)中的采樣點(diǎn)之間的前后關(guān)系也發(fā)生變化,屏幕上的全部像素都要進(jìn)行重新繪制,因此計(jì)算量極為龐大。
二是,光線投射體繪制方法在對(duì)體數(shù)據(jù)進(jìn)行繪制時(shí),需要從不同的械角對(duì)體數(shù)據(jù)進(jìn)行繪制,沿著不同方向的視線進(jìn)行光線投射、采樣、插值等;在對(duì)采樣點(diǎn)進(jìn)行三次線性插值時(shí),需要讀取不連續(xù)的體元數(shù)據(jù),因此就整體而言,對(duì)體元數(shù)據(jù)的讀取是沒(méi)有固定規(guī)律的,由于大量不規(guī)則訪存的存在,導(dǎo)致訪存缺少明顯的局部性,在普通平臺(tái)上運(yùn)行時(shí)Cache、 TLB等命中率極低,從而導(dǎo)致訪存效率低下,最終導(dǎo)致整體性能不高。
光線投射體繪制方法擁有計(jì)算量巨大和訪存不規(guī)則等顯著特點(diǎn),在普通平臺(tái)上無(wú)法滿足醫(yī)療、工業(yè)等交互式應(yīng)用的速度需求。同時(shí),專用圖形工作站等平臺(tái)具有價(jià)格昂貴等劣勢(shì)而無(wú)法普及使用,而隨著Xeon、 Opetron、Cell BE等多核處理器成為 一種發(fā)展趨勢(shì),充分利用多核處理器的強(qiáng)大計(jì)算能力以滿足應(yīng)用的需求,成為體繪制技術(shù)發(fā)展和推廣的一個(gè)機(jī)會(huì)。
IBM、 Sony和Toshiba聯(lián)合開(kāi)發(fā)的Cell Broadband Engine ( Cell B.E.)處理器是異構(gòu)多核處理器中的典型代表。Cell B.E.處理器包括一個(gè)基于PowerPC架構(gòu)的控制處理單元(Power Processing Element, PPE),八個(gè)基于SIMD結(jié)構(gòu)的協(xié)處理器單元(Synergistic Processing Elements, SPE),以及用于連接PPE、 SPE和輸入喻出單元的高速環(huán)形數(shù)據(jù)總線(Element InterconnectBus, EIB)。 PPE和SPE均為RISC結(jié)構(gòu),指令字長(zhǎng)為32位,尋址空間為64位。CellB.E.處理器的邏輯結(jié)構(gòu)圖如圖1所示。PPE是一個(gè)簡(jiǎn)化的64位Power結(jié)構(gòu)處理器,PPE主要負(fù)責(zé)操作系統(tǒng)的運(yùn)行和程序的控制,包括對(duì)SPE線程的管理。SPE是一個(gè)獨(dú)特的雙發(fā)射向量處理器,它擁有128位向量處理單元(SPU),包含128個(gè)128位寄存器,有256KB的本地存儲(chǔ)器(Local Store, LS ),以及負(fù)責(zé)LS和主存之間DMA數(shù)據(jù)傳輸?shù)拇鎯?chǔ)控制器(Memory Flow Control, MFC) , SPE的邏輯結(jié)構(gòu)圖如圖2所示。
與Intel Xeon、 AMD Opetron等同構(gòu)多核處理器相比,CellB.E.處理器有著獨(dú)特的異構(gòu)體系結(jié)構(gòu)、強(qiáng)大的計(jì)算能力和高速的內(nèi)部通信網(wǎng)絡(luò)。CellB.E處理器的異構(gòu)多核架構(gòu)和強(qiáng)大計(jì)算能力在一定程度上能滿足體繪制技術(shù)的計(jì)算量需求。其高速通信功能和獨(dú)特的訪存方式,結(jié)合軟件Cache、預(yù)取、滲透和多緩沖區(qū)等軟件技術(shù),為解決訪存問(wèn)題提供了契機(jī)。
然而算法層次的設(shè)計(jì)和實(shí)現(xiàn)并不能充分挖掘Cell B.E.系統(tǒng)的性能,還需要結(jié)合Cell B.E.的異構(gòu)多核結(jié)構(gòu)、計(jì)算機(jī)制、訪存機(jī)制和通信機(jī)制等系統(tǒng)層次的特征等,對(duì)光線投射并行體繪制算法進(jìn)行優(yōu)化。SPE的本地存儲(chǔ)器容量的限制、DMA數(shù)據(jù)傳輸?shù)南拗?、PPE、 SPE之間同步和通信等也給光線投射體繪制方法帶來(lái)的新的挑戰(zhàn)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種光線投射多核并行體繪制方法,結(jié)合CellB.E.的異構(gòu)多核結(jié)構(gòu)、計(jì)算機(jī)制、訪存機(jī)制和通信機(jī)制等系統(tǒng)層次的特征,用以提高系統(tǒng)處理的效率和速度。
本發(fā)明的技術(shù)方案包括
一種光線投射多核并行體繪制方法,其基于Cell B.E.體系架構(gòu)包括以下步驟
A、 控制處理單元(PPE)讀取三維體數(shù)據(jù),進(jìn)行預(yù)處理,并設(shè)置三位場(chǎng)景和繪制屬性;
B、 控制處理單元(PPE)把屏幕圖像空間按"連續(xù)行"進(jìn)行任務(wù)劃分,靜態(tài)創(chuàng)建協(xié)處理器單元(SPE)進(jìn)程;
C、 協(xié)處理器單元(SPE)對(duì)分配到的任務(wù)屏幕空間上每個(gè)象素點(diǎn)進(jìn)行繪制,主要過(guò)程依次為相交測(cè)試、坐標(biāo)變換、數(shù)據(jù)讀取、數(shù)據(jù)插值、數(shù)值映射、明暗計(jì)算、顏色合成,并將繪制結(jié)果發(fā)送給控制處理單元(PPE);
D、控制處理單元(PPE)對(duì)顯示繪制結(jié)果圖像。
所述的方法,其中,所述步驟A還包括
所述控制處理單元(PPE)通過(guò)預(yù)先把一個(gè)包含所有物體模型的包圍盒向屏幕圖像空間投影,屏幕圖像空間上投影以外的部分則不進(jìn)行光線的投射,直接呈現(xiàn)出背景的顏色。
所述的方法,其中,所述步驟C還包括對(duì)相交測(cè)試中最費(fèi)時(shí)的外積計(jì)算的向量化,具體包括步驟如下
51、 把三維向量放入四維的單浮點(diǎn)向量,設(shè)為V1和V2;
52、 把VI和V2的第一個(gè)元素復(fù)制到第四個(gè)元素中,得到新的向量Vl,和V2,;
53、 對(duì)Vl,和V2,向左循環(huán)移動(dòng)一個(gè)元素,得到新的V1'和V2,;
54、 VI與V2'、 Vl,與V2分別相乘得到Vl"和V2";
55、 Vl"與V2"相減得到新的向量Vr';
56、 利用洗牌函數(shù)對(duì)Vr,重新排位,得到最終的結(jié)果Vr。所述的方法,其中,所述步驟C還包括齊次坐標(biāo)變換的向量化過(guò)程,
具體包括步驟如下
511、 把齊次坐標(biāo)值和矩陣的各行分別初始化單浮點(diǎn)向量Va、 Vrl、 Vr2、Vr3和Vr4;
512、 Vrl和Vr3分別與Va相乘得到新的向量Vrl,和Vr3,,被分為第一組;Vr2和Vr4分別與Va相乘得到新的向量Vr2,和Vr4,,被分為第二組;
513、 利用兩個(gè)洗牌函數(shù)分別對(duì)兩組的元素重新選擇和排位,分別得到Vrl"和Vr3"、 Vr2"和Vr4";
514、 Vrl"與Vr3"、 Vr2"與Vr4"分別相加,得到Vrl和Vr2;
515、 對(duì)Vrl和Vr2進(jìn)行如步驟S13的洗牌操作,得到新的向量Vrl,
8和Vr2,;
S16、 Vrl'與Vr2,相加,即得到最終的結(jié)果Vr。
所述的方法,其中,所述步驟C還包括顏色合成的向量化過(guò)程與明暗計(jì)算的向量化過(guò)程。
所述的方法,其中,所述步驟C還包括在協(xié)處理器單元SPE中使用軟件來(lái)實(shí)現(xiàn)分支預(yù)測(cè)來(lái)減少指令流水的停頓。
所述的方法,其中,所述步驟C還包括將向量操作、坐標(biāo)變換、明暗計(jì)算、顏色合成以及數(shù)據(jù)讀取之前的位置判斷等函數(shù)聲明為內(nèi)聯(lián)函數(shù)以清除函數(shù)調(diào)用時(shí)的分支。
所述的方法,其中,所述步驟C還包括使用滲透^t術(shù),所述處理器利用多線程或者異步傳輸提前讀取計(jì)算所需的代碼或數(shù)據(jù)到特定位置,來(lái)創(chuàng)建即時(shí)局部性或即時(shí)并行性。
所述的方法,其中,所述步驟C還包括
對(duì)于單個(gè)像素值處理,積累成一個(gè)任務(wù)塊或任務(wù)行來(lái)一次性寫(xiě)出,以減少DMA傳輸?shù)膯?dòng)次數(shù)。
所述的方法,其中,所述步驟D還包括
其圖片數(shù)據(jù)的存儲(chǔ)格式為RGBA,以便進(jìn)行16Byte的整塊寫(xiě)出。本發(fā)明所提供的一種基于Cell B.E.的光線投射并行體繪制方法,由于采用了控制處理單元PPE和協(xié)處理器單元SPE任務(wù)劃分方式的改進(jìn),以及協(xié)處理器單元SPE程序的性能優(yōu)化具體包括通過(guò)對(duì)協(xié)處理器單元SPE繪制流程中的相交測(cè)試、坐標(biāo)變換、明暗計(jì)算和顏色合成等最主要的任務(wù)進(jìn)行SIMD化的操作,并通過(guò)軟件實(shí)現(xiàn)了分支預(yù)測(cè)、內(nèi)聯(lián)函數(shù)等分支停頓消除技術(shù),來(lái)解決光線投射法中的大量密集計(jì)算問(wèn)題。利用"滲透"技術(shù)來(lái)對(duì)SPE程序進(jìn)行訪存優(yōu)化,利用異步DMA提前讀取計(jì)算所需的代碼或數(shù)據(jù),能夠隱藏存儲(chǔ)訪問(wèn)的延遲,有效地解決光線投射法中不規(guī)則訪存問(wèn)題。因此能夠大量提高程序的性能。
圖1為現(xiàn)有技術(shù)的CellB.E.處理器的邏輯結(jié)構(gòu)圖2為現(xiàn)有技術(shù)的SPE的邏輯結(jié)構(gòu)圖3為現(xiàn)有技術(shù)的光線投射體繪制方法流程圖4為現(xiàn)有技術(shù)的光線投射示意圖5為本發(fā)明方法中PPE和SPE之間的任務(wù)分配示意圖6a和圖6b分別為現(xiàn)有技術(shù)的任務(wù)塊和本發(fā)明方法中連續(xù)行任務(wù)分
配策略示意圖,其中圖6a為任務(wù)塊分配策略的示意圖,圖6b為連續(xù)行分
配策略的示意圖7為本發(fā)明方法中的SPE程序中計(jì)算和訪存時(shí)間分布效果圖8為本發(fā)明方法中外積向量化處理過(guò)程的示意圖9為本發(fā)明方法中坐標(biāo)變換向量化處理過(guò)程的示意圖IO是本發(fā)明方法中明暗計(jì)算向量化處理過(guò)程的示意圖lla和圖llb分別為本發(fā)明視角、視線方向、插值引起不規(guī)則訪存優(yōu)
化處理的示意圖,其中圖lla為投射方向根據(jù)視線、視角不同示意圖;圖12是本發(fā)明方法中SPE程序上的"滲透"技術(shù)過(guò)程的示意圖;圖13a和圖13b為本發(fā)明方法CT—BostonTeapot的繪制效果圖;圖13c和圖13d給出了本發(fā)明方法CT—Bone—1—250的繪制效果圖;圖14為本發(fā)明方法中SPE線程動(dòng)態(tài)創(chuàng)建策略和靜態(tài)創(chuàng)建策略的性能對(duì)
比圖15為本發(fā)明方法中SPE之間"連續(xù)行"和"任務(wù)塊"任務(wù)分配方式的性能對(duì)比圖16a為本發(fā)明方法中SPE程序的SIMD的性能示意圖16b為本發(fā)明方法中SPE程序的分支停頓消除技術(shù)性能示意圖16c為本發(fā)明方法中SPE程序的計(jì)算優(yōu)化性能示意圖17為本發(fā)明方法中SPE程序的訪存優(yōu)化性能示意圖之一;圖18為本發(fā)明方法中SPE程序的訪存優(yōu)化性能示意圖之二;
圖19為本發(fā)明方法中SPE程序的整體性能對(duì)比圖20為本發(fā)明方法在不同條件包括PC, SMP和QS20上的性能對(duì)比圖。
具體實(shí)施例方式
以下結(jié)合附圖,將對(duì)本發(fā)明各較佳實(shí)施例進(jìn)行更為詳細(xì)的說(shuō)明。本發(fā)明基于Cell B.E.的光線投射并行體繪制方法,其基本的處理過(guò)程與現(xiàn)有技術(shù)一致,在并行算法設(shè)計(jì)的第一步是對(duì)問(wèn)題或算法進(jìn)行任務(wù)分解,把具體的任務(wù)映射、分配到PPE和SPE等執(zhí)行單元,也稱為"任務(wù)分配"。首先,對(duì)問(wèn)題或算法進(jìn)行任務(wù)分解,分析各個(gè)任務(wù)塊之間的時(shí)序、同步等約束關(guān)系,以挖掘各個(gè)任務(wù)塊之間及任務(wù)塊內(nèi)部的并行性,然后進(jìn)行具體的任務(wù)分配。
具體的本發(fā)明光線投射多核并行體繪制方法包括以下步驟
A、 控制處理單元(PPE)讀取三維體數(shù)據(jù),進(jìn)行預(yù)處理,并設(shè)置三位場(chǎng)景和繪制屬性;
B、 控制處理單元(PPE)把屏幕圖像空間按"連續(xù)行"進(jìn)行任務(wù)劃分,靜態(tài)創(chuàng)建協(xié)處理器單元(SPE)進(jìn)程;
C、 協(xié)處理器單元(SPE)對(duì)分配到的任務(wù)屏幕空間上每個(gè)象素點(diǎn)進(jìn)行繪制,主要過(guò)程依次為相交測(cè)試、坐標(biāo)變換、數(shù)據(jù)讀取、數(shù)據(jù)插值、數(shù)值映射、明暗計(jì)算、顏色合成,并將繪制結(jié)果發(fā)送給控制處理單元(PPE);
D、 控制處理單元(PPE)對(duì)顯示繪制結(jié)果圖像。
本發(fā)明方法Cell B.E.體系結(jié)構(gòu)下的任務(wù)分配分為兩個(gè)層次PPE和SPE之間的任務(wù)分配,多個(gè)SPE之間的任務(wù)分配。PPE和SPE之間的任務(wù)分配側(cè)重于PPE和SPE的功能劃分和協(xié)作,以減少額外的維護(hù)開(kāi)銷(xiāo)和同步開(kāi)銷(xiāo)。多個(gè)SPE之間的任務(wù)分配主要在一個(gè)任務(wù)塊或任務(wù)組內(nèi)部進(jìn)行,側(cè)重于讓多個(gè)SPE之間的任務(wù)量均衡,以充分利用SPE的并行性。
PPE與SPE的主要區(qū)別在于計(jì)算和訪存機(jī)制,在計(jì)算機(jī)制方面,首先 PPE支持同時(shí)多線程(SMP),而SPE只能支持一個(gè)線程;其次SPE不支持 硬件的分支預(yù)測(cè),與PPE不同。在訪存機(jī)制方面,首先PPE通過(guò)兩級(jí)Cache 與內(nèi)存相連,而SPE沒(méi)有Cache,通過(guò)完全可控的本地存儲(chǔ)器與內(nèi)存相連; 其次PPE通過(guò)load和store指今來(lái)直接訪問(wèn)主存和寄存器,而SPE直接訪 問(wèn)其本地存儲(chǔ)器(Local Store, LS),通過(guò)DMA方式訪問(wèn)主存,由DMA控 制器負(fù)責(zé)將指令和數(shù)據(jù)由內(nèi)存讀取到LS或由LS寫(xiě)入到內(nèi)存。PPE —般負(fù) 責(zé)運(yùn)行操作系統(tǒng),創(chuàng)建、管理和維護(hù)SPE線程,而SPE—般負(fù)責(zé)主要的計(jì) 算、數(shù)據(jù)流處理等任務(wù)。
本發(fā)明方法根據(jù)光線投射體繪制方法的基本流程進(jìn)行功能分解,由 PPE負(fù)責(zé)體數(shù)據(jù)的讀入、物體相機(jī)燈光等場(chǎng)景設(shè)置、SPE線程的創(chuàng)建和維 護(hù)、以及結(jié)果圖片的顯示等功能;由SPE負(fù)責(zé)最主要的繪制任務(wù),包括相 交測(cè)試、坐標(biāo)變換、數(shù)據(jù)插值、.數(shù)值映射、明暗計(jì)算和顏色組合等,如圖5 所示。
在本發(fā)明方法中,SPE負(fù)責(zé)最主要的繪制任務(wù),包括相交測(cè)試、坐標(biāo) 變換、數(shù)據(jù)插值、數(shù)值映射、明暗計(jì)算和顏色組合等。如何讓多個(gè)SPE之 間任務(wù)量均衡且充分并行,是本發(fā)明方法設(shè)計(jì)光線投射并行體繪制算法的 關(guān)鍵。其中,最主要的兩個(gè)問(wèn)題是并行性和負(fù)載平衡。
本發(fā)明方法的多個(gè)SPE之間任務(wù)分配主要在一個(gè)任務(wù)塊或任務(wù)組內(nèi)部 進(jìn)行,把這個(gè)任務(wù)塊或任務(wù)組均衡分配到多個(gè)SPE上。在本發(fā)明方法的光 線投射并行體繪制中,SPE之間的任務(wù)分配主要針對(duì)屏幕圖像空間的像素 繪制任務(wù)。屏幕圖像空間中至少有256x256個(gè)像素點(diǎn),每個(gè)像素的繪制計(jì) 算都是獨(dú)立的,因此按屏幕圖像空間進(jìn)行任務(wù)劃分能挖掘充分的并行性。
以往的光線投射并行體繪制往往對(duì)屏幕圖像空間進(jìn)行分塊來(lái)進(jìn)行任務(wù) 劃分,稱為"任務(wù)塊"策略,如圖6a所示。對(duì)每一個(gè)屏幕塊進(jìn)行繪制的相關(guān)任務(wù)為一個(gè)單獨(dú)的任務(wù)組,被稱為"任務(wù)塊"。這種分配策略的主要參數(shù)是屏 幕任務(wù)塊的行像素個(gè)數(shù)和列像素個(gè)數(shù),簡(jiǎn)稱寬度和高度。通過(guò)改變屏幕任
務(wù)塊的寬度和高度,可以調(diào)整屏幕任務(wù)塊的粒度;在動(dòng)態(tài)任務(wù)分配方式下, 有利于屏幕任務(wù)塊在進(jìn)程間遷移,從而有利于負(fù)載平衡;在靜態(tài)任務(wù)分配 方式下,有利于調(diào)節(jié)Cache的命中率,利用程序的數(shù)據(jù)局部性。這種分配 策略的劣勢(shì)是增加了額外開(kāi)銷(xiāo)。PPE把相應(yīng)任務(wù)塊的控制信息發(fā)送給SPE, 供SPE進(jìn)行任務(wù)更新本地存儲(chǔ)空間。由于需要PPE和SPE之間的同步以及 SPE的本地存儲(chǔ)空間和內(nèi)存的數(shù)據(jù)傳輸,這類(lèi)額外開(kāi)銷(xiāo)在實(shí)時(shí)計(jì)算中是不 可忽略的,嚴(yán)重地影響繪制速度。
本發(fā)明方法通過(guò)與"任務(wù)塊,,分配策略進(jìn)行比較,最終采取了"連續(xù)行" 靜態(tài)分配策略,如圖6b所示。PPE把屏幕圖像空間按行進(jìn)行任務(wù)劃分,設(shè) 有N個(gè)SPE進(jìn)程,M行屏幕圖像任務(wù),則PPE把最上方的1/1SmVI連續(xù)行 屏幕圖像任務(wù)分配給第一個(gè)SPE進(jìn)程,接下來(lái)的1/]^M連續(xù)行分配給第二 個(gè)SPE進(jìn)程,如此類(lèi)推。為了負(fù)載平衡,在進(jìn)行任務(wù)分配前,本發(fā)明方法 還可以采用"預(yù)投影"加速技術(shù),即通過(guò)預(yù)先把一個(gè)包含所有物體模型的包圍 盒向屏幕圖像空間投影,屏幕閨像空間上投影以外的部分則不需要進(jìn)行光 線的投射,直接呈現(xiàn)出背景的顏色。"預(yù)投影"技術(shù)把是否受體數(shù)據(jù)影響的圖 像區(qū)域區(qū)分開(kāi)來(lái),任務(wù)劃分時(shí)只考慮對(duì)受到體數(shù)據(jù)影響的屏幕空間部分進(jìn) 行任務(wù)劃分。
本發(fā)明方法使用SPE上的模擬器、靜態(tài)時(shí)間分析工具、Oprofile等性 能分析工具,對(duì)比發(fā)現(xiàn),相交測(cè)試、坐標(biāo)變換、數(shù)值映射、明暗計(jì)算和顏 色組合等計(jì)算時(shí)間約占SPE整體繪制時(shí)間的三分之二,另外約三分之一的 時(shí)間主要為進(jìn)行數(shù)據(jù)插值時(shí)的DMA數(shù)據(jù)讀取時(shí)間,如圖7所示。因此,本 發(fā)明方法首先對(duì)占主要時(shí)間的計(jì)算部分進(jìn)行優(yōu)化,然后對(duì)訪存進(jìn)行優(yōu)化。 本發(fā)明方法主要采取SIMD、分支停頓消除等進(jìn)行計(jì)算優(yōu)化,采取滲透、多 緩沖區(qū)等方法進(jìn)行訪存優(yōu)化。以下說(shuō)明訪存優(yōu)化的具體過(guò)程SIMD優(yōu)化是SPE計(jì)算優(yōu)化的核心。 一方面,因?yàn)镾PU是一個(gè)向量處理器,只支持向量操作,所有的標(biāo)量操作 需要轉(zhuǎn)換為向量操作;另一方面,128位的向量處理能挖掘任務(wù)中的數(shù)據(jù)并 行性,得到較好的性能。本發(fā)明方法設(shè)計(jì)的算法通過(guò)對(duì)SPE繪制流程中的 相交測(cè)試、坐標(biāo)變換、明暗計(jì)算和顏色合成等最主要的任務(wù)進(jìn)行了 SIMD 化的操作。
在光線投射體繪制中,每次對(duì)投射光線進(jìn)行采樣前,都需要測(cè)試此射 線是否和體數(shù)據(jù)的包圍盒相交。若不相交,則體數(shù)據(jù)對(duì)此像素點(diǎn)沒(méi)有影響, 此像素點(diǎn)呈背景顏色;若相交,則需要求出最近交點(diǎn)和最遠(yuǎn)交點(diǎn),在交點(diǎn) 之間進(jìn)行等距采樣,以這些采樣點(diǎn)的顏色貢獻(xiàn)來(lái)代表整條線段上的點(diǎn)對(duì)像 素點(diǎn)的貢獻(xiàn)。
在重心坐標(biāo)法的相交測(cè)試算法中, 一旦射線與面片相交,則需要4次 內(nèi)積運(yùn)算、2次外積運(yùn)算和3次分支判斷。其中最費(fèi)時(shí)的就是外積運(yùn)算,因 此外積運(yùn)算的向量化是相交測(cè)試向量化的關(guān)鍵。
外積向量化大致可以分為六步,如圖8所示,其包括以下步驟
51、 把三維向量放入四維的單浮點(diǎn)向量,不妨設(shè)為V,和V2;
52、 把VI和V2的第一個(gè)元素復(fù)制到第四個(gè)元素中,得到新的向量 Vr和V2,;
53、 對(duì)V。和V2,向左循環(huán)移動(dòng)一個(gè)元素,得到新的Vr和V2,;
54、 Vi與V2,、 Vr與V2分別相乘得到Vr,和V2";
55、 V,與V2"相減得到新的向量Vr';
56、 利用"洗牌"函數(shù)對(duì)Vr,重新排位,得到最終的結(jié)果Vr。 在本發(fā)明方法的光線投射體繪制處理中,光線投射體繪制中根據(jù)世界
坐標(biāo)或視窗坐標(biāo)進(jìn)行采樣,當(dāng)需要進(jìn)行插值或讀取體元數(shù)據(jù)時(shí),需要先進(jìn) 行坐標(biāo)變換(齊次坐標(biāo)變換),然后在物體坐標(biāo)中進(jìn)行插值和訪存。坐標(biāo)變 換的次數(shù)正比于采樣、插值和訪存的次數(shù),因此也是光線投射體繪制的瓶頸之一。
本發(fā)明方法中,齊次坐標(biāo)變換向量化的處理過(guò)程如圖9所示的,包括 以下步驟
511、 把齊次坐標(biāo)值和矩陣的各行分別初始化單浮點(diǎn)向量Va、 Vrl、 Vr2、 Vr3和Vr4;
512、 Vrl和Vr3分別與Va相乘得到新的向量Vrl'和Vr3',被分為第 一組;Vr2和Vr4分別與Va相乘得到新的向量Vr2,和Vr4,,被分為第二組;
513、 利用兩個(gè)"洗牌"函數(shù)分別對(duì)兩組的元素重新選擇和排位,分別得 到Vrl"和Vr3"、 Vr2"和Vr4"(具體變換如圖8第S3步所示);
514、 Vrl,,與Vr3"、 Vr2,,與Vr4"分別相加,得到Vr,和Vr2;
515、 對(duì)Vr,和V&進(jìn)行如步驟S13的"洗牌"操作,得到新的向量ViV 和Vr2,;
516、 Vn,與Vr2,相加,即得到最終的結(jié)果Vr。
在本發(fā)明光線4殳射體繪制中,可以利用顏色值中R、 G、 B三個(gè)分量相 互獨(dú)立對(duì)明暗計(jì)算進(jìn)行向量化。RGB三個(gè)分量不僅相互獨(dú)立,而且它們有 相同的計(jì)算步驟,因此向量化過(guò)程相對(duì)筒單,如圖IO所示。顏色合成的向 量化過(guò)程與明暗計(jì)算類(lèi)似,不再贅述。
本發(fā)明方法中,還采用了分支停頓消除技術(shù)進(jìn)行對(duì)SPE的計(jì)算優(yōu)化。 本發(fā)明方法主要利用軟件實(shí)現(xiàn)分支預(yù)測(cè)、內(nèi)聯(lián)函數(shù)來(lái)減少函數(shù)跳轉(zhuǎn)的分支 兩種SPE上最主要的分支停頓消除的方法,來(lái)優(yōu)化并行光線投射算法的性 能。
SPE沒(méi)有提供對(duì)分支預(yù)測(cè)的硬件支持。在默認(rèn)的情況下,SPE對(duì)所遇 上的每個(gè)分支都應(yīng)當(dāng)時(shí)不會(huì)執(zhí)行的,包括無(wú)條件分支。但是,SPE中可以 用軟件實(shí)現(xiàn)分支預(yù)測(cè)。定義如下的兩個(gè)宏
#define Unlikely(_c) _builtin—expect((_c), 0)
#define Likely(_c) _builtin—expect((_c), 1)正確的分支預(yù)測(cè)只需要1個(gè)周期,在大部分情況下,準(zhǔn)確的分支預(yù)測(cè)
能減少指令流水的停頓。同時(shí),從預(yù)測(cè)錯(cuò)誤的分支恢復(fù)需要20個(gè)左右周期, 軟件分支預(yù)測(cè)的濫用可能會(huì)導(dǎo)致性能下降。
例如,下面是SPE中對(duì)一根投射光線進(jìn)行跟蹤的一小段偽代碼(偽代 碼5.1):
偽代碼5.1:
while ((iNumberOfStepsTaken < iNumberOfStepsToTake) && (sOpacity < REMAINING—OPACITY))
RenderOtherSamplingPoints (); CompositingColor ();
這段偽代碼主要功能是決定何時(shí)結(jié)束對(duì)投射光線的跟蹤、計(jì)算。只有 兩個(gè)條件同時(shí)滿足時(shí),才停止對(duì)投射光線進(jìn)行采樣和計(jì)算當(dāng)前跟蹤步數(shù)
小于總跟蹤步數(shù)(即投射光線尚未穿過(guò)體模型,采樣點(diǎn)仍在體數(shù)據(jù)內(nèi)),當(dāng) 前積累的不透明度小于閾值(即以后的投射光線的采樣點(diǎn)對(duì)屏幕上此像素 點(diǎn)還有貢獻(xiàn))。
絕大多數(shù)情況下,這兩個(gè)條件都是被滿足的;否則,將退出循環(huán),停 止對(duì)沖殳射光線的采樣和計(jì)算。設(shè)屏幕圖像空間的維度為N(寬度和高度均 為N),體數(shù)據(jù)的維度為M,則此分支被執(zhí)行的次數(shù)為0(N*N*M)。在一般 的通用處理器上,由于有硬件分支預(yù)測(cè)的支持,這段代碼對(duì)性能的幾乎沒(méi) 有影響。而在SPE上,由于默認(rèn)為分支不執(zhí)行,每次停頓20左右時(shí)鐘周期, 總共損失0(20+lvmS^M)次時(shí)鐘周期。如果如下面的代碼(偽代碼5.2)進(jìn) 行軟件分支預(yù)測(cè),總共損失的時(shí)鐘周期為O(20*N*N),有利于性能的提高。
偽代碼5.2:
while (Likely((iNumberOfStepsTaken < iNumberOfStepsToTake)
16&& (sOpacity < REMAINING—OPACITY)))
RenderOtherSamplingPoints (); CompositingColor ();
下面是SPE中讀取體元數(shù)據(jù)的一小段偽代碼(偽代碼5.3 ): 偽代碼5.3:
If (INTERLACING = m一RawMode) {
ReadAttriData一Interlacing (); Else 〃 PERCHANNEL ReadAttriData _Perchannel();
這段偽代碼作用是提高程序的兼容性,主要功能是當(dāng)Raw格式的原始 數(shù)據(jù)按交錯(cuò)次序存儲(chǔ)(Interlacing)時(shí),用一種方式讀取數(shù)據(jù);否則為順序存 儲(chǔ)(Perchannel),用另外一種方式讀取數(shù)據(jù)。在體繪制中,絕大多數(shù)Raw格 式的原始數(shù)據(jù)按照交錯(cuò)次序存儲(chǔ)。設(shè)屏幕圖像空間的維度為N(寬度和高 度均為N),體數(shù)據(jù)的維度為M,則光線投射體繪制中需要采樣的次數(shù)為 0(N*N*M);如果采取三次線性插值,則此分支被執(zhí)行的次數(shù)為 0(8*N*N*M)。在SPE上,由于默認(rèn)為所有分支不執(zhí)行,每次停頓18-19
個(gè)時(shí)鐘周期,總共損失o(i6(^isms^M)次時(shí)鐘周期。如果如下面的代碼(偽
代碼5.4)進(jìn)行軟件分支預(yù)測(cè),每次分支將減少17~18個(gè)時(shí)鐘周期的損失,
最終有利于性能的提高。 偽代碼5.4:If (Likely (INTERLACING == m_RawMode)) ReadAttriData_Interiacing (); Else 〃 PERCHANNEL ReadAttriData 一Perchannel();
本發(fā)明方法還采用函數(shù)內(nèi)聯(lián)技術(shù),所謂函數(shù)內(nèi)聯(lián)技術(shù)即將函數(shù)聲明為 inline,表示要求編譯器在這個(gè)函數(shù)調(diào)用點(diǎn)上,將函數(shù)內(nèi)容展開(kāi)。在一般的 處理器平臺(tái)上,函數(shù)內(nèi)聯(lián)由編譯器自動(dòng)完成;在Cell B.E.平臺(tái)上,由于軟 件發(fā)展還不完善,函數(shù)內(nèi)聯(lián)的工作主要由程序員來(lái)完成。
在Cell B.E.平臺(tái)上,函數(shù)內(nèi)聯(lián)技術(shù)可以消除函數(shù)調(diào)用時(shí)的分支,主要 包4舌brasl(branch and set link)和bi(branch indirect)指令。 一般,可以把體積 小、常被調(diào)用、計(jì)算任務(wù)簡(jiǎn)單的函數(shù)聲明為內(nèi)聯(lián)函數(shù)。過(guò)度地使用函數(shù)內(nèi) 聯(lián)技術(shù)可能導(dǎo)致代碼量增大,減少LS中凄t據(jù)存儲(chǔ)的空間,嚴(yán)重時(shí)甚至可能 導(dǎo)致代碼量過(guò)大而超過(guò)LS容量。因此,本發(fā)明方法主要將向量操作、坐標(biāo) 變換、明暗計(jì)算、顏色合成以及數(shù)據(jù)讀取之前的位置判斷等函數(shù)聲明為內(nèi) 聯(lián)函數(shù)。
本發(fā)明方法還對(duì)SPE程序進(jìn)行了訪存優(yōu)化,由于SPE程序中的訪存時(shí) 間約占整個(gè)SPE繪制時(shí)間的三分之一,該部分的優(yōu)化將直接影響SPE程序 性能的優(yōu)劣。
在光線投射并行體繪制中,絕大部分訪存時(shí)間用于對(duì)體數(shù)據(jù)的不規(guī)則 讀取。這主要有兩方面的原因。 一方面,光線投射體繪制方法在對(duì)體數(shù)據(jù) 進(jìn)行實(shí)時(shí)繪制時(shí),需要從不同的視角對(duì)體數(shù)據(jù)進(jìn)行繪制,沿著不同方向的 視線進(jìn)行光線投射、釆樣、插值等;另一方面,在對(duì)采樣點(diǎn)進(jìn)行三次線性插值時(shí),需要讀取不連續(xù)的體元數(shù)據(jù),如圖lla和圖llb所示。因此就整體 而言,對(duì)體元數(shù)據(jù)的讀取是沒(méi)有固定規(guī)律的,即不規(guī)則訪存。在實(shí)時(shí)的光 線投射體繪制中,每秒大約需要109次訪存。由于大量不規(guī)則訪存的存在, 導(dǎo)致訪存缺少明顯的局部性,在普通平臺(tái)上運(yùn)行時(shí)Cache、 TLB等命中率極 低,從而訪存效率^氐下,最終導(dǎo)致整體性能不高。特別是在Cell B.E.平臺(tái) 上,大量不規(guī)則訪存的存在使得SPE不停地在LS和主存之間傳輸數(shù)據(jù),不 利于SPE程序性能的提高。本發(fā)明方法主要通過(guò)"滲透"技術(shù)解決光線投射 體繪制中的大量不規(guī)則訪存問(wèn)題。
"滲透,,技術(shù)的核心思想是,處理器利用多線程或者異步傳輸(例如異 步DMA)提前讀取計(jì)算所需的代碼或數(shù)據(jù)到特定位置。從存儲(chǔ)的角度看, "滲透,,技術(shù)的關(guān)鍵是多緩沖區(qū)技術(shù);從并行的角度看,"滲透"技術(shù)的關(guān)鍵是 計(jì)算與訪存(通信)的流水線并行;從功效的角度看,"滲透"技術(shù)的關(guān)鍵是 把具有特定作用的數(shù)據(jù)提前存儲(chǔ)到特定的位置,從而創(chuàng)建"即時(shí)局部性"或 "即時(shí)并行性"。 '
在協(xié)處理器單元SPE中,"滲透"技術(shù)的具體過(guò)程如下在進(jìn)行第N 個(gè)采樣點(diǎn)的數(shù)值映射和顏色合成等繪制計(jì)算之前,先初始化第N+l個(gè)采樣 點(diǎn)的體元數(shù)據(jù)或插值數(shù)椐的DMA傳輸;由于DMA控制器可以獨(dú)立于SPU 對(duì)DMA傳輸進(jìn)行控制,因此,第N個(gè)釆樣點(diǎn)的繪制計(jì)算(由SPU執(zhí)行) 和第N+l個(gè)采樣點(diǎn)的DMA數(shù)據(jù)傳輸能夠并行起來(lái)。
"滲透,,技術(shù)與軟件Cache技術(shù)結(jié)合可以創(chuàng)建"即時(shí)局部性",但是"滲透,, 與"預(yù)取,,有明顯的不同。"預(yù)取"通過(guò)編譯器等預(yù)先讀取相鄰的作用不明確的 指令或數(shù)據(jù)到Cache中,利用了程序中的局部性規(guī)律,對(duì)訪存規(guī)則的應(yīng)用 性能提高明顯,但是對(duì)訪存不規(guī)則的應(yīng)用作用不明顯。而"滲透"通過(guò)程序員 等自覺(jué)地提前讀取后續(xù)操作需要的精確地指令或數(shù)據(jù)到軟件Cache中或特 定位置,不僅利用了計(jì)算和數(shù)據(jù)傳輸之間的流水線并行,而且能避免"預(yù)取" 中帶寬和存儲(chǔ)空間的浪費(fèi)問(wèn)題,能有效地解決不規(guī)則訪存問(wèn)題。另外,"滲
19透,,技術(shù)和SIMD技術(shù)結(jié)合可以創(chuàng)建"即時(shí)并行性"。"滲透"技術(shù)可以把具有 相同計(jì)算操作的數(shù)據(jù)存儲(chǔ)到一起,從而利用向量指令(SIMD指令) 一次性 處理,提高程序性能。
SPE只能直接訪問(wèn)其本地存儲(chǔ)器(Local Store, LS ),通過(guò)DMA方式 間接地訪問(wèn)主存,由DMA控制器負(fù)責(zé)將指令和數(shù)據(jù)由內(nèi)存讀取到LS或由 LS寫(xiě)入到內(nèi)存。本發(fā)明方法充分地利用SPE的這種特性,利用"滲透"技術(shù) 來(lái)解決光線投射體繪制中的不規(guī)則訪存問(wèn)題。在SPE中,"滲透"技術(shù)的具 體過(guò)程如下在進(jìn)^f亍第N個(gè)采樣點(diǎn)的數(shù)值映射和顏色合成等繪制計(jì)算之前, 先初始化第N+l個(gè)采樣點(diǎn)的體元數(shù)據(jù)或插值數(shù)據(jù)的DMA傳輸;由于DMA 控制器可以獨(dú)立于SPU對(duì)DMA傳輸進(jìn)行控制,因此,第N個(gè)采樣點(diǎn)的繪 制計(jì)算(由SPU執(zhí)行)和第N+l個(gè)采樣點(diǎn)的DMA數(shù)據(jù)傳輸能夠并行起來(lái), 如圖12所示。"滲透"技術(shù)極大地掩蓋了存儲(chǔ)器訪問(wèn)的延遲,能夠有效的減 小內(nèi)存讀取延遲對(duì)SPU處理器利用率的影響。
另外,本發(fā)明方法還對(duì)SPE程序的結(jié)果輸出部分進(jìn)行了優(yōu)化。 一方面, 本發(fā)明方法不立即寫(xiě)出單個(gè)像素值,而是積累成一個(gè)任務(wù)塊或任務(wù)行來(lái)一 次性寫(xiě)出,減少DMA傳輸?shù)膯?dòng)次數(shù)。另一方面,本文把圖片數(shù)據(jù)的存儲(chǔ) 格式由RGB改為RGBA,進(jìn)行16B的整塊寫(xiě)出而不需要考慮按字節(jié)對(duì)齊的 問(wèn)題來(lái)進(jìn)行拆分。
以下為本發(fā)明方法的實(shí)驗(yàn)過(guò)程本發(fā)明方法的實(shí)驗(yàn)平臺(tái)釆用IBM BladeCenter QS20刀片服務(wù)器時(shí),QS20刀片服務(wù)器擁有兩顆3.2GHz Cell 處理器芯片,內(nèi)存1GB,硬盤(pán)40GB,與雙千兆以太網(wǎng)相連。
本節(jié)用于實(shí)驗(yàn)的體數(shù)據(jù)主要有個(gè)
CT—Bone—1—250: 587x250x341, 47.7MB,內(nèi)容為頭部骨骼的CT數(shù)據(jù)。 CT—Skull: 256x256x256, 16MB,內(nèi)容為頭部骨骼的CT數(shù)據(jù)。 如圖13a和圖13b給出了 CllBostonTeapot的繪制效果圖;圖13c和圖 13d給出了 CT—Bone—1—250的繪制效果圖。如圖14所示,是本發(fā)明方法SPE線程的靜態(tài)創(chuàng)建策略與動(dòng)態(tài)創(chuàng)建策略 整體性能比較的效果圖,在SPE線程的的動(dòng)態(tài)創(chuàng)建策略中,PPE需要頻繁 地創(chuàng)建或撤銷(xiāo)SPE線程,導(dǎo)致程序整體性能下降,常常成為性能的瓶頸。 在SPE線程的靜態(tài)創(chuàng)建策略中,PPE創(chuàng)建SPE線程直到程序結(jié)束才終止, 靜態(tài)SPE線程通過(guò)DMA或Signal與PPE、其他SPE之間通信或同步。一 般而言,通信和同步的開(kāi)銷(xiāo)比線程創(chuàng)建和撤銷(xiāo)的開(kāi)銷(xiāo)更小,因此有利于程 序的性能。從圖中可以看出,當(dāng)任務(wù)塊粒度越小,所需創(chuàng)建的SPE線程越 多時(shí),SPE線程的動(dòng)態(tài)創(chuàng)建策略性能越差。
如圖15所示,是本發(fā)明方法"連續(xù)行"任務(wù)分配策略與"任務(wù)塊"任務(wù)分 配策略性能比較的示意圖,"連續(xù)行,,任務(wù)分配策略性能更好,這主要有三方 面的原因。首先,"連續(xù)行"分配方式中PPE和SPE之間的同步、等待時(shí)間 較少,因?yàn)镾PE不再需要頻繁地接收PPE發(fā)出的任務(wù)塊控制信息。其次, "連續(xù)行"分配方式中SPE的本地存儲(chǔ)器(Local Store, LS )和主存之間數(shù)據(jù) 交換更少,因?yàn)镾PE線程初始化"連續(xù)行"的控制信息之后,不再需要更新 LS中的代碼和控制信息,導(dǎo)致與主存交換的數(shù)據(jù)量減少。最后,SPE的像 素繪制結(jié)果在內(nèi)存中連續(xù)存放,有利于進(jìn)一 步的從本地存儲(chǔ)空間到主存的 結(jié)果輸出及優(yōu)化。
如圖16a、圖16b和圖16c所示,是本發(fā)明方法SIMD和分支停頓消除 等SPE程序計(jì)算優(yōu)化技術(shù)對(duì)SPE程序的性能有明顯提高的效果圖。如圖16a 所示,SIMD和分支消除等計(jì)算優(yōu)化技術(shù)提升了程序25%左右的性能。
特別是SIMD技術(shù),經(jīng)過(guò)對(duì)相交測(cè)試、齊次坐標(biāo)變換、光照效應(yīng)計(jì)算 和顏色合成等關(guān)鍵步驟的向量化,能極大地提高程序性能,對(duì)部分應(yīng)用可 以提高20%左右的性能,如圖16b所示。SIMD技術(shù)不僅減少了多余的標(biāo)量 轉(zhuǎn)化為向量的費(fèi)時(shí)操作,還充分地利用了眾多的向量寄存器(128個(gè)128位 寄存器)。
經(jīng)過(guò)軟件分支預(yù)測(cè)、內(nèi)聯(lián)函數(shù)、循環(huán)展開(kāi)等分支停頓消除技術(shù)的優(yōu)化,SPE程序能獲得10%左右的性能提升。這主要是因?yàn)镾PE不提供對(duì)分支預(yù) 測(cè)的硬件支持,在默認(rèn)的情況下,SPE遇上的每個(gè)分支都不會(huì)執(zhí)行。如果 從錯(cuò)誤的分支中恢復(fù)需要18到19個(gè)周期——相對(duì)于SPU指令一般只需要 2 7周期而言,其影響是相當(dāng)大的,將會(huì)嚴(yán)重影響SPE程序的性能。而分 支停頓消除技術(shù)能夠有效地降低分支錯(cuò)誤懲罰的影響。
如圖17所示,在CellB.E.體系結(jié)構(gòu)下,本發(fā)明方法之"滲透"技術(shù)能有 效地解決光線投射體繪制中的不規(guī)則訪存問(wèn)題,有利于提高程序性能。這 主要有三個(gè)原因首先,"滲透,,技術(shù)能夠利用SPU計(jì)算和DMA數(shù)據(jù)傳輸 之間的流水線并行,從而有效地掩蓋存儲(chǔ)訪問(wèn)延遲;其次,"滲透"技術(shù)能夠 為SPU程序創(chuàng)建"即時(shí)局部性",使得SPU能夠不間斷地訪問(wèn)其本地存儲(chǔ)器
(Local Store, LS )——就像LS作為Cache,而SPE程序具有完美的局部 性;此外,"滲透"技術(shù)和SIMD技術(shù)結(jié)合可以創(chuàng)建"即時(shí)并行性",即"滲透" 技術(shù)可以把具有相同計(jì)算操作的數(shù)據(jù)存儲(chǔ)到一起,從而利用向量指令
(SIMD指令) 一次性處理,提高程序性能。
本發(fā)明方法在用"滲透"技術(shù)解決不規(guī)則訪存問(wèn)題時(shí),數(shù)據(jù)計(jì)算時(shí)間不 一定能完美地掩蓋數(shù)據(jù)讀取時(shí)間,特別是在數(shù)據(jù)讀取時(shí)間遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)計(jì) 算時(shí)間。 一般情況下,通過(guò)提前讀取更多的數(shù)據(jù),讓更多的數(shù)據(jù)同時(shí)"滲透"
(并行地傳輸)到相關(guān)存儲(chǔ)器。在Cell B.E.系統(tǒng)中,由于多個(gè)DMA傳輸(最 多16個(gè))可以同時(shí)進(jìn)行,因此可以利用SPU的計(jì)算和多個(gè)DMA的數(shù)據(jù)傳 輸流水線并行,盡可能掩蓋數(shù)據(jù)讀取延遲。如圖18所示, 一個(gè)DMA的數(shù) 據(jù)傳輸和SPU的計(jì)算重疊產(chǎn)生的性能提升并不明顯;利用兩個(gè)DMA數(shù)據(jù) 傳輸,"滲透,,技術(shù)能帶來(lái)明顯的性能提升;同時(shí)執(zhí)行四個(gè)DMA傳輸在光線 投射并行體繪制中已經(jīng)有足夠好的性能,而更多的DMA并不能帶來(lái)更好的 性能。另夕卜,由于DMA數(shù)據(jù)傳輸需要額外的緩沖區(qū),而每個(gè)SPE只有256KB 的LS (即存儲(chǔ)代碼又存儲(chǔ)數(shù)據(jù)),在Cell B.E.不宜開(kāi)辟過(guò)多的緩沖區(qū)來(lái)支持 DMA傳輸。對(duì)完全沒(méi)進(jìn)行優(yōu)化的程序和充分優(yōu)化的程序的性能進(jìn)行對(duì)比,通過(guò)對(duì) 相交測(cè)試、齊次坐標(biāo)變無(wú)、光照效應(yīng)計(jì)算和顏色合成等關(guān)鍵步驟的向量化, 軟件分支預(yù)測(cè)、內(nèi)聯(lián)函數(shù)、循環(huán)展開(kāi)等分支停頓消除技術(shù)的優(yōu)化,本發(fā)明
方法"滲透,,技術(shù)對(duì)訪存的優(yōu)化等,充分優(yōu)化的程序能提高50%以上的性能, 如圖19所示。
本發(fā)明方法對(duì)基于Cell B.E.的QS20上的繪制速度與PC、 SMP上的繪 制速度進(jìn)4亍了對(duì)比。其中,PC的CPU為Intel Pentium 4 2.4 GHz,內(nèi)存 512MB; SMP擁有兩個(gè)AMD Opteron 1.6GHz的處理器,內(nèi)存1GB。如圖 20所示,從測(cè)試結(jié)果可以看出,基于Cell B.E.的光線投射并行體繪制在QS20 上能獲得0.14秒/幀的速度——體數(shù)據(jù)大小為587x250x341,圖像大小為 256x256。其速度分別是PC上速度的30倍,是SMP上速度的20倍。
此外,將對(duì)性能結(jié)果與C-Ray的性能進(jìn)行對(duì)比,2007年下半年,Jusub Kim在Cell BE上實(shí)現(xiàn)了交互式光線投射體繪制庫(kù)(C-Ray ),把256x256x256 大小的體數(shù)據(jù)繪制為256x256大小的圖片可以獲得大約15*s的速度,即 0.067秒/幀。本發(fā)明方法的程序在256x256x256大小的體數(shù)據(jù)下繪制 256x256大小的圖片在PS3 (只有6個(gè)SPE可用)上可獲得約0.11秒/幀的 性能(以CT—Skull為例)。
本發(fā)明方法根據(jù)光線投射體繪制方法的基本流程進(jìn)行功能分解,由 PPE負(fù)責(zé)體數(shù)據(jù)的讀入、物體相機(jī)燈光等場(chǎng)景設(shè)置、SPE線程的創(chuàng)建和維 護(hù)、以及結(jié)果圖片的顯示等功能;由SPE負(fù)責(zé)最主要的繪制任務(wù),包括相 交測(cè)試、坐標(biāo)變換、數(shù)據(jù)插值、數(shù)值映射、明暗計(jì)算和顏色組合等。為了 減少PPE和SPE之間的同步以及SPE的本地存儲(chǔ)空間和內(nèi)存的數(shù)據(jù)傳輸, SPE之間的任務(wù)分配采取了 "連續(xù)行"靜態(tài)分配策略。
本發(fā)明方法SPE程序的性能優(yōu)化主要有兩方面計(jì)算優(yōu)化和訪存優(yōu)化。 SPE程序的計(jì)算優(yōu)化的主要采用技術(shù)有SIMDize、分支停頓消除等。本發(fā)明 方法對(duì)SPE繪制流程中的相交測(cè)試、坐標(biāo)變換、明暗計(jì)算和顏色合成等最主要的任務(wù)進(jìn)行SIMD化的操作,并通過(guò)軟件實(shí)現(xiàn)了分支預(yù)測(cè)、內(nèi)聯(lián)函數(shù) 等分支停頓消除技術(shù)。本發(fā)明方法利用"滲透,,技術(shù)來(lái)對(duì)SPE程序進(jìn)行訪存 優(yōu)化,利用異步DMA提前讀取計(jì)算所需的代碼或數(shù)據(jù),能夠隱藏存儲(chǔ)訪問(wèn) 的延遲,有效地解決光線投射法中不規(guī)則訪存問(wèn)題,最終能提高程序的性 能。
應(yīng)當(dāng)理解的是,上述針對(duì)本發(fā)明較佳實(shí)施例的描述較為具體,并不能 因此而認(rèn)為是對(duì)本發(fā)明專利保護(hù)范圍的限制,本發(fā)明的專利保護(hù)范圍應(yīng)以 所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1、一種光線投射多核并行體繪制方法,基于Cell B.E.體系架構(gòu)包括以下步驟A、控制處理單元讀取三維體數(shù)據(jù),進(jìn)行預(yù)處理,并設(shè)置場(chǎng)景和繪制屬性;B、控制處理單元把屏幕圖像空間按“連續(xù)行”進(jìn)行任務(wù)劃分,靜態(tài)創(chuàng)建協(xié)處理器單元進(jìn)程;C、協(xié)處理器單元對(duì)分配到的任務(wù)屏幕空間上每個(gè)象素點(diǎn)進(jìn)行繪制,并將繪制結(jié)果發(fā)送給控制處理單元;D、控制處理單元對(duì)顯示繪制結(jié)果圖像。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C還包括對(duì) 每個(gè)象素點(diǎn)的繪制過(guò)程依次為相交測(cè)試、坐標(biāo)變換、數(shù)據(jù)讀取、數(shù)據(jù)插 值、數(shù)值映射、明暗計(jì)算、顏色合成。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟A還包括 所述控制處理單元通過(guò)預(yù)先把一個(gè)包含所有物體模型的包圍盒向屏幕圖像空間投影,屏幕圖像空間上投影以外的部分則不進(jìn)行光線的投射,直 接呈現(xiàn)出背景的顏色。
4、 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述步驟C還包括對(duì) 相交測(cè)試中最費(fèi)時(shí)的外積計(jì)算的向量化,具體包括步驟如下S1、 把三維向量放入四維的單浮點(diǎn)向量,設(shè)為V!和V2;S2、 把VI和V2的第一個(gè)元素復(fù)制到第四個(gè)元素中,得到新的向量 Vr和V2,;S3、 對(duì)Vi,和V2,向左循環(huán)移動(dòng)一個(gè)元素,得到新的Vf和V2';S4、 v,與v2,、 vr與V2分別相乘得到vr,和V2";S5、 V,與V2"相減得到新的向量Vr,;S6、 利用洗牌函數(shù)對(duì)Vr,重新排位,得到最終的結(jié)果Vr。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述步驟C還包括齊 次坐標(biāo)變換的向量化過(guò)程,具體包括步驟如下511、 把齊次坐標(biāo)值和矩陣的各行分別初始化單浮點(diǎn)向量Va、 Vrl、 Vr2、 Vr3和Vr4;512、 Vrl和Vr3分別與Va相乘得到新的向量Vrl'和Vr3',被分為第 一組;Vr2和Vr4分別與Va相乘得到新的向量Vr2,和Vr4,,被分為第二組;513、 利用兩個(gè)洗牌函數(shù)分別對(duì)兩組的元素重新選擇和排位,分別得到 Vrl"和Vr3"、 Vr2"和Vr4";514、 Vrl"與Vr3"、 Vr2"與Vr4"分別相加,得到Vq和Vr2;515、 對(duì)Vq和V&進(jìn)行如步驟S13的洗牌操作,得到新的向量ViV和Vr2,;516、 Vn'與Vr2,相加,即得到最終的結(jié)果Vr。
6、 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述顏色合成的向量 化過(guò)程與明暗計(jì)算的向量化過(guò)程。
7、 根據(jù)權(quán)利要求6所述的方法,其特征在于,所述步驟C還包括 在協(xié)處理器單元中使用軟件來(lái)實(shí)現(xiàn)分支預(yù)測(cè)以減少指令流水的停頓。
8、 根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟C還包括 將向量操作、坐標(biāo)變換、明暗計(jì)算、顏色合成以及數(shù)據(jù)讀取之前的位置判 斷之函數(shù)聲明為內(nèi)聯(lián)函數(shù),以清除函數(shù)調(diào)用時(shí)的分支。
9、 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述步驟C還包括使用滲透技術(shù),所述處理器利用多線程或者異步傳輸提前讀取計(jì)算所需的代碼或數(shù)據(jù)到特定位置,來(lái)創(chuàng)建即時(shí)局部性或即時(shí)并行性。
10、 根據(jù)權(quán)利要求9所述的方法,其特征在于,所述步驟C還包括對(duì)于單個(gè)像素值處理,積累成一個(gè)任務(wù)塊或任務(wù)行來(lái)一次性寫(xiě)出,以減少DMA傳輸?shù)膯?dòng)次數(shù)。
11、 根據(jù)權(quán)利要求IO所述的方法,其特征在于,所述步驟D還包括:其圖片數(shù)據(jù)的存儲(chǔ)格式為RGBA,以便進(jìn)行16Byte的整塊寫(xiě)出。
全文摘要
本發(fā)明公開(kāi)了一種基于Cell B.E.的光線投射并行體繪制方法,其包括以下步驟對(duì)三維體數(shù)據(jù)的讀取和預(yù)處理通過(guò)控制處理單元把屏幕圖像空間按行進(jìn)行任務(wù)劃分,依次分配給協(xié)處理器單元進(jìn)程;三維場(chǎng)景和繪制屬性的設(shè)置;對(duì)屏幕上的每個(gè)像素進(jìn)行繪制;對(duì)結(jié)果圖像進(jìn)行顯示。本發(fā)明所提供的一種基于Cell B.E.的光線投射并行體繪制方法,首先采用了PPE和SPE任務(wù)劃分的改進(jìn),然后,采用了SPE程序的性能優(yōu)化通過(guò)對(duì)SPE繪制流程中的相交測(cè)試、坐標(biāo)變換、明暗計(jì)算和顏色合成等最主要的任務(wù)進(jìn)行SIMD化的操作,并采用“滲透”技術(shù)有效地解決了光線投射法中不規(guī)則訪存問(wèn)題,最終提高了程序的性能。
文檔編號(hào)G06T1/20GK101527031SQ200810142058
公開(kāi)日2009年9月9日 申請(qǐng)日期2008年8月20日 優(yōu)先權(quán)日2008年8月20日
發(fā)明者馮圣中, 劉思源, 姜志陽(yáng), 文高進(jìn), 樊建平, 倩 鄭, 波 黃 申請(qǐng)人:深圳先進(jìn)技術(shù)研究院