openblas
Оптимизированная библиотека подпрограмм линейной алгебры (BLAS, Basic Linear Algebra Subprograms), основанная на GotoBLAS2. Она предоставляет высокопроизводительные реализации стандартных интерфейсов BLAS и LAPACK (Linear Algebra PACKage) для широкого спектра процессорных архитектур. Библиотека широко используется в научных вычислениях, машинном обучении и других областях, требующих эффективных матричных операций.
Особенности
- оптимизированные реализации BLAS уровней 1, 2 и 3 (векторные, матрично-векторные и матрично-матричные операции);
- встроенная поддержка LAPACK для решения сложных задач линейной алгебры;
- автоматическое определение и оптимизация под конкретную архитектуру процессора во время сборки;
- многопоточность для ускорения вычислений на многоядерных системах;
- интерфейсы CBLAS для C/C++ и стандартные Fortran-интерфейсы BLAS/LAPACK.
Основные компоненты
OpenBLAS предоставляет реализации стандартных интерфейсов BLAS и LAPACK, а также ряд дополнительных функций для управления поведением библиотеки во время выполнения (подробнее с документацией можно ознакомиться здесь).
BLAS и CBLAS интерфейсы
BLAS разделён на три уровня, каждый из которых предоставляет функции для определённого класса операций. CBLAS предоставляет C-обёртку для этих функций.
Основные категории функций BLAS:
-
Уровень 1 — векторные операции:
*dot/*dotu— скалярное произведение векторов;*axpy— операцияy <- a*x + y;*nrm2— евклидова норма вектора;*asum— сумма абсолютных значений;*swap,*copy,*scal— обмен, копирование и масштабирование векторов.
-
Уровень 2 — матрично-векторные операции:
*gemv— умножение матрицы на вектор;*ger,*syr,*her— rank-1 и rank-2 обновления матриц;*trsv,*tpsv— решение треугольных систем.
-
Уровень 3 — матрично-матричные операции:
*gemm— общее умножение матриц (ключевая операция для многих приложений);*symm,*hemm,*syrk,*herk— умножение симметричных/эрмитовых матриц;*trmm,*trsm— умножение на треугольную матрицу и решение треугольных систем.
LAPACK и LAPACKE интерфейсы
OpenBLAS включает полную реализацию LAPACK — библиотеки для решения сложных задач линейной алгебры. Доступны как оригинальные Fortran-интерфейсы, так и C-обёртка LAPACKE.
Основные категории функций LAPACK:
-
Решение систем линейных уравнений:
*gesv— общая система;*posv— для положительно определённых матриц;*sysv,*hesv— для симметричных/эрмитовых матриц.
-
Разложения матриц:
*getrf— LU-разложение;*potrf— разложение Холецкого;*geqrf— QR-разложение;*syev,*heev— вычисление собственных значений и векторов;*gesvd— сингулярное разложение (SVD).
-
Методы наименьших квадратов:
*gels— решение задач методом наименьших квадратов.
Управление памятью и дополнительные функции
Библиотека предоставляет функции для контроля над выделением памяти и получения информации о версии.
Основные функции:
openblas_set_affinity(enable)— включение/отключение привязки к ядрам;openblas_get_parallel()— определение типа параллелизма (0 — нет, 1 — pthreads, 2 — OpenMP);openblas_get_config()— получение строки с конфигурацией сборки;openblas_get_corename()— имя целевой архитектуры, под которую скомпилирована библиотека;