|  | #include <c10/cuda/CUDAException.h> | 
|  |  | 
|  | #include <c10/cuda/CUDADeviceAssertionHost.h> | 
|  | #include <c10/util/Exception.h> | 
|  | #include <cuda_runtime.h> | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | namespace c10 { | 
|  | namespace cuda { | 
|  |  | 
|  | void c10_cuda_check_implementation( | 
|  | const int32_t err, | 
|  | const char* filename, | 
|  | const char* function_name, | 
|  | const int line_number, | 
|  | const bool include_device_assertions) { | 
|  | const auto cuda_error = static_cast<cudaError_t>(err); | 
|  | const auto cuda_kernel_failure = include_device_assertions | 
|  | ? c10::cuda::CUDAKernelLaunchRegistry::get_singleton_ref().has_failed() | 
|  | : false; | 
|  |  | 
|  | if (C10_LIKELY(cuda_error == cudaSuccess && !cuda_kernel_failure)) { | 
|  | return; | 
|  | } | 
|  |  | 
|  | auto error_unused C10_UNUSED = cudaGetLastError(); | 
|  | (void)error_unused; | 
|  |  | 
|  | std::string check_message; | 
|  | #ifndef STRIP_ERROR_MESSAGES | 
|  | check_message.append("CUDA error: "); | 
|  | check_message.append(cudaGetErrorString(cuda_error)); | 
|  | check_message.append(c10::cuda::get_cuda_check_suffix()); | 
|  | check_message.append("\n"); | 
|  | if (include_device_assertions) { | 
|  | check_message.append(c10_retrieve_device_side_assertion_info()); | 
|  | } else { | 
|  | check_message.append( | 
|  | "Device-side assertions were explicitly omitted for this error check; the error probably arose while initializing the DSA handlers."); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | TORCH_CHECK(false, check_message); | 
|  | } | 
|  |  | 
|  | } // namespace cuda | 
|  | } // namespace c10 |