Який взаємозв'язок 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

Коротка версія: це бібліотеки, написані головним чином у Fortran, які використовуються для чисельних операцій багатьма мовами - навіть для деяких програм C через їх швидкість та оптимізацію; Вони також є одними з єдиних реалізацій багатьох алгоритмів з відкритим кодом :)

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


1
Більшість оптимізованих процедур BLAS та LAPACK вже давно перестали писати Fortran. Як правило, найшвидші BLAS та LAPACK процедури зазвичай не завантажуються з netlib. Постачальники більшості процесорів продають або розповсюджують оптимізовані версії BLAS та LAPACK, розроблені спеціально для своїх чіпів.
Білл Барт

Вибачте, я маю на увазі ті, які розповсюджуються в мережі - загальні; Звичайно, специфічні для мікросхеми не є такими портативними: тобто деякі хитрості векторів Intel не так добре працюють на мікросхемах AMD, тому вони мають відмову щодо бібліотеки. І я впевнений, що їх ребрендують під іншим ім'ям ні?
Eiyrioü von Kauyf

@BillBarth BLAS напевно, але ви впевнені, що підпрограми LAPACK також переписані? Afaik, якщо BLAS 3 високоефективний (або багатопоточний), то це все добре.
stali

1
Я думаю про BLAS і LAPACK як назви функцій та інтерфейс. Існує багато різних реалізацій (ACML, ESSL, MKL, ATLAS тощо).
Білл Барт

1
це лише інтерфейси .. як ATLAS, вони не є власне бібліотекою.
Eiyrioü von Kauyf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.