2012-07-29 37 views
8

Bir uygulamayı gerçek zamanlı 3D modellemede optimize etmeye çalışıyorum. Uygulamanın bilgi işlem bölümü neredeyse tamamen CUDA'daki GPU'da çalışır. Uygulama, küçük (6x6) çift duyarlıklı simetrik pozitif kesin doğrusal sistem Ax = b = saniyede 500+ çarpı gerektirir. Şu anda bu Cholesky kullanarak verimli bir CPU tabanlı Linear Cebir kütüphanesi ile yapılmaktadır, ancak CPU - GPU ve geri GPU yüzlerce kez veri kopyalanması ve her zaman çekirdek başlattı vb gerektirir.Küçük simetrik pozitif tanımlayın Ax = b sadece GPU üzerinde

Verileri sadece CPU'ya almak zorunda kalmadan GPU üzerindeki lineer sisteme çözüm olarak hesaplayabilir miyim? MAGMA kütüphanesi hakkında biraz bilgi okudum ancak GPU sadece algoritmalardan ziyade hibrit algoritmalar kullanıyor gibi görünüyor.

GPU üzerindeki tek bir doğrusal sistemin çözümünün, mevcut CPU tabanlı kitaplıktan çok daha yavaş olacağından şüphe duyuyorum ama bunun kaldırılması için uygun olup olmadığına bakmak istiyorum. konak ve cihaz ile çekirdek yükü arasındaki veri iletişimi, saniyede yüzlerce kez başlatılır. Eğer GPU yoksa sadece LAPACK benzeri bir alternatif var mı? Bu özel 6x6 vakasını sadece GPU'da çözmek için bir şeyi nasıl uygulayacağım? Örneğin, GPU BLAS kütüphaneleri ile büyük bir zaman yatırımı yapılmadan yapılabilir mi?

+0

6x6 lineer bir sistem o kadar küçüktür ki, denklemleri CUDA kodunun içine yazabilirsiniz ... Açıkçası böylesine küçük bir sistem için CUDA'nın paralel doğasından herhangi bir fayda elde etmek çok zor olurdu. GPU-CPU iletişimi gerçekten büyük bir fayda sağlayacaktır. Mümkün mü, farklı bir şekilde paralel mi mümkün olabilir? Sistemi tek bir GPU çekirdeğinde çözün ve daha sonra birden fazla çekirdek 500+ çözüm/s'yi kullanın. Bir önceki sistemden bir sonraki çalışmaya başlamak için sonuçlara ihtiyacınız yoksa, bu en iyisi olurdu. – Eiver

+1

@Eiver para üzerindedir. Bu 500'ü paralel yapabilir misiniz, yoksa birbirine bağımlı mıdırlar? 6x6 için bu yaklaşım http://en.wikipedia.org/wiki/Cholesky_decomposition#Block_variant el-katlanabilir görünüyor ... –

cevap

3

NVIDIA, toplu bir Ax = b çözücü için geçen sonbaharda kayıtlı geliştirici web sitesine bir kod gönderdi. Bu kod, genel matrisler için çalışır ve simetrik matrisleri tam matrislere genişletebileceğiniz (6x6 için bir sorun olmamalıdır) gereksinimleriniz için yeterince iyi çalışmalıdır. Kod, pozitif kesin matrisler için gereksiz olan pivotu gerçekleştirdiği için, sizin durumunuz için en uygun değildir, ancak kod bir BSD lisansı altında olduğu için bunu sizin amacınıza göre değiştirebilirsiniz.

NVIDIA'nın standart geliştirici web sitesi şu anda bazı sorunları yaşıyor. Varolan NVdeveloper hesabınız varsa

(2) (örn aracılığı partners.nvidia.com) tıklayın

(1) git http://www.nvidia.com/content/cuda/cuda-toolkit.html için: Burada şu anda batched çözücü kodunu indirebilirsiniz nasıl Ekranın sağ yarısında yeşil "nvdeveloper'a giriş" bağlantısı. Aksi takdirde yeni bir hesaba başvurmak için "Nvdeveloper'a katıl" a tıklayın; Yeni hesaplar için talepler genellikle bir iş günü içinde onaylanır.

(3)

(4) "Yeni İndirme" başlıklı sağ tarafta bir bölüm vardır e-posta adresi ve şifreyle isteminde giriş yapın. En üstteki beşinci öğe "Toplu Çözücü" dir. Bunu tıklayın ve kod için indirme sayfasına götürecektir.

(5) "İndirme" bağlantısını tıklayın, ardından lisans koşullarını kabul etmek için "Kabul et" i tıklayın. İndirme işleminiz başlamalıdır.

+0

Batched Solver bir ilk bakışından, ben ne yapacağım gibi görünüyor çok teşekkür ederim aramak. –

+0

Sadece bir şey bildiğiniz doğrusal cebir ve GPU'lar hakkında başka bir soru sordum! http://stackoverflow.com/questions/11778981/code-library-to-calculate-determinant-of-a-small-6x6-matrix-solely-on-gpu –

İlgili konular