Жизненный цикл программы CUDA
Выделите память, скопируйте данные, запустите ядро, скопируйте результат обратно и освободите память.
«Жизненный цикл программы 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 — локальная установка не требуется.
Все уроки этого курса
- Квалификатор функции __global__
- Функции __device__ и __host__
- Раздельные адресные пространства
- Жизненный цикл программы CUDA