Благодарим ви, че изпратихте вашето запитване! Един от членовете на нашия екип ще се свърже с вас скоро.
Благодарим ви, че направихте своята резервация! Един от членовете на нашия екип ще се свърже с вас скоро.
Съдържание и теми, включени в курса
Въведение
- Какво е OpenCL?
- OpenCL срещу CUDA срещу 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, като atomic, image, cl_khr_fp16 и др.
Модел на паметта в OpenCL
- Разбиране на разликата между моделите на паметта на хоста и устройството
- Използване на пространствата на паметта в OpenCL, като глобално, локално, константно и частно
- Използване на обекти на паметта в OpenCL, като буфери, изображения и канали
- Използване на режими на достъп до паметта в OpenCL, като само за четене, само за запис, за четене и запис и др.
- Използване на модела за консистентност на паметта и механизмите за синхронизация в OpenCL
Модел на изпълнение в OpenCL
- Разбиране на разликата между моделите на изпълнение на хоста и устройството
- Използване на работни елементи, работни групи и ND-диапазони в OpenCL за дефиниране на паралелизма
- Използване на функции за работни елементи в OpenCL, като get_global_id, get_local_id, get_group_id и др.
- Използване на функции за работни групи в OpenCL, като barrier, 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 за намаляване на контролния overhead и увеличаване на локалността
- Използване на локална памет и функции за локална памет в OpenCL за оптимизиране на достъпите до паметта и честотната лента
- Използване на профилиране и инструменти за профилиране в OpenCL за измерване и подобряване на времето за изпълнение и използването на ресурсите
Обобщение и следващи стъпки
Изисквания
- Разбиране на езика C/C++ и концепциите за паралелно програмиране
- Основни познания за компютърна архитектура и йерархия на паметта
- Опит с инструменти на командния ред и редактори на код
Аудитория
- Разработчици, които желаят да научат как да използват OpenCL за програмиране на хетерогенни устройства и да се възползват от техния паралелизъм
- Разработчици, които желаят да пишат преносим и мащабируем код, който може да работи на различни платформи и устройства
- Програмисти, които желаят да изследват нисконивовите аспекти на хетерогенното програмиране и да оптимизират производителността на своя код
28 Часа