Lección 34: Memoria unificada (Unified Memory) con cudaMallocManaged
Hasta ahora manejábamos dos copias separadas de cada arreglo: un puntero host (digamos a) y un puntero device (digamos d_a), moviendo datos entre ellos con cudaMemcpy manual en cada dirección. La memoria unificada elimina esa duplicación: cudaMallocManaged asigna un único puntero válido tanto en el
En vez de dos cuadernos separados — uno en tu escritorio (host) y otro en el escritorio de tu amigo (device) — que estás copiando constantemente a mano entre uno y otro, hay un cuaderno mágico único. Cuando lo necesitas, aparece de tu lado; cuando tu amigo lo necesita, se desliza solo hacia él. Muy cómodo, pero el deslizamiento en sí toma un momento.
- Memoria unificada (Unified Memory)
- Un único espacio de direcciones accesible tanto por el host como por el device a través de un solo puntero. El driver migra páginas bajo demanda.
- cudaMallocManaged
- Asigna memoria administrada y devuelve un único puntero utilizable en el host y en el device sin cudaMemcpy explícito.
- migración de páginas (page migration)
- Cuando un lado toca una página que está en manos del otro, el driver mueve la página hacia él. Esto desencadena un page fault y cuesta tiempo.
- cudaMemPrefetchAsync
- Una pista que migra páginas administradas de antemano a un destino dado (device o host) para evitar page faults durante el kernel.