3

我在汇编中编写了一个算术整数库。我想估计与我的处理器(英特尔 Sandy Bridge)的峰值性能相比的性能。

由于 Sandy Bridge 的 3 个 ALU 执行整数运算,“3 *(内核数)*频率”是否足以进行估算?我的 99% 的程序集都是addq, adcq, mulq指令)。

4

2 回答 2

1

不。

有许多因素会影响任何代码的速度。诸如导致停顿的指令之间的依赖关系、缓存访问和缓存速度、缓存未命中和 RAM 速度等。

特别是对于 Sandy Bridge,还有超线程(这些 ALU 由 2 个逻辑 CPU 共享)以及涡轮增压和电源管理。然后是分页(TLB 查找和 TLB 未命中)。

最重要的是,还有操作系统开销;包括内核解决页面错误的速度(用于各种“写入时复制”和“写入时分配”目的),如何跨 CPU 调度所有工作,发生多少任务切换以及它们有多快,互斥锁/ futexes 被处理,等等。

于 2012-11-09T14:10:30.377 回答
0

如果我们谈论的是 1980 年代的处理器,例如 8086 或 68000,那么这将是有效的,每条指令都会在固定的时间内运行。

现代处理器变得非常难以手动进行基准测试,因为它们采用了许多技巧来使指令运行得更快、大缓存、流水线、乱序指令执行等。最好的方法是对代码进行计时。在进行基准测试时,您还应该考虑在其他内核中运行的代码的影响。您的进程可以根据处理器上的整体负载以不同的速度运行,例如在最新的 i7 芯片中。

于 2012-11-09T14:09:35.107 回答