MUDA
Loading...
Searching...
No Matches
check.h
1#pragma once
2#include <cuda.h>
3#include <cuda_runtime.h>
4#include <cuda_runtime_api.h>
5#include <cstdio>
6#include <muda/muda_def.h>
7#include <muda/tools/debug_log.h>
8#include <muda/exception.h>
9#include <string>
10#include <muda/check/check_cusparse.h>
11#include <muda/check/check_cublas.h>
12#include <muda/check/check_cusolver.h>
13
14MUDA_INLINE MUDA_GENERIC const char* mudaCudaGetErrorEnum(cudaError_t error)
15{
16//#ifdef __CUDA_ARCH__
17// return "<muda: not impl yet>";
18//#else
19 return cudaGetErrorName(error);
20//#endif
21}
22
23namespace muda
24{
25template <typename T = cudaError_t>
26class cuda_error : public exception
27{
28 T m_error;
29 std::string m_error_string;
30 std::string m_file;
31
32 size_t m_line;
33 std::string m_func;
34
35 public:
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)
39 , m_error(error)
40 , m_error_string(error_string)
41 , m_file(file)
42 , m_line(line)
43 , m_func(func)
44 {
45 }
46
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; }
52};
53
54template <typename T>
55__host__ __device__ inline void check(T result,
56 char const* const func,
57 const char* const file,
58 int const line)
59{
60#ifdef __CUDA_ARCH__
61 if(result)
62 {
63 printf("CUDA error at %s:%d code=%d(%s) \"%s\" \n",
64 file,
65 line,
66 static_cast<unsigned int>(result),
67 mudaCudaGetErrorEnum(result),
68 func);
69 if constexpr(TRAP_ON_ERROR)
70 trap();
71 }
72#else
73 if(result)
74 {
75 std::fprintf(stderr,
76 "CUDA error at %s:%d code=%d(%s) \"%s\" \n",
77 file,
78 line,
79 static_cast<unsigned int>(result),
80 mudaCudaGetErrorEnum(result),
81 func);
82 throw cuda_error<T>(result, mudaCudaGetErrorEnum(result), file, line, func);
83 }
84#endif
85}
86} // namespace muda
Definition check.h:27
Definition exception.h:9