亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數組可以明顯慢于MATLAB中的顯式循環。為什么?

數組可以明顯慢于MATLAB中的顯式循環。為什么?

慕俠2389804 2019-06-20 15:34:47
數組可以明顯慢于MATLAB中的顯式循環。為什么?考慮以下簡單的速度測試arrayfun:T = 4000;N = 500;x = randn(T, N);Func1 = @(a) (3*a^2 + 2*a - 1);ticSoln1 = ones(T, N);for t = 1:T     for n = 1:N         Soln1(t, n) = Func1(x(t, n));     endendtocticSoln2 = arrayfun(Func1, x);toc在我的機器上(LinuxMint 12上的Matlab2011B),這個測試的輸出是:Elapsed time is 1.020689 seconds.Elapsed time is 9.248388 seconds.什么????arrayfun雖然無可否認,這是一個更干凈的解決方案,但速度卻慢了好幾個數量級。這里發生什么事情?此外,我還做了類似的測試cellfun發現它比一個顯式循環慢了大約3倍。同樣,這個結果與我所期望的相反。我的問題是:為什么arrayfun和cellfun這么慢?考慮到這一點,是否有充分的理由使用它們(除了使代碼看起來很好)?注:我說的是標準版本的arrayfun這里,不是來自并行處理工具箱的GPU版本。編輯:我只想說清楚,我知道Func1如Oli所指出的,可以將上面的內容矢量化。我之所以選擇它,只是因為為了實際問題的目的,它產生了一個簡單的速度測試。編輯:按照格倫蓋塔的建議,我重新做了測試feature accel off..結果如下:Elapsed time is 28.183422 seconds.Elapsed time is 23.525251 seconds.換句話說,很大一部分區別在于JIT加速器在加速顯式方面做得更好。for循環arrayfun..這對我來說很奇怪,因為arrayfun實際上提供了更多的信息,即它的使用揭示了調用的順序Func1沒關系。另外,我注意到無論JIT加速器是打開還是關閉,我的系統都只使用一個CPU.
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

因為!

x = randn(T, N);

不是gpuarray類型;

你要做的就是

x = randn(T, N,'gpuArray');


查看完整回答
反對 回復 2019-06-20
  • 2 回答
  • 0 關注
  • 833 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號