3#include <cuda_runtime.h>
4#include <cuda_runtime_api.h>
6#include <muda/muda_def.h>
7#include <muda/tools/debug_log.h>
8#include <muda/exception.h>
10#include <muda/check/check_cusparse.h>
11#include <muda/check/check_cublas.h>
12#include <muda/check/check_cusolver.h>
14MUDA_INLINE MUDA_GENERIC
const char* mudaCudaGetErrorEnum(cudaError_t error)
19 return cudaGetErrorName(error);
25template <
typename T = cudaError_t>
29 std::string m_error_string;
36 cuda_error(T error, std::string error_string,
const std::string& file,
size_t line,
const std::string& func)
37 :
exception(
"CUDA error at " + file +
":" + std::to_string(line) +
" code="
38 + std::to_string((
int)error) +
"(" + error_string +
")" + func)
40 , m_error_string(error_string)
47 T error()
const {
return m_error; }
48 const std::string& error_string()
const {
return m_error_string; }
49 const std::string& file()
const {
return m_file; }
50 size_t line()
const {
return m_line; }
51 const std::string& func()
const {
return m_func; }
55__host__ __device__
inline void check(T result,
56 char const*
const func,
57 const char*
const file,
63 printf(
"CUDA error at %s:%d code=%d(%s) \"%s\" \n",
66 static_cast<unsigned int>(result),
67 mudaCudaGetErrorEnum(result),
69 if constexpr(TRAP_ON_ERROR)
76 "CUDA error at %s:%d code=%d(%s) \"%s\" \n",
79 static_cast<unsigned int>(result),
80 mudaCudaGetErrorEnum(result),
82 throw cuda_error<T>(result, mudaCudaGetErrorEnum(result), file, line, func);