Numba会自动简化和跳过代码吗?

时间:2018-11-21 00:01:46

标签: python numba

我安装了最新的Python,Numba和CUDA CDK版本10,发现以下结果非常有趣:

代码I:

from timeit import default_timer as timer
from numba import jit
import math as ma

start = timer()
@jit(nopython=True, parallel=True)
def test5():

    for i in range(1,100000000):
        for j in range(1,10000000):
            for h in range(1,100000000):
                for z in range(1,10000000):
                    for h1 in range(1,100000000):
                        for z1 in range(1,10000000):
                             ma.exp(ma.log(i));
                             i**i;

test5()


duration = timer() - start
print(duration)

运行时间是不切实际的0.166942700000007 s!

代码II:

start = timer()
@jit(nopython=True, parallel=True)
def test5():

    for i in range(1,100000000):
        for j in range(1,100):
            i**i;
            if i==10000000*j:
                print(i)


test5()


duration = timer() - start
print(duration)

运行时间为3.934219299999995 s

那怎么可能?

我的结论是,在代码块I中,代码根本没有运行! 由于未使用代码也不将其作为输出发送,因此@jit会自动简化并跳过所有不必要的代码。

我的问题是:

  1. 代码I怎么了?为什么更快地如此不切实际?还是为什么代码II这么慢?

  2. 如何告诉Numba运行所有代码而不跳过任何必要的代码?

0 个答案:

没有答案