CUDA : cours travaux pratiques
Un nombre auto-descriptif se définit comme un entier naturel ayant pour propriété que chacun de ses chiffres repéré par son rang indique combien de fois ce rang apparaît en tant que chiffre dans l'écriture de ce nombre. On parle aussi de nombre autobiographique ou de nombre qui se décrit lui-même. Le premier nombre auto-descriptif est $1210$. En effet :
Il en va de même pour $2020$, $21200$. Ces nombres sont très rares, on en compte 7 dont la liste figure table suivante :
n | a(n) |
1 | 1_210 |
2 | 2_020 |
3 | 21_200 |
4 | 3_211_000 |
5 | 42_101_000 |
6 | 521_001_000 |
7 | 6_210_001_000 |
Ecrire un programme C++ qui permet de rechercher les nombres autodescriptifs entre 0 et 522_240_000 ($= 510 * 1024 * 1000$). On utilisera la fonction suivante pour déterminer si un nombre est ou n'est pas auto-descriptif :
Afin de pouvoir paralléliser le traitement et le comparer à une implantation CUDA, nous allons créer un tableau de 522_240_000 booléens nommé
Une fois le traitement terminé, on parcourra le tableau afin d'afficher les nombres auto-descriptifs.
Quel temps d'exécution séquentiel sur CPU obtient-on ?
Paralléliser le code en utilisant OpenMP.
Quel temps d'exécution parallèle sur CPU obtient-on ?
Faire varier le nombre de coeurs utilisés pour la résolution parmi 2, 4 et 8, voire 16 si vous disposez d'un octo-core avec SMT.
Ecrire une version CUDA dans laquelle le kernel
Quel temps d'exécution parallèle sur GPU obtient-on ?
Que se passe t-il si on procède en plusieurs fois ? Plutôt que d'utiliser un tableau de 522_240_000 éléments, on effectue 510 fois le calcul de 1_024_000 éléments.