Numba автоматически упрощает и пропускает коды? - PullRequest
0 голосов
/ 21 ноября 2018

Я установил последнюю версию 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 автоматически упростил и пропустил весь ненужный код.

Мои вопросы:

  1. Что происходитс кодом я?Почему это так нереально быстрее?или почему код II был намного медленнее?

  2. Как заставить Numba запускать весь код без пропуска какого-либо необходимого кода?

...