【问题标题】:numba.jit give function and signature as inputsnumba.jit 将函数和签名作为输入
【发布时间】:2020-11-04 02:11:00
【问题描述】:

我的目标:

我有一个函数,我想看看它对 numba 选项/参数列表的执行情况(nopython、no gil、parallel 等和 Signature!)

所以我想做类似的事情:

def foo(a):
   return a*2


for signature in list:
   foo_jit = numba.jit(foo, signature)
   
   print("speed for jitted func given signature")

遗憾的是,这引发了一个错误,因为 @numba.jit() 作为装饰器采用签名作为第一个输入,而 numba.jit() 作为函数采用函数作为输入。我已经尝试在 jit 函数之前分配签名,但是你不能 jit 一个函数两次。

【问题讨论】:

    标签: python benchmarking signature jit numba


    【解决方案1】:

    为了测试这种方法,我会尝试在循环中定义一个函数:

    for signature in list:
    
        @jit(signature)
        def foo(a):
           return a*2
    
        start = time.time()
        foo(whatever_data_you_have)
        end = time.time()
        print("Elapsed (with compilation) = %s" % (end - start))
    

    您当然可以阅读in the guide 第一次是编译,因此,如果您想要不编译的时间,请再添加一次测试块,这将从缓存中加载并且不会计算经过的编译时间。

    【讨论】:

    • 非常感谢,这行得通!并感谢您提及编译时间。我刚刚意识到函数总是被jit缓存,那么你使用@jit(cache=true)有什么区别??
    • @Darkonia @jit(cache=true) 将在驱动器上保存已编译的函数以供以后使用,因此它不需要编译,但是如果这适用于相同命名的问题和不同的签名,我无法找到信息,可能将覆盖以前的同名函数,我正在考虑为此提出一个问题
    猜你喜欢
    • 1970-01-01
    • 2023-02-05
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多