Aula 34: Unified Memory com cudaMallocManaged
Até agora gerenciávamos duas cópias separadas de cada array: um ponteiro do host (digamos a) e um ponteiro do device (digamos d_a), movendo dados entre eles com cudaMemcpy manual em cada direção. A Unified Memory remove essa duplicação: cudaMallocManaged aloca um único ponteiro válido tanto no host
Em vez de dois cadernos separados — um na sua mesa (host) e um na mesa do seu amigo (device) — que você fica copiando manualmente entre um e outro, existe um caderno mágico só. Quando você precisa dele, ele aparece do seu lado; quando seu amigo precisa, ele desliza sozinho para o lado dele. Muito conveniente, mas o deslizamento em si leva um tempinho.
- Unified Memory
- Um único espaço de endereçamento acessível tanto pelo host quanto pelo device através de um ponteiro. O driver migra páginas sob demanda.
- cudaMallocManaged
- Aloca memória gerenciada e retorna um ponteiro utilizável no host e no device sem cudaMemcpy explícito.
- migração de página
- Quando um lado toca uma página que está do outro lado, o driver a move para lá. Isso dispara uma falha de página e custa tempo.
- cudaMemPrefetchAsync
- Uma dica que migra páginas gerenciadas antecipadamente para um destino determinado (device ou host) para evitar falhas de página durante o kernel.