- 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
OpenCL es un estándar abierto para la programación heterogénea que permite ejecutar un código en diferentes plataformas y dispositivos, como CPUs multicore, GPU, FPGAs y otros. OpenCL expone al programador a los detalles del hardware y da un control completo sobre el proceso de paralelización. Sin embargo, esto también requiere una buena comprensión de la arquitectura del dispositivo, el modelo de memoria, el modelo de ejecución y las técnicas de optimización.
Este entrenamiento en vivo (en línea o presencial) dirigido por un instructor está destinado a desarrolladores principiantes e intermedios que desean utilizar OpenCL para programar dispositivos heterogéneos y aprovechar su paralelismo.
Al finalizar este entrenamiento, los participantes podrán:
- Configurar un entorno de desarrollo que incluya el SDK OpenCL, un dispositivo compatible con OpenCL y Visual Studio Code.
- Crear un programa básico en OpenCL que realiza la suma vectorial en el dispositivo y recupera los resultados de la memoria del dispositivo.
- Utilizar la API de OpenCL para consultar información del dispositivo, crear contextos, colas de comandos, buffers, núcleos y eventos.
- Usar el lenguaje C de OpenCL para escribir núcleos que se ejecutan en el dispositivo y manipulan datos.
- Utilizar las funciones integradas, extensiones y bibliotecas de OpenCL para realizar tareas comunes y operaciones.
- Usar los modelos de memoria del host y del dispositivo de OpenCL para optimizar transferencias de datos y accesos a la memoria.
- Utilizar el modelo de ejecución de OpenCL para controlar los elementos de trabajo, grupos de trabajo y rangos ND.
- Depurar y probar programas en OpenCL utilizando herramientas como CodeXL, Intel VTune y NVIDIA Nsight.
- Optimizar programas en OpenCL usando técnicas como la vectorización, el despliegue de bucles, memoria local y perfilado.
Formato del Curso
- Charla interactiva y discusión.
- Muchos ejercicios y práctica.
- Implementación práctica en un entorno de laboratorio vivo.
Opciones de Personalización del Curso
- Para solicitar una formación personalizada para este curso, por favor contáctenos para acordarlo.
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
United Arab Emirates - GPU Programming with OpenCL
Qatar - GPU Programming with OpenCL
Egypt - GPU Programming with OpenCL
Saudi Arabia - GPU Programming with OpenCL
South Africa - GPU Programming with OpenCL
Brasil - GPU Programming with OpenCL
Canada - GPU Programming with OpenCL
中国 - GPU Programming with OpenCL
香港 - GPU Programming with OpenCL
澳門 - GPU Programming with OpenCL
台灣 - GPU Programming with OpenCL
USA - GPU Programming with OpenCL
Österreich - GPU Programming with OpenCL
Schweiz - GPU Programming with OpenCL
Deutschland - GPU Programming with OpenCL
Czech Republic - GPU Programming with OpenCL
Denmark - GPU Programming with OpenCL
Estonia - GPU Programming with OpenCL
Finland - GPU Programming with OpenCL
Greece - GPU Programming with OpenCL
Magyarország - GPU Programming with OpenCL
Ireland - GPU Programming with OpenCL
Luxembourg - GPU Programming with OpenCL
Latvia - GPU Programming with OpenCL
España - GPU Programming with OpenCL
Italia - GPU Programming with OpenCL
Lithuania - GPU Programming with OpenCL
Nederland - GPU Programming with OpenCL
Norway - GPU Programming with OpenCL
Portugal - GPU Programming with OpenCL
România - GPU Programming with OpenCL
Sverige - GPU Programming with OpenCL
Türkiye - GPU Programming with OpenCL
Malta - GPU Programming with OpenCL
Belgique - GPU Programming with OpenCL
France - GPU Programming with OpenCL
日本 - GPU Programming with OpenCL
Australia - GPU Programming with OpenCL
Malaysia - GPU Programming with OpenCL
New Zealand - GPU Programming with OpenCL
Philippines - GPU Programming with OpenCL
Singapore - GPU Programming with OpenCL
Thailand - GPU Programming with OpenCL
Vietnam - GPU Programming with OpenCL
India - GPU Programming with OpenCL
Argentina - GPU Programming with OpenCL
Chile - GPU Programming with OpenCL
Costa Rica - GPU Programming with OpenCL
Ecuador - GPU Programming with OpenCL
Guatemala - GPU Programming with OpenCL
Colombia - GPU Programming with OpenCL
México - GPU Programming with OpenCL
Panama - GPU Programming with OpenCL
Peru - GPU Programming with OpenCL
Uruguay - GPU Programming with OpenCL
Venezuela - GPU Programming with OpenCL
Polska - GPU Programming with OpenCL
United Kingdom - GPU Programming with OpenCL
South Korea - GPU Programming with OpenCL
Pakistan - GPU Programming with OpenCL
Sri Lanka - GPU Programming with OpenCL
Bulgaria - GPU Programming with OpenCL
Bolivia - GPU Programming with OpenCL
Indonesia - GPU Programming with OpenCL
Kazakhstan - GPU Programming with OpenCL
Moldova - GPU Programming with OpenCL
Morocco - GPU Programming with OpenCL
Tunisia - GPU Programming with OpenCL
Kuwait - GPU Programming with OpenCL
Oman - GPU Programming with OpenCL
Slovakia - GPU Programming with OpenCL
Kenya - GPU Programming with OpenCL
Nigeria - GPU Programming with OpenCL
Botswana - GPU Programming with OpenCL
Slovenia - GPU Programming with OpenCL
Croatia - GPU Programming with OpenCL
Serbia - GPU Programming with OpenCL
Bhutan - GPU Programming with OpenCL