Урок 33: Асинхронные передачи и pinned-память
Чтобы копирование перекрывалось с вычислением, недостаточно использовать cudaMemcpyAsync и несколько stream'ов — память на стороне host тоже должна быть pinned. Обычная память, выделенная через malloc, является pageable: операционная система может перемещать её в физической памяти, поэтому GPU не мо
Pageable-память — это библиотечная книга, которую в любой момент могут переставить с полки на полку, — курьер не может забрать её напрямую. Pinned-память — это книга на постоянной подставке у двери, и курьер хватает её, не дожидаясь.
- pinned-память (page-locked)
- Память host, зафиксированная в своём физическом месте. DMA читает из неё напрямую, поэтому она обеспечивает по-настоящему асинхронную передачу.
- pageable-память
- Обычная память host (malloc), которую ОС может перемещать. Копирование из неё проходит через временную pinned-область и блокирует.
- cudaMallocHost
- Выделяет pinned-память host. Освобождается через cudaFreeHost. Альтернатива — cudaHostAlloc.
- DMA
- Выделенный движок копирования, который перемещает данные host/device, не занимая SM'ы. Ему нужен стабильный адрес host (pinned).