aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2010-06-21 23:44:20 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2010-06-21 23:44:20 +0200
commit98686ab86ce062e1dbbf4ab15ef680387db35416 (patch)
tree3da77eb969beafebd0308081d674058c40bf9775 /Eigen/src/Core
parent0212eec23f4cb64e8426bf32568156df302f8fcf (diff)
fix in case we don't know how to query the L1/L2 cache sizes
Diffstat (limited to 'Eigen/src/Core')
-rw-r--r--Eigen/src/Core/products/GeneralBlockPanelKernel.h4
-rw-r--r--Eigen/src/Core/util/Memory.h8
2 files changed, 10 insertions, 2 deletions
diff --git a/Eigen/src/Core/products/GeneralBlockPanelKernel.h b/Eigen/src/Core/products/GeneralBlockPanelKernel.h
index 167a1ea8d..4e5ca77e7 100644
--- a/Eigen/src/Core/products/GeneralBlockPanelKernel.h
+++ b/Eigen/src/Core/products/GeneralBlockPanelKernel.h
@@ -35,8 +35,8 @@ inline void ei_manage_caching_sizes(Action action, std::ptrdiff_t* l1=0, std::pt
m_l1CacheSize = ei_queryL1CacheSize();
m_l2CacheSize = ei_queryTopLevelCacheSize();
- if(m_l1CacheSize==0) m_l1CacheSize = 8 * 1024;
- if(m_l2CacheSize==0) m_l2CacheSize = 1 * 1024 * 1024;
+ if(m_l1CacheSize<=0) m_l1CacheSize = 8 * 1024;
+ if(m_l2CacheSize<=0) m_l2CacheSize = 1 * 1024 * 1024;
}
if(action==SetAction)
diff --git a/Eigen/src/Core/util/Memory.h b/Eigen/src/Core/util/Memory.h
index 810bbfacd..5bad8e37e 100644
--- a/Eigen/src/Core/util/Memory.h
+++ b/Eigen/src/Core/util/Memory.h
@@ -603,6 +603,7 @@ public:
* \returns the size in Bytes of the L1 data cache */
inline std::ptrdiff_t ei_queryL1CacheSize()
{
+ #ifdef EIGEN_CPUID
int abcd[4];
// try the direct method using extended level
@@ -640,17 +641,24 @@ inline std::ptrdiff_t ei_queryL1CacheSize()
}
return l1*1024;
+ #else
+ return -1;
+ #endif
}
/** \internal
* \returns the size in Bytes of the L2 or L3 cache if this later is present */
inline std::ptrdiff_t ei_queryTopLevelCacheSize()
{
+ #ifdef EIGEN_CPUID
int abcd[4];
EIGEN_CPUID(abcd,0x80000006);
std::ptrdiff_t l2 = std::ptrdiff_t(abcd[2] >> 16) * 1024;
std::ptrdiff_t l3 = std::ptrdiff_t((abcd[3] & 0xFFFC000) >> 18) * 512 * 1024;
return std::max(l2,l3);
+ #else
+ return -1;
+ #endif
}
#endif // EIGEN_MEMORY_H