使用numba运行嵌套函数

时间:2018-02-04 19:55:39

标签: python jit numba

我最近尝试使用numba在python中加速部分代码。我试图从函数2内部运行函数1,而它们都是用numba编译但是它不起作用。这是我的代码:

import numba as nb
from math import acos
from time import time

@nb.jit("void()")
def myfunc():
    s = 0
    for i in range(10000000):
        s += acos(0.5)
    print('The sum is: ', s)


@nb.jit("void()")
def myfunc2():
    myfunc()


tic = time()
myfunc2()
toc = time()
print(toc-tic)

当我打电话给myfunc()代码时,我得到的结果比我不使用numba的速度快得多。但是,当我拨打myfunc2时,我看到了这个错误:

 File "~/.spyder-py3/temp.py", line 22, in <module>
    myfunc2()

RuntimeError: missing Environment

任何人都有任何想法为什么从insdie调用一个函数的另一个在这种情况下不起作用?

1 个答案:

答案 0 :(得分:3)

Numba v0.39 +

v0.39中引入了一个修复程序。根据{{​​3}}:

  

PR#2986:修复环境传播

有关详细信息,请参阅Release Notes

Numba pre-v0.39

这是一个已知问题。如github pull #2986

中所述
  

似乎环境指针未正确传递   nopython功能。

修改如下以从print()函数中移除numba应解决此问题:

import numba as nb
from math import acos
from time import time

@nb.jit("void()")
def myfunc():
    s = 0
    for i in range(10000000):
        s += acos(0.5)
    return s

@nb.jit("void()")
def myfunc2():
    return myfunc()

tic = time()
x = myfunc2()  # 10471975.511390356
toc = time()
print(toc-tic)