5
c FNAME - filename for test program
7
#define BASE_NAME '/scratch/da.try'
8
#define BASE_NAME1 '/scratch/da1.try'
10
# define FNAME HPIODIR//BASE_NAME
11
# define FNAME1 HPIODIR//BASE_NAME1
13
# define FNAME BASE_NAME
14
# define FNAME1 BASE_NAME1
21
# define USEMULTFILES 1
24
# define USEMULTFILES 1
28
#include "mafdecls.fh"
34
double precision max_sz, max_disk, max_mem
35
data max_arrays, max_sz, max_disk, max_mem /10,1d8,1d10, 1d6/
36
#if defined(IBM)|| defined(CRAY_T3E)
37
data stack, heap /70000000, 4000000/
39
data stack, heap /1200000, 800000/
44
if(.not. ga_uses_ma())then
49
if(ma_init(MT_F_DBL, stack, heap) ) then
51
if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0)then
52
call ga_error('dra_init failed: ',0)
54
if (me.eq.0) print *,' '
55
if(me.eq.0)print *, 'TESTING PERFORMANCE OF DISK ARRAYS'
56
if (me.eq.0) print *,' '
58
status = dra_terminate()
61
print *,'ma_init failed'
63
if(me.eq.0)print *, 'all done ...'
69
subroutine test_io_dbl
71
#include "mafdecls.fh"
76
parameter (n=250, ndim=3)
78
double precision err, tt0, tt1, mbytes, rmax, ravg
79
integer g_a, g_b, d_a, d_b
80
double precision drand
82
integer dlo(ndim),dhi(ndim),glo(ndim),ghi(ndim)
83
integer dims(ndim),reqdims(ndim)
85
integer index, ld(ndim), chunk(ndim)
89
character*80 filename, filename1
96
iran(i) = int(drand(0)*dble(i-1)) + 1
103
if (me.eq.0) print *, 'Creating global arrays ',n,' x',n,' x',n
104
if (me.eq.0)call ffflush(6)
111
if(.not. nga_create(MT_DBL, ndim, dims, 'a', chunk, g_a))
112
& call ga_error('nga_create failed: a', 0)
113
if(.not. nga_create(MT_DBL, ndim, dims, 'b', chunk, g_b))
114
& call ga_error('nga_create failed: b', 0)
115
if (me.eq.0) print *,'done '
116
if (me.eq.0)call ffflush(6)
118
c initialize g_a, g_b with random values
119
c ... use ga_access to avoid allocating local buffers for ga_put
122
call nga_distribution(g_a, me, glo, ghi)
123
call nga_access(g_a, glo, ghi, index, ld)
124
call fill_random(DBL_MB(index), glo, ghi, ld(1), ld(2))
126
* if (me.eq.0) print *,'done '
127
* if (me.eq.0)call ffflush(6)
132
c.......................................................................
133
if (me.eq.0) print *, 'creating disk array ',n,' x',n,' x',n
134
if (me.eq.0)call ffflush(6)
140
filename(1:ilen) = FNAME
141
write(filename(ilen+1:ilen+1),200) me
143
if(ndra_create(MT_DBL, ndim, dims, 'A',
145
& DRA_RW, reqdims, d_a).ne.0)
146
$ CALL ga_error('ndra_create failed: ',0)
148
if(ndra_create(MT_DBL, ndim, dims, 'A',
150
& DRA_RW, reqdims, d_a).ne.0)
151
$ CALL ga_error('ndra_create failed: ',0)
154
if(me.eq.0) print *, 'alligned blocking write'
155
if (me.eq.0)call ffflush(6)
157
if(ndra_write(g_a, d_a,req).ne.0)
158
$ CALL ga_error('ndra_write failed:',0)
159
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
160
tt1 = MP_TIMER() -tt0
162
call ga_dgop(1,rmax,1,'max')
163
mbytes = 1e-6*util_mdtob(n*n*n)
165
write(6,100)mbytes,rmax,mbytes/rmax
168
if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a)
169
tt1 = MP_TIMER() -tt0
171
call ga_dgop(1,rmax,1,'max')
173
write(6,100)mbytes,rmax,mbytes/rmax
176
if (me.eq.0) print *,' '
177
if (me.eq.0) print *,'disk array closed '
178
if (me.eq.0)call ffflush(6)
179
c.......................................................................
182
if (me.eq.0) print *, 'creating disk array ',m,' x',m,' x',m
183
if (me.eq.0)call ffflush(6)
190
filename1(1:ilen) = FNAME1
191
write(filename1(ilen+1:ilen+1),200) me
192
if(ndra_create(MT_DBL, ndim, dims, 'B',
194
& DRA_RW, reqdims, d_b).ne.0)
195
$ CALL ga_error('ndra_create failed: ',0)
197
if(ndra_create(MT_DBL, ndim, dims, 'B',
199
& DRA_RW, reqdims, d_b).ne.0)
200
$ CALL ga_error('ndra_create failed: ',0)
203
if(me.eq.0) print *, 'non alligned blocking write'
204
if (me.eq.0)call ffflush(6)
213
if(ndra_write_section(.false., g_a, glo, ghi,
214
& d_b, dlo, dhi, req).ne.0)
215
& call ga_error('ndra_write_section failed:',0)
217
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
218
tt1 = MP_TIMER() -tt0
220
call ga_dgop(1,rmax,1,'max')
221
mbytes = 1e-6*util_mdtob(n*n*n)
223
write(6,100)mbytes,rmax,mbytes/rmax
226
if(dra_close(d_b).ne.0)call ga_error('dra_close failed: ',d_b)
227
tt1 = MP_TIMER() -tt0
229
call ga_dgop(1,rmax,1,'max')
230
mbytes = 1e-6*util_mdtob(n*n*n)
232
write(6,100)mbytes,rmax,mbytes/rmax
235
if (me.eq.0) print *,' '
236
if (me.eq.0) print *,'disk array closed '
237
if (me.eq.0)call ffflush(6)
238
c.......................................................................
241
if (me.eq.0) print *,' '
242
if (me.eq.0) print *,'opening disk array'
244
if(dra_open(filename,
246
& call ga_error('dra_open failed',0)
250
& call ga_error('dra_open failed',0)
252
if(me.eq.0) print *, 'alligned blocking read'
253
if (me.eq.0)call ffflush(6)
255
if(ndra_read(g_b, d_a, req).ne.0)
256
$ CALL ga_error('ndra_read failed:',0)
257
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
258
tt1 = MP_TIMER() -tt0
260
call ga_dgop(1,rmax,1,'max')
262
write(6,100)mbytes,rmax,mbytes/rmax
264
call ga_dadd(1d0, g_a, -1d0, g_b, g_b)
265
err = ga_ddot(g_b, g_b)
267
if (me.eq.0) print *,'BTW, we have error =', err
268
cbjp call ga_print(g_b)
270
if (me.eq.0) print *,'OK'
272
if(dra_delete(d_a).ne.0)
273
& call ga_error('dra_delete failed',0)
274
c.......................................................................
276
if (me.eq.0) print *,' '
277
if (me.eq.0) print *,'opening disk array'
279
if(dra_open(filename1,
281
& call ga_error('dra_open failed',0)
285
& call ga_error('dra_open failed',0)
287
if(me.eq.0) print *, 'non alligned blocking read'
288
if (me.eq.0)call ffflush(6)
290
if(ndra_read_section(.false., g_b, glo, ghi,
291
& d_b, dlo, dhi, req).ne.0)
292
& call ga_error('ndra_read_section failed:',0)
293
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
294
tt1 = MP_TIMER() -tt0
296
call ga_dgop(1,rmax,1,'max')
298
write(6,100)mbytes,rmax,mbytes/rmax
300
call ga_dadd(1d0, g_a, -1d0, g_b, g_b)
301
err = ga_ddot(g_b, g_b)
303
if (me.eq.0) print *,'BTW, we have error =', err
305
if (me.eq.0) print *,'OK'
307
if(dra_delete(d_b).ne.0)
308
& call ga_error('dra_delete failed',0)
309
c.......................................................................
310
status = ga_destroy(g_a)
311
status = ga_destroy(g_b)
312
100 format(g11.2,' MB time=',g11.2,' rate=',g11.3,'MB/s')
315
subroutine fill_random(a, lo, hi, ld1, ld2)
317
integer lo(ndim), hi(ndim), ld1, ld2
318
double precision a(ld1,ld2,*), drand, seed1, seed2
322
do k=1, hi(3)-lo(3) + 1
324
do j = 1, hi(2) - lo(2) + 1
326
do i = 1, hi(1) - lo(1) + 1