OpenCL dans le Trading - page 8

 

36. Exécuter les instructions sur le chemin de données du processeur



36. Exécuter les instructions sur le chemin de données du processeur

La vidéo explique comment les calculs sont exécutés sur un chemin de données CPU en utilisant un exemple d'exécution d'opérations d'accumulation. Le chemin de données comprend des unités de chargement et de stockage pour charger et stocker des données dans la mémoire à l'aide d'adresses, et des unités fonctionnelles telles que des ALU pour effectuer des opérations. La vidéo illustre le processus étape par étape, y compris le chargement de données depuis la mémoire, l'exécution d'opérations et le stockage des résultats dans la mémoire. Le conférencier explique également comment le FPGA peut être utilisé pour mettre en œuvre la même fonction, en tirant le meilleur parti des ressources disponibles dans le matériel.

  • 00:00:00 Dans cette section, la vidéo explique comment les calculs sont mappés sur un PGA en utilisant un exemple d'opérations d'accumulation. Tout d'abord, le code de haut niveau est converti en langage d'assemblage à l'aide des instructions du processeur, et les valeurs intermédiaires sont stockées dans des registres. Le processeur est un processeur pipeline avec des unités fonctionnelles dans le chemin de données, y compris des unités de chargement et de stockage pour charger et stocker des données dans la mémoire à l'aide d'adresses. Le chemin de données est conçu pour être suffisamment général pour exécuter toutes sortes d'instructions dans une largeur de données et un nombre d'opérations fixes, et une valeur constante peut être chargée dans un registre via l'ALU. La vidéo fournit également un exemple de la façon dont six instructions sont exécutées dans le CPU, illustrant le processus étape par étape.

  • 00: 05: 00 Dans cette section, l'orateur passe en revue plusieurs instructions et explique comment elles sont exécutées dans un chemin de données CPU, y compris le chargement de données de la mémoire dans des fichiers de registre, en utilisant différentes unités fonctionnelles dans le chemin de données pour effectuer des opérations telles que la multiplication et l'addition , et stocker les résultats dans la mémoire. L'orateur poursuit ensuite en expliquant comment le FPGA peut être utilisé pour implémenter la même fonction de noyau en déroulant le matériel CPU et en utilisant les ressources exactes requises pour la fonction, en tirant le meilleur parti des ressources disponibles dans le matériel FPGA.
Execute Instructions on CPU Datapath
Execute Instructions on CPU Datapath
  • 2020.07.04
  • www.youtube.com
This video reviews how instructions are executed on a traditional CPU data path, which will be contrasted with the mapping to a customized FPGA design. Ackno...
 

37. Chemin de données personnalisé sur FPGA


37. Chemin de données personnalisé sur FPGA

La vidéo explique comment utiliser un FPGA pour implémenter la fonction du noyau afin d'améliorer les performances en déroulant le matériel CPU et en personnalisant le chemin de données sur le FPGA. En supprimant les unités inutilisées, en chargeant des constantes et des connexions et en replanifiant certaines opérations, les opérations de chargement peuvent être effectuées simultanément pour augmenter les performances. La conception de chemins de données personnalisés peut améliorer le débit, réduire la latence et la consommation d'énergie en sélectionnant les opérations et les données nécessaires pour une fonction particulière. La vidéo montre un exemple d'addition à la demande sur deux vecteurs, avec le résultat stocké en mémoire à l'aide de registres entre les étapes pour permettre un pipeline efficace et le lancement de huit éléments de travail pour des ajouts consécutifs.

  • 00:00:00 Dans cette section, le concept d'utilisation de FPGA pour implémenter la fonction noyau avec des performances et une utilisation des ressources améliorées est expliqué. L'idée est de dérouler le matériel CPU et d'utiliser les ressources FPGA pour créer la conception qui implémente la fonction requise tout en utilisant les ressources qui ne sont pas utilisées à chaque étape de l'exécution. En supprimant certaines unités inutilisées, en chargeant des constantes et des fils et en replanifiant certaines opérations, les opérations de chargement peuvent être effectuées simultanément, ce qui augmente les performances. La personnalisation du chemin de données sur le FPGA peut obtenir le même résultat en utilisant des ressources dédiées spécialisées.

  • 00: 05: 00 Dans cette section, l'orateur discute de la conception d'un chemin de données personnalisé sur FPGA en sélectionnant les opérations et les données nécessaires pour une fonction, une taille de mémoire et une configuration particulières de manière à améliorer le débit, réduire la latence et la puissance consommation, à l'aide d'une fonction noyau qui effectue une addition à la demande sur deux vecteurs, le résultat étant stocké en mémoire. En exploitant les registres entre les étapes, le chemin de données peut utiliser un pipeline efficace et lancer huit éléments de travail pour des ajouts consécutifs, permettant à chaque cycle de traiter différents threads pour éviter les unités inactives.
Customized Datapath on FPGA
Customized Datapath on FPGA
  • 2020.07.04
  • www.youtube.com
This video explains how to map OpenCL program onto a customized design in FPGA.Acknowledgement: the slides are from Intel's "OpenCL for FPGA" tutorial at ISC...
 

38. OpenCL pour FPGA et noyau parallèle de données



38. OpenCL pour FPGA et noyau parallèle de données

La vidéo explique comment OpenCL permet aux ingénieurs FPGA d'utiliser les ressources d'ingénierie logicielle pour augmenter le nombre de développeurs d'applications FPGA en tirant parti des ressources de calcul parallèle sur les FPGA. Le modèle de programmation d'OpenCL permet la spécification du parallélisme en utilisant des fonctions parallèles de données appelées noyaux, et chaque noyau s'appuie sur des identifiants spécifiés par "get global ID" pour effectuer des calculs parallèles sur des segments de données indépendants. Le concept de threads et de groupes de travail est introduit, où les threads accèdent à différentes parties de l'ensemble de données, partitionnées en groupes de travail, seuls les threads du même groupe de travail pouvant partager la mémoire locale. Avec ce modèle de programmation, OpenCL permet un traitement parallèle efficace des données.

  • 00:00:00 Dans cette section, le conférencier présente OpenCL et son importance dans la conception d'applications basées sur FPGA. Bien qu'il y ait moins de programmeurs pour FPGA que pour les processeurs standard, OpenCL en tant que langage de programmation de haut niveau augmente le nombre de développeurs d'applications FPGA en permettant aux ingénieurs FPGA d'utiliser des ressources d'ingénierie logicielle pour tirer parti des ressources de calcul parallèle sur les FPGA. OpenCL est une norme industrielle pour l'informatique hétérogène et permet aux programmeurs d'utiliser des API C ou C++ familières pour écrire des programmes permettant d'exécuter des charges de travail complexes avec des accélérateurs matériels tels que des processeurs multicœurs, des GPU et des FPGA. La grande idée derrière OpenCL est son modèle d'exécution qui permet de spécifier explicitement le parallélisme.

  • 00:05:00 Dans cette section, le modèle de programmation d'OpenCL pour FPGA et le noyau parallèle de données est expliqué. La vidéo décrit la structure d'un framework OpenCL avec un hôte et un accélérateur ou un périphérique s'exécutant sur des domaines matériels distincts. L'hôte prépare les périphériques et les noyaux et crée les commandes nécessaires à soumettre à ces périphériques. Le code de l'accélérateur est écrit en OpenCLC et l'hôte communique avec lui via un ensemble d'appels d'API OpenCL, permettant une abstraction de la communication entre un processeur hôte et les noyaux exécutés sur l'appareil. Les noyaux OpenCL sont des fonctions parallèles de données utilisées pour définir plusieurs threads d'exécution parallèles, chacun s'appuyant sur des identifiants spécifiés par "get global ID". Ces identifiants spécifient les segments ou les partitions de données sur lesquelles un noyau est censé travailler, permettant d'effectuer des calculs parallèles sur des paires de données indépendantes.

  • 00:10:00 Dans cette section, le concept de threads et de groupes de travail est introduit, où les threads peuvent accéder à différentes parties de l'ensemble de données et sont partitionnés en groupes de travail. Seuls les threads d'un même groupe de travail peuvent partager la mémoire locale. Chaque thread a un ID local et global, et l'ID global peut être calculé à l'aide de l'ID de groupe et de la taille locale. Ce système permet un traitement parallèle efficace des données.
OpenCL for FPGA and Data Parallel Kernel
OpenCL for FPGA and Data Parallel Kernel
  • 2020.04.19
  • www.youtube.com
A recap of OpenCL for FPGA, how kernels identify data partition
 

39. Programmation côté hôte OpenCL : contexte, files d'attente, objets mémoire, etc.



39. Programmation côté hôte OpenCL : contexte, files d'attente, objets mémoire, etc.

Ce didacticiel vidéo explore divers concepts de programmation côté hôte dans OpenCL, en mettant l'accent sur le contexte, les files d'attente et les objets mémoire. Il couvre les deux nouvelles API d'OpenCL, clCreateKernelsInProgram et clSetKernelArg, qui sont utilisées pour créer des objets noyau et transmettre des arguments aux fonctions noyau. Le didacticiel traite également de l'utilisation de l'API clCreateImage pour créer des objets image et de la manière dont les pixels de l'image sont stockés en mémoire à l'aide de l'ordre et du type de canal. Il explique comment OpenCL gère les images 2D et 3D, comment les développeurs peuvent collecter des informations sur les objets mémoire à l'aide d'API telles que clGetMemoryObjectInfo et comment effectuer des opérations sur les objets mémoire telles que la lecture et l'écriture de la mémoire tampon, le mappage des objets mémoire et la copie de données entre les objets mémoire.

  • 00:00:00 Dans cette section, les concepts de programmation côté hôte d'OpenCL sont revisités. La section se concentre sur le contexte, les files d'attente et les objets mémoire. Plusieurs contextes peuvent être créés sur une plate-forme physique, même si celle-ci est composée d'appareils de différents fournisseurs. Les objets mémoire dans la mémoire globale peuvent être partagés par plusieurs files d'attente, mais une synchronisation appropriée doit être effectuée par l'application côté hôte. Il est possible d'avoir plusieurs contextes et plusieurs files d'attente de commandes dans un même contexte. Les différentes plateformes OpenCL fournies par les éditeurs ne sont pas forcément compatibles, et ne peuvent donc pas être placées dans le même contexte.

  • 00:05:00 Dans cette section, la vidéo traite de deux nouvelles API dans OpenCL. La première API permet la création de noyaux pour chaque fonction d'un programme OpenCL à l'aide de la fonction clCreateKernelsInProgram. Cela crée un tableau d'objets du noyau qui peuvent être utilisés pour vérifier les noms des fonctions du noyau et d'autres informations connexes à l'aide de la fonction clGetKernelInfo. La deuxième API, clSetKernelArg, est utilisée pour instancier les arguments du noyau et prend l'objet noyau et l'index de l'argument comme arguments. La vidéo explique ensuite comment utiliser ces API et comment libérer les objets du noyau après utilisation.

  • 00:10:00 Dans cette section, nous apprenons comment l'API peut transmettre des valeurs d'argument aux fonctions du noyau. Nous pouvons passer un type de données primitif comme pointeur vers la fonction du noyau, ou nous pouvons passer un pointeur vers un objet mémoire ou un exemple d'objet contenant des données complexes. Les objets image sont un type spécial d'objet mémoire utilisé pour contenir des données de pixels. Nous pouvons créer des objets image en utilisant les mêmes drapeaux de configuration que les objets tampon et avec des formats définis à partir d'une liste de formats d'image. L'API clCreateImage est utilisée pour créer des objets image et ses paramètres sont similaires à ceux utilisés pour créer des objets tampon. Le troisième argument identifie les propriétés de format des données d'image à allouer, tandis que le quatrième argument décrit le type et les dimensions de l'image.

  • 00:15:00 Dans cette section, l'utilisation de l'API clCreateImage() est introduite pour identifier comment les pixels de l'image sont stockés en mémoire. Le format d'objet image est conçu pour stocker une image en mémoire et se compose de deux facteurs : l'ordre des canaux et le type de canal. L'ordre des canaux identifie la manière dont les informations de canal sont stockées pour chaque pixel. Il s'agit d'un type énuméré qui contient les couleurs de base et les informations alpha. En revanche, le type de canal spécifie comment les canaux d'image sont codés en binaire et utilise différentes valeurs pour déterminer la représentation des informations de couleur. Les niveaux de bits sont essentiels pour spécifier le nombre de bits à utiliser pour représenter la valeur de couleur dans le canal. De plus, la disposition de la mémoire des formats d'image est démontrée, de sorte que pour chaque pixel, la séquence RGBA est stockée en mémoire, en utilisant un octet pour coder les informations de couleur pour chaque canal de couleur.

  • 00:20:00 Dans cette section, la vidéo explique comment OpenCL gère les images 2D et 3D, qui peuvent consister en plusieurs tranches empilées dans une autre dimension. Le descripteur d'image CL est utilisé pour décrire la disposition des objets d'image et comprend des paramètres tels que la largeur, la hauteur et la profondeur de l'image en pixels, ainsi que le pas de la ligne de balayage en octets. De plus, l'API clCreateImage() est utilisée pour identifier le nombre d'octets nécessaires pour décrire l'image, ce qui peut nécessiter des ajustements pour le remplissage et l'alignement dans les lignes et les tranches.

  • 00:25:00 Dans cette section, l'orateur explique comment collecter des informations sur les objets image et mémoire dans OpenCL à l'aide d'API telles que clGetImageInfo et clGetMemoryObjectInfo. Ces API permettent aux développeurs d'obtenir des informations sur des éléments tels que le format d'image, la taille des pixels, la largeur des pixels, la hauteur des pixels, la profondeur et d'autres propriétés des objets mémoire. De plus, ils peuvent utiliser EnqueueReadBuffer/EnqueueWriteBuffer pour lire ou écrire des données dans des objets tampon, et EnqueueReadImage/EnqueueWriteImage pour accéder aux données d'objet image. L'utilisation de l'origine, de la région, du pas de ligne et du pas de tranche est également spécifique aux objets image, qui sont organisés en termes de lignes, de tranches et d'images. Les développeurs peuvent utiliser ces API pour spécifier l'emplacement exact d'une région à laquelle ils souhaitent accéder ou effectuer une opération de copie, et pour générer des événements à l'aide d'arguments d'événement CL.

  • 00:30:00 Dans cette section, la vidéo explique deux opérations d'objet mémoire dans OpenCL : lecture et écriture de mémoire tampon et mappage d'objets mémoire. Avec le tampon de lecture et d'écriture rec, l'utilisateur spécifie l'origine et les informations de taille, permettant aux données d'être récupérées ou écrites à des points spécifiques. Le mappage d'objets mémoire permet le mappage d'un objet mémoire sur un périphérique vers une région mémoire sur l'hôte. Une fois mappés, les objets mémoire peuvent être lus et modifiés côté hôte à l'aide de pointeurs obtenus via des API de mappage mémoire. La vidéo passe également en revue une liste d'opérations d'objets mémoire disponibles dans OpenCL pour copier des données entre objets mémoire, simplifier la programmation côté hôte et améliorer les performances des opérations de lecture et d'écriture.

  • 00:35:00 Dans cette section, l'orateur discute des divers objets de mémoire dans OpenCL et comment ils peuvent être utilisés pour copier des données d'un emplacement à un autre. Les fonctions de copie incluent le tampon de copie, la copie d'image, le tampon de copie rectangulaire, etc. L'orateur présente un système hôte-périphérique et montre comment copier des données d'un tampon à un autre à l'aide de la fonction de tampon de copie CL dans la file d'attente. Ils expliquent comment mapper le tampon sur un espace mémoire à l'aide de cl enqueu map buffer, puis utiliser la copie de mémoire pour copier la région mappée sur elle-même.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
OpenCL Host Side Programming: Context, queues, memory objects, etc.
  • 2020.03.27
  • www.youtube.com
OpenCL Host Side Programming: Context, queues, memory objects, etc.
 

40. Flux de conception HDL pour FPGA



40. Flux de conception HDL pour FPGA

Cette vidéo explique le processus de développement de Field Programmable Gate Arrays (FPGA) à l'aide du logiciel de conception Quartus.

La méthodologie de conception et les outils logiciels pour le développement de FPGA sont expliqués. Le flux de conception de logique programmable typique commence par une spécification de conception, passe au codage RTL, puis à la simulation fonctionnelle RTL, qui est ensuite suivie d'une synthèse pour traduire la conception en primitives spécifiques à l'appareil. Les ingénieurs mappent ensuite ces primitives à des emplacements spécifiques à l'intérieur d'un FPGA particulier et vérifient les spécifications de performances grâce à une analyse temporelle. Enfin, la conception est chargée dans une carte FPGA et des outils de débogage peuvent être utilisés pour la tester sur le matériel. Pour les FPGA Intel, le logiciel de conception Quartus est utilisé pour effectuer le flux de conception, en commençant par une description du système et en passant à la synthèse logique, au placement et au routage, à l'analyse de la synchronisation et de la puissance, et à la programmation de la conception dans les FPGA réels.

HDL Design Flow for FPGA
HDL Design Flow for FPGA
  • 2020.04.18
  • www.youtube.com
(Intel) FPGA Design Flow using HDL
 

41. Types de données OpenCL et mémoire de l'appareil



41. Types de données OpenCL et mémoire de l'appareil

La vidéo traite des types de données OpenCL et de la mémoire de l'appareil. Il couvre les types booléens, entiers et à virgule flottante et explique les types de données spécifiques utilisés pour opérer sur des adresses mémoire telles que int-ptr, uint-ptr et ptrdiff-t. Il explique également les types de données vectorielles, qui sont des tableaux contenant plusieurs éléments du même type qui permettent d'appliquer des opérateurs à chaque élément en même temps, et comment les utiliser. La vidéo fournit divers exemples d'initialisation et d'accès aux éléments d'un vecteur, y compris l'utilisation de lettres et d'indices numériques, haut-bas et pair-impair. Il explique également l'alignement de la mémoire et comment utiliser les arguments de noyau définis et les arguments de noyau privés.

  • 00:00:00 Dans cette section, la vidéo donne un aperçu des types de données pouvant être utilisés dans la programmation du noyau OpenCL, notamment les types booléens, entiers et à virgule flottante. Des types de données spécifiques tels que int-ptr, uint-ptr et ptrdiff-t sont utilisés pour opérer sur les adresses mémoire. La vidéo note que le type double n'est pris en charge que si l'appareil ciblé prend en charge l'extension CL Cronus 14 points-64 CLCronus FP 64. Les développeurs peuvent vérifier cette extension avant d'utiliser le type double dans leurs programmes de noyau OpenCL. La vidéo explique également comment activer l'extension de type double et l'utiliser dans un programme du noyau.

  • 00:05:00 Dans cette section de la vidéo, les types de données OpenCL et la mémoire de l'appareil sont abordés. La norme OpenCL n'impose pas l'ordre endian pour les types de données. Little-endian et big-endian sont les deux types endian facultatifs qui dépendent de la manière dont une architecture informatique définit la façon dont les variables multipliées seront stockées en mémoire. Les commandes endian d'un périphérique peuvent être trouvées à l'aide du type de données vectorielles CR get device info. De plus, les types de données vectorielles ont été introduits sous forme de tableaux contenant plusieurs éléments du même type, ont une longueur fixe et permettent aux opérateurs de s'appliquer à chaque élément en même temps. Les avantages de l'utilisation de types de données vectorielles sont qu'il est plus rapide et plus simple que d'utiliser des tableaux. La vidéo explique comment utiliser les types de données vectorielles pour effectuer une addition élément par élément sur plusieurs tableaux.

  • 00:10:00 Dans cette section, nous découvrons différents types de vecteurs pouvant être utilisés dans OpenCL, qui sont très similaires aux types scalaires. Cependant, les vecteurs nécessitent un nombre à la fin pour indiquer la taille du vecteur et le type d'éléments qu'il contient. OpenCL a également deux types de données spéciaux, le type de données double et demi, qui peuvent ou non être pris en charge par l'appareil. Pour connaître la taille de vecteur préférée pour différents types, OpenCL fournit une API qui peut être utilisée pour interroger la largeur de vecteur préférée d'un périphérique. Sur cette base, nous pouvons définir des options pour construire notre programme, comme définir un vecteur à virgule flottante pour une taille préférée de 128 ou définir un 8 à virgule flottante si la taille de vecteur préférée est 256. Les vecteurs peuvent être initialisés en attribuant des valeurs initiales dans parenthèses. Nous pouvons même initialiser un vecteur en utilisant des vecteurs plus petits, par exemple, si nous avons deux vecteurs de taille deux, A et B, tous deux initialisés avec des valeurs scalaires.

  • 00:15:00 Dans cette section, l'intervenant explique comment initialiser et accéder aux éléments ou composants d'un vecteur OpenCL. Les utilisateurs peuvent initialiser un vecteur en utilisant des vecteurs plus petits, une combinaison de scalaires et de facteurs plus petits, ou en affectant directement les valeurs dans des éléments vectoriels. Des exemples sont fournis montrant comment utiliser l'indexation des nombres, l'indexation des lettres et le pair-impair haut-bas pour accéder aux éléments du vecteur. Différents exemples montrent comment récupérer des sous-ensembles d'éléments d'un vecteur et affecter ces éléments à d'autres variables.

  • 00: 20: 00 Dans cette section, l'orateur aborde diverses méthodes d'indexation et de modification des éléments vectoriels, notamment l'utilisation d'indices numériques, de lettres (telles que X, Y, Z et W) pour représenter les différentes dimensions d'un vecteur et de combinaisons. de lettres et d'indices numériques. Ils expliquent également comment utiliser haut-bas et pair-impair pour sélectionner un sous-ensemble de composants vectoriels en fonction de leur position dans le vecteur. Ces méthodes d'indexation et de modification peuvent être utiles pour travailler avec des vecteurs de différentes longueurs et dimensions.

  • 00: 25: 00 Dans cette section, nous apprenons différentes méthodes pour accéder et modifier les éléments d'un vecteur, telles que l'indexation paire haut-bas, qui nous permet d'obtenir la moitié supérieure ou inférieure des éléments dans un vecteur, ou même -éléments indexés. Nous explorons également comment les vecteurs sont stockés dans un petit périphérique endian, où l'octet le moins significatif d'un entier est stocké à une adresse inférieure à l'octet le plus significatif. Cela signifie que dans un vecteur d'entiers non signés, les quatre octets de chaque valeur entière de 32 bits seront stockés dans l'ordre de l'octet le moins significatif à l'octet le plus significatif, chaque élément complet du vecteur occupant 16 octets.

  • 00: 30: 00 Dans cette section, l'orateur explique comment les types de données OpenCL et la mémoire de l'appareil sont stockés dans les appareils little-endian par rapport aux appareils big-endian. Ils montrent comment un vecteur à quatre éléments de type entier non signé est stocké en mémoire sur les deux types d'appareils, notant que l'ordre des octets est différent en raison de la façon dont les appareils petit-boutistes et gros-boutistes stockent le moins significatif et le plus significatif. octets. L'orateur démontre également une fonction du noyau appelée "octets vectoriels" qui récupère des octets individuels de cette mémoire à l'aide de pointeurs.

  • 00:35:00 Dans cette section, le concept d'alignement de la mémoire dans les types de données OpenCL est abordé. Il est expliqué que la mémoire s'aligne généralement sur des structures 32 bits telles que des nombres entiers et des virgules flottantes qui sont toujours stockées à des adresses mémoire qui sont des multiples de quatre. Il est également à noter que les structures 64 bits telles que long et double sont stockées à des adresses qui sont des multiples de huit, et la plus petite puissance de deux supérieure ou égale à la taille des données définit l'alignement mémoire de la structure de données. De plus, le processus d'initialisation des arguments de noyau locaux et privés dans OpenCL est discuté, et il est expliqué que les arguments de noyau dans les espaces locaux et privés peuvent être configurés à l'aide de SetKernelArg, mais la dernière valeur de paramètre ne peut pas être définie lorsque le spécificateur est local. De plus, il est à noter que les arguments privés du noyau doivent être de simples primitives, telles que des entiers et des virgules flottantes.

  • 00:40:00 Dans cette section, la vidéo explique comment utiliser l'argument de noyau défini et les arguments de noyau privés dans votre programme OpenCL. Lors de l'utilisation de l'argument set kernel, le premier argument doit être l'index de la taille entière de l'argument, suivi d'un pointeur vers la variable. Les arguments privés du noyau peuvent également être des vecteurs, tels qu'un tableau de float quatre, qui ne peuvent être utilisés que dans les fonctions du noyau et transmis à l'aide de l'argument set kernel.
OpenCL data types and device memory
OpenCL data types and device memory
  • 2020.03.31
  • www.youtube.com
Data types specific to OpenCL kernel functions and their layout in device memory.
 

42. Opérations relationnelles vectorielles OpenCL



42. Opérations relationnelles vectorielles OpenCL

La vidéo traite de la programmation du noyau OpenCL et de ses opérateurs et fonctions intégrées. L'accent est mis sur les opérateurs relationnels et leur fonctionnement avec les valeurs scalaires et vectorielles. Un exemple de fonction noyau, "op test", est présenté qui effectue une opération ET par élément entre une constante et un vecteur privé. La vidéo explique comment implémenter un vecteur avec des opérations relationnelles dans OpenCL en comparant des éléments vectoriels spécifiques avec un scalaire à l'aide d'opérations logiques. Le vecteur résultant peut être utilisé dans une boucle while pour créer un vecteur de sortie final qui est affecté à l'objet mémoire de sortie.

  • 00:00:00 Dans cette section, la vidéo présente la programmation du noyau OpenCL et traite des opérateurs et des fonctions intégrées héritées par le langage d'autres langages de haut niveau. Les opérateurs présentés incluent l'arithmétique, la comparaison et la logique, la sélection au niveau du bit et la sélection ternaire. En particulier, la section se concentre sur les opérateurs relationnels et explique comment ils fonctionnent avec les valeurs scalaires et vectorielles. Le segment fournit également un exemple de fonction noyau appelée "op test", qui utilise l'opérateur relationnel pour exécuter une opération ET par élément entre un vecteur constant et un vecteur privé initialisé avec des valeurs initiales.

  • 00:05:00 Dans cette section, l'orateur explique comment un vecteur avec des opérations relationnelles peut être implémenté dans OpenCL. En utilisant l'exemple de la comparaison d'éléments spécifiques d'un vecteur avec une valeur scalaire à l'aide d'opérations logiques, l'orateur montre comment un vecteur résultant peut être créé avec des valeurs vraies et fausses représentées respectivement par -1 et 0. Le vecteur résultant peut ensuite être utilisé dans une boucle while où les éléments individuels subissent d'autres opérations logiques pour créer un vecteur de sortie final, qui est affecté à l'objet mémoire de sortie.
OpenCL vector relational operations
OpenCL vector relational operations
  • 2020.04.03
  • www.youtube.com
vector relational operations
 

43. Fonctions intégrées OpenCL : vloadn, sélectionnez



43. Fonctions intégrées OpenCL : vloadn, sélectionnez

La vidéo couvre deux fonctions clés intégrées d'OpenCL : vloadn et select. Vloadn vous permet d'initialiser des lots avec des valeurs d'un tableau scalaire et prend deux arguments : offset et un pointeur vers le tableau scalaire. Sélectionner, d'autre part, vous permet de sélectionner certains éléments de deux lots et de les utiliser pour créer un nouveau vecteur. Il peut contenir des valeurs entières signées ou non signées, et seul le bit le plus significatif des éléments de masque compte. Le didacticiel montre comment ces fonctions fonctionnent dans la pratique.

  • 00:00:00 Dans cette section, nous découvrons Vloadn, une fonction intégrée utilisée pour initialiser des lots à l'aide de valeurs d'un tableau scalaire. Vloadn prend deux arguments : offset et un pointeur vers le tableau scalaire. Le décalage détermine quels éléments du tableau sont placés dans le lot, en fonction de la taille du vecteur. De plus, nous découvrons la fonction Select, qui peut être utilisée pour sélectionner certains éléments de deux lots et les utiliser pour créer un nouveau vecteur. Il peut contenir des valeurs entières signées ou non signées, et seul le bit le plus significatif des éléments de masque compte. Les bits les plus significatifs d'un composant de masque dans Select déterminent le lot à utiliser pour l'élément correspondant dans le vecteur de sortie.

  • 00:05:00 Dans cette section, le didacticiel traite de deux fonctions intégrées OpenCL : vloadn et select. Vloadn est utilisé pour charger des éléments d'un vecteur spécifié dans un nouveau vecteur, et select est utilisé pour sélectionner des éléments à partir de la première ou de la deuxième entrée en fonction d'un masque. Le didacticiel offre des exemples de la façon dont ces fonctions fonctionnent dans la pratique, y compris la façon dont vloadn sélectionne les valeurs du premier vecteur d'entrée en fonction du masque et comment select fonctionne pour choisir les bits des premier ou deuxième vecteurs d'entrée.
OpenCL built-in functions: vloadn , select
OpenCL built-in functions: vloadn , select
  • 2020.04.05
  • www.youtube.com
OpenCL built-in functions: vloadn , select
 

44. Introduction à DPC++



44. Introduction à DPC++

Cette vidéo présente DPC++, un langage de haut niveau pour la programmation parallèle de données qui décharge les calculs complexes vers des accélérateurs tels que les FPGA et les GPU, et fait partie du framework OneAPI. DPC++ vise à accélérer les charges de travail parallèles de données à l'aide d'un C++ moderne et d'une optimisation des performances orientée architecture. Le conférencier fournit un exemple DPC++ simple qui montre comment déclarer des variables de gestion de données et exécuter une fonction du noyau sur un appareil à l'aide d'une commande et d'un accesseur. La vidéo explique également comment la fonction lambda peut prendre des arguments et des références à partir des variables déclarées en dehors de celle-ci.

  • 00:00:00 Dans cette section, le conférencier présente la programmation DPC++, un langage de haut niveau pour la programmation parallèle de données qui décharge le calcul complexe sur des accélérateurs tels que les FPGA et les GPU. DPC++ utilise le C++ moderne et vise à accélérer les charges de travail parallèles de données en analysant les algorithmes, en décomposant les tâches ou les données et en utilisant l'optimisation des performances orientée architecture. DPC++ fait partie du framework OneAPI, et son objectif est de permettre la programmation avec un langage unique qui peut être exécuté sur n'importe quel CPU, FPGA ou GPU. Le conférencier fournit ensuite un exemple DPC++ simple qui déclare des variables, un tampon et une file d'attente de périphériques pour la gestion des données.

  • 00:05:00 Dans cette section, l'orateur présente un exemple de programme DPC++ qui crée une commande et une fonction lambda pour définir une fonction noyau qui s'exécutera sur l'appareil. Le programme utilise un accesseur pour associer un tampon à la commande, et un autre accesseur pour accéder au résultat. Enfin, le programme inclut une boucle for pour utiliser l'accesseur de résultat pour accéder au contenu du tampon et l'imprimer. La fonction lambda peut avoir différentes façons de prendre des arguments dans la fonction, comme le passage de références aux variables déclarées en dehors de la fonction.
Intro to DPC++
Intro to DPC++
  • 2021.04.07
  • www.youtube.com
This videos give a brief introduction to DPC++ and go through a simple DPC++ example source code.
 

45. Comment penser en parallèle ?



45. Comment penser en parallèle ?

La vidéo enseigne la programmation parallèle en utilisant la multiplication matricielle comme exemple. Il met en évidence le parallélisme dans ce calcul, où plusieurs lignes et colonnes peuvent être calculées indépendamment. La mise en œuvre d'un calcul à un seul élément dans la matrice C est illustrée à l'aide d'une fonction noyau qui permet un calcul parallèle. L'utilisation des accesseurs, des plages et des fonctions du noyau parallèle est expliquée en détail. Les étapes impliquées dans le passage de la valeur de plage dans la fonction noyau sont discutées. Une démonstration de la multiplication matricielle à l'aide du nuage de développement Intel FPGA est également présentée.

  • 00:00:00 Dans cette section, la vidéo présente la multiplication matricielle comme exemple couramment utilisé pour enseigner la programmation parallèle. La vidéo explique que la multiplication matricielle consiste à prendre des lignes d'une matrice et des colonnes d'une autre pour effectuer une multiplication et une accumulation élément par élément afin de produire une matrice résultante. La vidéo explique qu'il y a beaucoup de parallélisme dans ce calcul, car différentes lignes et colonnes peuvent être calculées indépendamment les unes des autres. Une implémentation simple de la multiplication matricielle est illustrée à l'aide du langage C ou C ++ standard avec des boucles for imbriquées effectuant la multiplication et l'accumulation élément par élément.

  • 00: 05: 00 Dans cette section, nous apprenons l'implémentation d'un calcul à un seul élément dans la matrice C, qui est implémenté comme une fonction noyau permettant un calcul parallèle. Le point clé est que pour chaque ligne et colonne, le calcul est le même, la seule différence étant les numéros de ligne et de colonne. Les accesseurs aident à accéder aux tampons dans les noyaux, avec un accès en lecture seule pour les matrices A et B, et un accès en écriture pour la matrice C. La plage est utilisée comme une abstraction pour déclarer plusieurs dimensions, et le H.parallel4 aide à définir une fonction de noyau parallèle . La fonction noyau comprend une fonction lambda, l'argument étant la variable à parcourir à travers toutes les valeurs dans les deux dimensions.

  • 00: 10: 00 Dans cette section, l'orateur explique les étapes impliquées dans le passage de la valeur de plage dans la fonction noyau qui est une fonction laminaire. Ils discutent des deux dimensions de la variable et comment elle identifie chaque variable. L'orateur explique comment fonctionne la fonction lambda et montre comment la taille du problème est définie par le nombre de lignes et de colonnes sur lesquelles nous exécutons les fonctions du noyau. Ils utilisent l'exemple de la multiplication matricielle, la notation traditionnelle C plus plus et la multiplication et l'accumulation élément par élément effectuées dans la boucle for la plus interne. Enfin, ils présentent une démonstration rapide de la multiplication matricielle à l'aide du cloud de développement Intel FPGA.
How to Think In Parallel ?
How to Think In Parallel ?
  • 2021.04.07
  • www.youtube.com
This video use matrix multiplication example to introduce how to think in parallel with design data parallel algorithms.
Raison: