NVIDIA vs AMD: GPGPU performansı


105

Her ikisi için de kodlama deneyimi olan kişilerden haber almak isterim. Ben sadece NVIDIA ile deneyimim var.

NVIDIA CUDA, rakiplerinden çok daha popüler görünüyor. (Sadece bu forumdaki soru etiketlerini sayarsak, 'cuda', 'opencl' 3: 1'den daha iyi performans gösterir ve 'nvidia', 'ati' 15: 1'den daha iyi performans gösterir ve 'ati-stream' için hiçbir etiket yoktur).

Öte yandan Wikipedia'ya göre ATI / AMD kartlarının özellikle dolar başına çok daha fazla potansiyele sahip olması gerekiyor. Bugün piyasadaki en hızlı NVIDIA kartı olan GeForce 580 (500 $), 1,6 tek duyarlıklı TFlop olarak derecelendirilmiştir. AMD Radeon 6970 370 $ 'a sahip olabilir ve 2.7 TFlops olarak derecelendirilmiştir. 580, 772 MHz'de 512 yürütme birimine sahiptir. 6970, 880 MHz'de 1536 yürütme birimine sahiptir.

AMD'nin NVIDIA'ya göre kağıt avantajı ne kadar gerçekçi ve çoğu GPGPU görevinde gerçekleşmesi muhtemel mi? Tamsayı görevlerde ne olur?


1
İlginç bir soru, ama gerçekten programlama ile ilgili olduğundan emin değilim ?
Paul R.

25
Esasen iki programlama dili ve uygulamalarının pratik yönleri ile ilgili bir sorudur. Yani evet derim.
Eugene Smith

2
Bu soruya verilen cevapların C ++ AMP ışığında ne kadar alakalı hale geldiğini merak ediyorum.
Dmitri Nesteruk

2
Bir noktada, Bitcoin madenciliğinin AMD'ye kıyasla NVIDIA donanımında neden bu kadar yavaş olduğunu araştırıyordum. Ortaya çıkan iş parçacığı "AMD Radeon 3 kat daha hızlı bitcoin madenciliği (SHA-256 hashing performansı)", ilginç bulabileceğiniz bilgileri içerir. senin sorun. forums.nvidia.com/…
Roger Dahl

1
Bana öyle geliyor ki bu soru, katılımcıların hangi uygulama alanlarına aşina olduklarına, hangi donanım ve yazılımı kullandıklarına bağlı olarak bir dizi fikir parçasıyla sonuçlanacak gibi görünüyor; veya kapsamlı bir yanıt, SO formatına uymak için çok geniş olacaktır. Kapanış oylaması.
njuffa

Yanıtlar:


79

Mecazi anlamda ati, nvidia'ya kıyasla iyi bir motora sahip. Ancak nvidia'nın daha iyi bir arabası var: D

Bunun nedeni, nvidia'nın bilimsel bilgi işlem için gerekli olan önemli kütüphaneleri (BLAS, FFT) geliştirmek için kaynaklarının büyük bir kısmını (para ve insanlara) yatırmış olması ve ardından onu tanıtmak için yine iyi bir iş çıkarmasıdır. CUDA'nın ati (veya OpenCL) ile karşılaştırıldığında buradaki etiketlere hakim olmasının nedeni bu olabilir.

Genel olarak GPGPU görevlerinde sağlanan avantaja gelince, bu, bellek aktarım bant genişliği, iyi bir derleyici ve hatta muhtemelen sürücü gibi diğer sorunlara (uygulamaya bağlı olarak) bağlı olacaktır. Daha olgun bir derleyiciye ve linux üzerinde daha kararlı bir sürücüye sahip olan nvidia (linux, çünkü bilimsel hesaplamada kullanımı yaygındır), dengeyi CUDA lehine çevirir (en azından şimdilik).


EDIT 12 Ocak 2013

Bu yazıyı yapalı iki yıl oldu ve bazen hala görüşleri çekiyor gibi görünüyor. Bu yüzden birkaç şeyi açıklığa kavuşturmaya karar verdim

  • AMD oyunlarını hızlandırdı. Artık hem BLAS hem de FFT kitaplıklarına sahipler. Çok sayıda üçüncü taraf kitaplığı da OpenCL etrafında kırpılıyor.
  • Intel, Xeon Phi'yi hem OpenMP hem de OpenCL'yi destekleyen doğaya tanıttı. Ayrıca mevcut x86 kodunu kullanma yeteneğine de sahiptir.yorumlarda belirtildiği gibi, şimdilik SSE'siz sınırlı x86
  • NVIDIA ve CUDA, mevcut kitaplık yelpazesinde hala avantaja sahip. Ancak daha önce olduğu kadar OpenCL'ye odaklanmıyor olabilirler.

Kısacası OpenCL, son iki yılda açığı kapattı. Sahada yeni oyuncular var. Ancak CUDA hala grubun biraz ilerisinde.


4
Xeon Phi, yalnızca sınırlı x86 kodu yürütme yeteneğine sahiptir. MMX / SSE / SSE * yok.
osgx

@osgx Teşekkürler. Bundan bahsetmeliydim.
Pavan Yalamanchili

1
@osgx Ama DP FP'de iyi performans gösteriyor
Csaba Toth

4
Xeon Phi 512 bit geniş kayıtlara ve SSE'nin desteklediğinin 4 katı olan talimatlara sahiptir.
zr.

59

CUDA ile OpenCL hakkında güçlü hislerim yok; Muhtemelen OpenCL, sadece açık bir standart olması nedeniyle uzun vadeli bir gelecek.

Ancak GPGPU için günümüz NVIDIA ve ATI kartları (grafik performansı değil, GPGPU) hakkında güçlü bir fikrim var. Ve buna öncülük etmek için, NVIDIA'nın mevcut En Büyük 500 büyük küme listesinde, AMD 4 sistemlerini 1'e ve gpgpu.org'da NVIDIA için arama sonuçlarının (makaleler, çevrimiçi kaynaklara bağlantılar vb.) AMD 6: 1 için daha fazla sonuç.

Bu farkın büyük bir kısmı, mevcut çevrimiçi bilgi miktarıdır. NVIDIA CUDA Zone ile AMD'nin GPGPU Developer Central'ına bakın . Yeni başlayan geliştiriciler için oradaki şeylerin miktarı karşılaştırmaya bile yaklaşmıyor. NVIDIA'nın sitesinde, muhtemelen sizinki gibi problemler üzerinde çalışan insanlardan tonlarca makale ve katkıda bulunan kod bulacaksınız. NVIDIA'dan ve başka yerlerden tonlarca çevrimiçi sınıf ve geliştiricilerin en iyi uygulama kılavuzu vb. Gibi çok yararlı belgeler bulacaksınız. Ücretsiz geliştirme araçlarının kullanılabilirliği - profil oluşturucu, cuda-gdb vb. - NVIDIA'ları ezici bir şekilde eğiyor.

(Editör: Bu paragraftaki bilgiler artık doğru değil.) Ve bazı farklar da donanım. AMD kartlarının en yüksek floplar açısından daha iyi özellikleri vardır, ancak bunun önemli bir kısmını elde edebilmek için, sorununuzu yalnızca tamamen bağımsız birçok akış işlemcisine bölmekle kalmaz, her iş öğesinin de vektörleştirilmesi gerekir. GPGPU'ların kodunun yeterince zor olduğu düşünüldüğünde, bu ekstra mimari karmaşıklık bazı projeleri yapmak veya bozmak için yeterlidir.

Ve tüm bunların sonucu, NVIDIA kullanıcı topluluğunun büyümeye devam etmesidir. GPU kümeleri oluşturmayı düşündüğünü bildiğim üç veya dört gruptan hiçbiri AMD kartlarını ciddi olarak düşünmüyor. Ve bu, NVIDIA tarafında daha fazla grubun makale yazması, kod katkıda bulunması vb. Anlamına gelecektir.

Ben bir NVIDIA shill değilim; Keşke bu şekilde olmasaydı ve iki (veya daha fazla!) Eşit derecede çekici GPGPU platformu olsaydı. Rekabet iyidir. Belki AMD çok yakında oyununu hızlandıracak - ve gelecek füzyon ürünleri çok çekici görünüyor. Ancak birisine bugün hangi kartları satın alacağı ve şu anda çaba harcayarak zamanını nerede harcayacağı konusunda tavsiyelerde bulunurken, vicdanımdan her iki geliştirme ortamının da eşit derecede iyi olduğunu söyleyemem.

Eklemek için düzenlendi : Sanırım yukarıdaki soru orijinal soruyu cevaplama açısından biraz eliptiktir, bu yüzden biraz daha açık hale getireyim. Bir donanım parçasından alabileceğiniz performans, sonsuz zamanın mevcut olduğu ideal bir dünyada, yalnızca temel donanıma ve programlama dilinin yeteneklerine bağlıdır; ancak gerçekte, harcadığınız sabit bir sürede elde edebileceğiniz performans miktarı da büyük ölçüde geliştirme araçlarına, mevcut topluluk kod tabanlarına (örneğin, halka açık kütüphaneler, vb.) bağlıdır. Tüm bu düşünceler NVIDIA'ya güçlü bir şekilde işaret ediyor.

(Editör: bu paragraftaki bilgiler artık doğru değil.) Donanım açısından, AMD kartlarındaki SIMD birimleri içinde vektörleştirme gereksinimi, kağıt performansına ulaşmayı NVIDIA donanımından daha da zorlaştırıyor.


2
ATI Stream kullanarak OpenCL öğreniyorum, vektörleştirmeyle ilgili notu takdir ediyorum :) NVIDIA'nın faydalarının oldukça büyük olduğunu fark etsem de, AMD / ATI'yi ve şirketin kendisini destekliyorum ve kitaplıklar yapmak için zamanım var: DI, OpenCL performansının işe yarayacağını düşünüyorum önümüzdeki yıllarda kesinlikle artacak ve kodumun da buna hazır olmasını istiyorum.
Garet Claborn

Simd'lerin geçmişte kaldığı AMD'nin GCN ve OpenCL 1.2'si (2013) hakkında ne düşündüğünüzü görmek ilginç olurdu. Net bir fark var mı?
danno

3
@Jonathan, bu harika gönderiyi yazmanızın üzerinden 3 yıl geçti. Sizce AMD platformu, topluluğu ve ekosisteminin boşluğu kapatıp kapatmadığını merak ediyordum.
basilikode

Video veya GPGPU kartları için çok fazla değil, ancak işlemcilerin kendilerine gelince, AMD'ye karşı her zaman Intel hayranıyım, ancak ve son zamanlarda AMD, yanma işareti testlerinin varsayılan ayarlarda gösterdiği yeni ZEN işlemciyi piyasaya sürmek üzeredir. Intel'in en iyi i7 işlemcileriyle karşılaştırılabilir. Yeni teknolojilerinin, talimat kalıplarını tanıdığı için daha fazla çalıştığı düşünülüyor. Bu yüzden zamanlarının ve çabalarının çoğunun GPU teknolojilerinin aksine bu yeni işlemciye harcandığını düşünüyorum. Yine de Zen işlemcileri piyasaya çıktığında Intel'in daha iyi bir şeye sahip olacağından eminim.
Francis Cugler

17

AMD'nin ve NVIDIA'nın mimarileri arasındaki temel fark, AMD'nin algoritmanın davranışının derleme zamanında belirlenebildiği problemler için optimize edilmiş olması, NVIDIA'nın ise algoritmanın davranışının yalnızca çalışma zamanında belirlenebildiği problemler için optimize edilmiş olmasıdır.

AMD, ALU'lara daha fazla transistör harcamalarına izin veren nispeten basit bir mimariye sahiptir. Problem derleme zamanında tam olarak tanımlanabildiği ve bir şekilde statik veya doğrusal bir şekilde mimariyle başarılı bir şekilde eşleştirilebildiği sürece, AMD'nin algoritmayı NVIDIA'dan daha hızlı çalıştırabilmesi için iyi bir şans vardır.

Öte yandan, NVIDIA'nın derleyicisi derleme zamanında daha az analiz yapıyor. Bunun yerine, NVIDIA, algoritmanın yalnızca çalışma zamanında ortaya çıkan dinamik davranışını idare edebilen mantık üzerine daha fazla transistör harcadıkları daha gelişmiş bir mimariye sahiptir.

GPU kullanan süper bilgisayarların çoğunun NVIDIA ile birlikte gittiğine inanıyorum, bilim adamlarının hesaplamaları yürütmekle ilgilendikleri problem türü, genel olarak NVIDIA mimarisine AMD'ninkinden daha iyi bir harita.


2
GCN (Graphics Core Next) ile AMD, SIMD ve VLIW'den NVIDIA'lara (SIMT ve daha esnek talimat planlaması) daha benzer bir mimariye geçti.
Aleksandr Dubinsky

1
@AleksandrDubinsky: Ve Compute Capability 3.0 donanımıyla NVIDIA, dinamik zamanlamayı kaldırarak AMD'ye yaklaştı. Sanırım mimarileri ortada bir yerde birleşecek.
Roger Dahl

1
Bunu geçmişte duydum ama somut bir bilgi bulamadım. Bununla ilgili daha fazla bilgiyi nerede bulabilirim?
Yakov Galka

7

OpenCL'de bazı yinelemeli kodlamalar yaptım. Ve NVIDIA ve ATI'de çalıştırmanın sonuçları hemen hemen aynı. Aynı değerde ($) kartlarda aynı hıza yakın.

Her iki durumda da, hızlar bir CPU ile karşılaştırıldığında ~ 10x-30x idi.

CUDA'yı test etmedim, ancak rastgele bellek getirme sorunlarımı sihirli bir şekilde çözebileceğinden şüpheliyim. Günümüzde CUDA ve OpenCL aşağı yukarı aynı ve OpenCL'de CUDA'dan daha fazla gelecek görüyorum. Bunun ana nedeni, Intel'in işlemcileri için OpenCL'li sürücüleri piyasaya sürmesidir. Bu, gelecekte büyük bir ilerleme olacak (CPU'da 16, 32 veya 64 OpenCL iş parçacığı çalıştırmak GERÇEKTEN hızlıdır ve GPU'ya taşımak gerçekten kolaydır).


7

Fermi ve Kepler için birkaç yıllık CUDA'dan sonra GCN kartları için OpenCL ile biraz zaman geçirdikten sonra, programlama dili olarak hala CUDA'yı tercih ediyorum ve bir seçeneğim olsaydı CUDA ile AMD donanımını seçerdim.

NVIDIA ve AMD'nin (OpenCL) temel farklılıkları:

AMD için:

  • Maxwell ile bile, NVidia hala daha uzun komut gecikmelerine sahip ve karmaşık algoritmalar, her ikisi için de kolay optimizasyonlardan sonra AMD'de (aynı teorik Tfloplar varsayılarak) muhtemelen 10 daha hızlı olacak. Kepler VS GCN için boşluk% 60'a kadar çıkmıştır. Bu anlamda NVidia için karmaşık çekirdekleri optimize etmek daha zordur.

  • Ucuz kartlar.

  • OpenCL, mevcut diğer satıcılarla birlikte açık standarttır.

Nvidia için:

  • Güvenilir yüksek sunucu yükleri için uygun Tesla donanım serisine sahiptir.

  • Yeni Maxwell güç açısından çok daha verimli.

  • Derleyici ve araçlar çok daha gelişmiştir. AMD hala maxregcoutparametreyi uygulayamıyor , bu nedenle çeşitli donanımlarda doluluğu kolayca kontrol edebilirsiniz ve derleyicilerinin her sürümde değişen en uygun kodun ne olduğuna dair pek çok rastgele fikri vardır, bu nedenle her yarıda eski kodu tekrar gözden geçirmeniz gerekebilir. bir yıl çünkü aniden% 40 daha yavaşladı.

Bu noktada hedefiniz GPGPU ise, CUDA tek seçenektir, çünkü AMD ile opencL sunucu çiftliği için hazır değildir ve derleyicinin her zaman "beta sürümünde" görünmesi nedeniyle AMD için verimli kod yazmak çok daha zordur. .


Yeni cevap için teşekkürler. Hangi birimlerin "10 daha hızlı" olduğunu açıklayabilir misiniz? Yüzde?
Aleksandr Dubinsky

Kişisel görüş: Bir zamanlar ATI Kartları bir anlamda Nvidia'dan daha iyiydi, ancak sürücü güncelleme desteğinden yoksundu ve zamanla AMD, Nvidia'nın hala aynı şirket olduğu ATI'yi tamamen satın aldı. Ayrıca, Nvidia hala daha iyi güncelleme sürücü desteğine sahiptir. Bu, uygulamalarla performans için kartların kullanıcı tarafında daha fazla yatmaktadır. Beni yanlış anlamayın, her iki teknoloji de kendi alanlarında harika ve her ikisinin de düşük kaliteli ucuz kartları ve daha pahalı yüksek kaliteli kartları var. Zamanla ATI'den Nvidia'ya geçtim. Geliştirmeye gelince, Nvidia çok daha iyi bir özellik setine ve programlanabilir API veya kitaplığa sahiptir.
Francis Cugler

6

GPGPU'da yeniyim ancak bilimsel hesaplama konusunda biraz deneyimim var (Fizikte Doktora). Bir araştırma ekibi kuruyorum ve hesaplamalarım için GPGPU kullanmaya devam etmek istiyorum. Mevcut platformlar arasında seçim yapmak zorunda kaldım. Birkaç nedenden dolayı Nvidia'ya karar verdim: ATI kağıt üzerinde daha hızlı olabilirken, Nvidia'nın daha olgun bir platformu ve daha fazla dokümantasyonu var, bu nedenle bu platformdaki en yüksek performansa yaklaşmak mümkün olacak.

Nvidia'nın ayrıca akademik bir araştırma destek programı var, biri destek için başvurabilir, çok mutlu olduğum bir TESLA 2075 kartı aldım. ATI veya Intel'in araştırmayı bu şekilde destekleyip desteklemediğini bilmiyorum.

OpenCL hakkında duyduğum şey, aynı anda her şey olmaya çalıştığıdır, OpenCL kodunuzun daha taşınabilir olacağı doğrudur, ancak aynı zamanda her iki platformun da tüm yeteneklerinden yararlanmayacaktır. Biraz daha fazla öğrenmeyi ve kaynakları daha iyi kullanan programlar yazmayı tercih ederim. Bu yıl yeni çıkan TESLA K10 ile Nvidia 4,5 TeraFlops aralığında olduğundan Nvidia'nın geride kaldığı net değil ... ancak Intel MIC'ler, özellikle de GPGPU birimini anakart. Ama şimdilik Nvidia'yı seçtim.


NVidia'nın (eksikliği) desteğiyle ilgili bir fikir için @ AndrewCooke'un yanıtına bir göz atın.
Aleksandr Dubinsky

5

OpenCL kayan nokta performansını değerlendirme konusundaki deneyimim NVIDIA kartlarını tercih etme eğilimindedir. NVIDIA kartlarında 8600M GT'den GTX 460'a kadar değişen birkaç kayan nokta kıyaslamasıyla çalıştım. NVIDIA kartları, bu kriterlerde teorik tekli kesinlik zirvesinin yaklaşık yarısını tutarlı bir şekilde elde ediyor.
Çalıştığım ATI kartları, nadiren tek duyarlıklı zirvenin üçte birinden daha fazlasını elde ediyor. ATI ile olan deneyimimin çarpık olduğunu unutmayın; Sadece bir 5000 serisi kartla çalışabildim. Deneyimlerim çoğunlukla hiçbir zaman iyi desteklenmeyen HD 4000 serisi kartlarla ilgilidir. HD 5000 serisi kartlar için destek çok daha iyidir.


1

Tartışmaya eklemek istiyorum. Yazılım işinde bizim için, ham tek hassasiyetli performanstan üretkenlikten ödün verebiliriz, ancak daha önce de belirtildiği gibi, OpenCL kullanarak ATI'nin donanımında elde edebileceğiniz kadar çok performans elde edemeyeceğiniz için ödün vermek zorunda olmadığım halde bile NVIDIA'nın donanımı üzerine CUDA yazarsanız.

Ve evet, PGI'nin CUDA için x86 derleyicisini duyurmasıyla, OpenCL'de yazmaya daha fazla zaman ve kaynak harcamak için iyi bir neden olmayacak :)

Not: GPGPU çalışmalarımızın neredeyse tamamını CUDA üzerinde yaptığımız için argümanım taraflı olabilir. CUDA'da bazı temel IP / CV işlevlerini hızlandıran bir Görüntü İşleme / Bilgisayarla Görme kitaplığımız CUVI (Görüntü ve Görüntüleme için CUDA) var.


0

Cuda, OpenCL'den 3 veya 4 yıl önce piyasaya sürüldüğü için bugün itibariyle kesinlikle OpenCL'den popüler. OpenCL piyasaya sürüldüğünden beri, Nvidia, CUDA'ya fazla yoğunlaştığı için dile fazla katkıda bulunmadı. Herhangi bir sürücü için openCL 1.2 sürümünü bile yayınlamadılar.

Heterojen bilgi işlem ve elde tutulan cihazlar söz konusu olduğunda OpenCl yakın gelecekte kesinlikle daha fazla popülerlik kazanacaktır. Şu anda OpenCL'ye en büyük katkıda bulunan AMD'dir, sitelerinde görülebilir.


-2

tecrübelerime göre:

  • En iyi mutlak performansı istiyorsanız, kimin en son donanım yinelemesinde olduğunu görmeniz ve yığınlarını kullanmanız gerekir (en son / beta sürümleri dahil).

  • Paranın karşılığını en iyi şekilde almak istiyorsanız, "profesyonel" kartlar yerine oyun kartlarını hedeflemiş olursunuz ve farklı platformları hedefleme esnekliği opencl'e yarar.

  • Özellikle başlıyorsanız, cuda daha gösterişli olma eğilimindedir ve daha fazla araç ve kitaplığa sahip olur.

son olarak, nvidia'nın dehşet verici "desteğinden" sonra kişisel görüşüm (ölü bir tesla aldık ve bir müşteri beklerken aylardır değişmedi): opencl ile gemiden atlama esnekliği, biraz daha düşük performans riskine değer nvidia sürüm döngüsünde öndeyken.


Nvidia'dan "destek" ile benzer deneyim: kilitlenme libcuda.so(yalnızca OpenCL ile, CUDA çalışır) ve onlardan hiçbir şekilde yanıt gelmez.
eudoxos

1
Bayimiz ile ölü tesla'yı değiştirmekte sorun yaşamıyoruz, genellikle yeni donanımı arızalı olanı göndermeden önce alıyoruz, bu yüzden bu bir NVidia sorunu değil, bayinizdir.
Gaetano Mendola

Tesla'nın süper güvenilir olduğunu sanıyordum. Ne pazarlama dolandırıcılığı.
Aleksandr Dubinsky

OpenCL performans açısından taşınabilir değildir, bu nedenle bir şirket her yeni amiral gemisi yayınladığında (optimize edilmiş iki kod şubesi olmadan) gemiye atlamak mümkün değildir. Ayrıca, NVIDIA'nın OpenCL desteği birkaç sürümün arkasında ve sanıyorum, bakımsız.
Aleksandr Dubinsky
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.