CUDA 错误检查

一.纯CUDA 库

利用__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

posted @ 2022-04-04 02:25  BohrCh  阅读(442)  评论(0)    收藏  举报