版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章科學(xué)計(jì)算系統(tǒng)平臺(tái)的性能優(yōu)化橋梁工程結(jié)構(gòu)智慧監(jiān)測(cè)——理論與實(shí)踐CONTENTS16.1系統(tǒng)平臺(tái)運(yùn)行效能優(yōu)化26.2系統(tǒng)平臺(tái)輸入輸出優(yōu)化36.3系統(tǒng)平臺(tái)健壯性上章研究了基于MATLABBuilderJA產(chǎn)品和MATLAB函數(shù)開(kāi)發(fā)科學(xué)計(jì)算類庫(kù)的組件化實(shí)現(xiàn)方案,以及基于JavaEE和科學(xué)計(jì)算類庫(kù)構(gòu)建可為橋梁健康監(jiān)測(cè)服務(wù)的Web智能計(jì)算平臺(tái)的各項(xiàng)技術(shù),并用實(shí)例驗(yàn)證了在Web智能計(jì)算平臺(tái)上集成MATLAB語(yǔ)言強(qiáng)大的科學(xué)計(jì)算能力的可行性。結(jié)果表明,基于JavaEE平臺(tái)規(guī)范,結(jié)合監(jiān)測(cè)數(shù)據(jù)處理算法的組件化實(shí)現(xiàn)方案,對(duì)于進(jìn)行一般化的橋梁健康監(jiān)測(cè)系統(tǒng)平臺(tái)設(shè)計(jì)有重要的指導(dǎo)意義和實(shí)踐意義。但是在實(shí)踐中發(fā)現(xiàn),以上述思路為基礎(chǔ)搭建的Web平臺(tái)的運(yùn)營(yíng)過(guò)程中存在一些瓶頸問(wèn)題,限制了其應(yīng)用,概述如下:系統(tǒng)平臺(tái)運(yùn)行速度無(wú)法滿足需求,用戶從通過(guò)瀏覽器發(fā)送請(qǐng)求到能夠在瀏覽器查看結(jié)果需要較長(zhǎng)時(shí)間。系統(tǒng)平臺(tái)輸入輸出需要花費(fèi)較長(zhǎng)時(shí)間,且由于海量監(jiān)測(cè)數(shù)據(jù)的影響,將占用較大的運(yùn)行內(nèi)存。系統(tǒng)平臺(tái)健壯性較差,容易引起服務(wù)器崩潰,影響了系統(tǒng)平臺(tái)的總體性能。本書將在下一章內(nèi)針對(duì)上述瓶頸問(wèn)題分析原因,并進(jìn)行相應(yīng)的關(guān)鍵技術(shù)研究。6.1系統(tǒng)平臺(tái)運(yùn)行效能優(yōu)化運(yùn)行效率及性能的問(wèn)題:系統(tǒng)平臺(tái)在開(kāi)發(fā)和正式投入運(yùn)營(yíng)時(shí)遇到的最主要的瓶頸問(wèn)題。、導(dǎo)致此問(wèn)題的原因可分為兩方面:系統(tǒng)平臺(tái)的數(shù)據(jù)處理面向海量的監(jiān)測(cè)數(shù)據(jù),當(dāng)基于MATLAB開(kāi)發(fā)的算法函數(shù)較為復(fù)雜時(shí),耗費(fèi)時(shí)間會(huì)很長(zhǎng);MATLAB語(yǔ)言屬于解釋性語(yǔ)言,執(zhí)行效率較低。上述兩方面因素導(dǎo)致了在用戶通過(guò)瀏覽器在向服務(wù)器發(fā)送數(shù)據(jù)處理請(qǐng)求后,需等待較長(zhǎng)時(shí)間方可查看到返回的數(shù)據(jù)處理結(jié)果,而這與人機(jī)界面的友好直觀要求相悖,用戶顯然不愿意在瀏覽器端等候很長(zhǎng)的時(shí)間。針對(duì)此問(wèn)題,本章展開(kāi)了研究,認(rèn)為在編寫算法函數(shù)時(shí)采納如下方案可以在一定程度上提升函數(shù)執(zhí)行速度和性能,避免耗時(shí)過(guò)長(zhǎng)或性能下降:優(yōu)化程序代碼使用MEX文件采用并行計(jì)算方式初始化MCR6.1.1優(yōu)化程序代碼1采用向量化操作循環(huán)語(yǔ)句及循環(huán)體經(jīng)常被認(rèn)為是MATLAB編程的瓶頸問(wèn)題。在MATLAB中,應(yīng)盡量避免使用循環(huán),應(yīng)采用向量化的操作,來(lái)代替循環(huán)語(yǔ)句及循環(huán)體,可以大幅度提高運(yùn)行效率。考慮下面的級(jí)數(shù)求和公式:按照常規(guī)的編程方式,編寫計(jì)算函數(shù)fun1.m,如下:(為演示效率提升效果,對(duì)該級(jí)數(shù)的前107項(xiàng)求和)1采用向量化操作----------------------------------------------fun1.m--------------------------------------------functions=fun1()%基于上一頁(yè)公式,對(duì)級(jí)數(shù)公式的前1000000項(xiàng)求和
tic;s=0;forn=1:1e7s=s+n/((n^2+1)*(n^3+2)*(n^4+3));end;toc;end------------------------------------------Endoffunction---------------------------------------采用向量化編程方式,編寫計(jì)算函數(shù)fun1_1.m,如下:1采用向量化操作---------------------------------------------fun1_1.m-------------------------------------------functions=fun1_1()%基于級(jí)數(shù)求和公式,采用向量化方式,對(duì)級(jí)數(shù)公式求和tic;s=0;n=(1:1e7);v=n./((n.^2+1).*(n.^3+2).*(n.^4+3));%對(duì)向量進(jìn)行操作;fori=1:1e7s=s+v(i);end;toc;end;------------------------------------------Endoffunction-----------------------------------------在同一臺(tái)機(jī)器上分別運(yùn)行兩個(gè)函數(shù)fun1.m及fun1_1.m,耗費(fèi)時(shí)間如下表,從表中可以看出,采用向量化編程方式約可節(jié)約近一半時(shí)間。1采用向量化操作函數(shù)運(yùn)行時(shí)間對(duì)比2優(yōu)先采用內(nèi)置函數(shù)MATLAB軟件提供了大量的函數(shù)工具箱,工具箱中內(nèi)置了很多已經(jīng)過(guò)優(yōu)化的函數(shù),這些函數(shù)一般是基于更底層的C語(yǔ)言構(gòu)造的,因而直接采用內(nèi)置函數(shù),往往比自己編寫函數(shù)運(yùn)行效率要高很多。因此,在編程時(shí)推薦優(yōu)先采用MATLAB軟件的內(nèi)置函數(shù)。如fun1_1.m函數(shù)中的for循環(huán)代碼塊,即可以直接采用s=sum(v)來(lái)完成,不僅減少了代碼量,而且運(yùn)行速度也有所提高。----------------------------------------------fun1.m--------------------------------------------functions=fun1()%基于上一頁(yè)公式,對(duì)級(jí)數(shù)公式的前1000000項(xiàng)求和
tic;s=0;forn=1:1e7s=s+n/((n^2+1)*(n^3+2)*(n^4+3));end;toc;end------------------------------------------Endoffunction---------------------------------------s=sum(v)3預(yù)分配數(shù)組在MATLAB函數(shù)執(zhí)行過(guò)程中,若函數(shù)中數(shù)組的維度未事先確定,則數(shù)組會(huì)動(dòng)態(tài)的更改其大小,這將耗費(fèi)一定的時(shí)間,若數(shù)組維度較大,則耗費(fèi)時(shí)間會(huì)相應(yīng)大幅度增加。因此,建議在使用大維度數(shù)組時(shí),事先定義其維度??紤]下面的求矩陣公式:若矩陣維度為[10000,10],按照常規(guī)的編程方式,編寫函數(shù)fun2.m如下:3預(yù)分配數(shù)組---------------------------------------------fun2.m-------------------------------------------------functions=fun2()%基于上一頁(yè)公式,求矩陣
%維度為[10000,10]tic;fori=1:10000forj=1:10s(i,j)=(i^2-j^2)/(i^2+j^2);end;end;toc;end------------------------------------------Endoffunction-------------------------------------------采用事先預(yù)分配數(shù)組的方式,編寫函數(shù)fun2_1.m如下:3預(yù)分配數(shù)組----------------------------------------------fun2_1.m----------------------------------------------functions=fun2_1()%基于公式,事先預(yù)分配數(shù)組,求矩陣%維度為[10000,10]tic;s=zeros(10000,10);fori=1:10000
forj=1:10
s(i,j)=(i^2-j^2)/(i^2+j^2);
end;end;toc;end------------------------------------------Endoffunction-------------------------------------------3預(yù)分配數(shù)組在同一臺(tái)機(jī)器上分別運(yùn)行兩個(gè)函數(shù)fun2.m及fun2_1.m,耗費(fèi)時(shí)間如下表所示,從表中可以看出,采用預(yù)分配數(shù)組方式可顯著減少運(yùn)行時(shí)間。函數(shù)運(yùn)行時(shí)間對(duì)比對(duì)于二重循環(huán)和多重循環(huán)的特殊問(wèn)題,還可以使用meshgrid函數(shù)或ndgrid函數(shù)構(gòu)造循環(huán)變量的矩陣,這樣,可以將多重循環(huán)體采用向量化的方式實(shí)現(xiàn)。其中,meshgrid函數(shù)用于產(chǎn)生二維矩陣,ndgrid函數(shù)用于產(chǎn)生多維矩陣。采用meshgrid函數(shù),編寫函數(shù)fun2_2.m,如下:3預(yù)分配數(shù)組----------------------------------------------fun2_2.m---------------------------------------------functions=fun2_2()%基于公式,采用meshgrid函數(shù),求矩陣%維度為[10000,10]tic;[i,j]=meshgrid(1:10000,1:10);s=(i.^2-j.^2)./(i.^2+j.^2);toc;end------------------------------------------Endoffunction------------------------------------------3預(yù)分配數(shù)組在同一臺(tái)機(jī)器上分別運(yùn)行兩個(gè)函數(shù)fun2.m及fun2_2.m,耗費(fèi)時(shí)間如下表所示,事實(shí)上,此處不需要對(duì)矩陣s進(jìn)行預(yù)分配,在fun2_2.m運(yùn)行時(shí),s的維度默認(rèn)與矩陣i,j的維度相同,也就是說(shuō),meshgrid函數(shù)從另一角度完成了預(yù)分配矩陣的任務(wù)。函數(shù)運(yùn)行時(shí)間對(duì)比4修改內(nèi)外層循環(huán)當(dāng)函數(shù)中涉及到多層循環(huán)體(此循環(huán)體是不可避免的)時(shí),如果多個(gè)循環(huán)執(zhí)行的次數(shù)不同,則建議將循環(huán)次數(shù)最少的循環(huán)放在最外一層,循環(huán)次數(shù)越多的放在靠近的內(nèi)一層,可以顯著提高速度。將函數(shù)fun2.m的內(nèi)外層循環(huán)進(jìn)行修改,編寫函數(shù)fun2_3.m,如下:----------------------------------------------fun2_3.m---------------------------------------------functions=fun2_3()%基于公式6-3,修改內(nèi)外層循環(huán),求矩陣%維度為[10000,10]tic;fori=1:10
forj=1:10000
s(i,j)=(i^2-j^2)/(i^2+j^2);
end;end;toc;end------------------------------------------Endoffunction------------------------------------------在同一臺(tái)機(jī)器上分別運(yùn)行兩個(gè)函數(shù)fun2.m及fun2_3.m,耗費(fèi)時(shí)間如下表所示,從表中可以看出,采用修改內(nèi)外層循環(huán)方式可顯著減少運(yùn)行時(shí)間。函數(shù)運(yùn)行時(shí)間對(duì)比4修改內(nèi)外層循環(huán)5使用mlint函數(shù)和profile函數(shù)mlint函數(shù)和profile函數(shù)均是MATLAB軟件內(nèi)置的函數(shù)。mlint函數(shù)可以對(duì)代碼進(jìn)行檢查,輸出代碼中存在的語(yǔ)法錯(cuò)誤并給出提升代碼運(yùn)行性能的建議;profile函數(shù)可以監(jiān)測(cè)代碼中被調(diào)用的各子函數(shù)的運(yùn)行時(shí)間,并輸出運(yùn)行時(shí)間的報(bào)告。根據(jù)運(yùn)行時(shí)間報(bào)告,可以針對(duì)性地對(duì)耗費(fèi)時(shí)間較長(zhǎng)的子函數(shù)代碼進(jìn)行修改。關(guān)于profile函數(shù)的用法,可見(jiàn)函數(shù)fun3.m:------------------------------------------------fun3.m----------------------------------------------functionfun3()%演示profile函數(shù)profileon;%啟動(dòng)profilers1=fun2();s2=fun2_1();s3=fun2_2();s4=fun2_3();profileviewer;%在profiler窗口顯示各子函數(shù)運(yùn)行時(shí)間profileoff;%關(guān)閉profilerend------------------------------------------Endoffunction------------------------------------------5使用mlint函數(shù)和profile函數(shù)5使用mlint函數(shù)和profile函數(shù)輸出結(jié)果見(jiàn)下圖:profile函數(shù)的輸出結(jié)果從圖中可以看出,fun2子函數(shù)的運(yùn)行時(shí)間最長(zhǎng),需要對(duì)其進(jìn)行修改。因此,在編寫代碼時(shí),可以利用profile函數(shù),獲得代碼中被調(diào)用的子函數(shù)的具體執(zhí)行時(shí)間,從而有針對(duì)性的進(jìn)行修改。6其他代碼優(yōu)化技術(shù)其他代碼優(yōu)化技術(shù)包括:當(dāng)讀取或生成大量的數(shù)據(jù)時(shí),考慮將數(shù)據(jù)進(jìn)行分段,將前一段數(shù)據(jù)讀取或?qū)懭胗脖P后,清空工作空間,再進(jìn)行下一段的操作。當(dāng)矩陣中包含大量的零元素時(shí),考慮用sparse函數(shù)將原矩陣轉(zhuǎn)換成稀疏矩陣。在建立數(shù)值矩陣時(shí),矩陣中每個(gè)元素默認(rèn)采用雙精度(double)數(shù)值類型,當(dāng)要采用其他數(shù)值類型時(shí),最好先用repmat函數(shù)生成矩陣。repmat函數(shù)也可用于方便的增大矩陣的大小和維數(shù)。6.1.2使用MEX文件如前文所述,MATLAB是一種解釋性語(yǔ)言,這使其代碼執(zhí)行效率低。并且很多情況下,不可避免的要使用大量循環(huán)。這些因素使得MATLAB軟件在運(yùn)行速度方面,相比于其他編程語(yǔ)言處于劣勢(shì)。但是,MATLAB軟件提供了與C語(yǔ)言程序交互的應(yīng)用編程接口(API),通過(guò)調(diào)用基于C語(yǔ)言開(kāi)發(fā)的已編譯的MEX文件,可以顯著地加快函數(shù)的運(yùn)行速度,同時(shí),MEX文件還具有隱藏算法的優(yōu)點(diǎn)。事實(shí)上,MATLAB內(nèi)置的函數(shù)很多都是以MEX文件的形式存在?;贑語(yǔ)言的MEX文件是一種動(dòng)態(tài)鏈接子程序(windows系統(tǒng)下為.dll文件),可以像調(diào)用M文件一樣調(diào)用它。MEX文件主要應(yīng)用方式包括:鑒于C語(yǔ)言在循環(huán)迭代方面的運(yùn)行速度遠(yuǎn)遠(yuǎn)超過(guò)MATLAB語(yǔ)言,故MATLAB函數(shù)代碼中的大量循環(huán)迭代部分可以用C語(yǔ)言編寫為MEX文件,提高計(jì)算速度??梢灾苯硬捎肅語(yǔ)言編寫,也可以使用MATLABComplier或mcc命令將M文件自動(dòng)編譯。但是,目前MATLAB的最新版本(MATLAB7之后)已經(jīng)不再支持將M函數(shù)自動(dòng)編譯成MEX文件,而是采用MATLABJIT實(shí)現(xiàn)加速。已經(jīng)開(kāi)發(fā)的C語(yǔ)言程序,通過(guò)添加入口函數(shù)mexFunction,可以實(shí)現(xiàn)由MATLAB調(diào)用。對(duì)于循環(huán)較少的文件
不建議重新編寫為MEX文件形式6.1.3采用并行計(jì)算方式基于MATLAB軟件可以進(jìn)行并行計(jì)算,包括在單個(gè)計(jì)算機(jī)上以及計(jì)算機(jī)機(jī)群(cluster)上的并行計(jì)算。通過(guò)并行計(jì)算,可以充分利用計(jì)算機(jī)的硬件資源,從而使運(yùn)行速度加快。但是,并行計(jì)算方式在使用時(shí)有以下兩個(gè)特點(diǎn):并行計(jì)算方式可以將大規(guī)模的任務(wù)分解為若干個(gè)子任務(wù),再將各個(gè)子任務(wù)發(fā)布給不同的CPU或計(jì)算機(jī)去執(zhí)行,最后把結(jié)果收回。這導(dǎo)致了各個(gè)子任務(wù)之間必須相互獨(dú)立。對(duì)于循環(huán)次數(shù)較多但單個(gè)循環(huán)體執(zhí)行很快的任務(wù),花費(fèi)在任務(wù)調(diào)度上的時(shí)間可能要超過(guò)通過(guò)并行節(jié)省的時(shí)間,這時(shí)不建議采用并行計(jì)算方式。但是,對(duì)于循環(huán)次數(shù)較少或單個(gè)循環(huán)體執(zhí)行耗時(shí)較長(zhǎng)的任務(wù),采用并行計(jì)算方式將大幅度提升計(jì)算速度。6.1.3采用并行計(jì)算方式1基于多核CPU的并行計(jì)算MATLAB軟件提供了并行計(jì)算工具箱(parallelcomputingtoolbox)來(lái)支持并行計(jì)算,常用的并行計(jì)算函數(shù)包括parfor、batch、spmd等。在基于多核CPU的并行計(jì)算中,一般將本地的MATLAB環(huán)境作為Client,而將單個(gè)核作為一個(gè)Worker,具體機(jī)制是在Client上自動(dòng)或手動(dòng)進(jìn)行任務(wù)的調(diào)度分配,再將子任務(wù)發(fā)布到多個(gè)Worker上進(jìn)行計(jì)算。例如,函數(shù)parfor的運(yùn)行機(jī)制如圖所示。parfor的運(yùn)行機(jī)制1基于多核CPU的并行計(jì)算----------------------------------------------fun2_4.m----------------------------------------------functions=fun2_4()%在fun1.m的基礎(chǔ)上,應(yīng)用parfortic;parfori=1:2s(i)=fun1();end;toc;----------------------------------------------Endoffunction---------------------------------------在fun1.m的基礎(chǔ)上,應(yīng)用函數(shù)parfor,代碼如下:1基于多核CPU的并行計(jì)算循環(huán)體運(yùn)行時(shí)間/si=15.722si=26.206si=1&26.264s函數(shù)運(yùn)行時(shí)間對(duì)比單獨(dú)運(yùn)行fun1.m時(shí),其運(yùn)行時(shí)間是5.727s(見(jiàn)6.1.1)但是,從表中可以看出,由于任務(wù)調(diào)度耗時(shí)的影,使得每次運(yùn)行fun1函數(shù)的耗時(shí)有所增加,但是從總體上看,兩次循環(huán)體是以并行方式執(zhí)行,節(jié)省了近一倍時(shí)間。2基于計(jì)算機(jī)機(jī)群的并行計(jì)算機(jī)群是一組獨(dú)立的計(jì)算機(jī)(節(jié)點(diǎn))的集合體,節(jié)點(diǎn)間通過(guò)高性能的互聯(lián)網(wǎng)絡(luò)連接。各節(jié)點(diǎn)除了可以作為一個(gè)單一的計(jì)算資源供交互式用戶使用外,還可以協(xié)同工作表現(xiàn)為一個(gè)單一的、集中的計(jì)算資源供并行計(jì)算任務(wù)使用。MATLAB機(jī)群模型如圖所示,在機(jī)群中利用MATLAB進(jìn)行并行計(jì)算需要安裝并行計(jì)算工具箱PCT(ParallelComputingToolbox)與MATLAB分布式計(jì)算服務(wù)器MDCS(MATLABDistributedComputingServer)。MATLAB機(jī)群模型2基于計(jì)算機(jī)機(jī)群的并行計(jì)算基于MATLAB與計(jì)算機(jī)機(jī)群的并行計(jì)算流程可以表述為:首先,在每臺(tái)參與計(jì)算的計(jì)算機(jī)中啟動(dòng)MATLABDistributedComputingEngine(MDCE)服務(wù),該服務(wù)能夠啟動(dòng)參與計(jì)算的Worker的MATLABSession和管理各臺(tái)計(jì)算機(jī)Workers的JobManager。JobManager對(duì)Workers進(jìn)行管理,給Workers分配計(jì)算任務(wù),接收Workers計(jì)算后的結(jié)果。而Client通過(guò)PCT把工作分解為多個(gè)任務(wù),然后把任務(wù)傳遞給JobManager。JobManager根據(jù)Workers的多少和空閑情況,適當(dāng)?shù)匕讶蝿?wù)分配給Workers完成。Workers完成任務(wù)后,會(huì)把各自的計(jì)算結(jié)果返回給JobManager。當(dāng)所有Workers都返回結(jié)果后,Client就可以從JobManager里取回結(jié)果。2基于計(jì)算機(jī)機(jī)群的并行計(jì)算6.1.4初始化MCR在基于JavaEE平臺(tái)規(guī)范開(kāi)發(fā)的Web平臺(tái)上調(diào)用MATLAB軟件生成的組件時(shí),MCR將自行啟動(dòng),為該組件提供運(yùn)行環(huán)境。但是,MCR的加載需要耗費(fèi)一定的時(shí)間,一般情況下,幾乎等同于啟動(dòng)MATLAB軟件的時(shí)間,尤其是在網(wǎng)絡(luò)上遠(yuǎn)程訪問(wèn)服務(wù)器時(shí),由于網(wǎng)絡(luò)延遲等因素的影響,MCR的啟動(dòng)時(shí)間會(huì)相應(yīng)更長(zhǎng)。因此,本章建議將MCR的啟動(dòng)與Web平臺(tái)的加載相綁定,在加載Web平臺(tái)之后,MCR即自行啟動(dòng),這樣,當(dāng)用戶訪問(wèn)Web平臺(tái)時(shí),MCR已經(jīng)處于運(yùn)行狀態(tài)。初始化MCR的方式是在Web平臺(tái)上添加一個(gè)實(shí)現(xiàn)ServletContextListener接口的應(yīng)用程序環(huán)境對(duì)象(ServletContext)監(jiān)聽(tīng)器,當(dāng)Web服務(wù)器啟動(dòng)時(shí),會(huì)自動(dòng)創(chuàng)建ServletContext對(duì)象,而監(jiān)聽(tīng)類捕捉到此對(duì)象后,只需調(diào)用該對(duì)象的setAttribute方法,通過(guò)初始化任何一個(gè)基于MATLAB軟件生成的組件對(duì)象,就可以完成MCR的初始化。6.1.4初始化MCR6.2系統(tǒng)平臺(tái)輸入輸出優(yōu)化系統(tǒng)平臺(tái)的輸入主要包括:用戶的請(qǐng)求信息,指用戶填寫在頁(yè)面上的參數(shù)配置信息,如進(jìn)行傅里葉變換時(shí)用戶需要在網(wǎng)頁(yè)上指定采用的信號(hào)濾波器、關(guān)心的頻帶范圍及需要的頻率分辨率等。保存在數(shù)據(jù)庫(kù)中的信息。如傳感器的各項(xiàng)參數(shù),包括采樣頻率,部署位置等等。數(shù)據(jù)文件,主要是指監(jiān)測(cè)到的原始數(shù)據(jù)文件,按照橋梁健康監(jiān)測(cè)系統(tǒng)的組成劃分,應(yīng)保存在數(shù)據(jù)管理子系統(tǒng)中,在本章中,數(shù)據(jù)管理子系統(tǒng)部署在數(shù)據(jù)庫(kù)服務(wù)器。系統(tǒng)平臺(tái)的輸出主要包括:用戶關(guān)心的結(jié)果應(yīng)輸出到客戶端瀏覽器上,供用戶查看。用戶配置的一些參數(shù)信息,如有必要,應(yīng)保存在數(shù)據(jù)庫(kù)中,如用戶更改了在線評(píng)估功能的評(píng)估指標(biāo)閥值,新的閥值應(yīng)自動(dòng)替換數(shù)據(jù)庫(kù)中舊的閥值。重要的數(shù)據(jù)分析結(jié)果,應(yīng)自動(dòng)保存在數(shù)據(jù)庫(kù)服務(wù)器中,以文件的形式保存。因此,系統(tǒng)平臺(tái)的輸入輸出內(nèi)容可劃分為兩類:一是用戶自定義及數(shù)據(jù)庫(kù)中的參數(shù)配置信息,特點(diǎn)是簡(jiǎn)單,占用內(nèi)存空間較小;二是文件,包括原始數(shù)據(jù)文件和數(shù)據(jù)處理結(jié)果文件,較之前者更為復(fù)雜,占用內(nèi)存空間很大。將輸入輸出內(nèi)容進(jìn)行合理優(yōu)化,可以提升系統(tǒng)平臺(tái)的運(yùn)行速度,減少占用的內(nèi)存空間,從而增強(qiáng)系統(tǒng)平臺(tái)的整體性能。6.2.1參數(shù)配置信息的優(yōu)化因此,本章建議:首先,在將用戶自定義的或數(shù)據(jù)庫(kù)中的參數(shù)配置信息提交時(shí),應(yīng)事先對(duì)這些信息進(jìn)行編號(hào),盡量以單個(gè)數(shù)值的形式進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,避免使用數(shù)組或字符串等,后者的轉(zhuǎn)換需要耗費(fèi)更長(zhǎng)的時(shí)間及占用更多的內(nèi)存,而在MATLAB算法函數(shù)編程中,采用Switch關(guān)鍵字將不同編號(hào)值對(duì)應(yīng)不同的參數(shù)信息。如在進(jìn)行傅里葉變換時(shí),頁(yè)面上不同的信號(hào)濾波器選項(xiàng)可以設(shè)置為與編號(hào)(1,2,3,4,5….)等一一對(duì)應(yīng),當(dāng)選擇第一個(gè)信號(hào)濾波器時(shí),傳遞給基于MATLAB軟件生成組件的輸入?yún)?shù)是數(shù)值1對(duì)應(yīng)的MWArray子類對(duì)象,而組件對(duì)應(yīng)的算法函數(shù)直接根據(jù)編號(hào)1對(duì)應(yīng)的濾波器進(jìn)行計(jì)算。6.2.1參數(shù)配置信息的優(yōu)化數(shù)據(jù)轉(zhuǎn)換類的層次結(jié)構(gòu)圖按照前文介紹的數(shù)據(jù)類型轉(zhuǎn)換的概念,參數(shù)配置信息先被轉(zhuǎn)換成MWArray類及其子類類型(如圖),然后傳給基于MATLAB軟件生成的組件。數(shù)據(jù)類型的轉(zhuǎn)換需要耗費(fèi)一定的時(shí)間,且需要占用內(nèi)存空間。6.2.1參數(shù)配置信息的優(yōu)化其次,采用配置文件的方式代替部分參數(shù)配置信息。實(shí)際上,在進(jìn)行數(shù)據(jù)處理的算法函數(shù)編程時(shí),經(jīng)常存在多種數(shù)據(jù)處理方法,每種處理方法對(duì)應(yīng)不同的配置參數(shù),這些配置參數(shù)一般是較多的,但往往比較固定,不需要進(jìn)行修改,或者需要專業(yè)的研究人員來(lái)修改,因而,也不需要保存在數(shù)據(jù)庫(kù)中。這時(shí),建議采用配置文件的方式設(shè)置這些配置參數(shù),可以保存在MATLAB的*.mat文件中,當(dāng)調(diào)用組件內(nèi)的方法需要上述參數(shù)時(shí),直接在底層的算法函數(shù)中采用load函數(shù)加載*.mat文件即可。采用這種方式有兩個(gè)優(yōu)點(diǎn):第一是通過(guò)配置文件加載的參數(shù)不需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,節(jié)省運(yùn)行時(shí)間和內(nèi)存空間;第二是研究人員可以很方便的通過(guò)修改配置文件,實(shí)現(xiàn)自己的目的。6.2.2文件訪問(wèn)的優(yōu)化原始數(shù)據(jù)文件一般占用內(nèi)存空間較大,當(dāng)基于Java語(yǔ)言讀取原始數(shù)據(jù)文件時(shí)并傳給基于MATLAB軟件開(kāi)發(fā)的組件時(shí),就面臨大量原始數(shù)據(jù)的類型轉(zhuǎn)換問(wèn)題,這將耗費(fèi)較多的時(shí)間。因此,本章建議,當(dāng)出現(xiàn)上述情況時(shí),可以通過(guò)系統(tǒng)平臺(tái)上的
Java應(yīng)用自動(dòng)將原始數(shù)據(jù)文件復(fù)制到組件所在機(jī)器上,并傳給組件該文件的路徑字符串,經(jīng)過(guò)數(shù)據(jù)類型轉(zhuǎn)換后,組件底層的MATLAB算法函數(shù)根據(jù)數(shù)據(jù)文件路徑讀取數(shù)據(jù)文件并進(jìn)行處理。采用這種方式,就避開(kāi)了大量原始數(shù)據(jù)的類型轉(zhuǎn)換問(wèn)題,節(jié)省了時(shí)間和內(nèi)存空間。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年撰寫:中國(guó)替普瑞酮行業(yè)發(fā)展趨勢(shì)及競(jìng)爭(zhēng)調(diào)研分析報(bào)告
- 2024-2030年撰寫:中國(guó)平流沉淀池項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2024-2030年撰寫:中國(guó)PP多層共擠管項(xiàng)目風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2024-2030年吾琰搬遷改造項(xiàng)目可行性研究報(bào)告
- 2024-2030年鹵素和油加熱器搬遷改造項(xiàng)目可行性研究報(bào)告
- 2024-2030年獸醫(yī)手術(shù)鉗行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 2024-2030年全球及中國(guó)高爾夫橡膠握把行業(yè)銷售態(tài)勢(shì)及競(jìng)爭(zhēng)趨勢(shì)預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)鋼筋網(wǎng)焊接機(jī)行業(yè)供需現(xiàn)狀及投資前景展望報(bào)告
- 2024-2030年全球及中國(guó)視頻車位檢測(cè)終端行業(yè)發(fā)展形勢(shì)及前景戰(zhàn)略研究報(bào)告
- 2024-2030年全球及中國(guó)聚氨酯預(yù)聚體(PPU)前景動(dòng)態(tài)與投資盈利預(yù)測(cè)報(bào)告
- 汽車4S店6S管理
- 統(tǒng)編版高中語(yǔ)文必修一《故都的秋》《荷塘月色》比較閱讀-課件
- 醫(yī)療集團(tuán)組織架構(gòu)
- 電光調(diào)制實(shí)驗(yàn)報(bào)告
- 外研版二年級(jí)上冊(cè)英語(yǔ)試卷
- 收款憑證(自制Word打印版)
- 鑄鐵閘門檢驗(yàn)標(biāo)準(zhǔn)
- 某公司項(xiàng)目部質(zhì)量管理體系及制度
- 關(guān)于開(kāi)展全員營(yíng)銷活動(dòng)的實(shí)施方案
- 碩士開(kāi)題報(bào)告和文獻(xiàn)綜述模板-北京理工大學(xué)研究生院
- 俄語(yǔ)視聽(tīng)說(shuō)基礎(chǔ)教程1
評(píng)論
0/150
提交評(píng)論