为什么 c++ 进程比具有相同硬件/软件的其他机器慢得多?

为什么 c++ 进程比具有相同硬件/软件的其他机器慢得多?

我有一个 c++ 程序(使用适用于 Windows x64 的 Visual Studio 2010 编译),它进行了一些数学优化,但没有交互元素((单个)进程仅通过控制台启动,并在优化完成后结束)。运行时间取决于给定的输入,例如大约 4 分钟。

当我在我的计算机(Dell Latitude E6420、Intel Core i7-2720QM 2.2 Ghz、8GB RAM、Windows 7(64 位))上运行此进程时,它使用了整个 CPU 的 13%(这应该是正确的,因为它也可以使用一个单核)。问题是,在使用一个核的资源时,它的运行速度比在另一台 Dell Latitude E6420(具有完全相同的统计数据,甚至安装的软件也基本相同)上慢 4 到 8 倍以上。例如:该进程在我的计算机上运行 20 分钟,但在另一台计算机上运行 4 分钟。

除了系统进程外,没有其他进程在运行(除了正在运行的 c++ 进程外,CPU 使用率几乎为 0%)。

不存在数值错误或其他数学问题,经验证,该算法在两台机器上执行的操作完全相同,只是速度较慢(但处理器使用率完全相同(= 13%)。

我想避免重新安装 Windows,所以问题是,是否还有其他原因,例如硬件缺陷、BIOS 设置错误等?所有驱动程序都是最新的。

知道什么原因会导致运行时间出现如此大的差异吗?

答案1

您写道,两台机器都是 Dell Latitude E6420。由于两台机器的硬件相同,因此您应该能够交换硬盘。这样,您无需重新安装即可检测软件中是否存在问题。

其他需要检查的事项是 BIOS 设置(相同的设置和相同版本的 BIOS)。

如果两者都没有结果,请检查硬盘。型号和 Windows 中的事件查看器(将记录读取错误)。

最后,使用 CPU-Z 监控 CPU。

答案2

这可能是一种省电设置,导致调节器在较慢的机器上降低 CPU 时钟频率。

答案3

您是否在两台机器上以相同的方式运行该程序?您说它在您的机器上速度较慢 - 您是从 DevStudio 内部运行它吗(即调试->启动而不调试,或任何其他名称)?这可能会减慢进程速度,因为它在与仅从命令行/shell 运行时略有不同的上下文中启动。

答案4

原因可能是在较慢的机器上激活了高级调试(例如堆损坏调试)。要查看启用了此调试的进程,请打开“全局标志”应用程序(开始 -> 所有程序 -> Windows (x64) 调试工具),转到“图像文件”选项卡并输入程序名称(注意!使用“Tab”按钮刷新)并确保未设置任何标志全局标志。另一个选项是打开命令行并输入“gflags /p”,它将显示所有具有高级调试的程序列表(您的程序不应该在那里)。有关此的更多信息https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/gflags-overview

相关内容