CUDA error处理的最佳实践?CUDA_CHECK宏?CUDA error处理的最佳实践?CUDA_CHECK宏?
多数 CUDA API 返回 cudaError_t;kernel 启动不阻塞,错误在后续同步或下一次 API 调用时才可见。因此需要在同步点或每次 API 调用后检查返回值,否则错误可能被忽略或延迟发现。
常用写法:#define CUDA_CHECK(call) do { cudaError_t e = (call); if (e != cudaSuccess) { fprintf(stderr, "CUDA error %s at %s:%d\n", cudaGetErrorString(e), __FILE__, __LINE__); abort(); } } while(0)。用法:CUDA_CHECK(cudaMalloc(&p, n));、CUDA_CHECK(cudaStreamSynchronize(s));。这样任意一次调用失败会立刻打印并终止,便于定位。
在 debug 构建中始终使用 CUDA_CHECK;kernel 后若有 sync,在 sync 处检查(因为 kernel 错误在 sync 时才报出)。可用 cudaGetLastError() 清除并获取上一次错误。Release 下可保留关键路径检查、或条件编译关闭以减开销。
| 返回模块 | 返回总览 |