Programa del Curso

Introducción

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

Empezar

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

OpenCL API

  • Descripción de la función de la API OpenCL en el programa host
  • Uso de la API OpenCL para consultar la información y las capacidades del dispositivo
  • Uso de la API OpenCL para crear contextos, colas de comandos, búferes, kernels y eventos
  • Uso de la API OpenCL para poner en cola comandos, como leer, escribir, copiar, asignar, anular asignación, ejecutar y esperar
  • Uso de la API OpenCL para controlar errores y excepciones

OpenCL C

  • Comprender el papel de OpenCL C en el programa del dispositivo
  • Uso de OpenCL C para escribir kernels que se ejecutan en el dispositivo y manipulan datos
  • Uso de tipos de datos, calificadores, operadores y expresiones OpenCL C
  • Usando OpenCL funciones integradas en C, como matemáticas, geométricas, relacionales, etc.
  • Uso de OpenCL extensiones y bibliotecas de C, como atomic, image, cl_khr_fp16, etc.

OpenCL Modelo de memoria

  • Descripción de la diferencia entre los modelos de memoria de host y de dispositivo
  • Uso de OpenCL espacios de memoria, como global, local, constante y privado
  • Uso de OpenCL objetos de memoria, como búferes, imágenes y canalizaciones
  • Uso de OpenCL modos de acceso a memoria, como solo lectura, solo escritura, lectura-escritura, etc.
  • Uso de OpenCL modelo de coherencia de memoria y mecanismos de sincronización

OpenCL Modelo de ejecución

  • Descripción de la diferencia entre los modelos de ejecución de host y dispositivo
  • Uso de OpenCL elementos de trabajo, grupos de trabajo e intervalos ND para definir el paralelismo
  • Uso de OpenCL funciones de elemento de trabajo, como get_global_id, get_local_id, get_group_id, etc.
  • Uso de OpenCL funciones de grupo de trabajo, como barrera, work_group_reduce, work_group_scan, etc.
  • Uso de OpenCL funciones del dispositivo, como get_num_groups, get_global_size, get_local_size, etc.

Depuración

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

Optimización

  • Comprender los factores que afectan el rendimiento de los programas OpenCL
  • Uso de OpenCL tipos de datos vectoriales y técnicas de vectorización para mejorar el rendimiento aritmético
  • Uso de técnicas de desenrollado de bucles OpenCL y mosaicos de bucles para reducir la sobrecarga de control y aumentar la localidad
  • Uso de OpenCL memoria local y funciones de memoria local para optimizar los accesos a la memoria y el ancho de banda
  • Uso de OpenCL herramientas de generación de perfiles y generación de perfiles 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 de computadores y jerarquía de memoria
  • Experiencia con herramientas de línea de comandos y editores de código

Audiencia

  • Desarrolladores que deseen aprender a usar OpenCL para programar dispositivos heterogéneos y explotar su paralelismo
  • Desarrolladores que deseen escribir código portátil 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

Testimonios (1)

Cursos Relacionados

AMD GPU Programming

28 horas

Introduction to GPU Programming

21 horas

GPU Programming with CUDA

28 horas

GPU Programming - OpenCL vs CUDA vs ROCm

28 horas

ROCm for Windows

21 horas

Categorías Relacionadas