План на курса

Въведение

  • Какво е OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Обзор на възможностите и архитектурата на OpenCL
  • Настройка на средата за разработка

Започване

  • Създаване на нов проект OpenCL с Visual Studio Code
  • Разглеждане на структурата и файловете на проекта
  • Компилиране и изпълнение на програмата
  • Извеждане на изхода с printf и fprintf

OpenCL API

  • Разбиране на ролята на OpenCL API в хост програмата
  • Използване на OpenCL API за получаване на информация и възможности на устройството
  • Използване на OpenCL API за създаване на контексти, редове с команди, буфери, ядра и събития
  • Използване на OpenCL API за очакване на команди, като четене, писане, копиране, мапиране, демонтаж, изпълнение и очакване
  • Използване на OpenCL API за обработка на грешки и изключения

OpenCL C

  • Разбиране на ролята на OpenCL C в програмата на устройството
  • Използване на OpenCL C за писане на ядра, които се изпълняват на устройството и манипулират данни
  • Използване на типове данни, квалификатори, оператори и изрази в OpenCL C
  • Използване на вградени функции в OpenCL C, като математически, геометрични, релационни и др.
  • Използване на разширения и библиотеки в OpenCL C, като атомни, изображения, cl_khr_fp16 и др.

Модел на паметта в OpenCL

  • Разбиране на разликите между моделите на паметта на хоста и устройството
  • Използване на пространства на паметта в OpenCL, като глобална, локална, константна и частна
  • Използване на обекти на паметта в OpenCL, като буфери, изображения и тръби
  • Използване на режими на достъп до паметта в OpenCL, като само за четене, само за писане, четене и писане и др.
  • Използване на модела на състоянието на паметта в OpenCL и механизми за синхронизация

Модел на изпълнението в OpenCL

  • Разбиране на разликите между моделите на изпълнение на хоста и устройството
  • Използване на елементи на работа, групи на работа и ND-обсега за определяване на паралелизма
  • Използване на функции на елементите на работа в OpenCL, като get_global_id, get_local_id, get_group_id и др.
  • Използване на функции на групите на работа в OpenCL, като барьер, work_group_reduce, work_group_scan и др.
  • Използване на функции на устройството в OpenCL, като get_num_groups, get_global_size, get_local_size и др.

Отстраняване на грешки

  • Разбиране на обикновените грешки и проблеми в програмите на OpenCL
  • Използване на отладчик Visual Studio Code за преглеждане на променливи, точки за спряне, стек на извиквания и др.
  • Използване на CodeXL за отстраняване на грешки и анализ на програмите на OpenCL на устройства на AMD
  • Използване на Intel VTune за отстраняване на грешки и анализ на програмите на OpenCL на устройства на Intel
  • Използване на NVIDIA Nsight за отстраняване на грешки и анализ на програмите на OpenCL на устройства на NVIDIA

Оптимизация

  • Разбиране на факторите, които влияят на производителността на програмите на OpenCL
  • Използване на векторни типове данни и техники за векторна оптимизация в OpenCL за подобряване на аритметичната скорост
  • Използване на техники за развъртване на цикли и подреждане на цикли в OpenCL за намаляване на натоварването с управление и повишаване на локалността
  • Използване на локална памет и функции на локална памет в OpenCL за оптимизация на достъпа до паметта и лентата
  • Използване на профилиране и инструменти за профилиране в OpenCL за измерване и подобряване на времето на изпълнение и използването на ресурсите

Резюме и следващи стъпки

Изисквания

  • Разбиране на езика C/C++ и концепции за паралелно програмиране
  • Основни знания за компютърна архитектура и йерархия на паметта
  • Опит с инструменти за командния ред и редактиране на код

Целева група

  • Разработчици, които искат да научат как да използват OpenCL, за да програмират разнообразни устройства и да използваят тяхното паралелно обработване
  • Разработчици, които искат да пишат портнабилен и мащабируем код, който може да работи на различни платформи и устройства
  • Програмисти, които искат да разгледат ниско ниво аспекти на разнообразно програмиране и да оптимизират изпълнението на кода си
 28 Часа

Брой участници


Цена за участник

Предстоящи Курсове

Свързани Kатегории