Урок 3: Ваш первый kernel — __global__ и <<<>>>
До сих пор GPU был идеей — тысячи крошечных работников, ожидающих задачу; теперь мы даём им первую работу. Код, который выполняет каждый работник GPU, называется kernel: одна маленькая функция, которую все threads выполняют вместе, каждый над своими данными. Вы помечаете её ключевым словом __global_
Kernel — это как рецепт, который вы прикрепляете на доску в гигантской кухне. Вы (CPU) не готовите — вы просто прикрепляете рецепт и кричите <<<2 стола, 4 повара>>>. Восемь поваров начинают работать, а вы уходите заниматься чем-то другим, не дожидаясь, пока они закончат.
- __global__
- Помечает kernel: функцию, которая выполняется на GPU и запускается с CPU. Всегда возвращает void.
- конфигурация запуска <<<>>>
- Синтаксис kernel<<<numBlocks, threadsPerBlock>>>(args), который задаёт, сколько blocks и сколько threads на block.
- grid и block
- block — это группа threads; grid — это набор blocks для одного запуска. Всего threads = numBlocks умножить на threadsPerBlock.
- асинхронный запуск
- CPU не ждёт завершения kernel; он продолжает немедленно. Перед чтением результатов необходима явная синхронизация.