11.6.2 : Calcul sur FPGA avec OpenCL



Ouvrir le monde du FPGA à l'utilisation d'un langage de programmation de haut niveau a été d'abord une décision des fabricants de FPGA. Altera a commencé en 2011 en choisissant OpenCL (Open Computing Language), un cadriciel de programmation parallèle crée par le groupe Khronos en 2008 [163]The Khronos Group: connecting software to silicon, peu de temps après l'ouverture des GPU au calcul générique avec le langage CUDA par le fabricant de cartes graphiques NVidia. Beaucoup inspiré par ce dernier, OpenCL avait comme cible d'abord les processeurs multi-cœur, mais NVidia a aussi crée l'environnement nécessaire pour pouvoir exécuter du code OpenCL sur les GPU. De cette façon, très vite OpenCL a mis en évidence son ambition de langage de programmation des systèmes parallèles sur des ressources hétérogènes.

Le langage OpenCL [164]OpenCL 1.2: reference pages est un dérivé du langage C, avec une API (Application Programming Interface) en C++ à partir de la version majeure 2). L'environnement de programmation (Software Development Kit, SDK) et celui d'exécution (Run Time Environment, RTE) pour le CPU sont téléchargeables depuis le site Intel et s'installent facilement.

Un code OpenCL est composé d'une partie qui s'exécute sur le processeur hôte (s'il s'agît du OpenCL pour CPU, juste exécution en mode natif), la partie écrite en C (ou C++) standard, appelée partie hôte, qui appelle des fonctions de l'API OpenCL pour configurer, lancer et contrôler l'exécution d'une deuxième partie du code, écrite en langage OpenCL, qui est la partie device. Cette partie device contient un ou plusieurs noyaux de code qui peuvent s'exécuter en plusieurs copies identiques sur le même device (plusieurs devices peuvent être gérés en même temps, s'ils sont correctement insérés dans le système hôte).

La programmation OpenCL, avec des exemples bien choisis, est très bien présentée dans un livre largement connu [174]OpenCL in Action, 2012, Matthew Scarpino. Les codes utilisés dans le matériel du livre sont censés être exécutés sur CPU ou GPU, mais, dans les études de faisabilité menés au Laboratoire de Physique de Clermont, ces codes ont été adaptés pour l'exécution sur FPGA (pour la plupart des exemples, les modifications restent, toutefois, minimales).