作者KingSteven (HHung)
看板MATLAB
標題Re: [問題] 矩陣維度與運算速度之間的關係
時間Sat Dec 17 15:47:41 2011
※ 引述《KingSteven (HHung)》之銘言:
: 我現在有一筆五維資料f
: 其大小為a*b*c*d*3
: 接著我做迴圈運算如下
: for a = 1:A
: for b = 1:B
: for c = 1:C
: for d = 1:D
: f(a,b,c,d,:) = f(a,b,c,d,:) - mod(f(a,b,c,d,:),5);
: end
: end
: end
: end
: 接著我試另一筆四維資料g
: g是從f中取出來
: g = squeeze(f(:,:,:,:,1))
: 然後跑一樣的計算
: for a = 1:A
: for b = 1:B
: for c = 1:C
: for d = 1:D
: g(a,b,c,d) = g(a,b,c,d) - mod(g(a,b,c,d),5);
: end
: end
: end
: end
: 問題來了
: 我原本以為速度只差在每個迴圈中1維和3維的差異而已
: 運算速度應該就是3:1這樣而已
: 但實際跑卻發現速度差了40幾倍@@
: 這是為什麼?
: 難道說
: f(a,b,c,d,1) = f(a,b,c,d,1) - mod(f(a,b,c,d,1),5)
: 和
: g(a,b,c,d) = g(a,b,c,d) - mod(g(a,b,c,d,),5);
: 的運算速度有明顯差異嗎??
發現一個神奇的事情!!!
我一開始的計時方式是在最外層設tic和toc
結果時間比約42:1
接著我試另外一方式
我把迴圈裡每一個operation所花的時間都記下來
再把這A*B*C*D筆時間資料全加起來
這樣算出來第一個迴圈時間沒什麼差
第二個迴圈卻變慢許多
(我先說,我並沒有把執行tic、toc要花的時間算進去)
最後時間比約2:1
變得合理許多!!!!!!
莫非是
Matlab在某些條件下
會自己開外掛?!
這樣加速實在太猛了...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.15.114
1F:推 LoseProphet:平行? 12/18 11:02
2F:推 perceval:JIT? 12/18 11:33
3F:→ KingSteven:什麼時候它會開平行處理阿? 12/20 09:39