From cf61bceab9cc50256177972f6732ce299e4b1886 Mon Sep 17 00:00:00 2001 From: Olli Lupton Date: Wed, 10 Aug 2022 14:15:10 +0200 Subject: [PATCH 1/3] avoid one static variable --- Eigen/src/Core/products/GeneralBlockPanelKernel.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Eigen/src/Core/products/GeneralBlockPanelKernel.h b/Eigen/src/Core/products/GeneralBlockPanelKernel.h index b1a127754..aacf07de7 100644 --- a/Eigen/src/Core/products/GeneralBlockPanelKernel.h +++ b/Eigen/src/Core/products/GeneralBlockPanelKernel.h @@ -87,8 +87,18 @@ struct CacheSizes { /** \internal */ inline void manage_caching_sizes(Action action, std::ptrdiff_t* l1, std::ptrdiff_t* l2, std::ptrdiff_t* l3) { +#if defined(__NVCOMPILER) && (defined(_OPENMP) || defined(_OPENACC)) + if(action==GetAction) + { + // Volta, Turing, or newer + // - the L1 cache is configurable at runtime, with a minimum of 32 KB/SM + // - the L2 cache depends on the actual card, with a minimum of 64 KB/SM + *l1 = 32 * 1024; + *l2 = 64 * 1024; + *l3 = 0; + } +#else static CacheSizes m_cacheSizes; - if(action==SetAction) { // set the cpu cache size and cache all block sizes from a global cache size in byte @@ -104,6 +114,7 @@ inline void manage_caching_sizes(Action action, std::ptrdiff_t* l1, std::ptrdiff *l2 = m_cacheSizes.m_l2; *l3 = m_cacheSizes.m_l3; } +#endif else { eigen_internal_assert(false); -- GitLab From 0721ca2aac433624eaeca79b0392c4ea5c7e1f75 Mon Sep 17 00:00:00 2001 From: Olli Lupton Date: Thu, 11 Aug 2022 08:57:23 +0200 Subject: [PATCH 2/3] one more workaround for nvc++ --- Eigen/src/Core/GenericPacketMath.h | 2 +- Eigen/src/Core/products/GeneralBlockPanelKernel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Eigen/src/Core/GenericPacketMath.h b/Eigen/src/Core/GenericPacketMath.h index e1e9bfc4b..09efb6745 100644 --- a/Eigen/src/Core/GenericPacketMath.h +++ b/Eigen/src/Core/GenericPacketMath.h @@ -510,7 +510,7 @@ struct pminmax_impl { }; -#ifndef SYCL_DEVICE_ONLY +#if !defined(SYCL_DEVICE_ONLY) && !defined(__NVCOMPILER) #define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func) Func #else #define EIGEN_BINARY_OP_NAN_PROPAGATION(Type, Func) \ diff --git a/Eigen/src/Core/products/GeneralBlockPanelKernel.h b/Eigen/src/Core/products/GeneralBlockPanelKernel.h index aacf07de7..900daaf1b 100644 --- a/Eigen/src/Core/products/GeneralBlockPanelKernel.h +++ b/Eigen/src/Core/products/GeneralBlockPanelKernel.h @@ -87,7 +87,7 @@ struct CacheSizes { /** \internal */ inline void manage_caching_sizes(Action action, std::ptrdiff_t* l1, std::ptrdiff_t* l2, std::ptrdiff_t* l3) { -#if defined(__NVCOMPILER) && (defined(_OPENMP) || defined(_OPENACC)) +#ifdef __NVCOMPILER if(action==GetAction) { // Volta, Turing, or newer -- GitLab From 6dc7152d540df3a1dd10a62c0ad860ffa9b3719b Mon Sep 17 00:00:00 2001 From: Olli Lupton Date: Thu, 11 Aug 2022 11:05:57 +0200 Subject: [PATCH 3/3] Avoid another static variable. --- Eigen/src/Core/products/TriangularSolverVector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Eigen/src/Core/products/TriangularSolverVector.h b/Eigen/src/Core/products/TriangularSolverVector.h index b8fbb5bcc..8b2128902 100644 --- a/Eigen/src/Core/products/TriangularSolverVector.h +++ b/Eigen/src/Core/products/TriangularSolverVector.h @@ -102,7 +102,7 @@ struct triangular_solve_vector,LhsMap>, const LhsMap& > cjLhs(lhs); - static const Index PanelWidth = EIGEN_TUNE_TRIANGULAR_PANEL_WIDTH; + constexpr Index PanelWidth = EIGEN_TUNE_TRIANGULAR_PANEL_WIDTH; for(Index pi=IsLower ? 0 : size; IsLower ? pi0; -- GitLab