日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]Voronoi圖是一種空間分割算法。其是對空間中的n個離散點(diǎn)而言的,它將平面分割為n個區(qū)域,每個區(qū)域包括一個點(diǎn),此區(qū)域是到該點(diǎn)距離最近的點(diǎn)的集合。由于Voronoi圖具有最鄰近

Voronoi圖是一種空間分割算法。其是對空間中的n個離散點(diǎn)而言的,它將平面分割為n個區(qū)域,每個區(qū)域包括一個點(diǎn),此區(qū)域是到該點(diǎn)距離最近的點(diǎn)的集合。由于Voronoi圖具有最鄰近性,鄰接性等眾多性質(zhì)和完善的理論體系,其被廣泛的應(yīng)用在地理學(xué)、氣象學(xué)、結(jié)晶學(xué)、航天、機(jī)器人等領(lǐng)域。

Voronoi圖的生成主要有矢量方法和柵格方法。矢量法中,典型的方法有增量法、分治法和間接法。分治法是一種遞歸方法,算法思路簡單,但是很難在應(yīng)用過程中實(shí)現(xiàn)動態(tài)更新。間接法則是根據(jù)其對偶圖Delaunay三角網(wǎng)來構(gòu)造Voronoi圖,因此其性能的高低由所采用的Delaunay三角網(wǎng)的構(gòu)造算法所決定。增量法通過不斷向已生成的Voronoi圖中增加點(diǎn)來動態(tài)構(gòu)建Voronoi圖。相對于前兩種方法,增量法構(gòu)造簡單并且容易實(shí)現(xiàn)動態(tài)化,所以被廣泛應(yīng)用。矢量方法的優(yōu)勢是生成Voronoi圖精度高,但是存在存儲復(fù)雜,生長元只能是點(diǎn)和線,以及難以向三維及高維空間擴(kuò)展等問題。因此本文重點(diǎn)研究了Voronoi圖的柵格生成方法,首先比較了常見的柵格方法生成Voronoi圖的優(yōu)缺點(diǎn),然后結(jié)合CUDA的出現(xiàn),提出一種基于GPU的 Voronoi圖并行柵格生成算法。

1 柵格法簡介

柵格方法生成Voronoi 圖主要是將二值圖像轉(zhuǎn)化為柵格圖像,然后確定各個空白柵格歸屬。主要方法有兩類,一類以空白柵格為中心,計算每個空白柵格到生長目標(biāo)的距離,以確定其歸屬,常見的方法有代數(shù)距離變換法,逐個空白柵格確定法等;另一類以生長目標(biāo)為中心,不斷擴(kuò)張生長目標(biāo)的距離半徑,填充其中的空白柵格,直到將整個圖像填充完成,主要有圓擴(kuò)張法,數(shù)學(xué)形態(tài)學(xué)距離變換法等。代數(shù)距離變換法對距離圖像進(jìn)行上行掃描(從上到下,從左到右)和下行掃描(從下向上,從右到左)兩次掃描,計算出每個空白柵格最鄰近的生長目標(biāo),以此生長目標(biāo)作為其歸屬。此方法中柵格距離的定義直接影響了空白柵格的歸屬和Voronoi圖的生成精度,通常使用的柵格距離定義有街區(qū)距離、八角形距離、棋盤距離等。距離變換的柵格生成方法精度低、耗時長,所需要花費(fèi)的時間和柵格的數(shù)量成正比,當(dāng)柵格為n×n大小時,其時間復(fù)雜度為O(n×n)。圓檢測法以生長目標(biāo)為圓心,以一定的步長為初始半徑,所有生長目標(biāo)同時對其構(gòu)成的圓內(nèi)的空白柵格進(jìn)行覆蓋。通過不斷擴(kuò)大生長目標(biāo)的半徑,將會有越來越多的空白柵格被各個圓所覆蓋,直到最終覆蓋完整個圖像。數(shù)學(xué)形態(tài)學(xué)距離變換法與圓檢測法類似,其思想來源于數(shù)學(xué)形態(tài)學(xué)中膨脹操作,膨脹操作起到了擴(kuò)大圖像的效果,通過不斷的對生長目標(biāo)進(jìn)行膨脹操作,最終擴(kuò)張到所有的空白柵格。這兩種方法有個共同的缺點(diǎn),在每次擴(kuò)張后,都需要判斷整個柵格圖像是否已完成擴(kuò)張,而這需要遍歷柵格圖像,十分耗時。

2 GPU下的柵格生成方法

2.1 CUDA編程模型與GPU

CUDA是一個并行編程模型和一個軟件編程環(huán)境,其采用了C語言作為編程語言,提供了大量的高性能計算指令開發(fā)能力,使開發(fā)者能夠在GPU的強(qiáng)大計算能力上建立起一種更加高效的密集數(shù)據(jù)計算解決方案。

CUDA將CPU作為主機(jī)端,GPU作為設(shè)備端,一個主機(jī)端可以有多個設(shè)備端。其采用CPU和GPU協(xié)同工作的方式,CPU主要負(fù)責(zé)程序中的串行計算的部分,GPU主要負(fù)責(zé)程序中的并行計算的部分。GPU上運(yùn)行的代碼被稱為內(nèi)核函數(shù),其能夠被GPU上內(nèi)置的多個線程并行執(zhí)行。一個完整的任務(wù)處理程序由 CPU端串行處理代碼和GPU端并行內(nèi)核函數(shù)共同構(gòu)成。當(dāng)CPU中執(zhí)行到GPU代碼時,其首先將相關(guān)數(shù)據(jù)復(fù)制到GPU中,然后調(diào)用GPU的內(nèi)核函數(shù),GPU中多個線程并行執(zhí)行此內(nèi)核函數(shù),當(dāng)完成計算后,GPU端再把計算的結(jié)果返回給CPU,程序繼續(xù)執(zhí)行。通過將程序中耗時的且便于并行處理的計算轉(zhuǎn)移到GPU中使用GPU并行處理,以提高整個程序的運(yùn)行速度。CUDA是以線程網(wǎng)格(Grid),線程塊(Block),線程(Thread)為三層的組織架構(gòu),每一個網(wǎng)格由多個線程塊構(gòu)成,而一個線程塊又由多個線程構(gòu)成,如圖1所示。在GPU中,線程是并行運(yùn)行的最小單元,由此可見,當(dāng)存在大量的線程時,程序的并行程度將會十分高。目前的GPU上一個網(wǎng)格最多包含65535×65535個線程塊,而一個線程塊通常有512個或1024個線程,所以理論上可以對65535×65535×512個柵格同時進(jìn)行計算。

2.2 并行Voronoi圖柵格生成算法

傳統(tǒng)的柵格生成算法中,不論是采用以空白柵格為中心確定其歸屬的方法,還是以生長目標(biāo)為中心通過不斷增長生長目標(biāo)半徑對空白柵格進(jìn)行覆蓋的方法,他們在計算每個空白柵格距離時,只能通過遍歷柵格,逐一處理。而柵格處理過程中的一個重要特點(diǎn)是,各個柵格的計算并不依賴于其他柵格的計算結(jié)果。即各個柵格的計算是相互獨(dú)立的,而由于CPU的串行性,導(dǎo)致了各個柵格只能順序處理,降低了處理速度。

 

圖1GPU組織架構(gòu)

由于GPU下的多個線程都是硬件實(shí)現(xiàn)的,各個線程的處理都是并行的,因此將柵格距離的計算分散到GPU端各個線程,必然能夠提高其生成速度。為了并行處理柵格化圖像,可以采用如下的想法,將每一個柵格點(diǎn)對應(yīng)于一個線程,此線程計算此柵格到所有的生長目標(biāo)的距離,取最小距離的生長目標(biāo)作為其歸屬。即采用一個線程用來確定一個空白柵格歸屬的方法。

確定方法后,就需要對GPU端內(nèi)核函數(shù)進(jìn)行設(shè)計,由于內(nèi)核函數(shù)是并行處理的執(zhí)行單元,其設(shè)計方式直接決定了GPU端的程序運(yùn)行效率。因此如何設(shè)計良好的內(nèi)核函數(shù)是提高并行速度的關(guān)鍵。本文采用如下方式進(jìn)行內(nèi)核函數(shù)的設(shè)計,假設(shè)共分配了K個并行處理線程,柵格規(guī)模為M×N,設(shè)A[i]為第i個線程處理的柵格編號。當(dāng)K

 

由于顯卡上的內(nèi)存是動態(tài)隨機(jī)存儲(DRAM),因此最有效率的存取方式,是以連續(xù)的方式存取。當(dāng)采用第一種方式時,看似是一種連續(xù)的存取方式,實(shí)際上恰好是非連續(xù)的,當(dāng)?shù)趇個線程處理第i個柵格時,由于處理需要一定的時間,此時GPU自動將下個一線程i+1需要的內(nèi)存數(shù)據(jù)取出給其使用,此時下一個線程的內(nèi)存數(shù)據(jù)卻是在i+C處,內(nèi)存變成了間斷存取。而在使用第二種方式進(jìn)行處理時,恰好是一種連續(xù)的存取方式,由于第i個線程正在處理第i個柵格數(shù)據(jù),此時 GPU為第i+1個線程準(zhǔn)備數(shù)據(jù),而此時的數(shù)據(jù)正好為第i+1內(nèi)存處。滿足了內(nèi)存的連續(xù)存取特性。因此本文采用第二種方式,內(nèi)核函數(shù)的設(shè)計偽代碼如下:[!--empirenews.page--]

 

具體步驟如下:(這里假設(shè)柵格的規(guī)模為M×N):

Step1:根據(jù)柵格圖像的規(guī)模,確定GPU端線程塊和線程的分配方式和分配數(shù)量,初始化GPU端的參數(shù)。

Step2:程序調(diào)用GPU端內(nèi)核函數(shù),同時將待處理柵格圖像數(shù)據(jù)傳入GPU中。數(shù)據(jù)主要是圖像的柵格距離,一般是二維數(shù)組,0表示空白柵格,其他各生長目標(biāo)可由1,2等不同的數(shù)字定義。

Step3:GPU分配M×N個thread對柵格進(jìn)行處理,當(dāng)M×N大于所有的thread的總數(shù)時,可以將M×N個柵格分塊處理,即將其分成A行×B列×C塊,其中A×B小于thread的總數(shù)。對于分成了C塊的柵格來說,每個線程只需要處理C個柵格。

Step4:當(dāng)生長目標(biāo)數(shù)目不多時,每一個線程計算其對應(yīng)的柵格到所有的生長目標(biāo)點(diǎn)的距離,取距離最小的生長目標(biāo),為此線程對應(yīng)的空白柵格的歸屬,轉(zhuǎn)Step6。當(dāng)生長目標(biāo)過多時,則轉(zhuǎn)Step5。

Step5:當(dāng)生長目標(biāo)較多時,為了減少遍歷生長目標(biāo)的時間,通過借鑒王新生的算法,不計算柵格點(diǎn)到每一個生長目標(biāo)的距離,通過對空白柵格不斷的進(jìn)行鄰域擴(kuò)張,直到遇到目標(biāo)生長點(diǎn)的方法確定此柵格的歸屬。

Step6將生成后的數(shù)據(jù)返回CPU端,CPU端完成柵格圖像的顯示與后處理。

3 實(shí)驗(yàn)與總結(jié)

在CPU參數(shù)為IntelXeonCPUE5-2609,2.4GHz,2處理器8核心,GPU參數(shù)為TeslaC2075,448CUDA核心,顯存 5.25GB的試驗(yàn)平臺下,做了不同方法在不同柵格規(guī)模下生成Voronoi圖的對比試驗(yàn),試驗(yàn)中生長目標(biāo)的個數(shù)定義為100個。由于不同的方法都采用了相同的距離定義,因此各種方法的Voronoi圖生成結(jié)果都是相同的,即他們之間的生成精度是相同的,所以這里重點(diǎn)比較了不同方法的生成耗時。表1列出了不同方法生成Voronoi圖的用時,圖2為表1的折線圖,從圖2中可以明顯看出,當(dāng)柵格數(shù)量較少時,GPU并行技術(shù)的使用并不能提升生成速度,但是當(dāng)柵格點(diǎn)數(shù)量增加時,逐點(diǎn)法和距離變換法用時明顯增加,但GPU并行算法用時幾乎不變。

 

4 結(jié)語

通過實(shí)驗(yàn)結(jié)果可以看出,采用GPU對Voronoi圖的生成進(jìn)行并行加速,能夠很好的提高生成速度。其生成Voronoi圖所需時間與只與生長目標(biāo)的數(shù)量有關(guān),而與柵格規(guī)模沒有關(guān)系,當(dāng)生長目標(biāo)數(shù)量為n時,其時間復(fù)雜度近似于O(n),為線性的生成時間。相對于前面的幾種CPU下串行算法,尤其是在柵格規(guī)模過大的情況下,能夠很好的提高Voronoi圖的生成速度。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉