Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
removed COPY_ARRAY and updated blk copy methods to use COPY_FUNC
Browse files Browse the repository at this point in the history
wertysas committed Jan 30, 2025
1 parent a220fdc commit 35dce01
Showing 5 changed files with 55 additions and 43 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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()
8 changes: 4 additions & 4 deletions field_RANKSUFF_data_module.fypp
Original file line number Diff line number Diff line change
@@ -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)

4 changes: 1 addition & 3 deletions field_RANKSUFF_module.fypp
Original file line number Diff line number Diff line change
@@ -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
26 changes: 0 additions & 26 deletions field_data_module.fypp

This file was deleted.

58 changes: 49 additions & 9 deletions tests/test_get_device_data_bounds.F90
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 35dce01

Please sign in to comment.