Cython函数的执行时间高度可变

时间:2018-10-25 15:26:47

标签: python performance cython

从Python引擎调用的C编译函数(通过scipy.weave)执行到Cython的迁移时,我遇到了性能评估问题。

使用cProfile端到端配置的新cython函数(如果没有必要,我将不进行cython剖析)记录了高度可变的累积测量时间。

例如。每5次重复执行9次的cython函数的累积时间(在5次执行预热之后-分析功能未考虑),将花费以下时间:

  • 第一轮215,627339秒
  • 第二轮235,336131秒

每次执行都会使用不同但固定的参数多次调用函数。 也许这种可变性可能取决于测试计算机(云托管的专用计算机)的CPU负载,但是我想知道这种可变性(将近10%)是否可能取决于cython或缺乏优化(我已经在划分时使用了提示,边界检查,环绕等...)。

关于如何采用可靠指标的任何想法?

2 个答案:

答案 0 :(得分:0)

我不是性能专家,但据我了解,您应该衡量的是每次执行所花费的平均时间而不是累计时间?除此之外,您的功能是否还可以进行磁盘读取和/或发出网络请求?

答案 1 :(得分:0)

首先,首先,需要确保测量设备能够测量所需的东西:具体来说,只有您消耗的系统资源。 UNIX的utime是这样的命令之一,尽管该命令仍然包含交换时间。请检查您的探查器的文档:它应该(应该具有仅测量该功能所消耗的CPU时间的功能)。如果是这样,那么您的数字是由于其他原因。

一旦控制了外部变量,就需要检查内部变量。关于功能的复杂性,您什么也没说。某些(很多?)函数具有数据驱动琐碎的可用捷径,例如乘以0或1。某些函数取决于随数据而变化的公开或秘密迭代。您需要针对算法分析输入数据。

您可以使用的一种工具是面向行的探查器,用于详细说明变化的产生原因;看看哪些行会花费额外的时间,应该有助于确定“噪声”的来源。