Свържете се с нас

Съдържание и теми, включени в курса

Въведение

  • Какво е GPU програмиране?
  • Защо да използваме GPU програмиране?
  • Какви са предизвикателствата и компромисите при GPU програмирането?
  • Какви са рамките и инструментите за GPU програмиране?
  • Избор на правилната рамка и инструмент за вашето приложение

OpenCL

  • Какво е OpenCL?
  • Какви са предимствата и недостатъците на OpenCL?
  • Настройка на средата за разработка за OpenCL
  • Създаване на базова OpenCL програма, която извършва събиране на вектори
  • Използване на OpenCL API за заявяване на информация за устройството, заделяне и освобождаване на памет на устройството, копиране на данни между хоста и устройството, стартиране на ядра и синхронизиране на нишки
  • Използване на езика OpenCL C за писане на ядра, които се изпълняват на устройството и манипулират данни
  • Използване на вградени функции, променливи и библиотеки на OpenCL за изпълнение на общи задачи и операции
  • Използване на пространства в паметта на OpenCL, като глобално, локално, константно и частно, за оптимизиране на трансфера на данни и достъпа до паметта
  • Използване на модела на изпълнение на OpenCL за контрол на работните елементи, работните групи и ND-диапазоните, които дефинират паралелизма
  • Дебъгване и тестване на 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) и профилиране

HIP

  • Какво е HIP?
  • Какви са предимствата и недостатъците на HIP?
  • Настройка на средата за разработка за HIP
  • Създаване на базова HIP програма, която извършва събиране на вектори
  • Използване на езика HIP за писане на ядра, които се изпълняват на устройството и манипулират данни
  • Използване на вградени функции, променливи и библиотеки на HIP за изпълнение на общи задачи и операции
  • Използване на пространства в паметта на HIP, като глобално, споделено, константно и локално, за оптимизиране на трансфера на данни и достъпа до паметта
  • Използване на модела на изпълнение на HIP за контрол на нишките, блоковете и решетките, които дефинират паралелизма
  • Дебъгване и тестване на HIP програми с инструменти като ROCm Debugger и ROCm Profiler
  • Оптимизиране на HIP програми с помощта на техники като обединяване (coalescing), кеширане, предварително извличане (prefetching) и профилиране

Сравнение

  • Сравняване на функциите, производителността и съвместимостта на OpenCL, CUDA, ROCm и HIP
  • Оценяване на GPU програми чрез бенчмаркове и метрики
  • Научаване на най-добрите практики и съвети за GPU програмиране
  • Изследване на настоящите и бъдещите тенденции и предизвикателства в GPU програмирането

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

Изисквания

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

Аудитория

  • Разработчици, които искат да научат основите на GPU програмирането и основните рамки и инструменти за разработване на GPU приложения
  • Разработчици, които искат да пишат преносим и мащабируем код, който може да работи на различни платформи и устройства
  • Програмисти, които искат да изследват ползите и предизвикателствата на GPU програмирането и оптимизацията
 21 Часа

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


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

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

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