a.36.1.f90   [plain text]


! { dg-do compile }

      SUBROUTINE DO_BY_16(X, IAM, IPOINTS)
        REAL X(*)
        INTEGER IAM, IPOINTS
      END SUBROUTINE DO_BY_16
      SUBROUTINE SUBA36(X, NPOINTS)
        INTEGER NPOINTS
        REAL X(NPOINTS)
        INTEGER IAM, IPOINTS
        EXTERNAL OMP_SET_DYNAMIC, OMP_SET_NUM_THREADS
        INTEGER OMP_GET_NUM_THREADS, OMP_GET_THREAD_NUM
        CALL OMP_SET_DYNAMIC(.FALSE.)
        CALL OMP_SET_NUM_THREADS(16)
!$OMP PARALLEL SHARED(X,NPOINTS) PRIVATE(IAM, IPOINTS)
          IF (OMP_GET_NUM_THREADS() .NE. 16) THEN
            STOP
          ENDIF
          IAM = OMP_GET_THREAD_NUM()
          IPOINTS = NPOINTS/16
          CALL DO_BY_16(X,IAM,IPOINTS)
!$OMP END PARALLEL
      END SUBROUTINE SUBA36