【问题标题】:Bytecode instruction cost字节码指令成本
【发布时间】:2016-06-10 13:21:17
【问题描述】:

是否有可能知道每条指令的某种度量(秒、CPU 滴答声、对数刻度等)的“成本”?或者至少对于 一些 指令,跳过像 SLICE 这样的东西。 https://docs.python.org/3/library/dis.html 有说明。有源代码:https://hg.python.org/cpython/file/tip/Python/ceval.c#l1199。我想通过分析源代码可以估计出每条指令会吃掉多少资源,但我怀疑像我这样的菜鸟能做到这一点。可能有人已经这样做了?当然有很多关于优化的高级建议,关于过度优化,但是这样的措施可能会帮助初学者更好地理解字节码,而无需深入研究 C 源代码?

编辑:实际问题不是关于分析或调试代码 - 我知道各种分析方法 - 这个问题特别是关于字节码。我牢记 CPU 指令具有成本度量 - 每条指令的周期数。

【问题讨论】:

  • 今天的计算机几乎(真的完全)是确定性的。因此可以做到这一点。然而,包含其他进程、多线程/处理器计算机、专有操作系统以及将内存分页到硬盘或虚拟内存使得这非常困难。
  • 您能否让我们更好地了解您要解决的实际问题?这是单纯的好奇,还是您有一些运行速度太慢的脚本,而您正试图找出原因?
  • @Kevin,这只是好奇。
  • SLICE 具体将完全取决于被切片的内容,list.__getslice__ 的实现将与 pandas 等中的某些内容具有不同的性能。我认为没有确定的方法来衡量成本当一堆字节码只会导致其他事情发生时。

标签: python


【解决方案1】:

衡量“小”代码段性能的典型方法是timeit。对于较大的事情,我们通常使用cProfile

这些技术将通过实际运行代码来衡量代码并查看执行所需的时间,因此它们不会产生完全确定的答案。如果您正在寻找更理论的东西,您可能需要查看反汇编和 CPython source code,并了解它的速度有多快。如果您咨询Python/C API docs,您可能会发现源代码更易于阅读,因为许多 CPython 源代码最终都会调用这些相同的函数。

【讨论】:

    【解决方案2】:

    正如@kevin 所说,您可以使用 cProfile。可以看http://lanyrd.com/2013/pycon/scdywg/

    对于您可以使用的逐行分析,https://github.com/rkern/line_profiler 我从here 发现的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 2014-05-05
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      相关资源
      最近更新 更多