home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume21 / cloops / part02 / baseline.c next >
Encoding:
C/C++ Source or Header  |  1991-07-25  |  4.7 KB  |  194 lines

  1. /*
  2.  * This file is part of the Livermore Loops transliteration into C.
  3.  * Copyright (C) 1991 by Martin Fouts
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 1, or (at your option)
  8.  * any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19.  
  20. #include <stdio.h>
  21.  
  22. #define BASENAME "baseline.dat"
  23. #define NTESTS 24
  24.  
  25. #define TRUE 1
  26. #define FALSE 0
  27.  
  28. #define PERCENT 0.05
  29.  
  30. #define abs(a) (((a) < 0) ? -(a) : (a))
  31.  
  32. FILE *fopen();
  33. char *fgets();
  34.  
  35. double err(a,b)
  36. double a, b;
  37. {
  38.   if (a == 0.0) {
  39.     return(b);
  40.   } else {
  41.     return(abs(b-a)/a);
  42.   }
  43. }
  44.  
  45. main(argc,argv)
  46. int argc;
  47. char *argv[];
  48. {
  49.   int i;
  50.   int errors;
  51.   char *basename, *testname;
  52.   FILE *baseline, *testdata;
  53.   int kern, span;
  54.   double percent = PERCENT;
  55.   double flops, weight, sum;
  56.   int b_kern, b_flag[NTESTS];
  57.   int b_span[NTESTS];
  58.   double b_flops[NTESTS], b_weight[NTESTS], b_sum[NTESTS];
  59.   int t_kern, t_flag[NTESTS];
  60.   int t_span[NTESTS];
  61.   double t_flops[NTESTS], t_weight[NTESTS], t_sum[NTESTS];
  62.   double dummy, worst;
  63.   char buffer[BUFSIZ];
  64.  
  65.   if (argc == 2) {
  66.     basename = BASENAME;
  67.     testname = argv[1];
  68.   } else {
  69.     if (argc == 3) {
  70.       basename = BASENAME;
  71.       sscanf(argv[2],"%f",&percent);
  72.       printf("Using percent = %f\n", percent);
  73.       testname = argv[1];
  74.     } else {
  75.       if (argc == 4) {
  76.     basename = argv[3];
  77.     sscanf(argv[2],"%f",&percent);
  78.     testname = argv[1];
  79.       } else {
  80.     fprintf(stderr,"Usage: %s testname [percent [basename]]\n", argv[0]);
  81.       }
  82.     }
  83.   }
  84.  
  85.   if ((baseline = fopen(basename,"r")) == NULL) {
  86.     fprintf(stderr,"Error attempting to open %s", basename);
  87.     perror("");
  88.     exit(1);
  89.   }
  90.  
  91.   if ((testdata = fopen(testname,"r")) == NULL) {
  92.     fprintf(stderr,"Error attempting to open %s", testname);
  93.     perror("");
  94.     exit(1);
  95.   }
  96.  
  97.   for (i = 0; i < NTESTS; i++) {
  98.     b_flag[i] = FALSE;
  99.     t_flag[i] = FALSE;
  100.   }
  101.  
  102.   while (fgets(buffer,BUFSIZ,baseline) != NULL) {
  103.     sscanf(buffer,"%d %e %e %e %d %e %e\n", &kern, &flops, &dummy,
  104.        &dummy, &span, &weight, &sum);
  105.     if ((kern < 1) || (kern > NTESTS)) {
  106.       fprintf(stderr,"Ignoring data from baseline:\n");
  107.       fprintf(stderr,"%s\n", buffer);
  108.     }
  109.     b_kern = kern - 1;
  110.     b_flag[b_kern] = TRUE;
  111.     b_span[b_kern] = span;
  112.     b_flops[b_kern] = flops;
  113.     b_weight[b_kern] = weight;
  114.     b_sum[b_kern] = sum;
  115.   }
  116.  
  117.   while (fgets(buffer,BUFSIZ,testdata) != NULL) {
  118.     sscanf(buffer,"%d %e %e %e %d %e %e\n", &kern, &flops, &dummy,
  119.        &dummy, &span, &weight, &sum);
  120.     if ((kern < 1) || (kern > NTESTS)) {
  121.       fprintf(stderr,"Ignoring data from baseline:\n");
  122.       fprintf(stderr,"%s\n", buffer);
  123.     }
  124.     t_kern = kern - 1;
  125.     t_flag[t_kern] = TRUE;
  126.     t_span[t_kern] = span;
  127.     t_flops[t_kern] = flops;
  128.     t_weight[t_kern] = weight;
  129.     t_sum[t_kern] = sum;
  130.   }
  131.  
  132.   for (i = 0; i < NTESTS; i++) {
  133.     if (!b_flag[i]) {
  134.       if (t_flag[i]) {
  135.     fprintf(stdout,"Kernel %d: No baseline.  Test data.\n",i+1);
  136.       } else {
  137.     fprintf(stdout,"Kernel %d: No baseline.  No test data.\n",i+1);
  138.       }
  139.     } else {
  140.       if (!t_flag[i]) {
  141.     fprintf(stdout,"Kernel %d: Baseline.  No test data.\n",i+1);
  142.       } else {
  143.  
  144.     errors = 0;
  145.     worst = 0.0;
  146.  
  147.     dummy = err(b_flops[i],t_flops[i]);
  148.     if (dummy > percent) {
  149.       fprintf(stdout,"Kernel %d: Flops:  baseline = %g, test = %g\n",
  150.           i+1, b_flops[i], t_flops[i]);
  151.       errors++;
  152.     }
  153.     if (dummy > worst) worst = dummy;
  154.  
  155.     dummy = err((double)b_span[i],(double)t_span[i]);
  156.     if (dummy > percent) {
  157.       fprintf(stdout,"Kernel %d: Span:  baseline = %d, test = %d\n",
  158.           i+1, b_span[i], t_span[i]);
  159.       errors++;
  160.     }
  161.     if (dummy > worst) worst = dummy;
  162.  
  163.     dummy = err(b_weight[i],t_weight[i]);
  164.     if (dummy > percent) {
  165.       fprintf(stdout,"Kernel %d: Weight:  baseline = %g, test = %g\n",
  166.           i+1, b_weight[i], t_weight[i]);
  167.       errors++;
  168.     }
  169.     if (dummy > worst) worst = dummy;
  170.  
  171.     dummy = err(b_sum[i],t_sum[i]);
  172.     if (dummy > percent) {
  173.       fprintf(stdout,"Kernel %d: Sum:  baseline = %g, test = %g\n",
  174.           i+1, b_sum[i], t_sum[i]);
  175.       errors++;
  176.     }
  177.     if (dummy > worst) worst = dummy;
  178.  
  179. /*
  180.     if (errors == 0) {
  181.       fprintf(stdout,"Kernel %d: Baseline and Test agree.\n", i+1);
  182.     } else {
  183.       fprintf(stdout,"Kernel %d: Baseline and Test disagree %d times.\n",
  184.           i+1, errors);
  185.     }
  186. */
  187.       }
  188.     }
  189.   }
  190.   
  191.   exit(0);
  192. }
  193.  
  194.