0Pricing
CUDA Academy · Урок

Коды возврата и асинхронные ошибки

Почему ядра по умолчанию завершаются с ошибкой без явного сообщения.

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

Два способа сбоя CUDA

CUDA сообщает о проблемах двумя способами: немедленно возвращает код возврата из вызовов API или сообщает об отложенных асинхронных ошибках ядер. Важно знать оба варианта. 🧭

Вызовы API возвращают код

Большинство вызовов среды выполнения CUDA возвращают значение типа cudaError_t. Значение cudaSuccess означает, что всё в порядке; любое другое значение указывает на проблему, которую можно обработать.

cudaError_t err = cudaMalloc(&d, n);

Проверяйте сразу

Для синхронных вызовов, таких как cudaMalloc, возвращённый код является окончательным. Сразу сравните его с cudaSuccess и отреагируйте до перехода дальше.

if (err != cudaSuccess) return 1;

Ядра ничего не возвращают

Запуск ядра с тройными скобками не имеет возвращаемого значения, которое можно проверить. Поэтому об ошибках запуска нельзя сообщить тем же простым способом.

myKernel<<<g, b>>>(d); // no code to check

Почему ядра работают асинхронно

Запуски выполняются асинхронно: CPU ставит работу в очередь и продолжает выполнение. Возможно, GPU ещё даже не начал работу, когда выполняется следующая строка.

Ошибки приходят с задержкой

Поскольку работа выполняется позже, сбой ядра становится асинхронной ошибкой. Она проявляется при следующем вызове, а не в самой строке запуска.

По умолчанию ошибки незаметны

Если ничего не проверять, неисправное ядро завершается без сообщения. Кажется, что программа работает, хотя на выходе появляются бессмысленные данные или нули.

Два типа ошибок запуска

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

Фиксирующиеся ошибки

Серьёзная ошибка оставляет контекст в фиксированном состоянии ошибки. После этого каждый вызов CUDA возвращает ту же ошибку, пока Вы не перезапустите программу.

Синхронизируйтесь, чтобы обнаружить асинхронные ошибки

Чтобы выявить скрытую ошибку, вызовите cudaDeviceSynchronize. Эта функция дожидается завершения ядра и возвращает обнаруженную им ошибку выполнения.

cudaError_t e = cudaDeviceSynchronize();

Надёжная привычка

Практическое правило: проверяйте код возврата каждого вызова API и синхронизируйтесь, чтобы обнаруживать ошибки ядер. Вместе эти действия не позволяют ни одной ошибке остаться незамеченной.

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

Проверьте, насколько хорошо Вы поняли, как ядра сообщают об ошибках.

Итоги: два пути ошибок

Вызовы API сразу возвращают код возврата, а ядра завершаются с ошибками асинхронно. Проверяйте коды и синхронизируйтесь, чтобы ни одна ошибка не осталась незамеченной. 🎉

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

Урок «Коды возврата и асинхронные ошибки» бесплатный?

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

Чему я научусь в уроке «Коды возврата и асинхронные ошибки»?

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

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

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

Сколько времени занимает урок «Коды возврата и асинхронные ошибки»?

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

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

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

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

  1. Коды возврата и асинхронные ошибки
  2. cudaGetLastError после запуска
  3. Универсальный макрос CUDA_CHECK
  4. Расшифровка cudaGetErrorString
← Назад к CUDA Academy