未验证 提交 0cbdcdda 编写于 作者: R ronnywang 提交者: GitHub

call InitDevices only once (#47678)

上级 b4a3cca1
...@@ -164,61 +164,65 @@ void LoadCustomDevice(const std::string &library_dir) { ...@@ -164,61 +164,65 @@ void LoadCustomDevice(const std::string &library_dir) {
} }
#endif #endif
static std::once_flag init_devices_flag;
void InitDevices() { void InitDevices() {
// set name at the entry point of Paddle std::call_once(init_devices_flag, []() {
platform::SetCurrentThreadName("MainThread"); // set name at the entry point of Paddle
platform::SetCurrentThreadName("MainThread");
// CUPTI attribute should be set before any CUDA context is created (see CUPTI // CUPTI attribute should be set before any CUDA context is created (see CUPTI
// documentation about CUpti_ActivityAttribute). // documentation about CUpti_ActivityAttribute).
#ifdef PADDLE_WITH_CUDA #ifdef PADDLE_WITH_CUDA
InitCupti(); InitCupti();
#endif #endif
/*Init all available devices by default */ /*Init all available devices by default */
std::vector<int> devices; std::vector<int> devices;
#if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP) #if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP)
try { try {
// use user specified GPUs in single-node multi-process mode. // use user specified GPUs in single-node multi-process mode.
devices = platform::GetSelectedDevices(); devices = platform::GetSelectedDevices();
} catch (const std::exception &exp) { } catch (const std::exception &exp) {
LOG(WARNING) << "Compiled with WITH_GPU, but no GPU found in runtime."; LOG(WARNING) << "Compiled with WITH_GPU, but no GPU found in runtime.";
} }
#endif #endif
#ifdef PADDLE_WITH_XPU #ifdef PADDLE_WITH_XPU
try { try {
// use user specified XPUs in single-node multi-process mode. // use user specified XPUs in single-node multi-process mode.
devices = platform::GetXPUSelectedDevices(); devices = platform::GetXPUSelectedDevices();
} catch (const std::exception &exp) { } catch (const std::exception &exp) {
LOG(WARNING) << "Compiled with WITH_XPU, but no XPU found in runtime."; LOG(WARNING) << "Compiled with WITH_XPU, but no XPU found in runtime.";
} }
#endif #endif
#ifdef PADDLE_WITH_ASCEND_CL #ifdef PADDLE_WITH_ASCEND_CL
// NOTE(zhiqiu): use singleton to explicitly init and finalize ACL // NOTE(zhiqiu): use singleton to explicitly init and finalize ACL
platform::AclInstance::Instance(); // NOLINT platform::AclInstance::Instance(); // NOLINT
try { try {
// use user specified XPUs in single-node multi-process mode. // use user specified XPUs in single-node multi-process mode.
devices = platform::GetSelectedNPUDevices(); devices = platform::GetSelectedNPUDevices();
} catch (const std::exception &exp) { } catch (const std::exception &exp) {
LOG(WARNING) LOG(WARNING) << "Compiled with PADDLE_WITH_ASCEND_CL, but no NPU found "
<< "Compiled with PADDLE_WITH_ASCEND_CL, but no NPU found in runtime."; "in runtime.";
} }
#endif #endif
#ifdef PADDLE_WITH_IPU #ifdef PADDLE_WITH_IPU
try { try {
// use user specified IPUs. // use user specified IPUs.
devices = platform::GetSelectedIPUDevices(); devices = platform::GetSelectedIPUDevices();
} catch (const std::exception &exp) { } catch (const std::exception &exp) {
LOG(WARNING) LOG(WARNING)
<< "Compiled with PADDLE_WITH_IPU, but no IPU found in runtime."; << "Compiled with PADDLE_WITH_IPU, but no IPU found in runtime.";
} }
#endif #endif
#ifdef PADDLE_WITH_MLU #ifdef PADDLE_WITH_MLU
try { try {
// use user specified MLUs in single-node multi-process mode. // use user specified MLUs in single-node multi-process mode.
devices = platform::GetMLUSelectedDevices(); devices = platform::GetMLUSelectedDevices();
} catch (const std::exception &exp) { } catch (const std::exception &exp) {
LOG(WARNING) << "Compiled with WITH_MLU, but no MLU found in runtime."; LOG(WARNING) << "Compiled with WITH_MLU, but no MLU found in runtime.";
} }
#endif #endif
InitDevices(devices); InitDevices(devices);
});
} }
void InitDevices(const std::vector<int> devices) { void InitDevices(const std::vector<int> devices) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册