Plan du cours

Introduction

  • Qu'est-ce que OpenCL ?
  • OpenCL vs CUDA vs SYCL
  • Vue d'ensemble des fonctionnalités et de l'architecture de OpenCL
  • Configuration de l'environnement de développement

Pour commencer

  • Création d'un nouveau projet OpenCL à l'aide du code Visual Studio
  • 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

L'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 périphérique
  • 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 mettre en file d'attente 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

  • Comprendre le rôle de OpenCL C dans le programme du dispositif
  • Utiliser le langage OpenCL C pour écrire des noyaux qui s'exécutent sur le périphérique et manipulent des données
  • Utiliser les types de données, les qualificateurs, les opérateurs et les expressions en OpenCL C
  • Utilisation des fonctions intégrées du langage C OpenCL, telles que les fonctions mathématiques, géométriques, relationnelles, etc.
  • Utilisation d'extensions et de bibliothèques C OpenCL, 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 de l'hôte et du périphérique
  • Utiliser les espaces mémoire OpenCL, tels que global, local, constant et privé
  • Utilisation des objets mémoire OpenCL, tels que les tampons, les images et les tuyaux
  • Utiliser les modes d'accès à la mémoire OpenCL, tels que lecture seule, écriture seule, lecture-écriture, etc.
  • Utilisation du modèle de cohérence de la mémoire OpenCL et des mécanismes de synchronisation

Modèle d'exécution OpenCL

  • Comprendre la différence entre les modèles d'exécution de l'hôte et du périphérique
  • Utilisation des éléments de travail OpenCL, des groupes de travail et des plages ND pour définir le parallélisme
  • Utilisation des fonctions d'éléments de travail OpenCL, telles que get_global_id, get_local_id, get_group_id, etc.
  • Utilisation de OpenCL fonctions de groupe de travail, telles que barrier, work_group_reduce, work_group_scan, etc.
  • Utilisation des fonctions de périphérique OpenCL, telles que get_num_groups, get_global_size, get_local_size, etc.

Débogage

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

Optimisation

  • Comprendre les facteurs qui affectent les performances des programmes OpenCL
  • Utiliser les types de données vectorielles OpenCL et les techniques de vectorisation pour améliorer le débit arithmétique
  • Utilisation de techniques de déroulement et de tuilage de boucles OpenCL pour réduire la surcharge de contrôle et augmenter la localité
  • Utilisation de la mémoire locale OpenCL et des fonctions de mémoire locale pour optimiser les accès à la mémoire et la bande passante
  • Utilisation OpenCL d'outils de profilage pour mesurer et améliorer le temps d'exécution et l'utilisation des ressources.

Résumé et prochaines étapes

Pré requis

  • Compréhension du langage C/C++ et des concepts de programmation parallèle
  • Connaissance de base de l'architecture des ordinateurs et de la hiérarchie de la mémoire
  • Expérience des outils de ligne de commande et des éditeurs de code

Public

  • Développeurs souhaitant apprendre à utiliser OpenCL pour programmer des dispositifs hétérogènes et exploiter leur parallélisme.
  • Les développeurs qui souhaitent écrire un code portable et évolutif pouvant être exécuté sur différentes plates-formes et appareils
  • Les programmeurs qui souhaitent explorer les aspects de bas niveau de la programmation hétérogène et optimiser les performances de leur code.
 28 heures

Nombre de participants



Prix par participant

Nos Clients témoignent (1)

Cours Similaires

GPU Programming with CUDA

28 heures

GPU Programming - OpenCL vs CUDA vs ROCm

28 heures

AMD GPU Programming

28 heures

ROCm for Windows

21 heures

Introduction to GPU Programming

21 heures

Catégories Similaires