Подпрограммы базовой линейной алгебры

редактировать

BLAS
Стабильная версия 3.8.0 / 12 ноября 2017 г.; 2 года назад (2017-11-12)
Написано нав зависимости от реализации
Платформа Кросс-платформенность
Тип Библиотека
Веб-сайтwww.netlib.org / blas /

Подпрограммы базовой линейной алгебры (BLAS ) - это спецификация, которая предписывает набор подпрограммы уровня для выполнения общих операций линейной алгебры, таких как векторное сложение, скалярное умножение, скалярные произведения, линейные комбинации и умножение матриц. Это де-факто стандартные низкоуровневые процедуры для библиотек линейной алгебры; подпрограммы имеют привязки как для C («интерфейс CBLAS»), так и для Fortran («интерфейс BLAS»). Хотя спецификация BLAS является общей, реализации BLAS часто оптимизированы для скорости на конкретном компьютере, поэтому их использование может дать существенные преимущества в производительности. Реализации BLAS будут использовать преимущества специального оборудования с плавающей запятой, такого как векторные регистры или инструкции SIMD.

Она возникла как библиотека Fortran в 1979 году, а ее интерфейс был стандартизирован Форумом BLAS Technical (BLAST), последний отчет которого можно найти на веб-сайте netlib. Эта библиотека Fortran известна как эталонная реализация (иногда ошибочно называемая библиотекой BLAS) и не оптимизирована для скорости, но находится в общественном достоянии.

Большинство библиотек, которые предлагают процедуры линейной алгебры соответствуют интерфейсу BLAS, что позволяет пользователям библиотеки разрабатывать программы, не зависящие от используемой библиотеки BLAS. Примеры библиотек BLAS включают: AMD Core Math Library (ACML), Arm Performance Libraries, ATLAS, Intel Math Kernel Library (MKL) и OpenBLAS. ACML больше не поддерживается его производителем. ATLAS - это переносимая библиотека, которая автоматически оптимизируется для произвольной архитектуры. MKL - это бесплатная и проприетарная библиотека поставщика, оптимизированная для x86 и x86-64 с упором на производительность процессоров Intel. OpenBLAS - это библиотека с открытым исходным кодом, оптимизированная вручную для многих популярных архитектур. Тесты LINPACK в значительной степени полагаются на процедуру BLAS gemm для измерения производительности.

Многие числовые программные приложения используют BLAS-совместимые библиотеки для выполнения вычислений линейной алгебры, включая Armadillo, LAPACK, LINPACK, GNU Octave, Mathematica, MATLAB, NumPy,R и Julia.

Содержание
  • 1 Предпосылки
    • 1.1 ATLAS
  • 2 Функциональность
    • 2.1 Уровень 1
    • 2.2 Уровень 2
    • 2.3 Уровень 3
  • 3 Реализации
    • 3.1 Библиотеки, использующие BLAS
  • 4 Подобные библиотеки (несовместимые с BLAS)
  • 5 Редкие BLAS
  • 6 См. Также
  • 7 Ссылки
  • 8 Дополнительная литература
  • 9 Внешние ссылки
Предпосылки

С появлением числового программирования, сложные библиотеки подпрограмм стали полезными. Эти библиотеки будут содержать подпрограммы для общих математических операций высокого уровня, таких как поиск корня, обращение матриц и решение систем уравнений. Выбранный язык был FORTRAN. Самой известной библиотекой численного программирования была IBM (SSP). Эти библиотеки подпрограмм позволили программистам сосредоточиться на своих конкретных проблемах и избежать повторной реализации хорошо известных алгоритмов. Библиотечные подпрограммы также были бы лучше, чем обычные реализации; матричные алгоритмы, например, могут использовать полное вращение для повышения числовой точности. Библиотечные подпрограммы также будут иметь более эффективные подпрограммы. Например, библиотека может включать программу для решения верхней треугольной матрицы. Библиотеки будут включать версии некоторых алгоритмов с одинарной и двойной точностью.

Первоначально эти подпрограммы использовали жестко запрограммированные циклы для своих низкоуровневых операций. Например, если подпрограмме необходимо выполнить матричное умножение, то подпрограмма будет иметь три вложенных цикла. В программах линейной алгебры есть много общих операций низкого уровня (так называемые операции «ядра», не относящиеся к операционным системам ). Между 1973 и 1977 годами было выявлено несколько из этих операций ядра. Эти операции ядра стали определенными подпрограммами, которые могли вызывать математические библиотеки. Вызовы ядра имели преимущества по сравнению с жестко запрограммированными циклами: подпрограмма библиотеки была бы более читаемой, было бы меньше шансов на появление ошибок, а реализацию ядра можно было бы оптимизировать по скорости. Спецификация для этих операций ядра с использованием скаляров и векторов, подпрограмм базовой линейной алгебры (BLAS) уровня 1, была опубликована в 1979 году. BLAS использовался для реализации библиотеки подпрограмм линейной алгебры. LINPACK.

Абстракция BLAS допускает настройку для достижения высокой производительности. Например, LINPACK - это библиотека общего назначения, которую можно использовать на многих разных машинах без изменений. LINPACK может использовать общую версию BLAS. Для повышения производительности разные машины могут использовать адаптированные версии BLAS. По мере того, как компьютерные архитектуры становились более сложными, появились векторные машины. BLAS для векторной машины может использовать быстрые векторные операции машины. (Хотя векторные процессоры в конечном итоге перестали пользоваться популярностью, векторные инструкции в современных процессорах необходимы для оптимальной производительности в процедурах BLAS.)

Другие машинные функции стали доступны и также могут быть использованы. Следовательно, BLAS был дополнен с 1984 по 1986 год операциями ядра второго уровня, которые касались векторно-матричных операций. Было также признано, что иерархия памяти может быть использована. Многие компьютеры имеют кэш-память, которая намного быстрее основной памяти; локализация операций с матрицей позволяет лучше использовать кеш. В 1987 и 1988 годах BLAS уровня 3 были определены для выполнения матрично-матричных операций. BLAS уровня 3 поощрял блочно-разделенные алгоритмы. Библиотека LAPACK использует BLAS уровня 3.

Исходный BLAS касался только плотно хранимых векторов и матриц. Были рассмотрены дальнейшие расширения BLAS, такие как для разреженных матриц.

ATLAS

Автоматически настраиваемое программное обеспечение линейной алгебры (ATLAS) пытается сделать реализацию BLAS с более высокой производительностью. ATLAS определяет многие операции BLAS в терминах некоторых основных подпрограмм, а затем пытается автоматически адаптировать основные подпрограммы для обеспечения хорошей производительности. Выполняется поиск для выбора подходящего размера блока. Размеры блоков могут зависеть от размера и архитектуры кэша компьютера. Также проводятся тесты, чтобы убедиться, что копирование массивов и векторов улучшает производительность. Например, может быть выгодно копировать аргументы, чтобы они были выровнены по строке кэша, чтобы пользовательские процедуры могли использовать инструкции SIMD.

Функциональные возможности

Функциональные возможности BLAS подразделяются на три набора процедур, называемых «уровнями», которые соответствуют как хронологическому порядку определения и публикации, так и степени полинома в сложности. алгоритмов; Операции BLAS уровня 1 обычно занимают линейное время, O (n), операции уровня 2 - квадратичное время и операции уровня 3 - кубическое время. Современные реализации BLAS обычно предоставляют все три уровня.

Уровень 1

Этот уровень состоит из всех подпрограмм, описанных в исходной презентации BLAS (1979), которая определяла только векторные операции над последовательными массивами : скалярные произведения, векторные нормы, обобщенное векторное сложение вида

y ← α x + y {\ displaystyle {\ boldsymbol {y}} \ leftarrow \ alpha {\ boldsymbol {x }} + {\ boldsymbol {y}}}{\ boldsymbol {y}} \ leftarrow \ alpha {\ boldsymbol {x}} + {\ boldsymbol {y}}

(так называемый «axpy») и несколько других операций.

Уровень 2

Этот уровень содержит операции матрица-вектор, включая, среди прочего, обобщенное умножение матрицы на вектор (gemv):

y ← α A x + β y {\ displaystyle {\ boldsymbol {y}} \ leftarrow \ alpha {\ boldsymbol {A}} {\ boldsymbol {x}} + \ beta {\ boldsymbol {y}}}{\ boldsymbol {y}} \ leftarrow \ alpha {\ boldsymbol {A}} {\ boldsymbol {x}} + \ beta {\ boldsymbol {y}}

, а также решатель для x в линейном уравнении

T x = y {\ displaystyle {\ boldsymbol {T}} {\ boldsymbol {x}} = {\ boldsymbol {y}}}{\ boldsymbol {T}} {\ boldsymbol {x}} = {\ boldsymbol {y}}

с T быть треугольным. Разработка BLAS уровня 2 началась в 1984 году, а результаты были опубликованы в 1988 году. Подпрограммы уровня 2 специально предназначены для повышения производительности программ, использующих BLAS на векторных процессорах, где BLAS уровня 1 неоптимальны, "потому что они скрывают матрично-векторный характер операций компилятора. "

Уровень 3

Этот уровень, официально опубликованный в 1990 году, содержит операции матрица-матрица, включая« общее умножение матриц "(драгоценный камень) в форме

C ← α AB + β C {\ displaystyle {\ boldsymbol {C}} \ leftarrow \ alpha {\ boldsymbol {A}} {\ boldsymbol {B}} + \ beta {\ boldsymbol {C}}}{\ boldsymbol {C}} \ leftarrow \ alpha {\ boldsymbol {A}} {\ boldsymbol {B}} + \ beta {\ boldsymbol {C}}

где A и B при желании могут быть транспонированы или эрмитово -сопряжен внутри процедуры, и все три матрицы могут быть разделены. Обычное матричное умножение A B может быть выполнено путем установки α равным единице и C равным нулю матрицы подходящего размера.

На уровень 3 также включены процедуры для решения

B ← α T - 1 B {\ displaystyle {\ boldsymbol {B}} \ leftarrow \ alpha {\ boldsymbol {T}} ^ {- 1 } {\ boldsymbol {B}}}{\ boldsymbol {B }} \ leftarrow \ alpha {\ boldsymbol {T}} ^ {{- 1}} {\ boldsymbol {B}}

где T - это треугольная матрица, помимо других функций.

Из-за повсеместного распространения умножения матриц во многих научных приложениях, в том числе для реализации остальной части BLAS уровня 3, и поскольку существуют более быстрые алгоритмы помимо очевидного повторения умножения матрицы на вектор, gemmявляется основной целью оптимизации для разработчиков BLAS. Например, разложив один или оба из A, Bна блочные матрицы, gemmможет быть реализован рекурсивно. Это одна из мотиваций для включения параметра β, поэтому результаты предыдущих блоков можно накапливать. Обратите внимание, что это разложение требует особого случая β = 1, который оптимизируют многие реализации, тем самым устраняя одно умножение для каждого значения C . Такая декомпозиция позволяет лучше локализовать ссылку как в пространстве, так и во времени данных, используемых в продукте. Это, в свою очередь, использует кэш в системе. Для систем с более чем одним уровнем кэш-памяти блокировку можно применить второй раз к порядку, в котором блоки используются в вычислениях. Оба этих уровня оптимизации используются в таких реализациях, как ATLAS. Совсем недавно реализации Казусигэ Гото показали, что блокировка только для кэша L2 в сочетании с осторожной амортизацией копирования в непрерывную память для уменьшения TLB промахивается, превосходит ATLAS. Тщательно настроенная реализация, основанная на этих идеях, является частью GotoBLAS, OpenBLAS и BLIS.

Распространенным вариантом gemmявляется gemm3m, который вычисляет комплексное произведение с использованием «трех умножений вещественных матриц и пяти сложений вещественных матриц вместо обычных четырех умножений вещественных матриц и двух сложений вещественных матриц», алгоритм, аналогичный алгоритму Штрассена сначала описан Питером Ангаром.

Реализации
Ускорение
платформы Apple для macOS и iOS, которая включает настроенные версии BLAS и LAPACK.
ACML
AMD Core Math Library, поддерживающая AMD Athlon и Opteron Процессоры под Linux и Windows, заменены AOCL.
AOCL
, настроены специально для процессоров AMD Epyc в Linux и Windows.
C ++ AMP BLAS
Библиотека BLAS C ++ AMP - это реализация с открытым исходным кодом внедрение BLAS для расширения языка Microsoft AMP для Visual C ++.
ATLAS
Automatically Tuned Linear Algebra Software, реализация с открытым исходным кодом API-интерфейсов BLAS для C и Fortran 77.
BLIS
BLAS-подобная программная среда создания библиотек для быстрого создания экземпляров. На основе GotoBLAS.
cuBLAS
Оптимизированный BLAS для видеокарт на базе NVIDIA, требующий нескольких дополнительных вызовов библиотеки.
NVBLAS
Оптимизированный BLAS для GPU на базе NVIDIA карты, обеспечивающие только функции уровня 3, но в качестве прямой замены для других библиотек BLAS.
clBLAS
Реализация BLAS OpenCL от AMD. Часть вычислительных библиотек AMD.
clBLAST
Настроенная реализация OpenCL большей части API-интерфейса BLAS.
Eigen BLAS
A Fortran 77 и C Библиотека BLAS, реализованная на основе MPL -лицензированной библиотеки Eigen, с поддержкой x86, x86 64 Архитектуры, ARM (NEON) и PowerPC.
ESSL
Библиотека инженерных и научных подпрограмм IBM, поддерживающая Архитектура PowerPC под управлением AIX и Linux.
GotoBLAS
Казусиге Гото, лицензированная BSD реализация BLAS, настроенная, в частности, для Intel Nehalem / Atom, VIA Нанопроцессор, AMD Opteron.
Научная библиотека GNU
Многоплатформенная реализация многих числовых подпрограмм. Содержит интерфейс CBLAS.
Математическая библиотека HP MLIB
HP, поддерживающая IA-64, PA-RISC, x86 и Архитектура Opteron под HPUX и Linux.
Intel MKL
The Intel Math Kernel Library, поддерживающая 32-разрядные и 64-разрядные версии x86, доступные бесплатно на Intel. Включает оптимизацию для процессоров Intel Pentium, Core и Intel Xeon и Intel Xeon Phi ; поддержка математической библиотеки Linux, Windows и macOS.
MathKeisan
NEC, поддержка архитектуры NEC SX в SUPER-UX и Itanium в Linux
Netlib BLAS
Официальная эталонная реализация на Netlib, написанная на Fortran 77.
Netlib CBLAS
Ссылка C на интерфейс BLAS. Также возможно (и популярно) вызвать Fortran BLAS из C.
OpenBLAS
Оптимизированный BLAS на основе GotoBLAS, поддерживающий x86, x86-64, Процессоры MIPS и ARM.
PDLIB / SX
Общедоступная математическая библиотека NEC для системы NEC SX-4.
SCSL
Библиотека программного обеспечения для научных вычислений SGI содержит реализации BLAS и LAPACK для рабочих станций SGI Irix.
Sun Performance Library
Оптимизированы BLAS и LAPACK для архитектур SPARC, Core и AMD64 под Solaris 8, 9 и 10, а также под Linux.
uBLAS
Универсальная библиотека классов шаблонов C ++, обеспечивающая функциональность BLAS. Часть библиотеки Boost. Он обеспечивает привязку ко многим библиотекам с аппаратным ускорением в унифицированной нотации. Более того, uBLAS фокусируется на правильности алгоритмов с использованием расширенных функций C ++.

Библиотеки, использующие BLAS

Armadillo
Armadillo - это библиотека линейной алгебры C ++, нацеленная на хороший баланс между скоростью и простотой использования. Он использует классы шаблонов и имеет дополнительные ссылки на BLAS / ATLAS и LAPACK. Он спонсируется NICTA (в Австралии) и распространяется по бесплатной лицензии.
LAPACK
LAPACK - это библиотека линейной алгебры более высокого уровня, построенная на BLAS. Подобно BLAS, существует эталонная реализация, но существует множество альтернатив, таких как libFlame и MKL.
Mir
Общая числовая библиотека с ускорением LLVM для науки и машинного обучения, написанная на D. Он предоставляет общие подпрограммы линейной алгебры (GLAS). Он может быть построен на реализации CBLAS.
Подобные библиотеки (несовместимые с BLAS)
Elemental
Elemental - это программное обеспечение с открытым исходным кодом для распределенной памяти плотной и разреженной памяти. прямая линейная алгебра и оптимизация.
HASEM
- это библиотека шаблонов C ++, способная решать линейные уравнения и вычислять собственные значения. Он находится под лицензией BSD License.
LAMA
Библиотека для ускоренных математических приложений () - это библиотека шаблонов C ++ для написания числовых решателей, ориентированных на различное оборудование (например, GPU через CUDA или OpenCL ) в системах с распределенной памятью, скрывая аппаратное программирование от разработчика программы
MTL4
Библиотека шаблонов матриц версии 4 - это универсальная библиотека шаблонов C ++, обеспечивающая разреженные и плотные функции BLAS. MTL4 обеспечивает интуитивно понятный интерфейс (аналогичный MATLAB ) и широкую применимость благодаря универсальному программированию.
Sparse BLAS

Несколько расширений BLAS для обработки разреженных матриц были предложены на протяжении истории библиотеки; небольшой набор подпрограмм ядра с разреженными матрицами был наконец стандартизован в 2002 году.

См. также
Ссылки
Дополнительная литература
  • Форум BLAST (2001-08-21), Подпрограммы базовой линейной алгебры Технические (BLAST) Forum Standard, Ноксвилл, Теннесси: Университет Теннесси
  • Додсон, DS; Граймс, Р. Г. (1982), "Замечание об алгоритме 539: основные подпрограммы линейной алгебры для использования Фортрана", ACM Trans. Математика. Softw., 8 (4): 403–404, doi : 10.1145 / 356012.356020
  • Додсон, Д.С. (1983), «Исправление: примечание к алгоритму 539. : Основные подпрограммы линейной алгебры для использования FORTRAN "", ACM Trans. Математика. Softw., 9 : 140, doi : 10.1145 / 356022.356032
  • J. Дж. Донгарра, Дж. Дю Кроз, С. Хаммарлинг и Р. Дж. Хансон, Алгоритм 656: расширенный набор подпрограмм базовой линейной алгебры FORTRAN, ACM Trans. Математика. Softw., 14 (1988), стр. 18–32.
  • J. Дж. Донгарра, Дж. Дю Кроз, И. С. Дафф и С. Хаммарлинг, Набор подпрограмм базовой линейной алгебры уровня 3, ACM Trans. Математика. Softw., 16 (1990), стр. 1–17.
  • J. Дж. Донгарра, Дж. Дю Кроз, И. С. Дафф и С. Хаммарлинг, Алгоритм 679: набор подпрограмм базовой линейной алгебры уровня 3, ACM Trans. Математика. Softw., 16 (1990), стр. 18–28.
Новый BLAS
  • L. С. Блэкфорд, Дж. Деммель, Дж. Донгарра, И. Дафф, С. Хаммарлинг, Г. Генри, М. Эру, Л. Кауфман, А. Ламсдайн, А. Петите, Р. Позо, К. Ремингтон, Р. К. Уэйли, Обновленный набор подпрограмм базовой линейной алгебры (BLAS), ACM Trans. Математика. Softw., 28-2 (2002), стр. 135–151.
  • J. Донгарра, Стандарт Технического форума по подпрограммам базовой линейной алгебры, Международный журнал высокопроизводительных приложений и суперкомпьютеров, 16 (1) (2002), стр. 1–111, и Международный журнал высокопроизводительных приложений и суперкомпьютеров, 16 (2) (2002), pp. 115–199.
Внешние ссылки
  • Домашняя страница BLAS на Netlib.org
  • BLAS FAQ
  • Краткое справочное руководство BLAS из Руководства пользователя LAPACK
  • Устная история Lawson Один из первоначальных авторов BLAS обсуждает его создание в устном историческом интервью. Чарльз Л. Лоусон Устное историческое интервью Томаса Хэя, 6 и 7 ноября 2004 г., Сан-Клементе, Калифорния. Общество промышленной и прикладной математики, Филадельфия, Пенсильвания.
  • Устная история Донгарры В устном историческом интервью Джек Донгарра исследует ранние отношения BLAS и LINPACK, создание версий BLAS более высокого уровня для новых архитектур и его позже работа над системой ATLAS для автоматической оптимизации BLAS для определенных машин. Джек Донгарра, Интервью Томаса Хея по устной истории, 26 апреля 2005 г., Университет Теннесси, Ноксвилл, Теннесси. Общество промышленной и прикладной математики, Филадельфия, Пенсильвания
  • Каким образом BLAS обеспечивает такую ​​исключительную производительность? Десять наивных умножений матрицы 1000 × 1000 (10 операций умножения-сложения с плавающей запятой) занимают 15,77 секунды на процессоре с частотой 2,6 ГГц; Внедрение BLAS занимает 1,32 секунды.
  • Обзор подпрограмм Sparse Basic Linear Algebra: новый стандарт с Технического форума BLAS [2pting
Последняя правка сделана 2021-05-11 13:55:37
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте