Leçon 34 : Mémoire unifiée (Unified Memory) avec cudaMallocManaged
Jusqu'ici, on gérait deux copies séparées de chaque tableau : un pointeur host (disons a) et un pointeur device (disons d_a), en déplaçant les données entre eux avec cudaMemcpy manuel dans chaque direction. La mémoire unifiée élimine cette duplication : cudaMallocManaged alloue un unique pointeur va
Au lieu de deux cahiers séparés — un sur ton bureau (host) et un sur le bureau de ton ami (device) — que tu copies constamment à la main de l'un vers l'autre, il y a un unique cahier magique. Quand tu en as besoin, il apparaît de ton côté ; quand ton ami en a besoin, il glisse tout seul vers lui. Très pratique, mais le glissement lui-même prend un moment.
- Mémoire unifiée (Unified Memory)
- Un unique espace d'adressage accessible à la fois par le host et le device via un seul pointeur. Le driver migre les pages à la demande.
- cudaMallocManaged
- Alloue de la mémoire managée et renvoie un unique pointeur utilisable sur le host et sur le device sans cudaMemcpy explicite.
- migration de pages (page migration)
- Quand un côté touche une page qui est aux mains de l'autre, le driver déplace la page vers lui. Ça déclenche un page fault et ça coûte du temps.
- cudaMemPrefetchAsync
- Un indice qui migre des pages managées à l'avance vers une destination donnée (device ou host) pour éviter des page faults pendant le kernel.