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.
Temario del curso
Introducción
- ¿Qué es OpenCL?
- OpenCL frente a CUDA frente a SYCL
- Resumen de las características y arquitectura de OpenCL
- Configuración del entorno de desarrollo
Primeros pasos
- Crear un nuevo proyecto de OpenCL utilizando Visual Studio Code
- Explorar la estructura y los archivos del proyecto
- Compilar y ejecutar el programa
- Mostrar la salida mediante printf y fprintf
API de OpenCL
- Comprender el papel de la API de OpenCL en el programa host
- Utilizar la API de OpenCL para consultar información y capacidades del dispositivo
- Utilizar la API de OpenCL para crear contextos, colas de comandos, buffers, kernels y eventos
- Utilizar la API de OpenCL para encolar comandos, como lectura, escritura, copia, mapeo, desmapeo, ejecución y espera
- Utilizar la API de OpenCL para manejar errores y excepciones
OpenCL C
- Comprender el papel de OpenCL C en el programa del dispositivo
- Utilizar OpenCL C para escribir kernels que se ejecutan en el dispositivo y manipulan datos
- Utilizar los tipos de datos, calificadores, operadores y expresiones de OpenCL C
- Utilizar las funciones integradas de OpenCL C, como matemáticas, geométricas, relacionales, etc.
- Utilizar extensiones y bibliotecas de OpenCL C, como atomic, image, cl_khr_fp16, etc.
Modelo de memoria de OpenCL
- Comprender la diferencia entre los modelos de memoria del host y del dispositivo
- Utilizar los espacios de memoria de OpenCL, como global, local, constante y privado
- Utilizar los objetos de memoria de OpenCL, como buffers, imágenes y tuberías (pipes)
- Utilizar los modos de acceso a la memoria de OpenCL, como solo lectura, solo escritura, lectura/escritura, etc.
- Utilizar el modelo de consistencia de memoria y los mecanismos de sincronización de OpenCL
Modelo de ejecución de OpenCL
- Comprender la diferencia entre los modelos de ejecución del host y del dispositivo
- Utilizar work-items, grupos de trabajo (work-groups) y rangos ND (ND-ranges) de OpenCL para definir el paralelismo
- Utilizar las funciones de work-item de OpenCL, como get_global_id, get_local_id, get_group_id, etc.
- Utilizar las funciones de grupo de trabajo de OpenCL, como barrier, work_group_reduce, work_group_scan, etc.
- Utilizar las funciones del dispositivo de OpenCL, como get_num_groups, get_global_size, get_local_size, etc.
Depuración
- Comprender los errores y errores comunes en los programas de OpenCL
- Utilizar el depurador de Visual Studio Code para inspeccionar variables, puntos de interrupción, pila de llamadas, etc.
- Utilizar CodeXL para depurar y analizar programas de OpenCL en dispositivos AMD
- Utilizar Intel VTune para depurar y analizar programas de OpenCL en dispositivos Intel
- Utilizar 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
- Utilizar tipos de datos vectoriales y técnicas de vectorización de OpenCL para mejorar el rendimiento aritmético
- Utilizar técnicas de desenrollado de bucles (loop unrolling) y partición de bucles (loop tiling) de OpenCL para reducir la sobrecarga del control y aumentar la localidad
- Utilizar la memoria local y las funciones de memoria local de OpenCL para optimizar el acceso a la memoria y el ancho de banda
- Utilizar el perfilado (profiling) y las herramientas de perfilado de OpenCL para medir y mejorar el tiempo de ejecución y la utilización de recursos
Resumen y próximos pasos
Requerimientos
- Comprensión del lenguaje C/C++ y conceptos de programación paralela
- Conocimientos básicos de arquitectura informática y jerarquía de memoria
- Experiencia con herramientas de línea de comandos y editores de código
Público objetivo
- Desarrolladores que desean aprender a utilizar OpenCL para programar dispositivos heterogéneos y explotar su paralelismo
- Desarrolladores que desean escribir código portátil y escalable que pueda ejecutarse en diferentes plataformas y dispositivos
- Programadores que desean explorar los aspectos de bajo nivel de la programación heterogénea y optimizar el rendimiento de su código
28 Horas