About | Blog | xapy

Gentoo tip: Ускорение numpy в 25 раз

Наткнулся на статью Is your NumPy using the right ATLAS?. Далее — творческий перевод с адаптацией к Gentoo Linux.

Выбор правильного бекенда для numpy может существенно (очень) улучшить производительность. ATLAS (Automatically Tuned Linear Algebra Software) — библиотека, которая используется в NumPy (как и в Matlab, Octave др.) для вычислений линейной алгебры. Его и попытаемся включить

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

>>> from numpy import *
>>> import time
>>> A = random.random((1000,1000))
>>> B = random.random((1000,1000))
>>> t = time.time(); dot(A,B); print time.time()-t

Разочарованы результатами? Потратьте 3 минуты времени (не считая компиляции :D) и ускорьте это на порядки! На моём настольном компьютере я получил оценку 12.5 сек. После выполнения указанных операций результат уменьшился до ! И так, рецепт:

# echo "dev-python/numpy lapack" >> /etc/portage/package.use
# emerge numpy lapack-atlas # (1)
... (2) ...

(1) — важно дописать lapack-atlas, иначе будет заюзан lapack-reference для удовлетворения lapack

(2) — тут долго компилится blas-atlas (если во время компиляции падает с сегфолтом, то пересобираем libtool)

Остаётся удостовериться, что всё, что установили — работает: $ eselect lapack list и $ eselect blas list. Обе команды должны нарисовать atlas со звёздочкой напротив него. Теперь снова запускаем numpy, dot(A,B) и любуемся результатом. У меня на том же десктопе вышло в среднем 0.5с. Ускорение почти на 3 порядка! Это всё, удачной линейной алгебры :)

n.b. В Ubuntu это решается установкой пакета “libatlas3gf-sse2”, а на Mac OS X — быстро из коробки.

Добавить пост в: Delicious Reddit Slashdot Digg Technorati Google
Понравился пост? Оставьте комментарий!
Комментарий

Комментарии

koldunovn 1.02.2010 18:54

У меня 0.7 секунд на дебиане. Видимо тоже по умолчанию включена оптимизация )

ответить

Форма комментирования для «numpy-atlas»

Обязательное поле. Не больше 30 символов.

Обязательное поле

captcha image Пожалуйста, введите символы, которые вы видите на изображении