Aula 12: Tratamento de Erros e Sincronização
Quase toda chamada do CUDA Runtime retorna um valor do tipo cudaError_t. Quando está tudo certo, o valor é cudaSuccess, cujo valor numérico é 0; qualquer outro valor indica um erro. Um ponto crítico: lançar um kernel com <<<>>> é assíncrono — isso retorna ao host imediatamente, antes de o kernel ter
Enviar um kernel para a GPU é como colocar uma carta na caixa de correio: no momento em que você a coloca, você já está livre para seguir em frente — mas ainda não sabe se ela chegou. cudaGetLastError verifica se o endereço no envelope é válido (um erro no momento do envio), e cudaDeviceSynchronize é como esperar por uma confirmação de entrega que avisa se algo deu errado no caminho.
- cudaError_t
- O tipo que quase toda chamada CUDA retorna. cudaSuccess (valor 0) significa sucesso; qualquer outro valor é um erro.
- cudaGetLastError
- Retorna e reseta o último código de erro. Chamada logo após um lançamento de kernel para capturar erros de lançamento.
- cudaDeviceSynchronize
- Bloqueia o host até a GPU terminar todo o trabalho, e retorna erros que ocorreram durante a execução do kernel.
- lançamento assíncrono
- Um lançamento de kernel retorna ao host imediatamente, antes de o kernel terminar. Por isso, a linha de lançamento não consegue relatar erros de tempo de execução.