Благодарим ви, че изпратихте вашето запитване! Един от членовете на нашия екип ще се свърже с вас скоро.
Благодарим ви, че направихте своята резервация! Един от членовете на нашия екип ще се свърже с вас скоро.
План на курса
Въведение
- Какво е OpenCL?
- OpenCL срещу CUDA срещу SYCL
- Преглед на OpenCL функции и архитектура
- Създаване на среда за разработка
Приготвяме се да започнем
- Създаване на нов OpenCL проект с помощта на Visual Studio код
- Проучване на структурата и файловете на проекта
- Компилиране и изпълнение на програмата
- Показване на изхода с помощта на printf и fprintf
OpenCL API
- Разбиране на ролята на OpenCL API в хост програмата
- Използване на OpenCL API за заявка на информация и възможности на устройството
- Използване на OpenCL API за създаване на контексти, опашки от команди, буфери, ядра и събития
- Използване на OpenCL API за поставяне на команди в опашката, като четене, писане, копиране, картографиране, декартиране, изпълнение и изчакване
- Използване на OpenCL API за обработка на грешки и изключения
OpenCL В
- Разбиране на ролята на OpenCL C в програмата на устройството
- Използване на OpenCL C за писане на ядра, които се изпълняват на устройството и манипулират данни
- Използване на OpenCL C типове данни, квалификатори, оператори и изрази
- Използване на OpenCL C вградени функции, като математически, геометрични, релационни и др.
- Използване на OpenCL C разширения и библиотеки, като atomic, image, cl_khr_fp16 и др.
OpenCL Модел на паметта
- Разбиране на разликата между моделите памет на хост и устройство
- Използване на 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 програма за отстраняване на грешки в код за проверка на променливи, точки на прекъсване, стек на повиквания и т.н.
- Използване на CodeXL за отстраняване на грешки и анализ на OpenCL програми на AMD устройства
- Използване на Intel VTune за отстраняване на грешки и анализ на OpenCL програми на устройства на Intel
- Използване на NVIDIA Nsight за отстраняване на грешки и анализ на OpenCL програми на NVIDIA устройства
Оптимизация
- Разбиране на факторите, които влияят на производителността на OpenCL програми
- Използване на OpenCL векторни типове данни и техники за векторизация за подобряване на аритметичната производителност
- Използване на OpenCL техники за разгръщане и подреждане на цикъла за намаляване на контрола и увеличаване на локалността
- Използване на OpenCL локална памет и функции на локалната памет за оптимизиране на достъпа до паметта и честотната лента
- Използване на OpenCL профилиране и инструменти за профилиране за измерване и подобряване на времето за изпълнение и използването на ресурсите
Обобщение и следващи стъпки
Изисквания
- Разбиране на езика C/C++ и концепциите за паралелно програмиране
- Основни познания за компютърната архитектура и йерархията на паметта
- Опит с инструменти за команден ред и редактори на код
Публика
- Разработчици, които искат да се научат как да използват OpenCL за програмиране на хетерогенни устройства и да използват техния паралелизъм
- Разработчици, които искат да напишат преносим и мащабируем код, който може да работи на различни платформи и устройства
- Програмисти, които желаят да изследват аспектите на ниско ниво на разнородното програмиране и да оптимизират производителността на своя код
28 Часа