日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

加速matlab運(yùn)行

 dzh1121 2011-01-30

加速matlab運(yùn)行

一、 遵守Performance Acceleration的規(guī)則
二、 遵守三條規(guī)則



一、 遵守Performance Acceleration的規(guī)則
關(guān)于什么是“Performance Acceleration”請(qǐng)參閱matlab的幫助文件。我只簡(jiǎn)要的將
其規(guī)則總結(jié)如下7條:1、只有使用以下數(shù)據(jù)類型,matlab才會(huì)對(duì)其加速:logical,char,int8,uint8,int16,uint16,int32,uint32,double
而語句中如果使用了非以上的數(shù)據(jù)類型則不會(huì)加速,如:numeric,cell,structure,single,
function handle,java classes,user classes,int64,uint64
2、matlab不會(huì)對(duì)超過三維的數(shù)組進(jìn)行加速。3、當(dāng)使用for循環(huán)時(shí),只有遵守以下規(guī)則才會(huì)被加速:a、for循環(huán)的范圍只用標(biāo)量值
來表示;
b、for循環(huán)內(nèi)部的每一條語句都要滿足上面的兩條規(guī)則,即只使用支持加速的數(shù)
據(jù)類型,只使用
三維以下的數(shù)組;c、循環(huán)內(nèi)只調(diào)用了內(nèi)建函數(shù)(build-in function)。4、當(dāng)使用if、elseif、while和switch時(shí),其條件測(cè)試語句中只使用了標(biāo)量值時(shí),將
加速運(yùn)行。
5、不要在一行中寫入多條操作,這樣會(huì)減慢運(yùn)行速度。即不要有這樣的語句:
x = a.name; for k=1:10000, sin(A(k)), end;
6、當(dāng)某條操作改變了原來變量的數(shù)據(jù)類型或形狀(大小,維數(shù))時(shí)將會(huì)減慢運(yùn)行速
度。 (因?yàn)闀?huì)重新分配內(nèi)存,所以,我們需要事先分配好內(nèi)存)
7、應(yīng)該這樣使用復(fù)常量x = 7 + 2i,而不應(yīng)該這樣使用:x = 7 + 2*i,后者會(huì)降低
運(yùn)行速度。

二、 遵守三條規(guī)則
1、盡量避免使用循環(huán),MATLAB的文檔中寫到“MATLAB is a matrix language, which means it is designed
for vector and matrix operations. You can often speed up your M-file c
ode by using
vectorizing algorithms that take advantage of this design. Vectorizati
on means converting
for and while loops to equivalent vector or matrix operations.”。改進(jìn)
這樣的狀況有兩種方法:
a、盡量用向量化的運(yùn)算來代替循環(huán)操作。如將下面的程序:
i=0;
for t = 0:.01:10
i = i+1;
y(i) = sin(t);
end
替換為:
t = 0:.01:10;
y = sin(t);
速度將會(huì)大大加快。最常用的使用vectorizing技術(shù)的函數(shù)有:All、diff、ipermute、permute、reshape、 squeeze、any、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、ndgrid、 repmat、sort、sum 等。
請(qǐng)注意matlan文檔中還有這樣一句補(bǔ)充:“Before taking the time to
vectorize your code, read the section on Performance Acceleration.
You may be able to
speed up your program by just as much using the MATLAB JIT Accelera
tor instead of vectorizing.”。何去何從,自己把握。
b、在必須使用多重循環(huán)時(shí)下,如果兩個(gè)循環(huán)執(zhí)行的次數(shù)不同,則在循環(huán)的外環(huán)執(zhí)
行循環(huán)次數(shù)少的,
內(nèi)環(huán)執(zhí)行循環(huán)次數(shù)多的。這樣可以顯著提高速度。
2、a、預(yù)分配矩陣空間,即事先確定變量的大小,維數(shù)。這一類的函數(shù)有zeros、ones、cell、struct、repmat等。
b、當(dāng)要預(yù)分配一個(gè)非double型變量時(shí)使用repmat函數(shù)以加速,如將以下代碼:
A = int8(zeros(100));
換成:
A = repmat(int8(0), 100, 100);
c、當(dāng)需要擴(kuò)充一個(gè)變量的大小、維數(shù)時(shí)使用repmat函數(shù)。
3、a、優(yōu)先使用matlab內(nèi)建函數(shù),將耗時(shí)的循環(huán)編寫進(jìn)MEX-File中以獲得加速。b、使用Functions而不是Scripts 。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多