Skip to content
Snippets Groups Projects

Variant of copy for 2d dpsp

Merged Dylan Kierans requested to merge feature-copy2d-dpsp into master
All threads resolved!
1 file
+ 77
0
Compare changes
  • Side-by-side
  • Inline
+ 77
0
@@ -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(:, :)
Loading