CUDA Academy · Lección

Memoria fijada con cudaMallocHost

Búferes con páginas bloqueadas para DMA rápido.

Lección 2 de 413 pasos

Memoria fijada con cudaMallocHost es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de CUDA Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de CUDA Academy incluye 4 lecciones en total.

Conozca la memoria pinned

La memoria pinned es memoria del host que el sistema operativo se compromete a no mover ni intercambiar. Como su dirección física es fija, la GPU puede leerla directamente.

También llamada page-locked

Verá que el término page-locked se usa como sinónimo de pinned. Ambos significan lo mismo: páginas bloqueadas en su ubicación para que nunca puedan intercambiarse.

Asígnela correctamente

Solicite memoria pinned a CUDA mediante cudaMallocHost. Esta función devuelve un puntero ordinario del host que puede leer y escribir igual que cualquier arreglo de C++.

float* h_data;
cudaMallocHost(&h_data, N * sizeof(float));

Úsela con normalidad

El puntero devuelto se comporta como cualquier búfer del host, por lo que su código de CPU no cambia. Solo tiene que llenarlo y leerlo exactamente como antes.

for (int i = 0; i < N; ++i) h_data[i] = i * 1.0f;

Sin más copias intermedias

Como las páginas no pueden moverse, el controlador omite su copia intermedia oculta. La GPU obtiene los datos directamente de su búfer, por lo que desaparece la copia duplicada.

Transferencias más rápidas

La recompensa es un ancho de banda real. Las transferencias con memoria pinned suelen acercarse a la velocidad máxima del enlace, y a veces son aproximadamente el doble de rápidas que con memoria paginable.

Libérela correctamente

La memoria pinned requiere su propia función de liberación correspondiente. Use cudaFreeHost, nunca el free normal, o podría provocar un fallo y una fuga de memoria.

cudaFreeHost(h_data);

No es memoria ilimitada

Las páginas pinned no pueden intercambiarse, por lo que mantienen ocupada la RAM real. Si fija demasiada memoria, privará al resto del sistema de memoria utilizable.

La asignación es más lenta

Bloquear páginas requiere trabajo, por lo que cudaMallocHost es más lenta al asignar que malloc. Reutilice un búfer pinned para muchas transferencias en lugar de volver a asignarlo.

La verdadera ventaja

Además de la velocidad, la memoria pinned es la clave para habilitar copias realmente asíncronas. Sin ella, cudaMemcpyAsync no puede solaparse con nada.

Cuándo utilizarla

Fije los búferes que transfiera con frecuencia o que alimenten streams. Para una copia puntual de un arreglo pequeño, malloc normal es perfectamente adecuado. 🙂

Comprobación rápida

Ha asignado un búfer con cudaMallocHost. ¿Cómo debe liberarlo?

Resumen

cudaMallocHost fija las páginas del host para que la GPU las lea directamente, lo que acelera las copias y permite solaparlas de forma asíncrona. Libere siempre la memoria con cudaFreeHost. 🔒

Gratis para empezar

Aprende C++ con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Memoria fijada con cudaMallocHost» es gratis?

Sí — el texto completo de «Memoria fijada con cudaMallocHost» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de CUDA Academy, actualiza a CoddyKit PRO. El curso de CUDA Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Memoria fijada con cudaMallocHost»?

Búferes con páginas bloqueadas para DMA rápido. Practicas CUDA Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar CUDA Academy?

No se requiere experiencia previa. CUDA Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Memoria fijada con cudaMallocHost»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de CUDA Academy?

Sí. Cada lección de CUDA Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Por qué la memoria paginable es lenta
  2. Memoria fijada con cudaMallocHost
  3. cudaMemcpyAsync en un stream
  4. La canalización de doble búfer
← Volver a CUDA Academy