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

Nombre de participants


Prix ​​par Participant

Cours à venir

Catégories Similaires