Programmation de coprocesseurs
2 livres et 3 critiques, dernière mise à jour le 14 août 2022 , note moyenne : 4.7
Détails du livre
Sommaire
Critiques (1)
0 commentaire
GPU Parallel Program Development Using CUDA
de Tolga Soyata
Public visé :
Intermédiaire
Résumé de l'éditeur
GPU Parallel Program Development using CUDA teaches GPU programming by showing the differences among different families of GPUs. This approach prepares the reader for the next generation and future generations of GPUs. The book emphasizes concepts that will remain relevant for a long time, rather than concepts that are platform-specific. At the same time, the book also provides platform-dependent explanations that are as valuable as generalized GPU concepts.
The book consists of three separate parts; it starts by explaining parallelism using CPU multi-threading in Part I. A few simple programs are used to demonstrate the concept of dividing a large task into multiple parallel sub-tasks and mapping them to CPU threads. Multiple ways of parallelizing the same task are analyzed and their pros/cons are studied in terms of both core and memory operation.
Part II of the book introduces GPU massive parallelism. The same programs are parallelized on multiple Nvidia GPU platforms and the same performance analysis is repeated. Because the core and memory structures of CPUs and GPUs are different, the results differ in interesting ways. The end goal is to make programmers aware of all the good ideas, as well as the bad ideas, so readers can apply the good ideas and avoid the bad ideas in their own programs.
Part III of the book provides pointer for readers who want to expand their horizons. It provides a brief introduction to popular CUDA libraries (such as cuBLAS, cuFFT, NPP, and Thrust),the OpenCL programming language, an overview of GPU programming using other programming languages and API libraries (such as Python, OpenCV, OpenGL, and Apple’s Swift and Metal,) and the deep learning library cuDNN.
The book consists of three separate parts; it starts by explaining parallelism using CPU multi-threading in Part I. A few simple programs are used to demonstrate the concept of dividing a large task into multiple parallel sub-tasks and mapping them to CPU threads. Multiple ways of parallelizing the same task are analyzed and their pros/cons are studied in terms of both core and memory operation.
Part II of the book introduces GPU massive parallelism. The same programs are parallelized on multiple Nvidia GPU platforms and the same performance analysis is repeated. Because the core and memory structures of CPUs and GPUs are different, the results differ in interesting ways. The end goal is to make programmers aware of all the good ideas, as well as the bad ideas, so readers can apply the good ideas and avoid the bad ideas in their own programs.
Part III of the book provides pointer for readers who want to expand their horizons. It provides a brief introduction to popular CUDA libraries (such as cuBLAS, cuFFT, NPP, and Thrust),the OpenCL programming language, an overview of GPU programming using other programming languages and API libraries (such as Python, OpenCV, OpenGL, and Apple’s Swift and Metal,) and the deep learning library cuDNN.
Édition : CRC Press - 440 pages, 1re édition, 16 février 2018
ISBN10 : 1498750753 - ISBN13 : 9781498750752
Understanding CPU Parallelism
Introduction to CPU Parallel Programming
Developing Our First Parallel CPU Program
Improving Our First Parallel CPU Program
Understanding the Cores and Memory
Thread Management and Synchronization
GPU Programming Using CUDA
Introduction to GPU Parallelism and CUDA
CUDA Host/Device Programming Model
Understanding GPU Hardware Architecture
Understanding GPU Cores
Understanding GPU Memory
CUDA Streams
More To Know
CUDA Libraries
Introduction to Open CL
Other GPU Programming Languages
Deep Unsupervised Learning Using TensorFlow and Keras
Recommender Systems Using Restricted Boltzmann Machines
Feature Detection Using Deep Belief Networks
Generative Adversarial Networks
Time Series Clustering
Introduction to CPU Parallel Programming
Developing Our First Parallel CPU Program
Improving Our First Parallel CPU Program
Understanding the Cores and Memory
Thread Management and Synchronization
GPU Programming Using CUDA
Introduction to GPU Parallelism and CUDA
CUDA Host/Device Programming Model
Understanding GPU Hardware Architecture
Understanding GPU Cores
Understanding GPU Memory
CUDA Streams
More To Know
CUDA Libraries
Introduction to Open CL
Other GPU Programming Languages
Deep Unsupervised Learning Using TensorFlow and Keras
Recommender Systems Using Restricted Boltzmann Machines
Feature Detection Using Deep Belief Networks
Generative Adversarial Networks
Time Series Clustering
La programmation de cartes graphiques pour du calcul généraliste est un art exigeant : écrire du code correct n'est pas suffisant, il faut aussi qu'il soit rapide, sinon il n'est pas très utile de passer sur un processeur graphique. Pour y arriver, la meilleure alliée est probablement l'expérience et l'auteur semble en avoir une certaine quantité.
Ce livre prend le lecteur par la main en ce qui concerne l'écriture de code (très) performant, tant sur CPU que GPU. Il commence par expliquer toutes les notions utiles pour un CPU, avant de généraliser aux GPU (et de préciser les distinctions), pour travailler à une échelle plus habituelle pour un programmeur (quelques fils d'exécution, pas plusieurs millions). Le lecteur est abreuvé de détails de bas niveau sur le fonctionnement d'un processeur et de la mémoire, afin d'en profiter un maximum : autant que possible, l'auteur limite ses explications à des invariants dans la conception de ces processeurs, de telle sorte que le livre reste utile pendant plusieurs générations de matériel.
Le livre se focalise sur extrêmement peu d'exemples différents, toujours pris dans le traitement d'images (retournement d'une image et détection d'arêtes). Ces exemples ont des caractéristiques suffisamment variées pour les besoins du livre (utilisation intense de la mémoire ou des capacités de calcul) et permettent d'aller droit au but dans les améliorations de performance. D'ailleurs, les analyses de performance ne se limitent pas à constater des différences, mais bien à les expliquer en détail en fonction du matériel utilisé.
La partie la plus décevante du livre est sans conteste la troisième, qui sort de CUDA. On a droit à des introductions extrêmement courtes et partielles à des sujets bien plus variés. Par exemple, pour les bibliothèques livrées avec CUDA, on a plus une liste de possibilités qu'une vraie explication de leur utilisation. Le très bref chapitre sur les réseaux neuronaux explique très rapidement le principe, l'existence de la bibliothèque cuDNN, ses fonctions principales (mais juste les noms, pas leur utilisation !) avant de conseiller l'utilisation de Keras : au vu du titre du livre, on s'attendait à plus de détails.
Le ton est vivant, pas lénifiant, comme l'on a parfois dans les ouvrages introductifs du genre : l'auteur a une certaine expérience pédagogique et la met à profit (même si les personnes allergiques aux noix de coco feraient mieux de passer leur chemin — les concepts principaux sont expliqués à l'aide d'analogies avec la récolte de noix de coco). Une conséquence est que le livre n'est pas compact, les explications ne laissant pas beaucoup de place à l'interprétation. Le public visé n'a pas de grandes connaissances en programmation de haute performance, il s'agit plutôt de scientifiques non informaticiens ou d'étudiants dans ces domaines — par exemple, les premiers chapitres ne supposent aucune connaissance de la ligne de commandes.
Ce livre prend le lecteur par la main en ce qui concerne l'écriture de code (très) performant, tant sur CPU que GPU. Il commence par expliquer toutes les notions utiles pour un CPU, avant de généraliser aux GPU (et de préciser les distinctions), pour travailler à une échelle plus habituelle pour un programmeur (quelques fils d'exécution, pas plusieurs millions). Le lecteur est abreuvé de détails de bas niveau sur le fonctionnement d'un processeur et de la mémoire, afin d'en profiter un maximum : autant que possible, l'auteur limite ses explications à des invariants dans la conception de ces processeurs, de telle sorte que le livre reste utile pendant plusieurs générations de matériel.
Le livre se focalise sur extrêmement peu d'exemples différents, toujours pris dans le traitement d'images (retournement d'une image et détection d'arêtes). Ces exemples ont des caractéristiques suffisamment variées pour les besoins du livre (utilisation intense de la mémoire ou des capacités de calcul) et permettent d'aller droit au but dans les améliorations de performance. D'ailleurs, les analyses de performance ne se limitent pas à constater des différences, mais bien à les expliquer en détail en fonction du matériel utilisé.
La partie la plus décevante du livre est sans conteste la troisième, qui sort de CUDA. On a droit à des introductions extrêmement courtes et partielles à des sujets bien plus variés. Par exemple, pour les bibliothèques livrées avec CUDA, on a plus une liste de possibilités qu'une vraie explication de leur utilisation. Le très bref chapitre sur les réseaux neuronaux explique très rapidement le principe, l'existence de la bibliothèque cuDNN, ses fonctions principales (mais juste les noms, pas leur utilisation !) avant de conseiller l'utilisation de Keras : au vu du titre du livre, on s'attendait à plus de détails.
Le ton est vivant, pas lénifiant, comme l'on a parfois dans les ouvrages introductifs du genre : l'auteur a une certaine expérience pédagogique et la met à profit (même si les personnes allergiques aux noix de coco feraient mieux de passer leur chemin — les concepts principaux sont expliqués à l'aide d'analogies avec la récolte de noix de coco). Une conséquence est que le livre n'est pas compact, les explications ne laissant pas beaucoup de place à l'interprétation. Le public visé n'a pas de grandes connaissances en programmation de haute performance, il s'agit plutôt de scientifiques non informaticiens ou d'étudiants dans ces domaines — par exemple, les premiers chapitres ne supposent aucune connaissance de la ligne de commandes.
Commenter Signaler un problème
GPU Parallel Program Development using CUDA teaches GPU programming by showing the differences among different families of GPUs. This approach prepares the reader for the next generation and future generations of GPUs. The book emphasizes concepts that will remain relevant for a long time, rather than concepts that are platform-specific. At the same time, the book also provides platform-dependent explanations that are as valuable as generalized GPU concepts.
The book consists of three separate parts; it starts by explaining parallelism using CPU multi-threading in Part I. A few simple programs are used to demonstrate the concept of dividing a large task into multiple parallel sub-tasks and mapping them to CPU threads. Multiple ways of parallelizing the same task are analyzed and their pros/cons are studied in terms of both core and memory operation.
Part II of the book introduces GPU massive parallelism. The same programs are parallelized on multiple Nvidia GPU platforms and the same performance analysis is repeated. Because the core and memory structures of CPUs and GPUs are different, the results differ in interesting ways. The end goal is to make programmers aware of all the good ideas, as well as the bad ideas, so readers can apply the good ideas and avoid the bad ideas in their own programs.
Part III of the book provides pointer for readers who want to expand their horizons. It provides a brief introduction to popular CUDA libraries (such as cuBLAS, cuFFT, NPP, and Thrust),the OpenCL programming language, an overview of GPU programming using other programming languages and API libraries (such as Python, OpenCV, OpenGL, and Apple’s Swift and Metal,) and the deep learning library cuDNN.
[Lire la suite]
The book consists of three separate parts; it starts by explaining parallelism using CPU multi-threading in Part I. A few simple programs are used to demonstrate the concept of dividing a large task into multiple parallel sub-tasks and mapping them to CPU threads. Multiple ways of parallelizing the same task are analyzed and their pros/cons are studied in terms of both core and memory operation.
Part II of the book introduces GPU massive parallelism. The same programs are parallelized on multiple Nvidia GPU platforms and the same performance analysis is repeated. Because the core and memory structures of CPUs and GPUs are different, the results differ in interesting ways. The end goal is to make programmers aware of all the good ideas, as well as the bad ideas, so readers can apply the good ideas and avoid the bad ideas in their own programs.
Part III of the book provides pointer for readers who want to expand their horizons. It provides a brief introduction to popular CUDA libraries (such as cuBLAS, cuFFT, NPP, and Thrust),the OpenCL programming language, an overview of GPU programming using other programming languages and API libraries (such as Python, OpenCV, OpenGL, and Apple’s Swift and Metal,) and the deep learning library cuDNN.
[Lire la suite]
- Avez-vous lu ce livre ou pensez-vous le lire ?
- Souhaitez-vous ajouter une critique de ce livre sur la page de la rubrique ?
- Avez-vous un commentaire à faire ?
Détails du livre
Sommaire
Critiques (2)
1 commentaire
CUDA par l'exemple
une introduction à la programmation parallèle de GPU
de Jason Sanders, Edward Kandbrot
Traducteurs : Eric Jacoboni
Public visé :
Intermédiaire
Résumé de l'éditeur
CUDA est une architecture qui facilite le développement de programmes parallèles. Associé à une plate-forme logicielle complète, CUDA permet de tirer parti de la grande puissance des processeurs graphiques, ou GPU, afin de construire des applications très performantes dans de multiples domaines - ingénierie, calcul, finance, etc. - et ce sans nécessiter de connaissances en programmation graphique : il suffit de savoir programmer dans une version légèrement modifiée du langage C.
CUDA par l'exemple, écrit par deux membres éminents de l'équipe de développement de la plate-forme CUDA, a pour objectif d'expliquer comment utiliser cette nouvelle technologie. Cet enseignement s'appuie sur des exemples réels, pour lesquels tous les outils CUDA nécessaires sont librement téléchargeables à partir du site de NVIDIA.
L'ouvrage débute par une présentation de la plateforme de développement et son architecture, puis par une introduction rapide à CUDA C. Il détaille ensuite les techniques et les choix liés aux aspects essentiels de CUDA, ainsi que chaque extension de CUDA C. Grâce à ce livre, vous saurez rapidement écrire des programmes CUDA aux performances exceptionnelles.
CUDA par l'exemple, écrit par deux membres éminents de l'équipe de développement de la plate-forme CUDA, a pour objectif d'expliquer comment utiliser cette nouvelle technologie. Cet enseignement s'appuie sur des exemples réels, pour lesquels tous les outils CUDA nécessaires sont librement téléchargeables à partir du site de NVIDIA.
L'ouvrage débute par une présentation de la plateforme de développement et son architecture, puis par une introduction rapide à CUDA C. Il détaille ensuite les techniques et les choix liés aux aspects essentiels de CUDA, ainsi que chaque extension de CUDA C. Grâce à ce livre, vous saurez rapidement écrire des programmes CUDA aux performances exceptionnelles.
Édition : Pearson Education - 260 pages, 1er mai 2001
ISBN10 : 2744024864 - ISBN13 : 9782744024863
- Pourquoi CUDA ? Pourquoi maintenant ?
- Démarrage
- Introduction à CUDA C
- Programmation parallèle en CUDA C
- Coopération entre threads
- Mémoire de données constante et événements
- Mémoire de texture
- Interopérabilité avec les traitements graphiques
- Atomicité
- Flux
- CUDA C avec plusieurs GPU
- Compte à rebours final
- Atomicité avancée
- CUDA 4.0
Petit livre s'il en est. Ses ambitions sont à la hauteur de son épaisseur : avec lui, on peut facilement se mettre dans le bain de CUDA, écrire ses premiers kernels, utiliser l'outil de manière relativement efficace. Par contre, il ne détaille pas l'architecture sous-jacente des processeurs graphiques, il ne perd pas son temps à expliquer le vocabulaire et les détails de la programmation parallèle tant que ce n'est pas nécessaire.
Les auteurs se sont basés sur une méthode d'apprentissage par l'exemple : chaque chapitre est organisé autour de plusieurs exemples, décortiqués autant que nécessaire pour que le lecteur s'y plonge sans trop de difficulté. L'objectif n'est pas de former des gens capables de comprendre jusque dans les moindres détails CUDA et l'optimisation profonde des algorithmes employés, mais plus de les amener à utiliser CUDA, en profitant de grands gains de performances par rapport à la version CPU, le tout dans un ton joyeux, sans se prendre la tête, avec une complexité croissante, sans sauter une marche. On remarquera notamment l'utilisation d'une bibliothèque de fonctions dans les exemples, afin de s'abstraire de ce qui ne concerne pas l'objectif premier du livre. Les auteurs semblent avoir remarqué ce qui pose souvent problème aux débutants avec CUDA et en profitent pour insister sur ces quelques points-clés.
Chaque chapitre est constitué de trois phases : l'introduction, où l'on introduit le sujet qui sera étudié dans le chapitre, avec la liste des objectifs ; le développement en lui-même ; la conclusion, où l'on résume les points essentiels du chapitre pour répondre aux objectifs fixés.
Il ne faut pas considérer ce livre comme une approche exhaustive de CUDA - tel n'en est pas le but -, il donne cependant les pistes nécessaires pour continuer son apprentissage de la technologie, comme le confirme le chapitre 12, où quelques pistes sont évoquées pour aller plus loin (livres de référence à consulter, bibliothèques utiles, etc.).
Par rapport à l'original, on remarquera l'ajout d'une annexe concernant CUDA 4.0, listant simplement les nouveautés de cette version, on aurait apprécié un peu plus de détails (des exemples, du code, notamment). On y apprend aussi que de nouvelles fonctionnalités du C++ sont supportées, alors que rien n'est précédemment dit sur ce langage. On n'apprendra rien sur l'architecture des GPU, pas plus sur la nouvelle architecture Fermi et les grandes nouveautés qu'elle apporte (elle n'est même pas citée), cela n'étant absolument pas l'objectif du livre.
Les prérequis ne sont pas exorbitants : la connaissance de la programmation en C est bien suffisante, inutile de connaître la programmation graphique. Dans cet ordre d'idées, chaque exemple est précédé d'une introduction plus théorique, qui explique ce qui va être réalisé par la suite, au cas où le lecteur ne le saurait pas. Ainsi, on explique brièvement le principe des réductions, des histogrammes, du lancer de rayons, etc.
Les auteurs se sont basés sur une méthode d'apprentissage par l'exemple : chaque chapitre est organisé autour de plusieurs exemples, décortiqués autant que nécessaire pour que le lecteur s'y plonge sans trop de difficulté. L'objectif n'est pas de former des gens capables de comprendre jusque dans les moindres détails CUDA et l'optimisation profonde des algorithmes employés, mais plus de les amener à utiliser CUDA, en profitant de grands gains de performances par rapport à la version CPU, le tout dans un ton joyeux, sans se prendre la tête, avec une complexité croissante, sans sauter une marche. On remarquera notamment l'utilisation d'une bibliothèque de fonctions dans les exemples, afin de s'abstraire de ce qui ne concerne pas l'objectif premier du livre. Les auteurs semblent avoir remarqué ce qui pose souvent problème aux débutants avec CUDA et en profitent pour insister sur ces quelques points-clés.
Chaque chapitre est constitué de trois phases : l'introduction, où l'on introduit le sujet qui sera étudié dans le chapitre, avec la liste des objectifs ; le développement en lui-même ; la conclusion, où l'on résume les points essentiels du chapitre pour répondre aux objectifs fixés.
Il ne faut pas considérer ce livre comme une approche exhaustive de CUDA - tel n'en est pas le but -, il donne cependant les pistes nécessaires pour continuer son apprentissage de la technologie, comme le confirme le chapitre 12, où quelques pistes sont évoquées pour aller plus loin (livres de référence à consulter, bibliothèques utiles, etc.).
Par rapport à l'original, on remarquera l'ajout d'une annexe concernant CUDA 4.0, listant simplement les nouveautés de cette version, on aurait apprécié un peu plus de détails (des exemples, du code, notamment). On y apprend aussi que de nouvelles fonctionnalités du C++ sont supportées, alors que rien n'est précédemment dit sur ce langage. On n'apprendra rien sur l'architecture des GPU, pas plus sur la nouvelle architecture Fermi et les grandes nouveautés qu'elle apporte (elle n'est même pas citée), cela n'étant absolument pas l'objectif du livre.
Les prérequis ne sont pas exorbitants : la connaissance de la programmation en C est bien suffisante, inutile de connaître la programmation graphique. Dans cet ordre d'idées, chaque exemple est précédé d'une introduction plus théorique, qui explique ce qui va être réalisé par la suite, au cas où le lecteur ne le saurait pas. Ainsi, on explique brièvement le principe des réductions, des histogrammes, du lancer de rayons, etc.
CUDA est à la mode depuis plusieurs années maintenant, et plusieurs ouvrages sont parus sur ce sujet. Celui-ci se veut pour débutant avec une approche simple, mais sur un grand nombre de sujets.
Les deux premiers chapitres sont consacrés à une introduction à CUDA dans le monde scientifique : pourquoi CUDA, pourquoi cette technologie peut être utile et que propose nVidia en terme matériel. Naturellement, nVidia propose maintenant plus que ce qui est indiqué dans le livre.
On trouve ensuite du véritable code CUDA. Les auteurs ajoutent des briques supplémentaires à chaque chapitre : d'abord la syntaxe spécifique, le parallélisme et le concept de threads, les blocs et la coopération de blocs, la mémoire constante et les flux, et pour finir la mémoire de texture.
La dernière étape est l'optimisation du code. On commence par l'interaction OpenGL (l'équivalent DirectX est mentionnée mais est laissé à titre d'exercice), les opération atomiques, les flux et enfin le multi-GPU. Certaines de ces optimisations ne sont accessibles que sur les nouveaux GPU, et ce n'est pas mentionné explicitement. Mais le code de test est fourni.
Le dernier chapitre aborde les supports utiles pour le développement : les outils, la documentation...
En réalité, il y a beaucoup de détails manquants. Le plus important à mon sens est l'optimisation des accès mémoire. Les accès dit coalescés ne sont pas mentionnés, et ils sont extrêmement importants, même si nVidia a fait des progrès dans les dernières version pour cacher ce point. Cela reste un des meilleurs moyens d'optimiser son code. Aussi les débogueurs sont mentionnés, mais il n'y a pas de tutoriel d'utilisation. Il faut donc compléter les trous par un apprentissage complémentaire.
En conclusion, CUDA By Example est un bon ouvrage d'introduction, avec des défauts. Les auteurs ont voulu ne pas plonger dans les détails architecturaux, mais il vous faudra les apprendre par vos propres lectures, soit dans un autre ouvrage, soit sur le net. Au moins, vous aurez fait un tour d'horizon assez complet.
Les deux premiers chapitres sont consacrés à une introduction à CUDA dans le monde scientifique : pourquoi CUDA, pourquoi cette technologie peut être utile et que propose nVidia en terme matériel. Naturellement, nVidia propose maintenant plus que ce qui est indiqué dans le livre.
On trouve ensuite du véritable code CUDA. Les auteurs ajoutent des briques supplémentaires à chaque chapitre : d'abord la syntaxe spécifique, le parallélisme et le concept de threads, les blocs et la coopération de blocs, la mémoire constante et les flux, et pour finir la mémoire de texture.
La dernière étape est l'optimisation du code. On commence par l'interaction OpenGL (l'équivalent DirectX est mentionnée mais est laissé à titre d'exercice), les opération atomiques, les flux et enfin le multi-GPU. Certaines de ces optimisations ne sont accessibles que sur les nouveaux GPU, et ce n'est pas mentionné explicitement. Mais le code de test est fourni.
Le dernier chapitre aborde les supports utiles pour le développement : les outils, la documentation...
En réalité, il y a beaucoup de détails manquants. Le plus important à mon sens est l'optimisation des accès mémoire. Les accès dit coalescés ne sont pas mentionnés, et ils sont extrêmement importants, même si nVidia a fait des progrès dans les dernières version pour cacher ce point. Cela reste un des meilleurs moyens d'optimiser son code. Aussi les débogueurs sont mentionnés, mais il n'y a pas de tutoriel d'utilisation. Il faut donc compléter les trous par un apprentissage complémentaire.
En conclusion, CUDA By Example est un bon ouvrage d'introduction, avec des défauts. Les auteurs ont voulu ne pas plonger dans les détails architecturaux, mais il vous faudra les apprendre par vos propres lectures, soit dans un autre ouvrage, soit sur le net. Au moins, vous aurez fait un tour d'horizon assez complet.
Commenter Signaler un problème
Voici une critique de CUDA par l'exemple - une introduction à la programmation parallèle de GPU :
La critique
Vous avez lu le livre ? Qu'en pensez-vous ?
La critique
Vous avez lu le livre ? Qu'en pensez-vous ?
J'ai fini de le lire et ma critique a été ajoutée.
C'est un bon ouvrage pour un débutant, mais il sera nécessaire de consolider par d'autres lectures.
C'est un bon ouvrage pour un débutant, mais il sera nécessaire de consolider par d'autres lectures.