Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/FBGEMM.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoung Jin Kim <youki@microsoft.com>2020-05-15 19:44:35 +0300
committerYoung Jin Kim <youki@microsoft.com>2020-05-15 19:44:35 +0300
commita06c0434b18e551a4a0f55eb33e617c39817fb64 (patch)
tree8987147fa653fd3ab23fc0c9e94bc10443278994
parent880db023d1126b7b245956b40e9c6c85b172f957 (diff)
Fixed static initialization fiascoyouki/unordered_map
-rw-r--r--src/CodeCache.h1
-rw-r--r--src/GenerateKernel.h14
-rw-r--r--src/GenerateKernelU8S8S32ACC16.cc6
-rw-r--r--src/GenerateKernelU8S8S32ACC16Avx512.cc6
-rw-r--r--src/GenerateKernelU8S8S32ACC32.cc8
-rw-r--r--src/GenerateKernelU8S8S32ACC32Avx512.cc6
-rw-r--r--src/GenerateKernelU8S8S32ACC32Avx512VNNI.cc6
-rw-r--r--src/GroupwiseConv.h8
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