2014-01-26 2 views
2

Я использовал numba для ускорения частей моего кода Python с помощью декоратора autojit. Тест проходит и% timeit показывает, что код действительно ускоряется.Могу ли я скомпилировать numba на этапе настройки модульного теста?

Первое исполнение выполняется медленно, поскольку, я полагаю, numba компилирует код. Имеет смысл. Но когда я запускаю набор тестов, они быстро запускают , из 10 тестов за 10 секунд до моих изменений в те же тесты за 117 секунд. Кажется, что numba необходимо компилировать снова и снова, отдельно для каждого теста.

Могу ли я избежать этого? Я попытался запустить один простой тест в функции setUp, думая, что может скомпилировать функцию там один раз для всех тестов, но это существенно не изменило время выполнения.

+0

Кажется, что кеширование компиляций numba было бы лучшим решением (но оно еще не реализовано). Самое лучшее, что я могу придумать, это сделать собственный декоратор, который превращает numba во время unittests. – U2EF1

+0

Вы случайно не знаете рекомендуемое решение для временного отключения numba? –

ответ

1

Нечто подобное может работать:

from numba import autojit 

def autojit_except_when_unit_testing(func): 
    if UNIT_TESTING: 
     return func 
    return autojit(func) 

Возможно также врезаться вопросы Numba в отношении кэширования, так как это очень важный случай использования. Я обычно был бы довольно нерешительным, чтобы запускать модульные тесты и производственный код в таких разных средах, но модульные тесты, которые выполняются навсегда, не запускаются так часто. Вы должны почти наверняка тестировать с numba также, реже.

+0

Абсолютно. Я думаю, что я запустил оба, и надеюсь на кеширование в ближайшее время. Благодаря! Постскриптум Это [проблема с запросом на функцию кэширования] (https://github.com/numba/numba/issues/224). –

+0

Это звучит неплохо. Вы хотите проверить, правильно ли ваша функция работает автоматически. – asmeurer

+0

@asmeurer Это компромисс. Если тесты выполняются быстро, он будет запускать их чаще. Но вы правы, что он определенно должен работать на реальной основе на регулярной основе. – U2EF1

Смежные вопросы