gpt4 book ai didi

c++ - CPU 利用率随时间下降

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:22:17 26 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

5年前关闭。




Improve this question




我有一个多线程进程。每个线程都受 CPU 限制(执行计算)并且还使用大量内存。根据资源监视器,该过程以 100% 的 CPU 利用率开始,但几个小时后,CPU 利用率开始缓慢下降。 24 小时后,它处于 90-95% 并下降。

问题是 - 我应该寻找什么,我可以使用哪些最著名的方法来调试它?

附加信息:

我有足够的 RAM - 其中大部分在任何给定时刻都未使用。
根据 perfmon - 内存不会增长(所以我认为它没有泄漏)。
代码是 .Net 和 native c++ 的混合,有一些数据来回编码。
我在几台不同的机器(具有 24 个逻辑核心的服务器)上看到了这一点。
我在 perfmon 中看到的一件事 - 随着 CPU 利用率的降低,修改的页面列表字节指示器会随着时间的推移而增加。

编辑 1
使用的第三方库之一是 openfst。看起来这与对该库的一些误用非常相关。
具体来说,我注意到我有以下警告:
警告 LNK4087:CONSTANT 关键字已过时;使用数据

编辑 2

由于问题已关闭,并且没有重新打开,我将在问题正文中写下我的发现以及问题是如何解决的(对不起),以供将来的用户使用。
原来有一个 openfst.def 文件定义了所有 openfst FLAGS_* 符号供使用应用程序/dll 使用。我必须修复这些以使用关键字“DATA”而不是“CONSTANT”(CONSTANT 已过时,因为它有风险 - 更多信息: https://msdn.microsoft.com/en-us/library/aa271769(v=vs.60).aspx )。
之后 - 没有观察到 CPU 利用率的下降。 “修改页面列表字节”指标不再上升。我怀疑它与 FLAGS 的默认值(特别是垃圾收集标志 - FLAGS_fst_default_cache_gc)有关,由于在 openfst.def 文件中误用了 CONSTANT 关键字,因此这些值是不确定的。

结论 了解您的警告!尽可能多地消除它们!
谢谢。

最佳答案

对于这样一个不明显的问题,您还应该使用分析器来实际对 CPU 中的底层硬件计数器进行采样。我熟悉的大多数分析器都使用内核提供的统计信息,而不是底层的硬件计数器。在 Windows 中尤其如此。 (部分原因是遗留问题,部分原因是 Windows 希望其内核统计数据独立于硬件。PAPI API 试图解决这个问题,但仍然相对较新。)

最好的分析器之一是英特尔的 VTune。是的,我为 Intel 工作,但内部 HPC 人员也使用 VTune。不幸的是,它的成本。如果你是学生,有折扣。如果没有,则有试用期。

您可以在 software.intel.com 上找到大量优化和性能问题诊断信息。这是 optimizationprofiling 的指针。即使您没有使用 x86 架构,这些技术仍然有效。

至于可能是什么问题,如此缓慢的降级很奇怪。

  • 您使用新内存或访问旧内存的频率如何?以什么速度?如果速度非常慢,您可能仍然会遇到资源消耗缓慢的情况,例如页。
  • 你的内存访问模式是什么?它会随着时间而改变吗?有多快?也许随着时间的推移,您的内存访问模式正在蔓延,导致更多的缓存未命中。
  • 也许你对问题空间的划分是这样的,你进入了一个新的计算领域,没有真正的病理。
  • 查看是否有在较长时间间隔内发生的定期维护事件,尽管这会导致定期降级,例如每 24 小时一次。这听起来不像您的情况,因为您正在经历逐渐退化。

  • 如果您使用的是 x86 架构,请考虑在英特尔论坛中提交问题(例如“英特尔® 集群和 HPC 技术”和“软件调优、性能优化和平台监控”)。

    让我们知道您最终发现了什么。

    关于c++ - CPU 利用率随时间下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33964314/

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