作者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