Благодарим ви, че изпратихте вашето запитване! Един от членовете на нашия екип ще се свърже с вас скоро.
Благодарим ви, че направихте своята резервация! Един от членовете на нашия екип ще се свърже с вас скоро.
Съдържание и теми, включени в курса
Въведение
- Какво е CUDA?
- CUDA срещу OpenCL срещу SYCL
- Преглед на характеристиките и архитектурата на CUDA
- Настройка на средата за разработка
Първи стъпки
- Създаване на нов CUDA проект с помощта на Visual Studio Code
- Проучване на структурата и файловете на проекта
- Компилиране и изпълнение на програмата
- Показване на изхода чрез printf и fprintf
CUDA API
- Разбиране на ролята на CUDA API в хост програмата
- Използване на CUDA API за запитване на информация и възможности на устройството
- Използване на CUDA API за заделяне и освобождаване на памет на устройството
- Използване на CUDA API за копиране на данни между хоста и устройството
- Използване на CUDA API за стартиране на ядра и синхронизиране на нишките
- Използване на CUDA API за обработка на грешки и изключения
CUDA C/C++
- Разбиране на ролята на CUDA C/C++ в програмата за устройството
- Използване на CUDA C/C++ за писане на ядра, които се изпълняват на графичния процесор и манипулират данни
- Използване на типове данни, квалификатори, оператори и изрази в CUDA C/C++
- Използване на вградени функции на CUDA C/C++, като математически, атомарни, warp и др.
- Използване на вградени променливи на CUDA C/C++, като threadIdx, blockIdx, blockDim и др.
- Използване на CUDA C/C++ библиотеки, като cuBLAS, cuFFT, cuRAND и др.
Модел на паметта на CUDA
- Разбиране на разликата между моделите на паметта на хоста и устройството
- Използване на пространства на паметта на CUDA, като глобална, споделена, константна и локална
- Използване на обекти на паметта на CUDA, като указатели, масиви, текстури и повърхнини
- Използване на режими на достъп до паметта на CUDA, като само за четене, само за запис, четене и запис и др.
- Използване на модела за консистентност на паметта и механизмите за синхронизация на CUDA
Модел на изпълнение на CUDA
- Разбиране на разликата между моделите на изпълнение на хоста и устройството
- Използване на нишки, блокове и решетки на CUDA за дефиниране на паралелността
- Използване на функции за нишки на CUDA, като threadIdx, blockIdx, blockDim и др.
- Използване на функции за блокове на CUDA, като __syncthreads, __threadfence_block и др.
- Използване на функции за решетки на CUDA, като gridDim, gridSync, кооперативни групи и др.
Дебъгване
- Разбиране на често срещаните грешки в CUDA програмите
- Използване на дебъгера на Visual Studio Code за инспекция на променливи, точки на прекъсване, стек на извикванията и др.
- Използване на CUDA-GDB за дебъгване на CUDA програми под Linux
- Използване на CUDA-MEMCHECK за откриване на грешки в паметта и изтичане на памет
- Използване на NVIDIA Nsight за дебъгване и анализ на CUDA програми под Windows
Оптимизация
- Разбиране на факторите, които влияят на производителността на CUDA програмите
- Използване на техники за обединяване (coalescing) на CUDA за подобряване на пропускателната способност на паметта
- Използване на техники за кеширане и предварително извличане (prefetching) на CUDA за намаляване на латентността на паметта
- Използване на техники със споделена и локална памет на CUDA за оптимизиране на достъпите до паметта и честотната лента
- Използване на профилиране и инструменти за профилиране на CUDA за измерване и подобряване на времето за изпълнение и използването на ресурси
Обобщение и следващи стъпки
Изисквания
- Разбиране на езика C/C++ и концепциите за паралелно програмиране
- Основни познания за компютърна архитектура и йерархия на паметта
- Опит с инструменти за команден ред и редактори на код
Аудитория
- Разработчици, които желаят да се научат как да използват CUDA за програмиране на графични процесори на NVIDIA и да оползотворят тяхната паралелна мощ
- Разработчици, които искат да пишат високопроизводителен и мащабируем код, който може да работи на различни CUDA устройства
- Програмисти, които искат да изследват ниското ниво на GPU програмиране и да оптимизират производителността на кода си
28 Часа