Benchmarks SSH_ALL (batch) against looped SSH (single-mode)
calls, for , swept over
NX colatitude points in at a fixed longitude.
LMAX N_MODES T_BATCH T_LOOP SPEEDUP (seconds per grid-point
evaluation).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=i4), | intent(in) | :: | LMAX |
Maximum degree benchmarked, . |
||
| integer(kind=i4), | intent(in) | :: | NX |
Number of colatitude points swept per timing measurement. |
||
| integer(kind=i4), | intent(in) | :: | OUTUNIT |
Fortran unit number to append one result row to: |
SUBROUTINE BENCH_SSH(LMAX, NX, OUTUNIT) IMPLICIT NONE INTEGER(KIND=i4), INTENT(IN) :: LMAX INTEGER(KIND=i4), INTENT(IN) :: NX INTEGER(KIND=i4), INTENT(IN) :: OUTUNIT INTEGER(KIND=i4) :: L, M, IX, R, NREP, NYLM REAL(KIND=dp) :: THETA, PHI, DTH, T0, T1, T_BATCH, T_LOOP COMPLEX(KIND=dp) :: ACC COMPLEX(KIND=dp), ALLOCATABLE :: YLM(:) NYLM = (LMAX+1)**2 ALLOCATE(YLM(NYLM)) PHI = 0.123d0 !- arbitrary fixed longitude DTH = pi / (NX - 1) NREP = 1 DO T0 = WALL_TIME() DO R = 1, NREP DO IX = 0, NX-1 THETA = IX*DTH CALL SSH_ALL(YLM, LMAX, THETA, PHI) ENDDO ENDDO T1 = WALL_TIME() IF (T1-T0 >= MIN_TIME .OR. NREP >= NREP_CAP) EXIT NREP = NREP*2 ENDDO T_BATCH = (T1-T0) / (NREP*NX) ACC = SUM(YLM) IF (ACC == (-1.0d300,0.d0)) WRITE(*,'(A)') "" IF (LMAX <= LOOP_LMAX_CAP) THEN NREP = 1 DO ACC = DCMPLX(0.d0,0.d0) T0 = WALL_TIME() DO R = 1, NREP DO IX = 0, NX-1 THETA = IX*DTH DO L = 0, LMAX DO M = -L, L ACC = ACC + SSH(L, M, THETA, PHI) ENDDO ENDDO ENDDO ENDDO T1 = WALL_TIME() IF (T1-T0 >= MIN_TIME .OR. NREP >= NREP_CAP) EXIT NREP = NREP*2 ENDDO T_LOOP = (T1-T0) / (NREP*NX) IF (ACC == (-1.0d300,0.d0)) WRITE(*,'(A)') "" ELSE T_LOOP = -1.0_dp !- sentinel: not measured, see LOOP_LMAX_CAP END IF IF (T_LOOP >= 0.0_dp) THEN WRITE(OUTUNIT,'(I6,1X,I8,1X,ES14.6,1X,ES14.6,1X,F12.3)') & LMAX, NYLM, T_BATCH, T_LOOP, T_LOOP/T_BATCH ELSE WRITE(OUTUNIT,'(I6,1X,I8,1X,ES14.6,1X,ES14.6,1X,F12.3)') & LMAX, NYLM, T_BATCH, T_LOOP, -1.0_dp END IF DEALLOCATE(YLM) RETURN END SUBROUTINE BENCH_SSH