From d912bb757cb5ce415d516c6762456a18c4d1ed7a Mon Sep 17 00:00:00 2001 From: Hans Pabst Date: Tue, 8 Oct 2024 16:04:23 +0200 Subject: [PATCH] Implement array_eq_i using libxsmm_diff - Removed duplicated array_eq_i. --- src/tensors/dbcsr_array_list_methods.F | 14 ++++++++++++-- src/tensors/dbcsr_tensor_types.F | 12 ------------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/tensors/dbcsr_array_list_methods.F b/src/tensors/dbcsr_array_list_methods.F index a80277abf77..1077e172488 100644 --- a/src/tensors/dbcsr_array_list_methods.F +++ b/src/tensors/dbcsr_array_list_methods.F @@ -19,6 +19,13 @@ MODULE dbcsr_array_list_methods USE dbcsr_allocate_wrap, ONLY: allocate_any #include "base/dbcsr_base_uses.f90" +#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) + USE libxsmm, ONLY: libxsmm_diff +# define PURE_ARRAY_EQ +#else +# define PURE_ARRAY_EQ PURE +#endif + IMPLICIT NONE PRIVATE CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dbcsr_array_list_methods' @@ -275,15 +282,18 @@ FUNCTION check_equal(list1, list2) check_equal = array_eq_i(list1%col_data, list2%col_data) .AND. array_eq_i(list1%ptr, list2%ptr) END FUNCTION - PURE FUNCTION array_eq_i(arr1, arr2) + PURE_ARRAY_EQ FUNCTION array_eq_i(arr1, arr2) !! check whether two arrays are equal INTEGER, INTENT(IN), DIMENSION(:) :: arr1 INTEGER, INTENT(IN), DIMENSION(:) :: arr2 LOGICAL :: array_eq_i +#if TO_VERSION(1, 11) <= TO_VERSION(LIBXSMM_CONFIG_VERSION_MAJOR, LIBXSMM_CONFIG_VERSION_MINOR) + array_eq_i = .NOT. libxsmm_diff(arr1, arr2) +#else array_eq_i = .FALSE. IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i = ALL(arr1 == arr2) - +#endif END FUNCTION END MODULE dbcsr_array_list_methods diff --git a/src/tensors/dbcsr_tensor_types.F b/src/tensors/dbcsr_tensor_types.F index c8eb1953355..17147fb49fa 100644 --- a/src/tensors/dbcsr_tensor_types.F +++ b/src/tensors/dbcsr_tensor_types.F @@ -698,18 +698,6 @@ SUBROUTINE dbcsr_t_distribution_new_expert(dist, pgrid, map1_2d, map2_2d, ${varl ALLOCATE (dist%refcount) dist%refcount = 1 CALL timestop(handle) - - CONTAINS - PURE FUNCTION array_eq_i(arr1, arr2) - INTEGER, INTENT(IN), DIMENSION(:) :: arr1 - INTEGER, INTENT(IN), DIMENSION(:) :: arr2 - LOGICAL :: array_eq_i - - array_eq_i = .FALSE. - IF (SIZE(arr1) .EQ. SIZE(arr2)) array_eq_i = ALL(arr1 == arr2) - - END FUNCTION - END SUBROUTINE SUBROUTINE dbcsr_t_distribution_destroy(dist)