基准测试超过 CPU 频率
Benchmark exceeding CPU frequency
我正在使用 benchmark.js 来计时函数的两个版本,一个在 JS 中,一个在 C++ 中(节点.js绑定)。
C++版本是一个 for 循环,具有单个编译器内部函数(2 个周期延迟 + 0.5 个周期吞吐量):
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.0 GHz) 快。怎么会这样?(我已经测试过该函数在基准测试套件之外工作。
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
如果没有更多的上下文,很难确切地说出来,但可能是以下一项或多项:
-
编译器使用 PSHUFB 等指令一次对多个元素进行字节交换。(PSHUFB 在支持 AVX2 的处理器上一次最多可以交换 16 个单词。
-
流水线效应允许处理器同时处理此循环的多次迭代。
-
您的基准测试存在问题,它允许优化整个计算。(不太可能,但值得一提。
相关文章:
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在指针的帮助下,文本文件中单词的频率
- 函数计算用户按下按钮的频率
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 在条件变量中触发错误信号的频率是多少
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何禁用 CPU 的无序执行
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 分别测量每个线程上花费的 CPU 时间(C++)
- 如何在 c++ 中循环中使用频率变化的声音?
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 查找给定范围内最长连续 1 的频率
- 字母 字母频率
- 基准测试超过 CPU 频率
- C++Linux获得CPU标称频率
- 在获取CPU频率方面需要一些帮助
- 找出CPU时钟频率(每个核心,每个处理器)
- 如何计算CPU内核的频率