GPU-Programmierung, CUDA oder OpenCL? [geschlossen]

74

Ich bin ein Neuling in der GPU-Programmierung. Ich habe einen Laptop mit NVIDIA GeForce GT 640-Karte. Ich bin mit 2 Dilemmata konfrontiert, Vorschläge sind sehr willkommen.

  1. Wenn ich mich für CUDA - Ubuntu oder Windows entscheide CUDA ist eindeutig besser für Windows geeignet, während die Installation unter Ubuntu ein schwerwiegendes Problem darstellen kann. Ich habe einige Blogposts gesehen, die behaupten, CUDA 5 unter Ubuntu 11.10 und Ubuntu 12.04 installiert zu haben . Ich konnte sie jedoch nicht zum Arbeiten bringen. Außerdem arbeiten Standard-CUDA-Lehrbücher lieber in der Windows-Domäne und sind in Bezug auf die Installation und das Arbeiten mit Unix / Ubuntu mehr oder weniger leise.

  2. CUDA oder OpenCL - Das ist wahrscheinlich schwieriger als meine erste Frage! Ich bin meistens auf GPGPU-Projekte mit CUDA / Nvidia gestoßen, aber OpenCL ist wahrscheinlich die nächstbeste Option in Open Source und die Installation in Ubuntu wird wahrscheinlich kein Problem sein, obwohl einige Vorschläge hier am nützlichsten sind. Verzichte ich auf Funktionalität, wenn ich mich für OpenCL und NICHT für CUDA entscheide?

Hilfe oder Anregungen?

Arkapravo
quelle
2
In Bezug auf Ihre erste Frage habe ich das Gefühl, dass Windows derzeit besser für CUDA als für Linux unterstützt wird. Ich habe CUDA in der Vergangenheit ausgiebig unter Linux verwendet, aber die Installation war immer etwas schwierig. In Bezug auf Ihre zweite Frage denke ich, dass Sie durch einfache Google-Suche viel Material finden könnten, zum Beispiel CUDA vs OpenCL: Welches sollte ich verwenden? und Unterschied zwischen CUDA und OpenCL 2010 .
JackOLantern
2
Möglicherweise ist CUDA 5.5 Production Release unter Linux einfach zu installieren (siehe developer.nvidia.com/content/… ). Darüber hinaus ist es möglich, CUDA-Code mit einer einzelnen GPU in CUDA 5.5 unter Linux mit Rechenleistung 3.5 oder höher zu debuggen. Nicht Ihr Fall, aber das ist eine gute Neuerung für Linux-Benutzer :) Ich bin mir der Windows-Debug-Anforderungen nicht bewusst.
pQB
1
@Arkapravo Ich habe Ubuntu verwendet. In Bezug auf CUDA vs OpenCL ist es schwierig zu beantworten. Es ist eine Frage der Meinungen. Grundsätzlich habe ich CUDA von Anfang an verwendet und nie eine starke Motivation gefunden, auf OpenCL umzusteigen. Durch die Vereinfachung bietet OpenCL möglicherweise mehr Portabilität und CUDA mehr Leistung. Aber nehmen Sie diese Aussage mit einem Körnchen Salz.
JackOLantern
1
Ich habe dafür gestimmt, dies zu schließen - es ist völlig subjektiv und nicht zum Thema gehörend. Der Stapelüberlauf ist kein Ort für die Abgabe von Ratschlägen und offenen Diskussionen, sondern für konkrete Programmierfragen und deren Antworten.
Talonmies
2
@talonmies Ich bin neu in diesem Thema, habe ausreichend recherchiert (wie aus den von mir bereitgestellten Links hervorgeht), suche aber nach echten Ratschlägen von Leuten, die dies getan haben. Ich verteidige meine Frage, sie hat sicherlich eine klare Antwort und ist auch kein Thema.
Arkapravo

Antworten:

94
  1. Wenn Sie OpenCL verwenden, können Sie es problemlos sowohl unter Windows als auch unter Linux verwenden, da Bildschirmtreiber ausreichen, um OpenCL-Programme auszuführen, und Sie zum Programmieren lediglich das SDK installieren müssen. CUDA stellt höhere Anforderungen an bestimmte GCC-Versionen usw. Die Installation unter Linux ist jedoch nicht viel schwieriger.

  2. Unter Linux hat CUDA seltsame Anforderungen wie die Verwendung von GCC 4.6 oder 4.7. Wenn Sie eine andere Version von GCC verwenden, können Sie Ihr Programm nicht mehr kompilieren. Wenn Sie OpenCL verwenden, können Sie jeden Compiler verwenden, da Sie nur eine Verknüpfung mit der allgemeinen OpenCL-Bibliothek herstellen müssen. So ist OpenCL einfacher einzurichten, zu verwenden und zu kompilieren. Sobald Sie ein OpenCL-Programm kompiliert haben, kann es auf jeder Hardware ausgeführt werden (sofern es dafür codiert ist), auch wenn es mit dem OpenCL SDK einer anderen Marke kompiliert wurde.

Sie können OpenCL-Programme schreiben, die auf Nvidia-, AMD- und Intel-Hardware, auf GPUs, CPUs und Beschleunigern funktionieren. Darüber hinaus arbeitet Altera daran, OpenCL auf FPGAs zu unterstützen! Wenn Sie CUDA verwenden, müssen Sie nur Nvidia-GPUs verwenden und Ihren Code für andere Plattformen erneut in OpenCL oder einer anderen Sprache schreiben. Eine schwerwiegende Einschränkung der Verwendung von CUDA und langfristig eine ernsthafte Zeitverschwendung.

Ich sehe, dass jemand einige alte Referenzen zwischen CUDA und OpenCL gepostet hat, aber sie sind alt! Wenn diese Dokumente nicht verfügbar waren, unterstützte nur AMD OpenCL ordnungsgemäß. Seit 2013 wird OpenCL von ARM, Altera, Intel usw. unterstützt und ist zum Industriestandard geworden.

Der einzige Nachteil ist, dass Sie, da OpenCL so flexibel ist, mehr Optionen und Möglichkeiten zum Codieren von Speicherzuordnungen, Übertragungen usw. in Ihrem Programm haben. Daher kann es sich vielleicht komplizierter anfühlen.

Evren Yurtesen
quelle
1
Solange Sie nicht vorhaben, Nvidia-eigene Dinge wie Tensor- / Raytracing-Kerne zu verwenden, ist OpenCL bei richtiger Optimierung genauso schnell wie CUDA. Darüber hinaus erhalten Sie eine Menge Hardwareflexibilität für Nvidia / AMD / Intel-GPUs, AMD / Intel / ARM-CPUs, FPGAs usw. sowie eine hervorragende Kompatibilität unter Windows, Linux und MacOS.
ProjectPhysX
9

Ich denke, es ist nicht sehr schwierig, eine Cuda-Umgebung auf Ubuntu einzurichten. Sie können es versuchen.

Ich denke, als Student der Computerarchitektur müssen Sie sowohl OpenCL als auch CUDA lernen. Und Sie sollten zuerst Cuda lernen, da CUDA mehr Hardware- und Laufzeitinformationen bereitstellt. Die Hardware-Kenntnis ist sehr wichtig, wenn Sie Ihre GPU-Codes optimieren möchten.

Xiaolong Xie
quelle