Wie Sie sich vorstellen können, können die Hardware-Architekturen von GPUs stark variieren. Es gibt verschiedene Hersteller, und sogar verschiedene Generationen von Grafikprozessoren desselben Herstellers können sich unterscheiden. Gleichzeitig geben GPU-Hersteller normalerweise nicht alle Hardware-Details ihrer Produkte an die Öffentlichkeit weiter. Eine der bekannten Konsequenzen ist die Notwendigkeit, proprietäre Treiber unter Linux zu verwenden, wenn Sie die Vorteile Ihrer Grafikkarte voll ausschöpfen wollen.
Glücklicherweise hat ein Industriekonsortium unter der Führung von The Khronos Group eine offene, standardisierte Schnittstelle namens OpenCL entwickelt. Es ermöglicht die Verwendung Ihrer GPU als numerisches Verarbeitungsgerät. OpenCL bietet eine C99-ähnliche Programmiersprache mit einem starken Fokus auf paralleles Rechnen. Eine Anwendung, die OpenCL verwenden möchte, benötigt OpenCL-Quellcode, den sie zur Laufzeit an einen hardwarespezifischen OpenCL-Compiler übergibt. Auf diese Weise kann die Anwendung OpenCL auf verschiedenen GPU-Architekturen (auch gleichzeitig) einsetzen. Alle Hardware „Geheimnisse“ werden in diesem Compiler versteckt und sind normalerweise für den Benutzer (oder die Anwendung) nicht sichtbar. Der kompilierte OpenCL-Code wird auf Ihre GPU geladen und ist – bei bestimmten API-Aufrufen – bereit, Berechnungen für Sie durchzuführen.