@@ -90,21 +90,6 @@ 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-
10893/* * \internal */
10994EIGEN_DEVICE_FUNC
11095inline void manage_caching_sizes (Action action, std::ptrdiff_t * l1, std::ptrdiff_t * l2, std::ptrdiff_t * l3)
@@ -133,22 +118,22 @@ inline void manage_caching_sizes(Action action, std::ptrdiff_t* l1, std::ptrdiff
133118 eigen_internal_assert (false );
134119 }
135120 #else // EIGEN_CUDA_ARCH
121+ static CacheSizes m_cacheSizes;
136122
137- auto & cacheSizes = CacheSizeGlobalHelper<void >::s_cacheSizes;
138123 if (action==SetAction)
139124 {
140125 // set the cpu cache size and cache all block sizes from a global cache size in byte
141126 eigen_internal_assert (l1!=0 && l2!=0 );
142- cacheSizes .m_l1 = *l1;
143- cacheSizes .m_l2 = *l2;
144- cacheSizes .m_l3 = *l3;
127+ m_cacheSizes .m_l1 = *l1;
128+ m_cacheSizes .m_l2 = *l2;
129+ m_cacheSizes .m_l3 = *l3;
145130 }
146131 else if (action==GetAction)
147132 {
148133 eigen_internal_assert (l1!=0 && l2!=0 );
149- *l1 = cacheSizes .m_l1 ;
150- *l2 = cacheSizes .m_l2 ;
151- *l3 = cacheSizes .m_l3 ;
134+ *l1 = m_cacheSizes .m_l1 ;
135+ *l2 = m_cacheSizes .m_l2 ;
136+ *l3 = m_cacheSizes .m_l3 ;
152137 }
153138 else
154139 {
0 commit comments