Почему 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 шт):
Есть смысл использовать Numba для ускорения работы невекторизированных решений. Обычно это те функции, в которых используются циклы.
В вашем случае, вы в обоих случаях перемножаете два массива векторизированными методами. Попробуйте для сравнения реализовать умножение через цикл и сравнить время выполнения.
Кроме того для более честного замера времени лучше использовать магические методы Jupyter / iPython - %timeit.
Потому что Numpy - уже предельно оптимизированная библиотека, написанная на c++, она сама умножает два массива очень быстро. Питоновских циклов, которые хорошо оптимизирует Numba, в вашей функции нет. Тут просто нечего ускорять в итоге, только добавляются накладные расходы на то, чтобы Numba разобрала код функции и запустилась.