home *** CD-ROM | disk | FTP | other *** search
- /*
- * This file is part of the Livermore Loops transliteration into C.
- * Copyright (C) 1991 by Martin Fouts
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 1, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- #include <stdio.h>
-
- #define BASENAME "baseline.dat"
- #define NTESTS 24
-
- #define TRUE 1
- #define FALSE 0
-
- #define PERCENT 0.05
-
- #define abs(a) (((a) < 0) ? -(a) : (a))
-
- FILE *fopen();
- char *fgets();
-
- double err(a,b)
- double a, b;
- {
- if (a == 0.0) {
- return(b);
- } else {
- return(abs(b-a)/a);
- }
- }
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- int i;
- int errors;
- char *basename, *testname;
- FILE *baseline, *testdata;
- int kern, span;
- double percent = PERCENT;
- double flops, weight, sum;
- int b_kern, b_flag[NTESTS];
- int b_span[NTESTS];
- double b_flops[NTESTS], b_weight[NTESTS], b_sum[NTESTS];
- int t_kern, t_flag[NTESTS];
- int t_span[NTESTS];
- double t_flops[NTESTS], t_weight[NTESTS], t_sum[NTESTS];
- double dummy, worst;
- char buffer[BUFSIZ];
-
- if (argc == 2) {
- basename = BASENAME;
- testname = argv[1];
- } else {
- if (argc == 3) {
- basename = BASENAME;
- sscanf(argv[2],"%f",&percent);
- printf("Using percent = %f\n", percent);
- testname = argv[1];
- } else {
- if (argc == 4) {
- basename = argv[3];
- sscanf(argv[2],"%f",&percent);
- testname = argv[1];
- } else {
- fprintf(stderr,"Usage: %s testname [percent [basename]]\n", argv[0]);
- }
- }
- }
-
- if ((baseline = fopen(basename,"r")) == NULL) {
- fprintf(stderr,"Error attempting to open %s", basename);
- perror("");
- exit(1);
- }
-
- if ((testdata = fopen(testname,"r")) == NULL) {
- fprintf(stderr,"Error attempting to open %s", testname);
- perror("");
- exit(1);
- }
-
- for (i = 0; i < NTESTS; i++) {
- b_flag[i] = FALSE;
- t_flag[i] = FALSE;
- }
-
- while (fgets(buffer,BUFSIZ,baseline) != NULL) {
- sscanf(buffer,"%d %e %e %e %d %e %e\n", &kern, &flops, &dummy,
- &dummy, &span, &weight, &sum);
- if ((kern < 1) || (kern > NTESTS)) {
- fprintf(stderr,"Ignoring data from baseline:\n");
- fprintf(stderr,"%s\n", buffer);
- }
- b_kern = kern - 1;
- b_flag[b_kern] = TRUE;
- b_span[b_kern] = span;
- b_flops[b_kern] = flops;
- b_weight[b_kern] = weight;
- b_sum[b_kern] = sum;
- }
-
- while (fgets(buffer,BUFSIZ,testdata) != NULL) {
- sscanf(buffer,"%d %e %e %e %d %e %e\n", &kern, &flops, &dummy,
- &dummy, &span, &weight, &sum);
- if ((kern < 1) || (kern > NTESTS)) {
- fprintf(stderr,"Ignoring data from baseline:\n");
- fprintf(stderr,"%s\n", buffer);
- }
- t_kern = kern - 1;
- t_flag[t_kern] = TRUE;
- t_span[t_kern] = span;
- t_flops[t_kern] = flops;
- t_weight[t_kern] = weight;
- t_sum[t_kern] = sum;
- }
-
- for (i = 0; i < NTESTS; i++) {
- if (!b_flag[i]) {
- if (t_flag[i]) {
- fprintf(stdout,"Kernel %d: No baseline. Test data.\n",i+1);
- } else {
- fprintf(stdout,"Kernel %d: No baseline. No test data.\n",i+1);
- }
- } else {
- if (!t_flag[i]) {
- fprintf(stdout,"Kernel %d: Baseline. No test data.\n",i+1);
- } else {
-
- errors = 0;
- worst = 0.0;
-
- dummy = err(b_flops[i],t_flops[i]);
- if (dummy > percent) {
- fprintf(stdout,"Kernel %d: Flops: baseline = %g, test = %g\n",
- i+1, b_flops[i], t_flops[i]);
- errors++;
- }
- if (dummy > worst) worst = dummy;
-
- dummy = err((double)b_span[i],(double)t_span[i]);
- if (dummy > percent) {
- fprintf(stdout,"Kernel %d: Span: baseline = %d, test = %d\n",
- i+1, b_span[i], t_span[i]);
- errors++;
- }
- if (dummy > worst) worst = dummy;
-
- dummy = err(b_weight[i],t_weight[i]);
- if (dummy > percent) {
- fprintf(stdout,"Kernel %d: Weight: baseline = %g, test = %g\n",
- i+1, b_weight[i], t_weight[i]);
- errors++;
- }
- if (dummy > worst) worst = dummy;
-
- dummy = err(b_sum[i],t_sum[i]);
- if (dummy > percent) {
- fprintf(stdout,"Kernel %d: Sum: baseline = %g, test = %g\n",
- i+1, b_sum[i], t_sum[i]);
- errors++;
- }
- if (dummy > worst) worst = dummy;
-
- /*
- if (errors == 0) {
- fprintf(stdout,"Kernel %d: Baseline and Test agree.\n", i+1);
- } else {
- fprintf(stdout,"Kernel %d: Baseline and Test disagree %d times.\n",
- i+1, errors);
- }
- */
- }
- }
- }
-
- exit(0);
- }
-
-