40 inline void assert_false(
const char *expr,
const char *file,
int line)
43 std::cerr <<
"\033[91m DNDS_assertion failed\033[39m: \"" << expr <<
"\" at [ " << file <<
":" << line <<
" ]" << std::endl;
48 inline void assert_false_info(
const char *expr,
const char *file,
int line,
const std::string &info)
51 std::cerr <<
"\033[91m DNDS_assertion failed\033[39m: \"" << expr <<
"\" at [ " << file <<
":" << line <<
" ]\n"
58 const char *info, ...)
63 std::cerr <<
"\033[91m DNDS_assertion failed\033[39m: \"" << expr <<
"\" at [ " << file <<
":" << line <<
" ]\n";
64 char format_buf[1024 * 512];
65 std::vsnprintf(format_buf,
sizeof(format_buf), info, args);
67 std::cerr << format_buf << std::endl;
75 template <
class TException = std::runtime_error>
80 ss <<
"\033[91m DNDS_assertion failed\033[39m: \"" << expr <<
"\" at [ " << file <<
":" << line <<
" ]\n"
82 throw std::runtime_error(ss.str());
89#define DNDS_check_throw(expr) \
90 ((static_cast<bool>(expr)) \
92 : ::DNDS::assert_false_info_throw(#expr, __FILE__, __LINE__, ""))
96#define DNDS_check_throw_info(expr, info) \
97 ((static_cast<bool>(expr)) \
99 : ::DNDS::assert_false_info_throw(#expr, __FILE__, __LINE__, info))
102# define DNDS_assert(expr) (void(0))
103# define DNDS_assert_info(expr, info) (void(0))
104# define DNDS_assert_infof(expr, info, ...) (void(0))
108# define DNDS_assert(expr) \
109 ((static_cast<bool>(expr)) \
111 : ::DNDS::assert_false(#expr, __FILE__, __LINE__))
113# define DNDS_assert_info(expr, info) \
114 ((static_cast<bool>(expr)) \
116 : ::DNDS::assert_false_info(#expr, __FILE__, __LINE__, info))
118# define DNDS_assert_infof(expr, info, ...) \
119 ((static_cast<bool>(expr)) \
121 : ::DNDS::assert_false_infof(#expr, __FILE__, __LINE__, info, ##__VA_ARGS__))
130__device__
inline void device_assert_fail(
const char *expr,
const char *file,
int line)
132 __device__ __managed__
static int g_assert_printed = 0;
133 if (atomicCAS(&g_assert_printed, 0, 1) == 0)
135 printf(
"Device assert failed: %s at %s:%d (block %d thread %d)\n",
136 expr, file, line, blockIdx.x, threadIdx.x);
142__device__
inline void device_assert_fail_infof(
const char *expr,
const char *file,
int line,
145 __device__ __managed__
static int g_assert_printed = 0;
146 if (atomicCAS(&g_assert_printed, 0, 1) == 0)
149 va_start(args, info);
150 printf(
"Device assert failed: %s at %s:%d (block %d thread %d)\n",
151 expr, file, line, blockIdx.x, threadIdx.x);
158# if defined(DNDS_NDEBUG) || defined(DNDS_NDEBUG_DEVICE)
159# define DNDS_HD_assert(cond) (void(0))
160# define DNDS_HD_assert_infof(cond, info, ...) (void(0))
165# define DNDS_HD_assert(cond) \
170 device_assert_fail(#cond, __FILE__, __LINE__); \
175# define DNDS_HD_assert_infof(cond, info, ...) \
180 device_assert_fail(#cond, __FILE__, __LINE__); \
189# define DNDS_HD_assert(cond) DNDS_assert(cond)
191# define DNDS_HD_assert_infof(cond, info, ...) DNDS_assert_infof(cond, info, ##__VA_ARGS__)
195# ifdef DNDS_DEVICE_BAN_EIGEN_MALLOC_DYNAMIC
196# define EIGEN_RUNTIME_NO_MALLOC
198# define EIGEN_NO_MALLOC
200# define eigen_assert(expr) DNDS_HD_assert(expr)
201# if defined(EIGEN_RUNTIME_NO_MALLOC) && !defined(EIGEN_NO_MALLOC)
202# define DNDS_DEVICE_CODE_GUARD_EIGEN_MALLOC (Eigen::internal::set_is_malloc_allowed(false))
207# define DNDS_DEVICE_CODE_GUARD_EIGEN_MALLOC (void(0))
Project-wide preprocessor flags, branch-hint macros, and version/build metadata strings....
the host side operators are provided as implemented
void assert_false(const char *expr, const char *file, int line)
Low-level: print a red "DNDS_assertion failed" line and abort.
void assert_false_infof(const char *expr, const char *file, int line, const char *info,...)
printf-style variant of assert_false. Used by DNDS_assert_infof.
void assert_false_info_throw(const char *expr, const char *file, int line, const std::string &info)
Throwing variant of assert_false_info. Used by DNDS_check_throw.
void assert_false_info(const char *expr, const char *file, int line, const std::string &info)
Variant of assert_false that prints an extra info string.
std::string getTraceString()
Return a symbolicated stack trace for the calling thread.