BLAS, LAPACK ve diğer doğrusal cebir kütüphanelerinin ilişkisi nedir?


26

Üzerinde çalıştığım bir proje için C ++ linear cebir kütüphanelerini inceliyorum. Hala anlayamadığım bir şey, BLAS ve LAPACK'in diğer lineer cebir kütüphanelerine bağlantısı.

İçinden bakıldığında lineer cebir kütüphaneleri bu yazıda ben o ilginç bulundu:

  • bazı kütüphaneler BLAS ve LAPACK’tan bağımsızdır
  • bazı BLAS ve LAPACK gerektirir
  • bazılarında BLAS ve LAPACK için isteğe bağlı arayüzler bulunur
  • ve anladığım kadarıyla, doğrusal cebir sorunlarını doğrudan çözmek için BLAS ve LAPACK kullanabilirsiniz.

Bazı kütüphanelerin, C ve Fortran'da yazılmış BLAS ve LAPACK kütüphanelerine basitçe C ++ arayüzleri olduğunu ve başkalarının kendi yerine koyma rutinlerini uyguladığını hayal edebiliyorum.

  1. Opsiyonel arayüzlerin BLAS ve LAPACK üzerindeki etkileri nelerdir? Seçerek neyi kaybediyorsunuz ve bunun yerine kütüphaneler ne yapıyor?

  2. Kütüphanelerden herhangi biri bir arayüzden fazlasını sağlıyor mu? Örneğin, UMFPACK C ile yazılmıştır ve BLAS ve LAPACK için isteğe bağlı arayüzlere sahiptir. UMFPACK (veya diğer kütüphaneler) BLAS ve LAPACK’ın kendi başlarına yapamadıkları ne yapabilir?

Yanıtlar:


15

Bildiğim kadarıyla Lapack, bir dizi algoritmanın (simetrik olmayan yoğun eigensolver, sözde kuadratik zaman simetrik eigensolver, hızlı Jacobi SVD) halka açık tek uygulamasıdır. BLAS + Lapack'e güvenmeyen çoğu kütüphane, matris çarpımı, LU faktoringi ve QR ayrıştırma gibi çok ilkel işlemleri destekleme eğilimindedir. Lapack, başka bir yerde uygulandığına inanmadığım yoğun matris hesaplamaları için en karmaşık algoritmalardan bazılarını içeriyor.

Dolayısıyla sorularınızı cevaplamak için (en azından kısmen),

  1. BLAS / Lapack'i seçerek, işlevsellikten mahrum kalmazsınız (isteğe bağlı arabirim, nadiren başka bir uygulama yapılmaması için tasarlanmadıysa). Çok karmaşık işlemler yapmak isteseydiniz, diğer kütüphaneler de muhtemelen kendi başlarına uygulamazlar. BLAS, mimarinize göre çok iyi ayarlanmış olabileceğinden, devasa hızlanmalarda kaybolabilirsiniz (büyüklükte bir hız farkı duyulmamış).

  2. Seyrek matris faktoringi için olan UMFPACK'ten bahsediyorsunuz. BLAS / Lapack sadece yoğun matrisler ile ilgilidir. Bazı seviyelerde UMFPACK'in, özel uygulamaları kullanarak veya BLAS / Lapack'i arayarak yapabileceği orta büyüklükteki yoğun problemlerde çalışması gerekir. Burada fark sadece hızda.

Hız çok önemliyse, isteğe bağlı BLAS / Lapack ciltlemelerini destekleyen bir kitaplık kullanmaya çalışın ve sonunda işleri daha hızlı istediğinizde kullanın.


3
  1. BLAS ve LAPACK yordamlarının iyi uygulamaları (en önemlisi BLAS yordamları), aynı işlevlerin doğrudan yalındır uygulamalarından çok daha hızlı olabilir. Bununla birlikte, verimli uygulamalar tipik olarak üzerinde çalışmakta olduğunuz bilgisayara özel olan optimizasyonları içerir. Aynı üreticiden (örneğin, Intel x86-64 işlemci) farklı işlemci modelleri bile iyi performans elde etmek için genellikle çok farklı kodlar gerektirir. En iyi duruma getirilmiş BLAS / LAPACK kitaplıklarını bir yazılım paketine sağlayarak, kodu genellikle en iyi duruma getirilmemiş yordamları kullanmaya kıyasla hızlandırabilirsiniz. Bununla birlikte, birçok sıradan kullanıcı, optimize edilmiş rutinler kurma uzmanlığına sahip olamadığından, genel olarak geliştirilmemiş lineer cebir rutinlerini kullanma seçeneği sunmak da yaygındır.

  2. UMFPACK, seyrek matrisler üzerinde doğrusal cebir için bir rutin kitaplıklar kütüphanesidir (yüksek oranda 0 girişli matrisler). Matrislerde karşılaştığı yoğun matrisleri (veya matrislerin içindeki yoğun blokları) işlemek için BLAS / LAPACK'i kullanabilir.


1

Kısa versiyon: Birçok dilde Nümerik işlemlerde kullanılan - esasen Fortran dilinde yazılmış kütüphanelerdir - bazı C programları bile hızları ve optimizasyonları nedeniyle; Ayrıca birçok algoritmanın tek açık kaynak kodlu uygulamalarından bazılarıdır :)

Bağımlılıkları olmadıkça kütüphaneleri kullanmak zorunda değilsiniz; bunların çoğu oldukça bağımsızdır ve mimariniz için daha iyi vectorized gibi kendi matematik işlevlerinizi her zaman yazabilirsiniz


1
En iyi duruma getirilmiş BLAS ve LAPACK rutinleri, Fortran yazıldığından beri çoktan zaman aldı. En hızlı BLAS ve LAPACK rutinleri genellikle netlib'den indirilenler değildir. Çoğu işlemcinin satıcıları, özellikle talaşları için tasarlanan BLAS ve LAPACK'ın optimize edilmiş versiyonlarını satar veya dağıtır.
Bill Barth

Üzgünüm, internette dağıtılanları kastediyorum - genel olanlar; yonga özgü olanlar elbette taşınabilir değil: yani Intel'in bazı vektör hileleri, AMD yongalarında o kadar iyi çalışmaz; bu nedenle kütüphane hakkında bir feragatname bulundururlar. Ve eminim ki başka bir isim altında yeniden markalaştırılmışlar mı?
Eiyrioü von Kauyf

@BillBarth BLAS kesinlikle, ancak LAPACK rutinlerinin de yeniden yazıldığından emin misiniz? Afaik uzun süredir BLAS 3 yüksek performans sergiliyor (veya çok iş parçacıklı) o zaman hepsi iyi.
stali

1
BLAS ve LAPACK'i işlevlerin ve arabirimlerin adları olarak düşünüyorum. Birçok farklı uygulama var (ACML, ESSL, MKL, ATLAS, vb.).
Bill Barth

1
bunlar sadece arayüzlerdir ... ATLAS gibi onlar gerçek kütüphane değildir.
Eiyrioü von Kauyf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.