Gracias por enviar su consulta! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
Gracias por enviar su reserva! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
Programa del Curso
Introducción
- ¿Qué es OpenCL?
- OpenCL vs CUDA vs SYCL
- Visión general de las características y arquitectura de OpenCL
- Configuración del entorno de desarrollo
Empezando
- Crear un nuevo proyecto OpenCL usando Visual Studio Code
- Explorar la estructura y los archivos del proyecto
- Compilar y ejecutar el programa
- Mostrar la salida utilizando printf y fprintf
API de OpenCL
- Comprender el papel de la API de OpenCL en el programa del host
- Usar la API de OpenCL para consultar información y capacidades del dispositivo
- Usar la API de OpenCL para crear contextos, colas de comandos, búferes, núcleos e eventos
- Usar la API de OpenCL para encolar comandos como lectura, escritura, copia, mapeo, desmapado, ejecución y espera
- Usar la API de OpenCL para manejar errores y excepciones
OpenCL C
- Comprender el papel del lenguaje OpenCL C en el programa del dispositivo
- Usar OpenCL C para escribir núcleos que se ejecutan en el dispositivo y manipulan datos
- Usar tipos de datos, calificadores, operadores y expresiones en OpenCL C
- Usar funciones incorporadas de OpenCL C como matemáticas, geométricas, relacionales, etc.
- Usar extensiones y bibliotecas de OpenCL C como atomics, image, cl_khr_fp16, entre otras
Modelo de Memoria de OpenCL
- Comprender la diferencia entre los modelos de memoria del host y el dispositivo
- Usar espacios de memoria de OpenCL, como global, local, constante y privada
- Usar objetos de memoria de OpenCL, como búferes, imágenes y tuberías
- Usar modos de acceso a la memoria de OpenCL, como solo lectura, solo escritura, lectura-escritura, etc.
- Usar el modelo de coherencia de memoria de OpenCL y mecanismos de sincronización
Modelo de Ejecución de OpenCL
- Comprender la diferencia entre los modelos de ejecución del host y el dispositivo
- Usar elementos de trabajo, grupos de trabajo y rangos ND para definir la paralelización
- Usar funciones de elementos de trabajo en OpenCL, como get_global_id, get_local_id, get_group_id, etc.
- Usar funciones de grupo de trabajo en OpenCL, como barrier, work_group_reduce, work_group_scan, etc.
- Usar funciones del dispositivo en OpenCL, como get_num_groups, get_global_size, get_local_size, etc.
Depuración
- Comprender los errores y bugs comunes en programas de OpenCL
- Usar el depurador de Visual Studio Code para inspeccionar variables, puntos de interrupción, pila de llamadas, etc.
- Usar CodeXL para depurar y analizar programas de OpenCL en dispositivos AMD
- Usar Intel VTune para depurar y analizar programas de OpenCL en dispositivos Intel
- Usar NVIDIA Nsight para depurar y analizar programas de OpenCL en dispositivos NVIDIA
Optimización
- Comprender los factores que afectan el rendimiento de los programas de OpenCL
- Usar tipos de datos y técnicas de vectorización en OpenCL para mejorar la eficiencia aritmética
- Usar técnicas de desenrollado de bucles y tiling de bucles en OpenCL para reducir el sobrecoste de control e incrementar la localidad
- Usar memoria local y funciones de memoria local en OpenCL para optimizar los accesos a la memoria y la ancho de banda
- Usar perfilado y herramientas de perfilado en OpenCL para medir e incrementar el tiempo de ejecución y la utilización de recursos
Resumen y Próximos Pasos
Requerimientos
- Un entendimiento del lenguaje C/C++ y conceptos de programación paralela
- Conocimientos básicos de arquitectura de computadoras y jerarquía de memoria
- Experiencia con herramientas de línea de comandos y editores de código
Publido Objetivo
- Desarrolladores que desean aprender a utilizar OpenCL para programar dispositivos heterogéneos y aprovechar su paralelismo
- Desarrolladores que deseen escribir código portable y escalable que pueda ejecutarse en diferentes plataformas y dispositivos
- Programadores que desean explorar los aspectos de bajo nivel del programación heterogénea y optimizar el rendimiento de su código
28 Horas