Matlab是否使用分支预测来提高性能?也就是说,如果我们将这些陈述展示出来:Matlab中的分支预测
if a > 0
b = b + 1
end
...
b = b + (a > 0)
它会加快速度吗?
PS:我不明白,这个具体的例子可能永远不会在任何语言中加快速度,但想象更复杂的东西,即与嵌套,如果公司或多个条件几个else语句...
Matlab是否使用分支预测来提高性能?也就是说,如果我们将这些陈述展示出来:Matlab中的分支预测
if a > 0
b = b + 1
end
...
b = b + (a > 0)
它会加快速度吗?
PS:我不明白,这个具体的例子可能永远不会在任何语言中加快速度,但想象更复杂的东西,即与嵌套,如果公司或多个条件几个else语句...
当然,如果你有类似的东西
if a > 0
b = b + <outcome of some super time consuming calculation>
end
...
b = b + (a > 0) * <outcome of some super time consuming calculation>
第一个案件将赢得双手下降。显然,你应该如何构建你的代码。
但是对于比较简单的情况,例如您建议的情况,唯一的办法就是查看配置文件。
clc
N = 1e2;
tend = 0;
for ii = 1:N
tstart = tic;
b = 0;
for jj = 1:1e5
a = randn;
if a > 0
b = b + 1;
end
end
tend = tend + toc(tstart);
end
tend/N
tend = 0;
for ii = 1:N
tstart = tic;
b = 0;
for jj = 1:1e5
a = randn;
b = b + (a > 0);
end
tend = tend + toc(tstart);
end
tend/N
首先运行:
ans =
1.000391000000000e-02
ans =
5.645930000000001e-03
第二轮:
ans =
5.761880000000000e-03
ans =
5.599670000000002e-03
第三轮:
ans =
6.127599999999998e-03
ans =
5.800120000000002e-03
等。
所以,是的,那里似乎是一个性能损失,由于分支,虽然我们不能确定它实际上是由于分支预测怪癖或MATLAB的解释器/ JIT做一些奇怪的与if-else
结构...
由于总是,如果它的性能和细节控制你想要的,不要使用MATLAB,使用C.这种事情根本不是什么MATLAB的。
什么具体问题激励你问这个问题? –
这是一个普遍的问题,我想尽可能地给出答案:)我只是想知道,我用于C++的那些优化原则是否适用于此处以及程度如何。 – sashkello
听起来像是我过早的优化 - 你应该测量/配置文件的性能,只有当你确定了一个特定的瓶颈,然后看看如上所述的微观优化。 –