Domanda

Mi piacerebbe sentire da parte di persone con esperienza di codifica per entrambi. Io stesso, ho solo esperienza con NVIDIA.

NVIDIA CUDA sembra essere molto più popolare rispetto alla concorrenza. (Solo contando i tag domanda su questo forum, 'cuda' Sorpassa 'OpenCL' 3: 1, e 'nvidia' Sorpassa 'ati' 15: 1, e non c'è nessun tag per 'ati-stream' a tutti).

D'altra parte, secondo Wikipedia, schede ATI / AMD dovrebbe avere molto più potenziale, in particolare per dollaro. La scheda più veloce di NVIDIA sul mercato a partire da oggi, GeForce 580 ($ 500), è valutato a 1,6 TFlops singola precisione. AMD Radeon 6970 può essere avuto per $ 370 si è valutato a 2,7 TFlops. Il 580 dispone di 512 unità di esecuzione a 772 MHz. Il 6970 ha 1536 unità di esecuzione a 880 MHz.

Quanto è realistico che il vantaggio di carta di AMD su NVIDIA, ed è probabile che sia realizzata nella maggior parte dei compiti GPGPU? Che cosa succede con i compiti interi?

È stato utile?

Soluzione

Metaforicamente parlando ati ha un motore buono rispetto a NVIDIA. Ma NVIDIA ha una macchina migliore: D

Questo è soprattutto perché NVIDIA ha investito importo buona delle sue risorse (in denaro e persone) per sviluppare importanti librerie necessarie per il calcolo scientifico (BLAS, FFT), e poi un lavoro di nuovo bene per promuoverlo. Questo può essere il motivo per CUDA domina i tag qui rispetto ad ati (o OpenCL)

Per quanto riguarda il vantaggio di essere realizzato in compiti GPGPU in generale, finirebbe a seconda di altre questioni (a seconda dell'applicazione) quali, larghezza di banda di trasferimento della memoria, un buon compilatore e, probabilmente, anche il conducente. nvidia avere un compilatore più maturo, un driver più stabile su linux (Linux perché, il suo uso è molto diffuso nel calcolo scientifico), inclinare la bilancia a favore di CUDA (almeno per ora).


Modifica 12 gennaio 2013

Sono passati due anni da quando ho fatto questo post e sembra ancora ad attrarre vista volte. Così ho deciso di chiarire alcune cose

  • AMD ha intensificato il loro gioco. Ora hanno entrambe le librerie BLAS e FFT. Numerose librerie di terze parti sono anche spuntano intorno OpenCL.
  • Intel ha introdotto Xeon Phi in natura supporta sia OpenMP e OpenCL. Essa ha anche il codice x86 utilizzo capacità esistente. come notato nei commenti, x86 limitato senza SSE per ora
  • NVIDIA CUDA e hanno ancora il bordo nella gamma di librerie disponibili. Tuttavia essi non possono essere concentrandosi su OpenCL tanto quanto hanno fatto prima.

In breve OpenCL ha chiuso il gap negli ultimi due anni. Ci sono nuovi giocatori in campo. Ma CUDA è ancora un po 'davanti al pacchetto.

Altri suggerimenti

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

Ma corrente-giorno NVIDIA vs schede ATI per GPGPU (non le prestazioni grafiche, ma GPGPU), che faccio hanno una forte opinione su. E per il piombo in questo, io segnalo che sul attuale lista Top 500 dei grandi cluster , conduce NVIDIA Amd 4 sistemi a 1, e su gpgpu.org , risultati della ricerca (documenti, link a linea risorse, ecc) per NVIDIA più numerosi risultati per AMD 6: 1.

Una grande parte di questa differenza è la quantità di informazioni disponibili on-line. Controlla la NVIDIA CUDA Zone contro di AMD GPGPU centrale sviluppatori . La quantità di roba lì per gli sviluppatori di avvio non si avvicina nemmeno a paragonare. Sul sito di NVIDIA si trovano tonnellate di carte - e il codice contribuito - da parte di persone probabilmente lavorano su problemi come la tua. Troverete tonnellate di lezioni on-line, da NVIDIA e altrove, e documenti molto utili come guida delle migliori pratiche degli sviluppatori, ecc La disponibilità di strumenti devel liberi - il profiler, il CUDA-gdb, ecc - si inclina in modo schiacciante di NVIDIA modo.

(Editor: le informazioni in questo paragrafo non è più accurata.) E alcuni della differenza è anche hardware. schede AMD hanno migliori specifiche in termini di picco di flop, ma per essere in grado di ottenere una frazione significativa di che, è necessario non solo per rompere il vostro problema su sopra molti stream processor completamente indipendenti, ogni elemento di lavoro ha anche bisogno di essere vettorializzare. Dato che il codice GPGPUing quelli è già abbastanza difficile, che la complessità architettonica in più è sufficiente per creare o distruggere alcuni progetti.

E il risultato di tutto questo è che la community di NVIDIA continua a crescere. Dei tre o quattro gruppi che conosco pensando di costruire cluster GPU, nessuno di loro stanno considerando seriamente le schede AMD. E questo significherà ancora più gruppi la scrittura di documenti, contribuendo codice, ecc sul lato NVIDIA.

Non sono un rialzo a trabocchetto NVIDIA; Vorrei che non fosse così, e che ci sono stati due (o più!) Piattaforme GPGPU altrettanto convincenti. La concorrenza è buona. Forse AMD intensificare il suo gioco molto presto - e le prossime prodotti di fusione guardare molto convincente. Ma a dare consigli a qualcuno che le carte per comprare oggi, e dove trascorrere il loro tempo mettendo sforzo in questo momento, non posso in coscienza dire che entrambi gli ambienti di sviluppo sono altrettanto buone.

A cura di aggiungere : Credo che quanto sopra è un po 'ellittica in termini di rispondere alla domanda iniziale, quindi permettetemi di fare un po' più esplicito. Le prestazioni si possono ottenere da un pezzo di hardware è, in un mondo ideale con il tempo infinito a disposizione, dipende solo dall'hardware sottostante e le capacità del linguaggio di programmazione; ma in realtà, la quantità di prestazioni si può ottenere in un determinato periodo di tempo investito è anche fortemente dipendente strumenti devel, basi esistenti codice comunitario (ad esempio, le biblioteche accessibili al pubblico, ecc). Tali considerazioni tutti i punti fortemente a NVIDIA.

(Editor:. Le informazioni in questo paragrafo non è più preciso) in termini di hardware, il requisito di vettorializzazione all'interno delle unità SIMD nelle schede AMD anche rendere raggiungimento di prestazioni di carta ancora più difficile che con hardware NVIDIA

.

La differenza principale tra AMD e architetture NVIDIA è che AMD è ottimizzato per problemi in cui il comportamento dell'algoritmo può essere determinato al momento della compilazione mentre NVIDIA è ottimizzata per problemi in cui il comportamento dell'algoritmo può essere determinato solo a run- tempo.

AMD ha una relativamente semplice architettura che permette loro di trascorrere più transistor su ALU di. Finché il problema può essere completamente definita al momento della compilazione e essere mappato con successo per l'architettura in un modo un po 'statica o lineare, c'è una buona probabilità che AMD sarà in grado di eseguire l'algoritmo più veloce di NVIDIA.

D'altra parte, il compilatore di NVIDIA sta facendo meno analisi in fase di compilazione. Invece, NVIDIA ha un'architettura più avanzato dove hanno passato più transistor in logica che è in grado di gestire il comportamento dinamico del algoritmo che emerge solo in fase di esecuzione.

Credo che il fatto che la maggior parte dei supercomputer che GPU uso vanno con NVIDIA è che il tipo di problema che gli scienziati sono interessati nella gestione di calcoli su, in mappa generale meglio l'architettura NVIDIA che AMD.

Ho fatto qualche iterativo codifica in OpenCL. E i risultati di esecuzione in NVIDIA e ATI, sono praticamente la stessa. Vicino alla stessa velocità nel lo stesso valore ($) carte.

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

non ho la prova CUDA, ma dubito che potrebbe risolvere il mio memoria casuale recuperare problemi magicamente. Al giorno d'oggi, CUDA e OpenCL sono più o meno lo stesso, e vedo più futuro su OpenCL che su CUDA. La ragione principale è che Intel sta lanciando i driver con OpenCL per i loro processori. Questo sarà un enorme progresso in futuro (in esecuzione 16, 32 o 64 fili di OpenCL CPU è veramente veloce, e davvero facile da porta per GPU).

Dopo aver trascorso qualche tempo con OpenCL per le carte di GCN, dopo alcuni anni di CUDA per Fermi e Kepler, io preferisco ancora CUDA come linguaggio di programmazione e sceglierei hardware AMD con CUDA se ho avuto un'opzione.

Principali differenze di NVIDIA e AMD (OpenCL):

Per AMD:

  • Anche con Maxwell, Nvidia ha ancora latenze di comando più lunghi e complessi algoritmi sono suscettibili di essere 10 più veloce su AMD (supponendo stessi Tflops teorici) dopo semplici ottimizzazioni per entrambi. Il distacco era fino al 60% per Kepler VS GCN. E 'più difficile per ottimizzare il kernel complesse per NVidia in questo senso.

  • carte economici.

  • OpenCL è standard aperto con altri fornitori disponibili.

Per Nvidia:

  • Ha la linea di Tesla di hardware che è adatto per affidabili elevati carichi dei server.

  • Nuovo Maxwell è il modo più efficiente di energia.

  • Compiler e gli strumenti sono il modo più avanzato. AMD ancora non è possibile arrivare a implementare parametro maxregcout, in modo da poter controllare facilmente occupazione in vari hardware e la loro compilatore ha un sacco di idee casuali di quello che è un codice ottimale che cambiano con ogni versione, quindi potrebbe essere necessario rivedere il vecchio codice ogni un anno e mezzo perché è diventato improvvisamente il 40% più lento.

A questo punto se GPGPU è il vostro obiettivo, CUDA è l'unica scelta, dal momento che OpenCL con AMD non è pronto per server farm ed è significativamente più difficile da scrivere codice efficiente per AMD a causa del fatto che il compilatore sembra sempre di essere " in beta".

Sono nuovo di GPGPU ma ho una certa esperienza in calcolo scientifico (PhD in Fisica). Sto mettendo insieme un team di ricerca e voglio andare verso l'utilizzo GPGPU per i miei calcoli. Ho dovuto scegliere tra le piattaforme disponibili. Ho deciso sulla Nvidia, per un paio di motivi:., Mentre ATI potrebbe essere più veloce sulla carta, Nvidia ha un più maturo e più piattaforma di documentazione in modo sarà possibile per avvicinarsi al massimo delle prestazioni su questa piattaforma

Nvidia ha anche un programma di supporto per la ricerca accademica, si può applicare per il supporto, ho appena ricevuto una carta di 2075 TESLA cui sono molto contento. Non so se supporta ATI o Intel Research in questo modo.

Quello che ho sentito parlare di OpenCL è che si sta cercando di essere tutto in una volta, è vero che il codice OpenCL sarà più portabile, ma è anche probabile che non sfruttare le funzionalità complete di entrambe le piattaforme. Preferisco imparare un po 'di programmi sempre di scrittura che utilizzano le risorse migliori. Con la TESLA K10 che è appena uscito quest'anno Nvidia è nei 4,5 TeraFlops intervallo in modo non è chiaro che Nvidia sta dietro ... tuttavia Intel MIC potrebbe rivelarsi un vero e proprio concorrente, soprattutto se riescono a spostare l'unità a GPGPU la scheda madre. Ma per ora, ho scelto Nvidia.

La mia esperienza nella valutazione OpenCL prestazioni in virgola mobile tende a favorire le schede NVIDIA. Ho lavorato con un paio di galleggiare benchmark punto su schede NVIDIA che vanno dal 8600M GT per le GTX 460. schede NVIDIA costantemente ottenere circa la metà del picco teorica single-precisino su questi parametri.
Le schede ATI con cui ho lavorato raramente raggiungono meglio di un terzo del picco singola precisione. Si noti che la mia esperienza con ATI è inclinata; Sono stato in grado di lavorare con una carta di serie 5000 solo. La mia esperienza è per lo più con HD 4000 schede della serie, che non sono mai stati ben supportati. Il supporto per le schede della serie HD 5000 è molto meglio.

Vorrei aggiungere al dibattito. Per noi nel commercio di software, siamo in grado di compromettere prime prestazioni in singola precisione alla produttività, ma anche che io non scendere a compromessi in quanto, come già sottolineato, non è possibile ottenere più prestazioni su hardware ATI utilizzando OpenCL come è possibile ottenere se si scrive in CUDA su hardware di NVIDIA.

E sì, con l'annuncio di IGP del compilatore x86 per CUDA, non ci sarà alcuna ragione buona per trascorrere più tempo e risorse a scrivere in OpenCL:)

P.S: Il mio argomento potrebbe essere di parte in quanto facciamo quasi tutto il nostro lavoro GPGPU su CUDA. Abbiamo un Image Processing / Computer Vision library CUVI (CUDA per Vision and Imaging) che accelera alcune funzionalità di base IP / CV su CUDA.

Cuda è certamente popolare che OpenCL come di oggi, come è stato rilasciato 3 o 4 anni prima di OpenCL. Dal momento che OpenCL stato ha rilasciato, Nvidia non ha contribuito molto per la lingua come si concentrano molto su CUDA. Non hanno nemmeno rilasciato OpenCL 1.2 versione per qualsiasi driver.

Per quanto riguarda il calcolo eterogeneo così come i dispositivi portatili come interessato OpenCL sarà sicuramente ottenere più popolarità nel prossimo futuro. A partire da ora più grande contributore di OpenCL è AMD, E 'visibile sul loro sito.

nella mia esperienza:

  • se si desidera che le migliori prestazioni in assoluto, allora avete bisogno di vedere chi è in ultima iterazione hardware e utilizzare il proprio stack (tra cui le ultime versioni beta /).

  • se si desidera che le migliori prestazioni per i soldi che punterà a schede giocatore piuttosto che carte "professionali" e la flessibilità del targeting diverse piattaforme favori OpenCL.

  • se si è agli inizi, in particolare, CUDA tende ad essere più lucido e avere più strumenti e librerie.

, infine, la mia opinione personale, dopo spaventose "sostegno" da nvidia (abbiamo ottenuto un tesla morto e non è stato cambiato per mesi, mentre un cliente era in attesa): la flessibilità necessaria per nave salto con OpenCL vale il rischio di prestazioni leggermente inferiori quando nvidia sono più avanti nel ciclo di rilascio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top