BLAS и LAPACK: стандартные библиотеки линейной алгебры¶
BLAS и LAPACK — это де-факто стандартные программные библиотеки для выполнения операций линейной алгебры, широко используемые в научных вычислениях, инженерных расчётах и машинном обучении. BLAS (Basic Linear Algebra Subprograms) предоставляет низкоуровневые операции над векторами и матрицами, тогда как LAPACK (Linear Algebra Package) построен поверх BLAS и реализует более сложные алгоритмы, такие как решение систем линейных уравнений, вычисление собственных значений и сингулярное разложение.
¶История
Разработка BLAS началась в 1970-х годах. Первая версия спецификации (Level 1) была опубликована в 1979 году и описывала операции вида «вектор-вектор» (скалярное произведение, сложение векторов). В 1988 году вышла спецификация Level 2, добавившая операции «матрица-вектор» (умножение матрицы на вектор, решение треугольных систем). В 1990 году появился Level 3, включивший операции «матрица-матрица» (общее умножение матриц, ранговые обновления).
LAPACK был создан в 1989 году как преемник библиотек LINPACK и EISPACK. Первый релиз состоялся в 1992 году. Проект разрабатывался совместно учёными из Университета Теннесси, Калифорнийского университета в Беркли, Университета Иллинойса и других организаций. Основной целью было достижение высокой производительности на машинах с иерархической памятью (кэш-памятью) за счёт использования блочных алгоритмов, опирающихся на BLAS Level 3.
¶Структура и функции
¶BLAS
BLAS разделён на три уровня в зависимости от типа выполняемых операций:
- Level 1 — векторные операции: копирование, масштабирование, скалярное произведение, нормы векторов.
- Level 2 — операции «матрица-вектор»: умножение матрицы на вектор, решение систем с треугольной матрицей, внешнее произведение векторов.
- Level 3 — операции «матрица-матрица»: умножение матриц, решение систем с несколькими правыми частями, ранговые обновления.
Функции BLAS используют мнемонические имена, кодирующие тип данных (s — одинарная точность, d — двойная точность, c — комплексные числа, z — комплексные числа двойной точности) и выполняемую операцию. Например, dgemm — умножение матриц двойной точности.
¶LAPACK
LAPACK включает следующие основные группы процедур:
- Решение систем линейных уравнений — LU-разложение с частичным выбором ведущего элемента (функции
*gesv), а также решения для ленточных и симметричных матриц. - Наименьшие квадраты — QR-разложение (
gels,gelsd) и методы на основе сингулярного разложения. - Собственные значения и сингулярные числа — алгоритмы для симметричных (
syev), несимметричных (geev) и обобщённых задач. - Разложения матриц — LU, QR, Cholesky (
*potrf), Hessenberg, бидиагональное и другие. - Вспомогательные функции — вычисление норм, масштабирование, генерация и применение ортогональных матриц.
¶Реализации
Существует несколько высокопроизводительных реализаций BLAS и LAPACK, оптимизированных под конкретные процессоры:
- Netlib — эталонная реализация на Фортране, поддерживаемая организацией Netlib. Служит базой для проверки корректности других реализаций.
- OpenBLAS — открытая реализация, оптимизированная для современных процессоров x86-64, ARM и RISC-V. Включает функции BLAS и LAPACK.
- Intel MKL — проприетарная библиотека Intel, оптимизированная для процессоров Intel и AMD. Широко используется в коммерческих и академических приложениях.
- AMD BLIS/LIBFLAME — библиотеки, разработанные для процессоров AMD, также работают на архитектурах Intel и ARM.
- ATLAS (Automatically Tuned Linear Algebra Software) — реализация, которая автоматически настраивает параметры под конкретную аппаратную платформу.
- Apple Accelerate — реализация, встроенная в macOS и iOS, включающая BLAS и LAPACK.
¶Применение
BLAS и LAPACK являются фундаментом для множества научных и инженерных пакетов. Они используются в:
- Численных пакетах: MATLAB, GNU Octave, SciPy, NumPy (через LAPACK).
- Системах компьютерной алгебры: Mathematica, Maple.
- Моделирующих средах: Simulink, COMSOL Multiphysics.
- Библиотеках машинного обучения: TensorFlow, PyTorch (через оптимизированные реализации BLAS).
- Геофизике, гидродинамике, квантовой химии и других областях, требующих интенсивных матричных вычислений.
¶Значение и критика
Основное достоинство BLAS и LAPACK — стандартизация интерфейсов, позволяющая переносить код между платформами без изменений, а также использовать оптимизированные реализации без переписывания программ. Благодаря этому достигается высокая производительность на широком спектре архитектур.
Критика в основном касается устаревшего дизайна интерфейсов, ориентированного на Фортрановские массивы с фиксированной размерностью, что неудобно для языков с динамическим управлением памятью, таких как C++ или Python. Кроме того, спецификации BLAS не покрывают разрежённые матрицы и некоторые современные алгоритмы. Тем не менее, благодаря обратной совместимости и огромной накопленной кодовой базе, BLAS и LAPACK остаются основным стандартом в численной линейной алгебре.
¶Источники
- Anderson E., Bai Z., Bischof C. et al. LAPACK Users' Guide. — SIAM, 1999.
- Dongarra J., Du Croz J., Duff I., Hammarling S. A Set of Level 3 Basic Linear Algebra Subprograms // ACM Transactions on Mathematical Software. — 1990.
- Lawson C., Hanson R., Kincaid D., Krogh F. Basic Linear Algebra Subprograms for Fortran Usage // ACM Transactions on Mathematical Software. — 1979.
- Документация Netlib: BLAS и LAPACK.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


