home *** CD-ROM | disk | FTP | other *** search
- PROGRAM PROB08
- C
- C PROBLEM 08
- C
- C REFERENCE: PROBLEMS TO TEST PARALLEL AND VECTOR LANGUAGES
- C CSD-TR 516, COMPUTER SCIENCE, PURDUE UNIVERSITY
- C JOHN R. RICE, MAY 1, 1985
- C
- C REVISED BY JOHN R. RICE AND J. JING, OCT. 1, 1990
- C
- C
- C *************************************************
- C * Adapted for FORTRAN D benchmarking *
- C * by T. HAUPT (haupt@sccs.npac.syr.edu) *
- C * *
- C * Northeast Parallel Architectures Center *
- C * at Syracuse University, Syracuse, NY, USA *
- C *************************************************
- C
- C
- C VERSION SIMD/CM2-1.00
- C ==================================================
- C
- INCLUDE '/usr/include/cm/paris-configuration-fort.h'
- INTEGER KASES,NK,MK
- PARAMETER (KASES=4)
- INTEGER N(KASES),M(KASES)
- cmf$ layout N(:serial)
- cmf$ layout M(:serial)
- DATA N / 8192,65536,131072,65536/
- DATA M /3,4,4,8/
- REAL SUMD
-
- DO 50 K = 1, KASES
-
- CALL CM_TIMER_CLEAR(0)
- CALL CM_TIMER_START(0)
- DO MANY=1,150
-
- NK=N(K)
- MK=M(K)
- CALL DOIT(NK,MK,SUMD)
- ENDDO
- CALL CM_TIMER_STOP(0)
-
- PRINT *,'PROBLEM 08 WITH N,M =',NK,MK
- PRINT *,'GIVES SUM OF DIFFERENCES = ',SUMD
-
-
- CALL CM_TIMER_PRINT(0)
-
- 50 CONTINUE
- STOP
- END
-
- SUBROUTINE DOIT(NK,MK,SUMD)
- INTEGER NK,MK
- REAL SUMD
- INTEGER J,N
- REAL, ARRAY(NK) :: X, X1
- REAL, ARRAY(MK,NK) :: DIFF
- REAL, ARRAY(NK) :: DIFF_ROW
- CMF$ LAYOUT DIFF(:SERIAL,:NEWS)
-
- X=0.2*[1:NK]+0.01*COS(REAL([1:NK]))
- DIFF=0
- c DIFF(1,1:NK)=SIN(X)
- DIFF(1,1:NK)=SIN(X(1:NK))
-
- X1 = X
- N=NK
- DO J=2,MK
- N=N-1
- DIFF_ROW (1:NK) = DIFF(J-1,1:NK)
- DIFF_ROW = cshift (DIFF_ROW, 1, 1)
- c DIFF_ROW (1:N) = DIFF_ROW (2:N+1) - DIFF_ROW (1:N)
- X1 = cshift (X1, 1, 1)
- DIFF(J,1:N)= (DIFF_ROW (1:N) - DIFF(J-1,1:N)) / (X1(1:N) - X(1:N))
- ENDDO
-
- SUMD=SUM(DIFF(2:MK,1:NK))
-
-
- END
-