2012-04-24 16 views
11

Ho letto che Microsoft sta lavorando a stretto contatto con Nvidia per migliorare le prestazioni di AMP.Confusione su CUDA/openCL e C++ AMP

Ma la mia domanda è: AMP è un CUDA-sostituire da Microsoft? O AMP usa i driver CUDA quando è disponibile una scheda video NVIDIA CUDA? AMP è un sostituto openCL?

Sono ancora abbastanza confuso ..

+1

Indica se il compilatore C++-AMP genera direttamente il codice macchina GPU o genera il codice C e lo passa al compilatore CUDA o OpenCL? Ad ogni modo, scrivi C++ - AMP invece di CUDA o OpenCL. –

+1

Inoltre, non esiste una "scheda video CUDA". CUDA non è implementato nell'hardware, è convertito (compilato) nel set di istruzioni native della GPU (cioè Fermi). –

+1

La [specifica C++ AMP] (http://download.microsoft.com/download/4/0/E/40EA02D8-23A7-4BD2-AD3A-0BFFFB640F28/CppAMPLanguageAndProgrammingModel.pdf) non fa menzione di CUDA o OpenCL. – ildjarn

risposta

19

C++ AMP è una libreria (e come parte di esso è stato anche introdotto un'estensione del linguaggio chiave). Poiché C++ AMP è una specifica aperta, può essere implementata su qualsiasi altro linguaggio di basso livello. L'implementazione di Microsoft si basa su DirectCompute (e quindi su HLSL), ma è completamente nascosta quando si utilizza C++ AMP (ecco perché C++ AMP può essere una specifica aperta, non espone DirectX nella superficie dell'API). Per ulteriori informazioni su C++ AMP, si prega di seguire le risorse a destra del nostro blog (vi terremo aggiungendo che): http://blogs.msdn.com/b/nativeconcurrency/

Lei ha fatto una dichiarazione su Microsoft lavorando con NVIDIA per migliorare le prestazioni C++ AMP - che non è vero. Microsoft ha collaborato con NVIDA e AMD e altri partner per creare la specifica aperta AMP C++. Microsoft collabora anche con i fornitori di hardware per assicurarsi che i produttori di hardware dispongano di driver di scheda video stabili, necessari per far funzionare correttamente qualsiasi tecnologia di elaborazione GPU.

Hai anche espresso confusione e buttato fuori alcuni termini. OpenCL è un approccio al GPU computing (di Khronos), così come DirectCompute (di Microsoft), così come CUDA (di NVIDIA). Queste sono tutte tecnologie separate, ciascuna con il proprio percorso verso la GPU (sempre tramite un driver di qualche tipo), ciascuna con i suoi meriti, punti di forza e svantaggi. Uno non sostituisce l'altro e uno non è universalmente migliore dell'altro. Ora hai anche C++ AMP in quel mix, come una scelta in più, e le stesse affermazioni si applicano a questo. La scelta è tua in merito alla quale decidi di utilizzare.

+1

Grazie, ora è finalmente chiaro. Daro 'immediatamente un'occhiata al tuo blog! –

+0

Basta guardare il tuo "Heterogeneous Computing e C++ AMP" per parlare su Channel9. Estremamente interessante. – Contango

3

C++ AMP è un insieme di estensioni linguistiche e le API per supportare la tecnologia di programmazione parallela CUDA compreso.

Poiché Microsoft ha anche un concorrente diretto al CUDA (Direct Compute) e in genere ha preferito i propri standard grafici proprietari, dovremo vedere cosa accadrà realmente con esso.

Per punto di vista di Microsoft su di esso vedere these lectures

+4

C++ AMP è principalmente una libreria. Le estensioni della lingua sono minuscole: la restrizione della parola chiave restrittiva e lo specificatore di memoria tile_static. Le cose che si pensa come C++ AMP - parallel_for_each, array_view, ecc. Sono tutte librerie e non linguaggi. Altrimenti la tua risposta è valida. –

+1

@KateGregory - sì, non ero entrato nei dettagli ma sembrava avere alcuni hook aggiuntivi (come C++/CLR) quindi ho pensato che fosse più sicuro chiamarlo extention –

+3

Ciao Martin, grazie per il collegamento ai miei screencast. AMP C++ non ha alcuna relazione con CUDA. Penso che potresti confondere il termine di marketing CUDA con la tecnologia CUDA, ma anche in questo caso le specifiche open AM C++ non hanno alcuna relazione con CUDA e l'implementazione Microsoft C++ di AMP non ha alcuna relazione con CUDA. Anche C++ AMP non è un insieme di estensioni di lingua, è soprattutto una libreria. Come parte del C++ AMP è stata introdotta una funzionalità di linguaggio generico, che non è legata all'AMP C++, ma è utilizzata solo da AMP C++ in questo momento. Inoltre non vi è assolutamente alcuna relazione tra C++ AMP e CLR. –