Contacta con nosotros

Temario del curso

Introducción

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

Primeros pasos

  • Crear un nuevo proyecto de 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 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 leer, escribir, copiar, mapear, desmapear, ejecutar y esperar
  • Utilizar la API de OpenCL para manejar errores y excepciones

C para OpenCL (OpenCL C)

  • Comprender el papel de OpenCL C en el programa del dispositivo
  • Utilizar OpenCL C para escribir kernels que se ejecuten en el dispositivo y manipulen 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 atómicos, imágenes, 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 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 de OpenCL y los mecanismos de sincronización

Modelo de ejecución de OpenCL

  • Comprender la diferencia entre los modelos de ejecución del host y del dispositivo
  • Utilizar work-items, work-groups y 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 work-group 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 fallos comunes en 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 los tipos de datos vectoriales de OpenCL y las técnicas de vectorización para mejorar el throughput aritmético
  • Utilizar las técnicas de despliegue de bucles (loop unrolling) y fragmentación de bucles (loop tiling) en OpenCL para reducir la sobrecarga de control y aumentar la localidad
  • Utilizar la memoria local y las funciones de memoria local de OpenCL para optimizar los accesos a la memoria y el ancho de banda
  • Utilizar el perfilado 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

  • Comprender el lenguaje C/C++ y los 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

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 portable y escalable que pueda ejecutarse en diferentes plataformas y dispositivos
  • Programadores que deseen 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