OpenCL : pour que tout le monde parle le même langage

Le langage doit permettre de programmer sur des plates-formes hétérogènes en tirant parti de tous les processeurs d'un système, CPU ou GPU, indépendamment du type ou du fournisseur.

L'un des conflits majeurs entre la technologie et les utilisateurs a toujours résidé dans le fait que certains éléments ne fonctionnent pas avec d'autres, entraînant des problèmes d'intégration qui requièrent des solutions complexes et conséquentes. On est  loin de la technologie"plug and play" que tout le monde promettait. Les imprimantes qui ne communiquent pas avec les PC, les serveurs qui ne communiquent pas avec les serveurs fonctionnant sous des systèmes d'exploitation concurrents, les applications qui ne communiquent pas entre elles, les dispositifs incapables d'opérer une synchronisation, etc. La liste est infinie. Ce problème n'existe pas uniquement entre logiciel et matériel.

L'espace CPU/GPU a connu des bouleversements permanents qui ont retardé leur adoption, aussi bien par les développeurs que par les utilisateurs. Depuis peu, l'utilisation de processeurs graphiques (GPU) dans le but d'effectuer des tâches informatiques générales suscite un intérêt significatif. Les pipelines de traitement graphique ont subi des évolutions notables.Constituées auparavant d'unités de fonctions figées, elles utilisent aujourd'hui des cœurs de processeur hautement programmables. Les développeurs chevronnés ont depuis tenté de mettre à profit cette puissance de traitement parallèle immense et disponible en réécrivant leurs applications pour les adapter aux modèles de programmation mis à disposition par les interfaces de programmation d'applications (API), telles que Microsoft DirectX et OpenGL.

Alors que cette innovation a joui d'une popularité croissante parmi les chercheurs, elle a posé davantage de problèmes aux développeurs, qui n'étaient pas habitués aux API graphiques. Cette réticence du côté des développeurs a conduit à l'élaboration de nouvelles API conçues spécifiquement pour présenter une interface informatique conviviale et rendre les détails du modèle de programmation graphique invisibles pour le développeur. L'adoption généralisée de ces API s'est néanmoins révélée poussive. Les implémentations de ces API ont fini par devenir propriétaires, ne fonctionnant alors plus que sur les produits issus du fournisseur de l'interface.

En outre, le GPU était traité comme un accélérateur d'applications indépendant, et non comme faisant partie d'une plate-forme plus étendue, équilibrée et hétérogène. L'écriture et la maintenance du code étaient alors séparées entre CPU et GPU au sein d'un même système, d'où une adoption poussive en raison de la perplexité du marché et des développeurs, dans la mesure où ceux-ci rencontraient les pires difficultés pour déterminer la meilleure façon d'utiliser pleinement ce surcroît de puissance informatique et trouver l'API la plus adaptée.  

De nombreux précédents démontrent que l'impact commercial résultant de la confusion entre standards peut être considérable : VHS contre Betamaxou Blu-ray contre HD DVD, par exemple. Les utilisateurs, qu'ils soient professionnels ou particuliers, sont susceptibles de se montrer réticents à investir dans une technologie tant que la roadmap n'est pas clairement établie. Les fabricants ont très vite réalisé que ce manque de standards contribuait également à l'adoption poussive de la technologie et des produits de GPU, les encourageant alors à commencer à élaborer des standards et à travailler ensemble.

L'an dernier, les principaux fournisseurs de GPU et de CPU, parmi lesquels AMD, ont uni leurs forces pour entamer le développement du langageOpenCL (Open Computing Language). Le nouveau langage de programmation basé sur des standards permet aux développeurs de programmer sur des plates-formes hétérogènes, tirant avantage de tous les processeurs disponibles dans un système, indépendamment du type ou du fournisseurs. Créé par le groupe Khronos, le même consortium de standards ouverts àl'origine de l'API OpenGL, lancé en 1992 pour créer de meilleurs graphismes 2D et 3D et destiné aux outils de CAO, d'imagerie médicale et de divertissement, OpenCL est conçu pour prendre en charge le calcul parallèle à la fois au niveau des GPU et des CPU.

OpenCL permet au GPU d'aider le CPU à effectuer les calculs ou le traitement des données, aboutissant à l'émergence d'une approche calculatoire dite de plate-forme équilibrée contribuant à augmenter la vitesse et l'efficacité. En permettant au CPU et au GPU de travailler ensemble, OpenCL donne au développeur le moyen de décharger le CPU des tâches parallèles aux données par nature et de les transférer au GPU et ce, tout en maintenant toutes les autres tâches affectées au CPU. Chaque processeur du système est en mesure de travailler en fonction des charges de travail les mieux adaptées à sa conception, contribuant à produire davantage de résultats avec le même matériel en un temps réduit.

Les développeurs peuvent porter leurs applications pour utiliser OpenCL avec cette version bêta et facilement exploiter les GPU dès qu'une plate-forme OpenCL intégrale est disponible. Les avantages pour les entreprises résident essentiellement dans une réactivité et une vitesse accrues pour les serveurs et ordinateurs hautes performances. Par exemple, un grand nombre d'entreprises de services financiers, de banques et d'administrations utilisant des fonctions faisant intervenir un grand volume de données rencontrent souvent des difficultés pour trouver les données nécessaires, puis analyser et lier ces données correctement pour obtenir les informations souhaitées. Toutes ces opérations pouvaient par le passé prendre beaucoup de temps, dans la mesure où le CPU était la seule unité de traitement disponible utilisée par le système.

Cependant, en venant prêter main forte au CPU, les GPU et leur puissance de traitement ont permis de réduire significativement la durée globale de calcul. En mettant à profit la puissance de toutes les unités de traitement disponibles sur un système, OpenCL aide les entreprises de services financiers à mieux exploiter le matériel dans lequel elles ont investi. Le secteur des services financiers n'est pas le seul à pouvoir bénéficier d'OpenCL. Tous les secteurs nécessitant un grand volume de données, les laboratoires de recherche, les universités, le secteur de la CAO et celui du cinéma et de la télévision, notamment, peuvent y prétendre. 

Un des avantages majeurs d'OpenCL est qu'il permet à une application de déterminer dynamiquement quels processeurs sont disponibles sur le système, y compris les CPU multicoeurs et les GPU compatibles, laissant aux développeurs d'applications le loisir d'échelonner dynamiquement leurs performances en fonction du matériel dont disposent leurs clients. Par exemple, si un client acquiert une application accélérée par OpenCL capable d'exploiter dynamiquement les CPU et GPU, il sera en mesure d'adapter ses investissements en matériel en fonction de ses besoins informatiques actuels. Une entreprise telle qu'une chaîne de télévision, par exemple, n'a alors qu'à acquérir des GPU ou CPU supplémentaires ou plus puissants, bénéficiant ainsi d'une puissance de traitement potentiellement accrue (s'ils disposent d'une application compatible OpenCL permettant de passer automatiquement à un nombre supérieur de GPU et CPU).

L'argument principal en faveur d'OpenCL réside sans doute dans le fait qu'il s'agit d'un standard ouvert, créé par un consortium d'entreprises, et qu'ainsi, tous les fournisseurs impliqués dans ce projet ont un intérêt particulier à le voir couronné de succès. C'est une nouvelle propre à réjouir non seulement les fournisseurs qui se sont finalement mis d'accord sur un langage multiplate-forme, mais également pour les utilisateurs qui pourront bénéficier d'une puissance de calcul accrue et d'une plus grande efficacité. OpenCL a été développé dans le but premier de résoudre les problèmes réels auxquels sont confrontés les utilisateurs finaux et les programmeurs. Un langage ouvert, multiplate-forme et hétérogène tel qu'OpenCL,contribuera sans doute à réaliser cet idéal d'une informatique rapide et efficace que recherche l'utilisateur final.