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 (2)

Cours à venir

Catégories Similaires