私はbenchmark.jsを使って、JSとC++(node.jsバインディング)の2つのバージョンの関数を処理しています。CPU周波数を超えるベンチマーク
C++バージョンがある固有の単一のコンパイラ(2サイクルのレイテンシ+ 0.5サイクルスループット)とのforループ:
for (size_t i = 0; i < arrlen; i++) {
#if defined(_MSC_VER)
(*events)[i] = _byteswap_ushort((*events)[i]);
#elif defined(__GNUC__)
(*events)[i] = __builtin_bswap16((*events)[i]);
#endif
}
私はそれが速いことを期待...しかし、それは私のCPUの周波数よりも高速のクロッキングいます(4.0GHz)。どのようにこれが起こっていることができますか? (私は関数は、ベンチマークスイートの外で動作することをテストしている。)
native: 17,253,787,071 elements/sec (10k elements in array * 1,725,379 calls/sec)
JS: 846,298,297 elements/sec (10k elements in array * 84,630 calls/sec)
// both ~90 runs sampled
ベクトル化と[スーパースカラー処理](https://en.wikipedia.org/wiki/Superscalar_processor)。 – Cornstalks