Запуск с тройными угловыми скобками
Вызывайте ядро с помощью >>.
«Запуск с тройными угловыми скобками» — бесплатный урок CUDA Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CUDA Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CUDA Academy содержит 4 уроков всего.
Запуск устроен иначе
Ядро нельзя вызвать как обычную функцию. Его нужно запустить, указав GPU, сколько потоков следует одновременно создать. 🚀
Синтаксис <<< >>>
Для запуска используются специальные тройные угловые скобки CUDA. Внутри них перед обычным списком аргументов указывается конфигурация запуска.
myKernel<<<blocks, threads>>>(args);Первое число: блоки
Первое значение задаёт количество запускаемых блоков. Блок — это группа потоков, выполняющихся вместе и совместно использующих быструю память на кристалле.
myKernel<<<4, threads>>>(args); // 4 blocksВторое число: потоки в блоке
Второе значение задаёт количество потоков в блоке. Общее число запущенных потоков равно произведению числа блоков на число потоков в блоке.
myKernel<<<4, 256>>>(args); // 1024 threadsАргументы указываются после
После скобок передайте обычные аргументы ядра в круглых скобках — так же, как при любом вызове C++.
doubleIt<<<1, 256>>>(devicePtr);Запуски выполняются асинхронно
Запуск является асинхронным: CPU ставит работу в очередь и сразу продолжает выполнение. GPU выполняет ядро в фоновом режиме.
Конфигурацию можно хранить в переменных
Числа запуска не обязаны быть литералами. Часто количество блоков вычисляют по размеру данных во время выполнения.
int blocks = (n + 255) / 256;
add<<<blocks, 256>>>(c, a, b, n);Использование dim3 для двумерных данных
Для сеток и блоков в 2D или 3D используется значение dim3. Оно объединяет размеры по x, y и z в конфигурации запуска.
dim3 threads(16, 16);
blur<<<grid, threads>>>(img);Выбор числа потоков в блоке
Безопасное значение по умолчанию для потоков в блоке — 128 или 256. Значения должны быть кратны 32 и не превышать 1024.
kernel<<<blocks, 128>>>(data);Неправильная конфигурация приводит к сбою
Если запросить слишком много потоков в блоке, запуск завершится незаметно. Сразу после запуска необходимо проверить наличие ошибок.
kernel<<<1, 2048>>>(p); // too big, failsЧитайте слева направо
Читайте запуск так: выполнить это ядро для такого количества блоков с таким количеством потоков, используя эти аргументы. После понимания это просто.
vectorAdd<<<grid, block>>>(c, a, b, n);Быстрая проверка
Проверим конфигурацию запуска.
Итоги: запуск
Вы запускаете ядро с помощью kernel<<
Часто задаваемые вопросы
Урок «Запуск с тройными угловыми скобками» бесплатный?
Да — полный текст урока «Запуск с тройными угловыми скобками» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CUDA Academy, подпишись на CoddyKit PRO. Курс CUDA Academy содержит 4 уроков всего.
Чему я научусь в уроке «Запуск с тройными угловыми скобками»?
Вызывайте ядро с помощью >>. Ты практикуешь CUDA Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CUDA Academy?
Предыдущий опыт не требуется. CUDA Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Запуск с тройными угловыми скобками»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CUDA Academy?
Да. Каждый урок CUDA Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Анатомия ядра
- Запуск с тройными угловыми скобками
- printf внутри ядра
- Объяснение cudaDeviceSynchronize