NVIDIA vs AMD: prestazioni GPGPU


105

Mi piacerebbe sentire persone con esperienza di programmazione per entrambi. Io stesso ho esperienza solo con NVIDIA.

NVIDIA CUDA sembra essere molto più popolare della concorrenza. (Contando solo i tag delle domande su questo forum, "cuda" supera "opencl" 3: 1 e "nvidia" supera "ati" 15: 1 e non esiste alcun tag per "ati-stream").

D'altra parte, secondo Wikipedia, le schede ATI / AMD dovrebbero avere molto più potenziale, soprattutto per dollaro. La scheda NVIDIA più veloce sul mercato fino ad oggi, GeForce 580 ($ 500), è valutata a 1,6 TFlop a precisione singola. AMD Radeon 6970 può essere acquistato per $ 370 ed è valutato a 2,7 TFlops. Il 580 ha 512 unità di esecuzione a 772 MHz. Il 6970 ha 1536 unità di esecuzione a 880 MHz.

Quanto è realistico il vantaggio cartaceo di AMD rispetto a NVIDIA ed è probabile che venga realizzato nella maggior parte delle attività GPGPU? Cosa succede con i task interi?


1
Domanda interessante, ma non sono sicuro che sia davvero correlata alla programmazione ?
Paul R

25
Si tratta essenzialmente di una domanda su due linguaggi di programmazione e sugli aspetti pratici delle loro implementazioni. Quindi direi di sì.
Eugene Smith

2
Mi chiedo quanto siano diventate rilevanti le risposte a questa domanda alla luce di C ++ AMP.
Dmitri Nesteruk

2
A un certo punto, stavo cercando di capire perché il mining di Bitcoin è così lento sull'hardware NVIDIA rispetto ad AMD. Il thread risultante, "AMD Radeon 3 volte più veloce nel mining di bitcoin (prestazioni di hashing SHA-256)", contiene informazioni che potresti trovare interessanti. la tua domanda. forums.nvidia.com/…
Roger Dahl

1
Mi sembra che questa domanda si tradurrà in una raccolta di pezzi di opinione, a seconda delle aree di applicazione con cui gli intervistati hanno familiarità, dell'hardware e del software che usano, ecc; oppure una risposta esauriente sarà troppo ampia per adattarsi al formato SO. Votazioni per chiudere.
njuffa

Risposte:


79

Metaforicamente parlando ati ha un buon motore rispetto a nvidia. Ma nvidia ha un'auto migliore: D

Ciò è principalmente dovuto al fatto che nvidia ha investito una buona quantità delle sue risorse (in denaro e persone) per sviluppare importanti librerie necessarie per il calcolo scientifico (BLAS, FFT), e quindi di nuovo un buon lavoro nel promuoverlo. Questo potrebbe essere il motivo per cui CUDA domina i tag qui rispetto ad ati (o OpenCL)

Per quanto riguarda il vantaggio che si ottiene nelle attività GPGPU in generale, finirebbe per dipendere da altri problemi (a seconda dell'applicazione) come la larghezza di banda del trasferimento della memoria, un buon compilatore e probabilmente anche il driver. Avendo nvidia un compilatore più maturo, un driver più stabile su linux (linux perché il suo utilizzo è molto diffuso nell'informatica scientifica), inclina la bilancia a favore di CUDA (almeno per ora).


MODIFICA 12 gennaio 2013

Sono passati due anni da quando ho scritto questo post e sembra ancora attirare visualizzazioni a volte. Quindi ho deciso di chiarire alcune cose

  • AMD ha intensificato il proprio gioco. Ora hanno sia le librerie BLAS che FFT. Anche numerose librerie di terze parti stanno spuntando intorno a OpenCL.
  • Intel ha introdotto Xeon Phi in circolazione supportando sia OpenMP che OpenCL. Ha anche la capacità di utilizzare il codice x86 esistente. come notato nei commenti, per ora limitato x86 senza SSE
  • NVIDIA e CUDA hanno ancora il vantaggio nella gamma di librerie disponibili. Tuttavia potrebbero non concentrarsi su OpenCL tanto quanto prima.

In breve, OpenCL ha colmato il divario negli ultimi due anni. Ci sono nuovi giocatori in campo. Ma CUDA è ancora un po 'avanti rispetto al gruppo.


4
Xeon Phi ha solo una capacità limitata di esecuzione di codice x86. Nessun MMX / SSE / SSE *.
osgx

@osgx Grazie. Avrei dovuto accennarlo.
Pavan Yalamanchili

1
@osgx Ma si comporta bene in DP FP
Csaba Toth

4
Xeon Phi dispone di registri e istruzioni a 512 bit, che corrispondono a 4 volte di quanto supporta SSE.
zr.

59

Non ho sentimenti forti su CUDA vs OpenCL; presumibilmente OpenCL è il futuro a lungo termine, a forza di essere uno standard aperto.

Ma le attuali schede NVIDIA vs ATI per GPGPU (non prestazioni grafiche, ma GPGPU), su cui ho una forte opinione. E per introdurlo, sottolineerò che nell'attuale elenco Top 500 di grandi cluster , NVIDIA porta i sistemi AMD 4 a 1 e su gpgpu.org , i risultati di ricerca (documenti, collegamenti a risorse online, ecc.) Per NVIDIA supera i risultati per AMD 6: 1.

Una parte enorme di questa differenza è la quantità di informazioni disponibili online. Dai un'occhiata a NVIDIA CUDA Zone rispetto a GPGPU Developer Central di AMD . La quantità di materiale disponibile per gli sviluppatori all'avvio non si avvicina nemmeno al confronto. Sul sito di NVIDIA troverai tonnellate di documenti - e contributi di codice - da persone che probabilmente lavorano su problemi come il tuo. Troverai tonnellate di lezioni online, da NVIDIA e altrove, e documenti molto utili come la guida alle migliori pratiche per sviluppatori, ecc. La disponibilità di strumenti di sviluppo gratuiti - il profiler, il cuda-gdb, ecc. - inclina in modo schiacciante il modo in cui NVIDIA.

(Editore: le informazioni in questo paragrafo non sono più accurate.) E una parte della differenza è anche l'hardware. Le schede AMD hanno specifiche migliori in termini di picchi di flop, ma per essere in grado di ottenere una frazione significativa di questo, non solo devi suddividere il tuo problema su molti processori di flusso completamente indipendenti, ma anche ogni elemento di lavoro deve essere vettorializzato. Dato che GPGPUing il codice è abbastanza difficile, quella complessità architettonica extra è sufficiente per creare o distruggere alcuni progetti.

E il risultato di tutto ciò è che la comunità degli utenti NVIDIA continua a crescere. Dei tre o quattro gruppi che conosco che pensano di costruire cluster GPU, nessuno di loro sta prendendo seriamente in considerazione le schede AMD. E questo significherà ancora più gruppi che scrivono documenti, contribuiscono con codice, ecc. Sul lato NVIDIA.

Non sono uno shill NVIDIA; Vorrei che non fosse così e che esistessero due (o più!) Piattaforme GPGPU ugualmente avvincenti. La concorrenza è buona. Forse AMD intensificherà il suo gioco molto presto ei prossimi prodotti fusion sembrano molto convincenti. Ma nel dare un consiglio a qualcuno su quali carte acquistare oggi e dove dedicare il proprio tempo a impegnarsi in questo momento, non posso in buona coscienza dire che entrambi gli ambienti di sviluppo sono ugualmente buoni.

Modificato per aggiungere : immagino che quanto sopra sia un po 'ellittico in termini di risposta alla domanda originale, quindi lascia che sia un po' più esplicito. Le prestazioni che si possono ottenere da un pezzo di hardware sono, in un mondo ideale con tempo infinito a disposizione, dipendenti solo dall'hardware sottostante e dalle capacità del linguaggio di programmazione; ma in realtà, la quantità di prestazioni che puoi ottenere in una quantità fissa di tempo investito dipende anche fortemente dagli strumenti di sviluppo, dalle basi di codice della comunità esistenti (ad esempio, librerie disponibili pubblicamente, ecc.). Tutte queste considerazioni puntano fortemente su NVIDIA.

(Editore: le informazioni in questo paragrafo non sono più accurate.) In termini di hardware, i requisiti per la vettorizzazione all'interno delle unità SIMD nelle schede AMD rendono anche il raggiungimento delle prestazioni della carta ancora più difficili rispetto all'hardware NVIDIA.


2
Sto imparando OpenCL usando ATI Stream, apprezzo la nota sulla vettorizzazione :) Anche se mi rendo conto che i vantaggi di NVIDIA sono abbastanza grandi, supporto semplicemente AMD / ATI e l'azienda stessa e ho tempo da dedicare alla creazione di librerie: DI penso che le prestazioni di OpenCL lo faranno sicuramente aumenterà negli anni a venire e vorrei che il mio codice fosse pronto anche per questo.
Garet Claborn,

Sarebbe interessante vedere cosa ne pensate di GCN e OpenCL 1.2 di AMD, ora (2013) che i simds sono un ricordo del passato. Qualche differenza netta?
danno il

3
@ Jonathan sono passati 3 anni da quando hai scritto questo fantastico post. Mi chiedevo se a tuo avviso la piattaforma, la community e l'ecosistema AMD abbiano colmato il divario.
basilikode

Non tanto per le schede video o GPGPU ma per quanto riguarda i processori stessi, sono sempre stato un fan di Intel rispetto ad AMD, tuttavia e recentemente AMD sta per rilasciare il nuovo processore ZEN in cui i loro test del segno di masterizzazione lo mostrano con le impostazioni predefinite è paragonabile ai migliori processori i7 di Intel. La loro nuova tecnologia dovrebbe migliorare quanto più funziona in quanto riconosce i modelli di istruzioni. Quindi penso che la maggior parte del loro tempo e dei loro sforzi siano stati spesi su questo nuovo processore rispetto alla loro tecnologia GPU. Tuttavia, una volta che i loro processori Zen verranno rilasciati, sono sicuro che Intel avrà qualcosa di meglio.
Francis Cugler

17

La principale differenza tra le architetture AMD e NVIDIA è che AMD è ottimizzata per problemi in cui il comportamento dell'algoritmo può essere determinato in fase di compilazione mentre NVIDIA è ottimizzato per problemi in cui il comportamento dell'algoritmo può essere determinato solo in fase di esecuzione.

AMD ha un'architettura relativamente semplice che consente loro di spendere più transistor su ALU. Finché il problema può essere completamente definito in fase di compilazione ed essere mappato con successo all'architettura in un modo un po 'statico o lineare, ci sono buone probabilità che AMD sia in grado di eseguire l'algoritmo più velocemente di NVIDIA.

D'altra parte, il compilatore di NVIDIA sta facendo meno analisi in fase di compilazione. Invece, NVIDIA ha un'architettura più avanzata in cui hanno speso più transistor sulla logica in grado di gestire il comportamento dinamico dell'algoritmo che emerge solo in fase di esecuzione.

Credo che il fatto che la maggior parte dei supercomputer che utilizzano GPU vada con NVIDIA è che il tipo di problema su cui gli scienziati sono interessati a eseguire calcoli, in generale si associa meglio all'architettura di NVIDIA rispetto a quella di AMD.


2
Con GCN (Graphics Core Next), AMD è passata da SIMD e VLIW a un'architettura più simile a NVIDIA (SIMT e pianificazione delle istruzioni più flessibile).
Aleksandr Dubinsky

1
@AleksandrDubinsky: E con l'hardware di Compute Capability 3.0, NVIDIA si è avvicinata ad AMD rimuovendo la pianificazione dinamica. Penso che le loro architetture convergeranno da qualche parte nel mezzo.
Roger Dahl

1
L'ho sentito in passato, ma non sono riuscito a trovare informazioni concrete. Dove posso trovare maggiori dettagli su questo?
Yakov Galka

7

Ho eseguito una codifica iterativa in OpenCL. E i risultati dell'esecuzione in NVIDIA e ATI sono praticamente gli stessi. Quasi la stessa velocità nelle carte dello stesso valore ($).

In entrambi i casi, le velocità erano ~ 10x-30x rispetto a una CPU.

Non ho testato CUDA, ma dubito che possa risolvere magicamente i miei problemi di recupero della memoria casuale. Al giorno d'oggi, CUDA e OpenCL sono più o meno la stessa cosa, e vedo più futuro su OpenCL che su CUDA. Il motivo principale è che Intel sta lanciando driver con OpenCL per i propri processori. Questo sarà un enorme progresso in futuro (l'esecuzione di 16, 32 o 64 thread di OpenCL nella CPU è DAVVERO veloce e davvero facile da portare sulla GPU).


7

Dopo aver trascorso un po 'di tempo con OpenCL per le schede GCN dopo alcuni anni di CUDA per Fermi e Kepler, preferisco ancora CUDA come linguaggio di programmazione e sceglierei l'hardware AMD con CUDA se avessi un'opzione.

Principali differenze di NVIDIA e AMD (OpenCL):

Per AMD:

  • Anche con Maxwell, NVidia ha ancora latenze di comando più lunghe e gli algoritmi complessi potrebbero essere 10 più veloci su AMD (assumendo gli stessi Tflop teorici) dopo facili ottimizzazioni per entrambi. Il divario era fino al 60% per Kepler VS GCN. È più difficile ottimizzare i kernel complessi per NVidia in questo senso.

  • Carte economiche.

  • OpenCL è uno standard aperto con altri fornitori disponibili.

Per Nvidia:

  • Ha la linea di hardware Tesla adatta per carichi di server elevati e affidabili.

  • Il nuovo Maxwell è molto più efficiente dal punto di vista energetico.

  • Il compilatore e gli strumenti sono molto più avanzati. AMD non riesce ancora a implementare i maxregcoutparametri, quindi puoi facilmente controllare l'occupazione su vari hardware e il loro compilatore ha molte idee casuali su cosa sia un codice ottimale che cambia con ogni versione, quindi potrebbe essere necessario rivisitare il vecchio codice ogni metà un anno perché improvvisamente è diventato più lento del 40%.

A questo punto se il tuo obiettivo è GPGPU, CUDA è l'unica scelta, poiché opencL con AMD non è pronto per la server farm ed è molto più difficile scrivere codice efficiente per AMD perché il compilatore sembra essere sempre "in beta" .


Grazie per la nuova risposta. Puoi chiarire in quali unità "probabilmente saranno 10 più veloci"? Per cento?
Aleksandr Dubinsky

Opinione personale: un tempo le schede ATI erano in un certo senso migliori di Nvidia ma mancavano del supporto per l'aggiornamento dei driver e nel tempo AMD ha rilevato completamente ATI, mentre Nvidia è ancora la stessa azienda. Inoltre, Nvidia ha ancora un migliore supporto per i driver di aggiornamento. Questo si trova più all'interno dell'estremità utente delle carte per le prestazioni con le applicazioni. Non fraintendetemi entrambe le tecnologie sono eccezionali a modo loro ed entrambe hanno schede economiche di fascia bassa e schede di fascia alta più costose. Nel tempo sono passato da ATI a Nvidia. Per quanto riguarda lo sviluppo, Nvidia ha un set di funzionalità molto migliori e API o libreria programmabili.
Francis Cugler

6

Sono nuovo in GPGPU ma ho una certa esperienza nel calcolo scientifico (PhD in Fisica). Sto mettendo insieme un team di ricerca e voglio iniziare a utilizzare GPGPU per i miei calcoli. Ho dovuto scegliere tra le piattaforme disponibili. Ho deciso per Nvidia, per un paio di motivi: mentre ATI potrebbe essere più veloce sulla carta, Nvidia ha una piattaforma più matura e più documentazione, quindi sarà possibile avvicinarsi alle massime prestazioni su questa piattaforma.

Nvidia ha anche un programma di supporto alla ricerca accademica, si può richiedere supporto, ho appena ricevuto una scheda TESLA 2075 di cui sono molto contento. Non so se ATI o Intel supportino la ricerca in questo modo.

Quello che ho sentito su OpenCL è che sta cercando di essere tutto in una volta, è vero che il tuo codice OpenCL sarà più portabile ma è anche probabile che non sfrutti appieno le funzionalità di nessuna delle due piattaforme. Preferisco imparare un po 'di più e scrivere programmi che utilizzano meglio le risorse. Con il TESLA K10 appena uscito quest'anno Nvidia si colloca nella fascia 4.5 TeraFlops quindi non è chiaro se Nvidia sia dietro ... tuttavia Intel MIC potrebbe rivelarsi un vero concorrente, soprattutto se riusciranno a spostare l'unità GPGPU in la scheda madre. Ma per ora, ho scelto Nvidia.


Dai un'occhiata alla risposta di @AndrewCooke per un'opinione sul (mancanza di) supporto di NVidia.
Aleksandr Dubinsky

5

La mia esperienza nella valutazione delle prestazioni in virgola mobile di OpenCL tende a favorire le schede NVIDIA. Ho lavorato con un paio di benchmark in virgola mobile su schede NVIDIA che vanno dalla 8600M GT alla GTX 460. Le schede NVIDIA raggiungono costantemente circa la metà del picco teorico di precisione singola su questi benchmark.
Le schede ATI con cui ho lavorato raramente raggiungono meglio di un terzo del picco a precisione singola. Notare che la mia esperienza con ATI è distorta; Sono stato in grado di lavorare solo con una scheda della serie 5000. La mia esperienza riguarda principalmente le schede della serie HD 4000, che non sono mai state ben supportate. Il supporto per le schede della serie HD 5000 è molto migliore.


1

Vorrei aggiungere al dibattito. Per noi nel business del software, possiamo compromettere le prestazioni grezze a precisione singola per la produttività, ma anche questo non devo scendere a compromessi poiché, come già sottolineato, non è possibile ottenere sull'hardware ATI utilizzando OpenCL tutte le prestazioni che si possono ottenere se scrivi in ​​CUDA sull'hardware NVIDIA.

E sì, con l'annuncio di PGI del compilatore x86 per CUDA, non ci saranno buone ragioni per dedicare più tempo e risorse a scrivere in OpenCL :)

PS: La mia argomentazione potrebbe essere di parte poiché lavoriamo quasi tutto il nostro GPGPU su CUDA. Abbiamo una libreria CUVI per l'elaborazione delle immagini / visione artificiale (CUDA for Vision and Imaging) che accelera alcune funzionalità IP / CV di base su CUDA.


0

Cuda è certamente popolare di OpenCL ad oggi, poiché è stato rilasciato 3 o 4 anni prima di OpenCL. Da quando è stato rilasciato OpenCL, Nvidia non ha contribuito molto per il linguaggio poiché si è concentrato molto su CUDA. Non hanno nemmeno rilasciato la versione 1.2 di openCL per nessun driver.

Per quanto riguarda l'informatica eterogenea e i dispositivi portatili, OpenCl guadagnerà sicuramente più popolarità nel prossimo futuro. Al momento il maggior contributore a OpenCL è AMD, è visibile sul loro sito.


-2

nella mia esperienza:

  • se vuoi le migliori prestazioni in assoluto, devi vedere chi ha l'ultima iterazione hardware e usare il loro stack (comprese le ultime versioni / beta).

  • se vuoi le migliori prestazioni per i soldi, punterai su carte da gioco piuttosto che su carte "professionali" e la flessibilità di scegliere piattaforme diverse favorisce l'opencl.

  • se stai iniziando, in particolare, cuda tende ad essere più lucido e ad avere più strumenti e librerie.

infine, la mia opinione personale, dopo il terribile "supporto" di nvidia (abbiamo ricevuto una tesla morta e non è stata cambiata per mesi, mentre un cliente stava aspettando): la flessibilità di saltare la nave con opencl vale il rischio di prestazioni leggermente inferiori quando nvidia è in testa nel ciclo di rilascio.


Esperienza simile con il "supporto" di nvidia: crash in libcuda.so(solo con OpenCL, CUDA funziona) e nessuna risposta da parte loro.
eudoxos

1
Con il nostro rivenditore non abbiamo alcun problema a sostituire tesla morti, di solito riceviamo il nuovo hardware prima di inviare quello difettoso, quindi immagino che non sia un problema di NVidia ma del tuo rivenditore.
Gaetano Mendola

Pensavo che Tesla fosse super affidabile. Che fud di marketing.
Aleksandr Dubinsky

OpenCL non è portabile in termini di prestazioni, quindi non è possibile saltare la spedizione ogni volta che una società rilascia una nuova ammiraglia (senza mantenere due rami di codice ottimizzati). Inoltre, il supporto OpenCL di NVIDIA è indietro di diverse versioni e, sospetto, scarsamente mantenuto.
Aleksandr Dubinsky
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.