(c) Eigen FAQ |
Відволікаючись поки від теми продуктивності, С++ має всі засоби, щоб зробити роботу з матрицями зручною. Однак більшість авторів матричних бібліотек вдавалися в пояснення, чому писати: add_matrix(A,B) багато крутіше, ніж A+B. Завершилося все тим, що я, на базі простенької бібліотеки Slate, склепав свою матричну бібліотеку -- Slate2, зручну для моїх потреб, хоча й доволі повільну (*3). Подивитися на останню версію цього чуда можна тут (ніяким іншим чином не розповсюджував). Щастя наступило лише кілька років тому -- натрапив на eigen!
Виникла eigen всередині проекту KDE. Зараз вона надзвичайно зручна, швидка, та вміє доволі багато. Зокрема, використовує шаблонне метапрограмування, щоб обійти деякі проблеми матричних бібліотек в C++ (*4). Вміє самостійно векторизувати, використовуючи SIMD-інструкції, такі як SSE, AltiVec і ARM NEON. Eigen3 -- третя версія, векторизує навіть роботу з матрицями комплексних чисел. Працює із фіксованими, динамічними та розрідженими матрицями. В ролі елементів матриць можуть бути числа з плаваючою крапкою, комплексні числа, цілі числа, користувацькі типи. Що вміє робити над матрицями? Багато, перераховувати довго, див. краще сюди: 1, 2, 3. Надійна -- містить більше півтисячі власних тестів, проходить стандартні тести BLAS та LAPACK , використовується багатьма проектами.
Виникла eigen всередині проекту KDE. Зараз вона надзвичайно зручна, швидка, та вміє доволі багато. Зокрема, використовує шаблонне метапрограмування, щоб обійти деякі проблеми матричних бібліотек в C++ (*4). Вміє самостійно векторизувати, використовуючи SIMD-інструкції, такі як SSE, AltiVec і ARM NEON. Eigen3 -- третя версія, векторизує навіть роботу з матрицями комплексних чисел. Працює із фіксованими, динамічними та розрідженими матрицями. В ролі елементів матриць можуть бути числа з плаваючою крапкою, комплексні числа, цілі числа, користувацькі типи. Що вміє робити над матрицями? Багато, перераховувати довго, див. краще сюди: 1, 2, 3. Надійна -- містить більше півтисячі власних тестів, проходить стандартні тести BLAS та LAPACK , використовується багатьма проектами.
З того часу, як я натрапив на eigen ситуація покращилася -- з'явилися Armadillo, MTL4 (її попередня версія, MTL2 -- якраз наглядний приклад згадуваного вище багатослівного підходу), тощо. Як на мене, вони безперечно вартують уваги, але поступаються eigen, хоча фахово не скажу -- багато тестів не писав, багато часу на ознайомлення з ними не витрачав. Щоб відобразити своє, хай не до кінця науково перевірене, ставлення до eigen, зацитую її розробників:
Some other libraries do satisfy very well certain specialized needs, but none is as versatile as Eigen, has such a nice API, etc.
*** skipped ***
The state of existing matrix libraries before Eigen is that:
some are Free Software
some are fast
some have a decent API
some handle fixed-size matrices, some handle dynamic-size dense matrices, some handle sparse matrices
some provide linear algebra algorithms (LU, QR, ...)
some provide a geometry framework (quaternions, rotations...)
However Eigen is the first library to satisfy all these criteria.