elw*_*lwc 23 parallel-processing matlab for-loop vectorization
我读过这篇文章,但我仍然不明白为什么矢量化代码更快.
在for循环中,我可以使用parfor进行并行计算.如果矢量化代码更快,是否意味着它会自动并行化?
car*_*sdc 19
不,你要混合两个重要概念:
例如,考虑一个简单的案例,如下所示:
s=0;
for i=1:length(v),
s = s+v(i);
end
Run Code Online (Sandbox Code Playgroud)
和
sum(v)
Run Code Online (Sandbox Code Playgroud)
你应该使用tic和toc来计算这两个函数的时间来说服自己在运行时的差异.有迹象表明,在载体操作约10类似常用的功能,实例是:bsxfun,repmat,length,find.矢量化是有效使用MATLAB的标准部分.除非你能有效地矢量化代码,否则你只是MATLAB世界的游客而不是公民.
虽然在很多情况下parfor可以帮助很多,但很少会出现非常大的增益.
Kla*_*CPH 15
我同意carlosdc的回答.但是,重要的是要记住,自6.5版以来,Matlab已经包含了一个JIT编译器,用于加速for循环等.
我用一百万个元素对你的总和例子进行了快速测试,v得到了以下结果:
sum(v):4.3毫秒 for-loop version :16毫秒for-loop version, no JIT :966毫秒可以像这样打开和关闭JIT:
feature accel off
feature accel on
Run Code Online (Sandbox Code Playgroud)
通过矢量化代码改进的因子4当然仍然值得,但for循环不应该被担心,因为它们曾经是针对问题,否则它们是一个很好的解决方案.通常,一段很好的矢量化代码通常可以更简单,更不容易出错并且同时更快.