2012-03-23 3 views
3

Könnte jemand sagen, ob es möglich ist, nach der Kompilierung einen OpenCL-Code mit AMD- und Nvidia-Karten zu bekommen, und wie sieht die allgemeine Vorgehensweise dafür aus? Muss ich beide OpenCL-SDKs (AMD/Nvidia) installieren und mit einer "if" -Struktur für jeden Fall einen anderen Code erstellen (AMD-Gerät oder Nvidia-Gerät)? Wenn Sie nur ein bisschen mit einigen Überschriften klären könnten, würden Sie es schätzen. Danke.OpenCL-Code für die Arbeit mit AMD/Nvidia

Antwort

4

Ja, es ist möglich, das ist der Zweck von OpenCL über CUDA (die nur mit NVIDIA-Hardware funktioniert). Im Grunde machen Sie Ihren Code zum Schreiben von Kerneln in C99, der dann in einem intermediären "herstellerunabhängigen" Code kompiliert wird. Dieser letzte Code wird dann von Ihrer Karte (AMD oder Nvidia) während der Laufzeit interpretiert. Normalerweise gibt es keinen Grund, warum Sie anderen kartenspezifischen Code schreiben sollten, verwenden Sie kein anderes SDK (aber gut ... Ich bin auf Max OS 10.7, das möglicherweise von anderer Umgebung abweicht)

+0

Danke Flavien, also wenn ich eine Probe mit OpenCL und AMD SDK zum Beispiel sollte es mit Nvidia-Karte funktionieren? Oder werde ich etwas verpassen? – Maiss

+0

Die AMD BLAS- und FFT-Bibliotheken können auch auf NVIDIA-Geräten ausgeführt werden, ebenso wie die ArrayFire-OpenCL-Bibliotheken. Sehr angenehm! – arrayfire

+2

Wenn Sie auf der Suche nach Leistung sind, müssen Sie vielleicht eine anbieterspezifische Optimierung vornehmen. Für AMD können Sie Ihren openCL-Kernel über Kernel Analyzer ausführen und die resultierende Intermediate Language sowie den auf der Hardware ablaufenden ISA-Code prüfen. – kiranputtur