Quantcast
Channel: Intel® Fortran Compiler for Linux* and macOS*
Viewing all articles
Browse latest Browse all 2583

OMP Reduction failure

$
0
0

MacOS (High Sierra) with intel compiler version 19.0.2.184 Build 20190117

I checked the documentation.  I either missed a limitation or it might be a bug.  I know OMP reduction of arrays have evolved, so maybe I missed something.  Any feedback is greatly appreciated.

Thanks,

Roy

I could not get the file uploader to work, so here is "test_hcore.F":

C Test example to demonstrate problem with subroutine hcore using
C an allocated array with reduction in an openmp parallel section.
C This does not reproduce the crash observed in our code, but does
C demonstrate a genuine problem.
C
C Compilation command:
C ifort -O3 test_hcore.F -qopenmp -o test_hcore.exe
C
C Expected results:
C ENUCLR = 5*NUMAT*(NUMAT-1)/2
C DBLKH(I) = (NUMAT-1) for all values of I
C
C Problem: For macos10 (High Sierra) with intel compiler version 19.0.2.184 Build 20190117
C the final elements of DBLKH are zero.  The problem likely existed in the 2018 intel compiler.
C
C This test works as expected for other compilers, including
C macos10 (El Capitan) with intel compiler version 15.0.1.108 Build 20141022.
C It also works if DBLKH is statically allocated or passed in as a dummy argument,
C or if openmp is not used.
C
      PROGRAM TEST
      IMPLICIT REAL*8 (A-H,O-Z)
      INTEGER, PARAMETER :: NUMAT=5
      DIMENSION NFIRST(NUMAT),NLAST(NUMAT),IBAND(NUMAT),NBAND(NUMAT)
      DIMENSION E1B(45),E2A(45)
      ALLOCATABLE :: DBLKH(:)
C
C     EXPLICITLY FILL IN NECESSARY ARRAYS
C
      DO I=1,NUMAT
         NFIRST(I) = (I-1)*4+1
         NLAST(I) = I*4
         IBAND(I) = (I-1)*10+1
         NBAND(I) = 10
      ENDDO !I
      NDSIZE = 10*NUMAT
C
      ALLOCATE( DBLKH(NDSIZE), STAT=IORR )
      IF( IORR.NE.0 ) STOP
      ENUCLR = 0D0
      DBLKH = 0D0
C
C$OMP PARALLEL DO SCHEDULE(AUTO)
C$OMP& PRIVATE(II,JJ,IA,IB,N1,IBND,ILEN,JA,JB,N2,JBND,JLEN)
C$OMP& PRIVATE(E1B,E2A,ENUC)
C$OMP& REDUCTION(+:ENUCLR,DBLKH)
      DO II=2,NUMAT
         IA = NFIRST(II)
         IB = NLAST(II)
         N1 = IB-IA+1
         IBND = IBAND(II)
         ILEN = NBAND(II)
         DO JJ=1,II-1
            JA = NFIRST(JJ)
            JB = NLAST(JJ)
            N2 = JB-JA+1
            JBND = IBAND(JJ)
            JLEN = NBAND(JJ)
C
C           REPLACE CALL TO INTEGRALS WITH ARBITRARY FILL VALUES
C
            E1B = 1.D0
            E2A = 1.D0
            ENUC = 5.D0
C
C           INCLUDE THE ELECTRON-NUCLEAR ATTRACTION TERMS FOR ATOMS II, THEN JJ (E1B, E2A)
C           AND THE NUCLEAR-NUCLEAR TERM ENUC.
C
            IF( ILEN.GT.0 )CALL VECADD(ILEN,DBLKH(IBND),E1B,DBLKH(IBND))
            IF( JLEN.GT.0 )CALL VECADD(JLEN,DBLKH(JBND),E2A,DBLKH(JBND))
            ENUCLR = ENUCLR + ENUC
         ENDDO !JJ
      ENDDO !II
C$OMP END PARALLEL DO
C
C     PRINT RESULT
C
      WRITE(6,*) 'PRINT DBLKH AT END',ENUCLR
      WRITE(6,'(6F12.6)') (DBLKH(I),I=1,NDSIZE)
      WRITE(6,*) 'EXPECTED RESULTS',5.D0*DBLE(NUMAT*(NUMAT-1)/2)
      WRITE(6,'(6F12.6)') (DBLE(NUMAT-1),I=1,NDSIZE)
      END
C**********************************************************************+
      SUBROUTINE VECADD ( N, A, B, C )
      IMPLICIT REAL*8 (A-H,O-Z)
      INTEGER, INTENT(IN) :: N
      REAL*8, INTENT(IN) :: A(N),B(N)
      REAL*8, INTENT(OUT) :: C(N)
C----------------------------------------------------------------------+
C     ADD COMPONENTS OF TWO VECTORS TO PRODUCE A THIRD VECTOR
C     C(I) = A(I) + B(I)
C----------------------------------------------------------------------+
      DO I=1,N
         C(I) = A(I) + B(I)
      ENDDO !I
      END

Output:

 PRINT DBLKH AT END   50.0000000000000     
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    0.000000    0.000000    0.000000    0.000000    0.000000
    0.000000    0.000000

 EXPECTED RESULTS   50.0000000000000     
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000    4.000000    4.000000    4.000000    4.000000
    4.000000    4.000000
 


Viewing all articles
Browse latest Browse all 2583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>