【问题标题】:Limiting CPU speed for profiling限制分析的 CPU 速度
【发布时间】:2010-09-08 11:04:22
【问题描述】:

我正在尝试优化一个应用程序的几个瓶颈,该应用程序应该在非常广泛的 CPU 和架构(其中一些非常接近嵌入式设备)上运行。

但是,由于我的 CPU 速度,我的分析器的结果并不是很重要。是否有任何方法(最好在 Windows 或 Mac OS X 下)限制我的 CPU 速度以进行分析?

我曾考虑过使用虚拟机,但没有找到具有此类功能的虚拟机。

【问题讨论】:

    标签: c++ profiling cpu


    【解决方案1】:

    这很好用并且支持多核。 http://www.cpukiller.com/

    【讨论】:

      【解决方案2】:

      一个常见的误解是,您需要知道代码的运行速度才能知道性能问题出在哪里。这将问题发现与问题衡量混淆了。

      This is the method I use.

      如果程序中有一些浪费的逻辑,不管用什么CPU运行都是浪费的。

      您需要知道的是它在哪里。对于测量,您不需要知道它有多大;你只需要知道它大到需要修复即可。

      通常会有许多不同大小的问题。您可能会首先找到最大的那些,但无论您以什么顺序修复它们,您修复的每个都会更容易找到剩余的,因为它们会占更大的百分比。

      【讨论】:

      • 你说得有道理,但首先你必须找出如果你有问题。如果您的代码效率低下,但效率低下与 I/O 等待时间相比相形见绌,那么优化它是没有意义的。所以系统组件的速度之间的关系对于性能测试很重要,这就是他需要降低 CPU 速度的原因。
      • @sleske:这就是为什么我不喜欢过多区分 CPU 时间和阻塞时间的原因。性能错误可能包含太多任何一个,但 OP 并没有真正提到 I/O。我的观点是,用 10 条指令做某事,其中 1 条指令可以完成这项工作,在 1ghz 和在 1hz 时一样浪费。为了隔离废物,我认为百分比比时间更重要。
      • @sleske: ...我觉得我说得不太好。这是一个示例 (stackoverflow.com/questions/926266/…),其中存在一系列性能问题,大小超过大约 2 个数量级,其中一个是 I/O 问题。在删除了一些更大的之后,它达到了 I/O 最大的地步。如果 CPU 以不同的速度运行,那只会出现在不同的时间点。
      • 正确,很好的例子。 “那只会出现在不同的地方”:正是我的观点。如果目标系统的 CPU 速度较慢,那么首先优化 CPU 使用率会更经济,如果这是 OP 想要做的,他/她需要一个“慢速”CPU。否则他/她会做大量的 I/O 优化,结果却发现目标系统上的 CPU 运行时间使 I/O 时间相形见绌。
      • @sleske:我认为我们的协议很激烈 :) 我只是想表明,如果你可以忽略 I/O,CPU 的速度会提高如果目标是尽可能快地编写代码,则没有区别。我之所以这么说,是因为太强调测量速度及其准确性,而那只是对评估调整的结果有好处,而对定位要调整的东西没有多大价值。不管怎样,你的观点很好,谢谢。
      【解决方案3】:

      恐怕除了开始在您所在地区四处寻找旧硬件之外,我不知道任何答案。 CPU 并不是唯一可以(通常)影响事物的变量。 L1/L2 缓存大小、内存总线速度、内存速度/延迟、硬盘速度等都是许多应用程序中的重要因素。

      【讨论】:

        【解决方案4】:

        最近在 Downloadsquad.com 上有一个应用程序。我不记得它的名字,但它做了一些有趣的僵硬的处理器和任务管理器。它可能只是管理什么应用程序在什么 cpu 上,但也许它会给你这个。今天下午我会尝试寻找它,如果找到它会回复。

        【讨论】:

          【解决方案5】:

          许多分析器(例如 oprofile - 但仅限于 linux)允许您设置它们收集数据的频率。看看您的分析器是否支持这一点,如果不支持,请尝试其他支持。

          【讨论】:

          • 我相信他想降低 CPU 的速度,这样 CPU 速度和其他操作(例如 I/O、用户输入......)的速度之间的关系更接近旧系统上的关系.我看不出提高收集频率对此有何帮助。
          • @sleske 我以为他的意思是 CPU 太快了,以至于收集到的配置文件样本很少,因此没有返回有意义的数据。
          【解决方案6】:

          我考虑过使用虚拟 机器,但还没有找到 这样的功能。

          为什么需要明确提供该功能的虚拟机?只需限制主机操作系统中虚拟机的 CPU 使用率(它只是一个常规进程)。那应该有完全相同的效果。

          您可以这样做,例如在 Linux 上使用cpulimit; MS Windows 也有类似的解决方案。

          【讨论】:

          • 这会使 CPU 变得非常不流畅,例如快速半秒,然后在接下来的半秒内什么都没有 - 取决于 VM 系统的工作方式。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-14
          • 2023-04-01
          • 2022-01-07
          • 2022-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多