Die diversen Guides die mit dem NVIDIA SDK mitkommen sind ganz gut
Für OpenCL sind es diese, welche sich im Gegensatz zur OpenCL Standardliteratur direkt mit den GPGPU eigenschaften beschäftigen:
https://www.computerbase.de/forum/t...els-xeon-phi-mic.1092648/page-3#post-12516894
Selbst wenn sich die Guides auf Nvidia beziehen, so gilt das ganze grösstenteils analog für AMD.
Die Unterschiede zwischen OpenCL und Cuda sind relativ minimal; die Prinzipien nahezuidentisch. Afaik ist der OpenCL Treiber von NVidia auch nur grösstenteils ein Wrapper um ihren Cuda Treiber herum. Beherrscht man das eine, vor allem die Prinzipien, auf denen es aufbaut, so kann man mit minimalen Aufwand das andere lernen.
Hauptvorteil von OpenCL wäre dass es prinzipiell auf allen möglichen laufen sollte. Praktisch sind jedoch diverse Anpassungen nötig, da jeder OpenCL Treiber so seine eigene Interpretation vom OpenCL Standard hat und jedes OpenCL Gerät ausserdem andere Hardwarelimitierungen, wie zB wie viele Threads gleichzeitig ablaufen können oder wieviele Texturen ein Programm maximal haben darf, diverse optinale Funktionalitäten und Erweiterungen hat. Auch hat GPGPU sehr viele Performance Fettnäpfchen hat, so dass man den Code wohl noch je GPU bzw CPU anpassen muss.
Auch sind die OpenCL Implementierungen wie die meisten Implementierungen der Khronos APIs meist sehr bugverseucht und zusätzlich ist die openCL Schnittstelle ebenfalls wie jede andere Khronos Schnittstelle schlecht designt. Alleine die Tatsache, dass man in OpenCL 1.1. die Argumente eines Kernels nur per Index und nicht per Namen setzen kann ist soo fehleranfällig und regt mich sooo auf. . . . .
Zudem ist OpenCL weiter verbreitet als Cuda, da es offen ist. Gerade an den Unis machen deshalb die meisten Leute etwas mit OpenCL.
Cuda hat den Vorteil, dass es proprietär ist. Jede NVidia Karte gehört einer Cuda Version an und hat dadurch feste Spezifikationen und Hardwarelimitierungen was einem das Programmieren für unterschiedliche Karten erleichtert. Wegen dieser Properietät ist es ebenfalls wesentlich besser designt als OpenCL. So muss man zB den Kernel Quellcode nicht umständlich per String an den Compiler übergeben, sondern kann ihn direkt in den Quellcode seines Hauptprogramms schreiben. Beim Compilieren des Hauptprogramms zieht dann ein Präprozessor(?) für Cuda sämtliche Kernels heraus. Dies vereinfacht, wie ich finde, das Programmieren ziemlich.
Wie weit Cuda selbst bugverseucht ist kann ich leider nicht beurteilen, da ich es noch nicht selbst verwendet habe.
Ausserdem soll laut diversen Quellen unter bestimmten Voraussetzungen Cuda schneller sein als OpenCL.
Als weitere Alternativen gebe es noch:
Direct Compute, GPGPU auf Windows beschränkt dafür propertiär
Compute Shader in OGL 4.3; mehr oder weniger das selbe wie OCL mit besserer OpenGL Anbindung und ist eher für graphische Berechnungen geeignet.
Die Grundkonzepte sind allerdings auch bei diesen beiden APIs das selbe.
P.S: Wo studierst du denn Info ?
