1#ifndef CYTNX_CYTNX_ERROR_H_
2#define CYTNX_CYTNX_ERROR_H_
13#if defined(__has_include)
14 #if __has_include(<execinfo.h>)
16 #define CYTNX_HAS_EXECINFO 1
20#ifndef CYTNX_HAS_EXECINFO
21 #define CYTNX_HAS_EXECINFO 0
26#define CYTNX_FUNC_NAME __PRETTY_FUNCTION__
34 class error :
public std::logic_error {
36 using std::logic_error::logic_error;
42 if (format ==
nullptr)
return std::string();
44 va_copy(args_copy, args);
45 const int n = std::vsnprintf(
nullptr, 0, format, args_copy);
47 if (n < 0)
return std::string(format);
48 std::string msg(
static_cast<std::size_t
>(n),
'\0');
49 std::vsnprintf(msg.data(), msg.size() + 1, format, args);
53 inline std::string
compose_report(
char const *kind,
char const *func,
char const *file,
54 int line,
const std::string &msg) {
56 out.reserve(msg.size() + 256);
61 out += kind ? kind :
"error";
63 out += func ? func :
"unknown";
65 out += kind ? kind :
"error";
69 out += file ? file :
"unknown";
71 out += std::to_string(line);
79 std::cerr <<
"Stack trace:" << std::endl;
81 const int size = backtrace(array, 10);
82 char **strings = backtrace_symbols(array, size);
83 if (strings !=
nullptr) {
84 for (
int i = 0; i < size; i++) std::cerr << strings[i] << std::endl;
88 std::cerr <<
"Stack trace is unavailable on this platform/compiler." << std::endl;
92 [[noreturn]]
inline void error_msg_impl(
char const *func,
char const *file,
int line,
93 char const *format, ...) {
95 va_start(args, format);
98 const std::string report =
compose_report(
"error", func, file, line, msg);
103 inline void warning_msg_impl(
char const *func,
char const *file,
int line,
char const *format,
106 va_start(args, format);
109 std::cerr <<
compose_report(
"warning", func, file, line, msg) << std::endl;
115#define cytnx_error_msg(is_true, format, ...) \
118 ::cytnx::internal::error_msg_impl(CYTNX_FUNC_NAME, __FILE__, __LINE__, \
119 (format)__VA_OPT__(, ) __VA_ARGS__); \
122#define cytnx_warning_msg(is_true, format, ...) \
125 ::cytnx::internal::warning_msg_impl(CYTNX_FUNC_NAME, __FILE__, __LINE__, \
126 (format)__VA_OPT__(, ) __VA_ARGS__); \
132 #include <cuda_runtime.h>
133 #include <cublas_v2.h>
134 #include <cusolverDn.h>
135 #include <cuComplex.h>
138 #if defined(UNI_CUTENSOR)
139 #include <cutensor.h>
142 #ifdef __DRIVER_TYPES_H__
143static const char *_cudaGetErrorEnum(cudaError_t error) {
146 return "cudaSuccess";
148 case cudaErrorMissingConfiguration:
149 return "cudaErrorMissingConfiguration";
151 case cudaErrorMemoryAllocation:
152 return "cudaErrorMemoryAllocation";
154 case cudaErrorInitializationError:
155 return "cudaErrorInitializationError";
157 case cudaErrorLaunchFailure:
158 return "cudaErrorLaunchFailure";
160 case cudaErrorPriorLaunchFailure:
161 return "cudaErrorPriorLaunchFailure";
163 case cudaErrorLaunchTimeout:
164 return "cudaErrorLaunchTimeout";
166 case cudaErrorLaunchOutOfResources:
167 return "cudaErrorLaunchOutOfResources";
169 case cudaErrorInvalidDeviceFunction:
170 return "cudaErrorInvalidDeviceFunction";
172 case cudaErrorInvalidConfiguration:
173 return "cudaErrorInvalidConfiguration";
175 case cudaErrorInvalidDevice:
176 return "cudaErrorInvalidDevice";
178 case cudaErrorInvalidValue:
179 return "cudaErrorInvalidValue";
181 case cudaErrorInvalidPitchValue:
182 return "cudaErrorInvalidPitchValue";
184 case cudaErrorInvalidSymbol:
185 return "cudaErrorInvalidSymbol";
187 case cudaErrorMapBufferObjectFailed:
188 return "cudaErrorMapBufferObjectFailed";
190 case cudaErrorUnmapBufferObjectFailed:
191 return "cudaErrorUnmapBufferObjectFailed";
193 case cudaErrorInvalidHostPointer:
194 return "cudaErrorInvalidHostPointer";
196 case cudaErrorInvalidDevicePointer:
197 return "cudaErrorInvalidDevicePointer";
199 case cudaErrorInvalidTexture:
200 return "cudaErrorInvalidTexture";
202 case cudaErrorInvalidTextureBinding:
203 return "cudaErrorInvalidTextureBinding";
205 case cudaErrorInvalidChannelDescriptor:
206 return "cudaErrorInvalidChannelDescriptor";
208 case cudaErrorInvalidMemcpyDirection:
209 return "cudaErrorInvalidMemcpyDirection";
211 case cudaErrorAddressOfConstant:
212 return "cudaErrorAddressOfConstant";
214 case cudaErrorTextureFetchFailed:
215 return "cudaErrorTextureFetchFailed";
217 case cudaErrorTextureNotBound:
218 return "cudaErrorTextureNotBound";
220 case cudaErrorSynchronizationError:
221 return "cudaErrorSynchronizationError";
223 case cudaErrorInvalidFilterSetting:
224 return "cudaErrorInvalidFilterSetting";
226 case cudaErrorInvalidNormSetting:
227 return "cudaErrorInvalidNormSetting";
229 case cudaErrorMixedDeviceExecution:
230 return "cudaErrorMixedDeviceExecution";
232 case cudaErrorCudartUnloading:
233 return "cudaErrorCudartUnloading";
235 case cudaErrorUnknown:
236 return "cudaErrorUnknown";
238 case cudaErrorNotYetImplemented:
239 return "cudaErrorNotYetImplemented";
241 case cudaErrorMemoryValueTooLarge:
242 return "cudaErrorMemoryValueTooLarge";
244 case cudaErrorInvalidResourceHandle:
245 return "cudaErrorInvalidResourceHandle";
247 case cudaErrorNotReady:
248 return "cudaErrorNotReady";
250 case cudaErrorInsufficientDriver:
251 return "cudaErrorInsufficientDriver";
253 case cudaErrorSetOnActiveProcess:
254 return "cudaErrorSetOnActiveProcess";
256 case cudaErrorInvalidSurface:
257 return "cudaErrorInvalidSurface";
259 case cudaErrorNoDevice:
260 return "cudaErrorNoDevice";
262 case cudaErrorECCUncorrectable:
263 return "cudaErrorECCUncorrectable";
265 case cudaErrorSharedObjectSymbolNotFound:
266 return "cudaErrorSharedObjectSymbolNotFound";
268 case cudaErrorSharedObjectInitFailed:
269 return "cudaErrorSharedObjectInitFailed";
271 case cudaErrorUnsupportedLimit:
272 return "cudaErrorUnsupportedLimit";
274 case cudaErrorDuplicateVariableName:
275 return "cudaErrorDuplicateVariableName";
277 case cudaErrorDuplicateTextureName:
278 return "cudaErrorDuplicateTextureName";
280 case cudaErrorDuplicateSurfaceName:
281 return "cudaErrorDuplicateSurfaceName";
283 case cudaErrorDevicesUnavailable:
284 return "cudaErrorDevicesUnavailable";
286 case cudaErrorInvalidKernelImage:
287 return "cudaErrorInvalidKernelImage";
289 case cudaErrorNoKernelImageForDevice:
290 return "cudaErrorNoKernelImageForDevice";
292 case cudaErrorIncompatibleDriverContext:
293 return "cudaErrorIncompatibleDriverContext";
295 case cudaErrorPeerAccessAlreadyEnabled:
296 return "cudaErrorPeerAccessAlreadyEnabled";
298 case cudaErrorPeerAccessNotEnabled:
299 return "cudaErrorPeerAccessNotEnabled";
301 case cudaErrorDeviceAlreadyInUse:
302 return "cudaErrorDeviceAlreadyInUse";
304 case cudaErrorProfilerDisabled:
305 return "cudaErrorProfilerDisabled";
307 case cudaErrorProfilerNotInitialized:
308 return "cudaErrorProfilerNotInitialized";
310 case cudaErrorProfilerAlreadyStarted:
311 return "cudaErrorProfilerAlreadyStarted";
313 case cudaErrorProfilerAlreadyStopped:
314 return "cudaErrorProfilerAlreadyStopped";
317 case cudaErrorAssert:
318 return "cudaErrorAssert";
320 case cudaErrorTooManyPeers:
321 return "cudaErrorTooManyPeers";
323 case cudaErrorHostMemoryAlreadyRegistered:
324 return "cudaErrorHostMemoryAlreadyRegistered";
326 case cudaErrorHostMemoryNotRegistered:
327 return "cudaErrorHostMemoryNotRegistered";
330 case cudaErrorOperatingSystem:
331 return "cudaErrorOperatingSystem";
333 case cudaErrorPeerAccessUnsupported:
334 return "cudaErrorPeerAccessUnsupported";
336 case cudaErrorLaunchMaxDepthExceeded:
337 return "cudaErrorLaunchMaxDepthExceeded";
339 case cudaErrorLaunchFileScopedTex:
340 return "cudaErrorLaunchFileScopedTex";
342 case cudaErrorLaunchFileScopedSurf:
343 return "cudaErrorLaunchFileScopedSurf";
345 case cudaErrorSyncDepthExceeded:
346 return "cudaErrorSyncDepthExceeded";
348 case cudaErrorLaunchPendingCountExceeded:
349 return "cudaErrorLaunchPendingCountExceeded";
351 case cudaErrorNotPermitted:
352 return "cudaErrorNotPermitted";
354 case cudaErrorNotSupported:
355 return "cudaErrorNotSupported";
358 case cudaErrorHardwareStackError:
359 return "cudaErrorHardwareStackError";
361 case cudaErrorIllegalInstruction:
362 return "cudaErrorIllegalInstruction";
364 case cudaErrorMisalignedAddress:
365 return "cudaErrorMisalignedAddress";
367 case cudaErrorInvalidAddressSpace:
368 return "cudaErrorInvalidAddressSpace";
370 case cudaErrorInvalidPc:
371 return "cudaErrorInvalidPc";
373 case cudaErrorIllegalAddress:
374 return "cudaErrorIllegalAddress";
377 case cudaErrorInvalidPtx:
378 return "cudaErrorInvalidPtx";
380 case cudaErrorInvalidGraphicsContext:
381 return "cudaErrorInvalidGraphicsContext";
383 case cudaErrorStartupFailure:
384 return "cudaErrorStartupFailure";
386 case cudaErrorApiFailureBase:
387 return "cudaErrorApiFailureBase";
390 case cudaErrorNvlinkUncorrectable:
391 return "cudaErrorNvlinkUncorrectable";
402static const char *_cudaGetErrorEnum(cublasStatus_t error) {
404 case CUBLAS_STATUS_SUCCESS:
405 return "CUBLAS_STATUS_SUCCESS";
407 case CUBLAS_STATUS_NOT_INITIALIZED:
408 return "CUBLAS_STATUS_NOT_INITIALIZED";
410 case CUBLAS_STATUS_ALLOC_FAILED:
411 return "CUBLAS_STATUS_ALLOC_FAILED";
413 case CUBLAS_STATUS_INVALID_VALUE:
414 return "CUBLAS_STATUS_INVALID_VALUE";
416 case CUBLAS_STATUS_ARCH_MISMATCH:
417 return "CUBLAS_STATUS_ARCH_MISMATCH";
419 case CUBLAS_STATUS_MAPPING_ERROR:
420 return "CUBLAS_STATUS_MAPPING_ERROR";
422 case CUBLAS_STATUS_EXECUTION_FAILED:
423 return "CUBLAS_STATUS_EXECUTION_FAILED";
425 case CUBLAS_STATUS_INTERNAL_ERROR:
426 return "CUBLAS_STATUS_INTERNAL_ERROR";
428 case CUBLAS_STATUS_NOT_SUPPORTED:
429 return "CUBLAS_STATUS_NOT_SUPPORTED";
431 case CUBLAS_STATUS_LICENSE_ERROR:
432 return "CUBLAS_STATUS_LICENSE_ERROR";
439 #ifdef CUSOLVER_COMMON_H_
441static const char *_cudaGetErrorEnum(cusolverStatus_t error) {
443 case CUSOLVER_STATUS_SUCCESS:
444 return "CUSOLVER_STATUS_SUCCESS";
445 case CUSOLVER_STATUS_NOT_INITIALIZED:
446 return "CUSOLVER_STATUS_NOT_INITIALIZED";
447 case CUSOLVER_STATUS_ALLOC_FAILED:
448 return "CUSOLVER_STATUS_ALLOC_FAILED";
449 case CUSOLVER_STATUS_INVALID_VALUE:
450 return "CUSOLVER_STATUS_INVALID_VALUE";
451 case CUSOLVER_STATUS_ARCH_MISMATCH:
452 return "CUSOLVER_STATUS_ARCH_MISMATCH";
453 case CUSOLVER_STATUS_MAPPING_ERROR:
454 return "CUSOLVER_STATUS_MAPPING_ERROR";
455 case CUSOLVER_STATUS_EXECUTION_FAILED:
456 return "CUSOLVER_STATUS_EXECUTION_FAILED";
457 case CUSOLVER_STATUS_INTERNAL_ERROR:
458 return "CUSOLVER_STATUS_INTERNAL_ERROR";
459 case CUSOLVER_STATUS_MATRIX_TYPE_NOT_SUPPORTED:
460 return "CUSOLVER_STATUS_MATRIX_TYPE_NOT_SUPPORTED";
461 case CUSOLVER_STATUS_NOT_SUPPORTED:
462 return "CUSOLVER_STATUS_NOT_SUPPORTED ";
463 case CUSOLVER_STATUS_ZERO_PIVOT:
464 return "CUSOLVER_STATUS_ZERO_PIVOT";
465 case CUSOLVER_STATUS_INVALID_LICENSE:
466 return "CUSOLVER_STATUS_INVALID_LICENSE";
475static const char *_cudaGetErrorEnum(curandStatus_t error) {
477 case CURAND_STATUS_SUCCESS:
478 return "CURAND_STATUS_SUCCESS";
479 case CURAND_STATUS_VERSION_MISMATCH:
480 return "CURAND_STATUS_VERSION_MISMATCH";
481 case CURAND_STATUS_NOT_INITIALIZED:
482 return "CURAND_STATUS_NOT_INITIALIZED";
483 case CURAND_STATUS_ALLOCATION_FAILED:
484 return "CURAND_STATUS_ALLOCATION_FAILED";
485 case CURAND_STATUS_TYPE_ERROR:
486 return "CURAND_STATUS_TYPE_ERROR";
487 case CURAND_STATUS_OUT_OF_RANGE:
488 return "CURAND_STATUS_OUT_OF_RANGE";
489 case CURAND_STATUS_LENGTH_NOT_MULTIPLE:
490 return "CURAND_STATUS_LENGTH_NOT_MULTIPLE";
491 case CURAND_STATUS_DOUBLE_PRECISION_REQUIRED:
492 return "CURAND_STATUS_DOUBLE_PRECISION_REQUIRED";
493 case CURAND_STATUS_LAUNCH_FAILURE:
494 return "CURAND_STATUS_LAUNCH_FAILURE";
495 case CURAND_STATUS_PREEXISTING_FAILURE:
496 return "CURAND_STATUS_PREEXISTING_FAILURE";
497 case CURAND_STATUS_INITIALIZATION_FAILED:
498 return "CURAND_STATUS_INITIALIZATION_FAILED";
499 case CURAND_STATUS_ARCH_MISMATCH:
500 return "CURAND_STATUS_ARCH_MISMATCH";
501 case CURAND_STATUS_INTERNAL_ERROR:
502 return "CURAND_STATUS_INTERNAL_ERROR";
510static const char *_cudaGetErrorEnum(cutensorStatus_t error) {
511 return cutensorGetErrorString(error);
515 #ifdef __DRIVER_TYPES_H__
517 #define DEVICE_RESET cudaDeviceReset();
526void check(T result,
char const *
const func,
const char *
const file,
int const line) {
528 fprintf(stderr,
"CUDA error at %s:%d code=%d(%s) \"%s\" \n", file, line,
529 static_cast<unsigned int>(result), _cudaGetErrorEnum(result), func);
536 #ifdef __DRIVER_TYPES_H__
539 #define checkCudaErrors(val) check((val), #val, __FILE__, __LINE__)
Definition cytnx_error.hpp:34
void warning_msg_impl(char const *func, char const *file, int line, char const *format,...)
Definition cytnx_error.hpp:103
std::string vformat_message(char const *format, va_list args)
Definition cytnx_error.hpp:41
void error_msg_impl(char const *func, char const *file, int line, char const *format,...)
Definition cytnx_error.hpp:92
void print_backtrace_if_debug()
Definition cytnx_error.hpp:76
std::string compose_report(char const *kind, char const *func, char const *file, int line, const std::string &msg)
Definition cytnx_error.hpp:53
Definition Accessor.hpp:12