home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <sys/time.h>
- #include <math.h>
- #include "conv.h"
-
- /* --------- The following definitions change
- according to precision required -------- */
-
-
- #ifdef DOUBLE /* real double precision */
-
- typedef double this_type;
-
- #define OPS_PER_ITER 2
-
- void dfir2d_(), simple_dfir2d_(), serial_dfir2d_(), ornl_dfir2d_();
- void diir2d_(), simple_diir2d_(), serial_diir2d_(), ornl_diir2d_();
- void dcor2d_(), simple_dcor2d_(), serial_dcor2d_(), ornl_dcor2d_();
- void dfirm1d_(), simple_dfirm1d_(), serial_dfirm1d_(), ornl_dfirm1d_();
- void diirm1d_(), simple_diirm1d_(), serial_diirm1d_(), ornl_diirm1d_();
- void dcorm1d_(), simple_dcorm1d_(), serial_dcorm1d_(), ornl_dcorm1d_();
- #define MY_FIR2D dfir2d_
- #define MY_IIR2D diir2d_
- #define MY_COR2D dcor2d_
- #define ORNL_FIR2D ornl_dfir2d_
- #define ORNL_IIR2D ornl_diir2d_
- #define ORNL_COR2D ornl_dcor2d_
- #define SIMPLE_FIR2D simple_dfir2d_
- #define SIMPLE_IIR2D simple_diir2d_
- #define SIMPLE_COR2D simple_dcor2d_
- #define MY_FIRM1D dfirm1d_
- #define MY_IIRM1D diirm1d_
- #define MY_CORM1D dcorm1d_
- #define ORNL_FIRM1D dfirm1d_
- #define ORNL_IIRM1D diirm1d_
- #define ORNL_CORM1D dcorm1d_
- #define SIMPLE_FIRM1D simple_dfirm1d_
- #define SIMPLE_IIRM1D simple_diirm1d_
- #define SIMPLE_CORM1D simple_dcorm1d_
-
- #define MY_INIT dinit_
- #define MY_ONE done_
- #define THIS_REAL
-
- #endif
- #ifdef SINGLE /* real single precision */
-
- typedef float this_type;
-
- #define OPS_PER_ITER 2
-
- void sfir2d_(), simple_sfir2d_(), serial_sfir2d_(), ornl_sfir2d_();
- void siir2d_(), simple_siir2d_(), serial_siir2d_(), ornl_siir2d_();
- void scor2d_(), simple_scor2d_(), serial_scor2d_(), ornl_scor2d_();
- void sfirm1d_(), simple_sfirm1d_(), serial_sfirm1d_(), ornl_sfirm1d_();
- void siirm1d_(), simple_siirm1d_(), serial_siirm1d_(), ornl_siirm1d_();
- void scorm1d_(), simple_scorm1d_(), serial_scorm1d_(), ornl_scorm1d_();
- #define MY_FIR2D sfir2d_
- #define MY_IIR2D siir2d_
- #define MY_COR2D scor2d_
- #define ORNL_FIR2D ornl_sfir2d_
- #define ORNL_IIR2D ornl_siir2d_
- #define ORNL_COR2D ornl_scor2d_
- #define SIMPLE_FIR2D simple_sfir2d_
- #define SIMPLE_IIR2D simple_siir2d_
- #define SIMPLE_COR2D simple_scor2d_
-
- #define MY_FIRM1D sfirm1d_
- #define MY_IIRM1D siirm1d_
- #define MY_CORM1D scorm1d_
- #define ORNL_FIRM1D sfirm1d_
- #define ORNL_IIRM1D siirm1d_
- #define ORNL_CORM1D scorm1d_
- #define SIMPLE_FIRM1D simple_sfirm1d_
- #define SIMPLE_IIRM1D simple_siirm1d_
- #define SIMPLE_CORM1D simple_scorm1d_
-
- #define MY_INIT sinit_
- #define MY_ONE sone_
- #define THIS_REAL
- #endif
-
- #ifdef ZOMPLEX /* complex double precision */
-
- typedef struct {double real, imag;} this_type;
-
- #define OPS_PER_ITER 8
-
- void zfir2d_(), simple_zfir2d_(), serial_zfir2d_(), ornl_zfir2d_();
- void ziir2d_(), simple_ziir2d_(), serial_ziir2d_(), ornl_ziir2d_();
- void zcor2d_(), simple_zcor2d_(), serial_zcor2d_(), ornl_zcor2d_();
- void zfirm1d_(), simple_zfirm1d_(), serial_zfirm1d_(), ornl_zfirm1d_();
- void ziirm1d_(), simple_ziirm1d_(), serial_ziirm1d_(), ornl_ziirm1d_();
- void zcorm1d_(), simple_zcorm1d_(), serial_zcorm1d_(), ornl_zcorm1d_();
- #define MY_FIR2D zfir2d_
- #define MY_IIR2D ziir2d_
- #define MY_COR2D zcor2d_
- #define ORNL_FIR2D ornl_zfir2d_
- #define ORNL_IIR2D ornl_ziir2d_
- #define ORNL_COR2D ornl_zcor2d_
- #define SIMPLE_FIR2D simple_zfir2d_
- #define SIMPLE_IIR2D simple_ziir2d_
- #define SIMPLE_COR2D simple_zcor2d_
- #define MY_FIRM1D zfirm1d_
- #define MY_IIRM1D ziirm1d_
- #define MY_CORM1D zcorm1d_
- #define ORNL_FIRM1D zfirm1d_
- #define ORNL_IIRM1D ziirm1d_
- #define ORNL_CORM1D zcorm1d_
- #define SIMPLE_FIRM1D simple_zfirm1d_
- #define SIMPLE_IIRM1D simple_ziirm1d_
- #define SIMPLE_CORM1D simple_zcorm1d_
-
- #define MY_INIT zinit_
- #define MY_ONE zone_
- #define THIS_COMPLEX
-
- #endif
- #ifdef COMPLEX /* complex single precision */
-
- typedef struct {float real, imag;} this_type;
-
- #define OPS_PER_ITER 8
-
- void cfir2d_(), simple_cfir2d_(), serial_cfir2d_(), ornl_cfir2d_();
- void ciir2d_(), simple_ciir2d_(), serial_ciir2d_(), ornl_ciir2d_();
- void ccor2d_(), simple_ccor2d_(), serial_ccor2d_(), ornl_ccor2d_();
- void cfirm1d_(), simple_cfirm1d_(), serial_cfirm1d_(), ornl_cfirm1d_();
- void ciirm1d_(), simple_ciirm1d_(), serial_ciirm1d_(), ornl_ciirm1d_();
- void ccorm1d_(), simple_ccorm1d_(), serial_ccorm1d_(), ornl_ccorm1d_();
- #define MY_FIR2D cfir2d_
- #define MY_IIR2D ciir2d_
- #define MY_COR2D ccor2d_
- #define ORNL_FIR2D ornl_cfir2d_
- #define ORNL_IIR2D ornl_ciir2d_
- #define ORNL_COR2D ornl_ccor2d_
- #define SIMPLE_FIR2D simple_cfir2d_
- #define SIMPLE_IIR2D simple_ciir2d_
- #define SIMPLE_COR2D simple_ccor2d_
-
- #define MY_FIRM1D cfirm1d_
- #define MY_IIRM1D ciirm1d_
- #define MY_CORM1D ccorm1d_
- #define ORNL_FIRM1D cfirm1d_
- #define ORNL_IIRM1D ciirm1d_
- #define ORNL_CORM1D ccorm1d_
- #define SIMPLE_FIRM1D simple_cfirm1d_
- #define SIMPLE_IIRM1D simple_ciirm1d_
- #define SIMPLE_CORM1D simple_ccorm1d_
-
- #define MY_INIT cinit_
- #define MY_ONE cone_
- #define THIS_COMPLEX
- #endif
-
- /* ---------- The rest is the same ---------------- */
-
- #define MAX_SIZE 111
- #define MAX_STRIDE 5
- #define INC_STRIDE 2
- #define MAX_TIMES 3
- #define MIN_OPS 5.e+6
-
- #define ABS(a) ( ((a)>0) ? (a) : -(a))
- #define MAX(a,b) (((a) < (b)) ? (b) : a)
-
- void (*this_fir2d)(), (*my_fir2d)();
- void (*this_iir2d)(), (*my_iir2d)();
- void (*this_cor2d)(), (*my_cor2d)();
- void (*this_firm1d)(), (*my_firm1d)();
- void (*this_iirm1d)(), (*my_iirm1d)();
- void (*this_corm1d)(), (*my_corm1d)();
-
- void GetArguments();
- double second();
-
- #define PLAIN 0
- #define SERIAL 1
- #define PARALLEL 2
- #define PAR_SER 3
- #define SER_SIM 4
- #define PAR_SIM 5
- #define ORNL 6
-
- int flag = -1;
- int is_speedup;
- int n_trials;
- int all_run;
- int len = 4;
-
- int ldf, size, ldg, ldh, n_times, nf, ng;
- int min_size, max_size, inc_size, size_f, size_g, size_h;
- this_type *vx, *vy, *vz;
-
- double t, x, y, z, zops;
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- int i, j, k;
-
- /* ******************************************************* */
- GetArguments( argc, argv);
- /* ******************************************************* */
-
- size_f = MAX(max_size, nf);
- size_g = MAX(max_size, ng);
- size_h = size_f + size_g - 1;
-
- vx = (this_type *)malloc( size_f * size_f * sizeof( this_type));
- vy = (this_type *)malloc( size_g * size_g * sizeof( this_type));
- vz = (this_type *)malloc( size_h * size_h * sizeof( this_type));
-
- if( (vx == (this_type *)0) || (vy == (this_type *)0)) {
- fprintf( stderr, "Malloc problem ... Exiting");
- exit( -2);
- }
- i = size_f*size_f;
- j = size_g*size_g;
- MY_INIT( (&i), vx);
- MY_ONE ( (&j), vy);
-
- fprintf( stderr, "SIZE FIR2D FIRM1D COR2D CORM1D IIR2D IIRM1D\n\n");
-
- for( size = min_size; size <= max_size ; size += inc_size ) {
- size_g = (ng == 0) ? size : ng;
- size_f = (nf == 0) ? size : nf;
- size_h = size_f + size_g - 1;
- zops = (double)size_f * (double)size_g;
- zops = zops * zops * OPS_PER_ITER;
- n_times = MIN_OPS / zops;
- if( n_times < 1)
- n_times = 1;
- printf("%4d ", size);
- do_it();
-
- printf("\n", x);
- fflush(stdout);
- }
-
- free ( vx);
- free ( vy);
-
- return(0);
- }
-
-
- do_it()
- {
- int ii, jj, inc, if1, if2, jf1, jf2, ig1, ig2, jg1, jg2, ih1, ih2, jh1, jh2;
- int ione = 1;
- int izero = 0;
-
- this_type alpha, beta;
- #ifdef THIS_REAL
- alpha = 1.0; beta =0.0;
- #endif
- #ifdef THIS_COMPLEX
- alpha.real = 1.0; beta.real =0.0;
- alpha.imag = 0.0; beta.imag =0.2;
- #endif
-
- switch (flag) {
- case PLAIN :
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_fir2d ( &size_f, &size_f, &size_g, &size_g, vx, vy, vz);
- t = second() - t;
- x = size_f * size_g; x *= x; x *= (double)n_times;
- x *= 1.e-6; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times * size_g ; ii++)
- this_firm1d( &size_f, &size_f, &size_g, vx, vy, vz);
- t = second() - t;
- x = size_f * size_g; x *= x; x *= (double)n_times;
- x *= 1.e-6; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_cor2d ( &size_f, &size_f, &size_g, &size_g, vx, vy, vz);
- t = second() - t;
- x = size_f * size_g; x *= x; x *= (double)n_times;
- x *= 1.e-6; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- this_corm1d( &size_f, &size_f, &size_g, vx, vy, vz);
- t = second() - t;
- x = size_f * size_g; x *= x; x *= (double)n_times;
- x *= 1.e-6; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_iir2d ( &size_f, &size_f, &size_g, &size_g, vx, vy, vz);
- t = second() - t;
- x = size_f; z = MAX((size_f-size_g),0); x = .5 * (x*x-z*z); x = x * x;
- x *= 1.e-6; x *= (double)n_times; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- this_iirm1d( &size_f, &size_f, &size_g, vx, vy, vz);
- t = second() - t;
- x = size_f; z = MAX((size_f-size_g),0); x = .5 * (x*x-z*z) * size_f * size_g;
- x *= 1.e-6; x *= (double)n_times; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
- break;
-
- case ORNL :
- case SERIAL :
- case PARALLEL :
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_fir2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &izero, &size_g, &izero, &size_g,
- vz, &ione, &size_h, &izero, &size_h, &izero, &size_h,
- &alpha, &beta);
- t = second() - t;
- x = size_f * size_g; x *= x; x *= (double)n_times;
- x *= 1.e-6; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times * size_g ; ii++)
- this_firm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &izero, &size_g,
- vz, &ione, &size_h, &izero, &size_h,
- &alpha, &beta);
- t = second() - t;
- x = size_f * size_g; x *= x; x *= (double)n_times;
- x *= 1.e-6; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- ig1 = -(size_g-1);
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_cor2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &ig1 , &size_g, &ig1 , &size_g,
- vz, &ione, &size_h, &izero, &size_h, &izero, &size_h);
- t = second() - t;
- x = size_f * size_g; x *= x; x *= (double)n_times;
- x *= 1.e-6; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- this_corm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &ig1 , &size_g,
- vz, &ione, &size_h, &izero, &size_h);
- t = second() - t;
- x = size_f * size_g; x *= x; x *= (double)n_times;
- x *= 1.e-6; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_iir2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &izero, &size_g, &izero, &size_g,
- vz, &ione, &size_f, &izero, &size_f, &izero, &size_f);
- t = second() - t;
- x = .5 * size_f * size_f;
- if( size_f > size_g)
- x = size_g * size_f - .5 * size_g * size_g;
- x *= x; x *= 1.e-6; x *= (double)n_times; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
-
- t = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- this_iirm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &izero, &size_g,
- vz, &ione, &size_f, &izero, &size_f);
- t = second() - t;
- x = size_f; z = MAX((size_f-size_g),0); x = .5 * (x*x-z*z) * size_f * size_g;
- x *= 1.e-6; x *= (double)n_times; x = OPS_PER_ITER * x / t; printf(" %8.2f ", x);
- break;
-
- case PAR_SIM :
- case SER_SIM :
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- for( ii = 0 ; ii < n_times ; ii++)
- this_fir2d ( &size_f, &size_f, &size_g, &size_g, vx, vy, vz);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times ; ii++)
- my_fir2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &izero, &size_g, &izero, &size_g,
- vz, &ione, &size_h, &izero, &size_h, &izero, &size_h,
- &alpha, &beta);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- t = second();
- for( ii = 0 ; ii < n_times * size_g ; ii++)
- this_firm1d( &size_f, &size_f, &size_g, vx, vy, vz);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times * size_g ; ii++)
- my_firm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &izero, &size_g,
- vz, &ione, &size_h, &izero, &size_h,
- &alpha, &beta);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- ig1 = -(size_g-1);
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_cor2d ( &size_f, &size_f, &size_g, &size_g, vx, vy, vz);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times ; ii++)
- my_cor2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &ig1 , &size_g, &ig1 , &size_g,
- vz, &ione, &size_h, &izero, &size_h, &izero, &size_h);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- t = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- this_corm1d( &size_f, &size_f, &size_g, vx, vy, vz);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- my_corm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &ig1 , &size_g,
- vz, &ione, &size_h, &izero, &size_h);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_iir2d ( &size_f, &size_f, &size_g, &size_g, vx, vy, vz);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times ; ii++)
- my_iir2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &izero, &size_g, &izero, &size_g,
- vz, &ione, &size_f, &izero, &size_f, &izero, &size_f);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- t = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- this_iirm1d( &size_f, &size_f, &size_g, vx, vy, vz);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- my_iirm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &izero, &size_g,
- vz, &ione, &size_f, &izero, &size_f);
- x = second() - x;
- printf( " %8.2f ", t/x);
- break;
-
- case PAR_SER :
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_fir2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &izero, &size_g, &izero, &size_g,
- vz, &ione, &size_h, &izero, &size_h, &izero, &size_h,
- &alpha, &beta);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times ; ii++)
- my_fir2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &izero, &size_g, &izero, &size_g,
- vz, &ione, &size_h, &izero, &size_h, &izero, &size_h,
- &alpha, &beta);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- t = second();
- for( ii = 0 ; ii < n_times * size_g ; ii++)
- this_firm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &izero, &size_g,
- vz, &ione, &size_h, &izero, &size_h,
- &alpha, &beta);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times * size_g ; ii++)
- my_firm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &izero, &size_g,
- vz, &ione, &size_h, &izero, &size_h,
- &alpha, &beta);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- ig1 = -(size_g-1);
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_cor2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &ig1 , &size_g, &ig1 , &size_g,
- vz, &ione, &size_h, &izero, &size_h, &izero, &size_h);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times ; ii++)
- my_cor2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &ig1 , &size_g, &ig1 , &size_g,
- vz, &ione, &size_h, &izero, &size_h, &izero, &size_h);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- t = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- this_corm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &ig1 , &size_g,
- vz, &ione, &size_h, &izero, &size_h);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- my_corm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &ig1 , &size_g,
- vz, &ione, &size_h, &izero, &size_h);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- t = second();
- for( ii = 0 ; ii < n_times ; ii++)
- this_iir2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &izero, &size_g, &izero, &size_g,
- vz, &ione, &size_f, &izero, &size_f, &izero, &size_f);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times ; ii++)
- my_iir2d ( vx, &ione, &size_f, &izero, &size_f, &izero, &size_f,
- vy, &ione, &size_g, &izero, &size_g, &izero, &size_g,
- vz, &ione, &size_f, &izero, &size_f, &izero, &size_f);
- x = second() - x;
- printf( " %8.2f ", t/x);
-
- t = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- this_iirm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &izero, &size_g,
- vz, &ione, &size_f, &izero, &size_f);
- t = second() - t;
- x = second();
- for( ii = 0 ; ii < n_times*size_g ; ii++)
- my_iirm1d( vx, &ione, &size_f, &izero, &size_f, &size_f,
- vy, &ione, &izero, &size_g,
- vz, &ione, &size_f, &izero, &size_f);
- x = second() - x;
- printf( " %8.2f ", t/x);
- break;
-
- default :
- fflush( stdout);
- fprintf( stderr, "Lost ... exiting\n");
- exit(-1);
- }
- }
-
- void GetArguments( argc, argv)
- int argc;
- char *argv[];
- {
- int i, j, k;
- int nerror = 0;
-
- srandom( (123*getpid()) | 0x01);
-
- #define ON 1
-
- is_speedup = 0;
- ng = 0;
- nf = 0;
- all_run = 0;
-
- min_size = 16;
- max_size = 1024;
- inc_size = 8;
-
- flag = PLAIN;
-
- this_fir2d = SIMPLE_FIR2D;
- this_iir2d = SIMPLE_IIR2D;
- this_cor2d = SIMPLE_COR2D;
- this_firm1d = SIMPLE_FIRM1D;
- this_iirm1d = SIMPLE_IIRM1D;
- this_corm1d = SIMPLE_CORM1D;
- /* ******************************************************* */
- for ( i = 1 ; (i < argc) && (nerror != ON) ; i ++ ) {
- if( argv[i][0] == '-') {
- switch ( argv[i][1]) {
-
- case 'f' :
- case 'F' :
- nf = atoi( argv[++i]);
- break;
- case 'g' :
- case 'G' :
- ng = atoi( argv[++i]);
- break;
- case 'x' :
- case 'X' :
- flag = PAR_SER;
- is_speedup = 1;
- this_fir2d = ORNL_FIR2D;
- my_fir2d = MY_FIR2D;
- this_iir2d = ORNL_IIR2D;
- my_iir2d = MY_IIR2D;
- this_cor2d = ORNL_COR2D;
- my_cor2d = MY_COR2D;
- this_firm1d = ORNL_FIRM1D;
- my_firm1d = MY_FIRM1D;
- this_iirm1d = ORNL_IIRM1D;
- my_iirm1d = MY_IIRM1D;
- this_corm1d = ORNL_CORM1D;
- my_corm1d = MY_CORM1D;
- break;
- case 'y' :
- case 'Y' :
- flag = SER_SIM;
- is_speedup = 1;
- this_fir2d = SIMPLE_FIR2D;
- my_fir2d = ORNL_FIR2D;
- this_iir2d = SIMPLE_IIR2D;
- my_iir2d = ORNL_IIR2D;
- this_cor2d = SIMPLE_COR2D;
- my_cor2d = ORNL_COR2D;
- this_firm1d = SIMPLE_FIRM1D;
- my_firm1d = ORNL_FIRM1D;
- this_iirm1d = SIMPLE_IIRM1D;
- my_iirm1d = ORNL_IIRM1D;
- this_corm1d = SIMPLE_CORM1D;
- my_corm1d = ORNL_CORM1D;
- break;
- case 'z' :
- case 'Z' :
- flag = PAR_SIM;
- is_speedup = 1;
- this_fir2d = SIMPLE_FIR2D;
- my_fir2d = MY_FIR2D;
- this_iir2d = SIMPLE_IIR2D;
- my_iir2d = MY_IIR2D;
- this_cor2d = SIMPLE_COR2D;
- my_cor2d = MY_COR2D;
- this_firm1d = SIMPLE_FIRM1D;
- my_firm1d = MY_FIRM1D;
- this_iirm1d = SIMPLE_IIRM1D;
- my_iirm1d = MY_IIRM1D;
- this_corm1d = SIMPLE_CORM1D;
- my_corm1d = MY_CORM1D;
- break;
- case 'o' :
- case 'O' :
- flag = ORNL;
- is_speedup = 0;
- this_fir2d = ORNL_FIR2D;
- this_iir2d = ORNL_IIR2D;
- this_cor2d = ORNL_COR2D;
- this_firm1d = ORNL_FIRM1D;
- this_iirm1d = ORNL_IIRM1D;
- this_corm1d = ORNL_CORM1D;
- break;
- case 's' :
- case 'S' :
- case 'p' :
- case 'P' :
- flag = PARALLEL;
- this_fir2d = MY_FIR2D;
- this_iir2d = MY_IIR2D;
- this_cor2d = MY_COR2D;
- this_firm1d = MY_FIRM1D;
- this_iirm1d = MY_IIRM1D;
- this_corm1d = MY_CORM1D;
- break;
- default : nerror = ON;
- }
- }
- else {
- if( i+1 > argc)
- nerror = ON;
- else {
- min_size = atoi( argv[i]);i++;
- max_size = atoi( argv[i]);i++;
- inc_size = atoi( argv[i]);
- }
- }
- }
- if( nerror == ON) {
- fprintf( stderr,
- "Usage : %s [-s -p / -z] [-f nf] [-g ng] <min max inc>\n", argv[0]);
- exit(-1);
- }
- }
- /* **********************************************************************
-
- give the elapsed wall clock time
-
- ********************************************************************** */
- double second()
- {
- struct timeval s_val;
- struct timezone s_z;
-
- static double zero_time = 0.0;
- static long zero_sec = 0;
- double time;
- long n_sec, n_usec;
-
- gettimeofday(&s_val, &s_z);
-
- n_sec = s_val.tv_sec;
- n_usec = s_val.tv_usec;
- if( zero_time == 0.0 ) {
- zero_sec = n_sec;
- zero_time = 1.0e-6 * (double)n_usec;
- }
- time = (double)(n_sec-zero_sec) + (double)n_usec * 1.0E-6 - zero_time;
- return( time );
- }
-
-