亚洲综合日韩精品欧美综合区,日韩国产在线一区,久久久精品一二三区,午夜精品久久久久久中宇69,国产做爰一区二区三区视频,aa天堂,三级在线视频

一種利用GPU協(xié)同計(jì)算實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)并行壓縮的方法與流程

文檔序號(hào):43627349發(fā)布日期:2025-11-01 12:48閱讀:9來(lái)源:國(guó)知局
一種利用GPU協(xié)同計(jì)算實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)并行壓縮的方法

技術(shù)領(lǐng)域

本發(fā)明專利屬于計(jì)算機(jī)工程應(yīng)用軟件,應(yīng)用于工業(yè)控制中實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)壓縮。



背景技術(shù):

實(shí)時(shí)數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)技術(shù)與實(shí)時(shí)系統(tǒng)結(jié)合的產(chǎn)物。實(shí)時(shí)數(shù)據(jù)庫(kù)在流程行業(yè)(石化,電力,鋼鐵)有著廣泛的應(yīng)用。它可用于生產(chǎn)過(guò)程的自動(dòng)采集、存儲(chǔ)和監(jiān)視,也可在線存儲(chǔ)每個(gè)工藝過(guò)程點(diǎn)的多年數(shù)據(jù),是企業(yè)MES的核心。由于實(shí)時(shí)數(shù)據(jù)庫(kù)主要應(yīng)用于流程行業(yè),而流程行業(yè)通常點(diǎn)數(shù)規(guī)模比較大,在要求的實(shí)時(shí)性的同時(shí)還要完成對(duì)于大量歷史數(shù)據(jù)的存儲(chǔ),因此如何高效的對(duì)實(shí)時(shí)數(shù)據(jù)庫(kù)的歷史數(shù)據(jù)進(jìn)行組織管理,就成了決定實(shí)時(shí)數(shù)據(jù)庫(kù)性能好壞的關(guān)鍵因素。而壓縮又是決定歷史數(shù)據(jù)存儲(chǔ)效率的關(guān)鍵因素。

實(shí)時(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù)都是基于時(shí)間序列的數(shù)據(jù),具有時(shí)間屬性,并且其時(shí)間是序列化的。旋轉(zhuǎn)門壓縮算法的原理是通過(guò)查看當(dāng)前數(shù)據(jù)點(diǎn)與前一個(gè)被保留的數(shù)據(jù)點(diǎn)所構(gòu)成的壓縮偏移覆蓋區(qū)來(lái)決定數(shù)據(jù)的取舍。如果偏移覆蓋區(qū)可以覆蓋兩者之間的所有點(diǎn),則不保留該數(shù)據(jù)點(diǎn);如果有數(shù)據(jù)點(diǎn)落在壓縮偏移覆蓋區(qū)之外,則保留當(dāng)前數(shù)據(jù)點(diǎn)的前一個(gè)點(diǎn),并以最新保留的數(shù)據(jù)點(diǎn)作為新的起點(diǎn)。

CUDA是一種將GPU作為數(shù)據(jù)并行計(jì)算設(shè)備的軟硬件體系,采用了比較容易掌握的類C語(yǔ)言進(jìn)行開發(fā)。它是一個(gè)SIMD(singleinstructionmultipledata)系統(tǒng),即一個(gè)程序編譯一次以后,CUDA將計(jì)算任務(wù)映射為大量的可以并行執(zhí)行的線程,并由擁有大量?jī)?nèi)核的硬件動(dòng)態(tài)調(diào)度和執(zhí)行這些線程,從而顯著提高運(yùn)算速度。

隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展,目前主流臺(tái)式計(jì)算機(jī)已經(jīng)采用了CPU與GPU協(xié)作的技術(shù),它實(shí)際上是一個(gè)具有很強(qiáng)計(jì)算能力的并行系統(tǒng),在諸多領(lǐng)域里能使程序性能提高好幾個(gè)數(shù)量級(jí),對(duì)未來(lái)信息社會(huì)處理海量數(shù)據(jù)的需求具有很強(qiáng)的適應(yīng)性。除了并行化程度高、速度快的優(yōu)點(diǎn)以外,GPU與CPU協(xié)作的模式還具有開發(fā)周期短、易于掌握、無(wú)須設(shè)計(jì)和調(diào)試復(fù)雜板卡、便于移植等眾多優(yōu)勢(shì),使開發(fā)人員能把主要精力放在系統(tǒng)建模和算法優(yōu)化等方面。

由于在性能、成本和開發(fā)周期上的顯著優(yōu)勢(shì),通用GPU計(jì)算的推出在學(xué)術(shù)界和產(chǎn)業(yè)界引起了熱烈反響。然而,目前國(guó)內(nèi)將通用GPU計(jì)算應(yīng)用到實(shí)時(shí)數(shù)據(jù)庫(kù)的案例還很少。

我們對(duì)于利用GPU并行化提高實(shí)時(shí)數(shù)據(jù)庫(kù)性能進(jìn)行了嘗試。將實(shí)時(shí)數(shù)據(jù)庫(kù)中壓縮部分移植到GPU上進(jìn)行運(yùn)算,并通過(guò)測(cè)試證明優(yōu)化后壓縮效率提高了70%左右。



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

為了解決實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)對(duì)實(shí)時(shí)性的要求和大規(guī)模點(diǎn)數(shù)據(jù)壓縮處理的矛盾,本發(fā)明提出一種使用GPU協(xié)同計(jì)算的方法來(lái)提高壓縮計(jì)算的效率。實(shí)時(shí)數(shù)據(jù)庫(kù)的數(shù)據(jù)流為一組具有相同計(jì)算和操作的數(shù)據(jù)記錄,即測(cè)點(diǎn)數(shù)據(jù),這樣提供了數(shù)據(jù)并行處理的可能性。對(duì)數(shù)據(jù)流中每個(gè)元素進(jìn)行相似操作的函數(shù),例:旋轉(zhuǎn)門壓縮算法,而各個(gè)元素之間沒(méi)有依賴關(guān)系,因此可以進(jìn)行GPU并行化以提高壓縮效率,減輕CPU計(jì)算負(fù)荷。

本發(fā)明的技術(shù)方案為將實(shí)時(shí)數(shù)據(jù)庫(kù)中數(shù)據(jù)壓縮部分使用CUDA技術(shù)移植到GPU上,利用GPU協(xié)同CPU完成實(shí)時(shí)數(shù)據(jù)庫(kù)的計(jì)算任務(wù)。

GPU并行化可以分為如下三個(gè)階段:(1)預(yù)評(píng)估;(2)基于GPU的算法設(shè)計(jì);(3)基于GPU體系結(jié)構(gòu)的性能優(yōu)化。預(yù)評(píng)估為在GPU上運(yùn)算的數(shù)據(jù)精度能否滿足需要和能否獲得預(yù)期的性能提升兩方面考察算法是否適合使用GPU優(yōu)化。CPU+GPU異構(gòu)計(jì)算屬于“CPU生產(chǎn)數(shù)據(jù),GPU消費(fèi)數(shù)據(jù)”模型,待移植算法的執(zhí)行時(shí)間越短,CPU和GPU通信延遲的影響就越不可忽略,極端情況是GPU對(duì)性能的提升反而無(wú)法抵消通信代價(jià),造成性能不升反降。本發(fā)明針對(duì)實(shí)時(shí)數(shù)據(jù)庫(kù)中常用的旋轉(zhuǎn)門壓縮算法進(jìn)行優(yōu)化,理論和實(shí)際測(cè)試結(jié)果都表明適合使用GPU進(jìn)行優(yōu)化。

算法設(shè)計(jì)部分主要是任務(wù)劃分和線程映射。目標(biāo)是使移植到GPU上的旋轉(zhuǎn)門壓縮算法和CUDA的并行特性相適應(yīng)。由于實(shí)時(shí)數(shù)據(jù)壓縮屬于數(shù)據(jù)密集類算法且每個(gè)測(cè)點(diǎn)的數(shù)據(jù)相對(duì)獨(dú)是立,因此我們采用數(shù)據(jù)劃分并行的粒度。鑒于實(shí)時(shí)數(shù)據(jù)庫(kù)中各個(gè)測(cè)點(diǎn)的壓縮可以獨(dú)立進(jìn)行,我們將每個(gè)測(cè)點(diǎn)的壓縮作為最小并行粒度,分配一個(gè)GPU線程處理一個(gè)測(cè)點(diǎn)的壓縮。不同于CPU上的粗粒度多指令流多數(shù)據(jù)流線程,GPU線程的執(zhí)行模型是單指令流多線程的,同樣的指令作用在不同的數(shù)據(jù)上。因此本發(fā)明編寫的在GPU上運(yùn)行的kernel函數(shù)是對(duì)所有GPU線程通用的計(jì)算步驟,線程內(nèi)使用threadIdx.x,blockIdx.x,blockDim.x等GPU內(nèi)置變量得到線程標(biāo)識(shí)。每個(gè)線程單獨(dú)處理一個(gè)測(cè)點(diǎn)的壓縮計(jì)算。

GPU并行化算法實(shí)現(xiàn)后,還需要根據(jù)CUDA特性進(jìn)行一些性能優(yōu)化。存儲(chǔ)器帶寬是性能的最重要的瓶頸。GPU通用計(jì)算無(wú)法避免頻繁地訪問(wèn)全局存儲(chǔ)器,首地址對(duì)齊和訪問(wèn)地址連續(xù)是全局存儲(chǔ)器訪問(wèn)首先要考慮滿足的條件,尤其是在1.071.1的設(shè)備上,測(cè)試結(jié)果表明是否滿足合并訪問(wèn)通常會(huì)對(duì)算法效率產(chǎn)生數(shù)倍的影響。此外,為向通用計(jì)算傾斜,GPU提供了多層次存儲(chǔ)器,其中對(duì)通用計(jì)算加速較明顯的是共享存儲(chǔ)器、紋理存儲(chǔ)器和常數(shù)存儲(chǔ)器,因此,我們對(duì)于壓縮精度等數(shù)據(jù)在顯存中用常量存儲(chǔ),存儲(chǔ)壓縮結(jié)果和采集數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)使用數(shù)組,做到了首地址對(duì)齊。用GPU內(nèi)置變量為每一線程指定線程標(biāo)識(shí),來(lái)控制該線程處理的點(diǎn)ID,這樣可以做到同時(shí)發(fā)射的GPU線程訪問(wèn)地址連續(xù)。

目前大多數(shù)GPU都通過(guò)PCI-E總線與CPU連接。PCI-E2.0×16通道的理論帶寬是雙向每向8GBs,遠(yuǎn)小于GPU片外存儲(chǔ)器和GPU片內(nèi)存儲(chǔ)器帶寬。因而我們采用在顯存中緩存一部分壓縮結(jié)果的方法來(lái)減少GPU和CPU的通信次數(shù),以降低通信開銷。

GPU流多處理器首先為Warp里的每個(gè)線程讀取指令操作數(shù),執(zhí)行指令,最后為Warp里的每個(gè)線程寫入計(jì)算結(jié)果。因此,有效的指令吞吐量不僅取決于理論指令吞吐量,還取決于內(nèi)存延遲和帶寬??梢圆扇∫韵率侄卧龃笾噶钔掏铝浚罕苊馐褂玫屯掏铝恐噶睿粚?duì)每種類型的存儲(chǔ)器進(jìn)行優(yōu)化,有效利用帶寬;盡量用多的數(shù)學(xué)計(jì)算來(lái)覆蓋訪問(wèn)延遲,同時(shí)每個(gè)流多處理器有足夠的活動(dòng)線程。

利用基于CUDA的GPU協(xié)同計(jì)算優(yōu)化后,經(jīng)過(guò)多次分別測(cè)試從1000到5000批測(cè)點(diǎn)規(guī)模為65536的float型數(shù)據(jù)壓縮實(shí)驗(yàn),采用本發(fā)明可以明顯提高壓縮效率。

附圖說(shuō)明

下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)一步說(shuō)明。

圖1是實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)流圖。

圖2是旋轉(zhuǎn)門壓縮算法流程圖(S1,S2為根據(jù)壓縮算法計(jì)算出的斜率)。

圖3是GPU并行化后重新設(shè)計(jì)的壓縮算法流程圖。

圖4是實(shí)際測(cè)試優(yōu)化結(jié)果展示。測(cè)試用數(shù)據(jù)點(diǎn)規(guī)模為65536,float型數(shù)據(jù)。其中橫坐標(biāo)為測(cè)試時(shí)實(shí)時(shí)數(shù)據(jù)庫(kù)壓縮處理的數(shù)據(jù)批次數(shù)。計(jì)算方法;同樣數(shù)據(jù)規(guī)模,采集頻率,采集時(shí)間的條件下,GPU并行化后程序運(yùn)行減少的時(shí)間,除以原串行程序運(yùn)行時(shí)間。運(yùn)行環(huán)境:LinuxUbuntu10.04(32位),cudatoolkit3.2,Intel(R)Core(TM)1DuoCPUE74002.8GHz,內(nèi)存DDR22GB,GPU:NVIDIAGeForceGT220。

具體實(shí)施方式

為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下面舉具體實(shí)例,對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。

通常,實(shí)時(shí)數(shù)據(jù)通過(guò)現(xiàn)場(chǎng)設(shè)備(PLC、DCS)的采集接口被采集上來(lái)后,經(jīng)過(guò)例外處理,就會(huì)被送入實(shí)時(shí)數(shù)據(jù)庫(kù)當(dāng)中,例外處理是PI數(shù)據(jù)庫(kù)中提出的概念,通過(guò)對(duì)數(shù)據(jù)記錄的時(shí)間,數(shù)值進(jìn)行簡(jiǎn)單的評(píng)估,舍棄掉那些明顯錯(cuò)誤的數(shù)據(jù)記錄,通過(guò)這樣的數(shù)據(jù)預(yù)處理,可以有效的降低實(shí)時(shí)數(shù)據(jù)庫(kù)端的負(fù)擔(dān),保證實(shí)時(shí)數(shù)據(jù)庫(kù)的高效運(yùn)轉(zhuǎn)。實(shí)時(shí)數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)中之后,會(huì)分成兩個(gè)流向,一個(gè)方向是更新測(cè)點(diǎn)的實(shí)時(shí)數(shù)據(jù),如果在組態(tài)的過(guò)程中,測(cè)點(diǎn)同某一組態(tài)畫面進(jìn)行了連接(如報(bào)警燈,儀表),實(shí)時(shí)數(shù)據(jù)的更新也會(huì)同時(shí)傳遞到組態(tài)畫面上,形成動(dòng)畫效應(yīng),方便管理人員的監(jiān)控。另外實(shí)時(shí)數(shù)據(jù)在更新的時(shí)候,實(shí)時(shí)數(shù)據(jù)庫(kù)還會(huì)自動(dòng)根據(jù)現(xiàn)有的數(shù)據(jù)進(jìn)行實(shí)時(shí)的計(jì)算,統(tǒng)計(jì),控制,這些任務(wù)的截止期都是比較短的,實(shí)時(shí)數(shù)據(jù)庫(kù)必須優(yōu)先考慮。另一個(gè)方向是對(duì)現(xiàn)場(chǎng)數(shù)據(jù)進(jìn)行壓縮存儲(chǔ),這也是現(xiàn)場(chǎng)數(shù)據(jù)由實(shí)時(shí)數(shù)據(jù)轉(zhuǎn)變?yōu)闅v史數(shù)據(jù)的過(guò)程,經(jīng)過(guò)壓縮,符合要求的數(shù)據(jù)被留下,寫入歷史數(shù)據(jù)文件當(dāng)中。通過(guò)實(shí)時(shí)數(shù)據(jù)庫(kù)提供的接口,用戶可以很方便的查詢計(jì)算、統(tǒng)計(jì)數(shù)據(jù)和歷史數(shù)據(jù),如果需要對(duì)歷史數(shù)據(jù)進(jìn)行更為復(fù)雜的分析,可以通過(guò)特定的接口,將歷史數(shù)據(jù)導(dǎo)入到關(guān)系數(shù)據(jù)庫(kù)當(dāng)中,然后再利用關(guān)系數(shù)據(jù)庫(kù)的高級(jí)語(yǔ)言進(jìn)行查詢分析。

在實(shí)例中我們采用socket通信來(lái)模擬數(shù)據(jù)的采集與接收。使用的測(cè)試用數(shù)據(jù)點(diǎn)規(guī)模為65536,float型數(shù)據(jù),采集頻率和數(shù)據(jù)質(zhì)量可以通過(guò)數(shù)據(jù)模擬程序的接口設(shè)置。數(shù)據(jù)庫(kù)內(nèi)核接收數(shù)據(jù)后,更新到內(nèi)存中的測(cè)點(diǎn)信息,之后將數(shù)據(jù)送入壓縮處理流程。壓縮邏輯采用GPU并行優(yōu)化的旋轉(zhuǎn)門壓縮算法實(shí)現(xiàn)。

普通旋轉(zhuǎn)門壓縮算法流程如下:(S1,S2為根據(jù)壓縮算法計(jì)算出的斜率)

(1)進(jìn)入壓縮流程,計(jì)算舊S1和舊S2;

舊S1=(壓縮隊(duì)列第二值-(壓縮隊(duì)列第一值+壓縮偏差))/兩值之間的時(shí)間差;

舊S2=(壓縮隊(duì)列第二值-(壓縮隊(duì)列第一值-壓縮偏差))/兩值之間的時(shí)間差;壓縮從第三值開始進(jìn)行;

(2)當(dāng)考察當(dāng)前測(cè)量值時(shí),計(jì)算下面三個(gè)斜率:

新S1=(當(dāng)前測(cè)量值-(上一個(gè)存儲(chǔ)測(cè)量值+壓縮偏差))/兩測(cè)量值之間的時(shí)間差;

新S2=(當(dāng)前測(cè)量值-(上一個(gè)存儲(chǔ)測(cè)量值-壓縮偏差))/兩測(cè)量值之間的時(shí)間差;

S=(當(dāng)前測(cè)量值-(上一個(gè)存儲(chǔ)測(cè)量值)/兩測(cè)量值之間的時(shí)間差;

(3)對(duì)于新算的S1,當(dāng)大于原有的S1時(shí),用新值取代舊值;

(4)對(duì)于新算的S2,當(dāng)小于原有的S2時(shí),用新值取代舊值;

(5)當(dāng)時(shí),當(dāng)前測(cè)量值不用存儲(chǔ),繼續(xù)測(cè)試下一采樣時(shí)刻得到的測(cè)量值,否則,系統(tǒng)將當(dāng)前測(cè)量值的前一個(gè)采樣時(shí)刻采樣得到的測(cè)量值存儲(chǔ)起來(lái);

(6)當(dāng)新采樣測(cè)量值到來(lái)時(shí),重復(fù)以上(2)~(5)過(guò)程。

我們用數(shù)據(jù)劃分并行的粒度,將并行粒度設(shè)置為單一測(cè)點(diǎn)的數(shù)據(jù)壓縮并行執(zhí)行。以上(2)~(5)過(guò)程計(jì)算過(guò)程重復(fù)進(jìn)行,符合GPU線程單指令流多數(shù)據(jù)流的要求。因此將以上(2)~(5)過(guò)程改為GPU上kernel核函數(shù)處理。根據(jù)CUDA的語(yǔ)法規(guī)則編寫完成相應(yīng)功能的kernel函數(shù)。之后根據(jù)GPU存儲(chǔ)設(shè)備特點(diǎn),設(shè)計(jì)顯存數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)壓縮過(guò)程中間變量及壓縮結(jié)果。并在內(nèi)存申請(qǐng)對(duì)應(yīng)的主存數(shù)據(jù)結(jié)構(gòu)。運(yùn)行過(guò)程中調(diào)用特定CUDA函數(shù)完成CPU-GPU之間的通信。

本實(shí)例有65536組測(cè)點(diǎn),因此設(shè)備函數(shù)調(diào)用啟動(dòng)256*256組線程并行計(jì)算,線程內(nèi)部通過(guò)tid=threadIdx.x+blockIdx.x*blockDim.x;得到線程標(biāo)識(shí)。每個(gè)線程處理一個(gè)測(cè)點(diǎn)的壓縮計(jì)算。

設(shè)計(jì)GPU上的數(shù)據(jù)結(jié)構(gòu),包括測(cè)點(diǎn)數(shù)據(jù),斜率及緩存在內(nèi)共需申請(qǐng)14個(gè)設(shè)備上的數(shù)組。

由于GPU協(xié)同計(jì)算屬于“CPU生產(chǎn)數(shù)據(jù),GPU消費(fèi)數(shù)據(jù)”模型,計(jì)算過(guò)程中需要進(jìn)行CPU-GPU間的數(shù)據(jù)傳遞,根據(jù)旋轉(zhuǎn)門壓縮算法,第三次采集的數(shù)據(jù)處理之后,每采集一組數(shù)據(jù),向GPU傳遞當(dāng)前采集的值和時(shí)間。計(jì)算完后,將壓縮結(jié)果傳回主存。

經(jīng)比較壓縮結(jié)果,利用GPU并行優(yōu)化后壓縮結(jié)果與之前相同,壓縮比為3∶1。本實(shí)例時(shí)間優(yōu)化的測(cè)試結(jié)果如圖3所示,表明利用GPU計(jì)算實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)庫(kù)并行壓縮后,壓縮效率提高了70%左右。這意味著本發(fā)明可以在一定程度上減輕CPU運(yùn)算負(fù)荷,可以提高整個(gè)系統(tǒng)的性能。

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