ЛАПАК
Первоначальный выпуск | 1992 год |
---|---|
Стабильная версия | 3.12.0 [1] / 24 ноября 2023 г |
Репозиторий | |
Написано в | Фортран 90 |
Тип | Библиотека программного обеспечения |
Лицензия | BSD-новый |
Веб-сайт | нетлиб |
LAPACK (« линейной алгебры » числовой Пакет ) — это стандартная программная библиотека для линейной алгебры . Он предоставляет процедуры для решения систем линейных уравнений и линейных наименьших квадратов , задач на собственные значения и разложения по сингулярным значениям . Он также включает процедуры для реализации соответствующих матричных факторизаций, таких как LU , QR , разложение Холецкого и Шура . [2] LAPACK изначально был написан на FORTRAN 77 , но был перенесен на Fortran 90 в версии 3.2 (2008 г.). [3] Подпрограммы обрабатывают как вещественные , так и комплексные матрицы как с одинарной , так и с двойной точностью . LAPACK опирается на базовую реализацию BLAS , обеспечивая эффективные и портативные вычислительные блоки для своих процедур. [2] : «BLAS как ключ к портативности»
LAPACK был разработан как преемник линейных уравнений и линейных процедур наименьших квадратов LINPACK, а также процедур собственных значений EISPACK . LINPACK , написанный в 1970-х и 1980-х годах, был разработан для работы на современных векторных компьютерах с общей памятью. LAPACK, напротив, был разработан для эффективного использования кэшей современных архитектур на основе кэша и параллелизма на уровне команд современных суперскалярных процессоров . [2] : «Факторы, влияющие на производительность» и, следовательно, может работать на таких машинах на несколько порядков быстрее, чем LINPACK, при условии хорошо настроенной реализации BLAS . [2] : «BLAS как ключ к портативности» LAPACK также был расширен для работы в системах с распределенной памятью в более поздних пакетах, таких как ScaLAPACK и PLAPACK. [4]
Netlib LAPACK лицензируется в соответствии с трехпунктовой лицензией в стиле BSD , разрешающей лицензией бесплатного программного обеспечения с небольшими ограничениями. [5]
Схема именования
[ редактировать ]Подпрограммы в LAPACK имеют соглашение об именах, которое делает идентификаторы очень компактными. Это было необходимо, поскольку первые стандарты Фортрана поддерживали идентификаторы длиной до шести символов, поэтому имена приходилось сокращать, чтобы уложиться в этот предел. [2] : «Схема именования»
Имя подпрограммы LAPACK имеет вид pmmaaa
, где:
p
— однобуквенный код, обозначающий тип используемых числовых констант.S
,D
обозначают реальную арифметику с плавающей запятой соответственно одинарной и двойной точности, в то время какC
иZ
обозначают сложную арифметику с одинарной и двойной точностью соответственно. В более новой версии LAPACK95 используются общие подпрограммы, чтобы избежать необходимости явно указывать тип данных.mm
— двухбуквенный код, обозначающий тип матрицы, ожидаемой алгоритмом. Коды для различных типов матриц приведены ниже; фактические данные хранятся в другом формате в зависимости от конкретного вида; например, когда кодDI
задан, подпрограмма ожидает вектор длиныn
содержащие элементы по диагонали, а когда кодGE
задан, подпрограмма ожидает массив размера n × n , содержащий элементы матрицы.aaa
представляет собой код длиной от одной до трех букв, описывающий фактический алгоритм, реализованный в подпрограмме, напримерSV
обозначает подпрограмму для решения линейной системы , аR
обозначает обновление ранга 1.
Например, подпрограмма для решения линейной системы с общей (неструктурированной) матрицей с использованием реальной арифметики двойной точности называется DGESV
. [2] : «Линейные уравнения»
Использование с другими языками программирования и библиотеками.
[ редактировать ]Многие среды программирования сегодня поддерживают использование библиотек с привязкой к C , что позволяет напрямую использовать подпрограммы LAPACK при условии соблюдения некоторых ограничений. Кроме того, на основе LAPACK построены многие другие программные библиотеки и инструменты для научных и численных вычислений, такие как R , [6] МАТЛАБ , [7] и СкиПи . [8]
несколько альтернативных языковых привязок Также доступны :
- Броненосец для C++
- ИТ++ для C++
- LAPACK++ для C++
- Лакамл для OCaml
- CLapack для C
- SciPy для Python
- Гонум для Го
- НЛапак для .NET
- CControl для C во встроенных системах
- лапак от ржавчины
Реализации
[ редактировать ]Как и в случае с BLAS, LAPACK иногда разветвляется или переписывается для обеспечения лучшей производительности в конкретных системах. Некоторые из реализаций:
- Ускорение
- Apple Платформа для macOS и iOS , включающая настроенные версии BLAS и LAPACK. [9] [10]
- Нетлиб ЛАПАК
- Официальный LAPACK.
- Netlib ScaLAPACK
- Масштабируемый (многоядерный) LAPACK, построенный на базе PBLAS .
- Интел МКЛ
- Математические процедуры Intel для процессоров x86.
- OpenBLAS
- Повторная реализация BLAS и LAPACK с открытым исходным кодом.
- Гонум ЛАПАК
- Частичная собственная реализация Go .
Поскольку LAPACK обычно вызывает базовые процедуры BLAS для выполнения основной части своих вычислений, простого подключения к лучше настроенной реализации BLAS может быть достаточно для значительного повышения производительности. В результате LAPACK переопределяется не так часто, как BLAS.
Похожие проекты
[ редактировать ]Эти проекты предоставляют функциональность, аналогичную LAPACK, но основной интерфейс отличается от LAPACK:
- Либфлейм
- Плотная библиотека линейной алгебры. Имеет оболочку, совместимую с LAPACK. Может использоваться с любым BLAS, хотя BLIS является предпочтительной реализацией. [11]
- Собственный
- Библиотека заголовков для линейной алгебры. Имеет BLAS и частичную реализацию LAPACK для совместимости.
- МАГМА
- Проект «Матричная алгебра на графических процессорах и многоядерных архитектурах» (MAGMA) разрабатывает библиотеку плотной линейной алгебры, аналогичную LAPACK, но для гетерогенных и гибридных архитектур, включая многоядерные системы, ускоряемые с помощью GPGPU .
- ПЛАЗМА
- Проект «Параллельная линейная алгебра для масштабируемых многоядерных архитектур» (PLASMA) — это современная замена LAPACK для многоядерных архитектур. PLASMA — это программная платформа для разработки асинхронных операций и функций внеочередного планирования с помощью планировщика времени выполнения QUARK, который можно использовать для любого кода, выражающего свои зависимости с помощью направленного ациклического графа . [12]
См. также
[ редактировать ]- Список числовых библиотек
- Библиотека математических ядер (MKL)
- Цифровая библиотека НАГ
- SLATEC , библиотека математических и статистических процедур на FORTRAN 77.
- QUADPACK , библиотека FORTRAN 77 для численного интегрирования.
Ссылки
[ редактировать ]- ^ «Выпуск 3.12.0» . 24 ноября 2023 г. Проверено 19 декабря 2023 г.
- ^ Перейти обратно: а б с д и ж Андерсон, Э.; Бай, З.; Бишоф, К.; Блэкфорд, С.; Деммель, Дж. ; Донгарра, Дж. ; Дю Кроз, Ж.; Гринбаум, А .; Хаммарлинг, С.; Маккенни, А.; Соренсен, Д. (1999). Руководство пользователя LAPACK (Третье изд.). Филадельфия, Пенсильвания: Общество промышленной и прикладной математики. ISBN 0-89871-447-8 . Проверено 28 мая 2022 г.
- ^ «Примечания к выпуску LAPACK 3.2» . 16 ноября 2008 г.
- ^ «PLAPACK: Пакет параллельной линейной алгебры» . www.cs.utexas.edu . Техасский университет в Остине . 12 июня 2007 года . Проверено 20 апреля 2017 г.
- ^ "ЛИЦЕНЗИЯ.txt" . Нетлиб . Проверено 28 мая 2022 г.
- ^ «R: Библиотека LAPACK» . stat.ethz.ch. Проверено 19 марта 2022 г.
- ^ «ЛАПАК в MATLAB» . Справочный центр Mathworks . Проверено 28 мая 2022 г.
- ^ «Низкоуровневые функции LAPACK» . Руководство по SciPy v1.8.1 . Проверено 28 мая 2022 г.
- ^ «Руководства и пример кода» . разработчик.apple.com . Проверено 7 июля 2017 г.
- ^ «Руководства и пример кода» . разработчик.apple.com . Проверено 7 июля 2017 г.
- ^ «amd/libflame: Высокопроизводительная объектно-ориентированная библиотека для вычислений DLA» . Гитхаб . АМД. 25 августа 2020 г.
- ^ «ИКЛ» . icl.eecs.utk.edu . Проверено 7 июля 2017 г.