Урок 34: Унифицированная память (Unified Memory) с cudaMallocManaged
До сих пор мы управляли двумя отдельными копиями каждого массива: указателем на host (например a) и указателем на device (например d_a), перемещая данные между ними вручную с помощью cudaMemcpy в каждом направлении. Унифицированная память (Unified Memory) устраняет это дублирование: cudaMallocManage
Вместо двух отдельных тетрадей — одной на твоём столе (host) и одной на столе твоего друга (device) — которые ты постоянно переписываешь вручную, есть одна волшебная тетрадь. Когда она нужна тебе, она появляется на твоей стороне; когда она нужна твоему другу, она сама переезжает к нему. Очень удобно, но сам переезд занимает мгновение.
- Унифицированная память (Unified Memory)
- Единое адресное пространство, доступное и для host, и для device через один указатель. Driver мигрирует страницы по запросу.
- cudaMallocManaged
- Выделяет управляемую память и возвращает один указатель, пригодный для использования на host и device без явного cudaMemcpy.
- миграция страниц (page migration)
- Когда одна сторона обращается к странице, которой владеет другая, driver перемещает страницу к ней. Это вызывает page fault и стоит времени.
- cudaMemPrefetchAsync
- Подсказка, которая заранее мигрирует управляемые страницы в заданное место назначения (device или host), чтобы избежать page faults во время работы kernel.