2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Статическая компановка LAPACK
Сообщение22.04.2018, 15:53 
Добрый день, возникла необходимость установить библиотеку LAPACK. Во всех инструкциях, которые я нашел речь идёт только о .dll, но мне о разным причинам гораздо предпочтительнее статическая компоновка, чтобы были lapack.h и lapack.lib, которые я и буду использовать в своих программах.
Можно ли их как то скомпилировать, или .dll - это единственный вариант? Если можно, то пожалуйста подскажите как это сделать.

P.S. Уже скачал дистрибутив LAPACK 3.8.0 (в архиве tar.gz), уже установлен VC 2010.

 
 
 
 Re: Статическая компановка LAPACK
Сообщение22.04.2018, 19:31 
С основного сайта LAPACK можно перейти на сайт LAPACK for Windows.
Там есть ссылки на какие-то скомпилированные static libraries для Visual Studio 2010, win32 и x64.

 
 
 
 Re: Статическая компановка LAPACK
Сообщение22.04.2018, 20:26 
Спасибо, сейчас посмотрю.

-- 22.04.2018, 22:14 --

Yuri Gendelman
я уже скачал, да там готовая уже LAPACK.lib, версия 3.5.0 для VC 2010, всё как мне надо, но к сожалению нет заголовочного файла,
подскажите пожалуйста, где его можно найти?

 
 
 
 Re: Статическая компановка LAPACK
Сообщение22.04.2018, 22:21 
Andrey_Kireew,
С сайта LAPACK Вы можете скачать lapack-3.5.0.tgz.

 
 
 
 Re: Статическая компановка LAPACK
Сообщение23.04.2018, 21:38 
Andrey_Kireew

Исходники Lapack не оптимизированы: лучше использовать Intel MKL. Разность в скоростях счета (точнее, отношение скоростей) при этом может доходить до сотни на современных процессорах. Сейчас в инете доступна parallel studio xe 2018 update2 cluster edition.

 
 
 
 Re: Статическая компановка LAPACK
Сообщение23.04.2018, 22:08 
Спасибо as73251, но её ведь изучить придётся, да ещё потом и покупать - это на перспективу только если ...

Тем не менее, с lapack-3.5.0.tgz так ничего и не получилось. Пришел к тому, что всё же надо компилировать самому, и надо intel c compiller и intel fortran compiller, но они тоже там платные - пока не скачал.

Зато нашелся неожиданный выход - в папках matlab эта библиотека оказывается есть, только называется она libmwlapack.lib и хэдер к ней там есть, так что пока пробую - уже прога скомпилировалась, правда после её запуска комп виснет, буду разбираться ...

 
 
 
 Re: Статическая компановка LAPACK
Сообщение23.04.2018, 22:51 
Я исходники Lapack использовал как грубое приближение для разработки алгоритмов четверной точности, т.к. интеловская фортрановская четверная точность уступает по скорости двойной точности раз в сто, а у меня менее чем на порядок.

 
 
 
 Re: Статическая компановка LAPACK
Сообщение23.04.2018, 23:14 
Сам по себе фортран я не использую, подключаю к С приложению

Используется синтаксис C++
/* Source: dsyevr.f */
#define dsyevr FORTRAN_WRAPPER(dsyevr)
extern void dsyevr(char   *jobz, char   *range, char   *uplo,
                             ptrdiff_t *n, double *a, ptrdiff_t *lda,
                             double *vl, double *vu, ptrdiff_t *il, ptrdiff_t *iu,
                             double *abstol, ptrdiff_t *m, double *w,
                             double *z, ptrdiff_t *ldz, ptrdiff_t *isuppz,
                             double *work, ptrdiff_t *lwork, ptrdiff_t *iwork,
                             ptrdiff_t *liwork, ptrdiff_t *info);
 


Blas я так использовал - работает хорошо, по крайней мере для меня. Имена функций у них все составлены по определённым правилам, так что сразу понятно, что она делает. В общем мне понравилось.

 
 
 
 Re: Статическая компановка LAPACK
Сообщение24.04.2018, 15:35 
as73251 Возможно Вы оказались правы, отладил я свою программу, протестировал - работает то всё правильно, но прироста скорости абсолютно никакого нет.

А вот интересно, в разных версиях LAPACK в одноимённых функциях использованы разные алгоритмы, или те же самые?
Конкретно меня интересует функция dsyevr для больших матриц N>10000

 
 
 
 Re: Статическая компановка LAPACK
Сообщение24.04.2018, 22:45 
Andrey_Kireew

Советую не связываться с dsyevr: она содержит реализацию RRR алгоритма, который в LAPACK совершенствуется не один год, но в силу своей природы будет работать некорректно до нового пришествия (грубо говоря возникающие проблемы связаны с ортогональностью вычисляемых собственных векторов). И если Вас интересует систематическое применение алгоритмов диагонализации для больших вещественных симметричных матриц, то без Intel MKL Вам не обойтись: все другое крайне неэффективно. Если у Вас возникают проблемы с объемами используемой оперативной памяти, то можно использовать алгоритмы для упакованных матриц, правда эффективного алгоритма для трехдиагонализации упакованных матриц Intel так и не придумал.

P.S.
Диагонализация вещественных симметричных матриц - одна из самых востребованных процедур в матричном анализе и для нее разработаны железобетонные устойчивые в численном смысле методы: вот ими и пользуйтесь.

 
 
 
 Re: Статическая компановка LAPACK
Сообщение24.04.2018, 23:44 
as73251
Большое спасибо за предупреждение. Сейчас проверил - максимальная взаимная корреляция собственных векторов (для N=10000), $R=10^{-17}$.

А какую же функцию лучше использовать, может dsyevx или может dsyevd лучше (в плане точности)?

 
 
 
 Re: Статическая компановка LAPACK
Сообщение25.04.2018, 00:35 
Andrey_Kireew

dsyevd более устойчива, чем dsyevr: она использует быстрый a divide and conquer algorithm, разработанный в недалеком прошлом. Но и у dsyevr существуют проблемы. Например, известная квантовохимическая программа Gaussian, лидирующая по частоте использования (она коммерческая, но ее исходники, содержащие миллионы строк кода, можно найти в инете), использует по умолчанию dsyevr, но довольно часто результаты расчета ее не устраивают и она пересчитывает результаты, переключаясь на dsyev с выдачей такого типа:
DSYEVD-2 returned Info= 58101 IAlg= 4 N= 277 NDim= 277 NE2= 13207160 trying DSYEV.

 
 
 
 Re: Статическая компановка LAPACK
Сообщение25.04.2018, 01:40 
Понятно, другими словами dsyev самая медленная но самая надёжная и точная? (у меня не real-time если даже в 2-4 раза медленнее, то я лучше подожду лишнюю недельку)

На счёт памяти Вы угадали, у меня 64 ГБ и по прикидкам туда как раз только эта матрица и влезет, но при такой скорости как есть уйдут наверное месяцы, это не годится. У меня получилось с матрицей 48000 за 3 недели, причём с 3 раза, так как то свет вырубали, то комп зависал, а надо 90000 в идеале.

Как Вы думаете, будет ли для этой задачи реальный прирост производительности, или выиграю только 10-20%? Читал где то, что реально оптимизировать не более чем в 2-3 раза.

Ещё небольшой вопрос, сейчас смотрю информацию по intel MKL - там вроде та же Lapack - получается интерфейсы у функций такие же? И можно ли эту библиотеку установить в статической компоновке - как .lib ?

 
 
 
 Re: Статическая компановка LAPACK
Сообщение25.04.2018, 13:06 
Пока проверил функцию dsyevd - взаимные корреляции собственных векторов $R=10^{-21}$, это на 4 порядка лучше, правда и работает она помедленнее, но не на много, всего на 10%, главное - требует много доп. памяти (в 2 раза больше, чем сама исходная матрица), у dsyevd - в этом плане всё в порядке, доп. памяти практически не требуется,
ну и на всякий случай проверил dsyev - доп памяти требует меньше всех, $R=10^{-18}$, а работает в 2 раза медленее.

Так, что выходит dsyevd лучше всего. Последняя функция этого семейства dsyevx as73251, Вы случайно не знаете, какой в ней использован алгоритм? входных аргументов там больше всего ...

 
 
 
 Re: Статическая компановка LAPACK
Сообщение25.04.2018, 15:15 
Andrey_Kireew

По поводу интерфейса функций https://software.intel.com/en-us/forums ... pic/743278
По поводу статической линковки: https://software.intel.com/en-us/articl ... ne-advisor

Что касается dsyevd, то как я писал в сообщении post1307115.html#p1307115, можете нарваться на неприятности (в этом сообщении дважды "dsyevr" необходимо заменить на "dsyevd").

 
 
 [ Сообщений: 17 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group