Skip to content
Snippets Groups Projects
Commit 7bf36f9d authored by Dylan Kierans's avatar Dylan Kierans
Browse files

Adding 4d+5d versions of copy dp to sp

parent 90fe08eb
No related branches found
No related tags found
1 merge request!113Variant of copy for 2d dpsp
Pipeline #98960 passed
This commit is part of merge request !113. Comments created here will be created in the context of that merge request.
......@@ -167,6 +167,8 @@ MODULE mo_fortran_tools
MODULE PROCEDURE copy_5d_sp
MODULE PROCEDURE copy_2d_dpsp
MODULE PROCEDURE copy_3d_dpsp
MODULE PROCEDURE copy_4d_dpsp
MODULE PROCEDURE copy_5d_dpsp
MODULE PROCEDURE copy_2d_spdp
MODULE PROCEDURE copy_3d_spdp
MODULE PROCEDURE copy_4d_spdp
......@@ -912,6 +914,81 @@ CONTAINS
END SUBROUTINE copy_3d_dpsp
!> copy state, omp parallel, does not wait for other threads to complete
SUBROUTINE copy_4d_dpsp(src, dest, lacc, opt_acc_async)
REAL(dp), INTENT(IN) :: src(:, :, :, :)
REAL(sp), INTENT(OUT) :: dest(:, :, :, :)
LOGICAL, INTENT(IN) :: lacc
LOGICAL, INTENT(IN), OPTIONAL :: opt_acc_async
INTEGER :: i1, i2, i3, i4, m1, m2, m3, m4
LOGICAL :: lzacc
CALL set_acc_host_or_device(lzacc, lacc)
m1 = SIZE(dest, 1)
m2 = SIZE(dest, 2)
m3 = SIZE(dest, 3)
m4 = SIZE(dest, 4)
!$ACC PARALLEL LOOP DEFAULT(PRESENT) ASYNC(1) COLLAPSE(4) IF(lzacc)
#if (defined(__INTEL_COMPILER))
!$omp do private(i1,i2,i3,i4)
#else
!$omp do collapse(4)
#endif
DO i4 = 1, m4
DO i3 = 1, m3
DO i2 = 1, m2
DO i1 = 1, m1
dest(i1, i2, i3, i4) = REAL(src(i1, i2, i3, i4), KIND=sp)
END DO
END DO
END DO
END DO
!$omp end do nowait
CALL acc_wait_if_requested(1, opt_acc_async)
END SUBROUTINE copy_4d_dpsp
!> copy state, omp parallel, does not wait for other threads to complete
SUBROUTINE copy_5d_dpsp(src, dest, lacc, opt_acc_async)
REAL(dp), INTENT(IN) :: src(:, :, :, :, :)
REAL(sp), INTENT(OUT) :: dest(:, :, :, :, :)
LOGICAL, INTENT(IN) :: lacc
LOGICAL, INTENT(IN), OPTIONAL :: opt_acc_async
INTEGER :: i1, i2, i3, i4, i5, m1, m2, m3, m4, m5
LOGICAL :: lzacc
CALL set_acc_host_or_device(lzacc, lacc)
m1 = SIZE(dest, 1)
m2 = SIZE(dest, 2)
m3 = SIZE(dest, 3)
m4 = SIZE(dest, 4)
m5 = SIZE(dest, 5)
!$ACC PARALLEL LOOP DEFAULT(PRESENT) ASYNC(1) COLLAPSE(5) IF(lzacc)
#if (defined(__INTEL_COMPILER))
!$omp do private(i1,i2,i3,i4,i5)
#else
!$omp do collapse(5)
#endif
DO i5 = 1, m5
DO i4 = 1, m4
DO i3 = 1, m3
DO i2 = 1, m2
DO i1 = 1, m1
dest(i1, i2, i3, i4, i5) = REAL(src(i1, i2, i3, i4, i5), KIND=sp)
END DO
END DO
END DO
END DO
END DO
!$omp end do nowait
CALL acc_wait_if_requested(1, opt_acc_async)
END SUBROUTINE copy_5d_dpsp
!> copy state, omp parallel, does not wait for other threads to complete
SUBROUTINE copy_2d_spdp(src, dest, lacc, opt_acc_async)
REAL(sp), INTENT(IN) :: src(:, :)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment