annotate gcc/testsuite/gfortran.dg/coarray_36.f @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do compile }
kono
parents:
diff changeset
2 ! { dg-options "-fcoarray=lib" }
kono
parents:
diff changeset
3 !
kono
parents:
diff changeset
4 ! PR fortran/64771
kono
parents:
diff changeset
5 !
kono
parents:
diff changeset
6 ! Contributed by Alessandro Fanfarill
kono
parents:
diff changeset
7 !
kono
parents:
diff changeset
8 ! Reduced version of the full NAS CG benchmark
kono
parents:
diff changeset
9 !
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 !-------------------------------------------------------------------------!
kono
parents:
diff changeset
12 ! !
kono
parents:
diff changeset
13 ! N A S P A R A L L E L B E N C H M A R K S 3.3 !
kono
parents:
diff changeset
14 ! !
kono
parents:
diff changeset
15 ! C G !
kono
parents:
diff changeset
16 ! !
kono
parents:
diff changeset
17 !-------------------------------------------------------------------------!
kono
parents:
diff changeset
18 ! !
kono
parents:
diff changeset
19 ! This benchmark is part of the NAS Parallel Benchmark 3.3 suite. !
kono
parents:
diff changeset
20 ! It is described in NAS Technical Reports 95-020 and 02-007 !
kono
parents:
diff changeset
21 ! !
kono
parents:
diff changeset
22 ! Permission to use, copy, distribute and modify this software !
kono
parents:
diff changeset
23 ! for any purpose with or without fee is hereby granted. We !
kono
parents:
diff changeset
24 ! request, however, that all derived work reference the NAS !
kono
parents:
diff changeset
25 ! Parallel Benchmarks 3.3. This software is provided "as is" !
kono
parents:
diff changeset
26 ! without express or implied warranty. !
kono
parents:
diff changeset
27 ! !
kono
parents:
diff changeset
28 ! Information on NPB 3.3, including the technical report, the !
kono
parents:
diff changeset
29 ! original specifications, source code, results and information !
kono
parents:
diff changeset
30 ! on how to submit new results, is available at: !
kono
parents:
diff changeset
31 ! !
kono
parents:
diff changeset
32 ! http://www.nas.nasa.gov/Software/NPB/ !
kono
parents:
diff changeset
33 ! !
kono
parents:
diff changeset
34 ! Send comments or suggestions to npb@nas.nasa.gov !
kono
parents:
diff changeset
35 ! !
kono
parents:
diff changeset
36 ! NAS Parallel Benchmarks Group !
kono
parents:
diff changeset
37 ! NASA Ames Research Center !
kono
parents:
diff changeset
38 ! Mail Stop: T27A-1 !
kono
parents:
diff changeset
39 ! Moffett Field, CA 94035-1000 !
kono
parents:
diff changeset
40 ! !
kono
parents:
diff changeset
41 ! E-mail: npb@nas.nasa.gov !
kono
parents:
diff changeset
42 ! Fax: (650) 604-3957 !
kono
parents:
diff changeset
43 ! !
kono
parents:
diff changeset
44 !-------------------------------------------------------------------------!
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 c---------------------------------------------------------------------
kono
parents:
diff changeset
48 c
kono
parents:
diff changeset
49 c Authors: M. Yarrow
kono
parents:
diff changeset
50 c C. Kuszmaul
kono
parents:
diff changeset
51 c R. F. Van der Wijngaart
kono
parents:
diff changeset
52 c H. Jin
kono
parents:
diff changeset
53 c
kono
parents:
diff changeset
54 c---------------------------------------------------------------------
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 c---------------------------------------------------------------------
kono
parents:
diff changeset
58 c---------------------------------------------------------------------
kono
parents:
diff changeset
59 program cg
kono
parents:
diff changeset
60 c---------------------------------------------------------------------
kono
parents:
diff changeset
61 c---------------------------------------------------------------------
kono
parents:
diff changeset
62 implicit none
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 integer na, nonzer, niter
kono
parents:
diff changeset
65 double precision shift, rcond
kono
parents:
diff changeset
66 parameter( na=75000,
kono
parents:
diff changeset
67 > nonzer=13,
kono
parents:
diff changeset
68 > niter=75,
kono
parents:
diff changeset
69 > shift=60.,
kono
parents:
diff changeset
70 > rcond=1.0d-1 )
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 integer num_proc_rows, num_proc_cols
kono
parents:
diff changeset
75 parameter( num_proc_rows = 2, num_proc_cols = 2)
kono
parents:
diff changeset
76 integer num_procs
kono
parents:
diff changeset
77 parameter( num_procs = num_proc_cols * num_proc_rows )
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 integer nz
kono
parents:
diff changeset
80 parameter( nz = na*(nonzer+1)/num_procs*(nonzer+1)+nonzer
kono
parents:
diff changeset
81 > + na*(nonzer+2+num_procs/256)/num_proc_cols )
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 common / partit_size / naa, nzz,
kono
parents:
diff changeset
84 > npcols, nprows,
kono
parents:
diff changeset
85 > proc_col, proc_row,
kono
parents:
diff changeset
86 > firstrow,
kono
parents:
diff changeset
87 > lastrow,
kono
parents:
diff changeset
88 > firstcol,
kono
parents:
diff changeset
89 > lastcol,
kono
parents:
diff changeset
90 > exch_proc,
kono
parents:
diff changeset
91 > exch_recv_length,
kono
parents:
diff changeset
92 > send_start,
kono
parents:
diff changeset
93 > send_len
kono
parents:
diff changeset
94 integer naa, nzz,
kono
parents:
diff changeset
95 > npcols, nprows,
kono
parents:
diff changeset
96 > proc_col, proc_row,
kono
parents:
diff changeset
97 > firstrow,
kono
parents:
diff changeset
98 > lastrow,
kono
parents:
diff changeset
99 > firstcol,
kono
parents:
diff changeset
100 > lastcol,
kono
parents:
diff changeset
101 > exch_proc,
kono
parents:
diff changeset
102 > exch_recv_length,
kono
parents:
diff changeset
103 > send_start,
kono
parents:
diff changeset
104 > send_len
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107 common / main_int_mem / colidx, rowstr,
kono
parents:
diff changeset
108 > iv, arow, acol
kono
parents:
diff changeset
109 integer colidx(nz), rowstr(na+1),
kono
parents:
diff changeset
110 > iv(2*na+1), arow(nz), acol(nz)
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112
kono
parents:
diff changeset
113 c---------------------------------
kono
parents:
diff changeset
114 c Coarray Decalarations
kono
parents:
diff changeset
115 c---------------------------------
kono
parents:
diff changeset
116 double precision v(na+1)[0:*], aelt(nz)[0:*], a(nz)[0:*],
kono
parents:
diff changeset
117 > x(na/num_proc_rows+2)[0:*],
kono
parents:
diff changeset
118 > z(na/num_proc_rows+2)[0:*],
kono
parents:
diff changeset
119 > p(na/num_proc_rows+2)[0:*],
kono
parents:
diff changeset
120 > q(na/num_proc_rows+2)[0:*],
kono
parents:
diff changeset
121 > r(na/num_proc_rows+2)[0:*],
kono
parents:
diff changeset
122 > w(na/num_proc_rows+2)[0:*]
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124
kono
parents:
diff changeset
125 common /urando/ amult, tran
kono
parents:
diff changeset
126 double precision amult, tran
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 integer l2npcols
kono
parents:
diff changeset
131 integer reduce_exch_proc(num_proc_cols)
kono
parents:
diff changeset
132 integer reduce_send_starts(num_proc_cols)
kono
parents:
diff changeset
133 integer reduce_send_lengths(num_proc_cols)
kono
parents:
diff changeset
134 integer reduce_recv_lengths(num_proc_cols)
kono
parents:
diff changeset
135 integer reduce_rrecv_starts(num_proc_cols)
kono
parents:
diff changeset
136 c---------------------------------
kono
parents:
diff changeset
137 c Coarray Decalarations
kono
parents:
diff changeset
138 c---------------------------------
kono
parents:
diff changeset
139 integer reduce_recv_starts(num_proc_cols)[0:*]
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 integer i, j, k, it, me, nprocs, root
kono
parents:
diff changeset
142
kono
parents:
diff changeset
143 double precision zeta, randlc
kono
parents:
diff changeset
144 external randlc
kono
parents:
diff changeset
145 double precision rnorm
kono
parents:
diff changeset
146 c---------------------------------
kono
parents:
diff changeset
147 c Coarray Decalarations
kono
parents:
diff changeset
148 c---------------------------------
kono
parents:
diff changeset
149 double precision norm_temp1(2)[0:*], norm_temp2(2)[0:*]
kono
parents:
diff changeset
150
kono
parents:
diff changeset
151 double precision t, tmax, mflops
kono
parents:
diff changeset
152 double precision u(1), umax(1)
kono
parents:
diff changeset
153 external timer_read
kono
parents:
diff changeset
154 double precision timer_read
kono
parents:
diff changeset
155 character class
kono
parents:
diff changeset
156 logical verified
kono
parents:
diff changeset
157 double precision zeta_verify_value, epsilon, err
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 c---------------------------------------------------------------------
kono
parents:
diff changeset
160 c Explicit interface for conj_grad, due to coarray args
kono
parents:
diff changeset
161 c---------------------------------------------------------------------
kono
parents:
diff changeset
162 interface
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 subroutine conj_grad ( colidx,
kono
parents:
diff changeset
165 > rowstr,
kono
parents:
diff changeset
166 > x,
kono
parents:
diff changeset
167 > z,
kono
parents:
diff changeset
168 > a,
kono
parents:
diff changeset
169 > p,
kono
parents:
diff changeset
170 > q,
kono
parents:
diff changeset
171 > r,
kono
parents:
diff changeset
172 > w,
kono
parents:
diff changeset
173 > rnorm,
kono
parents:
diff changeset
174 > l2npcols,
kono
parents:
diff changeset
175 > reduce_exch_proc,
kono
parents:
diff changeset
176 > reduce_send_starts,
kono
parents:
diff changeset
177 > reduce_send_lengths,
kono
parents:
diff changeset
178 > reduce_recv_starts,
kono
parents:
diff changeset
179 > reduce_recv_lengths,
kono
parents:
diff changeset
180 > reduce_rrecv_starts )
kono
parents:
diff changeset
181
kono
parents:
diff changeset
182 common / partit_size / naa, nzz,
kono
parents:
diff changeset
183 > npcols, nprows,
kono
parents:
diff changeset
184 > proc_col, proc_row,
kono
parents:
diff changeset
185 > firstrow,
kono
parents:
diff changeset
186 > lastrow,
kono
parents:
diff changeset
187 > firstcol,
kono
parents:
diff changeset
188 > lastcol,
kono
parents:
diff changeset
189 > exch_proc,
kono
parents:
diff changeset
190 > exch_recv_length,
kono
parents:
diff changeset
191 > send_start,
kono
parents:
diff changeset
192 > send_len
kono
parents:
diff changeset
193
kono
parents:
diff changeset
194 integer naa, nzz,
kono
parents:
diff changeset
195 > npcols, nprows,
kono
parents:
diff changeset
196 > proc_col, proc_row,
kono
parents:
diff changeset
197 > firstrow,
kono
parents:
diff changeset
198 > lastrow,
kono
parents:
diff changeset
199 > firstcol,
kono
parents:
diff changeset
200 > lastcol,
kono
parents:
diff changeset
201 > exch_proc,
kono
parents:
diff changeset
202 > exch_recv_length,
kono
parents:
diff changeset
203 > send_start,
kono
parents:
diff changeset
204 > send_len
kono
parents:
diff changeset
205
kono
parents:
diff changeset
206 double precision x(*),
kono
parents:
diff changeset
207 > z(*),
kono
parents:
diff changeset
208 > a(nzz)
kono
parents:
diff changeset
209 integer colidx(nzz), rowstr(naa+1)
kono
parents:
diff changeset
210
kono
parents:
diff changeset
211 double precision p(*),
kono
parents:
diff changeset
212 > q(*)[0:*],
kono
parents:
diff changeset
213 > r(*)[0:*],
kono
parents:
diff changeset
214 > w(*)[0:*] ! used as work temporary
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216 integer l2npcols
kono
parents:
diff changeset
217 integer reduce_exch_proc(l2npcols)
kono
parents:
diff changeset
218 integer reduce_send_starts(l2npcols)
kono
parents:
diff changeset
219 integer reduce_send_lengths(l2npcols)
kono
parents:
diff changeset
220 integer reduce_recv_starts(l2npcols)[0:*]
kono
parents:
diff changeset
221 integer reduce_recv_lengths(l2npcols)
kono
parents:
diff changeset
222 integer reduce_rrecv_starts(l2npcols)
kono
parents:
diff changeset
223
kono
parents:
diff changeset
224 double precision rnorm
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226 end subroutine
kono
parents:
diff changeset
227
kono
parents:
diff changeset
228 end interface
kono
parents:
diff changeset
229
kono
parents:
diff changeset
230 c---------------------------------------------------------------------
kono
parents:
diff changeset
231 c The call to the conjugate gradient routine:
kono
parents:
diff changeset
232 c---------------------------------------------------------------------
kono
parents:
diff changeset
233 call conj_grad ( colidx,
kono
parents:
diff changeset
234 > rowstr,
kono
parents:
diff changeset
235 > x,
kono
parents:
diff changeset
236 > z,
kono
parents:
diff changeset
237 > a,
kono
parents:
diff changeset
238 > p,
kono
parents:
diff changeset
239 > q,
kono
parents:
diff changeset
240 > r,
kono
parents:
diff changeset
241 > w,
kono
parents:
diff changeset
242 > rnorm,
kono
parents:
diff changeset
243 > l2npcols,
kono
parents:
diff changeset
244 > reduce_exch_proc,
kono
parents:
diff changeset
245 > reduce_send_starts,
kono
parents:
diff changeset
246 > reduce_send_lengths,
kono
parents:
diff changeset
247 > reduce_recv_starts,
kono
parents:
diff changeset
248 > reduce_recv_lengths,
kono
parents:
diff changeset
249 > reduce_rrecv_starts )
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251
kono
parents:
diff changeset
252 sync all
kono
parents:
diff changeset
253
kono
parents:
diff changeset
254 end ! end main
kono
parents:
diff changeset
255
kono
parents:
diff changeset
256 c---------------------------------------------------------------------
kono
parents:
diff changeset
257 c---------------------------------------------------------------------
kono
parents:
diff changeset
258 subroutine conj_grad ( colidx,
kono
parents:
diff changeset
259 > rowstr,
kono
parents:
diff changeset
260 > x,
kono
parents:
diff changeset
261 > z,
kono
parents:
diff changeset
262 > a,
kono
parents:
diff changeset
263 > p,
kono
parents:
diff changeset
264 > q,
kono
parents:
diff changeset
265 > r,
kono
parents:
diff changeset
266 > w,
kono
parents:
diff changeset
267 > rnorm,
kono
parents:
diff changeset
268 > l2npcols,
kono
parents:
diff changeset
269 > reduce_exch_proc,
kono
parents:
diff changeset
270 > reduce_send_starts,
kono
parents:
diff changeset
271 > reduce_send_lengths,
kono
parents:
diff changeset
272 > reduce_recv_starts,
kono
parents:
diff changeset
273 > reduce_recv_lengths,
kono
parents:
diff changeset
274 > reduce_rrecv_starts )
kono
parents:
diff changeset
275 c---------------------------------------------------------------------
kono
parents:
diff changeset
276 c---------------------------------------------------------------------
kono
parents:
diff changeset
277
kono
parents:
diff changeset
278 c---------------------------------------------------------------------
kono
parents:
diff changeset
279 c Floaging point arrays here are named as in NPB1 spec discussion of
kono
parents:
diff changeset
280 c CG algorithm
kono
parents:
diff changeset
281 c---------------------------------------------------------------------
kono
parents:
diff changeset
282
kono
parents:
diff changeset
283 implicit none
kono
parents:
diff changeset
284
kono
parents:
diff changeset
285 c include 'cafnpb.h'
kono
parents:
diff changeset
286
kono
parents:
diff changeset
287 common / partit_size / naa, nzz,
kono
parents:
diff changeset
288 > npcols, nprows,
kono
parents:
diff changeset
289 > proc_col, proc_row,
kono
parents:
diff changeset
290 > firstrow,
kono
parents:
diff changeset
291 > lastrow,
kono
parents:
diff changeset
292 > firstcol,
kono
parents:
diff changeset
293 > lastcol,
kono
parents:
diff changeset
294 > exch_proc,
kono
parents:
diff changeset
295 > exch_recv_length,
kono
parents:
diff changeset
296 > send_start,
kono
parents:
diff changeset
297 > send_len
kono
parents:
diff changeset
298 integer naa, nzz,
kono
parents:
diff changeset
299 > npcols, nprows,
kono
parents:
diff changeset
300 > proc_col, proc_row,
kono
parents:
diff changeset
301 > firstrow,
kono
parents:
diff changeset
302 > lastrow,
kono
parents:
diff changeset
303 > firstcol,
kono
parents:
diff changeset
304 > lastcol,
kono
parents:
diff changeset
305 > exch_proc,
kono
parents:
diff changeset
306 > exch_recv_length,
kono
parents:
diff changeset
307 > send_start,
kono
parents:
diff changeset
308 > send_len
kono
parents:
diff changeset
309
kono
parents:
diff changeset
310
kono
parents:
diff changeset
311
kono
parents:
diff changeset
312 double precision x(*),
kono
parents:
diff changeset
313 > z(*),
kono
parents:
diff changeset
314 > a(nzz)
kono
parents:
diff changeset
315 integer colidx(nzz), rowstr(naa+1)
kono
parents:
diff changeset
316
kono
parents:
diff changeset
317 double precision p(*),
kono
parents:
diff changeset
318 > q(*)[0:*],
kono
parents:
diff changeset
319 > r(*)[0:*],
kono
parents:
diff changeset
320 > w(*)[0:*] ! used as work temporary
kono
parents:
diff changeset
321
kono
parents:
diff changeset
322 integer l2npcols
kono
parents:
diff changeset
323 integer reduce_exch_proc(l2npcols)
kono
parents:
diff changeset
324 integer reduce_send_starts(l2npcols)
kono
parents:
diff changeset
325 integer reduce_send_lengths(l2npcols)
kono
parents:
diff changeset
326 integer reduce_recv_starts(l2npcols)[0:*]
kono
parents:
diff changeset
327 integer reduce_recv_lengths(l2npcols)
kono
parents:
diff changeset
328 integer reduce_rrecv_starts(l2npcols)
kono
parents:
diff changeset
329
kono
parents:
diff changeset
330 integer recv_start_idx, recv_end_idx, send_start_idx,
kono
parents:
diff changeset
331 > send_end_idx, recv_length
kono
parents:
diff changeset
332
kono
parents:
diff changeset
333 integer i, j, k, ierr
kono
parents:
diff changeset
334 integer cgit, cgitmax
kono
parents:
diff changeset
335
kono
parents:
diff changeset
336 double precision, save :: d[0:*], rho[0:*]
kono
parents:
diff changeset
337 double precision sum, rho0, alpha, beta, rnorm
kono
parents:
diff changeset
338
kono
parents:
diff changeset
339 external timer_read
kono
parents:
diff changeset
340 double precision timer_read
kono
parents:
diff changeset
341
kono
parents:
diff changeset
342 data cgitmax / 25 /
kono
parents:
diff changeset
343
kono
parents:
diff changeset
344
kono
parents:
diff changeset
345 return
kono
parents:
diff changeset
346 end ! end of routine conj_grad
kono
parents:
diff changeset
347