Благодарим ви, че изпратихте вашето запитване! Един от членовете на нашия екип ще се свърже с вас скоро.
Благодарим ви, че направихте своята резервация! Един от членовете на нашия екип ще се свърже с вас скоро.
Продължителност 28 часa
Съдържание и теми, включени в курса
Въведение
- Какво е 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++ за писане на ядра, които се изпълняват на GPU и манипулират данни
- Използване на типове данни, определители, оператори и изрази в 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, cooperative groups и др.
Дебъгване
- Разбиране на честите грешки и бъгове в 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 GPU и да използват тяхната паралелност
- Разработчици, които искат да пишат високопроизводителен и мащабируем код, който може да се изпълнява на различни CUDA устройства
- Програмисти, които искат да изследват ниските нива на програмирането на GPU и да оптимизират производителността на кода си