OpenCL dans le Trading - page 6

 

16. Exemple OpenCL : Rotation d'image



16. Exemple OpenCL : Rotation d'image

Cette vidéo traite de la rotation d'image et de la manière dont elle peut être mise en œuvre à l'aide d'OpenCL. Chaque pixel d'une image a des coordonnées et représente une échelle de couleurs spécifique, et la rotation consiste à déplacer les pixels vers un nouvel emplacement en fonction d'une formule qui prend en compte leurs coordonnées d'origine et nouvelles et l'angle de rotation. L'orateur propose d'attribuer à chaque élément de travail le calcul de la nouvelle position d'un seul pixel et utilise la décomposition des entrées pour diviser l'ensemble de l'espace de travail global en groupes de travail plus petits, ce qui rend l'opération plus efficace. Le processus de transfert d'une image de la mémoire tampon de l'appareil vers la mémoire tampon de l'hôte est également expliqué, en mettant l'accent sur la vérification des erreurs et le calcul du temps écoulé.

  • 00:00:00 Dans cette section, la vidéo traite de la rotation d'image et des mathématiques qui la sous-tendent. Il explique que chaque pixel d'une image a des coordonnées et représente une échelle de couleurs spécifique. La rotation consiste à déplacer les pixels vers un nouvel emplacement en fonction d'une formule qui prend en compte leurs coordonnées d'origine et nouvelles et l'angle de rotation. La vidéo propose d'attribuer à chaque élément de travail le calcul de la nouvelle position d'un seul pixel et utilise la décomposition des entrées pour diviser l'ensemble de l'espace de travail global en groupes de travail plus petits, ce qui rend l'opération plus efficace.

  • 00:05:00 Dans cette section, l'orateur explique comment l'image est divisée en groupes de travail dans OpenCL pour mettre en œuvre la rotation de l'image. L'image est divisée en domaines horizontaux et verticaux, chacun avec 16 groupes de travail en supposant que la largeur et la hauteur de l'image sont des multiples de 16. L'orateur présente ensuite la fonction noyau utilisée pour effectuer la rotation de l'image, qui prend des arguments tels que l'original et les données de destination, les dimensions de l'image et les paramètres de rotation. Dans la fonction noyau, le locuteur illustre comment le nouvel emplacement de chaque pixel est calculé à l'aide des paramètres de rotation et comment le contenu du pixel est copié de l'emplacement d'origine vers le nouvel emplacement après avoir effectué la vérification des limites.

  • 00:10:00 Dans cette section, l'intervenant explique comment faire pivoter une image à l'aide d'OpenCL. Le processus consiste à vérifier les coordonnées et à s'assurer qu'elles sont des valeurs positives dans les dimensions de l'image. Les informations de pixel sont ensuite copiées de l'emplacement d'origine vers le nouvel emplacement à l'aide de calculs pour déterminer l'emplacement de la mémoire physique. L'exemple de code répertorié dans cette section montre les différences entre cette implémentation et la précédente de multiplication matricielle. La liaison C++ pour l'API OpenCL est utilisée pour configurer l'environnement pour interroger les plates-formes, acquérir le périphérique, créer une file d'attente de commandes et déclarer des tampons pour le déplacement des données. Le noyau est compilé et les paramètres sont définis pour exécuter le noyau, qui est complété par la lecture des résultats à l'hôte.

  • 00: 15: 00 Dans cette section, l'orateur discute du processus de transfert d'une image du tampon sur l'appareil vers le tampon sur l'hôte. L'orateur explique que ce processus implique la lecture de la mémoire tampon sur le périphérique à l'aide de la fonction clEnqueueReadBuffer et la spécification de la taille, du décalage et du pointeur vers la mémoire tampon sur l'hôte. En outre, l'orateur note l'importance de vérifier les erreurs au cours de ce processus à l'aide d'une instruction if et montre comment calculer le temps écoulé pour cette partie du code à l'aide de la fonction clGetEventProfilingInfo.
OpenCL Example: Image Rotation
OpenCL Example: Image Rotation
  • 2020.06.05
  • www.youtube.com
This video explains the math behind the image rotation and the code implementation.
 

17. Exemple de démonstration de rotation d'image OpenCL



17. Exemple de démonstration de rotation d'image OpenCL

Le didacticiel "OpenCL Example Image Rotation Demo" couvre le code source de la démo, qui comprend différents dossiers contenant du code C et des fichiers image que le programme traitera. La vidéo décrit la création de tampons pour les images d'entrée et de sortie, la copie de l'image d'origine dans le tampon du périphérique, la définition des arguments du noyau, l'exécution du noyau avec une taille globale définie comme l'image entière et la lecture des données de sortie vers l'hôte. La fonction noyau prend des paramètres de rotation pour calculer les nouvelles coordonnées de chaque pixel et copier les informations de pixel vers le nouvel emplacement avec vérification des limites. Le programme comprend également une fonction pour stocker l'image pivotée au format BMP et libère toutes les ressources après l'achèvement. La démo lit et calcule avec succès les pixels de l'image d'origine pour créer l'image pivotée.

  • 00:00:00 Dans cette section, le présentateur donne un aperçu du code source de la démonstration de rotation d'image qui comprend différents dossiers contenant les fichiers de code C principaux et de support, ainsi que les fichiers image que le programme traitera. Le code comprend des fichiers d'en-tête pour les plates-formes Mac OS et Altera OpenCL, des définitions pour les tampons et les paramètres du noyau, et utilise des fonctions de support pour ouvrir les fichiers image et convertir leurs formats. Le code comprend également la création du tampon de sortie et l'initialisation avec des nombres aléatoires. Enfin, le code crée une file d'attente de commandes, un objet programme et un objet noyau, et spécifie le nom de la fonction noyau.

  • 00: 05: 00 Dans cette section, l'orateur décrit le processus de création de tampons pour les images d'entrée et de sortie, la copie de l'image d'origine dans le tampon du périphérique, la définition des arguments du noyau, l'exécution du noyau avec une taille globale définie comme l'image entière, et relire les données de sortie à l'hôte. La fonction du noyau prend en compte les pointeurs de tampon de destination et de source, les dimensions de l'image et les paramètres de rotation pour calculer les nouvelles coordonnées de chaque pixel et copier les informations de pixel au nouvel emplacement avec vérification des limites. Le programme comprend également une fonction pour stocker l'image pivotée au format BMP et libère toutes les ressources après l'achèvement.

  • 00: 10: 00 Dans cette section, l'orateur présente un exemple de démonstration de rotation d'image OpenCL à l'aide de la plate-forme Avatar FPGA qui prend l'image originale d'un chat et la fait pivoter dans le sens des aiguilles d'une montre de 45 degrés, produisant une nouvelle image de la même taille qui est enregistrée avec un nouveau nom dans le dossier de rotation d'image. La démo montre qu'elle lit et calcule avec succès les pixels de l'image d'origine pour créer l'image pivotée.
OpenCL Example Image Rotation Demo
OpenCL Example Image Rotation Demo
  • 2020.06.05
  • www.youtube.com
This video walks through the code of Image Rotation and demonstrates the results.
 

18. Exemple OpenCL : Convolution d'image



18. Exemple OpenCL : Convolution d'image

La vidéo "OpenCL Example : Image Convolution" explique la convolution d'image, qui modifie chaque pixel d'une image à l'aide des informations de ses pixels voisins en appliquant un filtre comme un filtre de flou. La vidéo fournit une implémentation initiale de la fonction de convolution d'image et présente la structure de données "image" dans OpenCL, qui est conçue pour les types de données d'image, permettant un traitement efficace sur les processeurs graphiques. La vidéo montre comment copier l'image et filtrer les données sur l'appareil pour le travail de convolution d'image à l'aide d'OpenCL et l'utilisation de l'objet échantillonneur OpenCL pour accéder à l'image. La vidéo montre également comment obtenir l'élément de travail et parcourir les lignes et les colonnes du filtre pour obtenir des informations sur les pixels de l'objet image, les multiplier avec les pixels du filtre et les accumuler dans la variable somme. Enfin, la vidéo montre comment mettre à jour les valeurs de pixel à l'aide d'un objet image OpenCL.

  • 00:00:00 Dans cette section, la vidéo traite de la convolution d'image, qui est une opération qui modifie la valeur de chaque pixel d'une image en utilisant les informations de ses pixels voisins. Cela se fait en appliquant un filtre à l'image d'origine, tel qu'un filtre de flou, qui prend une moyenne pondérée des pixels voisins pour réduire les différences entre leurs valeurs. La vidéo montre comment appliquer un filtre 3x3 à une petite région d'une image et utiliser la multiplication et la sommation élément par élément pour calculer la valeur de chaque nouveau pixel dans l'image filtrée. Cependant, la vidéo note que lors de l'application de telles opérations de filtrage à une image entière, une attention particulière doit être accordée aux pixels de délimitation qui n'ont pas les huit pixels voisins. La vidéo montre également plusieurs exemples de filtres, tels que le flou et la détection des contours, qui peuvent être appliqués à une image pour obtenir différents effets.

  • 00:05:00 Dans cette section de la vidéo "OpenCL Example : Image Convolution", l'orateur fournit une implémentation initiale de la fonction de convolution d'image qui parcourt chaque pixel d'une image et lui applique un filtre. Ils introduisent également une nouvelle structure de données dans OpenCL appelée "image" qui est spécifiquement conçue pour les types de données d'image, permettant de longues séquences d'instructions qui peuvent être traitées plus efficacement sur les processeurs graphiques. Les objets image peuvent être créés avec des formats, des dimensions et d'autres paramètres spécifiés. La vidéo montre comment créer un tampon d'image 2D côté appareil.

  • La section 00: 10: 00 traite du processus de copie des données d'image et de filtre sur l'appareil pour le travail de convolution d'image à l'aide d'OpenCL. La section présente également l'objet échantillonneur OpenCL qui est utilisé pour décrire comment accéder à une image. Le mode d'adressage, le mode de filtrage et l'utilisation de coordonnées normalisées sont spécifiés pour l'objet échantillonneur. La section montre également la fonction du noyau et l'utilisation des mots-clés "lecture seule" et "constante" pour spécifier les propriétés de l'objet, ce qui permet au runtime OpenCL de placer les objets de filtre dans la région constante spécifique de la mémoire globale.

  • 00: 15: 00 Dans cette section de l'exemple de convolution d'image OpenCL, l'orateur passe par les étapes d'obtention de l'élément de travail à l'aide de get_global_id, de calcul de la demi-largeur du filtre, d'initialisation de l'index de filtre, d'itération à travers les lignes et les colonnes du filtre , et en utilisant la fonction read_image pour obtenir les informations de pixel à partir de l'objet image. Les informations de pixel sont ensuite multipliées par le pixel dans le filtre et accumulées dans la variable somme. Ce processus est répété pour chaque pixel du filtre et permet l'utilisation d'informations de pixels voisins dans la convolution de l'image.

  • 00:20:00 Dans cette section, le didacticiel vidéo montre comment mettre à jour les valeurs de pixel dans une convolution d'image OpenCL à l'aide d'un objet image. Après avoir exécuté le noyau avec succès, l'étape suivante consiste à utiliser CL dans l'image de lecture Q pour relire l'image. Cette fonction prend la commande Q comme premier argument, l'objet image de sortie et une valeur vraie pour indiquer que la lecture doit être bloquée jusqu'à la fin. Les paramètres d'origine et de région utilisés pour créer l'objet image sont fournis, ainsi que le tampon côté hôte où les données d'image sont stockées.
OpenCL Example: Image Convolution
OpenCL Example: Image Convolution
  • 2020.06.07
  • www.youtube.com
This video introduces the principles of image convolution and how to implement it in OpenCL.
 

19. Démo : Exemple OpenCL - Convolution d'image



19. Démo : Exemple OpenCL - Convolution d'image

La vidéo explique un exemple de convolution d'image OpenCL, définissant différents filtres tels que le flou, la netteté, la netteté des bords, la détection et le filtre d'embrassement. Le présentateur montre l'initialisation des valeurs de filtre et la lecture des données d'image BMP à partir du fichier, la création d'objets d'image d'entrée et de sortie et la configuration des arguments du noyau pour exécuter le noyau. La vidéo enseigne également la création de l'échantillonneur, la définition du traitement des pixels en dehors des limites, le lancement du noyau, le stockage des données de pixels dans un fichier et la création des en-têtes nécessaires pour le format BMP. Enfin, vérifier les résultats en comparant les valeurs dans deux tampons pour créer une image filtrée qui devrait correspondre au résultat parfait avec seulement une légère déviation due au calcul flottant.

  • 00:00:00 Dans cette section de la vidéo, le présentateur parcourt le code d'un exemple de convolution d'image OpenCL. Le code définit différents filtres, notamment un filtre de flou, d'accentuation, d'accentuation des contours, de détection et d'embrassement. Le présentateur montre comment tester un filtre spécifique, dans ce cas, le filtre de détection des bords. Ils expliquent également comment initialiser les valeurs de filtre et lire les données d'image BMP à partir du fichier, créer les objets d'image d'entrée et de sortie et configurer les arguments du noyau pour exécuter le noyau. La vidéo explique également comment créer l'échantillonneur et définir comment traiter les pixels qui se trouvent en dehors de la limite.

  • 00:05:00 Dans cette section, le présentateur montre un exemple de convolution d'image à l'aide d'OpenCL. La présentation montre les étapes nécessaires pour effectuer le filtre sur l'hôte, y compris le lancement du noyau, le stockage des données de pixel dans un fichier et la création des en-têtes nécessaires pour le format BMP, et la vérification des résultats en comparant les valeurs dans deux tampons. L'objectif de cet exercice est de créer une image filtrée qui devrait correspondre au résultat idéal avec seulement une légère déviation due au calcul flottant. Dans l'ensemble, la présentation met l'accent sur la compilation, l'exécution et la vérification de la sortie de la fonction noyau OpenCL.
Demo: OpenCL Example - Image Convolution
Demo: OpenCL Example - Image Convolution
  • 2020.06.07
  • www.youtube.com
This demonstrates the example of Image Convolution.
 

20. Conférence 5 Modèle de concurrence OpenCL



20. Conférence 5 Modèle de concurrence OpenCL

Cette conférence couvre le modèle d'exécution et de concurrence OpenCL, y compris les files d'attente de commandes multiples, le modèle de mise en file d'attente, les éléments de travail des noyaux OpenCL et les groupes de travail. Les points de synchronisation sont utilisés pour gérer l'exécution des commandes et les événements d'attente sont utilisés pour synchroniser les commandes dans une file d'attente de commandes côté périphérique. Le cours met l'accent sur l'importance des opérations asynchrones dans OpenCL et explique l'utilisation des événements pour spécifier les dépendances entre les commandes. Le conférencier discute également de l'utilisation des fonctions de rappel pour la réalisation d'événements et souligne l'importance du profilage pour le réglage des performances. De plus, la conférence couvre le modèle de concurrence OpenCL pour plusieurs appareils dans un système, y compris les modèles de pipeline et d'exécution parallèle. Enfin, le conférencier démontre l'implémentation d'un modèle d'exécution à l'aide d'événements du noyau, qui permet l'exécution parallèle de différents noyaux.

Le modèle de concurrence OpenCL permet à plusieurs éléments de travail de s'exécuter indépendamment pour améliorer les performances, en utilisant des groupes de travail avec une synchronisation locale pour obtenir un parallélisme d'exécution, mais trop d'éléments de travail peuvent entraîner des conflits de ressources. Les éléments de travail sont responsables de la gestion de leurs propres compteurs de programme, et il est important de comprendre les dimensions et la taille des problèmes pour concevoir des éléments de travail qui tirent parti des éléments de traitement GPU. OpenCL utilise des barrières de groupe de travail pour une synchronisation avancée entre les éléments de travail, mais aucun mécanisme ne prend en charge la synchronisation entre les éléments de travail dans différents groupes de travail de la même exécution du noyau. Pour synchroniser les éléments de travail au sein du même groupe de travail, l'API barrière est utilisée, mais pour la synchronisation à l'échelle mondiale, les événements et les événements d'attente sont utilisés. La fonction noyau utilise des pointeurs vers des objets mémoire dans les mémoires globale et locale, et la mémoire locale accessible à tous les éléments de traitement peut être utilisée pour le partage de données au sein du groupe de travail. La conférence couvre également les noyaux natifs, qui permettent d'utiliser des fonctions C comme noyaux sur un périphérique sans s'appuyer sur des compilateurs OpenCL, de transmettre des objets de mémoire OpenCL à une fonction utilisateur à l'aide de l'API de noyau natif en file d'attente et des fonctions de noyau intégrées, telles que le extension d'estimation de mouvement pour OpenCL, utilisée pour le traitement d'image afin d'estimer le mouvement entre des images voisines dans une vidéo.

  • 00:00:00 Dans cette section, nous découvrons le modèle d'exécution et de concurrence OpenCL, y compris les commandes OpenCL, le modèle de mise en file d'attente, les files d'attente de commandes multiples, les éléments de travail des noyaux OpenCL et les groupes de travail. OpenCL est un modèle parallèle de tâches contrôlé par l'hôte et les noyaux sont utilisés pour effectuer des tâches parallèles. Les files d'attente de commandes sont thread-safe, car plusieurs threads logiciels peuvent s'exécuter sur un hôte et peuvent ou non fonctionner sur la même file d'attente de commandes. Les opérations asynchrones sont importantes dans OpenCL, et le déplacement des données et d'autres opérations sont exécutées dans la file d'attente à un moment donné dans le futur. La plus petite unité hôte qui interagit avec le périphérique est la commande, et l'exécution d'une commande n'est garantie qu'à un point de synchronisation de la file d'attente de commandes. Cette synchronisation se produit entre les commandes dans une file d'attente d'octroi d'hôte et entre les commandes dans une file d'attente de commandes côté périphérique.

  • 00: 05: 00 Dans cette section, la conférence se concentre sur l'argument de lecture bloquante dans QAPI et sur la manière dont il peut être utilisé pour configurer un point de synchronisation. En définissant la lecture bloquante sur vrai, cette API peut être transformée en une opération de lecture bloquante, qui interrompra les autres opérations de mémoire jusqu'à ce que l'opération de lecture soit terminée. Le cours explique également l'utilisation des événements dans QAPI pour spécifier les dépendances entre les commandes, ce qui peut être utile dans les opérations complexes impliquant plusieurs commandes, transferts de données et calculs. De plus, les événements peuvent fournir plus d'informations sur une commande que la commande elle-même, car les commandes soumises à l'aide de Co in queue sont gérées de manière asynchrone et ne peuvent pas renvoyer de conditions d'erreur ni de données de profilage. Cependant, en générant un événement associé à une commande, les informations sur la commande peuvent être interrogées à l'aide de l'API CL get event info.

  • 00:10:00 Dans cette section, le modèle de concurrence OpenCL est abordé, en particulier l'utilisation de points de synchronisation pour gérer l'exécution des commandes. Une façon de synchroniser est l'utilisation d'événements d'attente, où l'hôte peut bloquer jusqu'à ce qu'un événement spécifique se produise, tandis que l'API de file d'attente a plusieurs événements d'attente pour la synchronisation inter-commandes. L'opération de barrière, d'autre part, est une commande spéciale utilisée pour les files d'attente en désordre, où elle devient un point de synchronisation. Les marqueurs ont un objectif similaire mais ne bloquent pas l'exécution, servant plutôt d'événement d'entrée implicite, avec des événements de sortie pour notifier l'état d'achèvement des commandes précédentes. D'autres informations sur une commande, telles que ses conditions d'erreur, peuvent être interrogées à l'aide de l'API CIL get event info.

  • 00: 15: 00 Dans cette section, le conférencier discute des API de commande et d'événement d'OpenCL, qui sont utilisées pour contrôler le flux de données entre l'hôte et l'appareil. Il explique que l'API de commande permet aux utilisateurs de soumettre des commandes à la file d'attente de commandes, qui peut effectuer diverses opérations telles que les exécutions du noyau, les lectures et écritures de tampon et les mappages de mémoire. En utilisant l'API d'événement, les utilisateurs peuvent interroger l'état d'exécution de la commande soumise et appliquer le profilage dans le contexte. Le conférencier parle également de la fonction de rappel d'événement, qui est déclenchée lorsque l'état d'exécution spécifique d'une commande dans une file d'attente se produit. La fonction de rappel peut être utilisée pour effectuer des tâches simples et fournir des données de sortie à exploiter par l'application OpenCL. L'enseignant insiste sur le fait que la fonction de rappel doit être remplie le plus rapidement possible et ne doit pas être une fonction bloquante.

  • 00: 20: 00 Dans cette section, l'orateur discute de la configuration des fonctions de rappel pour gérer l'achèvement de l'événement. Définir la fonction de rappel juste après avoir déclaré un événement d'achèvement n'est pas un emplacement valide car il n'y a pas encore de commande associée à l'événement. Un événement valide n'est créé qu'après qu'une commande lui a été associée, par exemple lorsqu'un noyau est ajouté à la file d'attente de commandes. Les fonctions de rappel doivent être thread-safe, rapides à exécuter et ne pas appeler de routines système coûteuses. Il est également important d'activer le profilage lorsqu'il s'agit de réglage des performances, car il permet de déterminer l'état et l'heure d'exécution d'une commande. L'indicateur d'activation du profilage clq est utilisé pour activer le profilage.

  • 00:25:00 Dans cette section, l'orateur discute de l'API de profilage OpenCL, qui permet aux utilisateurs d'obtenir des informations sur les événements dans la file d'attente. En activant le profilage, un signal peut fournir des informations telles que les heures de début et de fin des commandes, qui peuvent être utilisées pour calculer le temps d'exécution. L'orateur explique également les événements utilisateur, qui ne sont pas associés à une commande spécifique et peuvent être utilisés de manière arbitraire. En créant un événement utilisateur et en faisant attendre une commande de lecture, l'opération de lecture sera bloquée jusqu'à ce que l'événement utilisateur soit terminé, permettant un contrôle plus spécifique sur l'ordre des commandes.

  • 00:30:00 Dans cette section, l'orateur explique comment contrôler l'ordre d'exécution des commandes et comment obtenir de meilleures performances en utilisant une file d'attente hors service. Par défaut, les commandes d'une file d'attente de commandes sont exécutées dans l'ordre, mais pour plus de flexibilité et de meilleures performances, une file d'attente dans le désordre peut être utilisée. L'orateur montre un exemple concret de configuration d'une file d'attente hors service avec plusieurs événements et objets tampons. L'exemple comprend une opération d'écriture et une opération de lecture avec des tampons non bloquants, en écriture seule et en lecture seule. Les événements utilisateur et l'état des événements sont également abordés. Dans l'ensemble, la section fournit une compréhension complète de la création d'une file d'attente hors service et de l'optimisation de l'ordre d'exécution des commandes pour de meilleures performances.

  • 00:35:00 Dans cette section, le conférencier explique comment copier des nombres à virgule flottante du tampon d'entrée de l'hôte vers le tampon mémoire de l'appareil à l'aide de l'API OpenCL. Le code comprend la configuration de la dimension d'unité d'exécution, le lancement de deux fonctions du noyau et l'attente des événements d'achèvement. La conférence souligne également que les deux fonctions du noyau sont des commandes distinctes et montre comment lire les données de sortie côté hôte, attendre les événements et effectuer le nettoyage. Dans l'ensemble, la section illustre l'utilisation de quatre commandes OpenCL pour copier et traiter des données entre un hôte et un périphérique.

  • 00:40:00 Dans cette section, nous voyons comment les files d'attente de commandes et les événements contrôlent l'exécution des commandes OpenCL. En configurant des dépendances à l'aide d'événements, nous pouvons nous assurer que les commandes s'exécutent dans un ordre spécifique. Cependant, si nous échangeons l'ordre des commandes dans une file d'attente désordonnée, cela n'affectera pas l'exécution des commandes. Mais, si nous utilisons une file d'attente dans l'ordre et échangeons les commandes, cela peut conduire à un blocage.
    Par conséquent, il est crucial de configurer correctement les dépendances et d'utiliser le type de file d'attente approprié pour éviter les problèmes potentiels. De plus, nous découvrons plusieurs files d'attente de commandes et comment elles peuvent être utilisées pour améliorer la simultanéité dans les programmes OpenCL.

  • 00:45:00 Dans cette section, le conférencier explique le modèle de concurrence OpenCL pour plusieurs appareils dans un système. Chaque appareil a besoin de sa propre file d'attente de commandes, et il est également possible d'avoir plusieurs files d'attente de commandes pour un seul appareil, mais ce n'est pas couramment utilisé. Généralement, plusieurs appareils utilisant OpenCL utilisent deux modèles d'exécution différents - en pipeline ou en parallèle. Dans le modèle de pipeline, même si deux appareils ou plus sont présents, un appareil attend le résultat d'un autre appareil, formant un pipeline. D'autre part, dans le modèle parallèle, les périphériques fonctionnent indépendamment en parallèle avec leurs tampons, s'exécutant indépendamment. La conférence comprend également un exemple de plusieurs files d'attente de commandes dans un contexte sur la plate-forme OpenCL, deux appareils avec leurs propres files d'attente de commandes et une implémentation dans OpenCL.

  • 00:50:00 Dans cette section, nous découvrons les modèles de pipeline et d'exécution parallèle dans OpenCL. Dans le modèle de pipeline, les données sont partagées entre deux noyaux, le noyau 0 s'exécutant en premier et le noyau 1 attendant sa fin avant de passer au calcul suivant. Nous voyons la mise en œuvre de ce modèle à l'aide d'événements et d'appels d'API. En revanche, le modèle parallèle est utilisé lorsqu'il n'y a pas de dépendances entre les tâches et que les noyaux peuvent s'exécuter simultanément sur différents appareils. L'exemple donné a trois périphériques, les périphériques GPU 0 et 1, et un périphérique CPU 2, avec des files d'attente de commandes distinctes pour chacun. Le noyau 0 et le noyau 1 sont lancés séparément pour fonctionner en parallèle, et une fois terminé, le noyau CPU 2 peut démarrer.

  • 00: 55: 00 Dans cette section, l'orateur explique comment créer un modèle d'exécution dans OpenCL en créant un événement de noyau, qui permet l'exécution parallèle de différents noyaux. Les deux premiers appels API sont utilisés pour créer deux files d'attente GPU distinctes pour le colonel 0 et le colonel 1. Ensuite, le troisième appel API lance un noyau CPU, qui attend la fin des deux noyaux GPU avant l'exécution. L'approche discutée utilise des événements pour générer des dépendances entre les noyaux CPU et GPU, mais permet également aux noyaux GPU de s'exécuter en parallèle. L'orateur explique également les concepts des éléments de travail OpenCL, qui définissent une copie ou une instance de calcul, et des éléments de traitement, qui sont la plus petite unité sur un périphérique matériel.

  • 01:00:00 Dans cette section, le modèle de concurrence OpenCL est expliqué, qui repose sur l'autorisation de plusieurs éléments de travail à s'exécuter indépendamment pour augmenter les performances. Les groupes de travail sont un ensemble d'éléments de travail dans un espace d'exécution global qui sont mappés sur des unités de calcul, permettant une synchronisation locale comme moyen d'atteindre un certain degré de parallélisme dans l'exécution. Cependant, le mappage d'un trop grand nombre d'éléments de travail sur une unité de calcul peut entraîner un conflit de ressources, ce qui nécessite de produire juste assez de travail pour occuper en permanence tous les éléments de traitement et terminer les groupes de travail en un seul lot.

  • 01:05:00 Dans cette section de la vidéo, l'orateur discute du modèle de concurrence OpenCL et de la manière dont les éléments de travail peuvent être regroupés dans des threads matériels ou des contextes. Les éléments de travail sont responsables de la maintenance de leurs propres compteurs de programme lors du mappage des éléments de travail et de leur répartition à partir du framework OpenCL. L'orateur explique que les éléments de travail doivent être conçus pour remplir et tirer parti des éléments de traitement GPU. Les dimensions de la taille du problème et l'élément actuel sur lequel on travaille sont importants à comprendre. Le haut-parleur fournit un ensemble de fonctions intégrées qui peuvent être utilisées pour comprendre les dimensions du problème, la taille globale, la taille locale et, plus important encore, pour obtenir l'ID global et local sous forme d'index afin de déterminer quel est l'élément de données réel qui doit être travaillé dans l'élément de travail en cours. Un exemple de noyau simple est également fourni pour expliquer les différents aspects du modèle de concurrence OpenCL.

  • 01:10:00 Dans cette section, le conférencier explique une fonction du noyau qui calcule l'adresse à utiliser avec la méthode get global ID pour obtenir le numéro d'identification dans un espace global pour le calcul. La fonction noyau utilise ensuite l'adresse comme index d'un tableau, multiplie le résultat par deux et affecte le produit à un tampon différent. Le conférencier poursuit en expliquant comment l'ID global dans la dimension zéro est utilisé pour déterminer l'élément à calculer et comment l'ID global dans la dimension un aide à déterminer le nombre de lignes parcourues jusqu'à présent. L'idée est de s'assurer que chaque élément de travail calcule sur un élément unique et qu'il n'y a pas de répétition de calculs sur aucun élément, économisant ainsi sur les cycles GPU ou CPU.

  • 01:15:00 Dans cette section, la vidéo explique comment fonctionne la synchronisation OpenCL et pourquoi il peut être difficile de garantir une commande basée sur le matériel. OpenCL est un framework d'API multiplateforme qui ne sait pas où le programme sera exécuté, il ne peut donc pas garantir la commande basée sur le matériel. OpenCL s'exécute sur des appareils pouvant prendre en charge le multithreading, mais aucun système d'exploitation ne s'exécute séparément sur ces appareils. Cela signifie qu'il n'y a pas de noyau maître ou de système d'exploitation pour supprimer les threads d'une file d'attente d'exécution. Par conséquent, il existe un risque de blocage lors de l'utilisation de sémaphores ou de mécanismes similaires. Pour effectuer une synchronisation avancée entre les éléments de travail, OpenCL utilise une barrière de groupe de travail. Cependant, OpenCL ne dispose pas de mécanismes pour prendre en charge la synchronisation entre les éléments de travail dans différents groupes de travail de la même exécution du noyau. Pour prendre en charge le partage de données au sein du groupe de travail ou sur le même ordinateur, une mémoire locale accessible à tous les éléments de traitement peut être utilisée.

  • 01:20:00 Dans cette section, nous apprenons à utiliser l'opération de barrière pour synchroniser les éléments de travail au sein du même groupe de travail dans OpenCL. L'API de barrière est utilisée comme point de synchronisation et les éléments de travail ne sont pas autorisés à continuer au-delà de la barrière jusqu'à ce que tous les autres éléments de travail du groupe de travail aient également atteint la barrière. Cela garantit que tous les éléments de travail du groupe ont les mêmes données avant de continuer. En utilisant la ligne de synchronisation globale dans OpenCL, on peut utiliser l'événement et l'événement d'attente pour synchroniser à l'échelle mondiale, mais au sein du groupe de travail au niveau des éléments de travail, il faut tirer parti de l'opération de barrière pour effectuer la synchronisation.

  • 01:25:00 Dans cette section, nous découvrons la fonction noyau dans OpenCL et ses arguments, qui sont des pointeurs vers des objets mémoire dans les mémoires globale et locale. La mémoire locale est présente dans une unité de calcul et est partagée par les éléments de traitement dans cette unité de calcul. La fonction noyau utilise l'ID global et l'ID local pour lire les données de la mémoire globale et les affecter à l'élément correspondant dans un tampon local. Pour synchroniser tous les éléments de travail travaillant sur la même instruction d'affectation, la barrière de groupe de travail et l'infraction de mémoire locale sont utilisées comme points de synchronisation. Après la synchronisation, la fonction noyau effectue des opérations sur les données dans le tampon local et stocke le résultat à l'emplacement correspondant dans le tampon de sortie de la mémoire globale.

  • 01:30:00 Dans cette section, la conférence présente le concept de noyaux natifs dans OpenCL, qui permet d'utiliser des fonctions C comme noyaux sur un appareil sans s'appuyer sur des compilateurs OpenCL. L'API pour invoquer les noyaux natifs est présentée avec le mécanisme de transmission des arguments à la fonction C à l'aide d'un schéma appelé "unboxing". Le cours donne un exemple de passage d'arguments, qui implique de passer des nombres constants et des pointeurs vers des objets mémoire, y compris des tampons OpenCL, qui sont récupérés à partir de l'environnement OpenCL.

  • 01:35:00 Dans cette section, le conférencier explique comment transmettre des objets mémoire OpenCL à une fonction utilisateur à l'aide de l'API du noyau natif en file d'attente. L'API exige que le nombre d'objets mémoire transmis et leurs emplacements respectifs soient spécifiés dans une liste. Cela inclut les espaces réservés pour les objets mémoire et les nombres constants, qui se différencient des objets mémoire car ils nécessitent un passage interactif. Les noyaux intégrés sont spécifiques à l'appareil et exploitent des ressources matérielles spéciales, mais ils ne sont pas universels et peuvent ne pas avoir la même fonction sur différents appareils.

  • 01:40:00 Dans cette section, nous découvrons les fonctions intégrées du noyau, telles que l'extension d'estimation de mouvement interne pour OpenCL, qui est utilisée pour le traitement d'image afin d'estimer le mouvement entre les images voisines dans une vidéo. Cette extension fournit une accélération matérielle ou intègre des fonctionnalités de micrologiciel et peut être explorée plus en détail sur le site Web OpenCL.
Lecture 5 OpenCL Concurrency Model
Lecture 5 OpenCL Concurrency Model
  • 2018.10.13
  • www.youtube.com
OpenCL Runtime and Concurrency Model (please refer to Chapter 5 of textbook)
 

21. Concept de réduction de carte



21. Concept de réduction de carte

Le concept de MapReduce est expliqué dans cette vidéo, qui consiste à décomposer les grands problèmes en sous-problèmes plus petits en utilisant une phase de cartographie suivie d'une phase de réduction. Cette approche est utilisée par Google pour traiter de grandes quantités de données sur leurs ordinateurs dans des centres de données. La vidéo fournit un exemple de la façon dont les processeurs fonctionnent indépendamment, en attribuant aux processeurs des données sur lesquelles travailler, ce qui produit des paires clé-valeur à la fin. Les paires clé-valeur sont ensuite traitées par un groupe de processeurs différents pour obtenir le résultat final dans la phase de réduction. Cette approche permet un traitement efficace de grands ensembles de données en répartissant la charge de travail sur plusieurs machines.

  • 00:00:00 Dans cette section, l'orateur discute du concept de MapReduce dans le contexte de la décomposition de gros problèmes pour en obtenir de plus petits qui peuvent être résolus efficacement. Ils identifient deux stratégies principales de décomposition, à savoir diviser pour régner et disperser et rassembler, qui sont utilisées de manière interchangeable en fonction des propriétés du problème ou des limitations matérielles. Ils expliquent que l'approche MapReduce, qui a été proposée pour la première fois par Google en 2004, partitionne les gros problèmes en sous-problèmes plus petits et les traite individuellement en utilisant une phase de cartographie suivie d'une phase de réduction. Ils illustrent comment le concept est utilisé par Google pour traiter de grandes quantités de données sur leurs ordinateurs dans des centres de données, qui servent les requêtes des moteurs de recherche et les pages Web.

  • 00:05:00 Dans cette section, l'approche MapReduce est expliquée en deux étapes : cartographie et réduction. La première étape consiste à attribuer aux processeurs des données sur lesquelles travailler, ce qui se traduira par la production de paires clé-valeur à la fin. La deuxième étape, connue sous le nom de réductions, implique que les processeurs reçoivent des paires clé-valeur de la première étape et effectuent une réduction sur les valeurs correspondant à un "T" donné. Cette approche est efficace car les processeurs peuvent fonctionner indépendamment une fois que le problème d'origine est partitionné en sous-problèmes, ce qui le rend évolutif pour des problèmes de différentes tailles. La vidéo donne un exemple concret de la façon dont cette approche peut être appliquée en utilisant une entrée avec six blocs affectés aux processeurs, illustrant l'efficacité potentielle de cette approche.

  • 00: 10: 00 Dans cette section, le concept de réduction de carte est fourni et il est expliqué comment les processeurs effectuent l'addition pour combiner l'entrée d'origine en six morceaux de taille égale pour assurer l'équilibre. Chaque paire clé-valeur est produite presque en même temps pendant le processus de mappage par différents processeurs. L'étape suivante comprend le traitement de ces paires clé-valeur par un groupe de processeurs différents pour obtenir le résultat final. Enfin, l'étape de réduction combine ces paires clé-valeur, et les processeurs construisent la liste de certains liens en fonction de la valeur de mot-clé unique de un.

  • 00:15:00 Dans cette section, l'orateur explique le processus de mappage dans MapReduce, qui consiste à décomposer les tâches en sous-tâches plus petites pouvant être exécutées en parallèle. Cela se fait en créant une liste pour chaque mot-clé qui doit être analysé, chaque élément de la liste représentant une valeur associée à ce mot-clé. Cela permet un traitement efficace de grands ensembles de données en répartissant la charge de travail sur plusieurs machines.
Map Reduce Concept
Map Reduce Concept
  • 2020.06.14
  • www.youtube.com
This video introduce the basic concept of MapReduce
 

22. Exemple de réduction de carte : WordCount et Weblink



22. Exemple de réduction de carte : WordCount et Weblink

Cette vidéo YouTube montre comment MapReduce peut être appliqué pour compter les occurrences de chaque mot dans un gros fichier texte et analyser les relations d'URL de page Web. MapReduce permet à chaque processeur de cibler des mots-clés spécifiques indépendamment dans l'étape de mappage, ce qui implique de diviser le document en sections plus petites. L'étape de réduction consiste à regrouper les paires clé-valeur en fonction de la clé du mot et à additionner les valeurs pour obtenir le nombre total d'apparitions pour chaque mot. Pour l'analyse de page Web, le processus de mappage implique la création de paires clé-valeur avec l'URL comme clé et une liste de pages Web liées comme valeurs, et l'étape de réduction crée la carte finale pour montrer la relation entre les pages Web.

  • 00:00:00 Dans cette section, nous voyons un exemple concret de MapReduce en action : compter les occurrences de chaque mot dans un gros fichier texte contenant des centaines de milliers de mots anglais. C'est un cas d'utilisation idéal pour MapReduce car les différents mots-clés peuvent être comptés indépendamment, chaque processeur ciblant des mots-clés spécifiques. L'étape de mappage consiste à diviser le document en plus petits morceaux, chaque processeur recevant une section de taille similaire pour compter les occurrences des paires clé-valeur de mots intéressants. L'étape de réduction consiste à regrouper toutes les paires clé-valeur en fonction du mot clé et à additionner les valeurs pour obtenir le nombre total d'apparitions pour chaque mot. L'exemple démontre la polyvalence de MapReduce où il peut être utilisé pour compter les accès aux pages Web en implémentant l'URL en tant que mot-clé ou en analysant les relations de liens Web de différents sites Web.

  • 00:05:00 Dans cette section, l'orateur explique comment MapReduce peut être utilisé pour analyser un grand nombre d'URL de pages Web et leurs liens pour construire un graphique qui montre la relation entre eux. Le processus de mappage consiste à regrouper les tuples en morceaux plus petits et à les affecter à des processeurs de mappage pour créer une paire clé-valeur avec l'URL comme clé et une liste de pages Web comme valeurs qui seront liées à partir de la clé. Ensuite, dans l'étape de réduction, plusieurs clés peuvent être gérées par différents processeurs et la paire clé-valeur est utilisée pour créer la carte finale et montrer la relation entre les pages Web.
Map Reduce Example: WordCount and Weblink
Map Reduce Example: WordCount and Weblink
  • 2020.06.14
  • www.youtube.com
This video introduce MapReduce concept with two examples: word count and web link relationship.
 

23. Considérations sur MapReduce sur un appareil OpenCL



23. Considérations sur MapReduce sur un appareil OpenCL

La discussion dans cette vidéo YouTube est centrée sur l'utilisation de MapReduce sur les appareils OpenCL, en mettant l'accent sur la structure de la mémoire, l'organisation du travail et la réduction locale/globale. L'orateur note l'avantage de tirer parti de nombreux éléments de traitement sur les appareils OpenCL et met l'accent sur l'utilisation de différentes hiérarchies de mémoire tout en utilisant MapReduce pour traiter efficacement de grands ensembles de données. Ils détaillent également les cinq étapes impliquées dans l'utilisation de MapReduce sur les appareils OpenCL, couvrant le processus de mappage, la réduction locale, la synchronisation des éléments de travail, les barrières globales et la production du résultat final.

  • 00:00:00 Dans cette section, l'accent est mis sur la façon dont MapReduce sur les appareils OpenCL diffère des environnements CPU traditionnels. La principale différence réside dans la structure de la mémoire, qui est hiérarchique et se compose de mémoire privée, locale et globale, chacune avec des tailles et une visibilité des données différentes. La mémoire privée n'est visible que pour l'élément de travail lui-même, tandis que la mémoire locale est visible pour tous les éléments de travail de l'unité de calcul, mais pas entre les unités. La mémoire globale, en revanche, est visible pour tous les éléments de travail. Tirer parti du grand nombre d'éléments de traitement sur les appareils OpenCL présente une opportunité, mais la structure de la mémoire doit être prise en compte.

  • 00: 05: 00 Dans cette section, l'orateur discute de l'utilisation de MapReduce pour effectuer des opérations sur des appareils OpenCL afin de résoudre des problèmes tels que l'ensemble de données OAKLAND. Ils expliquent la nécessité d'utiliser différents éléments de travail et d'attribuer des calculs à chaque élément de la matrice à travailler. L'utilisation de la hiérarchie de la mémoire est importante, y compris la mémoire primaire et locale, et l'orateur note l'avantage d'utiliser la mémoire locale pour certaines des réductions au lieu de la mémoire globale. Ils détaillent comment les groupes de travail sont organisés et comment les opérations de mappage sont effectuées pour chaque bloc de données affecté à un élément de travail. L'utilisation de MapReduce de cette manière peut aider à traiter efficacement de grands ensembles de données à l'aide d'appareils OpenCL.

  • 00:10:00 Dans cette section, l'orateur aborde le concept de réduction locale et globale dans MapReduce sur un appareil OpenCL. La réduction locale est effectuée sur des paires clé-valeur produites par chaque élément de traitement, tandis que la réduction globale combine les résultats de plusieurs groupes de travail dans la mémoire globale. Le défi de l'implémentation de MapReduce sur les appareils OpenCL est que le nombre de paires clé-valeur produites par l'étape de mappage est inconnu, et il est nécessaire d'allouer correctement les espaces mémoire pour les résultats intermédiaires. De plus, les résultats d'interaction locaux doivent être stockés dans la mémoire locale et différentes hiérarchies de mémoire doivent être prises en compte.

  • 00: 15: 00 Dans cette section, l'orateur discute des cinq étapes de MapReduce sur les appareils OpenCL. La première étape implique que le groupe d'éléments de travail exécute le processus de mappage et une partie de l'étape de réduction locale. La deuxième étape comprend l'exécution d'une barrière locale pour synchroniser les éléments de travail avant d'effectuer des réductions. La troisième étape consiste à faire en sorte que l'élément de travail ID zéro local de chaque groupe prétraite les paires clé-valeur produites par d'autres éléments de travail. La quatrième étape consiste à exécuter une barrière globale pour empêcher toute exécution ultérieure jusqu'à ce que tous les travailleurs aient terminé. Enfin, la cinquième étape consiste à combiner les résultats de chaque groupe de travail pour produire le résultat final, en s'assurant que tous les éléments de travail sont terminés avant de le faire.
Considerations of MapReduce on OpenCL device
Considerations of MapReduce on OpenCL device
  • 2020.06.14
  • www.youtube.com
This video introduces specifics of implementing MapReduce on OpenCL devices.
 

24. Exemple MapReduce : recherche de chaîne avec démo



24. Exemple MapReduce : recherche de chaîne avec démo

La vidéo présente divers aspects de la programmation OpenCL et de MapReduce, en mettant l'accent sur la mise en œuvre de la recherche de chaînes. L'orateur explique comment déclarer et allouer de la mémoire à l'aide du qualificatif local et souligne que l'allocation dynamique de mémoire n'est pas autorisée dans la fonction noyau. Ils introduisent également les types de données vectorielles et montrent comment ils peuvent simplifier l'ajout d'éléments et l'accès à la mémoire. L'accent est mis sur la mise en œuvre de la recherche de chaînes à l'aide de MapReduce, où le texte d'entrée est divisé en éléments de travail et affecté à une fonction de carte pour rechercher un mot-clé. Chaque élément de travail exécute ce processus tout en comparant les morceaux de texte avec un vecteur de modèle. Les résultats locaux sont obtenus par incrément atomique pour éviter les collisions, et le résultat final est obtenu en agrégeant les résultats de chaque élément de travail. L'orateur fournit également une explication détaillée de la fonction du noyau, y compris les arguments requis et la façon dont elle est initialisée.

  • 00: 00: 00 Dans cette section, l'orateur discute de l'allocation de mémoire locale dans OpenCL et montre comment cela peut être fait dans le contexte d'une fonction de noyau de recherche de chaînes. La mémoire locale est déclarée à l'aide du qualificatif "local" et pointée vers l'aide d'un crochet intérieur. L'orateur note que l'allocation de mémoire dynamique n'est pas autorisée dans la fonction du noyau, de sorte que l'API set kernel argument est utilisée dans le programme hôte pour allouer de l'espace mémoire local. De plus, l'orateur introduit le type de données vectorielles, qui permet des opérations plus rapides et plus faciles sur des tableaux avec plusieurs éléments du même type.

  • 00: 05: 00 Dans cette section, l'orateur explique comment utiliser le type de données vectorielles dans la fonction noyau OpenCL pour l'ajout élément par élément. L'utilisation de vecteurs simplifie le processus d'addition et d'affectation, et l'opération est appliquée à chaque élément du vecteur. L'initialisation des vecteurs peut également être effectuée explicitement avec des valeurs spécifiques ou en répétant une seule valeur pour tous les éléments du vecteur. L'orateur explique également comment l'accès à la mémoire compacte bénéficie du type vectoriel, en particulier lorsqu'il travaille avec un tableau de caractères, où chaque élément est une lettre ou un octet.

  • 00: 10: 00 Dans cette section, l'orateur explique comment utiliser MapReduce pour implémenter la recherche de chaînes avec une démo. La recherche s'effectue sur un texte d'entrée à l'aide d'un modèle de caractères de 16 caractères. Ils expliquent comment la vitesse est utilisée en utilisant les huit premières lettres du vecteur de message et montrent également comment accéder aux atomes dans un ordre différent. Ils expliquent comment ils attribuent des valeurs à des parties du vecteur de caractères, donnent des exemples et expliquent comment créer la fonction noyau qui recherche le texte d'entrée, y compris les arguments requis par cette fonction et comment elle est initialisée. Enfin, ils expliquent comment les résultats globaux sont obtenus et ce que ces résultats signifient.

  • 00: 15: 00 Dans cette section, l'orateur explique le processus d'initialisation et le point de synchronisation dans la clôture de la mémoire locale pour la recherche de chaînes de l'exemple MapReduce. Les caractères du document d'origine sont divisés en groupes, chaque groupe se voyant attribuer un ensemble spécifique de lettres pour rechercher le mot-clé correspondant. L'ID global et le caractère par élément sont utilisés pour identifier le point de départ du travail assigné à chaque groupe. Dans l'ensemble, cette section donne un aperçu des aspects techniques de MapReduce et de son application dans la recherche de chaînes.

  • 00:20:00 Dans cette section, l'orateur décrit l'implémentation de MapReduce pour effectuer une recherche de chaîne à l'aide d'une démo. Les données d'entrée sont divisées en éléments de travail, et chaque élément de travail est affecté à une fonction de carte pour rechercher un mot-clé dans un bloc de texte. L'orateur montre comment les morceaux de texte sont chargés dans la mémoire et la fenêtre de caractères est déplacée pour rechercher le mot-clé. Un vecteur chargé de 16 caractères est utilisé pour la comparaison et le résultat est stocké dans un autre vecteur pour le morceau. Ce processus est répété pour chaque élément de travail, et le résultat final est obtenu en agrégeant les résultats de chaque élément de travail.

  • 00: 25: 00 Dans cette section, la vidéo explique comment la batterie est affectée à un chapitre spécifique grâce à la comparaison des vecteurs de texte correspondant aux mots-clés saisis par l'utilisateur avec le vecteur de motif. L'opération de comparaison compare chaque élément des deux vecteurs, générant 1 ou 0 pour chaque élément. S'il y a un mot-clé, le résultat de la comparaison détermine la valeur de la batterie attribuée à ce chapitre spécifique. Le bit significatif des quatre premiers éléments du vecteur de contrôle détermine s'il existe un mot-clé. Si la condition est vraie, ce qui signifie que tous les bits significatifs sont 1, alors un mot-clé est trouvé et le résultat local est incrémenté, ce qui indique que le programme a trouvé une correspondance.

  • 00:30:00 Dans cette section, l'orateur explique comment fonctionne un exemple String Search MapReduce. Le code se compose de plusieurs groupes de travail où chaque groupe recherche des mots-clés spécifiques dans le texte qui a été partitionné en blocs. Le but est de trouver si l'un des mots-clés existe dans chaque bloc. Si le résultat est vrai, le commentaire est incrémenté en utilisant l'incrément atomique pour éviter les collisions. Une fois que tous les mots-clés ont été vérifiés dans un bloc, une barrière est utilisée pour s'assurer que toute opération qui accède à la mémoire globale est terminée. La boucle déplace ensuite la fenêtre vers la droite pour vérifier la prochaine série de 16 lettres, et le processus est répété pour chaque groupe de travail. Enfin, le compteur de résultat local est ajouté au résultat global à l'aide de l'ajout atomique pour éviter les collisions.

  • 00:35:00 Dans cette section, l'orateur explique la mise en œuvre d'un exemple MapReduce pour la recherche de chaînes avec démo. La fonction du noyau est expliquée, où la mémoire locale est initialisée, les compteurs sont réinitialisés et le programme utilise Pope ID pour calculer le décalage et charger 16 octets à la fois dans le vecteur de texte. La fonction compare ensuite les résultats et effectue une réduction globale en utilisant la première de toutes les fonctions de réduction. L'exemple de code sur GitHub est affiché et l'orateur décrit les arguments, tels que les modèles, le facteur de texte, le tampon de texte, le caractère d'un élément, la longueur totale du texte d'origine et la taille de l'image. Enfin, il explique comment la taille globale dépend des ressources disponibles et de la science formelle impliquée dans le processus de recherche de la chaîne souhaitée.

  • 00:40:00 Dans cette section, le conférencier explique l'exemple d'utilisation de MapReduce pour rechercher des mots spécifiques dans un fichier texte donné. L'objectif est de compter l'occurrence de quatre certains mots dans le fichier texte. Le conférencier suggère de revoir le code source et le runtime pour une meilleure compréhension du processus.
MapReduce Example: String Search with Demo
MapReduce Example: String Search with Demo
  • 2020.06.14
  • www.youtube.com
This video explains the implementation of string search on OpenCL device using MapReduce approach. Vector instructions and operations are briefly explained. ...
 

25. Exemple OpenCL : tri par base



25. Exemple OpenCL : tri par base

Dans cette vidéo, le concept de tri par base est introduit, ce qui implique de diviser un problème de tri plus important en sous-ensembles plus petits basés sur une représentation numérique au lieu des valeurs réelles des éléments triés. L'orateur démontre à travers un exemple de tri de huit nombres, triés par leur chiffre le moins significatif en représentation hexadécimale. Les fonctions OpenCL shuffle et shuffle2 sont utilisées pour réorganiser efficacement les éléments pendant le processus de tri. La vidéo explique également comment effectuer une opération de mélange à l'aide d'OpenCL et comment utiliser les instructions de mélange dans la fonction du noyau pour le tri par base. En outre, la vidéo explore la fonction du noyau appelée radix sort eight sort eight, qui trie efficacement les tableaux dans OpenCL en divisant le vecteur d'entrée en zéros et en seaux uns en fonction des valeurs de ses chiffres binaires.

  • 00:00:00 Dans cette section, la vidéo présente le concept de tri par base, qui divise un grand problème de tri en plus petits, triés par sous-ensembles. Le processus de tri est effectué sur la base de la représentation numérique des éléments, plutôt que sur les valeurs des éléments eux-mêmes. L'orateur démontre à travers un exemple de tri de 8 nombres, où le tri est basé sur le chiffre le moins significatif en représentation hexadécimale. Le processus de tri se fait en plusieurs itérations, où les nombres sont placés dans des compartiments en fonction des chiffres les plus insignifiants et répétés pour d'autres chiffres jusqu'à ce que les nombres soient triés par ordre croissant.

  • 00: 05: 00 Dans cette section de la vidéo, l'orateur montre comment appliquer le tri par base à un ensemble de nombres en les organisant d'abord en seaux en fonction de leur chiffre le plus significatif. Ils répètent ensuite le processus en utilisant le chiffre le moins significatif et continuent jusqu'à ce qu'ils aient examiné tous les chiffres de chaque nombre. L'orateur note que chaque étape du tri par base est essentiellement un mélange, et l'utilisation des fonctions de mélange d'OpenCL permet un réarrangement efficace des éléments pendant le processus de tri. Enfin, l'orateur donne un exemple d'utilisation d'un masque pour spécifier les indices des éléments à trier et montre comment appliquer ce concept avec deux vecteurs et un tableau de masques.

  • 00:10:00 Dans cette section, l'utilisation de la fonction shuffle et de la fonction shuffle2 dans OpenCL est expliquée. La fonction shuffle crée un vecteur de sortie qui décale ou mélange les valeurs d'origine des vecteurs d'entrée en fonction du masque donné pour créer un nouveau vecteur de sortie. La fonction shuffle2 est similaire mais prend deux vecteurs d'entrée au lieu d'un. La taille et le type de données du masque doivent correspondre au facteur de retour, et le type de données doit être un type entier non signé. De plus, le facteur renvoyé aura le même type de données et le même nombre de composants que le vecteur d'entrée, et seul un certain nombre de bits dans les composants du vecteur de masque sont significatifs. La valeur de K dans shuffle2 dépend du nombre de composants dans le vecteur d'entrée.

  • 00:15:00 Dans cette section, l'orateur explique comment effectuer une opération de lecture aléatoire à l'aide d'OpenCL. Ils fournissent un exemple d'opération de mélange qui prend un vecteur d'entrée et un masque, et génère un vecteur basé sur les valeurs sélectionnées à partir du vecteur d'entrée par le masque. Ils expliquent également comment utiliser les valeurs de masque pour déterminer les valeurs à sélectionner dans le vecteur d'entrée pour créer le vecteur de sortie. L'orateur fournit un deuxième exemple qui implique deux vecteurs d'entrée contenant des lettres et explique comment utiliser le masque pour construire le vecteur de sortie en fonction des valeurs sélectionnées à partir des vecteurs d'entrée.

  • 00:20:00 Dans cette section, la vidéo traite de l'utilisation des instructions de mélange dans la fonction noyau de l'exemple OpenCL pour le tri par base. La fonction du noyau s'appelle "shuffle test" et prend deux arguments : un vecteur à virgule flottante et un vecteur à 16 éléments. La vidéo montre un exemple d'utilisation d'un vecteur entier comme masque pour créer un vecteur de sortie contenant huit nombres à virgule flottante en utilisant un vecteur à virgule flottante à quatre éléments comme entrée. La vidéo explique ensuite comment fonctionne le tri dans la fonction du noyau en examinant le chiffre binaire le moins significatif et en l'utilisant pour sélectionner les nombres impairs afin de créer un nouveau vecteur.

  • 00: 25: 00 Dans cette section de la vidéo, l'orateur explique comment construire un masque basé sur le chiffre le moins significatif des éléments d'un vecteur pour les trier à l'aide de l'algorithme de tri par base. En copiant les éléments dans des vecteurs désignés et en créant un masque basé sur le chiffre le moins significatif des éléments, la fonction de mélange peut ensuite être utilisée pour récupérer les valeurs des vecteurs d'origine et désignés et créer un nouveau vecteur. Ce processus trie les nombres de base en deux compartiments, 0 et 1, en fonction de leurs chiffres binaires.

  • 00:30:00 Dans cette section, nous découvrons la fonction du noyau appelée radix sort eight sort eight, qui fonctionne en divisant le vecteur d'entrée en zéros et en seaux uns en fonction des valeurs de ses chiffres binaires. La fonction noyau définit une structure d'union utilisée comme tampon pour trier le tableau de données à l'aide de deux compteurs, zéro et un. La valeur CMP un est utilisée pour déterminer quel chiffre binaire comparer les valeurs, et la fonction utilise deux tableaux, des masques et des données, correspondant au diagramme de la vidéo, pour stocker les éléments triés. La boucle for a huit itérations pour travailler sur les huit nombres à trier, et J va de zéro à huit pour déterminer combien d'éléments doivent aller dans les compartiments zéro et un. Radix trier huit trier huit est un moyen efficace de trier des tableaux dans OpenCL.

  • 00: 35: 00 Dans cette section, l'orateur explique comment fonctionne le tri par base, qui consiste à trier les valeurs d'un ensemble de données en fonction de leur chiffre correspondant à chaque position. Le processus commence par le chiffre le moins significatif et se déplace vers le chiffre le plus significatif. L'orateur utilise un exemple pour montrer comment les valeurs se terminant par des uns et des zéros sont séparées en différents tableaux avant d'effectuer une opération de mélange pour créer le vecteur de sortie final. Le processus est répété pour les autres chiffres et le résultat final est stocké dans un tampon global.
OpenCL Example: Radix Sort
OpenCL Example: Radix Sort
  • 2020.03.26
  • www.youtube.com
OpenCL Example: Radix Sort using Shuffle Function
Raison: