Re: [問題] 矩陣維度與運算速度之間的關係

看板MATLAB作者 (HHung)時間14年前 (2011/12/17 15:47), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

12/18 11:02, , 1F
平行?
12/18 11:02, 1F

12/18 11:33, , 2F
JIT?
12/18 11:33, 2F

12/20 09:39, , 3F
什麼時候它會開平行處理阿?
12/20 09:39, 3F
文章代碼(AID): #1Ex4aVyH (MATLAB)
文章代碼(AID): #1Ex4aVyH (MATLAB)