0Pricing
CUDA Academy · Lección

Preparar el lado del host

Reserve, copie, lance, copie de vuelta y libere.

Preparar el lado del host 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.

El host también tiene una tarea

El kernel realiza las operaciones, pero la CPU del host prepara todo. Su tarea es asignar, copiar los datos de entrada, lanzar, copiar los resultados y liberar. 🧩

Dos conjuntos de punteros

Mantiene punteros del host para los arreglos de la CPU y punteros del dispositivo independientes para los búferes de la GPU. Una convención habitual es llamarlos h_A y d_A.

float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;

Complete la entrada en la CPU

Primero prepare los datos en la memoria normal del host. Aquí solo debe inicializar h_A y h_B con los valores que la GPU sumará después.

for (int i = 0; i < n; i++) {
    h_A[i] = i; h_B[i] = 2 * i;
}

Asigne memoria en el dispositivo

La GPU necesita sus propios búferes, así que llame a cudaMalloc para cada arreglo. Recuerde que el tamaño se indica en bytes, calculado como el número de elementos multiplicado por sizeof(float).

size_t bytes = n * sizeof(float);
cudaMalloc(&d_A, bytes);

Copie las entradas

Mueva los arreglos de entrada a la GPU con cudaMemcpy y la dirección HostToDevice. El kernel solo puede ver los datos que están en el dispositivo.

cudaMemcpy(d_A, h_A, bytes, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, bytes, cudaMemcpyHostToDevice);

Decida la configuración del lanzamiento

Elija el número de threads por bloque y después calcule cuántos bloques cubren todos los elementos. Redondear hacia arriba garantiza que cada elemento tenga un thread.

int threads = 256;
int blocks = (n + threads - 1) / threads;

Lance el kernel

Ahora ejecute el kernel con la sintaxis de triple signo menor que, pasando los punteros del dispositivo. Esta llamada retorna inmediatamente mientras la GPU trabaja.

vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);

Copie el resultado de vuelta

Cuando el kernel termine, traiga C de vuelta con cudaMemcpyDeviceToHost. Esta copia también espera primero a que termine el lanzamiento.

cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);

Libere la memoria del dispositivo

La memoria de la GPU no se libera mediante recolección de basura, así que libere cada búfer con cudaFree. Omitir este paso provoca una fuga de memoria que dura hasta que termina el proceso.

cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);

El orden es sagrado

Siga siempre la misma secuencia: asignar, copiar las entradas, lanzar, copiar de vuelta y liberar. Si cambia los pasos, el kernel leerá datos obsoletos o no válidos.

El código del host es C++ normal

Observe que el lado del host es C++ normal más unas cuantas llamadas a cuda. No hay magia especial del compilador aparte del lanzamiento del kernel.

Comprobación rápida

¿Qué debe ocurrir antes de poder lanzar el kernel vecAdd?

Repaso

Ha conectado de principio a fin el lado del host: dos conjuntos de punteros, cudaMalloc, copia de subida, lanzamiento, copia de vuelta y cudaFree. El código repetitivo que da soporte a cada kernel. ✅

Preguntas frecuentes

¿La lección «Preparar el lado del host» es gratis?

Sí — el texto completo de «Preparar el lado del host» 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 «Preparar el lado del host»?

Reserve, copie, lance, copie de vuelta y libere. 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 «Preparar el lado del host»?

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. El kernel de suma de vectores
  2. Preparar el lado del host
  3. Verificar el resultado en la CPU
  4. Medir su primera aceleración
← Volver a CUDA Academy