Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > b96b0d782c858619536ab397b702cc7e > files > 96

mpich2-doc-1.0.8-2mdv2010.0.i586.rpm

      program test_OpenMP

#ifdef _OPENMP
      use omp_lib
#endif
      implicit none

      include 'mpif.h'
      include 'mpe_logf.h'

      integer world_size, world_rank, ierr
      integer blkA_startevt, blkA_finalevt
      integer blkB_startevt, blkB_finalevt
      integer buffer
      integer max
      parameter (max = 50)
      integer ii

      call MPI_Init( ierr )
      call MPI_Comm_rank( MPI_COMM_WORLD, world_rank, ierr )
      call MPI_Comm_size( MPI_COMM_WORLD, world_size, ierr )

      ierr = MPE_Log_get_state_eventIDs( blkA_startevt, blkA_finalevt )
      ierr = MPE_Log_get_state_eventIDs( blkB_startevt, blkB_finalevt )
      if ( world_rank .eq. 0 ) then
          ierr = MPE_Describe_state( blkA_startevt, blkA_finalevt,
     &                               "Do block A", "orange" )
          ierr = MPE_Describe_state( blkB_startevt, blkB_finalevt,
     &                               "Do block B", "green" )
      endif

      if ( world_rank .eq. 0 ) then
          buffer = 1000
      else
          buffer = 0
      endif
      call MPI_Bcast( buffer, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, ierr )

!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(ii) 
!$OMP DO
      do ii = 1, max
         ierr = MPE_Log_event( blkA_startevt, 0, '' )
#ifdef _OPENMP
         write(*,*) '[', world_rank, '] ',
     &              'thdID: ', omp_get_thread_num(),
     &              ', ii = ', buffer+ii
#else
         write(*,*) '[', world_rank, '] ', 'ii = ', ii
#endif
         ierr = MPE_Log_event( blkA_finalevt, 0, '' )
      enddo
!$OMP END DO nowait
!$OMP END PARALLEL

!$OMP PARALLEL DEFAULT(SHARED) PRIVATE(ii) 
!$OMP DO
      do ii = 1, max
         ierr = MPE_Log_event( blkB_startevt, 0, '' )
#ifdef _OPENMP
         write(*,*) '[', world_rank, '] ',
     &              'thdID: ', omp_get_thread_num(),
     &              ', ii = ', buffer+ii
#else
         write(*,*) '[', world_rank, '] ', 'ii = ', ii
#endif
         ierr = MPE_Log_event( blkB_finalevt, 0, '' )
      enddo
!$OMP END DO nowait
!$OMP END PARALLEL

      call MPI_Finalize( ierr )

      end