Благодарим ви, че изпратихте вашето запитване! Един от членовете на нашия екип ще се свърже с вас скоро.
Благодарим ви, че направихте своята резервация! Един от членовете на нашия екип ще се свърже с вас скоро.
План на курса
Въведение
- Какво е 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 Часа