2010-07-03 5 views
16

Sto cercando un confronto tra OpenCL e DirectCompute, ma non ho trovato nulla. I vantaggi di OpenCL di essere multipiattaforma e di avere una gamma più ampia di GPU supportate non hanno importanza per me. Sto bene con la codifica su Windows solo con le GPU DX11. Supponendo che, quali sono i pro e i contro di ciascuna API?OpenCL vs. DirectCompute?

Conosco this question was raised before, ma sto cercando ulteriori dettagli.

Non sono interessato a CUDA, dal momento che non voglio limitarmi all'hardware Nvidia.

+0

Si potrebbe voler riconsiderare la propria posizione su CUDA, è piuttosto eccitante, come l'hardware nvidia. – Benson

+6

@Benson Supponendo che tutti gli utenti abbiano hardware Nvidia sembra un errore piuttosto grande. È preferibile attenersi a un'API standard come OpenCL o DirectCompute. Entrambi offrono gli stessi vantaggi di CUDA senza lo svantaggio di lavorare solo sull'hardware Nvidia. Al giorno d'oggi si deve mettere in discussione la decisione di utilizzare CUDA quando ci sono altre API che fanno esattamente la stessa cosa su un numero qualsiasi di sistemi hardware diversi. – Cromulent

+0

@Simon Davvero? Ammetto che sono passati alcuni mesi da quando ho fatto un paragone, ma l'ultima volta che ho controllato CUDA era un ordine di grandezza più completo e ricco di funzionalità. Si fanno altre ipotesi quando si utilizza DirectCompute. Nel frattempo, non tutti hanno "utenti" generici. Un gran numero di progetti di informatica scientifica acquistano l'hardware e costruiscono il software per eseguirlo. Dal momento che non abbiamo ottenuto alcun dettaglio da Bob, non puoi assumere in un modo o nell'altro. – Benson

risposta

11

Probabilmente la più grande differenza per un codificatore è che DirectCompute è programmato da una lingua che è simile a HLSL e OpenCL è programmato tramite un linguaggio di tipo C.

Un'altra differenza da considerare è che, in generale, per le GPU di livello merceologico, il supporto di DirectX è migliore (più veloce e meno buggato) del supporto OpenGL su Windows. Questo può tradursi in un supporto più stabile per DirectCompute, ma in realtà, questa è solo una speculazione.

+0

Cosa c'entra il supporto OpenGL su Windows con OpenCL ...? L'importante è la differenza nel supporto tra i venditori; AMD supporta molto bene OpenCL e ha il supporto per le versioni più recenti, NVIDIA (che ha il prodotto CUDA concorrente) supporta solo CL 1.1 (con estensioni immagine ecc.) Inoltre, OpenCL garantisce alcune cose che DirectCompute (e Compute Shaders di OpenGL) non , come la conformità in virgola mobile IEEE. – Amadiro

+0

Quando ho scritto questo, e penso che sia ancora il caso, i driver della scheda video di basso livello sono gli stessi per ogni tecnologia. Per favore leggi attentamente cosa dico: "Questo può tradursi in un supporto più stabile ..." Questa è una speculazione, ma non infondata, dal momento che il protocollo per spostare la memoria e le funzioni da e verso la scheda video è lo stesso per entrambi gli stack, e per DirectCompute condivide la stessa quantità di test e robustezza di cui godeva il meglio supportato da DirectX. Di nuovo, nel momento in cui scrissi questo. – codekaizen

11

Bene, il vantaggio principale di OpenCL è che non si limita alle sole schede grafiche. È possibile utilizzare la CPU multicore, la scheda grafica e potenzialmente qualsiasi numero di altri dispositivi di accelerazione hardware (DSP, ecc.) Tutti dallo stesso programma.

Non sono sicuro che DirectCompute consenta tale libertà.

+1

DirectCompute non funziona su risorse della CPU, tuttavia l'acceleratore v2 di MSR viene eseguito sulla CPU, e piuttosto astrae l'uso di computazionale risorse. http://research.microsoft.com/en-us/projects/accelerator/ – codekaizen

1

Uso OpenCL perché posso facilmente effettuare il porting della mia app su Linux ma con DirectCompute questo non è possibile. Penso anche che le prestazioni dell'implementazione di OpenCL aumenteranno nel tempo (che si trova allo stesso livello come CUDA per le schede NVidia) e anche che i bug (del driver) saranno (si spera;)) essere eliminati con il tempo.

4

L'OpenCL multipiattaforma non è solo un dettaglio, poiché il codice host (quello che chiama l'API OpenCL e invia i kernel) può essere esso stesso multipiattaforma (vedere link text, link text ...).

Scrivi una sola volta, esegui su qualsiasi GPGPU, ovunque.

In caso contrario, l'attrezzatura OpenCL è davvero sempre meglio, con un plugin ATI Stream per Visual Studio, la Nvidia & ATI SDK che contiene tonnellate di campioni, ecc ...

3

Un'altra opzione è ora C++ AMP che ti dà moderna sintassi C++ senza la necessità di un compilatore separato pur conservando la portabilità dell'hardware. Si prega di seguire i collegamenti da qui per ulteriori informazioni e sentirsi liberi di inviare domande come li avete: http://blogs.msdn.com/b/nativeconcurrency/archive/2011/09/13/c-amp-in-a-nutshell.aspx

+1

Ho avuto l'impressione che solo Visual Studio 2012 possa compilare codice C++ AMP - non conta come "una necessità per un compilatore separato"? – JBentley