Apa hubungan BLAS, LAPACK, dan perpustakaan aljabar linier lainnya?

26

Saya telah mencari ke dalam perpustakaan aljabar C ++ linier untuk proyek yang telah saya kerjakan. Sesuatu yang saya masih belum pahami adalah koneksi BLAS dan LAPACK ke perpustakaan aljabar linier lainnya.

Melihat melalui artikel ini di perpustakaan aljabar linier, saya merasa menarik bahwa:

  • beberapa perpustakaan independen dari BLAS dan LAPACK
  • beberapa membutuhkan BLAS dan LAPACK
  • beberapa memiliki antarmuka opsional ke BLAS dan LAPACK
  • dan, seperti yang saya mengerti, Anda dapat menggunakan BLAS dan LAPACK untuk menyelesaikan masalah aljabar linier secara langsung

Saya dapat membayangkan bahwa beberapa perpustakaan hanyalah antarmuka C ++ untuk perpustakaan BLAS dan LAPACK yang ditulis dalam C dan Fortran dan yang lainnya telah menerapkan rutinitas pengganti mereka sendiri, tetapi

  1. Apa implikasi dari antarmuka opsional untuk BLAS dan LAPACK? Apa yang Anda kehilangan dengan memilih keluar, dan apa yang dilakukan perpustakaan sebagai gantinya?

  2. Apakah ada perpustakaan yang menyediakan lebih dari sekadar antarmuka? Misalnya, UMFPACK ditulis dalam C dan memiliki antarmuka opsional untuk BLAS dan LAPACK. Apa yang dapat dilakukan UMFPACK (atau perpustakaan lain) yang tidak bisa dilakukan BLAS dan LAPACK sendiri?

Neal Kruis
sumber

Jawaban:

15

Sejauh yang saya tahu, Lapack adalah satu-satunya implementasi yang tersedia untuk umum dari sejumlah algoritma (eigensolver padat nonsimetrik, eigensolver simetris waktu pseudo-kuadratik, cepat Jacobi SVD). Sebagian besar perpustakaan yang tidak bergantung pada BLAS + Lapack cenderung mendukung operasi yang sangat primitif seperti perkalian matriks, faktorisasi LU, dan dekomposisi QR. Lapack berisi beberapa algoritma paling canggih untuk perhitungan matriks padat yang saya tidak percaya diterapkan di tempat lain.

Jadi untuk menjawab pertanyaan Anda (setidaknya sebagian),

  1. Dengan memilih keluar dari BLAS / Lapack, Anda biasanya tidak kehilangan fungsionalitas (kecuali antarmuka opsional dirancang sehingga tidak ada implementasi pengganti, yang jarang terjadi). Jika Anda ingin melakukan operasi yang sangat canggih, perpustakaan lain itu mungkin tidak mengimplementasikannya sendiri. Karena BLAS dapat sangat disetel ke arsitektur Anda, Anda bisa melewatkan speedup besar (urutan perbedaan kecepatan besarnya tidak pernah terdengar).

  2. Anda menyebutkan UMFPACK, yang untuk faktorisasi matriks jarang. BLAS / Lapack hanya peduli tentang matriks padat. UMFPACK pada tingkat tertentu perlu bekerja pada masalah padat ukuran sedang, yang dapat dilakukan dengan menggunakan implementasi kustom atau dengan memanggil BLAS / Lapack. Di sini perbedaannya hanya dalam kecepatan.

Jika kecepatan sangat memprihatinkan, coba gunakan perpustakaan yang mendukung binding BLAS / Lapack opsional, dan gunakan pada akhirnya ketika Anda menginginkan segalanya lebih cepat.

Victor Liu
sumber
3
  1. Implementasi yang baik dari rutinitas BLAS dan LAPACK (yang paling penting rutinitas BLAS) dapat menjadi jauh lebih cepat daripada implementasi langsung yang naif dari fungsi yang sama. Namun, implementasi yang efisien biasanya mencakup optimasi yang sangat spesifik untuk komputer tertentu yang Anda jalankan. Bahkan model prosesor yang berbeda dari pabrikan yang sama (mis. Prosesor Intel x86-64) seringkali memerlukan kode yang sangat berbeda untuk mendapatkan kinerja yang baik. Dengan menyediakan pustaka BLAS / LAPACK yang dioptimalkan untuk paket perangkat lunak, Anda biasanya dapat mempercepat kode dibandingkan dengan menggunakan rutin yang tidak dioptimalkan. Namun, karena banyak pengguna biasa mungkin tidak memiliki keahlian untuk menginstal rutin yang dioptimalkan, sudah umum juga memberikan opsi untuk menggunakan rutinitas aljabar linier umum yang tidak dioptimalkan.

  2. UMFPACK adalah perpustakaan rutin untuk aljabar linier pada matriks jarang (matriks dengan proporsi entri 0 yang tinggi). Ia dapat menggunakan BLAS / LAPACK untuk menangani matriks padat (atau blok padat dalam matriks) yang dihadapinya.

Brian Borchers
sumber
1

Versi singkat: mereka adalah perpustakaan yang ditulis terutama dalam Fortran yang digunakan untuk operasi Numerik dalam banyak bahasa - bahkan beberapa program C karena kecepatan dan optimasinya; Mereka juga merupakan satu-satunya implementasi open source dari banyak algoritma :)

Anda tidak harus menggunakan perpustakaan kecuali mereka memiliki dependensi; iirc sebagian besar dari mereka cukup independen, dan Anda selalu dapat menulis fungsi matematika Anda sendiri, seperti yang lebih baik vektor untuk arsitektur Anda

Eiyrioü von Kauyf
sumber
1
Rutinitas BLAS dan LAPACK yang paling optimal telah lama berhenti ditulis Fortran. Rutin BLAS dan LAPACK tercepat umumnya tidak yang diunduh dari netlib. Vendor sebagian besar prosesor menjual atau mendistribusikan versi optimal BLAS dan LAPACK yang dirancang khusus untuk chip mereka.
Bill Barth
Maaf maksud saya yang didistribusikan di internet - yang umum; chip yang spesifik tentu saja tidak portabel: yaitu beberapa trik vektor Intel tidak bekerja dengan baik pada chip AMD, itulah sebabnya mereka memiliki disclaimer tentang perpustakaan. Dan saya cukup yakin itu diganti dengan nama lain, bukan?
Eiyrioü von Kauyf
@BillBarth BLAS pasti tetapi apakah Anda yakin bahwa rutinitas LAPACK juga ditulis ulang? Afaik selama BLAS 3 berkinerja tinggi (atau multithreaded) maka semuanya baik.
stali
1
Saya menganggap BLAS dan LAPACK sebagai nama fungsi dan antarmuka. Ada banyak implementasi yang berbeda (ACML, ESSL, MKL, ATLAS, dll.).
Bill Barth
1
itu hanya antarmuka ... seperti ATLAS mereka bukan perpustakaan yang sebenarnya.
Eiyrioü von Kauyf