GPU Exam Paper 2023 PDF
Document Details
Uploaded by SweetheartMulberryTree677
Faculté des Sciences de Gafsa
2023
Tags
Summary
This is a GPU exam paper from an Tunisian university. The exam covers topics including programming languages, CUDA concepts, and memory management on GPUs.
Full Transcript
République Tunisienne اﻟﺠﻤﮭﻮرﯾﺔ اﻟﺘﻮﻧﺴﯿﺔ ****** ******* ministère de l'enseignement supérieur et...
République Tunisienne اﻟﺠﻤﮭﻮرﯾﺔ اﻟﺘﻮﻧﺴﯿﺔ ****** ******* ministère de l'enseignement supérieur et de la recherche وزارة اﻟﺘﻌﻠﯿﻢ اﻟﻌﺎﻟﻲ و اﻟﺒﺤﺚ اﻟﻌﻠﻤﻲ scientifique ******* ****** Faculté des Sciences de Gafsa ﻛﻠﯿﺔ اﻟﻌﻠﻮم ﺑﻘﻔﺼﺔ Matière : Session : Principale Processeur graphique GPU : Architecture et programmation parallèle Durée : 1h :30 Enseignant : Dr. Raik Aissaoui Date : 01/2023 Niveau : 2ème année Mastère de recherche Documents : Non autorisé N° pages : 2 Exercice 1 : Langage de Programmation (5 pts) 1- Quels sont les deux langages de programmation les plus utilisés pour développer des algorithmes parallèles sur GPU et préciser pour chaque langage s’il est fonctionnel sur les cartes de Nvidia ou AMD ou les deux. 2- Faire une comparaison entre ces deux langages de programmation. 3- Selon tes connaissances, quel est le langage le plus utilisé et expliquer pourquoi. Exercice 2 : CUDA (5 pts) 1- Nommer les types de fonctions de CUDA. 2- Expliquer la notion de « kernel CUDA ». 3- Quel est l’extension de fichier dans lequel se trouve le code de kernel CUDA ? Quel est la signification de « threadIdx », « blockIdx » et « Global thread ID » ? Exercice 3 : Map & Reduce (5 pts) 1- Soit la notion de « Map & Reduce » dans le calcul parallèle. Expliquer cette notion avec l’exemple de « calcul min/max » de ce tableau en donnant le résultat final de min et max (vous pouvez dessiner les différents étapes). Faculté des Sciences de Gafsa – Campus Universitaire – Zarrouk – 2112 Gafsa – TUNISIE Téléphone : (216) 76 211 024 Télécopie : (216) 76 211 026 Exercice 4 : Gestion de la mémoire (5 pts) 1- Compléter le schéma par les différents types de mémoire du GPU (utiliser les numérotations dans la feuille d’examen) ? 2- Nommer les différentes déclarations de variables du CUDA. 3- Soit un produit matriciel C=A*B. Quel est la meilleure solution pour résoudre ce problème en utilisant GPU (proposer la démarche sans code). Bon travail Faculté des Sciences de Gafsa – Campus Universitaire – Zarrouk – 2112 Gafsa – TUNISIE Téléphone : (216) 76 211 024 Télécopie : (216) 76 211 026 Exercice 1 : Langage de Programmation (5 pts) 1- Quels sont les deux langages de programmation les plus utilisés pour développer des algorithmes parallèles sur GPU. OpenCL et CUDA 2- Donner les caractéristiques de chaque langage. OpenCL CUDA –Solution initiée par un langage (C/C++ plus extensions et restrictions) Apple, ouvert à la OpenGL un compilateur (nvcc) + drivers –Ce veut générique interfaces pour Fortran, python, MatLab, Java, etc. (CPU/GPU) des bibliothèques : CUBLAS, Thrust, etc. –Approche à la –Supporte uniquement le matériel Nvidia (GPU et OpenGL/GLSL Tesla) –Langage proche du C bientôt support par AMD ! 3- CUDA bien documenté par les ingénieurs de NVIDIA. Exercice 2 : CUDA (5 pts) 1- Nommer les types de fonctions de CUDA. 2- Expliquer la notion de « kernel ». 3- Quel est l’extension de fichier dans lequel se trouve le code de kernel CUDA ? Quel est la signification de « threadIdx », « blockIdx » et « Global thread ID » ? Exercice 3 : Map & Reduce (5 pts) 1- Soit la notion de « Map & Reduce » dans le calcul parallèle. Expliquer cette notion avec l’exemple de « calcul min/max » de ce tableau en donnant le résultat final de min et max (vous pouvez dessiner les différents étapes). Exercice 4 : Gestion de la mémoire (5 pts) 1- Compléter le schéma par les différents types de mémoire du GPU (utiliser les numérotations dans la feuille d’examen)? 2- Nommer les différentes déclarations de variables du CUDA. 3- Soit un produit matriciel C=A*B. Quel est la meilleure solution pour résoudre ce problème en utilisant GPU (proposer la démarche sans code). Idée –considérer une sous matrice de C = 1 bloc de threads –pré-charger les sous blocs de A et B en shared memory Masquage des accès mémoires: –charger les blocs bleus dans des registres –pour chaque bloc copier les blocs des registres vers la shared memory copier les blocs suivant (oranges) dans des registres calculer Cij pour les blocs courants