CUDA Academy · Lección

Procesamiento por bloques para imágenes grandes

Solapar la E/S con el cálculo

Lección 3 de 413 pasos

Procesamiento por bloques para imágenes grandes es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 3 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.

Cuando la imagen es demasiado grande

Es posible que una imagen enorme no quepa en la memoria de la GPU o que copiarla completa bloquee el pipeline. La solución es dividirla en teselas y procesarlas por turnos. 🖼️

Dividir en bloques

Divida la imagen en bandas de filas o teselas rectangulares. Cada tesela es lo bastante pequeña como para transferirla al dispositivo, procesarla y devolverla sin sobrecargar la memoria del dispositivo.

Los tres pasos por tesela

Cada tesela sigue el mismo ritmo: copiarla al dispositivo, ejecutar el kernel y copiar el resultado de vuelta. Repita el proceso hasta completar toda la imagen.

Las teselas en serie desperdician tiempo

Si se procesan una a una, la GPU permanece inactiva durante cada copia. Para obtener un mejor rendimiento, debe solapar la transferencia de una tesela con el cálculo de otra.

Los streams permiten solapar operaciones

Envíe el trabajo de cada tesela a su propio stream. De este modo, el controlador puede ejecutar el kernel de una tesela mientras la copia de otra sigue en curso.

cudaStream_t s;
cudaStreamCreate(&s);

Se necesitan copias asíncronas

cudaMemcpy normal bloquea el host e impide el solapamiento. Use cudaMemcpyAsync en un stream para poner la copia en cola sin detenerlo todo.

cudaMemcpyAsync(d_tile, h_tile, bytes, cudaMemcpyHostToDevice, s);

Fije los buffers del host

Las transferencias asíncronas necesitan memoria del host fijada para utilizar DMA. Asigne los buffers de preparación de las teselas con cudaMallocHost; de lo contrario, el solapamiento volverá silenciosamente a un modo bloqueante.

cudaMallocHost(&h_tile, bytes);

Use doble buffer en el pipeline

Mantenga dos buffers de tesela y alterne los streams. Mientras se calcula la tesela N, se carga la tesela N+1, ocultando las transferencias detrás del trabajo en un pipeline fluido.

Píxeles de halo en los bordes de las teselas

Un desenfoque cerca del borde de una tesela necesita píxeles de la tesela vecina. Incluya un margen de solapamiento llamado halo para que los resultados de los bordes sigan siendo correctos.

Sincronice antes de guardar

El trabajo asíncrono no ha terminado cuando la llamada devuelve el control. Llame a cudaStreamSynchronize en cada stream antes de volver a leer en el host el resultado de una tesela.

cudaStreamSynchronize(s);

Imágenes grandes, GPU constante

Con teselas transmitidas mediante streams y doble buffer, la GPU se mantiene ocupada independientemente del tamaño de la imagen. Las transferencias quedan ocultas tras el cálculo y el rendimiento se mantiene alto. ⚡

Comprobación rápida

Transmite teselas en streams separados, pero no observa ningún solapamiento. ¿Qué error es más probable?

Resumen

Dividió las imágenes grandes en teselas, utilizó streams con copias asíncronas y memoria fijada para solapar operaciones, aplicó doble buffer al pipeline y añadió halos para corregir los bordes. 🎯

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 «Procesamiento por bloques para imágenes grandes» es gratis?

Sí — el texto completo de «Procesamiento por bloques para imágenes grandes» 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 «Procesamiento por bloques para imágenes grandes»?

Solapar la E/S con el cálculo 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 3 de 4.

¿Cuánto tiempo toma la lección «Procesamiento por bloques para imágenes grandes»?

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. Diseño de la canalización de procesamiento
  2. Fusión de filtros en un solo kernel
  3. Procesamiento por bloques para imágenes grandes
  4. Perfilar, optimizar y publicar
← Volver a CUDA Academy