1#ifndef CYTNX_CYTNX_ERROR_H_
2#define CYTNX_CYTNX_ERROR_H_
12#if defined(__has_include)
13 #if __has_include(<execinfo.h>)
15 #define CYTNX_HAS_EXECINFO 1
19#ifndef CYTNX_HAS_EXECINFO
20 #define CYTNX_HAS_EXECINFO 0
24 #define __PRETTY_FUNCTION__ __FUNCTION__
27#define cytnx_error_msg(is_true, format, ...) \
30 error_msg(__PRETTY_FUNCTION__, __FILE__, __LINE__, (is_true), (format), __VA_ARGS__); \
32static inline void error_msg(
char const *
const func,
const char *
const file,
int const line,
33 bool is_true,
char const *format, ...) {
37 char output_str[1024];
39 va_start(args, format);
40 vsprintf(msg, format, args);
41 sprintf(output_str,
"\n# Cytnx error occur at %s\n# error: %s\n# file : %s (%d)", func, msg,
45 std::cerr << output_str << std::endl;
47 std::cerr <<
"Stack trace:" << std::endl;
50 size = backtrace(array, 10);
51 char **strings = backtrace_symbols(array, size);
52 for (std::size_t i = 0; i < size; i++) {
53 std::cerr << strings[i] << std::endl;
57 std::cerr <<
"Stack trace is unavailable on this platform/compiler." << std::endl;
59 throw std::logic_error(output_str);
65#define cytnx_warning_msg(is_true, format, ...) \
68 warning_msg(__PRETTY_FUNCTION__, __FILE__, __LINE__, (is_true), (format), __VA_ARGS__); \
70static inline void warning_msg(
char const *
const func,
const char *
const file,
int const line,
71 bool is_true,
char const *format, ...) {
74 char output_str[1024];
76 va_start(args, format);
77 vsprintf(msg, format, args);
78 sprintf(output_str,
"\n# Cytnx warning occur at %s\n# warning: %s\n# file : %s (%d)", func, msg,
81 std::cerr << output_str << std::endl;
88 #include <cuda_runtime.h>
89 #include <cublas_v2.h>
90 #include <cusolverDn.h>
91 #include <cuComplex.h>
94 #if defined(UNI_CUTENSOR)
98 #ifdef __DRIVER_TYPES_H__
99static const char *_cudaGetErrorEnum(cudaError_t error) {
102 return "cudaSuccess";
104 case cudaErrorMissingConfiguration:
105 return "cudaErrorMissingConfiguration";
107 case cudaErrorMemoryAllocation:
108 return "cudaErrorMemoryAllocation";
110 case cudaErrorInitializationError:
111 return "cudaErrorInitializationError";
113 case cudaErrorLaunchFailure:
114 return "cudaErrorLaunchFailure";
116 case cudaErrorPriorLaunchFailure:
117 return "cudaErrorPriorLaunchFailure";
119 case cudaErrorLaunchTimeout:
120 return "cudaErrorLaunchTimeout";
122 case cudaErrorLaunchOutOfResources:
123 return "cudaErrorLaunchOutOfResources";
125 case cudaErrorInvalidDeviceFunction:
126 return "cudaErrorInvalidDeviceFunction";
128 case cudaErrorInvalidConfiguration:
129 return "cudaErrorInvalidConfiguration";
131 case cudaErrorInvalidDevice:
132 return "cudaErrorInvalidDevice";
134 case cudaErrorInvalidValue:
135 return "cudaErrorInvalidValue";
137 case cudaErrorInvalidPitchValue:
138 return "cudaErrorInvalidPitchValue";
140 case cudaErrorInvalidSymbol:
141 return "cudaErrorInvalidSymbol";
143 case cudaErrorMapBufferObjectFailed:
144 return "cudaErrorMapBufferObjectFailed";
146 case cudaErrorUnmapBufferObjectFailed:
147 return "cudaErrorUnmapBufferObjectFailed";
149 case cudaErrorInvalidHostPointer:
150 return "cudaErrorInvalidHostPointer";
152 case cudaErrorInvalidDevicePointer:
153 return "cudaErrorInvalidDevicePointer";
155 case cudaErrorInvalidTexture:
156 return "cudaErrorInvalidTexture";
158 case cudaErrorInvalidTextureBinding:
159 return "cudaErrorInvalidTextureBinding";
161 case cudaErrorInvalidChannelDescriptor:
162 return "cudaErrorInvalidChannelDescriptor";
164 case cudaErrorInvalidMemcpyDirection:
165 return "cudaErrorInvalidMemcpyDirection";
167 case cudaErrorAddressOfConstant:
168 return "cudaErrorAddressOfConstant";
170 case cudaErrorTextureFetchFailed:
171 return "cudaErrorTextureFetchFailed";
173 case cudaErrorTextureNotBound:
174 return "cudaErrorTextureNotBound";
176 case cudaErrorSynchronizationError:
177 return "cudaErrorSynchronizationError";
179 case cudaErrorInvalidFilterSetting:
180 return "cudaErrorInvalidFilterSetting";
182 case cudaErrorInvalidNormSetting:
183 return "cudaErrorInvalidNormSetting";
185 case cudaErrorMixedDeviceExecution:
186 return "cudaErrorMixedDeviceExecution";
188 case cudaErrorCudartUnloading:
189 return "cudaErrorCudartUnloading";
191 case cudaErrorUnknown:
192 return "cudaErrorUnknown";
194 case cudaErrorNotYetImplemented:
195 return "cudaErrorNotYetImplemented";
197 case cudaErrorMemoryValueTooLarge:
198 return "cudaErrorMemoryValueTooLarge";
200 case cudaErrorInvalidResourceHandle:
201 return "cudaErrorInvalidResourceHandle";
203 case cudaErrorNotReady:
204 return "cudaErrorNotReady";
206 case cudaErrorInsufficientDriver:
207 return "cudaErrorInsufficientDriver";
209 case cudaErrorSetOnActiveProcess:
210 return "cudaErrorSetOnActiveProcess";
212 case cudaErrorInvalidSurface:
213 return "cudaErrorInvalidSurface";
215 case cudaErrorNoDevice:
216 return "cudaErrorNoDevice";
218 case cudaErrorECCUncorrectable:
219 return "cudaErrorECCUncorrectable";
221 case cudaErrorSharedObjectSymbolNotFound:
222 return "cudaErrorSharedObjectSymbolNotFound";
224 case cudaErrorSharedObjectInitFailed:
225 return "cudaErrorSharedObjectInitFailed";
227 case cudaErrorUnsupportedLimit:
228 return "cudaErrorUnsupportedLimit";
230 case cudaErrorDuplicateVariableName:
231 return "cudaErrorDuplicateVariableName";
233 case cudaErrorDuplicateTextureName:
234 return "cudaErrorDuplicateTextureName";
236 case cudaErrorDuplicateSurfaceName:
237 return "cudaErrorDuplicateSurfaceName";
239 case cudaErrorDevicesUnavailable:
240 return "cudaErrorDevicesUnavailable";
242 case cudaErrorInvalidKernelImage:
243 return "cudaErrorInvalidKernelImage";
245 case cudaErrorNoKernelImageForDevice:
246 return "cudaErrorNoKernelImageForDevice";
248 case cudaErrorIncompatibleDriverContext:
249 return "cudaErrorIncompatibleDriverContext";
251 case cudaErrorPeerAccessAlreadyEnabled:
252 return "cudaErrorPeerAccessAlreadyEnabled";
254 case cudaErrorPeerAccessNotEnabled:
255 return "cudaErrorPeerAccessNotEnabled";
257 case cudaErrorDeviceAlreadyInUse:
258 return "cudaErrorDeviceAlreadyInUse";
260 case cudaErrorProfilerDisabled:
261 return "cudaErrorProfilerDisabled";
263 case cudaErrorProfilerNotInitialized:
264 return "cudaErrorProfilerNotInitialized";
266 case cudaErrorProfilerAlreadyStarted:
267 return "cudaErrorProfilerAlreadyStarted";
269 case cudaErrorProfilerAlreadyStopped:
270 return "cudaErrorProfilerAlreadyStopped";
273 case cudaErrorAssert:
274 return "cudaErrorAssert";
276 case cudaErrorTooManyPeers:
277 return "cudaErrorTooManyPeers";
279 case cudaErrorHostMemoryAlreadyRegistered:
280 return "cudaErrorHostMemoryAlreadyRegistered";
282 case cudaErrorHostMemoryNotRegistered:
283 return "cudaErrorHostMemoryNotRegistered";
286 case cudaErrorOperatingSystem:
287 return "cudaErrorOperatingSystem";
289 case cudaErrorPeerAccessUnsupported:
290 return "cudaErrorPeerAccessUnsupported";
292 case cudaErrorLaunchMaxDepthExceeded:
293 return "cudaErrorLaunchMaxDepthExceeded";
295 case cudaErrorLaunchFileScopedTex:
296 return "cudaErrorLaunchFileScopedTex";
298 case cudaErrorLaunchFileScopedSurf:
299 return "cudaErrorLaunchFileScopedSurf";
301 case cudaErrorSyncDepthExceeded:
302 return "cudaErrorSyncDepthExceeded";
304 case cudaErrorLaunchPendingCountExceeded:
305 return "cudaErrorLaunchPendingCountExceeded";
307 case cudaErrorNotPermitted:
308 return "cudaErrorNotPermitted";
310 case cudaErrorNotSupported:
311 return "cudaErrorNotSupported";
314 case cudaErrorHardwareStackError:
315 return "cudaErrorHardwareStackError";
317 case cudaErrorIllegalInstruction:
318 return "cudaErrorIllegalInstruction";
320 case cudaErrorMisalignedAddress:
321 return "cudaErrorMisalignedAddress";
323 case cudaErrorInvalidAddressSpace:
324 return "cudaErrorInvalidAddressSpace";
326 case cudaErrorInvalidPc:
327 return "cudaErrorInvalidPc";
329 case cudaErrorIllegalAddress:
330 return "cudaErrorIllegalAddress";
333 case cudaErrorInvalidPtx:
334 return "cudaErrorInvalidPtx";
336 case cudaErrorInvalidGraphicsContext:
337 return "cudaErrorInvalidGraphicsContext";
339 case cudaErrorStartupFailure:
340 return "cudaErrorStartupFailure";
342 case cudaErrorApiFailureBase:
343 return "cudaErrorApiFailureBase";
346 case cudaErrorNvlinkUncorrectable:
347 return "cudaErrorNvlinkUncorrectable";
358static const char *_cudaGetErrorEnum(cublasStatus_t error) {
360 case CUBLAS_STATUS_SUCCESS:
361 return "CUBLAS_STATUS_SUCCESS";
363 case CUBLAS_STATUS_NOT_INITIALIZED:
364 return "CUBLAS_STATUS_NOT_INITIALIZED";
366 case CUBLAS_STATUS_ALLOC_FAILED:
367 return "CUBLAS_STATUS_ALLOC_FAILED";
369 case CUBLAS_STATUS_INVALID_VALUE:
370 return "CUBLAS_STATUS_INVALID_VALUE";
372 case CUBLAS_STATUS_ARCH_MISMATCH:
373 return "CUBLAS_STATUS_ARCH_MISMATCH";
375 case CUBLAS_STATUS_MAPPING_ERROR:
376 return "CUBLAS_STATUS_MAPPING_ERROR";
378 case CUBLAS_STATUS_EXECUTION_FAILED:
379 return "CUBLAS_STATUS_EXECUTION_FAILED";
381 case CUBLAS_STATUS_INTERNAL_ERROR:
382 return "CUBLAS_STATUS_INTERNAL_ERROR";
384 case CUBLAS_STATUS_NOT_SUPPORTED:
385 return "CUBLAS_STATUS_NOT_SUPPORTED";
387 case CUBLAS_STATUS_LICENSE_ERROR:
388 return "CUBLAS_STATUS_LICENSE_ERROR";
395 #ifdef CUSOLVER_COMMON_H_
397static const char *_cudaGetErrorEnum(cusolverStatus_t error) {
399 case CUSOLVER_STATUS_SUCCESS:
400 return "CUSOLVER_STATUS_SUCCESS";
401 case CUSOLVER_STATUS_NOT_INITIALIZED:
402 return "CUSOLVER_STATUS_NOT_INITIALIZED";
403 case CUSOLVER_STATUS_ALLOC_FAILED:
404 return "CUSOLVER_STATUS_ALLOC_FAILED";
405 case CUSOLVER_STATUS_INVALID_VALUE:
406 return "CUSOLVER_STATUS_INVALID_VALUE";
407 case CUSOLVER_STATUS_ARCH_MISMATCH:
408 return "CUSOLVER_STATUS_ARCH_MISMATCH";
409 case CUSOLVER_STATUS_MAPPING_ERROR:
410 return "CUSOLVER_STATUS_MAPPING_ERROR";
411 case CUSOLVER_STATUS_EXECUTION_FAILED:
412 return "CUSOLVER_STATUS_EXECUTION_FAILED";
413 case CUSOLVER_STATUS_INTERNAL_ERROR:
414 return "CUSOLVER_STATUS_INTERNAL_ERROR";
415 case CUSOLVER_STATUS_MATRIX_TYPE_NOT_SUPPORTED:
416 return "CUSOLVER_STATUS_MATRIX_TYPE_NOT_SUPPORTED";
417 case CUSOLVER_STATUS_NOT_SUPPORTED:
418 return "CUSOLVER_STATUS_NOT_SUPPORTED ";
419 case CUSOLVER_STATUS_ZERO_PIVOT:
420 return "CUSOLVER_STATUS_ZERO_PIVOT";
421 case CUSOLVER_STATUS_INVALID_LICENSE:
422 return "CUSOLVER_STATUS_INVALID_LICENSE";
431static const char *_cudaGetErrorEnum(curandStatus_t error) {
433 case CURAND_STATUS_SUCCESS:
434 return "CURAND_STATUS_SUCCESS";
435 case CURAND_STATUS_VERSION_MISMATCH:
436 return "CURAND_STATUS_VERSION_MISMATCH";
437 case CURAND_STATUS_NOT_INITIALIZED:
438 return "CURAND_STATUS_NOT_INITIALIZED";
439 case CURAND_STATUS_ALLOCATION_FAILED:
440 return "CURAND_STATUS_ALLOCATION_FAILED";
441 case CURAND_STATUS_TYPE_ERROR:
442 return "CURAND_STATUS_TYPE_ERROR";
443 case CURAND_STATUS_OUT_OF_RANGE:
444 return "CURAND_STATUS_OUT_OF_RANGE";
445 case CURAND_STATUS_LENGTH_NOT_MULTIPLE:
446 return "CURAND_STATUS_LENGTH_NOT_MULTIPLE";
447 case CURAND_STATUS_DOUBLE_PRECISION_REQUIRED:
448 return "CURAND_STATUS_DOUBLE_PRECISION_REQUIRED";
449 case CURAND_STATUS_LAUNCH_FAILURE:
450 return "CURAND_STATUS_LAUNCH_FAILURE";
451 case CURAND_STATUS_PREEXISTING_FAILURE:
452 return "CURAND_STATUS_PREEXISTING_FAILURE";
453 case CURAND_STATUS_INITIALIZATION_FAILED:
454 return "CURAND_STATUS_INITIALIZATION_FAILED";
455 case CURAND_STATUS_ARCH_MISMATCH:
456 return "CURAND_STATUS_ARCH_MISMATCH";
457 case CURAND_STATUS_INTERNAL_ERROR:
458 return "CURAND_STATUS_INTERNAL_ERROR";
466static const char *_cudaGetErrorEnum(cutensorStatus_t error) {
467 return cutensorGetErrorString(error);
471 #ifdef __DRIVER_TYPES_H__
473 #define DEVICE_RESET cudaDeviceReset();
482void check(T result,
char const *
const func,
const char *
const file,
int const line) {
484 fprintf(stderr,
"CUDA error at %s:%d code=%d(%s) \"%s\" \n", file, line,
485 static_cast<unsigned int>(result), _cudaGetErrorEnum(result), func);
492 #ifdef __DRIVER_TYPES_H__
495 #define checkCudaErrors(val) check((val), #val, __FILE__, __LINE__)