numba.jit 将函数和签名作为输入

numba.jit give function and signature as inputs

我的objective:

我有一个函数,我想看看它对 numba options/parameters(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 一个函数两次。

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

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第一次是编译,因此如果你想要没有编译的时间,再添加一次测试块,它将从缓存中加载并且不会计算经过的编译时间.