#include "calInt.h"
Go to the source code of this file.
Defines | |
#define | CalBddReorderBddIsForwarded(bdd) (CAL_BDD_POINTER(CalBddGetElseBddNode(bdd)) == FORWARD_FLAG) |
#define | CalBddReorderBddNodeIsForwarded(bddNode) (CAL_BDD_POINTER(CalBddNodeGetElseBddNode(bddNode)) == FORWARD_FLAG) |
#define | CalBddReorderForward(bdd) |
Functions | |
static double | cpuTime () |
static long | elapsedTime () |
int | main (int argc, char **argv) |
Variables | |
static CalAddress_t | asDoubleSpace [2] |
#define CalBddReorderBddIsForwarded | ( | bdd | ) | (CAL_BDD_POINTER(CalBddGetElseBddNode(bdd)) == FORWARD_FLAG) |
Definition at line 65 of file calBddReorderTest.c.
#define CalBddReorderBddNodeIsForwarded | ( | bddNode | ) | (CAL_BDD_POINTER(CalBddNodeGetElseBddNode(bddNode)) == FORWARD_FLAG) |
Definition at line 68 of file calBddReorderTest.c.
#define CalBddReorderForward | ( | bdd | ) |
{ \ CalBddNode_t *_bddNode, *_bddNodeTagged; \ _bddNodeTagged = CalBddGetBddNode(bdd); \ _bddNode = CAL_BDD_POINTER(_bddNodeTagged); \ (bdd).bddId = _bddNode->thenBddId; \ (bdd).bddNode = (CalBddNode_t*) \ (((CalAddress_t)(_bddNode->thenBddNode) & ~0xe) \ ^(CAL_TAG0(_bddNodeTagged))); \ }
Definition at line 71 of file calBddReorderTest.c.
static double cpuTime | ( | void | ) | [static] |
AutomaticStart
Function********************************************************************
Synopsis [required]
Description [optional]
SideEffects [required]
SeeAlso [optional]
Definition at line 204 of file calBddReorderTest.c.
00205 { 00206 static double timeNew, timeOld; 00207 struct rusage rusage; 00208 static flag = 0; 00209 00210 getrusage(RUSAGE_SELF, &rusage); 00211 if (flag == 0){ 00212 timeOld = timeNew = rusage.ru_utime.tv_sec+ 00213 ((double)rusage.ru_utime.tv_usec)/1000000; 00214 flag = 1; 00215 } 00216 else { 00217 timeOld = timeNew; 00218 timeNew = rusage.ru_utime.tv_sec+ 00219 ((float)rusage.ru_utime.tv_usec)/1000000; 00220 } 00221 return timeNew - timeOld; 00222 }
static long elapsedTime | ( | void | ) | [static] |
Function********************************************************************
Synopsis [Computes the time.]
Description [optional]
SideEffects [required]
SeeAlso [optional]
Definition at line 236 of file calBddReorderTest.c.
00237 { 00238 static long time_new, time_old; 00239 struct timeval t; 00240 struct timezone tz; 00241 static flag = 0; 00242 00243 gettimeofday(&t, &tz); 00244 if (flag == 0){ 00245 time_old = time_new = t.tv_sec; 00246 flag = 1; 00247 } 00248 else { 00249 time_old = time_new; 00250 time_new = t.tv_sec; 00251 } 00252 return time_new-time_old; 00253 }
EXTERN int main | ( | int | argc, | |
char ** | argv | |||
) |
AutomaticEnd Function********************************************************************
Synopsis [required]
Description [optional]
SideEffects [required]
SeeAlso [optional]
Definition at line 114 of file calBddReorderTest.c.
00115 { 00116 Cal_Bdd expected; 00117 Cal_Bdd a[100]; 00118 Cal_Bdd temp1; 00119 Cal_Bdd temp2; 00120 Cal_Bdd b, c, d, e, f, g, result; 00121 Cal_BddManager_t *bddManager; 00122 CalBddNode_t *bddNode; 00123 int i; 00124 int numVars; 00125 int siftFlag = 0; 00126 00127 if (argc == 1) { 00128 numVars = 5; 00129 } else if (argc >= 2) { 00130 numVars = atoi(argv[1]); 00131 } 00132 if (argc == 3) { 00133 siftFlag = 1; 00134 } 00135 00136 bddManager = Cal_BddManagerInit(); 00137 00138 for (i = 0; i < 2 * numVars; i++) { 00139 a[i] = Cal_BddManagerCreateNewVarLast(bddManager); 00140 } 00141 00142 result = Cal_BddZero(bddManager); 00143 for (i = 0; i < numVars; i++) { 00144 temp1 = Cal_BddAnd(bddManager, a[i], a[numVars + i]); 00145 temp2 = Cal_BddOr(bddManager, result, temp1); 00146 Cal_BddFree(bddManager, temp1); 00147 Cal_BddFree(bddManager, result); 00148 result = temp2; 00149 } 00150 Cal_BddManagerGC(bddManager); 00151 Cal_BddStats(bddManager, stdout); 00152 cpuTime(); 00153 elapsedTime(); 00154 printf("%%%%%%%%%%%% Reordering %%%%%%%%%%%%%%%%%%%\n"); 00155 if (siftFlag){ 00156 printf("Using Sift Technique\n"); 00157 Cal_BddDynamicReordering(bddManager, CAL_REORDER_SIFT); 00158 } 00159 else{ 00160 printf("Using Window Technique\n"); 00161 Cal_BddDynamicReordering(bddManager, CAL_REORDER_WINDOW); 00162 } 00163 Cal_BddReorder(bddManager); 00164 printf("CPU time: %-8.2f\t Elapsed Time = %-10ld\n", cpuTime(), elapsedTime()); 00165 printf("%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%\n"); 00166 Cal_BddManagerGC(bddManager); 00167 Cal_BddStats(bddManager, stdout); 00168 /*Cal_BddFunctionPrint(bddManager, result, "Result");*/ 00169 temp1 = Cal_BddZero(bddManager); 00170 for (i = 0; i < numVars; i++) { 00171 temp2 = Cal_BddAnd(bddManager, a[i], a[numVars + i]); 00172 expected = Cal_BddOr(bddManager, temp1, temp2); 00173 Cal_BddFree(bddManager, temp1); 00174 Cal_BddFree(bddManager, temp2); 00175 temp1 = expected; 00176 } 00177 00178 if (!Cal_BddIsEqual(bddManager, result, expected)) { 00179 printf("ERROR: BDDs are not equal\n"); 00180 Cal_BddFunctionPrint(bddManager, result, "Result"); 00181 Cal_BddFunctionPrint(bddManager, expected, "Expected"); 00182 } 00183 printf("\n%%%%%%BDDs are equal\n"); 00184 Cal_BddFree(bddManager, result); 00185 Cal_BddFree(bddManager, expected); 00186 Cal_BddManagerGC(bddManager); 00187 Cal_BddStats(bddManager, stdout); 00188 Cal_BddManagerQuit(bddManager); 00189 }
CalAddress_t asDoubleSpace[2] [static] |
CFile***********************************************************************
FileName [calBddReorderTest.c]
PackageName [cal]
Synopsis [A test routine for checking the functionality of dynamic reordering.]
Description []
SeeAlso [optional]
Author [Wilsin Gosti (wilsin@eecs.berkeley.edu) Rajeev 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 [
]
Definition at line 59 of file calBddReorderTest.c.