在試圖選擇推薦的索引方法時,我嘗試着去衡量性能。然而,這些測量讓我困惑不已。我以不同的順序多次執行此操作,但測量結果保持一致。 這裏是我如何測量性能:創建索引的性能
for N = [10000 15000 100000 150000]
x = round(rand(N,1)*5)-2;
idx1 = x~=0;
idx2 = abs(x)>0;
tic
for t = 1:5000
idx1 = x~=0;
end
toc
tic
for t = 1:5000
idx2 = abs(x)>0;
end
toc
end
這是結果:
Elapsed time is 0.203504 seconds.
Elapsed time is 0.230439 seconds.
Elapsed time is 0.319840 seconds.
Elapsed time is 0.352562 seconds.
Elapsed time is 2.118108 seconds. % This is the strange part
Elapsed time is 0.434818 seconds.
Elapsed time is 0.508882 seconds.
Elapsed time is 0.550144 seconds.
我檢查和周邊的100000值也會發生這種情況,甚至在50000出現奇怪的測量。
所以我的問題是:有沒有其他人在一定範圍內遇到這種情況,是什麼原因造成的? (這是一個錯誤?)
那麼我肯定會承擔'ABS(X)> 0'就慢,因爲它是真正做2次運算,但10萬的N個審判,不遵循這一點。奇怪。但是我幾乎總是使用'x〜= 0',因爲它只執行一個操作。還要注意,兩者之間的差別對我而言並不像對你那麼高。第三次審判只是0.4秒而不是1.5 – MZimmerman6
我唯一的想法就是在背景中有一些奇怪的內存分配在100k試用版拋出 – MZimmerman6
我看到相同的東西,但沒有那麼激烈(R2012b,OS X 10.8.4)。我不會「假設」abs(x)> 0'執行兩個操作。一旦編譯了JIT,比較中的符號位可以被忽略。它實際上是'x〜= 0'情況更復雜(相當於'x> 0 | x <0')。大小之間差異的一個可能的原因可能是[cache missing](https://en.wikipedia.org/wiki/CPU_cache#Cache_miss),詳細討論[here](http://stackoverflow.com/questions/8547778 /爲什麼,是一環那麼多,慢於雙循環)。 – horchler