Параллельное разложение собственных значений Matlab

Я долго пытался придумать алгоритм для параллельной декомпозиции собственных значений, но ни один из алгоритмов, которые я пробовал, не может превзойти алгоритм eig Matlab, так что есть ли кто-нибудь, кто знает, какой алгоритм использует Matlab для функции eig? или кто-нибудь может предложить мне хороший параллельный алгоритм для разложения собственных значений?


person Vahan    schedule 10.10.2013    source источник


Ответы (2)


MATLAB использует LAPACK для своей линейной алгебры более высокого уровня. Согласно команде версии MATLAB, это библиотека математического ядра Intel (MKL):

>> version('-lapack')
ans =
Intel(R) Math Kernel Library Version 11.0.2 Product Build 20130124 for Intel(R) 64 architecture applications
Linear Algebra PACKage Version 3.4.1

Intel MKL включает очень быстрые реализации BLAS и LAPACK, но не является бесплатным. Для вариантов с открытым исходным кодом попробуйте Eigen и Броненосец. Их API очень интуитивно понятен, и они довольно быстрые. И если вы верите заявлениям Эйгена, они самые быстрые открытый BLAS доступен с превосходным API по сравнению с эталонным netlib LAPACK (IMO, утверждение API довольно очевидно, если вы посмотрите на версию Fortran!)

person chappjc    schedule 10.10.2013
comment
большое спасибо, но есть ли что-нибудь о параллельном алгоритме? - person Vahan; 11.10.2013

Вы можете использовать Armadillo с OpenBLAS. Оба с открытым исходным кодом. Последние версии OpenBLAS также предоставляют функции LAPACK. OpenBLAS использует несколько ядер (т.е. работает параллельно).

При использовании функции Armadillo eig_sym() укажите, что метод "разделяй и властвуй" использоваться. Это имеет большое значение для больших матриц. Например:

eig_sym(eigval, eigvec, X, "dc")

Кстати, вы также можете связать код на основе Armadillo с Intel MKL вместо OpenBLAS. MKL также предоставляет оптимизированные функции LAPACK.

person mtall    schedule 10.10.2013