LINUX.ORG.RU
ФорумTalks

Откуда такая разница в производительности Matlab и numpy/python2 (в пользу первого)?

 , ,


2

4
>>> setup = """
... 
... import numpy as np
... 
... N = 768
... P = 1024
... 
... A = np.random.random((P, N))
... """
>>> timeit.repeat('A.T.dot(A)', setup=setup, number=10, repeat=3)
[18.736198902130127, 18.66787099838257, 17.36500310897827]

Примерно 1.8 секунд на итерацию, аналог в матлабе:

N = 768;
P = 1024;

A = rand(P, N);

tic
A' * A;
toc

Elapsed time is 0.038807 seconds.

Инверсия матрицы:

>>> setup = """
... import numpy as np
... 
... N = 768
... P = 1024
...  
... A = np.random.random((P, N))
... H =  A.T.dot(A)
... """
>>> timeit.repeat('np.linalg.inv(H)', setup=setup, number=10, repeat=3)
[7.336957216262817, 7.3821821212768555, 7.418352127075195]

примерно 0.7 сеукнд на итераию, в матлабе:

N = 768;
P = 1024;

A = rand(P, N);
H = A' * A;
tic
inv(H);
toc

Elapsed time is 0.083018 seconds.

Итого: matlab обгоняет numpy на 1-2 порядка?! Наверное, я что-то делаю не так... что?

★★★

Последнее исправление: omegatype (всего исправлений: 1)
Ответ на: комментарий от Stahl

плюсую. даже само наименование сего языка программирования скромно намекает.

next_time ★★★★★
()

Да, попробуй python2-numpy-atlas

Можно просто установить atlas-lapack и пересобрать python2-numpy

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: Вердикт от Stil

Тормозное говно там замшелый код в дефлотном BLAS. Питон в nympy всего лишь обертка вокруг него. Поэтому все твики проходят банальной заменой на openBLAS/ATLAS/Intel MLK. А haters gonna hate и упражняться в ослоумии, вместо того, чтобы матчасть подучить.

ptarh ★★★★★
()
Ответ на: комментарий от tailgunner

Да. Но это же может сделать и postinst-скрипт.

ну там не postinst-скрипт делает, а просто выбирается альтернатива с наибольшим приоритетом если не выставлен ручной режим. в данном случае у openblas приоритет выше, поэтому если вручную ничего не конфигурили, то будет такое поведение что ты описал.

maloi ★★★★★
()
Ответ на: комментарий от maloi

ну там не postinst-скрипт делает, а просто выбирается альтернатива с наибольшим приоритетом

postinst-скрипт пакета libopenblas-base вызывает update-alternatives. Ты собираешься с этим спорить?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

postinst-скрипт пакета libopenblas-base вызывает update-alternatives

конечно, но с параметром --install, который в общем случае не приводит к тому что конфигурация изменится.

maloi ★★★★★
()
Ответ на: комментарий от maloi

postinst-скрипт пакета libopenblas-base вызывает update-alternatives

конечно

Это именно то, о чем я говорил.

но с параметром --install, который в общем случае не приводит к тому что конфигурация изменится.

А в конкретном частном случае она меняется.

Короче, не понимаю, что ты пытаешься доказать.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

А в конкретном частном случае она меняется.

конечно, в debian вообще стараются сделать так чтобы при повторении одних и тех же действий результат был одинаковым.

Короче, не понимаю, что ты пытаешься доказать.

что поведение которое ты описываешь - необязательное, и когда ты говорил «если поставить, автоматически используется.» - это ложь, причем очень вредная, т.к. кто-нибудь тебе поверит а потом будет думать, какого хрена не используется.

maloi ★★★★★
()
Ответ на: комментарий от tailgunner

А в конкретном частном случае она меняется.

чтобы было понятно, о чем я говорю, задам уточняющие вопросы:
является ли частным конкретным случаем случай, когда администратор предварительно выполнил команду

update-alternatives --set libblas.so.3 /usr/lib/libblas/libblas.so.3
является ли частным конкретным случаем случай, когда администратор предварительно выполнил команду
update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3     \
    /usr/lib/atlas-base/atlas/libblas.so.3 100                       \
    --slave /usr/lib/libcblas.so.3 libcblas.so.3                     \
    /usr/lib/atlas-base/libcblas.so.3                                \
    --slave /usr/lib/libf77blas.so.3 libf77blas.so.3                 \
    /usr/lib/atlas-base/libf77blas.so.3                              \
    --slave /usr/lib/libatlas.so.3 libatlas.so.3                     \
    /usr/lib/atlas-base/libatlas.so.3                                \
    --slave /usr/lib/liblapack_atlas.so.3 liblapack_atlas.so.3       \
    /usr/lib/atlas-base/liblapack_atlas.so.3                         \
    --slave /usr/lib/libblas.so.3gf libblas.so.3gf                   \
    /usr/lib/atlas-base/atlas/libblas.so.3                           \
    --slave /usr/lib/libcblas.so.3gf libcblas.so.3gf                 \
    /usr/lib/atlas-base/libcblas.so.3                                \
    --slave /usr/lib/libf77blas.so.3gf libf77blas.so.3gf             \
    /usr/lib/atlas-base/libf77blas.so.3                              \
    --slave /usr/lib/libatlas.so.3gf libatlas.so.3gf                 \
    /usr/lib/atlas-base/libatlas.so.3                                \
    --slave /usr/lib/liblapack_atlas.so.3gf liblapack_atlas.so.3gf   \
    /usr/lib/atlas-base/liblapack_atlas.so.3
после одной из этих команд система при установке libopenblas-base начнет использовать его автоматически?
или система после этих команд больше не debian stable?

maloi ★★★★★
()

Попробуй с jit-компилятором.

Quasar ★★★★★
()
Ответ на: комментарий от ptarh

Ну это и разгадка скорее всего. Смотри, тут с графиками: https://store.continuum.io/cshop/accelerate/

там выигрыш от силы на порядок (в основном в несколько раз), откуда два порядка возьмётся? Тем более, думаю, там всё заоптимизировано по самые гланды, и тесты скорее синтетические и «маркетинговые» (т.е. в реальности будет меньше выигрыш).

Sahas ★★★★☆
()
Последнее исправление: Sahas (всего исправлений: 2)
Ответ на: комментарий от ptarh

Там в исходном коде ТС каждый раз numpy импортирует. Это стоит времени.

так вроде выяснили, что не каждый раз - это во-первых, а во-вторых, это импортирование не учитывается при расчёте времени. Я замерял другим образом - также медленно считает

Sahas ★★★★☆
()
Ответ на: комментарий от ptarh

Так где же там «каждый» раз-то? В setup-е же import, a не в statement-е, так что только один раз.

omegatype ★★★
() автор топика

Gentoo и Openblas, numpy - 22 мс, говнолаб 2013b - 28 мс.

HeipaVai1o
()
Ответ на: комментарий от Sahas

Ну во-первых, прогонять такие тесы нужно раз 100-1000, хотя здесь не в этом проблема, конечно. Но использование правильных библиотек дает нехилый такой прирост. В остальном я думаю, что замерять такие вещи нужно не на говносборках рукожопых мейнтенеров из дистров, а на научных дистрибутивах типа EPD и anaconda. Numpy на большинстве бенчмарков идет носом к носу с матлабом, так как в кишках там те же библиотеки, если брать версию с MKL

ptarh ★★★★★
()
Ответ на: комментарий от ptarh

Но использование правильных библиотек дает нехилый такой прирост.

70% - это даже не в два раза :) Вот это похоже на правду. Видимо, тут проблема действительно с «криво» собранным numpy...

Sahas ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.