0Pricing
CUDA Academy · Lección

Por qué la memoria paginable es lenta

Búferes intermedios detrás de un malloc convencional.

Por qué la memoria paginable es lenta es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 1 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.

Dónde se encuentran sus datos

Los búferes normales de C++ procedentes de malloc se encuentran en memoria paginable del host. Parece una opción gratuita, pero la GPU no puede copiar desde ella directamente, y ese pequeño detalle le hace perder velocidad.

Qué significa paginable

La memoria es paginable cuando el sistema operativo puede mover sus páginas o intercambiarlas al disco en cualquier momento. Es flexible, pero problemática para el hardware que necesita direcciones fijas.

La GPU utiliza DMA

La GPU obtiene los datos mediante DMA, una transferencia directa de hardware que necesita una dirección física que no cambie. Las páginas paginables incumplen esa condición, por lo que no se pueden usar directamente.

El paso oculto de almacenamiento provisional

Para evitar este problema, el controlador copia primero el búfer paginable a un búfer oculto de almacenamiento provisional y después lo envía a la GPU. Usted paga una copia adicional que nunca escribió. 😮

Dos copias, no una

Por tanto, un solo cudaMemcpy desde memoria paginable en realidad son dos copias: del host al almacenamiento provisional y después de este al dispositivo. Ese trabajo duplicado explica exactamente por qué las transferencias paginables parecen tan lentas.

Un malloc normal

Este es el búfer que todo el mundo utiliza primero. Funciona, pero cada transferencia desde h_data pasa silenciosamente por ese desvío de almacenamiento provisional.

float* h_data = (float*)malloc(N * sizeof(float));
cudaMemcpy(d_data, h_data, bytes, cudaMemcpyHostToDevice);

Por qué le importa al sistema operativo

El sistema operativo mantiene la memoria paginable para poder sobreasignar la RAM y atender a muchos programas a la vez. Esa comodidad es lo que impide que la GPU lea sus páginas directamente.

Ancho de banda que pierde

Las transferencias paginables a menudo alcanzan solo la mitad del ancho de banda máximo del enlace. La copia de almacenamiento provisional consume ciclos de CPU y tráfico de memoria que las transferencias reales podrían haber aprovechado.

También impide el solapamiento

Como la copia de almacenamiento provisional es síncrona, las transferencias paginables no pueden solaparse realmente con los kernels. Pierde los trucos asíncronos que hacen útiles los streams.

Cuándo sigue siendo un problema

En una sola copia pequeña, nadie lo nota. Pero en un bucle que envía datos en cada iteración, el coste del almacenamiento provisional se acumula y termina dominando silenciosamente el tiempo de ejecución.

La solución está por llegar

La solución consiste en pedirle a CUDA un búfer que no pueda paginarse, llamado memoria pinned. La GPU lo lee directamente, sin búfer intermedio ni copia duplicada.

Comprobación rápida

¿Por qué una transferencia desde memoria paginable ordinaria es más lenta de lo necesario?

Resumen

Los búferes paginables pueden moverse, por lo que la GPU no puede acceder a ellos directamente mediante DMA. El controlador primero crea una copia intermedia, duplicando la copia. La solución que veremos es la memoria pinned. 🚀

Preguntas frecuentes

¿La lección «Por qué la memoria paginable es lenta» es gratis?

Sí — el texto completo de «Por qué la memoria paginable es lenta» 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 «Por qué la memoria paginable es lenta»?

Búferes intermedios detrás de un malloc convencional. 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 1 de 4.

¿Cuánto tiempo toma la lección «Por qué la memoria paginable es lenta»?

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