Fortran

Create the file omp_sections.F and copy in the following;

      subroutine times_table(n)
      use omp_lib
      implicit none
 
      integer i, n, i_times_n
      integer thread_id

      thread_id = omp_get_thread_num()

      do 100 i=1,n
          i_times_n = i * n

          print *,"Thread ",thread_id," says ",
     .            i," times ",n," equals ",i_times_n

          call sleep(1)
100   continue

      end

      
      subroutine countdown
      use omp_lib
      implicit none

      integer i, thread_id

      thread_id = omp_get_thread_num()

      do 200 i=10,1,-1
          print *,"Thread ",thread_id," says ",i,"..."

          call sleep(1)
200   continue

      print *,"Thread ",thread_id," says Blast off!"

      end


      subroutine long_loop
      use omp_lib
      implicit none

      integer i, thread_id
      double precision sum

      thread_id = omp_get_thread_num()

      sum = 0

      do 300 i=1,10
          sum = sum + (i*i)
          call sleep(1)
300   continue

      print *,"Thread ",thread_id," says the sum of the long ",
     .        "loop equals ",sum

      end


      program main
      implicit none

C$OMP PARALLEL
C$OMP SECTIONS

C$OMP SECTION
          call times_table(12)

C$OMP SECTION
          call countdown()

C$OMP SECTION
          call long_loop()

C$OMP END SECTIONS
C$OMP END PARALLEL

      end

Note that this example calls the sleep subroutine to add one second pauses (via call sleep(1)) within each function.

In this example, the code from OMP SECTIONS to OMP END SECTIONS specifies a block of sections that may be run in parallel, with each individual section specified using OMP SECTION. While it is possible to write the code within each OMP SECTION block directly, the code is more readable if you write each section as a function (e.g. countdown, long_loop and times_table) and just call the function from within each section.

You can compile this program using one of these commands (choose one for the compiler you wish to use);

This will produce the executable, sections.

Now return to the previous page.