2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Статическая компановка LAPACK
Сообщение22.04.2018, 15:53 


07/10/15

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

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

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение22.04.2018, 19:31 
Заслуженный участник


15/05/05
3445
USA
С основного сайта LAPACK можно перейти на сайт LAPACK for Windows.
Там есть ссылки на какие-то скомпилированные static libraries для Visual Studio 2010, win32 и x64.

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение22.04.2018, 20:26 


07/10/15

2400
Спасибо, сейчас посмотрю.

-- 22.04.2018, 22:14 --

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

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение22.04.2018, 22:21 
Заслуженный участник


15/05/05
3445
USA
Andrey_Kireew,
С сайта LAPACK Вы можете скачать lapack-3.5.0.tgz.

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение23.04.2018, 21:38 


04/10/17

153
Andrey_Kireew

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

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение23.04.2018, 22:08 


07/10/15

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

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

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

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение23.04.2018, 22:51 


04/10/17

153
Я исходники Lapack использовал как грубое приближение для разработки алгоритмов четверной точности, т.к. интеловская фортрановская четверная точность уступает по скорости двойной точности раз в сто, а у меня менее чем на порядок.

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


07/10/15

2400
Сам по себе фортран я не использую, подключаю к С приложению

Используется синтаксис 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 


07/10/15

2400
as73251 Возможно Вы оказались правы, отладил я свою программу, протестировал - работает то всё правильно, но прироста скорости абсолютно никакого нет.

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

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение24.04.2018, 22:45 


04/10/17

153
Andrey_Kireew

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

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

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение24.04.2018, 23:44 


07/10/15

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

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

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение25.04.2018, 00:35 


04/10/17

153
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 


07/10/15

2400
Понятно, другими словами 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 


07/10/15

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

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

 Профиль  
                  
 
 Re: Статическая компановка LAPACK
Сообщение25.04.2018, 15:15 


04/10/17

153
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  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group