Я установил последнюю версию 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 с!
Код 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 с
Как это могло быть?
Мой вывод таков:в блоке кода I код вообще не запускался!Поскольку код не использовался и не отправлялся в качестве вывода, @jit автоматически упростил и пропустил весь ненужный код.
Мои вопросы:
Что происходитс кодом я?Почему это так нереально быстрее?или почему код II был намного медленнее?
Как заставить Numba запускать весь код без пропуска какого-либо необходимого кода?