我安装了最新的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会自动简化并跳过所有不必要的代码。
我的问题是:
代码I怎么了?为什么更快地如此不切实际?还是为什么代码II这么慢?
如何告诉Numba运行所有代码而不跳过任何必要的代码?