Первоначальный выпуск | 1992 г.; 28 лет назад (1992 г.) |
---|---|
Стабильный выпуск | 3.9.0 / 21 ноября 2019 г.; 11 месяцев назад (2019-11-21) |
Написано на | Fortran 90 |
Тип | Программная библиотека |
Лицензия | BSD-new |
Веб-сайт | www.netlib.org / lapack / |
LAPACK ("Linear A lgebra Pack age ") - стандартная библиотека программного обеспечения для числовая линейная алгебра. Предоставляет процедуры для решения систем линейных уравнений и линейных наименьших квадратов, задач на собственные значения и разложение по сингулярным числам. Он также включает процедуры для реализации связанных матричных факторизаций, таких как LU, QR, разложение Холецкого и разложение Шура. LAPACK изначально был написаны на FORTRAN 77, но перемещены в Fortran 90 в версии 3.2 (2008). Подпрограммы обрабатывают как вещественные, так и комплексные матрицы в и single, и двойной точности.
LAPACK был разработан как преемник линейных уравнений и линейных программ наименьших квадратов LINPACK и подпрограмм собственных значений EISPACK. LINPA CK, написанный в 1970-х и 1980-х годах, был разработан для работы на современных в то время векторных компьютерах с общей памятью. LAPACK, напротив, был разработан для эффективного использования кэшей в современных архитектурах на основе кеша и, таким образом, может работать на порядки быстрее, чем LINPACK на таких машинах, при условии хорошо настроенного BLAS реализация. LAPACK также был расширен для работы в системах с распределенной памятью в более поздних пакетах, таких как ScaLAPACK и PLAPACK.
LAPACK лицензируется в соответствии с тремя пунктами BSD style license, разрешающая лицензия свободных программ с некоторыми ограничениями.
Подпрограммы в LAPACK имеют соглашение об именах, которое делает идентификаторы очень компактными. Это было необходимо, поскольку первые стандарты Fortran поддерживали только идентификаторы длиной до шести символов, поэтому имена пришлось сократить, чтобы соответствовать этому пределу.
Имя подпрограммы LAPACK имеет вид pmmaaa
, где:
p
- однобуквенный код, обозначающий тип используемых числовых констант. S
, D
обозначают действительную арифметику с плавающей запятой соответственно с одинарной и двойной точностью, а C
и Z
обозначают комплексную арифметику с соответственно одинарная и двойная точность. В более новой версии, LAPACK95, используются общие подпрограммы , чтобы избежать необходимости явно указывать тип данных.mm
- это двухбуквенный код, обозначающий тип матрицы, ожидаемой алгоритмом. Коды для различных типов матриц приведены ниже; фактические данные хранятся в другом формате в зависимости от конкретного вида; например, когда задан код DI
, подпрограмма ожидает вектор длины n
, содержащий элементы по диагонали, а когда задан код GE
, подпрограмма ожидает массив размером n × n, содержащий элементы матрицы.aaa
- это однобуквенный или трехбуквенный код, описывающий фактический алгоритм, реализованный в подпрограмме, например SV
обозначает подпрограмму для решения линейной системы, а R
обозначает обновление ранга 1.Например, подпрограмма для решения линейной системы с общая (неструктурированная) матрица, использующая реальную арифметику двойной точности, называется DGESV
.
Подробную информацию об этой схеме можно найти в разделе Схема именования в Руководстве пользователя LAPACK.
Сегодня многие среды программирования поддерживают использование библиотек с привязкой C. Подпрограммы LAPACK могут использоваться как функции C, если соблюдаются некоторые ограничения.
Также доступны несколько альтернативных языковых привязок :
Как и в случае с BLAS, LAPACK часто разветвляется или переписывается на обеспечивают лучшую производительность в определенных системах. Вот некоторые из реализаций:
Поскольку LAPACK использует BLAS для тяжелой работы, просто подключается к более настроенному BLAS реализация обычно значительно улучшает производительность. В результате LAPACK не реализуется так часто, как BLAS.
Эти проекты предоставляют функциональность, аналогичную LAPACK, но основной интерфейс отличается от LAPACK: