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.
Plan du cours
Introduction
- Qu'est-ce que OpenCL ?
- OpenCL vs CUDA vs SYCL
- Aperçu des fonctionnalités et de l'architecture de OpenCL
- Configuration de l'environnement de développement
Démarrage
- Création d'un nouveau projet OpenCL en utilisant Visual Studio Code
- Exploration de la structure et des fichiers du projet
- Compilation et exécution du programme
- Affichage de la sortie avec printf et fprintf
API OpenCL
- Comprendre le rôle de l'API OpenCL dans le programme hôte
- Utilisation de l'API OpenCL pour interroger les informations et les capacités du matériel
- Utilisation de l'API OpenCL pour créer des contextes, des files d'attente de commandes, des tampons, des noyaux et des événements
- Utilisation de l'API OpenCL pour enregistrer des commandes telles que la lecture, l'écriture, la copie, le mappage, le démappage, l'exécution et l'attente
- Utilisation de l'API OpenCL pour gérer les erreurs et exceptions
OpenCL C
- Comprendre le rôle de OpenCL C dans le programme du matériel
- Utilisation de OpenCL C pour écrire des noyaux qui s'exécutent sur le matériel et manipulent les données
- Utilisation de types, qualificatifs, opérateurs et expressions en OpenCL C
- Utilisation des fonctions intégrées de OpenCL C, telles que mathématiques, géométriques, relationnelles, etc.
- Utilisation des extensions et bibliothèques en OpenCL C, telles que atomic, image, cl_khr_fp16, etc.
Modèle de mémoire OpenCL
- Comprendre la différence entre les modèles de mémoire hôte et matériel
- Utilisation des espaces de mémoire en OpenCL, tels que global, local, constant et privé
- Utilisation des objets de mémoire en OpenCL, tels que tampons, images et pipes
- Utilisation des modes d'accès à la mémoire en OpenCL, tels que lecture seule, écriture seule, lecture-écriture, etc.
- Utilisation du modèle de cohérence de mémoire et des mécanismes de synchronisation en OpenCL
Modèle d'exécution OpenCL
- Comprendre la différence entre les modèles d'exécution hôte et matériel
- Utilisation des éléments de travail, groupes de travail et plages ND pour définir le parallélisme
- Utilisation des fonctions d'élément de travail en OpenCL, telles que get_global_id, get_local_id, get_group_id, etc.
- Utilisation des fonctions de groupe de travail en OpenCL, telles que barrier, work_group_reduce, work_group_scan, etc.
- Utilisation des fonctions matériel en OpenCL, telles que get_num_groups, get_global_size, get_local_size, etc.
Débogage
- Comprendre les erreurs et bugs courants dans les programmes en OpenCL
- Utilisation du débogueur de Visual Studio Code pour inspecter des variables, des points d'arrêt, l'appel stack, etc.
- Utilisation de CodeXL pour déboguer et analyser les programmes en OpenCL sur les dispositifs AMD
- Utilisation d'Intel VTune pour déboguer et analyser les programmes en OpenCL sur les dispositifs Intel
- Utilisation de NVIDIA Nsight pour déboguer et analyser les programmes en OpenCL sur les dispositifs NVIDIA
Optimisation
- Comprendre les facteurs qui affectent la performance des programmes en OpenCL
- Utilisation de types et techniques vectorielles en OpenCL pour améliorer le débit arithmétique
- Utilisation de techniques d'unroulling et tiling de boucles en OpenCL pour réduire les charges de contrôle et augmenter la localité
- Utilisation de la mémoire locale et des fonctions en OpenCL pour optimiser les accès à la mémoire et le débit de bande passante
- Utilisation d'outils de profilage en OpenCL pour mesurer et améliorer le temps d'exécution et l'utilisation des ressources
Résumé et Étapes Suivantes
Pré requis
- Une compréhension du langage C/C++ et des concepts de programmation parallèle
- Connaissance de base de l'architecture informatique et de la hiérarchie mémoire
- Expérience avec les outils en ligne de commande et les éditeurs de code
Public cible
- Développeurs souhaitant apprendre à utiliser OpenCL pour programmer des dispositifs hétérogènes et exploiter leur parallélisme
- Développeurs souhaitant écrire un code portable et évolutif qui peut s'exécuter sur différents plateformes et dispositifs
- Programmateurs souhaitant explorer les aspects de bas niveau du développement hétérogène et optimiser la performance de leur code
28 Heures