Contacta con nosotros

Temario del curso

Introducción

  • ¿Qué es OpenCL?
  • OpenCL frente a CUDA frente a SYCL
  • Visión general de las características y arquitectura de OpenCL
  • Configuración del entorno de desarrollo

Primeros pasos

  • Creación de un nuevo proyecto de OpenCL utilizando Visual Studio Code
  • Exploración de la estructura del proyecto y los archivos
  • Compilación y ejecución del programa
  • Visualización de la salida mediante printf y fprintf

API de OpenCL

  • Comprensión del papel de la API de OpenCL en el programa host
  • Uso de la API de OpenCL para consultar información y capacidades del dispositivo
  • Uso de la API de OpenCL para crear contextos, colas de comandos, búferes, núcleos (kernels) y eventos
  • Uso de la API de OpenCL para encolar comandos, como leer, escribir, copiar, mapear, desmapear, ejecutar y esperar
  • Uso de la API de OpenCL para gestionar errores y excepciones

OpenCL C

  • Comprensión del papel de OpenCL C en el programa del dispositivo
  • Uso de OpenCL C para escribir núcleos (kernels) que se ejecuten en el dispositivo y manipulen datos
  • Uso de tipos de datos, calificadores, operadores y expresiones de OpenCL C
  • Empleo de funciones integradas de OpenCL C, como las matemáticas, geométricas, relacionales, etc.
  • Uso de extensiones y bibliotecas de OpenCL C, como atomic, image, cl_khr_fp16, etc.

Modelo de memoria de OpenCL

  • Comprensión de las diferencias entre los modelos de memoria del host y del dispositivo
  • Uso de los espacios de memoria de OpenCL, como global, local, constante y privado
  • Empleo de objetos de memoria de OpenCL, como búferes, imágenes y tuberías (pipes)
  • Uso de los modos de acceso a la memoria de OpenCL, como solo lectura, solo escritura, lectura-escritura, etc.
  • Aplicación del modelo de consistencia de memoria y mecanismos de sincronización de OpenCL

Modelo de ejecución de OpenCL

  • Comprensión de las diferencias entre los modelos de ejecución del host y del dispositivo
  • Uso de work-items, work-groups y rangos ND de OpenCL para definir el paralelismo
  • Empleo de funciones de work-item de OpenCL, como get_global_id, get_local_id, get_group_id, etc.
  • Uso de funciones de work-group de OpenCL, como barrier, work_group_reduce, work_group_scan, etc.
  • Empleo de funciones del dispositivo en OpenCL, como get_num_groups, get_global_size, get_local_size, etc.

Depuración

  • Comprensión de los errores y fallos comunes en programas de OpenCL
  • Uso del depurador de Visual Studio Code para inspeccionar variables, puntos de interrupción, pila de llamadas, etc.
  • Empleo de CodeXL para depurar y analizar programas de OpenCL en dispositivos AMD
  • Uso de Intel VTune para depurar y analizar programas de OpenCL en dispositivos Intel
  • Empleo de NVIDIA Nsight para depurar y analizar programas de OpenCL en dispositivos NVIDIA

Optimización

  • Comprensión de los factores que afectan el rendimiento de los programas de OpenCL
  • Uso de tipos de datos vectoriales y técnicas de vectorización de OpenCL para mejorar la capacidad de procesamiento aritmético
  • Empleo de técnicas de desenrollado de bucles (loop unrolling) y segmentación de bucles (loop tiling) en OpenCL para reducir la sobrecarga del control y aumentar la localidad
  • Uso de memoria local y funciones de memoria local en OpenCL para optimizar los accesos a la memoria y el ancho de banda
  • Empleo de la profilación de OpenCL y herramientas de perfilado 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 de los 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 deseen aprender a usar OpenCL para programar dispositivos heterogéneos y explotar su paralelismo.
  • Desarrolladores que quieran escribir código portátil y escalable, capaz de ejecutarse en distintas plataformas y dispositivos.
  • Programadores interesados en explorar los aspectos de bajo nivel de la programación heterogénea y optimizar el rendimiento de su código.
 28 Horas

Número de participantes


Precio por participante

Próximos cursos

Categorías Relacionadas