20 #ifndef MED_ACTIVATE_COMPARISON
21 #define MED_ACTIVATE_COMPARISON 1
23 #define MED_ACTIVATE_COMPARISON 0
26 #if MED_ACTIVATE_COMPARISON == 1
27 #ifdef MED_PERF_MEASUREMENT
28 #error "Defining comparaison mode for performance measurement will be under performing !"
33 #define MODE_ACCES MED_ACC_RDWR
35 #define MODE_ACCES MED_ACC_RDEXT
37 #define MODE_ACCES MED_ACC_CREAT
38 #warning "Not file open mode has been set, using MED_ACC_CREAT mode."
41 #ifndef FILE_INTERLACING_MODE
42 #define FILE_INTERLACING_MODE MED_UNDEF_INTERLACE
45 #warning "Defining a specific file interlacing mode.."
46 #if MED_ACTIVATE_COMPARISON == 0
47 #error "Defining a spectific file interlacing mode will be under performing !"
51 #define MAX(a,b) ((a) > (b) ? (a) : (b))
67 # include <sys/timeb.h>
72 # include <sys/time.h>
78 #error "unistd.h required."
121 char _filename [255]=
"";
130 char *componentname, *componentunit;
134 med_int _firstdim=0, _lastdim=0;
137 med_size _blocksize=0, _lastblocksize=0, _count=0, _stride=0, _start=0;
140 med_size _nusedentities = nentities;
141 med_size _io_count = nbblocksperproc;
144 MPI_Info info = cominfo->
info;
145 MPI_Comm comm = cominfo->
comm;
150 med_int _geodim = _geotype/100;
151 med_int _geonnodes = _geotype%100;
154 med_int _ipoint = nvaluesperentity;
158 #ifdef MED_PERF_MEASUREMENT
159 double read_bw, write_bw;
161 double write_tim = 0;
163 double max_read_tim, max_write_tim;
164 double min_read_tim, min_write_tim;
165 double ave_read_tim, ave_write_tim;
179 MED_CARTESIAN, _meshcomponentname, _meshcomponentunit) < 0) {
184 componentname = (
char*) malloc((nconstituentpervalue*
MED_SNAME_SIZE+1)*
sizeof(char));
185 componentunit = (
char*) malloc((nconstituentpervalue*
MED_SNAME_SIZE+1)*
sizeof(char));
187 strcpy(componentname,
"");
188 strcpy(componentunit,
"");
189 strcpy(_fieldname,fieldnameprefix);
190 if (
MEDfieldCr(_fid,_fieldname,
MED_FLOAT64,nconstituentpervalue,componentname,componentunit,
"s",_meshname ) < 0) {
201 MESSAGE(
"Creating a localization of integration points...");
202 strcpy(_ipointname,_fieldname);
203 strcat(_ipointname,
"_loc");
210 if (
MEDlocalizationWr(_fid, _ipointname, _geotype, _geotype/100, _ipointrefcoo, constituentmode,
216 free(_ipointrefcoo );
226 if (profilearraysize) {
227 MESSAGE(
"Creating a profile...");
229 strcpy(_profilename,_fieldname);strcat(_profilename,
"_profile");
231 _profilearray = (
med_int*) calloc(profilearraysize,
sizeof(
med_int));
234 for (_i=0; _i < profilearraysize; ++_i) _profilearray[_i]=_i+1;
236 if (
MEDprofileWr(_fid,_profilename,profilearraysize,_profilearray) < 0) {
240 _nusedentities = profilearraysize;
242 MESSAGE(
"No use of profile...");
247 MESSAGE(
"Generating partition...");
248 getBlockOfEntities ( mpi_rank , mpi_size, _nusedentities,
249 &_start, &_stride, &_io_count, &_blocksize,
250 &_lastusedrank, &_lastblocksize);
253 MESSAGE(
"Generating filter...");
258 cominfo->
constituentselect = 1 + (int) (nconstituentpervalue * (random() / (RAND_MAX + 1.0)));
275 _start,_stride,_count,_blocksize,_lastblocksize, &filter) < 0 ) {
283 _fileinterlacingmode = constituentmode;
288 MESSAGE(
"Generating datas...");
290 generateDatas(mpi_rank, _lastusedrank,
sizeof(
med_float),
291 storagemode, profilearraysize, _profilearray,
292 _start, _stride, _count, _blocksize, _lastblocksize,
293 nentities, nvaluesperentity, nconstituentpervalue,
297 #ifdef MED_PERF_MEASUREMENT
298 MPI_Barrier(MPI_COMM_WORLD);
303 _ipointname, &filter, (
unsigned char*)_arrayvalues ) < 0) {
308 #ifdef MED_PERF_MEASUREMENT
311 write_tim = (etim - stim);
312 MPI_Allreduce(&write_tim, &max_write_tim, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD);
313 MPI_Allreduce(&write_tim, &min_write_tim, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD);
314 MPI_Allreduce(&write_tim, &ave_write_tim, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
315 ave_write_tim = ave_write_tim / mpi_size;
317 if ( (mpi_rank == 0) ) {
320 char _perffilename[255]=
"";
321 int64_t _write_size = _nusedentities*nvaluesperentity*nconstituentpervalue*
sizeof(
med_float);
322 write_bw = (double)((int64_t)(_write_size)) / (max_write_tim * 1000000.0);
324 sprintf(_perffilename,
"%s_CPU-%03d_@_%s_%s.perf",fieldnameprefix,mpi_size,
_MED_MODE_SWITCH_MSG[constituentmode],
326 _perffile=fopen(_perffilename,
"w");
328 fprintf(_perffile,
"# total_size = %ld\n", (
long)(_write_size));
329 fprintf(_perffile,
"# Write: min_time = %f, max_time = %f, mean_time = %f\n", min_write_tim, max_write_tim,
331 fprintf(_perffile,
"Write bandwidth = %f Mbytes/sec\n", write_bw);
340 H5Fflush(_fid, H5F_SCOPE_GLOBAL );
347 med_int _nentitiesarrayvalues=0;
352 char _asciifilename[255]=
"";
361 _asciifile=fopen(_asciifilename,
"w");
368 profilearraysize, _profilearray,
377 fprintf(_asciifile,
"%d ",cominfo->
filterarray[_i]) ;
379 fprintf(_asciifile,
"\n") ;
383 if ( profilearraysize ) {
384 _nentitiesarrayvalues = profilearraysize;
386 _nentitiesarrayvalues = nentities;
393 _filteredarrayvalues = (
med_float*) malloc(_nentitiesarrayvalues*
398 for (_i=0;_i<_nentitiesarrayvalues*nvaluesperentity*nconstituentpervalue; ++_i)
399 _filteredarrayvalues[_i]=-_i;
406 _lastdim = nconstituentpervalue;
410 fprintf(_asciifile,
"%s : %d \n",
"Number of constituents selected", cominfo->
constituentselect);
413 if (
MEDfilterEntityCr(_fidseq, nentities, nvaluesperentity, nconstituentpervalue,
422 &filter2, (
unsigned char*)_filteredarrayvalues ) < 0) {
431 switch (constituentmode) {
434 for (_j=0; _j < nvaluesperentity; ++_j)
436 for (_k=_firstdim; _k < _lastdim; ++_k) {
437 _ind = (cominfo->
filterarray[_i]-1)*nvaluesperentity*nconstituentpervalue+ _j*nconstituentpervalue+_k;
439 fprintf(_asciifile,
"%f\n",_filteredarrayvalues[_ind]) ;
444 for (_k=0; _k < nvaluesperentity; ++_k)
446 for (_i=_firstdim; _i < _lastdim; ++_i) {
447 _ind =_i*nentities*nvaluesperentity+ (cominfo->
filterarray[_j]-1)*nvaluesperentity +_k;
449 fprintf(_asciifile,
"%f\n",_filteredarrayvalues[_ind]);
454 switch (constituentmode) {
457 for (_j=0; _j < nvaluesperentity; ++_j)
459 for (_k=_firstdim; _k < _lastdim; ++_k) {
460 _ind = _i*nvaluesperentity*nconstituentpervalue+_j*nconstituentpervalue+_k;
462 fprintf(_asciifile,
"%f\n",_filteredarrayvalues[_ind]) ;
467 for (_k=0; _k < nvaluesperentity; ++_k)
469 for (_i=_firstdim; _i < _lastdim; ++_i) {
473 fprintf(_asciifile,
"%f\n",_filteredarrayvalues[_ind]);
479 free(_filteredarrayvalues);
498 if (_arrayvalues) free(_arrayvalues);
499 if (profilearraysize) free(_profilearray);
516 int main (
int argc,
char **argv)
523 _cominfo.
comm = MPI_COMM_WORLD;
524 _cominfo.
info = MPI_INFO_NULL;
529 MPI_Init(&argc, &argv);
530 MPI_Comm_size(MPI_COMM_WORLD, &(_cominfo.
mpi_size));
531 MPI_Comm_rank(MPI_COMM_WORLD, &(_cominfo.
mpi_rank));
542 med_size _profilearraysize=_nentities/2;
545 med_size _pflsize = _profilearraysize;
556 _tm = localtime(&_tt);
558 srandom((*_tm).tm_sec * (*_tm).tm_min );
559 if (!_nbblocksperproc ) _nbblocksperproc = 1 + (int) (_cominfo.
mpi_size * (random() / (RAND_MAX + 1.0)));
560 if (!_nentities ) _nentities = 1 + (int) (1000.0 * (random() / (RAND_MAX + 1.0)));
561 if (!_nvaluesperentity ) _nvaluesperentity = 1 + (int) (11.0 * (random() / (RAND_MAX + 1.0)));
562 if (!_nconstituentpervalue) _nconstituentpervalue = 1 + (int) (7.0 * (random() / (RAND_MAX + 1.0)));
565 if ( (
sizeof(
med_size)%(
sizeof(MPI_LONG)))==0 ) {
566 MPI_Bcast(&_nbblocksperproc ,
sizeof(
med_size)/
sizeof(MPI_LONG), MPI_LONG, 0, MPI_COMM_WORLD);
567 MPI_Bcast(&_nentities ,
sizeof(
med_size)/
sizeof(MPI_LONG), MPI_LONG, 0, MPI_COMM_WORLD);
568 MPI_Bcast(&_nvaluesperentity ,
sizeof(
med_size)/
sizeof(MPI_LONG), MPI_LONG, 0, MPI_COMM_WORLD);
569 MPI_Bcast(&_nconstituentpervalue ,
sizeof(
med_size)/
sizeof(MPI_LONG), MPI_LONG, 0, MPI_COMM_WORLD);
571 assert(
sizeof(
med_size) == (
sizeof(MPI_LONG)));
574 char _fieldnameprefix[256] =
"";
575 sprintf(_fieldnameprefix,
"NENT-%03llu_NVAL-%03llu_NCST-%03lld_NBL-%03llu",
576 _nentities, _nvaluesperentity, _nconstituentpervalue, _nbblocksperproc);
595 if ( _storagemode ==
MED_GLOBAL_STMODE ) _pflsize=0;
else _pflsize=_profilearraysize;
600 _storagemode, _pflsize, _fieldnameprefix, & _cominfo) < 0 ) {
631 while ((c = getopt(argc, argv,
"n:v:c:b:p:s:")) != EOF) {