CUDA Academy · Lección

Anatomía de un kernel

Firma, tipo de retorno y la regla de void.

Lección 1 de 413 pasos

Anatomía de un kernel 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.

Qué es un kernel

Un kernel es una única función de C++ que se ejecuta en la GPU mediante miles de hilos a la vez. Usted la escribe una vez y el hardware la distribuye. 🚀

El marcador __global__

Marque un kernel con el calificador __global__. Esto indica a nvcc que la función se llama desde la CPU, pero se ejecuta realmente en el dispositivo.

__global__ void myKernel() {
    // runs on the GPU
}

Los kernels devuelven void

Todo kernel debe devolver void. No hay ningún valor de retorno que entregar, así que los resultados salen mediante punteros a la memoria del dispositivo.

__global__ void k() { /* void only */ }

¿Por qué no devolver un valor?

Miles de hilos ejecutan el kernel conjuntamente, por lo que un único valor de retorno no tendría sentido. Cada hilo escribe en su propia posición de un array de salida.

Los parámetros se pasan por valor

Los parámetros del kernel se copian en cada hilo, así que pase elementos pequeños: enteros, tamaños y punteros. Nunca pase objetos grandes por valor.

__global__ void add(float* out, float* a, int n) {}

Pase punteros, no arrays

Para proporcionar un array a un kernel, pase un puntero al dispositivo. El kernel lee y escribe en la memoria de la GPU a la que apunta ese puntero.

__global__ void scale(float* data, float k) {}

Cada hilo elige su trabajo

El mismo código se ejecuta en cada hilo, así que cada uno utiliza su índice para decidir qué elemento debe tocar. Así, una función puede abarcar un array completo.

int i = threadIdx.x; // who am I?

Un kernel completo y pequeño

Aquí tiene un kernel completo: duplica un elemento por hilo. Observe el marcador __global__, el retorno void y el parámetro de tipo puntero juntos.

__global__ void doubleIt(float* x) {
    int i = threadIdx.x;
    x[i] = x[i] * 2.0f;
}

El código del host permanece separado

Su función habitual de la CPU, normalmente main, es código del host. Configura todo y después solicita a la GPU que ejecute el kernel.

int main() {
    // host side: prepare and launch
}

Sin recursión ni sorpresas de E/S

Un kernel se ejecuta en un hardware con reglas estrictas, así que manténgalo sencillo: evite la recursión profunda y las llamadas pesadas a la biblioteca estándar.

Cómo nombrar sus kernels

Trate un kernel como cualquier función: asígnele un nombre claro basado en un verbo, como vectorAdd. Los buenos nombres hacen que los lanzamientos sean mucho más fáciles de leer.

__global__ void vectorAdd(float* c, float* a, float* b);

Comprobación rápida

Comprobemos las reglas de la signatura de un kernel.

Resumen: anatomía de un kernel

Un kernel es una función __global__ void ejecutada por muchos hilos. Pase punteros y valores pequeños, y deje que cada hilo use su índice. ¡Muy bien! 🎉

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 «Anatomía de un kernel» es gratis?

Sí — el texto completo de «Anatomía de un kernel» 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 «Anatomía de un kernel»?

Firma, tipo de retorno y la regla de void. 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 «Anatomía de un kernel»?

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. Anatomía de un kernel
  2. El lanzamiento con triple ángulo
  3. printf dentro de un kernel
  4. Explicación de cudaDeviceSynchronize
← Volver a CUDA Academy