Благодарим ви, че изпратихте вашето запитване! Един от членовете на нашия екип ще се свърже с вас скоро.
Благодарим ви, че направихте своята резервация! Един от членовете на нашия екип ще се свърже с вас скоро.
Съдържание и теми, включени в курса
Въведение
- Какво е GPU програмиране?
- Защо да използваме GPU програмиране?
- Какви са предизвикателствата и компромисите при GPU програмирането?
- Какви са рамките за GPU програмиране?
- Избор на правилната рамка за вашето приложение
OpenCL
- Какво е OpenCL?
- Какви са предимствата и недостатъците на OpenCL?
- Настройка на средата за разработка за OpenCL
- Създаване на базова OpenCL програма, извършваща събиране на вектори
- Използване на OpenCL API за запитване на информация за устройството, заделяне и освобождаване на памет на устройството, копиране на данни между хоста и устройството, стартиране на ядра и синхронизиране на нишки
- Използване на езика OpenCL C за писане на ядра, които се изпълняват на устройството и манипулират данни
- Използване на вградени функции, променливи и библиотеки на OpenCL за извършване на общи задачи и операции
- Използване на пространства на паметта на OpenCL, като глобално, локално, константно и частно, за оптимизиране на трансфера на данни и достъпите до паметта
- Използване на модела на изпълнение на OpenCL за контрол на работните елементи (work-items), работните групи (work-groups) и ND-диапазоните (ND-ranges), които определят паралелизма
- Дебъгване и тестване на OpenCL програми с помощта на инструменти като CodeXL
- Оптимизиране на OpenCL програми с помощта на техники като групиране (coalescing), кеширане, предварително извличане (prefetching) и профилиране
CUDA
- Какво е CUDA?
- Какви са предимствата и недостатъците на CUDA?
- Настройка на средата за разработка за CUDA
- Създаване на базова CUDA програма, извършваща събиране на вектори
- Използване на CUDA API за запитване на информация за устройството, заделяне и освобождаване на памет на устройството, копиране на данни между хоста и устройството, стартиране на ядра и синхронизиране на нишки
- Използване на езика CUDA C/C++ за писане на ядра, които се изпълняват на устройството и манипулират данни
- Използване на вградени функции, променливи и библиотеки на CUDA за извършване на общи задачи и операции
- Използване на пространства на паметта на CUDA, като глобално, споделено, константно и локално, за оптимизиране на трансфера на данни и достъпите до паметта
- Използване на модела на изпълнение на CUDA за контрол на нишките, блоковете и решетките, които определят паралелизма
- Дебъгване и тестване на CUDA програми с помощта на инструменти като CUDA-GDB, CUDA-MEMCHECK и NVIDIA Nsight
- Оптимизиране на CUDA програми с помощта на техники като групиране (coalescing), кеширане, предварително извличане (prefetching) и профилиране
ROCm
- Какво е ROCm?
- Какви са предимствата и недостатъците на ROCm?
- Настройка на средата за разработка за ROCm
- Създаване на базова ROCm програма, извършваща събиране на вектори
- Използване на ROCm API за запитване на информация за устройството, заделяне и освобождаване на памет на устройството, копиране на данни между хоста и устройството, стартиране на ядра и синхронизиране на нишки
- Използване на езика ROCm C/C++ за писане на ядра, които се изпълняват на устройството и манипулират данни
- Използване на вградени функции, променливи и библиотеки на ROCm за извършване на общи задачи и операции
- Използване на пространства на паметта на ROCm, като глобално, локално, константно и частно, за оптимизиране на трансфера на данни и достъпите до паметта
- Използване на модела на изпълнение на ROCm за контрол на нишките, блоковете и решетките, които определят паралелизма
- Дебъгване и тестване на ROCm програми с помощта на инструменти като ROCm Debugger и ROCm Profiler
- Оптимизиране на ROCm програми с помощта на техники като групиране (coalescing), кеширане, предварително извличане (prefetching) и профилиране
Сравнение
- Сравняване на характеристиките, производителността и съвместимостта на OpenCL, CUDA и ROCm
- Оценяване на GPU програми с помощта на бенчмаркове и метрики
- Научаване на най-добрите практики и съвети за GPU програмиране
- Изследване на настоящите и бъдещите тенденции и предизвикателства в GPU програмирането
Обобщение и следващи стъпки
Изисквания
- Разбиране на езика C/C++ и концепциите за паралелно програмиране
- Основни познания за компютърна архитектура и йерархия на паметта
- Опит с инструменти за команден ред и редактори на код
Аудитория
- Разработчици, които желаят да научат как да използват различни рамки за GPU програмиране и да сравнят техните характеристики, производителност и съвместимост
- Разработчици, които желаят да пишат преносим и мащабируем код, който може да работи на различни платформи и устройства
- Програмисти, които желаят да изследват компромисите и предизвикателствата на GPU програмирането и оптимизацията
28 Часа