В настоящее время я пытаюсь улучшить производительность моего кода на Python.Для этого я успешно использую Numba.Чтобы улучшить структуру моего кода, я создаю функции.Теперь я с удивлением заметил, что если я разделю код на разные функции numba, код будет значительно медленнее, чем если бы я поместил весь код в одну функцию с помощью декоратора numba.Примером может быть:
@nb.njit
def fct_4(a, b):
x = a ^ b
setBits = 0
while x > 0:
setBits += x & 1
x >>= 1
return setBits
@nb.njit
def fct_3(c, set_1, set_2):
h = 2
if c not in set_1 and c not in set_2:
if fct_4(0, c) <= h:
set_1.add(c)
else:
set_2.add(c)
@nb.njit
def fct_2(c, set_1, set_2):
fct_3(c, set_1, set_2)
@nb.njit
def fct_1(set_1, set_2):
for x1 in range(1000):
c = 2
fct_2(c, set_1, set_2)
медленнее, чем
@nb.njit
def fct_1(set_1, set_2):
for x1 in range(1000):
c = 2
h = 2
if c not in set_1 and c not in set_2:
if fct_4(0, c) <= h:
set_1.add(c)
else:
set_2.add(c)
с
@nb.njit
def main_fct(set_1, set_2):
for i in range(50):
for x in range(1000):
fct_1(set_1, set_2)
set_1 = {0}
set_2 = {47}
start = timeit.default_timer()
main_fct(set_1, set_2)
stop = timeit.default_timer()
(2,70 секунды против 0,46 секунды).Я думал, что это не должно иметь значение.Не могли бы вы просветить меня?