【发布时间】:2016-02-05 04:39:36
【问题描述】:
我要买一台新电脑。太好了,但我想知道它的速度有多快。
现在我可以使用已经建立的基准 - 但我想了解为什么它更快。
所以我的想法是:
1. 编写小型基准测试来测试非常具体的东西
2. 使用 -march=native
编译两次
3. 分析和比较
现在我只需要提出基准:
- 在 GB 范围内使用 memcpy()、memset() 和 memchr() 来测试 RAM 速度
- 用于测试 SIMD 指令的向量(或矩阵)运算
- 暴力破解平方根以测试一般指令速度和流水线
- 简单的算术(x[i]++ 或其他东西)来测试缓存
- 用 2,3 和 4 个不同值的模式填充数组。
对于每个不同的值(一个带有 if/else 的测试,一个带有 switch 的测试)做一些小事情。
那应该测试分支预测器。
我错过了一个功能吗?可以简化这些基准吗?对于我认为已经涵盖的 CPU 功能,还有其他/更好的测试吗?
【问题讨论】:
-
现代 CPU 具有数百个微架构“功能”以及 ILP、内存/缓存带宽、预取、节能等方面的优化。每一个在常见或极端情况下都有特殊行为。所以是的,你很可能错过了一个功能。
标签: caching x86-64 pipeline simd branch-prediction