26.06.2015 Views

Parallel Programming in Fortran 95 using OpenMP - People

Parallel Programming in Fortran 95 using OpenMP - People

Parallel Programming in Fortran 95 using OpenMP - People

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6 1. <strong>OpenMP</strong> <strong>Fortran</strong> Application Program Interface<br />

serial region<br />

thread 0<br />

E xecution<br />

parallel region<br />

❄ ❄ ❄<br />

thread 0 thread 1 thread N p<br />

...<br />

write(*,*) "Hello" write(*,*) "Hello" write(*,*) "Hello"<br />

❄<br />

Figure 1.1: Graphical representation of the example expla<strong>in</strong><strong>in</strong>g the work<strong>in</strong>g pr<strong>in</strong>ciple of the<br />

!$OMP PARALLEL/!$OMP END PARALLEL directive-pair.<br />

Not all available clauses presented and expla<strong>in</strong>ed <strong>in</strong> chapter 3 are allowed with<strong>in</strong> the<br />

open<strong>in</strong>g-directive !$OMP PARALLEL, only the follow<strong>in</strong>g ones:<br />

• PRIVATE(list): see page 37.<br />

• SHARED(list): see page 38.<br />

• DEFAULT( PRIVATE | SHARED | NONE ): see page 39.<br />

• FIRSTPRIVATE(list): see page 40.<br />

• COPYIN(list): see page 42.<br />

• REDUCTION(operator:list): see page 43.<br />

• IF(scalar logical expression): see page 46.<br />

• NUM THREADS(scalar <strong>in</strong>teger expression): see page 47.<br />

The !$OMP END PARALLEL directive denotes the end of the parallel region. Reached<br />

that po<strong>in</strong>t, all the variables declared as local to each thread (PRIVATE) are erased and<br />

all the threads are killed, except the master thread, which cont<strong>in</strong>ues execution past the<br />

end of the parallel region. It is necessary that the master thread waits for all the other<br />

threads to f<strong>in</strong>ish their work before clos<strong>in</strong>g the parallel region; otherwise <strong>in</strong>formation would<br />

get lost and/or work would not be done. This wait<strong>in</strong>g is <strong>in</strong> fact noth<strong>in</strong>g else than a<br />

synchronization between the parallel runn<strong>in</strong>g threads. Therefore, it is said that the<br />

!$OMP END PARALLEL directive has an implied synchronization.<br />

When <strong>in</strong>clud<strong>in</strong>g a parallel region <strong>in</strong>to a code, it is necessary to satisfy two conditions<br />

to ensure that the result<strong>in</strong>g program is compliant with the <strong>OpenMP</strong> specification:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!