Почему Numba медленнее CPU?

Необходимо перемножать и складывать векторы размером 10**8. Для ускорения пробую использовать Numba. Время с использованием CPU меньше, чем с Numba.

Что делаю не так?

import numpy as np
import numba
import time


N = 10 ** 8
m_1 = np.arange(N)
m_2 = np.arange(N)

# Numba
@numba.jit
def prod_func(m_1, m_2):
    prod = m_1 * m_2
    return prod


t1 = time.time()
prod_1 = prod_func(m_1, m_2)
t1 = time.time() - t1

# CPU
t2 = time.time()
prod_2 = m_1 * m_2
t2 = time.time() - t2
print('Время Numba: ', t1)
print('Время CPU: ', t2)
prod_1[0:10]
prod_2[0:10]

Ответы (2 шт):

Автор решения: MaxU

Есть смысл использовать Numba для ускорения работы невекторизированных решений. Обычно это те функции, в которых используются циклы.

В вашем случае, вы в обоих случаях перемножаете два массива векторизированными методами. Попробуйте для сравнения реализовать умножение через цикл и сравнить время выполнения.

Кроме того для более честного замера времени лучше использовать магические методы Jupyter / iPython - %timeit.

→ Ссылка
Автор решения: CrazyElf

Потому что Numpy - уже предельно оптимизированная библиотека, написанная на c++, она сама умножает два массива очень быстро. Питоновских циклов, которые хорошо оптимизирует Numba, в вашей функции нет. Тут просто нечего ускорять в итоге, только добавляются накладные расходы на то, чтобы Numba разобрала код функции и запустилась.

→ Ссылка