利用__FILE__ ,__LINE__这两个宏以及cudaGetErrorString()这个函数
#define CHECK(call) \ { \ const cudaError_t error=call; \ if(error!=cudaSuccess) \ { \ printf("ERROR: in File %s at Line %d\n",__FILE__,__LINE__); \ printf("ERROR Code:%d,reason:%s\n",error,cudaGetErrorString(error)); \ exit(1); \ } \ }
二. 有多种库
#define FatalError(s) do { \ std::stringstream _where, _message; \ _where << __FILE__ << ':' << __LINE__; \ _message << std::string(s) + "\n" << __FILE__ << ':' << __LINE__; \ std::cerr << _message.str() << "\nAborting...\n"; \ cudaDeviceReset(); \ exit(1); \ } while(0) #define checkCUDNN(status) do { \ std::stringstream _error; \ if (status != CUDNN_STATUS_SUCCESS) { \ _error << "CUDNN failure: " << cudnnGetErrorString(status); \ FatalError(_error.str()); \ } \ } while(0) #define checkCudaErrors(status) do { \ std::stringstream _error; \ if (status != 0) { \ _error << "Cuda failure: " << status; \ FatalError(_error.str()); \ } \ } while(0)
参考:https://raw.githubusercontent.com/tbennun/cudnn-training/master/lenet.cu