From 3a68ab49193389773c873843e0120d4f00ca7d50 Mon Sep 17 00:00:00 2001 From: sunway513 Date: Sat, 4 Aug 2018 01:48:06 +0000 Subject: [PATCH 1/3] Add startup loader under HIP_STARTUP_LOADER env var, disable by default --- src/program_state.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/program_state.cpp b/src/program_state.cpp index fab71b1def..17f127fe87 100644 --- a/src/program_state.cpp +++ b/src/program_state.cpp @@ -513,8 +513,9 @@ hsa_executable_t load_executable(const string& file, hsa_executable_t executable return executable; } -// To force HIP to load the kernels and to setup the function -// symbol map on program startup +// HIP startup kernel loader logic +// When enabled HIP_STARTUP_LOADER, HIP will load the kernels and setup +// the function symbol map on program startup class startup_kernel_loader { private: startup_kernel_loader() { functions(); } @@ -522,6 +523,12 @@ class startup_kernel_loader { startup_kernel_loader& operator=(const startup_kernel_loader&) = delete; static startup_kernel_loader skl; }; -startup_kernel_loader startup_kernel_loader::skl; + +extern "C" void __attribute__((constructor)) __startup_kernel_loader_init() { + if (atoi(std::getenv("HIP_STARTUP_LOADER"))) functions(); +} + +extern "C" void __attribute__((destructor)) __startup_kernel_loader_fini() { +} } // Namespace hip_impl. From 30dfa6f129baa91576ef86d1125d49111097d86f Mon Sep 17 00:00:00 2001 From: sunway513 Date: Sat, 4 Aug 2018 01:52:27 +0000 Subject: [PATCH 2/3] Add more check to ensure the startup loader only be enabled with the env var set to 1 --- src/program_state.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/program_state.cpp b/src/program_state.cpp index 17f127fe87..4c14eb2953 100644 --- a/src/program_state.cpp +++ b/src/program_state.cpp @@ -525,7 +525,7 @@ class startup_kernel_loader { }; extern "C" void __attribute__((constructor)) __startup_kernel_loader_init() { - if (atoi(std::getenv("HIP_STARTUP_LOADER"))) functions(); + if (atoi(std::getenv("HIP_STARTUP_LOADER")) == 1) functions(); } extern "C" void __attribute__((destructor)) __startup_kernel_loader_fini() { From 17f38937e07f3839368735453de28edf4514cfe0 Mon Sep 17 00:00:00 2001 From: sunway513 Date: Thu, 9 Aug 2018 16:40:26 +0000 Subject: [PATCH 3/3] resolve a segfault bug when env var not set; remove startup_kernel_loader class --- src/program_state.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/program_state.cpp b/src/program_state.cpp index 4c14eb2953..8766134582 100644 --- a/src/program_state.cpp +++ b/src/program_state.cpp @@ -516,16 +516,11 @@ hsa_executable_t load_executable(const string& file, hsa_executable_t executable // HIP startup kernel loader logic // When enabled HIP_STARTUP_LOADER, HIP will load the kernels and setup // the function symbol map on program startup -class startup_kernel_loader { - private: - startup_kernel_loader() { functions(); } - startup_kernel_loader(const startup_kernel_loader&) = delete; - startup_kernel_loader& operator=(const startup_kernel_loader&) = delete; - static startup_kernel_loader skl; -}; - extern "C" void __attribute__((constructor)) __startup_kernel_loader_init() { - if (atoi(std::getenv("HIP_STARTUP_LOADER")) == 1) functions(); + int hip_startup_loader=0; + if (std::getenv("HIP_STARTUP_LOADER")) + hip_startup_loader = atoi(std::getenv("HIP_STARTUP_LOADER")); + if (hip_startup_loader) functions(); } extern "C" void __attribute__((destructor)) __startup_kernel_loader_fini() {