Skip to content

Commit fadddd6

Browse files
authored
Avoid function-local static variables. (#1)
2 parents e5a8b02 + a25fab3 commit fadddd6

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

Eigen/src/Core/products/GeneralBlockPanelKernel.h

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,21 @@ struct CacheSizes {
9090
std::ptrdiff_t m_l3;
9191
};
9292

93+
// In C++17 this could be an inline variable, see for example
94+
// https://stackoverflow.com/questions/38043442/how-do-inline-variables-work
95+
template <typename>
96+
struct CacheSizeGlobalHelper {
97+
static CacheSizes s_cacheSizes;
98+
};
99+
#ifdef _OPENMP
100+
#pragma omp declare target
101+
#endif
102+
template <typename T>
103+
CacheSizes CacheSizeGlobalHelper<T>::s_cacheSizes;
104+
#ifdef _OPENMP
105+
#pragma omp end declare target
106+
#endif
107+
93108
/** \internal */
94109
EIGEN_DEVICE_FUNC
95110
inline void manage_caching_sizes(Action action, std::ptrdiff_t* l1, std::ptrdiff_t* l2, std::ptrdiff_t* l3)
@@ -118,22 +133,22 @@ inline void manage_caching_sizes(Action action, std::ptrdiff_t* l1, std::ptrdiff
118133
eigen_internal_assert(false);
119134
}
120135
#else // EIGEN_CUDA_ARCH
121-
static CacheSizes m_cacheSizes;
122136

137+
auto& cacheSizes = CacheSizeGlobalHelper<void>::s_cacheSizes;
123138
if(action==SetAction)
124139
{
125140
// set the cpu cache size and cache all block sizes from a global cache size in byte
126141
eigen_internal_assert(l1!=0 && l2!=0);
127-
m_cacheSizes.m_l1 = *l1;
128-
m_cacheSizes.m_l2 = *l2;
129-
m_cacheSizes.m_l3 = *l3;
142+
cacheSizes.m_l1 = *l1;
143+
cacheSizes.m_l2 = *l2;
144+
cacheSizes.m_l3 = *l3;
130145
}
131146
else if(action==GetAction)
132147
{
133148
eigen_internal_assert(l1!=0 && l2!=0);
134-
*l1 = m_cacheSizes.m_l1;
135-
*l2 = m_cacheSizes.m_l2;
136-
*l3 = m_cacheSizes.m_l3;
149+
*l1 = cacheSizes.m_l1;
150+
*l2 = cacheSizes.m_l2;
151+
*l3 = cacheSizes.m_l3;
137152
}
138153
else
139154
{

0 commit comments

Comments
 (0)