1*da0073e9SAndroid Build Coastguard Worker #include <c10/cuda/CUDAMiscFunctions.h> 2*da0073e9SAndroid Build Coastguard Worker #include <cstdlib> 3*da0073e9SAndroid Build Coastguard Worker 4*da0073e9SAndroid Build Coastguard Worker namespace c10::cuda { 5*da0073e9SAndroid Build Coastguard Worker get_cuda_check_suffix()6*da0073e9SAndroid Build Coastguard Workerconst char* get_cuda_check_suffix() noexcept { 7*da0073e9SAndroid Build Coastguard Worker static char* device_blocking_flag = getenv("CUDA_LAUNCH_BLOCKING"); 8*da0073e9SAndroid Build Coastguard Worker static bool blocking_enabled = 9*da0073e9SAndroid Build Coastguard Worker (device_blocking_flag && atoi(device_blocking_flag)); 10*da0073e9SAndroid Build Coastguard Worker if (blocking_enabled) { 11*da0073e9SAndroid Build Coastguard Worker return ""; 12*da0073e9SAndroid Build Coastguard Worker } else { 13*da0073e9SAndroid Build Coastguard Worker return "\nCUDA kernel errors might be asynchronously reported at some" 14*da0073e9SAndroid Build Coastguard Worker " other API call, so the stacktrace below might be incorrect." 15*da0073e9SAndroid Build Coastguard Worker "\nFor debugging consider passing CUDA_LAUNCH_BLOCKING=1"; 16*da0073e9SAndroid Build Coastguard Worker } 17*da0073e9SAndroid Build Coastguard Worker } getFreeMutex()18*da0073e9SAndroid Build Coastguard Workerstd::mutex* getFreeMutex() { 19*da0073e9SAndroid Build Coastguard Worker static std::mutex cuda_free_mutex; 20*da0073e9SAndroid Build Coastguard Worker return &cuda_free_mutex; 21*da0073e9SAndroid Build Coastguard Worker } 22*da0073e9SAndroid Build Coastguard Worker 23*da0073e9SAndroid Build Coastguard Worker } // namespace c10::cuda 24