Кто-нибудь знает, что будет хорошей библиотекой для вычисления линейной алгебры в Android (SVD, QR, LU, наименьшие квадраты, инверсные и т.д.)?
Библиотека линейных алгебр для Android
Ответ 1
Обычные библиотеки линейной алгебры реализованы в слоях. Подпрограмма Basic Linear Algebra (BLAS) находится в нижнем слое. Пакет линейной алгебры (LAPACK) построен поверх BLAS. Интерфейсы для этих двухуровневых библиотек стандартизированы еще в 1990-х годах, и поставщики оборудования обычно предоставляют различные индивидуальные реализации для своих архитектур. LAPACK предоставляет упомянутые вами операции библиотеки линейной алгебры (SVD, QR, LU, наименьших квадратов, обратные и т.д.). В последние годы появилось несколько более удобных для пользователя библиотек линейной алгебры (например, Armadillo, Eigen), которые фактически предоставляют некоторые обертки для обычной библиотеки BLAS и LAPACK.
JBLAS - это просто Java-реализация традиционной BLAS. JAMA также LAPACK-подобная библиотека, реализованная с Java. Эти две библиотеки не предназначены для Android. Но поскольку в программировании Android обычно используется Java, мы можем заставить их работать на Android. Однако мы не можем ожидать производительность от этих реализаций. Мой аргумент заключается в том, что производительность является ключевым фактором, поскольку вы сами вызываете библиотеки, а не пишете их сами, а высокая производительность, как правило, повышает низкую стоимость энергии на мобильных платформах с ОС Android.
В то время как вышеупомянутые библиотеки линейной алгебры обычно нацелены на ЦП (например, архитектура x86, ОС: Linux/Windows/MacOS), эксперты в настоящее время добиваются прогресса в обеспечении полной поддержки стека на мобильных платформах (например, ARM, OS: Android).
Я только заметил, что Qualcomm только что выпустил свою собственную BLAS-подобную библиотеку Snapdragon Math Library, которая может работать на настраиваемой архитектуре ARM компании Qualcomm. Благодаря связыванию LAPACK верхнего уровня эти операции линейной алгебры (SVD, QR, LU, наименьших квадратов, обратное и т.д.) Могут быть реализованы на Android с высокой производительностью.
Совсем недавно, благодаря быстрому развитию глубокого обучения, стал популярным ряд пакетов нейронных сетей, таких как NNPACK. Под капотом находятся библиотеки линейной алгебры с низкоуровневыми высокопроизводительными реализациями примитивов для разных слоев в нейронных сетях.
Ответ 2
Jama работает достаточно хорошо.
Ответ 3
Если вы используете С++ и NDK, вы можете использовать Eigen. Он может использовать команды SSE 2/3/4, ARM NEON и AltiVec.