Cython函数的执行时间变化极大

2024-06-26 11:04:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在执行从C编译函数到Cython的迁移时遇到了性能度量问题(通过精纺)从Python引擎调用。你知道吗

cProfile对新的cython函数进行端到端分析(如果没有必要,我就不深入研究cython分析)记录高度可变的累积测量时间。你知道吗

例如,cython函数每5次重复执行9次的累积时间(在5次执行的预热之后-评测函数没有考虑到这一点)是:

  • 第一轮215627339秒
  • 第二轮比赛235336131秒

每次执行都使用不同但固定的参数多次调用函数。 也许这种可变性可能取决于测试机器(一个云托管的专用机器)的CPU负载,但我想知道这种可变性(几乎10%)是否取决于cython或缺乏优化(我已经使用了关于除法、边界检查、环绕等的提示)。你知道吗

你知道如何采用可靠的度量标准吗?你知道吗


Tags: 函数引擎机器参数高度度量记录时间
2条回答

我不是一个性能专家,但根据我的理解,你应该衡量的是每次执行的平均时间,而不是累计时间?除此之外,您的功能还包括读取磁盘和/或发出网络请求吗?你知道吗

首先,您需要确保您的测量设备能够测量您所需要的:具体来说,只有您消耗的系统资源。UNIX的utime就是这样一个命令,尽管这个命令仍然包含交换时间。查看profiler的文档:它应该具有只测量函数消耗的CPU时间的功能。如果是这样,那么你的数字是由于其他原因。你知道吗

一旦控制了外部变量,就需要检查内部变量。你什么也没说你身体的状况。一些(很多?)函数对于数据驱动的琐碎事务(如乘0或1)有可用的捷径。有些依赖于随数据变化的公开或隐蔽迭代。您需要分析与算法相关的输入数据。你知道吗

一个可以使用的工具是一个面向线的探查器,它可以详细说明变化的起源;查看哪些线需要额外的时间,这将有助于确定“噪声”来自何处。你知道吗

相关问题 更多 >