Prenez contact avec nous

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

Premiers pas

  • Création d'un nouveau projet OpenCL à l'aide de Visual Studio Code
  • Exploration de la structure du projet et des fichiers
  • 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 les capacités de l'appareil
  • Utilisation de l'API OpenCL pour créer des contextes, des files d'attente de commandes, des tampons, des kernels et des événements
  • Utilisation de l'API OpenCL pour planifier 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

C OpenCL

  • Compréhension du rôle de C OpenCL dans le programme appareil
  • Utilisation de C OpenCL pour écrire des kernels qui s'exécutent sur l'appareil et manipulent les données
  • Utilisation des types de données, qualificatifs, opérateurs et expressions de C OpenCL
  • Utilisation des fonctions intégrées de C OpenCL, telles que mathématiques, géométriques, relationnelles, etc.
  • Utilisation des extensions et bibliothèques de C OpenCL, telles que atomic, image, cl_khr_fp16, etc.

Modèle de mémoire OpenCL

  • Compréhension de la différence entre les modèles de mémoire hôte et appareil
  • Utilisation des espaces mémoire OpenCL, tels que global, local, constant et private
  • Utilisation des objets mémoire OpenCL, tels que des tampons, des images et des tubes (pipes)
  • Utilisation des modes d'accès mémoire OpenCL, tels que read-only, write-only, read-write, etc.
  • Utilisation du modèle de cohérence mémoire et des mécanismes de synchronisation OpenCL

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, des groupes de travail et des plages ND d'OpenCL pour définir le parallélisme
  • Utilisation des fonctions d'élément de travail d'OpenCL, telles que get_global_id, get_local_id, get_group_id, etc.
  • Utilisation des fonctions de groupe de travail d'OpenCL, telles que barrier, work_group_reduce, work_group_scan, etc.
  • Utilisation des fonctions d'appareil d'OpenCL, telles que get_num_groups, get_global_size, get_local_size, etc.

Débogage

  • Compréhension des erreurs et bogies courants dans les programmes OpenCL
  • Utilisation du débogueur de Visual Studio Code pour inspecter les variables, les points d'arrêt, la pile d'appels, etc.
  • Utilisation de CodeXL pour déboguer et analyser les programmes OpenCL sur les appareils AMD
  • Utilisation d'Intel VTune pour déboguer et analyser les programmes OpenCL sur les appareils Intel
  • Utilisation de NVIDIA Nsight pour déboguer et analyser les programmes OpenCL sur les appareils NVIDIA

Optimisation

  • Compréhension des facteurs qui affectent les performances des programmes OpenCL
  • Utilisation des types de données vectoriels et des techniques de vectorisation d'OpenCL pour améliorer le débit arithmétique
  • Utilisation des techniques de déroulage de boucles et de dallage de boucles d'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 d'OpenCL pour optimiser les accès mémoire et la bande passante
  • Utilisation du profilage et des outils de profilage d'OpenCL pour mesurer et améliorer le temps d'exécution et l'utilisation des ressources

Résumé et prochaines étapes

Pré requis

  • Une compréhension du langage C/C++ et des concepts de programmation parallèle
  • Des connaissances de base en architecture informatique et en hiérarchie mémoire
  • De l'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 appareils hétérogènes et exploiter leur parallélisme
  • Développeurs souhaitant écrire du code portable et évolutif pouvant s'exécuter sur différentes plateformes et appareils
  • Programmateurs souhaitant explorer les aspects bas niveau de la programmation hétérogène et optimiser les performances de leur code
 28 Heures

Nombre de participants


Prix par participant

Cours à venir

Catégories Similaires