Открыть сервис

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 →