Statistics
| Branch: | Revision:

root / synthbench / mixedMode / src / mixedModeBenchmarkDriver.f90

History | View | Annotate | Download (7.4 kB)

1 0:839f52ef7657 louridas
!-----------------------------------------------------------!
2 0:839f52ef7657 louridas
! Main driver for mixed mode benchmark program.             !
3 0:839f52ef7657 louridas
! Reads benchmark input file.                               !
4 0:839f52ef7657 louridas
! Initialises the parallel environment.                     !
5 0:839f52ef7657 louridas
! Calls each benchmark.                                     !
6 0:839f52ef7657 louridas
!-----------------------------------------------------------!
7 0:839f52ef7657 louridas
PROGRAM mixedModeBenchmark
8 0:839f52ef7657 louridas
  use pt_to_pt_pingpong
9 0:839f52ef7657 louridas
  use pt_to_pt_pingping
10 0:839f52ef7657 louridas
  use pt_to_pt_haloExchange
11 0:839f52ef7657 louridas
  use collective_barrier
12 0:839f52ef7657 louridas
  use collective_reduction
13 0:839f52ef7657 louridas
  use collective_broadcast
14 0:839f52ef7657 louridas
  use collective_scatterGather
15 0:839f52ef7657 louridas
  use collective_alltoall
16 0:839f52ef7657 louridas
  use parallelEnvironment
17 0:839f52ef7657 louridas
  use benchmarkSetup
18 0:839f52ef7657 louridas
  use output
19 0:839f52ef7657 louridas
20 0:839f52ef7657 louridas
  implicit none
21 0:839f52ef7657 louridas
22 0:839f52ef7657 louridas
  !String for setting benchmark name for output
23 0:839f52ef7657 louridas
  character (len = MAXSTRING) :: name
24 0:839f52ef7657 louridas
25 0:839f52ef7657 louridas
  !Flag to check if benchmark is supported
26 0:839f52ef7657 louridas
  logical :: supportFlag
27 0:839f52ef7657 louridas
28 0:839f52ef7657 louridas
  !Initialise the parallel execution environment
29 0:839f52ef7657 louridas
  CALL initParallelEnv()
30 0:839f52ef7657 louridas
31 0:839f52ef7657 louridas
  !Master MPI process.....
32 0:839f52ef7657 louridas
  IF (myMPIRank == 0) THEN
33 0:839f52ef7657 louridas
      !3) Opens the input and output files
34 0:839f52ef7657 louridas
     CALL openFile()
35 0:839f52ef7657 louridas
     !1) Prints header and parallel environment info.
36 0:839f52ef7657 louridas
     CALL printHeader(numMPIprocs,numThreads,threadSupport)
37 0:839f52ef7657 louridas
     !2) Setup the list of all possible benchmarks
38 0:839f52ef7657 louridas
     CALL setupBenchmarkList()
39 0:839f52ef7657 louridas
  END IF
40 0:839f52ef7657 louridas
41 0:839f52ef7657 louridas
  !Master reads parameters from input file and
42 0:839f52ef7657 louridas
  !broadcasts them to the other processes.
43 0:839f52ef7657 louridas
  CALL readBenchmarkParams()
44 0:839f52ef7657 louridas
45 0:839f52ef7657 louridas
  !Execute bencmarks by reading list from
46 0:839f52ef7657 louridas
  !input file.
47 0:839f52ef7657 louridas
  CALL findBenchmarkNumber()
48 0:839f52ef7657 louridas
  DO WHILE(benchmarkNumber /= FINISHED)
49 0:839f52ef7657 louridas
50 0:839f52ef7657 louridas
     benchmarks : SELECT CASE (benchmarkNumber)
51 0:839f52ef7657 louridas
     !Masteronly Pingpong
52 0:839f52ef7657 louridas
     CASE(1)
53 0:839f52ef7657 louridas
        !Set name
54 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
55 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
56 0:839f52ef7657 louridas
           name = "Masteronly Pingpong"
57 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
58 0:839f52ef7657 louridas
        END IF
59 0:839f52ef7657 louridas
        !Execute benchmark
60 0:839f52ef7657 louridas
        CALL pingPong(MASTERONLY)
61 0:839f52ef7657 louridas
62 0:839f52ef7657 louridas
     !Funnelled Pingpong
63 0:839f52ef7657 louridas
     CASE(2)
64 0:839f52ef7657 louridas
        !Set name
65 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
66 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
67 0:839f52ef7657 louridas
           name = "Funnelled Pingpong"
68 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
69 0:839f52ef7657 louridas
        END IF
70 0:839f52ef7657 louridas
        !Execute benchmark
71 0:839f52ef7657 louridas
        CALL pingPong(FUNNELLED)
72 0:839f52ef7657 louridas
73 0:839f52ef7657 louridas
     !Multiple Pingpong
74 0:839f52ef7657 louridas
     CASE(3)
75 0:839f52ef7657 louridas
        !Set name
76 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
77 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_MULTIPLE)
78 0:839f52ef7657 louridas
           name = "Multiple Pingpong"
79 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
80 0:839f52ef7657 louridas
        END IF
81 0:839f52ef7657 louridas
        !Execute benchmark
82 0:839f52ef7657 louridas
        CALL pingPong(MULTIPLE)
83 0:839f52ef7657 louridas
84 0:839f52ef7657 louridas
     !Masteronly Pingping
85 0:839f52ef7657 louridas
     CASE(4)
86 0:839f52ef7657 louridas
        !Set name
87 0:839f52ef7657 louridas
         IF (myMPIRank == 0) THEN
88 0:839f52ef7657 louridas
            supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
89 0:839f52ef7657 louridas
            name = "Masteronly Pingping"
90 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
91 0:839f52ef7657 louridas
        END IF
92 0:839f52ef7657 louridas
        !Execute benchmark
93 0:839f52ef7657 louridas
        CALL pingPing(MASTERONLY)
94 0:839f52ef7657 louridas
95 0:839f52ef7657 louridas
     !Funnelled Pingping
96 0:839f52ef7657 louridas
     CASE(5)
97 0:839f52ef7657 louridas
        !Set name
98 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
99 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
100 0:839f52ef7657 louridas
           name = "Funnelled Pingping"
101 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
102 0:839f52ef7657 louridas
        END IF
103 0:839f52ef7657 louridas
        !Execute benchmark
104 0:839f52ef7657 louridas
        CALL pingPing(FUNNELLED)
105 0:839f52ef7657 louridas
106 0:839f52ef7657 louridas
     !Multiple Pingping
107 0:839f52ef7657 louridas
     CASE(6)
108 0:839f52ef7657 louridas
        !Set name
109 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
110 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_MULTIPLE)
111 0:839f52ef7657 louridas
           name = "Multiple Pingping"
112 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
113 0:839f52ef7657 louridas
        END IF
114 0:839f52ef7657 louridas
        !Execute benchmark
115 0:839f52ef7657 louridas
        CALL pingPing(MULTIPLE)
116 0:839f52ef7657 louridas
117 0:839f52ef7657 louridas
     !Masteronly Haloexchange
118 0:839f52ef7657 louridas
     CASE(7)
119 0:839f52ef7657 louridas
        !Set name
120 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
121 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
122 0:839f52ef7657 louridas
           name = "Masteronly Haloexchange"
123 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
124 0:839f52ef7657 louridas
           CALL printBenchHeader()
125 0:839f52ef7657 louridas
        END IF
126 0:839f52ef7657 louridas
        !Execute benchmark
127 0:839f52ef7657 louridas
        CALL haloExchange(MASTERONLY)
128 0:839f52ef7657 louridas
129 0:839f52ef7657 louridas
     !Funnelled Haloexchange
130 0:839f52ef7657 louridas
     CASE(8)
131 0:839f52ef7657 louridas
        !Set name
132 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
133 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
134 0:839f52ef7657 louridas
           name = "Funnelled Haloexchange"
135 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
136 0:839f52ef7657 louridas
           CALL printBenchHeader()
137 0:839f52ef7657 louridas
        END IF
138 0:839f52ef7657 louridas
        !Execute benchmark
139 0:839f52ef7657 louridas
        CALL haloExchange(FUNNELLED)
140 0:839f52ef7657 louridas
141 0:839f52ef7657 louridas
     !Multiple Haloexchange
142 0:839f52ef7657 louridas
     CASE(9)
143 0:839f52ef7657 louridas
        !Set name
144 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
145 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_MULTIPLE)
146 0:839f52ef7657 louridas
           name = "Multiple Haloexchange"
147 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
148 0:839f52ef7657 louridas
           CALL printBenchHeader()
149 0:839f52ef7657 louridas
        END IF
150 0:839f52ef7657 louridas
        !Execute benchmark
151 0:839f52ef7657 louridas
        CALL haloExchange(MULTIPLE)
152 0:839f52ef7657 louridas
153 0:839f52ef7657 louridas
     !Barrier
154 0:839f52ef7657 louridas
     CASE(10)
155 0:839f52ef7657 louridas
        !Set name
156 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
157 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
158 0:839f52ef7657 louridas
           name = "Barrier"
159 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
160 0:839f52ef7657 louridas
           CALL printBenchHeader()
161 0:839f52ef7657 louridas
        END IF
162 0:839f52ef7657 louridas
        !Execute benchmark
163 0:839f52ef7657 louridas
        CALL barrierDriver()
164 0:839f52ef7657 louridas
165 0:839f52ef7657 louridas
     !Reduce
166 0:839f52ef7657 louridas
     CASE(11)
167 0:839f52ef7657 louridas
        !Set name
168 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
169 0:839f52ef7657 louridas
            supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
170 0:839f52ef7657 louridas
           name = "Reduce"
171 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
172 0:839f52ef7657 louridas
           CALL printBenchHeader()
173 0:839f52ef7657 louridas
        END IF
174 0:839f52ef7657 louridas
        !Execute benchmark
175 0:839f52ef7657 louridas
        CALL reduction(REDUCE)
176 0:839f52ef7657 louridas
177 0:839f52ef7657 louridas
     !All-reduce
178 0:839f52ef7657 louridas
     CASE(12)
179 0:839f52ef7657 louridas
        !Set name
180 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
181 0:839f52ef7657 louridas
            supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
182 0:839f52ef7657 louridas
           name = "All Reduce"
183 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
184 0:839f52ef7657 louridas
           CALL printBenchHeader()
185 0:839f52ef7657 louridas
        END IF
186 0:839f52ef7657 louridas
        !Execute benchmark
187 0:839f52ef7657 louridas
        CALL reduction(ALLREDUCE)
188 0:839f52ef7657 louridas
189 0:839f52ef7657 louridas
     !Broadcast
190 0:839f52ef7657 louridas
     CASE(13)
191 0:839f52ef7657 louridas
        !Set name
192 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
193 0:839f52ef7657 louridas
            supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
194 0:839f52ef7657 louridas
           name = "Broadcast"
195 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
196 0:839f52ef7657 louridas
           CALL printBenchHeader()
197 0:839f52ef7657 louridas
        END IF
198 0:839f52ef7657 louridas
        !Execute benchmark
199 0:839f52ef7657 louridas
        CALL broadcast()
200 0:839f52ef7657 louridas
201 0:839f52ef7657 louridas
     !Scatter
202 0:839f52ef7657 louridas
     CASE(14)
203 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
204 0:839f52ef7657 louridas
           supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
205 0:839f52ef7657 louridas
           name = "Scatter"
206 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
207 0:839f52ef7657 louridas
           CALL printBenchHeader()
208 0:839f52ef7657 louridas
        END IF
209 0:839f52ef7657 louridas
        !Execute banehmark
210 0:839f52ef7657 louridas
        CALL scatterGather(SCATTER)
211 0:839f52ef7657 louridas
212 0:839f52ef7657 louridas
     !Gather
213 0:839f52ef7657 louridas
     CASE(15)
214 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
215 0:839f52ef7657 louridas
            supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
216 0:839f52ef7657 louridas
           name = "Gather"
217 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
218 0:839f52ef7657 louridas
           CALL printBenchHeader()
219 0:839f52ef7657 louridas
        END IF
220 0:839f52ef7657 louridas
        !Execute benchmark
221 0:839f52ef7657 louridas
        CALL scatterGather(GATHER)
222 0:839f52ef7657 louridas
223 0:839f52ef7657 louridas
     !All to all
224 0:839f52ef7657 louridas
     CASE(16)
225 0:839f52ef7657 louridas
        !Set name
226 0:839f52ef7657 louridas
        IF (myMPIRank == 0) THEN
227 0:839f52ef7657 louridas
            supportFlag = benchmarkSupport(MPI_THREAD_FUNNELED)
228 0:839f52ef7657 louridas
           name = "All to all"
229 0:839f52ef7657 louridas
           CALL setBenchName(name, benchmarkNumber, supportFlag)
230 0:839f52ef7657 louridas
           CALL printBenchHeader()
231 0:839f52ef7657 louridas
        END IF
232 0:839f52ef7657 louridas
        !Execute benchmark
233 0:839f52ef7657 louridas
        CALL alltoall()
234 0:839f52ef7657 louridas
235 0:839f52ef7657 louridas
     !Default..file read error
236 0:839f52ef7657 louridas
     CASE default
237 0:839f52ef7657 louridas
        !..error message will already be printed out.
238 0:839f52ef7657 louridas
239 0:839f52ef7657 louridas
     END SELECT benchmarks
240 0:839f52ef7657 louridas
241 0:839f52ef7657 louridas
     !Read next benchmark from file
242 0:839f52ef7657 louridas
     CALL findBenchmarkNumber()
243 0:839f52ef7657 louridas
  END DO
244 0:839f52ef7657 louridas
245 0:839f52ef7657 louridas
  !Finalise programming environment
246 0:839f52ef7657 louridas
  CALL finaliseParallelEnv()
247 0:839f52ef7657 louridas
  !Master process closes file
248 0:839f52ef7657 louridas
  IF (myMPIRank == 0) THEN
249 0:839f52ef7657 louridas
     CALL closeFile()
250 0:839f52ef7657 louridas
  END IF
251 0:839f52ef7657 louridas
END PROGRAM mixedModeBenchmark
252 0:839f52ef7657 louridas