Что такое хорошая бесплатная (с открытым исходным кодом) библиотека BLAS / LAPACK для .net (C #)? [закрыто]

StackOverflow https://stackoverflow.com/questions/1437501

Вопрос

У меня есть проект, написанный на C #, где мне нужно выполнять различные линейные алгебраические операции над матрицами (например, LU-факторизация).

Поскольку программа в основном является прототипом, созданным для подтверждения теории, реализации C # будет достаточно (по сравнению с, возможно, более быстрой C ++), но я все же хотел бы иметь хорошую библиотеку BLAS или LAPACK, чтобы сэкономить мне немного кода.

Короче говоря, кто-нибудь может порекомендовать бесплатную / открытую библиотеку BLAS или LAPACK для использования с .net?

С наилучшими пожеланиями, Эгиль.

Обновление: найдено Math.NET Numerics сегодня, выглядит интересно, у кого-нибудь есть опыт?

Это было полезно?

Решение

ACML от AMD можно загрузить бесплатно , но он предназначен только для двоичного кода, не с открытым исходным кодом и нативным кодом, а не .NET.

Производительность, как правило, выше, чем у кода Netlib.org, и, как правило, примерно такая же, как у MKL Intel - который не является бесплатным IIRC.

Загрузка включает в себя один пример, который демонстрирует, как связать его с C #. Не отличается от вызова любой другой библиотеки C или C ++ из C #.

Библиотека реализует BLAS, LAPACK, FFT и RNG.

http://developer.amd.com/cpu/ Библиотеки / ACML / загрузки / страницы / default.aspx

РЕДАКТИРОВАТЬ, ЧТОБЫ ОТВЕТИТЬ НА КОММЕНТАРИЙ:

На процессоре Intel ACML AMD будет выполнять приблизительно , а также MKL Intel, но это зависит от алгоритма, размеров матрицы, количества ядер, топологии и скорости памяти и т. д. и т. д. и т. д. и т. д. . Ваш пробег может отличаться. Единственный способ сказать наверняка - запустить собственный тест. В некоторых случаях ACML работает быстрее, чем MKL, даже на оборудовании Itel.

Любой из них будет значительно быстрее, чем любой "наивный" реализация для больших матриц. Оба спроектированы так, чтобы использовать несколько потоков на многоядерных процессорах, и имеют отлаженные вручную ядра ассемблера и много настроек поведения кэша на разных машинах.

Для маленьких матриц производительность, как правило, не имеет значения, поскольку любой современный процессор может решить маленький matix всего за несколько миллисекунд, даже используя самый простой код. В этом случае вы используете только библиотеку, чтобы избежать написания и отладки кода, который был написан уже сотни раз.

Другие советы

Математическая библиотека DotNumerics - это проект с открытым исходным кодом, написанный на C # и содержащий перевод Lapack, Blas, и Eispack для C #.

BLIS-подобное программное обеспечение для создания библиотек (BLIS) является текущим золотым стандартом для библиотек BLAS с открытым исходным кодом. https://github.com/flame/blis Это не так быстро, как MKL (хотя и близко) но быстрее, чем OpenBLAS, форк легендарного GotoBLAS, практически на всех процессорах (и намного быстрее на новейших архитектурах, включая Intel, AMD и ARM). Это в хорошем состоянии.

ACML, упомянутый в другом ответе, больше не существует. AMD теперь использует программное обеспечение с открытым исходным кодом как часть своего программного стека ACL (AMD Compute Library). BLIS является частью этого программного стека: https: //developer.amd .com / драм-CPU-библиотеки / Блас-библиотека / .

Caviat: плакат является частью проекта BLIS. Вышеуказанные претензии хорошо документированы.

(Комментарий добавлен позже: не заметил " .NET " ;. К сожалению, BLIS пока плохо поддерживается в Windows.)

У Лутца Родера хороший порт с открытым исходным кодом. Mapack.Net

Раньше использовался для различных проектов, и было легко работать с

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top