Course Code: gpuprogopencl
Duration: 28 hours
Prerequisites:
  • 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
Overview:

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.
Course Outline:

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

Sites Published:

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

Nepal - GPU Programming with OpenCL

Uzbekistan - GPU Programming with OpenCL