【问题标题】:C++ application performance timeC++ 应用程序执行时间
【发布时间】:2015-05-04 20:19:00
【问题描述】:

我有一个来自我遇到的特定情况的一般性问题。

一般问题:什么决定了在 Windows 上用 C++ 编写的应用程序在 MinGW 编译器下的运行时间(计算时间、执行时间)?

具体情况:我最近买了一台新电脑。在运行和测试我在旧机器上编写的相同程序时,我发现不仅没有加速,而且性能也下降了。两者都运行 Windows 7 操作系统。

较旧的工作站:i7-3770 Core 4 核处理器、8 GB RAM 和硬盘驱动器。

较新的设置:e5-2660 v3 Xeon 10 核处理器、32 GB RAM 和 HDD。

没有完全加速可能是因为没有 SSD 内存类型,但这仍然不能解释为什么新计算机比旧计算机慢。我进行了 passmark 分数测试,在所有类别中,新计算机都优于旧计算机。尽管如此,我自己的 C++ 程序和一些第三方应用程序在新机器上的运行速度都比较慢。怎么会这样?我应该检查一些特定的软件类型限制吗?

我也欢迎有关性能主题的任何建议,因为我计划运行计算密集型、多线程应用程序,因此性能是一个重要问题。

【问题讨论】:

  • 程序是多线程程序吗?如果是单线程程序,看看这个:gotw.ca/publications/concurrency-ddj.htm
  • 4 @ 3.9 GHz 与 10 @ 2.2 GHz,尤其是如果您没有使用这 10 个内核中的所有...简单的数学运算。
  • @NathanOliver:我已经在单线程和多线程程序上进行了测试。正如 crashmstr 所指出的,单线程应该会慢一些(尽管它实际上是:4 * 3.4 GHz vs 10 * 2.6 GHz)。但是,最让我担心的是,即使是在新机器上运行在 20 个线程上的(多线程)程序也比在旧的 8 个线程上运行的程序慢大约 2-3 倍。
  • @Qurious 单线程程序的速度仅与 oe 内核一样快——“尽管它实际上是:4 * 3.4 GHz 与 10 * 2.6 GHz”没有任何意义。它是 1*3.4 GHz 与 1* 2.6 GHz,无论两个 CPU 有多少内核。我希望 Xeon 能够通过具有 10 个(或 20 或 200 个)线程的程序赢得胜利。
  • @PeterSchneider:我理解,你是对的。最让我担心的是多线程程序上较慢的执行时间。尽管单线程程序的减速也很大,至少对我的直觉来说有点太大了; 3.4 与 2.6 GHz 相差 30%,在旧机器上运行 3 分钟的单线程程序应该在新机器上运行(所有其他条件相同)大约 4 分钟。测量结果更像是 3 分钟而不是 9 分钟,这就是为什么我怀疑是其他原因导致减速的原因。

标签: c++ performance


【解决方案1】:

由于应用程序使用 CPU、内存和磁盘,所有这些都会影响应用程序的执行速度。

在您的情况下,您从具有 4 个快速内核的 4 核 cpu 更改为具有 10 个但速度较慢的内核的 10 核 cpu,这实际上降低了每个线程的执行速度。

取决于你做什么,例如如果计算/内存压力的比率偏向计算侧,您会看到速度变慢。

【讨论】:

  • 是否没有我可能设置不正确的基于软件的选项,这可能会进一步降低计算机速度?正如上面的 cmets 中所提到的,在我的具体情况下,即使是多线程应用程序也经历了严重的减速。
  • 这非常依赖于应用程序。软件设置是不可能的。想象一下……您有一个使用 4 个线程的软件。如果计算/内存压力比保持不变,您将继续看到性能下降。即使您使用超过 4 个线程,也可能存在您不知道的 4 个核心问题,例如争用、锁定等。
  • 这里有很多未知数可以稍微澄清一下。例如,您使用的是操作系统 apis 吗?你如何分配/读/写内存?有抄袭吗?例如。缓存系统在多核 cpu 上的工作方式有点违反直觉。使用 4 个内核,您可以体验到更好的缓存局部性,因此比假设 10 个内核抖动缓存的速度更快。
  • Idea... 您的电脑是否有任何与电源相关的设置?您的处理器是否全速运行?
  • 好问题。我不知道——这是一个新的戴尔工作站,里面没有不必要的软件。我对超频机制等一无所知。您有什么建议我应该检查什么?
【解决方案2】:

更新:一开始我发现了错误的 Xeon 规格。 V3 拥有更快的涡轮频率,但可持续频率仅为 2.6 GHz。

来自http://ark.intel.com/products/81706/Intel-Xeon-Processor-E5-2660-v3-25M-Cache-2_60-GHz的至强信息:

处理器基频2.6 GHz

最大涡轮频率 3.3 GHz

来自http://ark.intel.com/products/65719/Intel-Core-i7-3770-Processor-8M-Cache-up-to-3_90-GHz的I7信息:

基频3.4 GHz

最大涡轮频率 3.9 GHz

虽然缓存大小和其他差异可能在指令/时钟周期方面有利于 Xeon,但我认为 I7 时钟快 30% 将很难被击败。对于具有 4 个或更少线程且对 CPU 时间没有太多竞争的程序,那就是 ;-)。

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    相关资源
    最近更新 更多