diff options
author | Young Jin Kim <youki@microsoft.com> | 2020-05-15 19:44:35 +0300 |
---|---|---|
committer | Young Jin Kim <youki@microsoft.com> | 2020-05-15 19:44:35 +0300 |
commit | a06c0434b18e551a4a0f55eb33e617c39817fb64 (patch) | |
tree | 8987147fa653fd3ab23fc0c9e94bc10443278994 | |
parent | 880db023d1126b7b245956b40e9c6c85b172f957 (diff) |
Fixed static initialization fiascoyouki/unordered_map
-rw-r--r-- | src/CodeCache.h | 1 | ||||
-rw-r--r-- | src/GenerateKernel.h | 14 | ||||
-rw-r--r-- | src/GenerateKernelU8S8S32ACC16.cc | 6 | ||||
-rw-r--r-- | src/GenerateKernelU8S8S32ACC16Avx512.cc | 6 | ||||
-rw-r--r-- | src/GenerateKernelU8S8S32ACC32.cc | 8 | ||||
-rw-r--r-- | src/GenerateKernelU8S8S32ACC32Avx512.cc | 6 | ||||
-rw-r--r-- | src/GenerateKernelU8S8S32ACC32Avx512VNNI.cc | 6 | ||||
-rw-r--r-- | src/GroupwiseConv.h | 8 |
8 files changed, 31 insertions, 24 deletions
diff --git a/src/CodeCache.h b/src/CodeCache.h index 3c8e7a6..b8ee15c 100644 --- a/src/CodeCache.h +++ b/src/CodeCache.h @@ -30,6 +30,7 @@ class CodeCache { if (it != values_.end()) { return it->second; } else { + //std::cerr << "create" << std::endl; auto fn = generatorFunction(); values_[key] = fn; return fn; diff --git a/src/GenerateKernel.h b/src/GenerateKernel.h index cd136e1..3832f25 100644 --- a/src/GenerateKernel.h +++ b/src/GenerateKernel.h @@ -159,12 +159,18 @@ class CodeGenBase { int vectorWidth_; ///< Vector width in bits. int VLEN_; ///< Vector width in elements. - asmjit::JitRuntime &runtime() { - return codeCache_.second; + static std::pair<CodeCache<std::tuple<bool, int, int, int, int, int, int, int>, + jit_micro_kernel_fp>, asmjit::JitRuntime> &runtime() { + static thread_local std::pair<CodeCache<std::tuple<bool, int, int, int, int, int, int, int>, + jit_micro_kernel_fp>, asmjit::JitRuntime> codeCache_; + return codeCache_; } - std::pair<CodeCache<std::tuple<bool, int, int, int, int, int, int, int>, - jit_micro_kernel_fp>, asmjit::JitRuntime> codeCache_; }; +//template <typename TA, typename TB, typename TC, typename accT> +//thread_local std::pair<CodeCache<std::tuple<bool, int, int, int, int, int, int, int>, +// typename CodeGenBase<TA, TB, TC, accT>::jit_micro_kernel_fp>, asmjit::JitRuntime> +// CodeGenBase<TA, TB, TC, accT>::codeCache_; + } // namespace fbgemm diff --git a/src/GenerateKernelU8S8S32ACC16.cc b/src/GenerateKernelU8S8S32ACC16.cc index a2fdda3..cc77eab 100644 --- a/src/GenerateKernelU8S8S32ACC16.cc +++ b/src/GenerateKernelU8S8S32ACC16.cc @@ -168,9 +168,9 @@ CodeGenBase<uint8_t, int8_t, int32_t, int16_t>::getOrCreate<inst_set_t::avx2>( nRegBlockSize, nRegBlockSizeMin); - return codeCache_.first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { + return runtime().first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { asmjit::CodeHolder code; - code.init(runtime().codeInfo()); + code.init(runtime().second.codeInfo()); x86::Assembler assembler(&code); x86::Emitter *a = assembler.as<x86::Emitter>(); @@ -343,7 +343,7 @@ CodeGenBase<uint8_t, int8_t, int32_t, int16_t>::getOrCreate<inst_set_t::avx2>( asmjit::Error err; { //std::unique_lock<std::mutex> lock(rtMutex_); - err = runtime().add(&fn, &code); + err = runtime().second.add(&fn, &code); } if (err) { std::cout << "Error: in fn add" << std::endl; diff --git a/src/GenerateKernelU8S8S32ACC16Avx512.cc b/src/GenerateKernelU8S8S32ACC16Avx512.cc index c8d96b8..06169e9 100644 --- a/src/GenerateKernelU8S8S32ACC16Avx512.cc +++ b/src/GenerateKernelU8S8S32ACC16Avx512.cc @@ -175,9 +175,9 @@ CodeGenBase<uint8_t, int8_t, int32_t, int16_t>::getOrCreate<inst_set_t::avx512>( nRegBlockSize, nRegBlockSizeMin); - return codeCache_.first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { + return runtime().first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { asmjit::CodeHolder code; - code.init(runtime().codeInfo()); + code.init(runtime().second.codeInfo()); x86::Assembler assembler(&code); x86::Emitter *a = assembler.as<x86::Emitter>(); @@ -411,7 +411,7 @@ CodeGenBase<uint8_t, int8_t, int32_t, int16_t>::getOrCreate<inst_set_t::avx512>( asmjit::Error err; { //std::unique_lock<std::mutex> lock(rtMutex_); - err = runtime().add(&fn, &code); + err = runtime().second.add(&fn, &code); } if (err) { std::cout << "Error: in fn add" << std::endl; diff --git a/src/GenerateKernelU8S8S32ACC32.cc b/src/GenerateKernelU8S8S32ACC32.cc index e217c1c..984bcd4 100644 --- a/src/GenerateKernelU8S8S32ACC32.cc +++ b/src/GenerateKernelU8S8S32ACC32.cc @@ -173,9 +173,9 @@ CodeGenBase<uint8_t, int8_t, int32_t, int32_t>::getOrCreate<inst_set_t::avx2>( nRegBlockSize, nRegBlockSizeMin); - return codeCache_.first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { + return runtime().first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { asmjit::CodeHolder code; - code.init(runtime().codeInfo()); + code.init(runtime().second.codeInfo()); x86::Assembler assembler(&code); x86::Emitter *a = assembler.as<x86::Emitter>(); #if defined(FBGEMM_LOG_CODE) @@ -331,10 +331,10 @@ CodeGenBase<uint8_t, int8_t, int32_t, int32_t>::getOrCreate<inst_set_t::avx2>( asmjit::Error err; { //std::unique_lock<std::mutex> lock(rtMutex_); - err = runtime().add(&fn, &code); + err = runtime().second.add(&fn, &code); } if (err) { - std::cout << "Error: in fn add" << std::endl; + //std::cout << "Error: in fn add" << std::endl; return nullptr; } diff --git a/src/GenerateKernelU8S8S32ACC32Avx512.cc b/src/GenerateKernelU8S8S32ACC32Avx512.cc index fb2f8d1..6ad03ec 100644 --- a/src/GenerateKernelU8S8S32ACC32Avx512.cc +++ b/src/GenerateKernelU8S8S32ACC32Avx512.cc @@ -174,9 +174,9 @@ CodeGenBase<uint8_t, int8_t, int32_t, int32_t>::getOrCreate<inst_set_t::avx512>( nRegBlockSize, nRegBlockSizeMin); - return codeCache_.first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { + return runtime().first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { asmjit::CodeHolder code; - code.init(runtime().codeInfo()); + code.init(runtime().second.codeInfo()); x86::Assembler assembler(&code); x86::Emitter *a = assembler.as<x86::Emitter>(); #if defined(FBGEMM_LOG_CODE) @@ -423,7 +423,7 @@ CodeGenBase<uint8_t, int8_t, int32_t, int32_t>::getOrCreate<inst_set_t::avx512>( asmjit::Error err; { //std::unique_lock<std::mutex> lock(rtMutex_); - err = runtime().add(&fn, &code); + err = runtime().second.add(&fn, &code); } if (err) { std::cout << "Error: in fn add" << std::endl; diff --git a/src/GenerateKernelU8S8S32ACC32Avx512VNNI.cc b/src/GenerateKernelU8S8S32ACC32Avx512VNNI.cc index fe649ec..2722fc4 100644 --- a/src/GenerateKernelU8S8S32ACC32Avx512VNNI.cc +++ b/src/GenerateKernelU8S8S32ACC32Avx512VNNI.cc @@ -167,9 +167,9 @@ CodeGenBase<uint8_t, int8_t, int32_t, int32_t>::getOrCreate< nRegBlockSize, nRegBlockSizeMin); - return codeCache_.first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { + return runtime().first.getOrCreate(kernelSig, [&]() -> jit_micro_kernel_fp { asmjit::CodeHolder code; - code.init(runtime().codeInfo()); + code.init(runtime().second.codeInfo()); x86::Assembler assembler(&code); x86::Emitter *a = assembler.as<x86::Emitter>(); @@ -416,7 +416,7 @@ CodeGenBase<uint8_t, int8_t, int32_t, int32_t>::getOrCreate< asmjit::Error err; { //std::unique_lock<std::mutex> lock(rtMutex_); - err = runtime().add(&fn, &code); + err = runtime().second.add(&fn, &code); } if (err) { std::cout << "Error: in fn add" << std::endl; diff --git a/src/GroupwiseConv.h b/src/GroupwiseConv.h index 8bb9beb..58ee24d 100644 --- a/src/GroupwiseConv.h +++ b/src/GroupwiseConv.h @@ -230,9 +230,9 @@ class GenConvKernel { static std::mutex rtMutex_; ///< Controll access to runtime; - static CodeCache<size_t /*std::tuple<bool, int, int, int>*/, jit_conv_kernel_fp> + static CodeCache<std::tuple<bool, int, int, int>, jit_conv_kernel_fp> codeCache_; ///< JIT Code Cache for reuse. - static CodeCache<size_t /*std::tuple<bool, int, int, int>*/, jit_rowoffset_kernel_fp> + static CodeCache<std::tuple<bool, int, int, int>, jit_rowoffset_kernel_fp> codeCacheRowOffset_; ///< JIT Code Cache for row offset kernel. private: @@ -285,11 +285,11 @@ template <int SPATIAL_DIM, typename accT> std::mutex GenConvKernel<SPATIAL_DIM, accT>::rtMutex_; template <int SPATIAL_DIM, typename accT> -CodeCache<size_t /*std::tuple<bool, int, int, int>*/, jit_conv_kernel_fp> +CodeCache<std::tuple<bool, int, int, int>, jit_conv_kernel_fp> GenConvKernel<SPATIAL_DIM, accT>::codeCache_; template <int SPATIAL_DIM, typename accT> -CodeCache<size_t /*std::tuple<bool, int, int, int>*/, jit_rowoffset_kernel_fp> +CodeCache<std::tuple<bool, int, int, int>, jit_rowoffset_kernel_fp> GenConvKernel<SPATIAL_DIM, accT>::codeCacheRowOffset_; } // namespace fbgemm |