/**CFile*********************************************************************** FileName [calPerformanceTest.c] PackageName [cal] Synopsis [This file contains the performance test routines for the CAL package.] Description [optional] SeeAlso [optional] Author [Rajeev K. Ranjan (rajeev@eecs.berkeley.edu) Jagesh Sanghavi (sanghavi@eecs.berkeley.edu) ] Copyright [Copyright (c) 1994-1996 The Regents of the Univ. of California. All rights reserved. Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose, provided that the above copyright notice and the following two paragraphs appear in all copies of this software. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.] Revision [$Id: calPerformanceTest.c,v 1.10 2005/04/30 22:57:39 fabio Exp $] ******************************************************************************/ #include "calInt.h" #include #include /*---------------------------------------------------------------------------*/ /* Constant declarations */ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /* Type declarations */ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /* Stucture declarations */ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ /* Variable declarations */ /*---------------------------------------------------------------------------*/ static int ITERATION; /*---------------------------------------------------------------------------*/ /* Macro declarations */ /*---------------------------------------------------------------------------*/ /**AutomaticStart*************************************************************/ /*---------------------------------------------------------------------------*/ /* Static function prototypes */ /*---------------------------------------------------------------------------*/ static void CalPerformanceTestAnd(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); #ifdef COMPUTE_MEMORY_OVERHEAD static void CalPerformanceMemoryOverhead(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); #endif static void CalPerformaceTestSuperscalar(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); static void CalPerformanceTestNonSuperscalar(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); static void CalPerformanceTestMultiway(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); static void CalPerformanceTestOneway(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); static void CalPerformanceTestCompose(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); static void CalPerformanceTestQuantifyAllTogether(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions, int bfZeroBFPlusDFOne, int cacheExistsResultsFlag, int cacheOrResultsFlag); static void CalQuantifySanityCheck(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); static void CalPerformanceTestRelProd(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions, int bfZeroBFPlusDFOne, int cacheRelProdResultsFlag, int cacheAndResultsFlag, int cacheOrResultsFlag); static void CalPerformanceTestSubstitute(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); static void CalPerformanceTestSwapVars(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions); static long elapsedTime(void); static double cpuTime(void); static long pageFaults(void); static void GetRandomNumbers(int lowerBound, int upperBound, int count, int *resultVector); /**AutomaticEnd***************************************************************/ /*---------------------------------------------------------------------------*/ /* Definition of exported functions */ /*---------------------------------------------------------------------------*/ /**Function******************************************************************** Synopsis [Main routine for testing performances of various routines.] Description [optional] SideEffects [required] SeeAlso [optional] ******************************************************************************/ int Cal_PerformanceTest(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions, int iteration, int seed, int andPerformanceFlag, int multiwayPerformanceFlag, int onewayPerformanceFlag, int quantifyPerformanceFlag, int composePerformanceFlag, int relprodPerformanceFlag, int swapPerformanceFlag, int substitutePerformanceFlag, int sanityCheckFlag, int computeMemoryOverheadFlag, int superscalarFlag) { CalUtilSRandom((long)seed); ITERATION = iteration; fprintf(stdout,"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); fprintf(stdout, "Performing %d iterations for each function\n", iteration); Cal_BddSetGCMode(bddManager, 0); #ifdef QUANTIFY quantify_start_recording_data(); #endif #ifdef PURECOV purecov_clear_data(); #endif if (relprodPerformanceFlag){ CalPerformanceTestRelProd(bddManager, outputBddArray, numFunctions, 1, 1, 1, 1); CalUtilSRandom((long)seed); } if (sanityCheckFlag == 1){ CalQuantifySanityCheck(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } if (quantifyPerformanceFlag){ CalPerformanceTestQuantifyAllTogether(bddManager, outputBddArray, numFunctions, 1, 1, 1); CalUtilSRandom((long)seed); /* CalPerformanceTestNonSuperscalarQuant(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); */ } if (multiwayPerformanceFlag){ CalPerformanceTestMultiway(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } if (onewayPerformanceFlag){ CalPerformanceTestOneway(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } if (andPerformanceFlag){ CalPerformanceTestAnd(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } if (composePerformanceFlag){ CalPerformanceTestCompose(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } if (swapPerformanceFlag){ CalPerformanceTestSwapVars(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } if (substitutePerformanceFlag){ CalPerformanceTestSubstitute(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } #ifdef COMPUTE_MEMORY_OVERHEAD if (computeMemoryOverheadFlag){ CalPerformaceMemoryOverhead(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } #endif if (superscalarFlag){ CalPerformaceTestSuperscalar(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); CalPerformanceTestNonSuperscalar(bddManager, outputBddArray, numFunctions); CalUtilSRandom((long)seed); } #ifdef QUANTIFY quantify_stop_recording_data(); #endif #ifdef PURECOV purecov_save_data(); purecov_disable_save(); #endif fprintf(stdout,"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); Cal_BddSetGCMode(bddManager, 1); return 0; } /*---------------------------------------------------------------------------*/ /* Definition of internal functions */ /*---------------------------------------------------------------------------*/ /**Function******************************************************************** Synopsis [required] Description [optional] SideEffects [required] SeeAlso [optional] ******************************************************************************/ int CalIncreasingOrderCompare(const void *a, const void *b) { return (*(int *)b-*(int *)a); } /**Function******************************************************************** Synopsis [required] Description [optional] SideEffects [required] SeeAlso [optional] ******************************************************************************/ int CalDecreasingOrderCompare(const void *a, const void *b) { return (*(int *)a-*(int *)b); } /*---------------------------------------------------------------------------*/ /* Definition of static functions */ /*---------------------------------------------------------------------------*/ /**Function******************************************************************** Synopsis [Performance test routine for quantify (all variables at the same time).] Description [optional] SideEffects [required] SeeAlso [optional] ******************************************************************************/ static void CalPerformanceTestAnd(Cal_BddManager bddManager, Cal_Bdd *outputBddArray, int numFunctions) { int i; Cal_Bdd function1, function2; Cal_Bdd result; (void) elapsedTime(); cpuTime(); pageFaults(); for (i=0; i numFunctions) return; varIdArray = Cal_MemAlloc(int, num); bddArray = Cal_MemAlloc(Cal_Bdd, num+1); bddArray[num] = Cal_BddGetNullBdd(bddManager); maxReduceToApplyRatio = 0; maxReduceToUniqueTableRatio = 0; for (i=0; i 100) num = 100; varIdArray = Cal_MemAlloc(int, num); bddArray = Cal_MemAlloc(Cal_Bdd, num+1); bddArray[num] = (Cal_Bdd) 0; (void) elapsedTime(); cpuTime(); pageFaults(); for (i=0; i 100) num = 100; varIdArray = Cal_MemAlloc(int, num); bddArray = Cal_MemAlloc(Cal_Bdd, num+1); bddArray[num] = (Cal_Bdd) 0; resultArray = Cal_MemAlloc(Cal_Bdd, num/2); (void) elapsedTime(); cpuTime(); pageFaults(); for (i=0; i numFunctions) return; varIdArray = Cal_MemAlloc(int, num); bddArray = Cal_MemAlloc(Cal_Bdd, num+1); bddArray[num] = (Cal_Bdd) 0; (void) elapsedTime(); cpuTime(); pageFaults(); for (i=0; i numFunctions) return; varIdArray = Cal_MemAlloc(int, num); (void) elapsedTime(); cpuTime(); pageFaults(); for (i=0; i numFunctions/2) ? numFunctions/2 : numVars/2); int *varIdArray = Cal_MemAlloc(int, numQuantifyVars); Cal_Bdd *assoc = Cal_MemAlloc(Cal_Bdd, 2*numQuantifyVars+1); Cal_Bdd function, result; for (i=0; i <= 2*numQuantifyVars; i++){ assoc[i] = (Cal_Bdd) 0; } (void) elapsedTime(); cpuTime(); pageFaults(); for (i=0; i= count.] SideEffects [required] SeeAlso [optional] ******************************************************************************/ static void GetRandomNumbers(int lowerBound, int upperBound, int count, int *resultVector) { int i,j, tempVector[2048], number; int range = (upperBound - lowerBound + 1); for (i=0; i