План на курса

Въведение

  • Какво е 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 Часа

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


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

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

Предстоящи Курсове

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