gpt4 book ai didi

python - 在numba中编译abs()比普通的python函数慢

转载 作者:行者123 更新时间:2023-12-02 03:29:56 26 4
gpt4 key购买 nike

这都是在 jupyter 笔记本中编程的,但是我在“正常”终端/空闲工作空间中没有找到不同的结果。我发现运行这个函数:

def __difference(a,b):
return abs(a,b)

始终快于:

@jit(nopython=True)
def __difference_numba(a,b):
return abs(a,b)

函数已编译,这是 __difference_numba.inspect_types() 的输出(在两种情况下我的输入都是两个 float ):

__difference_numba (float64, float64)
--------------------------------------------------------------------------------
# File: <ipython-input-50-f6f52d4cccbf>
# --- LINE 1 ---
# label 0

@jit(nopython=True)

# --- LINE 2 ---

def __difference_numba(a, b):

# --- LINE 3 ---
# a = arg(0, name=a) :: float64
# b = arg(1, name=b) :: float64
# $0.1 = global(abs: <built-in function abs>) :: Function(<built-in function abs>)
# $0.4 = a - b :: float64
# del b
# del a
# $0.5 = call $0.1($0.4, kws=[], vararg=None, args=[Var($0.4, <ipython-input-50-f6f52d4cccbf> (3))], func=$0.1) :: (float64,) -> float64
# del $0.4
# del $0.1
# $0.6 = cast(value=$0.5) :: float64
# del $0.5
# return $0.6

return abs(a-b)#np.abs(a - b)

=============================================================================

使用 timeit 来计时函数的代码:

单元格定义参数(我尝试了不同的数字):

#test parameters
a=5.0
b=-2.5

用于测试 numba 实现和结果的单元:

%%timeit
#test numba

__difference_numba(a,b)

239 ns ± 6.03 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

用于测试正常 python 实现和结果的单元:

%%timeit
#test python

__difference(a,b)

156 ns ± 0.823 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

最佳答案

我相信您所看到的是分派(dispatch)到 numba 代码的开销(而不一定是编译的 abs 函数的速度),因为函数中所做的工作是如此微不足道。

通常情况下,您不会将这样的简单调用分离到函数中,尽管从另一个 numba-jitted 函数中调用 _difference_numba 可能会被编译器内联。无论哪种方式,您都需要在 numba 代码中停留比开销更长的时间才能开始看到纯 python 代码和 numba-jitted 代码之间的性能差异。像这样跨越 numba/python 边界来回调用并不能克服开销。

关于python - 在numba中编译abs()比普通的python函数慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52140966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com