Question

Je suis en train d'apprendre OpenCL , et je suis au point en essayant de lancer un noyau. Pourquoi est-ce que les fils de GPU sont gérés dans une grille?

Je vais en savoir plus sur cette question en détail, mais ce serait bien avec une explication simple. Est-il toujours comme ça quand on travaille avec GPGPU ?

Était-ce utile?

La solution

Ceci est une approche commune, qui est utilisé dans CUDA, OpenCL et je pense que ATI Stream.

L'idée derrière la grille est de fournir un moyen simple, mais souple, le mappage entre les données en cours de traitement et les fils qui font le traitement des données. Dans la version simple du modèle d'exécution de GPGPU, un fil de GPU est « allouée » pour chaque élément de sortie dans un 1D, 2D ou 3D de grille de données. Pour traiter cet élément de sortie, le fil va lire un (ou plusieurs) des éléments à partir des emplacements adjacents ou emplacement correspondant de la grille de données d'entrée (s). En organisant les fils dans une grille, il est plus facile pour les fils de déterminer quels éléments de données d'entrée pour lire et où stocker les éléments de données de sortie.

Cela contraste avec la multi-noyau commun, le modèle de filetage de CPU où un fil est allouée par noyau de CPU et chaque processus de filetage de nombreux éléments d'entrée et de sortie (par exemple, un quart des données dans un système quad-core).

Autres conseils

La réponse simple est que les GPU sont conçus pour traiter les images et les textures qui sont des grilles 2D de pixels. Lorsque vous restituez un triangle DirectX ou OpenGL, le matériel, il est tramée dans une grille de pixels.

Je vais appeler l'analogie classique de mettre une cheville carrée dans un trou rond. Eh bien, dans ce cas, le GPU est un trou très carré et pas aussi bien arrondi comme GP (usage général) suggère.

Les explications ci-dessus mettent en avant les idées de textures 2D, etc. L'architecture du GPU est telle que le traitement est effectué en cours d'eau avec le pipeline étant identique dans chaque flux, de sorte que les données traitées besoin d'être segmenté comme ça .

L'une des raisons pour lesquelles cela est une API intéressante est que vous travaillez généralement avec un algorithme qui a plusieurs boucles imbriquées. Si vous avez une, deux ou trois boucles puis une grille d'un, deux ou trois dimensions des cartes bien au problème, vous donnant un fil pour la valeur de chaque indice.

Les valeurs que vous avez besoin dans votre noyau (valeurs d'index) sont naturellement exprimés dans l'API.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top