GPU sistemlerinde BLAS / LAPACK veya diğer doğrusal cebir rutinlerinin mevcut en hızlı uygulamaları nelerdir?


11

Örneğin nVidia, 7-14x hızlanma vaat eden CUBLAS'a sahiptir. Saf olarak, bu nVidia'nın GPU kartlarından herhangi birinin teorik verimine yakın değildir. GPU'larda lineer cebiri hızlandırmanın zorlukları nelerdir ve halihazırda daha hızlı lineer cebir yönlendirmeleri var mı?

Yanıtlar:


9

Sorunuzun ikinci yarısını diğer uygulamalara kadar cevaplayamıyorum, ancak zorluklarla ilgili bazı bilgiler verebilirim. Referans olarak, şahsen ViyanaCL'i nVidia GTX 560 Ti'de 2GB hafızasıyla kullandım.

Orta aralıklı bir i5 üzerinde seri kodun üzerinde, yaklaşık 40x yoğun matris çarpımı için hız artışları gördüm. Vektör-skaler çarpma gibi işlemler için 1000x hız artışı gördüm. Bununla birlikte, odadaki 800 kiloluk goril, bellek bant genişliğidir. Çoğu ticari GPU için, PCIe gibi sizi yaklaşık 6GB / s verimle sınırlayan bir şey kullanacaksınız. Benim durumumda, hesaplama 40 kat daha hızlı olsa da, üç matris kopyasının (ikisi GPU'ya ve bir geri) her biri sadece CPU'da hesaplama yapmak kadar zaman aldı.

GPU doğrusal cebiri için herhangi bir genel kütüphane ile ilgili sorun, GPU üzerindeki nesneleri gerçekten yeniden kullanamayacaklarıdır, çünkü onlarla ne yapacağınızı bilmiyorlar. Bu nedenle, bir hesaplama çekirdeğine yapılan her çağrı GPU'ya kopyalamanızı ve ardından sonucu tekrar kopyalamanızı gerektirir. Bu kazançların büyük bir kısmını yiyecektir.

Matrisler gibi nesneleri yeniden kullanabiliyorsanız, mümkün olduğunca fazla bellek yönetiminden kaçınmak için daha yüksek düzeydeki algoritmaları yazabilirsiniz, ancak bir kütüphanenin bunu verimli bir şekilde yapması zor olurdu.

Umarım bu yardımcı olur ve burada çok daha deneyimli başka insanlar olduğundan eminim, ancak bunlar GPU bilgi işlemine yaptığım kısa deneyim sırasında edindiğim deneyimler ve izlenimler.


3
Bu nedenle, CPU'ya hevesle kopyalanmak yerine GPU'da uzun süre yaşayan nesnelerin olmasını istersiniz. Örneğin, PETSc matrisleri ve vektörleri, CPU ve / veya GPU'nun güncel olup olmadığını gösteren bir işaret içerir. GPU'daki bir işlem CPU sürümünü kirli ve tersi olarak işaretler. Belleği kirli bir yerde talep ederseniz şeffaf bir şekilde yapılır, ancak büyük veri yapılarına dokunan tüm algoritmik bileşenler aynı yerde çalışabiliyorsa nadirdir.
Jed Brown

5

Sadece CUDA ve BLAS'a odaklanayım.

Bir ana BLAS uygulaması üzerindeki hızlandırma, verimi değerlendirmek için iyi bir metrik değildir, çünkü hızlandırmanın genellikle bir kişinin umurunda olduğu konusunda hemfikirim.

NVIDIA tarafından yayınlanan kıyaslamalara bakar ve Tesla M2090'ın 1331 Gigaflops (tek hassasiyet) ve 665 Gigaflops (çift prec.) Tepe performansına sahip olduğunu göz önünde bulundurursanız, SGEMM ve DGEMM için neredeyse Teorik olanın% 60'ı, ki bu oldukça iyi.

2mnkm×kk×n

Sürdürülebilir kayan nokta verimi ile ilgili olarak, flopların veri ve sonuç aktarım süreleri dikkate alınmadan hesaplanması gerektiğini düşünüyorum ve bu da hızlandırma karşılaştırmalarını zorlaştırıyor. Ayrıca, en iyi performans büyük matrisler için olduğundan matris boyutunu dikkate almanız gerekir.

Alt satır: gerçek yaşam uygulamasının hızlandırılması, GPU başlatma, veri aktarım süreleri vb.

Kesin bir metrik ve sorun tanımlanmadıkça soru hiçbir anlam ifade etmediği için, en hızlı kütüphane hakkındaki sorunuza cevap vermeyeceğim. Bütün bunlar ı düşünüyorum dedi cuBLAS ve MAGMA çok iyi bir başlangıç noktasıdır.

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.