1*da0073e9SAndroid Build Coastguard Worker #include <c10/cuda/CUDAException.h> 2*da0073e9SAndroid Build Coastguard Worker 3*da0073e9SAndroid Build Coastguard Worker #include <c10/cuda/CUDADeviceAssertionHost.h> 4*da0073e9SAndroid Build Coastguard Worker #include <c10/util/Exception.h> 5*da0073e9SAndroid Build Coastguard Worker #include <cuda_runtime.h> 6*da0073e9SAndroid Build Coastguard Worker 7*da0073e9SAndroid Build Coastguard Worker #include <string> 8*da0073e9SAndroid Build Coastguard Worker 9*da0073e9SAndroid Build Coastguard Worker namespace c10::cuda { 10*da0073e9SAndroid Build Coastguard Worker c10_cuda_check_implementation(const int32_t err,const char * filename,const char * function_name,const int line_number,const bool include_device_assertions)11*da0073e9SAndroid Build Coastguard Workervoid c10_cuda_check_implementation( 12*da0073e9SAndroid Build Coastguard Worker const int32_t err, 13*da0073e9SAndroid Build Coastguard Worker const char* filename, 14*da0073e9SAndroid Build Coastguard Worker const char* function_name, 15*da0073e9SAndroid Build Coastguard Worker const int line_number, 16*da0073e9SAndroid Build Coastguard Worker const bool include_device_assertions) { 17*da0073e9SAndroid Build Coastguard Worker const auto cuda_error = static_cast<cudaError_t>(err); 18*da0073e9SAndroid Build Coastguard Worker const auto cuda_kernel_failure = include_device_assertions 19*da0073e9SAndroid Build Coastguard Worker ? c10::cuda::CUDAKernelLaunchRegistry::get_singleton_ref().has_failed() 20*da0073e9SAndroid Build Coastguard Worker : false; 21*da0073e9SAndroid Build Coastguard Worker 22*da0073e9SAndroid Build Coastguard Worker if (C10_LIKELY(cuda_error == cudaSuccess && !cuda_kernel_failure)) { 23*da0073e9SAndroid Build Coastguard Worker return; 24*da0073e9SAndroid Build Coastguard Worker } 25*da0073e9SAndroid Build Coastguard Worker 26*da0073e9SAndroid Build Coastguard Worker auto error_unused C10_UNUSED = cudaGetLastError(); 27*da0073e9SAndroid Build Coastguard Worker (void)error_unused; 28*da0073e9SAndroid Build Coastguard Worker 29*da0073e9SAndroid Build Coastguard Worker std::string check_message; 30*da0073e9SAndroid Build Coastguard Worker #ifndef STRIP_ERROR_MESSAGES 31*da0073e9SAndroid Build Coastguard Worker check_message.append("CUDA error: "); 32*da0073e9SAndroid Build Coastguard Worker check_message.append(cudaGetErrorString(cuda_error)); 33*da0073e9SAndroid Build Coastguard Worker check_message.append(c10::cuda::get_cuda_check_suffix()); 34*da0073e9SAndroid Build Coastguard Worker check_message.append("\n"); 35*da0073e9SAndroid Build Coastguard Worker if (include_device_assertions) { 36*da0073e9SAndroid Build Coastguard Worker check_message.append(c10_retrieve_device_side_assertion_info()); 37*da0073e9SAndroid Build Coastguard Worker } else { 38*da0073e9SAndroid Build Coastguard Worker check_message.append( 39*da0073e9SAndroid Build Coastguard Worker "Device-side assertions were explicitly omitted for this error check; the error probably arose while initializing the DSA handlers."); 40*da0073e9SAndroid Build Coastguard Worker } 41*da0073e9SAndroid Build Coastguard Worker #endif 42*da0073e9SAndroid Build Coastguard Worker 43*da0073e9SAndroid Build Coastguard Worker TORCH_CHECK(false, check_message); 44*da0073e9SAndroid Build Coastguard Worker } 45*da0073e9SAndroid Build Coastguard Worker 46*da0073e9SAndroid Build Coastguard Worker } // namespace c10::cuda 47