[Beignet] [PATCH] GBE: refine the llvm multi-thread related code.
Ruiling Song
ruiling.song at intel.com
Tue Aug 26 00:39:24 PDT 2014
LLVM 3.5 remove llvm_start/stop_multithreaded() API, instead multi-thread
support is determined when build llvm(build option LLVM_ENABLE_THREADS).
llvm_is_multithreaded() is used to check whether llvm is built with
muti-thread support.
If multi-thread is not support(LLVM3.3/3.4 or 3.5 built with LLVM_ENABLE_THREADS off),
we simply add a mutex when calling clang/llvm related API.
Signed-off-by: Ruiling Song <ruiling.song at intel.com>
---
backend/src/backend/program.cpp | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/backend/src/backend/program.cpp b/backend/src/backend/program.cpp
index 50396c8..d992f7b 100644
--- a/backend/src/backend/program.cpp
+++ b/backend/src/backend/program.cpp
@@ -846,11 +846,14 @@ namespace gbe {
// will delete the module and act in GenProgram::CleanLlvmResource().
llvm::Module * out_module;
llvm::LLVMContext* llvm_ctx = new llvm::LLVMContext;
+
+ static std::mutex llvm_mutex;
+ if (!llvm::llvm_is_multithreaded())
+ llvm_mutex.lock();
+
if (buildModuleFromSource(clName.c_str(), &out_module, llvm_ctx, clOpt.c_str(),
stringSize, err, errSize)) {
// Now build the program from llvm
- static std::mutex gbe_mutex;
- gbe_mutex.lock();
size_t clangErrSize = 0;
if (err != NULL) {
GBE_ASSERT(errSize != NULL);
@@ -863,11 +866,14 @@ namespace gbe {
err, errSize, optLevel);
if (err != NULL)
*errSize += clangErrSize;
- gbe_mutex.unlock();
if (OCL_OUTPUT_BUILD_LOG && options)
llvm::errs() << options;
} else
p = NULL;
+
+ if (!llvm::llvm_is_multithreaded())
+ llvm_mutex.unlock();
+
remove(clName.c_str());
return p;
}
@@ -1261,11 +1267,9 @@ namespace gbe
gbe_release_printf_info = gbe::kernelReleasePrintfSet;
gbe_output_printf = gbe::kernelOutputPrintf;
genSetupCallBacks();
- llvm::llvm_start_multithreaded();
}
~CallBackInitializer() {
- llvm::llvm_stop_multithreaded();
#if (LLVM_VERSION_MAJOR == 3) && (LLVM_VERSION_MINOR > 3)
llvm::llvm_shutdown();
#endif
--
1.7.10.4
More information about the Beignet
mailing list