Урок 12: Обработка ошибок и синхронизация
Почти каждый вызов CUDA Runtime возвращает значение типа cudaError_t. Когда всё в порядке, значение равно cudaSuccess, чьё числовое значение равно 0; любое другое значение указывает на ошибку. Важный момент: запуск ядра через <<<>>> асинхронный — он возвращает управление хосту сразу же, до того как
Отправка ядра на GPU похожа на то, как вы бросаете письмо в почтовый ящик: в момент, когда вы его бросили, вы свободны идти дальше — но ещё не знаете, дошло ли оно. cudaGetLastError проверяет, действителен ли адрес на конверте (ошибка на этапе отправки), а cudaDeviceSynchronize — это как ожидание подтверждения доставки, которое сообщает вам, пошло ли что-то не так по пути.
- cudaError_t
- Тип, который возвращает почти каждый вызов CUDA. cudaSuccess (значение 0) означает успех; любое другое значение — это ошибка.
- cudaGetLastError
- Возвращает и сбрасывает последний код ошибки. Вызывается сразу после запуска ядра, чтобы поймать ошибки запуска.
- cudaDeviceSynchronize
- Блокирует хост, пока GPU не завершит всю работу, и возвращает ошибки, произошедшие во время выполнения ядра.
- асинхронный запуск
- Запуск ядра возвращает управление хосту сразу, до завершения ядра. Поэтому строка запуска не может сообщить об ошибках времени выполнения.