Свободная библиотека линейной алгебры Eigen: история и основные возможности
Содержание:
1.Проект Eigen (Вы читаете данный раздел);
2. Документация и сторонние модули;
3. Как это работает: библиотека, которая умнее компилятора.
В незапамятные времена, когда компьютеры были большими, а цены на нефть - маленькими, программированием занимались в основном инженеры и ученые. Тогда компьютеры использовались для интенсивных математических вычислений, и только намного позже на них стали смотреть кино и обмениваться бессмысленными картинками. О тех далеких временах современному программисту почти ничего не напоминает, но только до тех пор, пока не приходится писать какой-то вычислительный код, который должен выполняться максимально быстро. Требования к скорости автоматически исключают такие модные сегодня языки, как Python, javascript, C# и Java. Остаются только компилируемые «старички» Fortran, C и C++, которые способны выжать из процессора все возможное.
Fortran, испытав подобие ренессанса в конце девяностых - начале двухтысячных, сейчас, похоже, окончательно утратил популярность. Новые стандарты Fortran 90/95/2003/2008 значительно осовременили язык, но он все же остался крайне неудобным по современным меркам. Очень многие старые вычислительные пакеты в последние годы переписываются на C++, и конца этой тенденции пока не видно. По всей видимости, именно С++ в обозримом будущем станет «вычислительным языком» номер один. Тем более парадоксально, что С++ «из коробки» очень плохо приспособлен для вычислительных задач.
На сегодняшний день лучшей свободной библиотекой линейной алгебры для С++ является Eigen (http://eigen.tuxfamily.org).
С библиотеками линейной алгебры в С++ много лет наблюдалась полная неразбериха. Существовали десятки конкурирующих библиотек, такие как uBLAS (http://www.boost.org/doc/ libs/1 40 0/libs/numeric/ublas/doc/overview.htm), MTL4 (Matrix Template Library, http://www.osl. iu.edu/research/mtl/mtl4/), GMM++ (http://home.gna.org/getfem/gmm intro), Blitz++ (http://www. oonumerics.org/blitz), POOMA (http://acts.nersc.gov/pooma) и т.д. Однако в каждой из них были свои существенные изъяны: низкая производительность, запутанный и неудобный синтаксис, плохая документация, отсутствие нужных алгоритмов, неподходящие лицензии и т.п. В общем, типичный «зоопарк» без какой-либо надежды на стандартизацию.
В один прекрасный момент разработчики KDE столкнулись с тем, что программы этого огромного проекта используют разные самодельные «костыли» и внешние библиотеки для численных расчетов. Поддерживать всю эту мешанину и тянуть ее за собой в виде зависимостей было очень сложно.
Тогда и родилась идея новой универсальной и открытой библиотеки линейной алгебры. Так появилась Eigen (http://eigen.tuxfamily.org).
Несмотря на свое происхождение из KDE, Eigen не имеет вообще никаких внешних зависимостей и является полностью заголовочной библиотекой (программу не надо с ним компоновать). Возможности библиотеки являются на сегодняшний день непревзойденными:
> Поддержка матриц и векторов произвольного размера.
> Специальные оптимизированные матрицы и векторы размера 2, 3 и 4.
> Поддержка плотных и разреженных матриц.
> Из коробки доступны оптимизированные алгоритмы решения систем линейных уравне¬ний, декомпозиции матриц, поиска собственных чисел и векторов.
> Естественная математическая нотация записи выражений.
> Все основные операции линейной алгебры (транспонирование, детерминант, векторные и скалярные произведения векторов, доступ к диагональным элементам, треугольным матрицам и т.п.).
> Оптимизированная поэлементная обработка в стиле Fortran.
> Поддержка геометрических трансформаций (вращений, трансляций, аффинных преобра¬зований, кватернионов, эйлеровых углов). Работа с матрицами преобразований OpenGL.
> Очень высокое качество кода и соответствие стандартным тестам BLAS и LAPACK.
> Очень высокая производительность на уровне эталонных библиотек BLAS и LAPACK. На процессорах Intel Eigen не уступает проприетарной реализации Intel MKL.
> Автоматическая векторизация вычислений для процессоров Intel (наборы инструкций SSE 2/3/4), ARM (инструкции NEON) и PowerPC (инструкции AltiVec).
> Поддержка всех основных современных компиляторов С++ (GCC, MinGW, CLang, MSVC, Intel C++ Compiler, QCC).
Eigen распространяется по весьма либеральной лицензии LGPLv3, которая позволяет ис¬пользовать библиотеку как в свободных, так и в коммерческих проектах. В качестве альтер¬нативы есть вариант с лицензией GPLv2.
Создали отличную программу для Android, подключаемую к библиотеке Eigen, и теперь Вас интересует продвижение мобильных приложений (http://www.jl.by/what-we-do/mobile-development/aso/), т.к. Вы считаете, что ваше детище вполне может стать коммерчески успешным проектом? Тогда я рекомендую Вам обратиться к опытным мастерам в данной области, на роль которых идеально подойдут специалисты сайта www.jl.by!
1.
2. Документация и сторонние модули;
3. Как это работает: библиотека, которая умнее компилятора.
В незапамятные времена, когда компьютеры были большими, а цены на нефть - маленькими, программированием занимались в основном инженеры и ученые. Тогда компьютеры использовались для интенсивных математических вычислений, и только намного позже на них стали смотреть кино и обмениваться бессмысленными картинками. О тех далеких временах современному программисту почти ничего не напоминает, но только до тех пор, пока не приходится писать какой-то вычислительный код, который должен выполняться максимально быстро. Требования к скорости автоматически исключают такие модные сегодня языки, как Python, javascript, C# и Java. Остаются только компилируемые «старички» Fortran, C и C++, которые способны выжать из процессора все возможное.
Fortran, испытав подобие ренессанса в конце девяностых - начале двухтысячных, сейчас, похоже, окончательно утратил популярность. Новые стандарты Fortran 90/95/2003/2008 значительно осовременили язык, но он все же остался крайне неудобным по современным меркам. Очень многие старые вычислительные пакеты в последние годы переписываются на C++, и конца этой тенденции пока не видно. По всей видимости, именно С++ в обозримом будущем станет «вычислительным языком» номер один. Тем более парадоксально, что С++ «из коробки» очень плохо приспособлен для вычислительных задач.
На сегодняшний день лучшей свободной библиотекой линейной алгебры для С++ является Eigen (http://eigen.tuxfamily.org).
Проект Eigen
С библиотеками линейной алгебры в С++ много лет наблюдалась полная неразбериха. Существовали десятки конкурирующих библиотек, такие как uBLAS (http://www.boost.org/doc/ libs/1 40 0/libs/numeric/ublas/doc/overview.htm), MTL4 (Matrix Template Library, http://www.osl. iu.edu/research/mtl/mtl4/), GMM++ (http://home.gna.org/getfem/gmm intro), Blitz++ (http://www. oonumerics.org/blitz), POOMA (http://acts.nersc.gov/pooma) и т.д. Однако в каждой из них были свои существенные изъяны: низкая производительность, запутанный и неудобный синтаксис, плохая документация, отсутствие нужных алгоритмов, неподходящие лицензии и т.п. В общем, типичный «зоопарк» без какой-либо надежды на стандартизацию.
В один прекрасный момент разработчики KDE столкнулись с тем, что программы этого огромного проекта используют разные самодельные «костыли» и внешние библиотеки для численных расчетов. Поддерживать всю эту мешанину и тянуть ее за собой в виде зависимостей было очень сложно.
Тогда и родилась идея новой универсальной и открытой библиотеки линейной алгебры. Так появилась Eigen (http://eigen.tuxfamily.org).
Несмотря на свое происхождение из KDE, Eigen не имеет вообще никаких внешних зависимостей и является полностью заголовочной библиотекой (программу не надо с ним компоновать). Возможности библиотеки являются на сегодняшний день непревзойденными:
> Поддержка матриц и векторов произвольного размера.
> Специальные оптимизированные матрицы и векторы размера 2, 3 и 4.
> Поддержка плотных и разреженных матриц.
> Из коробки доступны оптимизированные алгоритмы решения систем линейных уравне¬ний, декомпозиции матриц, поиска собственных чисел и векторов.
> Естественная математическая нотация записи выражений.
> Все основные операции линейной алгебры (транспонирование, детерминант, векторные и скалярные произведения векторов, доступ к диагональным элементам, треугольным матрицам и т.п.).
> Оптимизированная поэлементная обработка в стиле Fortran.
> Поддержка геометрических трансформаций (вращений, трансляций, аффинных преобра¬зований, кватернионов, эйлеровых углов). Работа с матрицами преобразований OpenGL.
> Очень высокое качество кода и соответствие стандартным тестам BLAS и LAPACK.
> Очень высокая производительность на уровне эталонных библиотек BLAS и LAPACK. На процессорах Intel Eigen не уступает проприетарной реализации Intel MKL.
> Автоматическая векторизация вычислений для процессоров Intel (наборы инструкций SSE 2/3/4), ARM (инструкции NEON) и PowerPC (инструкции AltiVec).
> Поддержка всех основных современных компиляторов С++ (GCC, MinGW, CLang, MSVC, Intel C++ Compiler, QCC).
Eigen распространяется по весьма либеральной лицензии LGPLv3, которая позволяет ис¬пользовать библиотеку как в свободных, так и в коммерческих проектах. В качестве альтер¬нативы есть вариант с лицензией GPLv2.
Создали отличную программу для Android, подключаемую к библиотеке Eigen, и теперь Вас интересует продвижение мобильных приложений (http://www.jl.by/what-we-do/mobile-development/aso/), т.к. Вы считаете, что ваше детище вполне может стать коммерчески успешным проектом? Тогда я рекомендую Вам обратиться к опытным мастерам в данной области, на роль которых идеально подойдут специалисты сайта www.jl.by!