Перейти к содержимому
Compvision.ru
mrgloom

Связь BLAS и LAPACK

Recommended Posts

Допустим имеем обёртку вокруг BLAS на python (т.е. имеем numpy), можем ли руками написать ф-ии из LAPACK?(по минимуму мне надо eig, svd.)

я знаю про numpy.linalg.svd и numpy.linalg.eig так же там можно посмотреть сорцы, которые показывают в случае svd

The decomposition is performed using LAPACK routine _gesdd

, а в случае eig

implemented using the _geev LAPACK routines

но там правда есть ссылка на

References

----------

G. Strang, *Linear Algebra and Its Applications*, 2nd Ed., Orlando, FL,

Academic Press, Inc., 1980, Various pp.

Для чего всё это нужно:

переписать стандартные функции из numpy (svd и eig) с использованием numpy.memmap и cudamat (тот же blas обертка вокруг cublas как я понимаю).

Так же для поддержки больших матриц можно использовать блочное перемножение матриц (хотя может еще какие то ф-ии blas придется переделать? и я чего то не учёл?)

Что точнее нужно:

может быть есть lapack собранный только из вызовов blas? (так ли это и возможно ли это?)

возможно есть примеры на других языках? (т.к. нет никакого желания разбираться в фортран коде и ф-иях с названиями типа dgemm)

какие книги по линейной алгебре(для инженеров скорее, а не для математиков) лучше читать, которые более близки к реальности и рассказывают о подводных камнях(например вырожденные случаи (типа сингулярная матрица) или там потеря точности (типа таким методом никто не считает, а вот более точный) и т.д.), опять же учитывая, что blas и обёртки у нас уже есть и требуется написать только высокоуровневые алгоритмы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выдирать эти функции не пробовал, но есть CLAPACK, можно оттуда попробовать стянуть.

Может заюзать CULA, у них есть бесплатные версии (по моему ограничение на тип float). При том есть и обертки под питон.

По академической программе можно получить и полную версию бесплатно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

CLAPACK так же сложен для понимания, как раз вопрос в том, в нём просто используются ф-ии из blas или там еще что то накручено?

т.е. например мне надо написать SVD имея только обёртку вокруг BLAS.

хотя может я не до конца понимаю что такое BLAS и всю его специфику, т.е. судя по этому там в основном просто много подверсий перемножения матриц.

BLAS Level 1 Routines (vector-vector operations)

BLAS Level 2 Routines (matrix-vector operations)

BLAS Level 3 Routines (matrix-matrix operations)

http://www.netlib.org/blas/blasqr.pdf

CULA не подходит, т.к. закрыт и вообще python нужен чтобы работать с большими данными через memmap и cudamat (когда у нас блочные алгоритмы).

точнее CULA может подойти только для блочных алгоритмов, но не очень понятно зачем он нужен, если сейчас есть CUBLAS,и может быть он не так удобен как cudamat, а по сути нужно только чтобы к GPU array был прозрачный доступ как к numpy array + базовые операции над матрицам(по всей видимости это и есть BLAS).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×