Какова взаимосвязь BLAS, LAPACK и других библиотек линейной алгебры?

26

Я искал библиотеки линейной алгебры C ++ для проекта, над которым я работал. То, что я до сих пор не понимаю, это соединение BLAS и LAPACK с другими библиотеками линейной алгебры.

Просматривая эту статью о библиотеках линейной алгебры, я обнаружил, что интересно:

  • некоторые библиотеки независимы от BLAS и LAPACK
  • некоторые требуют BLAS и LAPACK
  • некоторые имеют дополнительные интерфейсы для BLAS и LAPACK
  • и, насколько я понимаю, вы можете использовать BLAS и LAPACK для непосредственного решения задач линейной алгебры

Я могу себе представить, что некоторые библиотеки являются просто интерфейсами C ++ к библиотекам BLAS и LAPACK, написанным на C и Fortran, а другие реализовали свои собственные замещающие процедуры, но

  1. Каковы последствия дополнительных интерфейсов для BLAS и LAPACK? Что вы теряете, отказавшись, и что библиотеки делают вместо этого?

  2. Любая из библиотек предоставляет больше, чем просто интерфейс? Например, UMFPACK написан на C и имеет дополнительные интерфейсы для BLAS и LAPACK. Что может сделать UMFPACK (или другие библиотеки), чего BLAS и LAPACK не могут сделать самостоятельно?

Нил Круис
источник

Ответы:

15

Насколько я знаю, Лапак является единственной общедоступной реализацией ряда алгоритмов (несимметричный плотный алгоритм Эйгенсольвера, псевдоквадратичный симметричный по времени алгоритм Эйгенсольвер, быстрый Якоби СВД). Большинство библиотек, которые не используют BLAS + Lapack, обычно поддерживают очень примитивные операции, такие как умножение матриц, факторизация LU и декомпозиция QR. Lapack содержит некоторые из самых сложных алгоритмов для плотных матричных вычислений, которые, я не верю, реализованы где-либо еще.

Чтобы ответить на ваши вопросы (хотя бы частично),

  1. Отказавшись от BLAS / Lapack, вы, как правило, не упускаете функциональность (если только не был разработан дополнительный интерфейс, так что нет альтернативной реализации, что встречается редко). Если вы хотите выполнять очень сложные операции, эти другие библиотеки, вероятно, сами по себе их не реализуют. Поскольку BLAS может быть сильно настроен на вашу архитектуру, вы можете упустить огромные ускорения (разница в скорости на порядок не является неслыханной).

  2. Вы упоминаете UMFPACK, который предназначен для факторизации разреженных матриц. BLAS / Lapack касается только плотных матриц. UMFPACK на каком-то уровне должен работать над проблемами среднего размера, которые он может делать, используя пользовательские реализации или вызывая BLAS / Lapack. Здесь разница только в скорости.

Если скорость вызывает большое беспокойство, попробуйте использовать библиотеку, которая поддерживает дополнительные привязки BLAS / Lapack, и в конце концов используйте их, когда хотите быстрее.

Виктор Лю
источник
3
  1. Хорошие реализации подпрограмм BLAS и LAPACK (наиболее важно, подпрограмм BLAS) могут быть намного быстрее, чем простые наивные реализации тех же функций. Однако эффективные реализации обычно включают в себя оптимизации, которые очень специфичны для конкретного компьютера, на котором вы работаете. Даже для разных моделей процессоров одного и того же производителя (например, процессоры Intel x86-64) часто требуется совсем другой код для получения хорошей производительности. Предоставляя оптимизированные библиотеки BLAS / LAPACK в программный пакет, вы, как правило, можете ускорить код по сравнению с использованием неоптимизированных подпрограмм. Однако, поскольку многие случайные пользователи могут не иметь опыта установки оптимизированных подпрограмм, часто также предоставляется возможность использовать общие неоптимизированные подпрограммы линейной алгебры.

  2. UMFPACK - это библиотека подпрограмм для линейной алгебры на разреженных матрицах (матрицы с большой долей 0 записей). Она может использовать BLAS / LAPACK для обработки плотных матриц (или плотных блоков в матрицах), с которыми она сталкивается.

Брайан Борхерс
источник
1

Краткая версия: это библиотеки, написанные в основном на Фортране, которые используются для числовых операций во многих языках - даже в некоторых программах на C из-за их высокой скорости и оптимизации; Они также являются единственными открытыми реализациями многих алгоритмов :)

Вам не нужно использовать библиотеки, если они не имеют зависимостей; iirc большинство из них довольно независимы, и вы всегда можете написать свои собственные математические функции, такие как более векторизованные для вашей архитектуры

Эйриуу фон Кауиф
источник
1
Большинство оптимизированных подпрограмм BLAS и LAPACK давно перестали писать на фортране. Самые быстрые процедуры BLAS и LAPACK обычно не загружаются из netlib. Производители большинства процессоров продают или распространяют оптимизированные версии BLAS и LAPACK, разработанные специально для их чипов.
Билл Барт
Извините, я имею в виду те, которые распространяются в сети - общие; конечно, специфичные для чипов не такие портативные: то есть некоторые из векторных приемов Intel не очень хорошо работают с чипами AMD, поэтому у них есть отказ от ответственности за библиотеку. И я уверен, что они переименованы под другим именем нет?
Eiyrioü von Kauyf
@BillBarth BLAS определенно, но вы уверены, что подпрограммы LAPACK также переписаны? Afaik, пока BLAS 3 обладает высокой производительностью (или многопоточностью), тогда все хорошо.
Стали
1
Я думаю о BLAS и LAPACK как об именах функций и интерфейса. Существует множество различных реализаций (ACML, ESSL, MKL, ATLAS и т. Д.).
Билл Барт
1
это всего лишь интерфейсы ... Как и ATLAS, они не являются настоящей библиотекой.
Eiyrioü von Kauyf