gpt4 book ai didi

c++ - 算法与预编译引用实现的速度比因计算机而异

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:58 25 4
gpt4 key购买 nike

我们有一个具有以下架构的小型 C++ 项目。

这两个被编译成一个DLL:

  • 一个算法
  • 算法测试人员,检查结果的正确性并测量执行速度。

然后由其他人编写相同算法的另一个实现。

main() 函数执行此操作:

  • 在算法的两个实现上调用测试器并测量它们的执行速度。这样做几次,以便以后可以取平均值。
  • 计算它们之间的速度比(测量时间/测量引用时间)。这被称为分数。

我们发现在不同的计算机上运行完全相同的代码和 DLL 会返回完全不同的速度比。在一台计算机上,一个实现得分为 6.4,而在另一台计算机上,同样的实现得分为 2.8。怎么可能?

最佳答案

可能有很多因素,但这里有几个:

  • CPU 缓存可以很大。不同的处理器有不同的缓存(不仅是原始缓存大小,还有缓存策略)。一个人可能比另一个人“更聪明”,或者在这种特定情况下,一个人可能恰好比另一个人工作得更好。
  • CPU 流水线。现在的指令在 CPU 中是交错的,即使是在单个执行线程中也是如此。 CPU 流水线的工作方式因 CPU 而异,一个 CPU 可能可以同时处理两个特定的事情,而另一个 CPU 则不能。如果其中一个实现利用了这一点,那么它会获得速度提升(或者如果它们都这样做,那么它们都会接近相同的速度)。
  • CPU 指令执行时间可能会有所不同。因此,一个 CPU 执行与另一个 CPU 完全相同的指令可能能够比另一个 CPU 更快地执行每一个指令。如果一台计算机的 CPU 需要更长的时间来使用特定指令(并且其中一个实现恰好使用该指令),而另一个 CPU 已经改进以加快该指令的执行时间,那么就会有更大的时间差异。
  • CPU 中的分支预测模型可能不同,并且一种实现可能或多或少对特定 CPU 的分支预测模型友好。
  • 操作系统可以通过多种方式影响这一点,从内存分配策略(可能一个操作系统的内存分配策略导致时间上的差异较大,而另一个操作系统具有不同的分配策略以最小化差异),到 CPU 时间切片管理(例如,算法是多线程的吗?)。

关于c++ - 算法与预编译引用实现的速度比因计算机而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20722452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com