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
聽起來像是我過早的優化 - 你應該測量/配置文件的性能,只有當你確定了一個特定的瓶頸,然後看看如上所述的微觀優化。 –