xref: /aosp_15_r20/external/pytorch/c10/cuda/CUDAMiscFunctions.cpp (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
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 Worker const 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 Worker std::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