План на курса

Въведение

  • Какво е CUDA?
  • CUDA срещу OpenCL срещу SYCL
  • Преглед на функциите и архитектурата на CUDA
  • Създаване на среда за разработка

Приготвяме се да започнем

  • Създаване на нов CUDA проект с помощта на Visual Studio код
  • Проучване на структурата и файловете на проекта
  • Компилиране и изпълнение на програмата
  • Показване на изхода с помощта на 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++, като математика, atomic, 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 програма за отстраняване на грешки в кода за проверка на променливи, точки на прекъсване, стек на повиквания и т.н.
  • Използване на CUDA-GDB за отстраняване на грешки в CUDA програми на Linux
  • Използване на CUDA-MEMCHECK за откриване на грешки в паметта и течове
  • Използване на NVIDIA Nsight за отстраняване на грешки и анализ на CUDA програми в Windows

Оптимизация

  • Разбиране на факторите, които влияят на производителността на CUDA програмите
  • Използване на техники за обединяване на CUDA за подобряване на пропускателната способност на паметта
  • Използване на техники за кеширане и предварително извличане на CUDA за намаляване на латентността на паметта
  • Използване на споделена памет CUDA и техники за локална памет за оптимизиране на достъпа до паметта и честотната лента
  • Използване на CUDA профилиране и инструменти за профилиране за измерване и подобряване на времето за изпълнение и използването на ресурси

Обобщение и следващи стъпки

Изисквания

  • Разбиране на езика C/C++ и концепциите за паралелно програмиране
  • Основни познания за компютърната архитектура и йерархията на паметта
  • Опит с инструменти за команден ред и редактори на код

Публика

  • Разработчици, които искат да научат как да използват CUDA за програмиране на NVIDIA GPU и да използват техния паралелизъм
  • Разработчици, които желаят да пишат високопроизводителен и мащабируем код, който може да работи на различни CUDA устройства
  • Програмисти, които желаят да изследват аспектите на ниско ниво на GPU програмирането и да оптимизират производителността на кода си
 28 Hours

Брой участници



Цена за участник

Oтзиви от потребители (1)

Свързани Kурсове

GPU Programming with OpenCL

28 Hours

GPU Programming - OpenCL vs CUDA vs ROCm

28 Hours

AMD GPU Programming

28 Hours

ROCm for Windows

21 Hours

Introduction to GPU Programming

21 Hours

GPU Programming with OpenACC

28 Hours

Raster and Vector Graphics (Adobe Photoshop, CorelDraw)

28 Hours

Свързани Kатегории