Hat jemand Erfahrung mit der Pflege einer einzigen Codebasis für CPU und GPU? Ich möchte eine Anwendung erstellen, die, wenn möglich, GPU für einige lang anhaltende Berechnungen verwenden würde, aber wenn eine kompatible GPU nicht auf einer Zielmaschine vorhanden ist, würde es nur normale CPU-Version verwenden. Es wäre wirklich hilfreich, wenn ich nur einen Teil des Codes mit bedingten Kompilierungsdirektiven schreiben könnte, der sowohl in eine CPU- als auch in eine GPU-Version kompiliert werden würde. Natürlich wird es einige Teile geben, die für CPU und GPU unterschiedlich sind, aber ich würde gerne den Kern des Algorithmus an einem Ort behalten. Ist das überhaupt möglich?
Antwort
Zu viele Anzeigen?OpenCL ist eine auf C basierende Sprache. Es gibt OpenCL-Plattformen, die auf GPUs laufen (von NVidia et AMD ) und CPUs (ab Intel et AMD ).
Es ist zwar möglich, denselben OpenCL-Code sowohl auf GPUs als auch auf CPUs auszuführen, er muss jedoch für das jeweilige Zielgerät optimiert werden. Für verschiedene GPUs und CPUs müsste unterschiedlicher Code geschrieben werden, um die beste Leistung zu erzielen. Eine CPU-OpenCL-Plattform kann jedoch auch für GPU-optimierten Code als Ausweichlösung mit geringer Leistung dienen.
Wenn Sie gerne bedingte Direktiven schreiben, die je nach Zielgerät (CPU oder GPU) ausgeführt werden, kann dies die Leistung von OpenCL-Code auf mehreren Geräten verbessern.