【问题标题】:Performance Characteristics of Fundamental Operations for Computational Estimation of Algorithmic Complexity算法复杂度计算估计的基本操作的性能特征
【发布时间】:2010-08-08 23:01:01
【问题描述】:

我为通用编程语言制作了一个编译器。作为工具链的一部分,我想包含一个能够估计给定表达式的时间复杂度的分析器。计算算法复杂度似乎相当简单——也就是说,假设所有恒定时间操作都花费相同的时间——但我希望能够近似真实 em> 复杂性也是如此。为此,我需要有关单个处理器操作(例如 incaddmul 等)以及某些更高级别操作(例如 I/O)的相对性能的信息。

我意识到这既依赖于架构,也依赖于实现,最多只能产生模糊的结果,是一个双重问题。但是有没有人碰巧知道任何可以让我开始的高质量资源?查看更高级别操作的开源实现是否会给我足够的信息来提供对其复杂性的公平估计?

【问题讨论】:

  • 这与停机问题有何不同? (en.wikipedia.org/wiki/Halting_problem)
  • 问题的症结在于您不能总是知道某个随机程序是否会停止...而且您不会得到一个几乎有用的估计没有实际运行程序。我的意思是,如果你想尝试,那就去吧。但是比你聪明得多的人已经证明,在一般情况下,你想要做的事情实际上是不可能的——而一般情况正是你需要处理的。
  • @cHao:抛开“随机程序”的构成问题不谈,停止问题的不可判定性并不意味着我们无法确定所有甚至大多数感兴趣的程序的运行时间。这只是意味着存在适用于这种情况的程序。
  • @Rob:感谢您提供了一个很好的解释,我现在不必写了。 @cHao:在一般情况下,可能无法检测到应用程序是否会停止,但我根本不是在问这个问题。我在询问确定绝对停止表达式的复杂性的具体情况。所有这些关于它是否与停止问题有关的讨论只是在减损最初的问题。我只是想要关于操作 A 比操作 B 贵多少的一般准则,尤其是在它们具有相同时间复杂度的情况下。

标签: algorithm assembly profiling compilation complexity-theory


【解决方案1】:

在大多数现代 CPU 上,“特定指令的周期时间”的概念并不是特别有用。流水线将同时处理多条指令,它们将在 CPU 内部竞争各种资源——因此给定指令的性能只能在周围指令的上下文中理解。即使在处理器系列的不同型号中,细节也会有很大差异。

此外,如果您正在做任何涉及数据的事情,那么缓存行为可能与指令执行时间一样重要。

对于 x86:查看Agner Fog's "Software optimization resources"

【讨论】:

    【解决方案2】:

    英特尔在他们的文章数据库中有一些关于他们的组装实现的信息。好的是相当密集的(比如this 600 页的PDF 文件),但是它们有很多有趣的信息,包括一些具有近似延迟时间的表格。还有a table with some latency times for their 64-bit architecture,所以如果需要,您可以搜索类似的 32 位。

    我个人对 AMD 处理器的任何信息一无所知。谷歌可能会找到一些结果,但自从 Athlon 3000 天以来我就没有使用过 AMD 机器,所以我没有必要去寻找这类信息。

    【讨论】:

    • 呃。第一个看起来非常接近我正在寻找的东西。现在,如果我能从我不需要的森林中提取我需要的信息......
    • 如果你浏览一下,这些表格相当很明显......但是,就像我说的,绝对密集......
    【解决方案3】:

    据我所知:
    公司:最小 O(1) 最大 O(log n)
    添加,子:O(log n)
    mul, div: O(n)

    malloc: O(n*m) n 是分配的大小,m 是先前分配的数量。
    免费:O(1)(有时为 O(log m))。

    【讨论】:

    • 正如我所说,算法复杂度相对简单。我正在寻找特定的细节,说明在处理器周期方面,给定算法复杂度的哪些操作比其他操作更快。
    【解决方案4】:

    萨尔布吕肯的 Reinhard Wilhelm 小组对 timing analysis 进行了研究,包括缓存行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 2011-03-24
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      相关资源
      最近更新 更多