Урок 7: Память host/device: cudaMalloc, cudaMemcpy
У CPU (host) и GPU (device) отдельные памяти. Указатель от malloc живёт в памяти host, а указатель от cudaMalloc живёт в памяти device — и обращаться к памяти device напрямую из кода host нельзя. Поэтому полный рабочий процесс вычисления на GPU всегда состоит из одних и тех же пяти шагов. (1) cudaMa
Host и device — как два офиса в разных городах. Нельзя прочитать документ, лежащий в другом офисе, через окно — нужно отправить его туда по почте (cudaMemcpy), дать им над ним поработать и отправить результат обратно. cudaMalloc — это аренда пустого стола в другом офисе, а cudaFree — освобождение его в конце.
- cudaMalloc
- Выделяет память на device и возвращает указатель device. Как malloc, но память живёт на GPU.
- cudaMemcpy
- Копирует байты между host и device. Направление задаётся через cudaMemcpyHostToDevice или cudaMemcpyDeviceToHost.
- H2D и D2H
- Host-to-Device загружает входные данные на GPU; Device-to-Host возвращает результаты обратно на CPU. Два противоположных направления.
- cudaFree
- Освобождает память device, выделенную через cudaMalloc. Аналог free для памяти host.