Leçon 33 : Transferts asynchrones et mémoire pinned
Pour qu'une copie se chevauche avec le calcul, il ne suffit pas d'utiliser cudaMemcpyAsync et plusieurs streams — la mémoire côté host doit aussi être pinned. La mémoire normale allouée avec malloc est pageable : le système d'exploitation peut la déplacer dans la mémoire physique, donc le GPU ne peu
La mémoire pageable, c'est un livre de bibliothèque qui peut se déplacer d'étagère en étagère à tout moment — un coursier ne peut pas le prendre directement. La mémoire pinned, c'est un livre posé sur un lutrin fixe près de la porte, et le coursier l'attrape sans attendre.
- mémoire pinned (page-locked)
- Mémoire host fixée à sa place physique. Le DMA la lit directement, ce qui permet un transfert vraiment asynchrone.
- mémoire pageable
- Mémoire host normale (malloc) que le système d'exploitation peut déplacer. Une copie depuis elle passe par une région pinned temporaire et bloque.
- cudaMallocHost
- Alloue de la mémoire host de type pinned. Se libère avec cudaFreeHost. Une alternative est cudaHostAlloc.
- DMA
- Un moteur de copie dédié qui déplace des données entre host et device sans occuper les SM. A besoin d'une adresse host stable (pinned).