Paylaşılan bellekteki GPU'da küçük simetrik olmayan bir matrisin öz çiftlerini bulmanın en hızlı yolu


9

Küçük (genellikle 60x60'tan küçük) bir simetrik olmayan matrisin tüm pozitif (özdeğerde olduğu gibi) öz çiftlerini bulmam gereken bir sorunum var. Özdeğer belirli bir eşik değerden küçük olduğunda hesaplamayı durdurabilirim. Özdeğerlerin gerçek olduğunu biliyorum. En iyi performansı elde etmek için kullanabileceğim algoritmalarla ilgili herhangi bir öneriniz var mı? Bu ayrıştırmalardan birkaç bin tane yapmam gerekiyor, bu yüzden hız önemlidir.

Şimdiden teşekkür ederim.

EDIT: Bunu paylaşılan bellek GPU üzerinde yapmam gerekiyor. Matrisler de aynı boyutta olmak zorunda değildir. Şu anda bunu yapan hiçbir kütüphanenin farkında değilim. Soruna çok uygun algoritma önerileri takdir edilecektir.


1
Doğru anladıysam, paylaşılan bellekte binlerce küçük matrisi hesaplayan bir CUDA çekirdeğiniz var ve bunları global belleğe kopyalamak istemiyorsunuz. Bir cevap vermeye çalışmadan önce, açıklığa kavuşturulması gereken bazı noktalar vardır. CUDA'da paylaşılan bellek ömrü, kullanım ömrünü bloke eder: her matris için ayrışacak kaç iş parçacığınız vardır? Aşırı performans gerçekten önemli mi? (Beklenen özdeğer çıkarma süreleri matris oluşturma süreleriyle nasıl karşılaştırılır?) Özsistemin gerçek olduğunu bildiğiniz argüman temelinde? Özsistem arızalı olabilir mi?
Stefano M

Merhaba Stefano ve yorumunuz için teşekkür ederim. Şimdilik, çözgü boyutunun ayrıştırmak istediğim matrisin boyutuna en yakın katına sahip olacağım. Matris oluşturma süreleri çok değişir ve matris oluşturma süresinin daha pahalı olduğu durumlar vardır, ancak matris oluşturma süresinin ayrışmadan daha az olduğu birçok durum vardır. Matrisin üretilme biçimi nedeniyle özdeğerlerin gerçek olduğunu biliyorum. Buradaki ayrıntılara girmemeyi tercih ederim, çünkü orijinal sorudan uzaklaşacaktır. Son olarak, evet, sistem arızalı olabilir.
Kantoku

Yanıtlar:


3

Çok fazla arama yapmadan MAGMA kütüphanesine bakmanızı tavsiye ederim . Sürekli destekli serbest kod. NVIDIA , MAGMA'yı "Özdeğer Problemleri için Çözücülerde Atılım" olarak tanıdı .

Orada da CULA geçtiğimiz günlerde akademik kullanım (detaylarını görmek için ücretsiz hale olmasına rağmen genel olarak ticari bir üründür kütüphane, burada ).


Cevabınız için teşekkürler Alexander. Daha önce her iki kütüphaneye de baktım ve bildiğim kadarıyla, fonksiyonlar ana bilgisayardan çağrıldı ve belleğin global bellekte olması gerekiyor. Ben yükü kullanımı haklı çıkarmak için çok fazla olacağını düşünüyorum. Tüm bu matrisler, paylaşılan bellekte üretilir, çekirdekte kullanılır ve sonra atılır. Onları tekrar küresel belleğe koymak zorunda kalmadan orada tutmak istiyorum. Onları oraya itsem bile, ana bilgisayardan birçok çekirdek işlevini çağırma sorunu olurdu (birden fazla akışta da olsa).
Kantoku

1
@Kantoku, evet, bu kütüphaneler daha genel ve tüm matrisi küresel bellekte saklıyorlar. Matrisleriniz paylaşılan hafızadaysa, yalnızca bir SM çalışabilir, değil mi? Dolayısıyla EVD'nin uygulanması oldukça açık olmalıdır.
Alexander

Evet öyle düşünürdüm, bu yüzden duruma uygun algoritmalar için avlanıyordum. Ben simetrik olmayan evd fazla aşina değilim, bu yüzden öneriler arıyordum.
Kantoku

@Kantoku (ve Alexander). Simetrik olmayan EVD'ler, sıralı durumda bile doğrudan olmaktan uzaktır. Halen aktif bir araştırma alanıdır.
Jack Poulson

@JackPoulson Ah, haklısın, ama ben (ve Alexander'ı da varsayalım), boyutu ve doğayı ele aldığımızda yapılabilecek birçok basitleştirme olduğu düşünüldüğünde, soruna yerleşik bir algoritmanın uygulanmasının basit olacağı anlamına geliyordu. matrisin dikkate alınması. Sorun şu: hangi algoritma.
Kantoku

2

LAPACK içindeki işlevleri kullanın, bunları kendi uygulamanızda yenmeniz pek olası değildir.


Merhaba Wolfgang. Cevabınız için teşekkürler, ancak bunu CUDA kullanarak ve bu küçük matrislerin birkaçında (her bir bloğun tek bir matrisin ayrışmasını işlediği yerde) bir GPU'ya uygulamayı planlıyorum ve matrisler mutlaka aynı boyutta değil, bu yüzden paylaşılan hafızayı kullanan bir şey benim tek seçimim gibi görünüyor. Bu matris türleri için hangi algoritmanın en uygun olacağı hakkında bir fikriniz var mı? PS Anlaşma için teşekkürler. Geçen dönem KAUST'ta verdiğiniz konferanslar. Onları çok
beğendim

2
@Kantoku Bu ayrıntıları sorunuza eklemelisiniz, aksi takdirde yanıltıcıdır.
Alexander

@Alexander Soruyu daha fazla ayrıntıyla güncelledim. Önerin için teşekkürler!
Kantoku

1
@Kantoku: GPU'lar alemimin biraz ötesinde ama eminim orada istediğini yapan kütüphaneler var (ve aslında diğer cevapların zaten onlara bağlandığını görüyorum). Derslerimi sevdiğini duyduğuma sevindim!
Wolfgang Bangerth
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.