2012-04-24 8 views
11

Ich habe gelesen, dass Microsoft eng mit Nvidia arbeitet, um AMP-Leistungen zu verbessern.Verwirrung über CUDA/openCL und C++ AMP

Aber meine Frage ist: ist AMP ein CUDA-Ersatz von Microsoft? Oder verwendet AMP CUDA-Treiber, wenn eine NVIDIA CUDA Grafikkarte verfügbar ist? Ist AMP ein OpenCL-Ersatz?

ich immer noch ziemlich verwirrt bin ..

+1

Ist es wichtig, ob der C++ - AMP-Compiler GPU-Maschinencode direkt generiert oder C-Code generiert und diesen an den CUDA- oder OpenCL-Compiler übergibt? In beiden Fällen schreiben Sie C++ - AMP anstelle von CUDA oder OpenCL. –

+1

Auch gibt es keine "CUDA Grafikkarte". CUDA ist nicht in Hardware implementiert, es wird in den nativen Befehlssatz der GPU (d. H. Fermi) konvertiert (kompiliert). –

+1

Die [C++ AMP-Spezifikation] (http://download.microsoft.com/download/4/0/E/40EA02D8-23A7-4BD2-AD3A-0BFFFB640F28/CppAMPLanguageAndProgrammingModel.pdf) erwähnt CUDA oder OpenCL nicht. – ildjarn

Antwort

19

C++ AMP eine Bibliothek ist (und als Schlüsselspracherweiterung ein Teil davon wurde auch eingeführt). Da es sich bei C++ AMP um eine offene Spezifikation handelt, kann es auf anderen Low-Level-Sprachen implementiert werden. Die Implementierung von Microsoft baut auf DirectCompute (und damit auf HLSL) auf, aber das ist komplett von Ihnen verborgen, wenn Sie C++ AMP verwenden (daher kann C++ AMP eine offene Spezifikation sein; DirectX wird in der API-Oberfläche nicht verfügbar gemacht). Weitere Informationen zu C++ AMP, benutzen Sie bitte die Ressourcen auf der rechten Seite von unserem Blog folgen (wir werden das Hinzufügen halten, dass): http://blogs.msdn.com/b/nativeconcurrency/

Sie eine Erklärung über Microsoft mit NVIDIA arbeitet C++ AMP Leistung zu verbessern - das ist nicht wahr. Microsoft hat mit NVIDA und AMD und anderen Partnern zusammengearbeitet, um die offene C++ AMP-Spezifikation zu erstellen. Microsoft arbeitet auch mit Hardwareanbietern zusammen, um sicherzustellen, dass die Hardwarehersteller über stabile Grafikkartentreiber verfügen, die für eine korrekte GPU-Computertechnologie erforderlich sind.

Sie drückten auch Verwirrung aus und warfen einige Begriffe aus. OpenCL ist ein Ansatz für das GPU-Computing (von Khronos), ebenso wie DirectCompute (von Microsoft), ebenso wie CUDA (von NVIDIA). Dies sind alles separate Technologien, jede mit einem eigenen Pfad zur GPU (immer über einen Treiber), jeder mit seinen eigenen Stärken, Stärken und Nachteilen. Der eine ersetzt nicht den anderen, und einer ist nicht allgemein besser als der andere. Sie haben jetzt auch C++ AMP in dieser Mischung, als eine weitere Wahl, und die gleichen Aussagen gelten für diese. Sie haben die Wahl, für welche Sie sich entscheiden.

+1

Danke, jetzt ist es endlich klar. Ich schaue dir gleich deinen Blog an! –

+0

Beobachten Sie einfach "Heterogene Computing und C++ AMP" auf Channel9. Sehr interessant. – Contango

3

C++ AMP ist eine Reihe von Sprach extentions und APIs parallele Programmierung Technologie einschließlich CUDA zu unterstützen.

Da Microsoft auch einen direkten Konkurrenten zu CUDA (Direct Compute) hat und generell seine eigenen proprietären Grafikstandards vorgezogen hat, werden wir sehen müssen, was tatsächlich damit passiert.

Für Ansicht des Microsoft darauf these lectures sehen

+4

C++ AMP ist meist eine Bibliothek. Die Spracherweiterungen sind winzig - das restrap-Schlüsselwort repurposing und der Speicherspezifizierer tile_static. Die Dinge, die Sie als C++ AMP - parallel_for_each, array_view usw. betrachten, sind allesamt Bibliothekssprache. Sonst steht deine Antwort. –

+1

@KateGregory - Ja, ich war nicht im Detail, aber es schien einige zusätzliche Haken (wie C++/CLR) zu haben, also dachte ich, es wäre sicherer, es als Erweiterung zu bezeichnen. –

+3

Hallo Martin, danke für die Verlinkung zu meinen Screencasts. C++ AMP hat keine Beziehung zu CUDA. Ich denke, Sie können die Marketing-Begriff CUDA mit der Technologie CUDA verwechseln, aber selbst dann hat die offene C++ AMP-Spezifikation keine Beziehung zu CUDA, und die C++ AMP Microsoft-Implementierung hat keine Beziehung zu CUDA. Auch C++ AMP ist keine Gruppe von Spracherweiterungen, es ist meistens eine Bibliothek. Im Rahmen von C++ AMP wurde ein generisches Sprachfeature eingeführt, das nicht an C++ AMP gebunden ist, sondern zu diesem Zeitpunkt nur von C++ AMP verwendet wird. Auch gibt es absolut keine Beziehung zwischen C++ AMP und der CLR. –