Révision 231 TrouNoir/trou_noir.c
trou_noir.c (revision 231) | ||
---|---|---|
18 | 18 |
|
19 | 19 |
Compilation sous gcc ( Compilateur GNU sous Linux ) : |
20 | 20 |
|
21 |
Version FP32 : gcc -O3 -ffast-math -FP32 -o trou_noir_FP32 trou_noir.c -lm |
|
22 |
Version FP64 : gcc -O3 -ffast-math -FP64 -o trou_noir_FP64 trou_noir.c -lm |
|
21 |
Version FP32 : gcc -O3 -ffast-math -DFP32 -o trou_noir_FP32 trou_noir.c -lm
|
|
22 |
Version FP64 : gcc -O3 -ffast-math -DFP64 -o trou_noir_FP64 trou_noir.c -lm
|
|
23 | 23 |
*/ |
24 | 24 |
|
25 | 25 |
#include <stdio.h> |
... | ... | |
35 | 35 |
|
36 | 36 |
#define TRACKPOINTS 2048 |
37 | 37 |
|
38 |
#if TYPE == FP32 |
|
38 |
#if TYPE == FP64 |
|
39 |
#define MYFLOAT double |
|
40 |
#else |
|
39 | 41 |
#define MYFLOAT float |
40 |
#else |
|
41 |
#define MYFLOAT double |
|
42 | 42 |
#endif |
43 | 43 |
|
44 | 44 |
MYFLOAT atanp(MYFLOAT x,MYFLOAT y) |
... | ... | |
229 | 229 |
int ni,ii,i,imx,j,n,tst,raie,fcl,zcl; |
230 | 230 |
MYFLOAT nh; |
231 | 231 |
struct timeval tv1,tv2; |
232 |
double elapsed;
|
|
232 |
MYFLOAT elapsed,cputime,epoch;
|
|
233 | 233 |
int mtv1,mtv2; |
234 |
unsigned int epoch1,epoch2; |
|
234 | 235 |
|
235 | 236 |
if (argc==2) |
236 | 237 |
{ |
... | ... | |
339 | 340 |
|
340 | 341 |
// Set start timer |
341 | 342 |
gettimeofday(&tv1, NULL); |
342 |
// |
|
343 | 343 |
mtv1=clock()*1000/CLOCKS_PER_SEC; |
344 |
epoch1=time(NULL); |
|
344 | 345 |
|
345 | 346 |
for (n=1;n<=nmx;n++) |
346 | 347 |
{ |
... | ... | |
415 | 416 |
// Set stop timer |
416 | 417 |
gettimeofday(&tv2, NULL); |
417 | 418 |
mtv2=clock()*1000/CLOCKS_PER_SEC; |
419 |
epoch2=time(NULL); |
|
420 |
|
|
421 |
elapsed=(MYFLOAT)((tv2.tv_sec-tv1.tv_sec) * 1000000L + |
|
422 |
(tv2.tv_usec-tv1.tv_usec))/1000000; |
|
423 |
cputime=(MYFLOAT)((mtv2-mtv1)/1000.); |
|
424 |
epoch=(MYFLOAT)(epoch2-epoch1); |
|
418 | 425 |
|
419 |
// elapsed=(double)((tv2.tv_sec-tv1.tv_sec) * 1000000L + |
|
420 |
// (tv2.tv_usec-tv1.tv_usec))/1000000; |
|
421 |
elapsed=(double)((mtv2-mtv1)/1000.); |
|
422 |
|
|
423 | 426 |
fmx=fp[0][0]; |
424 | 427 |
zmx=zp[0][0]; |
425 | 428 |
|
... | ... | |
441 | 444 |
} |
442 | 445 |
|
443 | 446 |
printf("\nElapsed Time : %lf",(double)elapsed); |
447 |
printf("\nCPU Time : %lf",(double)cputime); |
|
448 |
printf("\nEpoch Time : %lf",(double)epoch); |
|
444 | 449 |
printf("\nZ max @(%i,%i) : %f",zimx,zjmx,zmx); |
445 | 450 |
printf("\nFlux max @(%i,%i) : %f\n\n",fimx,fjmx,fmx); |
446 | 451 |
|
447 |
for (i=0;i<dim;i++) for (j=0;j<dim;j++) |
|
448 |
{ |
|
449 |
zcl=(int)(255/zmx*zp[i][dim-1-j]); |
|
450 |
fcl=(int)(255/fmx*fp[i][dim-1-j]); |
|
451 |
|
|
452 |
if (strcmp(argv[6],"NEGATIVE")==0) |
|
452 |
// If input parameters set without output files precised |
|
453 |
if (argc!=7) { |
|
454 |
for (int i=0;i<dim;i++) |
|
455 |
for (int j=0;j<dim;j++) |
|
453 | 456 |
{ |
454 |
if (zcl>255) |
|
455 |
{ |
|
456 |
izp[i][j]=0; |
|
457 |
} |
|
458 |
else |
|
459 |
{ |
|
460 |
izp[i][j]=255-zcl; |
|
461 |
} |
|
457 |
zcl=(int)(255/zmx*zp[i][dim-1-j]); |
|
458 |
fcl=(int)(255/fmx*fp[i][dim-1-j]); |
|
462 | 459 |
|
463 |
if (fcl>255)
|
|
460 |
if (strcmp(argv[6],"NEGATIVE")==0)
|
|
464 | 461 |
{ |
465 |
ifp[i][j]=0; |
|
462 |
if (zcl>255) |
|
463 |
{ |
|
464 |
izp[i][j]=0; |
|
465 |
} |
|
466 |
else |
|
467 |
{ |
|
468 |
izp[i][j]=255-zcl; |
|
469 |
} |
|
470 |
|
|
471 |
if (fcl>255) |
|
472 |
{ |
|
473 |
ifp[i][j]=0; |
|
474 |
} |
|
475 |
else |
|
476 |
{ |
|
477 |
ifp[i][j]=255-fcl; |
|
478 |
} |
|
479 |
|
|
466 | 480 |
} |
467 | 481 |
else |
468 | 482 |
{ |
469 |
ifp[i][j]=255-fcl; |
|
470 |
} |
|
471 |
|
|
472 |
} |
|
473 |
else |
|
474 |
{ |
|
475 |
if (zcl>255) |
|
476 |
{ |
|
477 |
izp[i][j]=255; |
|
483 |
if (zcl>255) |
|
484 |
{ |
|
485 |
izp[i][j]=255; |
|
486 |
} |
|
487 |
else |
|
488 |
{ |
|
489 |
izp[i][j]=zcl; |
|
490 |
} |
|
491 |
|
|
492 |
if (fcl>255) |
|
493 |
{ |
|
494 |
ifp[i][j]=255; |
|
495 |
} |
|
496 |
else |
|
497 |
{ |
|
498 |
ifp[i][j]=fcl; |
|
499 |
} |
|
500 |
|
|
478 | 501 |
} |
479 |
else |
|
480 |
{ |
|
481 |
izp[i][j]=zcl; |
|
482 |
} |
|
483 | 502 |
|
484 |
if (fcl>255) |
|
485 |
{ |
|
486 |
ifp[i][j]=255; |
|
487 |
} |
|
488 |
else |
|
489 |
{ |
|
490 |
ifp[i][j]=fcl; |
|
491 |
} |
|
492 |
|
|
493 | 503 |
} |
494 |
|
|
495 |
} |
|
496 |
|
|
497 |
if (argc==9) |
|
498 |
{ |
|
499 |
sauvegarde_pgm(argv[7],ifp,dim); |
|
500 |
sauvegarde_pgm(argv[8],izp,dim); |
|
501 |
} |
|
504 |
|
|
505 |
if (argc==9) |
|
506 |
{ |
|
507 |
sauvegarde_pgm(argv[7],ifp,dim); |
|
508 |
sauvegarde_pgm(argv[8],izp,dim); |
|
509 |
} |
|
510 |
else |
|
511 |
{ |
|
512 |
sauvegarde_pgm("z.pgm",izp,dim); |
|
513 |
sauvegarde_pgm("flux.pgm",ifp,dim); |
|
514 |
} |
|
515 |
} |
|
502 | 516 |
else |
503 | 517 |
{ |
504 |
sauvegarde_pgm("z.pgm",izp,dim); |
|
505 |
sauvegarde_pgm("flux.pgm",ifp,dim); |
|
518 |
printf("No output file precised, useful for benchmarks...\n\n"); |
|
506 | 519 |
} |
507 |
|
|
520 |
|
|
508 | 521 |
free(zp[0]); |
509 | 522 |
free(zp); |
510 | 523 |
free(fp[0]); |
Formats disponibles : Unified diff