我读过这个 ,但我还是不明白,为什么量化代码更快。
在for循环中,我可以使用PARFOR用于并行计算。 如果量化代码是快,不就意味着它是自动并行化?
我读过这个 ,但我还是不明白,为什么量化代码更快。
在for循环中,我可以使用PARFOR用于并行计算。 如果量化代码是快,不就意味着它是自动并行化?
号你混合两个重要概念:
例如,考虑一个简单的情况下,如以下内容:
s=0;
for i=1:length(v),
s = s+v(i);
end
和
sum(v)
你应该用TIC和TOC时间这两个函数来说服运行系统中的差异的自己。 有迹象表明,在载体操作约10类似常用的功能,实例是: bsxfun
, repmat
, length
, find
。 矢量化是有效地利用MATLAB的一个标准部分。 直到你可以向量化代码有效,你只是在MATLAB的世界旅游不是公民。
虽然在很多情况下PARFOR可以有很大的帮助,可以parfored非常大的收益循环的类型罕发生。
我同意他的回答carlosdc。 然而,要记住,Matlab的自6.5版本已经包含了JIT编译器加快for循环和喜欢它是非常重要的。
我做了你和示例的快速测试,在一百万个元素v
,得到了以下结果:
sum(v)
:4.3毫秒 for-loop version
:16毫秒 for-loop version, no JIT
:966毫秒 该JIT可以打开和关闭这样打开:
feature accel off
feature accel on
通过矢量化码的因素4的改进当然仍常值得的,但因为他们曾经是的,他们是另有一个很好的解决问题的for循环不应该担心。 时常想起,一块好量化代码往往可以更简单,更容易出错,速度更快的同时。
在现代计算机中,寄存器(临时存储器用于数学,其他用途)有许多位,并可以操纵多个号码一起。 例如,如果你的数据是UINT8(8位),您可以在一个CPU时钟将号码添加到每个人,或者你可以把8人一起在寄存器和一个数字都掌握在一个CPU时钟。 这样,你的工作比for循环快8倍。
这在某种意义上是并行的,但不喜欢PARFOR。 PARFOR使用CPU的多个核,和在上述方法中一个芯被更有效地使用。 如果你使用他们两个,你甚至可以达到更高的速度。