Merci d'avoir envoyé votre demande ! Un membre de notre équipe vous contactera sous peu.
Merci d'avoir envoyé votre réservation ! Un membre de notre équipe vous contactera sous peu.
Durée 28 heures
Plan du cours
Introduction
- Qu'est-ce qu'OpenCL ?
- OpenCL vs CUDA vs SYCL
- Aperçu des fonctionnalités et de l'architecture d'OpenCL
- Configuration de l'environnement de développement
Prise en main
- Création d'un nouveau projet OpenCL à l'aide de Visual Studio Code
- Exploration de la structure et des fichiers du projet
- Compilation et exécution du programme
- Affichage de la sortie à l'aide de printf et fprintf
API OpenCL
- Compréhension du rôle de l'API OpenCL dans le programme hôte
- Utilisation de l'API OpenCL pour interroger les informations et capacités de l'appareil
- Utilisation de l'API OpenCL pour créer des contextes, des files de commandes, des tampons, des noyaux et des événements
- Utilisation de l'API OpenCL pour mettre en file des commandes, telles que lire, écrire, copier, mapper, démapper, exécuter et attendre
- Utilisation de l'API OpenCL pour gérer les erreurs et les exceptions
OpenCL C
- Compréhension du rôle d'OpenCL C dans le programme de l'appareil
- Utilisation d'OpenCL C pour écrire des noyaux qui s'exécutent sur l'appareil et manipulent les données
- Utilisation des types de données, des qualificateurs, des opérateurs et des expressions d'OpenCL C
- Utilisation des fonctions intégrées d'OpenCL C, telles que mathématiques, géométriques, relationnelles, etc.
- Utilisation des extensions et bibliothèques d'OpenCL C, telles que atomique, image, cl_khr_fp16, etc.
Modèle mémoire OpenCL
- Compréhension de la différence entre les modèles mémoire hôte et appareil
- Utilisation des espaces mémoire OpenCL, tels que global, local, constant et privé
- Utilisation des objets mémoire OpenCL, tels que tampons, images et tuyaux
- Utilisation des modes d'accès mémoire OpenCL, tels que lecture seule, écriture seule, lecture-écriture, etc.
- Utilisation du modèle de cohérence mémoire OpenCL et des mécanismes de synchronisation
Modèle d'exécution OpenCL
- Compréhension de la différence entre les modèles d'exécution hôte et appareil
- Utilisation des éléments de travail (work-items), des groupes de travail (work-groups) et des plages ND (ND-ranges) d'OpenCL pour définir le parallélisme
- Utilisation des fonctions d'élément de travail OpenCL, telles que get_global_id, get_local_id, get_group_id, etc.
- Utilisation des fonctions de groupe de travail OpenCL, telles que barrier, work_group_reduce, work_group_scan, etc.
- Utilisation des fonctions d'appareil OpenCL, telles que get_num_groups, get_global_size, get_local_size, etc.
Débogage
- Compréhension des erreurs et bogues courants dans les programmes OpenCL
- Utilisation du débogueur de Visual Studio Code pour inspecter les variables, points d'arrêt, pile d'appels, etc.
- Utilisation de CodeXL pour déboguer et analyser les programmes OpenCL sur des appareils AMD
- Utilisation d'Intel VTune pour déboguer et analyser les programmes OpenCL sur des appareils Intel
- Utilisation de NVIDIA Nsight pour déboguer et analyser les programmes OpenCL sur des appareils NVIDIA
Optimisation
- Compréhension des facteurs affectant la performance des programmes OpenCL
- Utilisation des types de données vectorielles OpenCL et des techniques de vectorisation pour améliorer le débit arithmétique
- Utilisation des techniques de déroulement des boucles (loop unrolling) et de tuilage des boucles (loop tiling) OpenCL pour réduire la surcharge de contrôle et augmenter la localité
- Utilisation de la mémoire locale et des fonctions de mémoire locale OpenCL pour optimiser les accès mémoire et la bande passante
- Utilisation du profilage et des outils de profilage OpenCL pour mesurer et améliorer le temps d'exécution et l'utilisation des ressources
Pré requis
- Une compréhension du langage C/C++ et des concepts de programmation parallèle
- Des connaissances de base en architecture informatique et hiérarchie mémoire
- Une expérience avec les outils en ligne de commande et les éditeurs de code
Public cible
- Les développeurs qui souhaitent apprendre à utiliser OpenCL pour programmer des appareils hétérogènes et exploiter leur parallélisme
- Les développeurs qui souhaitent écrire du code portable et évolutif pouvant s'exécuter sur différentes plateformes et appareils
- Les programmeurs qui souhaitent explorer les aspects de bas niveau de la programmation hétérogène et optimiser la performance de leur code