#include #include #include #include #include namespace torch { namespace utils { void cuda_lazy_init() { AutoGIL g; // Protected by the GIL. We don't use call_once because under ASAN it // has a buggy implementation that deadlocks if an instance throws an // exception. In any case, call_once isn't necessary, because we // have taken a lock. static bool run_yet = false; if (!run_yet) { auto module = THPObjectPtr(PyImport_ImportModule("torch.cuda")); if (!module) throw python_error(); auto res = THPObjectPtr(PyObject_CallMethod(module.get(), "_lazy_init", "")); if (!res) throw python_error(); run_yet = true; } } } }