CUDA Academy · Урок

Жизненный цикл программы CUDA

Выделите память, скопируйте данные, запустите ядро, скопируйте результат обратно и освободите память.

Урок 4 из 413 шагов

«Жизненный цикл программы CUDA» — бесплатный урок CUDA Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CUDA Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CUDA Academy содержит 4 уроков всего.

Повторяющийся ритм

Почти каждая программа CUDA следует одной и той же последовательности из пяти шагов. Освойте этот ритм один раз — и сможете читать любой код для GPU. 🕺

Шаг 1: выделить память

Сначала зарезервируйте память устройства для входных и выходных данных с помощью cudaMalloc, поскольку GPU не может напрямую использовать буферы хоста.

cudaMalloc(&d_a, bytes);
cudaMalloc(&d_b, bytes);

Шаг 2: скопировать данные на устройство

Затем загрузите входные данные с хоста на устройство с помощью cudaMemcpy. Теперь у GPU есть собственная копия для обработки.

cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);

Шаг 3: запустить

Теперь запустите ядро во множестве потоков. Именно здесь на устройстве фактически выполняется параллельная работа. 🚀

myKernel<<<blocks, threads>>>(d_a, d_b, n);

Шаг 4: скопировать обратно

После завершения вычислений загрузите результаты с устройства на хост, чтобы CPU мог их прочитать и использовать.

cudaMemcpy(h_b, d_b, bytes, cudaMemcpyDeviceToHost);

Шаг 5: освободить память

Наконец, освободите каждый буфер устройства с помощью cudaFree. Если пропустить этот шаг, память GPU утечёт и не сможет использоваться другой работой.

cudaFree(d_a);
cudaFree(d_b);

Не забудьте синхронизироваться

Поскольку запуски выполняются асинхронно, вызовите cudaDeviceSynchronize перед чтением результатов, чтобы убедиться в полном завершении работы GPU.

cudaDeviceSynchronize();

Копирование занимает время

Этапы копирования проходят через медленную шину PCIe, поэтому передача данных часто становится настоящим узким местом, а не само ядро.

Повторно используйте буферы

Однократное выделение памяти и повторное использование буферов при множественных запусках эффективнее, чем выделение новой памяти на каждой итерации цикла.

Симметрия последовательности

Обратите внимание на симметрию: каждому cudaMalloc соответствует cudaFree, а каждому копированию на устройство — копирование обратно.

Жизненный цикл одним предложением

Повторяйте как мантру: выделить память, скопировать, запустить, скопировать обратно, освободить. Эта строка — каркас почти каждой программы с ядром.

Быстрая проверка

Проверим стандартный жизненный цикл программы CUDA.

Итоги

Вы узнали пятиэтапный жизненный цикл CUDA: выделить память, скопировать на устройство, запустить, скопировать обратно, освободить, а также синхронизироваться перед чтением результатов. 🎉

Можно начать бесплатно

Изучай C++ с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Жизненный цикл программы CUDA» бесплатный?

Да — полный текст урока «Жизненный цикл программы CUDA» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CUDA Academy, подпишись на CoddyKit PRO. Курс CUDA Academy содержит 4 уроков всего.

Чему я научусь в уроке «Жизненный цикл программы CUDA»?

Выделите память, скопируйте данные, запустите ядро, скопируйте результат обратно и освободите память. Ты практикуешь CUDA Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать CUDA Academy?

Предыдущий опыт не требуется. CUDA Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Жизненный цикл программы CUDA»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке CUDA Academy?

Да. Каждый урок CUDA Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Квалификатор функции __global__
  2. Функции __device__ и __host__
  3. Раздельные адресные пространства
  4. Жизненный цикл программы CUDA
← Назад к CUDA Academy