From 35dce0111bbc8142b316088f9f92c5d8993e3e22 Mon Sep 17 00:00:00 2001 From: wertysas Date: Thu, 30 Jan 2025 16:01:04 +0100 Subject: [PATCH] removed COPY_ARRAY and updated blk copy methods to use COPY_FUNC --- CMakeLists.txt | 2 +- field_RANKSUFF_data_module.fypp | 8 ++-- field_RANKSUFF_module.fypp | 4 +- field_data_module.fypp | 26 ------------ tests/test_get_device_data_bounds.F90 | 58 ++++++++++++++++++++++----- 5 files changed, 55 insertions(+), 43 deletions(-) delete mode 100644 field_data_module.fypp diff --git a/CMakeLists.txt b/CMakeLists.txt index e073de18..7cea3e5e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -173,7 +173,7 @@ endforeach () unset( non_ranksuff_srcs ) list ( APPEND non_ranksuff_srcs dev_alloc_module field_factory_module field_access_module field_array_module field_module field_shuffle_module field_util_module field_array_util_module field_shuffle_type_module host_alloc_module - field_gathscat_module field_gathscat_type_module field_data_module) + field_gathscat_module field_gathscat_type_module) if(HAVE_FIELD_GANG) list( APPEND non_ranksuff_srcs field_gang_module ) endif() diff --git a/field_RANKSUFF_data_module.fypp b/field_RANKSUFF_data_module.fypp index c5114296..6bc409c6 100644 --- a/field_RANKSUFF_data_module.fypp +++ b/field_RANKSUFF_data_module.fypp @@ -22,7 +22,7 @@ PRIVATE #:for ft in fieldTypeList #:set ftn = ft.name -PUBLIC :: ${ftn}$_COPY_ARRAY +PUBLIC :: ${ftn}$_COPY PUBLIC :: ${ftn}$_COPY_FUNC PUBLIC :: ${ftn}$_COPY_INTF @@ -92,7 +92,7 @@ CONTAINS END FUNCTION - SUBROUTINE ${ftn}$_COPY_ARRAY (HST, DEV, MAP_DEVPTR, KDIR, QUEUE) + SUBROUTINE ${ftn}$_COPY (HST, DEV, MAP_DEVPTR, KDIR, QUEUE) USE FIELD_ABORT_MODULE @@ -101,9 +101,9 @@ CONTAINS INTEGER (KIND=JPIM), INTENT (IN) :: KDIR INTEGER (KIND=JPIM), OPTIONAL, INTENT (IN) :: QUEUE - PROCEDURE (${ftn}$_COPY_INTF), POINTER :: FUNC + PROCEDURE (${ftn}$_COPY_INTF), POINTER :: FUNC - FUNC => ${ftn}$_COPY_FUNC (HST, DEV) + FUNC => ${ftn}$_COPY_FUNC (HST, DEV) CALL FUNC (HST, DEV, MAP_DEVPTR, KDIR, QUEUE) diff --git a/field_RANKSUFF_module.fypp b/field_RANKSUFF_module.fypp index 6e6906d8..d1f7c221 100644 --- a/field_RANKSUFF_module.fypp +++ b/field_RANKSUFF_module.fypp @@ -19,7 +19,6 @@ USE HOST_ALLOC_MODULE USE FIELD_BASIC_MODULE USE FIELD_CONSTANTS_MODULE USE FIELD_DEFAULTS_MODULE -USE FIELD_DATA_MODULE #:if defined('CUDA') USE CUDAFOR #:endif @@ -32,7 +31,6 @@ ${fieldType.useParkind1 ()}$ #:set ftn = ft.name USE FIELD_${RANK}$${SUFF}$_DATA_MODULE, ONLY : ${ftn}$_COPY_INTF #:endfor -USE FIELD_DATA_MODULE, ONLY : COPY_ARRAY IMPLICIT NONE @@ -480,7 +478,7 @@ CONTAINS DEV_BLK => SELF%DEVPTR(${':,'*(ft.rank-1)}$ LB+OFFSET : LB+OFFSET+BLK_BOUNDS(2)-BLK_BOUNDS(1)) CALL CPU_TIME(START) - CALL COPY_ARRAY(HST_BLK, DEV_BLK, SELF%MAP_DEVPTR, KDIR, QUEUE) + CALL SELF%COPY_FUNC (HST_BLK, DEV_BLK, SELF%MAP_DEVPTR, KDIR, QUEUE) CALL CPU_TIME(FINISH) IF (KDIR == NH2D) THEN diff --git a/field_data_module.fypp b/field_data_module.fypp deleted file mode 100644 index 20703984..00000000 --- a/field_data_module.fypp +++ /dev/null @@ -1,26 +0,0 @@ -#! (C) Copyright 2022- ECMWF. -#! (C) Copyright 2022- Meteo-France. -#! -#! This software is licensed under the terms of the Apache Licence Version 2.0 -#! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. -#! In applying this licence, ECMWF does not waive the privileges and immunities -#! granted to it by virtue of its status as an intergovernmental organisation -#! nor does it submit to any jurisdiction. - -MODULE FIELD_DATA_MODULE - -#:set fieldTypeList = fieldType.getFieldTypeList() -#:for ft in fieldTypeList -USE FIELD_${ft.rank}$${ft.suffix}$_DATA_MODULE, ONLY : ${ft.name}$_COPY_ARRAY - -#:endfor - -IMPLICIT NONE - -INTERFACE COPY_ARRAY -#:for ft in fieldTypeList - MODULE PROCEDURE ${ft.name}$_COPY_ARRAY -#:endfor -END INTERFACE - -END MODULE diff --git a/tests/test_get_device_data_bounds.F90 b/tests/test_get_device_data_bounds.F90 index 325a5269..95d2e04d 100644 --- a/tests/test_get_device_data_bounds.F90 +++ b/tests/test_get_device_data_bounds.F90 @@ -8,7 +8,7 @@ ! nor does it submit to any jurisdiction. PROGRAM TEST_GET_DEVICE_DATA_BOUNDS - + USE FIELD_MODULE USE FIELD_FACTORY_MODULE USE PARKIND1 @@ -20,7 +20,7 @@ PROGRAM TEST_GET_DEVICE_DATA_BOUNDS REAL(KIND=JPRB), POINTER :: PTR_GPU(:,:) LOGICAL :: OKAY INTEGER :: I,J - + CALL FIELD_NEW(F_PTR, LBOUNDS=[1,1], UBOUNDS=[128,3], PERSISTENT=.TRUE.) CALL F_PTR%GET_HOST_DATA_RDWR(PTR_CPU) PTR_CPU(:,1) = 42 @@ -29,7 +29,7 @@ PROGRAM TEST_GET_DEVICE_DATA_BOUNDS CALL F_PTR%GET_DEVICE_DATA_RDWR(PTR_GPU, BLK_BOUNDS=[1,2]) OKAY=.TRUE. - + !$acc serial, present(PTR_GPU), copy(OKAY) DO I=1,128 DO J = 1,2 @@ -46,12 +46,12 @@ PROGRAM TEST_GET_DEVICE_DATA_BOUNDS END DO END DO END IF - !$acc end serial - - IF (.NOT. OKAY) THEN + !$acc end serial + + IF (.NOT. OKAY) THEN CALL FIELD_ABORT("ERROR DATA NOT UPDATED ON DEVICE") END IF - + CALL F_PTR%SYNC_HOST_RDWR(BLK_BOUNDS=[1,2]) DO I=1,128 DO J = 1,2 @@ -61,9 +61,49 @@ PROGRAM TEST_GET_DEVICE_DATA_BOUNDS END DO END DO - IF (.NOT. OKAY) THEN - CALL FIELD_ABORT("ERROR HOST DATA NOT UPDATED BY SYNC_HOST_RDWR") + IF (.NOT. OKAY) THEN + CALL FIELD_ABORT("ERROR HOST DATA NOT UPDATED ON HOST") END IF + DO I=1,128 + IF ( PTR_CPU(I,3) /= 37 ) THEN + OKAY = .FALSE. + END IF + END DO + + IF (.NOT. OKAY) THEN + CALL FIELD_ABORT("ERROR THE 3RD COLUMN SHOULD NOT HAVE BEEN MODIFIED") + END IF + + ! Test single block offload + CALL F_PTR%GET_DEVICE_DATA_RDWR(PTR_GPU, BLK_BOUNDS=[3,3]) + OKAY=.TRUE. + + !$acc serial, present(PTR_GPU), copy(OKAY) + DO I=1,128 + IF ( PTR_GPU(I,3) /= 37 ) THEN + OKAY = .FALSE. + END IF + PTR_GPU(I,3) = 333 + END DO + !$acc end serial + + IF (.NOT. OKAY) THEN + CALL FIELD_ABORT("ERROR FINAL BLOCK DATA NOT UPDATED ON DEVICE") + END IF + + CALL F_PTR%SYNC_HOST_RDWR(BLK_BOUNDS=[3,3]) + + DO I=1,128 + IF (PTR_CPU(I,3) /= 333) THEN + OKAY = .FALSE. + ENDIF + END DO + + IF (.NOT. OKAY) THEN + CALL FIELD_ABORT("ERROR FINAL BLOCK DATA NOT UPDATED ON HOST") + END IF + + END PROGRAM TEST_GET_DEVICE_DATA_BOUNDS