Quantcast
Channel: Programming – Gea-Suan Lin's BLOG
Viewing all articles
Browse latest Browse all 134

Benchmark 去除迴圈的 Overhead

$
0
0

Lobsters 上看到「Accurate Benchmarking」這篇,裡面提到了一個簡單的方式解決 loop 的 overhead 問題。

起因是有些 function 速度很快,要 benchmark 的時候通常會加上 loop,像是這樣:

const start = performance.now();

for (let i = 0; i < iterations; i++) {
  fn();
}

const end = performance.now();

但這個方式算出來的時間包括了 loop 的 overhead,作者提出的概念是跑兩次迴圈,一個跑一次 fn(),另外一個跑兩次 fn(),兩個成績相減就可以把 loop overhead 消掉:

const start = performance.now();

for (let i = 0; i < iterations; i++) {
  fn();
  fn();
}

const end = performance.now();

算是個簡單的方法,應該是蠻多場景可以用的... 想得到會出問題的地方... 有 side effect 的 fn() (像是有另外的空間存 cache,或是撞到 CPU cache 效應?),另外一種是 compiler 對這塊的 optimization 做的超強?


Viewing all articles
Browse latest Browse all 134