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