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

Быстрый решатель разреженных систем

Recommended Posts

Понадобился решатель  разреженных СЛАУ. Попробовал Eigen (сопряженный градиент) и MATLAB, сравнил по скорости...  

МАТЛАБ быстрее в 6 раз.  Кто нибудь видел быструю либу для таких целей, нормально собирающуюся под виндой? 

Рыл сеть, нарыл неплохой список:

http://www.netlib.org/utk/people/JackDongarra/la-sw.html

Но все что пробовал (elemental, MUMPS,PaStiX) требует много танцев.

Есть еще cuSparse, но хотелось бы CPU-шный вариант.

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


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

Есть ArrayFire, который на CPU работать умеет. Но насколько быстрый там у него алгоритм? Или он использует что-то стороннее для CPU - я тоже не знаю.

  • Like 1

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


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

Спасибо, попробую.

Насколько я понял, решателя в готовом виде там нет, но есть пример с реализацией сопряженного градиента: https://arrayfire.com/sparse-matrices-in-arrayfire-v3-4/ 

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


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

Значит так, ArrayFire, довольно стремная штука, и решает очень медленно, сильно медленнее чем Eigen. Скорее всего это связано с тем, что пример решателя, который я взял самый наипростейший. И еще, в документации и примерах везде инициализация рандомом. Как затолкать и вытащить в массив/из массива то что мне надо я ковырялся целый день. 

В результате нашел решатель в MKL, пол дня разбирательств с blas-подобными командами, и готово.

Решает намного быстрее и стабильнее чем Eigen, примерно как MATLAB.

Пример работы с этой штукой у меня на диске лежит здесь:

c:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2017.2.187\windows\mkl\examples\examples_core_c.zip\solverc\source\dss_sym_c.c

DSS, насколько я понял это надстройка над PARDISO намного более гибкой штукой, но параметров там сильно больше нужно задавать. 

 

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


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

Это может быть, может быть на AF можно реализовать быстрый решатель, но изначально, как я понял, AF не математическая библиотека, а скорее подобие stl, и математический функционал на ней нужно реализовывать руками. Тот пример, который я брал, он сильно напрямую реализован, безо всяких стабилизаций, ускорений, учета структуры матрицы, поэтому и работает медленно и неточно.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×