5
c FNAME - filename for test program
7
#define BASE_NAME 'da.try'
8
#define BASE_NAME1 'da1.try'
10
# define FNAME HPIODIR//BASE_NAME
11
# define FNAME1 HPIODIR//BASE_NAME1
13
# define FNAME BASE_NAME
14
# define FNAME1 BASE_NAME1
18
#include "mafdecls.fh"
24
double precision max_sz, max_disk, max_mem
25
data max_arrays, max_sz, max_disk, max_mem /10,1d8,1d10, 1d6/
26
#if defined(IBM)|| defined(CRAY_T3E)
27
data stack, heap /9000000, 4000000/
29
data stack, heap /1200000, 800000/
34
if(.not. ga_uses_ma())then
39
if(ma_init(MT_F_DBL, stack, heap) ) then
41
if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0)then
42
call ga_error('dra_init failed: ',0)
44
if (me.eq.0) print *,' '
45
if(me.eq.0)print *, 'TESTING PERFORMANCE OF DISK ARRAYS'
46
if (me.eq.0) print *,' '
48
status = dra_terminate()
51
print *,'ma_init failed'
53
if(me.eq.0)print *, 'all done ...'
59
subroutine test_io_dbl
61
#include "mafdecls.fh"
68
double precision err, tt0, tt1, mbytes
69
integer g_a, g_b, d_a, d_b
70
double precision drand
71
integer i,j, req, loop
75
integer index, dims(2), reqdims(2), ld(2)
82
iran(i) = int(drand(0)*dble(i-1)) + 1
89
if (me.eq.0) print *, 'creating global arrays ',n,' x',n
90
if (me.eq.0)call ffflush(6)
92
if(.not. ga_create(MT_DBL, n, n, 'a', 1, 1, g_a))
93
& call ga_error('ga_create failed: a', 0)
94
if(.not. ga_create(MT_DBL, n, n, 'b', 1, 1, g_b))
95
& call ga_error('ga_create failed: b', 0)
96
if (me.eq.0) print *,'done '
97
if (me.eq.0)call ffflush(6)
99
c initialize g_a, g_b with random values
100
c ... use ga_access to avoid allocating local buffers for ga_put
103
call nga_distribution(g_a, me, glo, ghi)
104
call nga_access(g_a, glo, ghi, index, ld)
105
call fill_random(DBL_MB(index), ghi(1)-glo(1)+1,
106
& ghi(2)-glo(2)+1, ld(1))
108
* if (me.eq.0) print *,'done '
109
* if (me.eq.0)call ffflush(6)
114
c.......................................................................
115
if (me.eq.0) print *, 'creating disk array ',n,' x',n
116
if (me.eq.0)call ffflush(6)
121
if(ndra_create(MT_DBL, 2, dims, 'A',
123
& DRA_RW, reqdims, d_a).ne.0)
124
$ CALL ga_error('ndra_create failed: ',0)
126
if(me.eq.0) print *, 'alligned blocking write'
127
if (me.eq.0)call ffflush(6)
129
if(ndra_write(g_a, d_a, req).ne.0)
130
$ CALL ga_error('ndra_write failed:',0)
131
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
132
tt1 = MP_TIMER() -tt0
133
mbytes = 1e-6*util_mdtob(n*n)
135
write(6,100)mbytes,tt1,mbytes/tt1
138
if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a)
139
tt1 = MP_TIMER() -tt0
141
write(6,100)mbytes,tt1,mbytes/tt1
144
if (me.eq.0) print *,' '
145
if (me.eq.0) print *,'disk array closed '
146
if (me.eq.0)call ffflush(6)
147
c.......................................................................
150
if (me.eq.0) print *, 'creating disk array ',m,' x',m
151
if (me.eq.0)call ffflush(6)
156
if(ndra_create(MT_DBL, 2, dims, 'B',
158
& DRA_RW, reqdims, d_b).ne.0)
159
$ CALL ga_error('ndra_create failed: ',0)
161
if(me.eq.0) print *, 'non alligned blocking write'
162
if (me.eq.0)call ffflush(6)
173
if(ndra_write_section(.false., g_a, glo, ghi,
174
& d_b, dlo, dhi, req).ne.0)
175
& call ga_error('ndra_write_section failed:',0)
177
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
178
tt1 = MP_TIMER() -tt0
179
mbytes = 1e-6*util_mdtob(n*n)
181
write(6,100)mbytes,tt1,mbytes/tt1
184
if(dra_close(d_b).ne.0)call ga_error('dra_close failed: ',d_b)
185
tt1 = MP_TIMER() -tt0
187
write(6,100)mbytes,tt1,mbytes/tt1
190
if (me.eq.0) print *,' '
191
if (me.eq.0) print *,'disk array closed '
192
if (me.eq.0)call ffflush(6)
193
c.......................................................................
196
if (me.eq.0) print *,' '
197
if (me.eq.0) print *,'opening disk array'
198
if(dra_open(FNAME,DRA_R, d_a).ne.0)
199
& call ga_error('dra_open failed',0)
200
if(me.eq.0) print *, 'alligned blocking read'
201
if (me.eq.0)call ffflush(6)
203
if(ndra_read(g_b, d_a, req).ne.0)
204
$ CALL ga_error('ndra_read failed:',0)
205
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
206
tt1 = MP_TIMER() -tt0
208
write(6,100)mbytes,tt1,mbytes/tt1
210
call ga_dadd(1d0, g_a, -1d0, g_b, g_b)
211
err = ga_ddot(g_b, g_b)
213
if (me.eq.0) print *,'BTW, we have error =', err
215
if (me.eq.0) print *,'OK'
217
if(dra_delete(d_a).ne.0)
218
& call ga_error('dra_delete failed',0)
219
c.......................................................................
221
if (me.eq.0) print *,' '
222
if (me.eq.0) print *,'opening disk array'
223
if(dra_open(FNAME1,DRA_R, d_b).ne.0)
224
& call ga_error('dra_open failed',0)
225
if(me.eq.0) print *, 'non alligned blocking read'
226
if (me.eq.0)call ffflush(6)
228
if(ndra_read_section(.false., g_b, glo, ghi,
229
& d_b, dlo, dhi, req).ne.0)
230
& call ga_error('ndra_read_section failed:',0)
231
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
232
tt1 = MP_TIMER() -tt0
234
write(6,100)mbytes,tt1,mbytes/tt1
236
call ga_dadd(1d0, g_a, -1d0, g_b, g_b)
237
err = ga_ddot(g_b, g_b)
239
if (me.eq.0) print *,'BTW, we have error =', err
241
if (me.eq.0) print *,'OK'
243
if(dra_delete(d_b).ne.0)
244
& call ga_error('dra_delete failed',0)
245
c.......................................................................
246
status = ga_destroy(g_a)
247
status = ga_destroy(g_b)
248
100 format(g11.2,' MB time=',g11.2,' rate=',g11.3,'MB/s')
261
subroutine init_char(str, len, char)
271
subroutine fill_random(a, n,m, ld)
273
double precision a(ld,*), drand, seed