推奨する索引付け方法を選択しようとしているうちに、パフォーマンスを評価しようとしました。しかし、測定値は私をたくさん混乱させました。私はこれを複数の異なる順序で実行しましたが、測定値は一貫しています。索引作成のパフォーマンス
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で、たまたまここ は、私は、パフォーマンスを測定する方法です。
私の質問です:他の誰かがこれを特定の範囲で経験していますか? (これはバグですか?)
さて、私は間違いなく '腹筋を想定し、それは本当に2つの操作を行っているので、(X)> 0 '遅くなるだろうが、100000のN裁判でしょう、これに従っていません。奇妙な。しかし、私はほとんどの場合、 'x〜= 0'を使うのは1つの操作しかしないためです。また、2つの違いは、私にとってはそれほど高くないことに注意してください。 3回目の試行は0.4秒だけではなく、1.5 – MZimmerman6
であり、私の唯一の考えは、100k試行でバックグラウンドで起こっていることでしょう。 – MZimmerman6
私は同じことを見ていますが、それほど激しくはありません(R2012b、OS X 10.8.4)。私は 'abs(x)> 0'が2つの操作を行うと仮定しません。 JITがコンパイルされると、符号ビットは比較で無視できます。実際には、より複雑な(x> 0 | x <0)に相当する 'x〜= 0'のケースです。サイズの違いの理由の1つに[cache missing](https://en.wikipedia.org/wiki/CPU_cache#Cache_miss)があります。詳しくは[こちら](http://stackoverflow.com/questions)で説明しています。/8547778/why-is-one-loop-so-much-two-loopsよりも遅い)。 – horchler