【发布时间】: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