src/calBdd/calBddReorderTest.c File Reference

#include "calInt.h"
Include dependency graph for calBddReorderTest.c:

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 Documentation

#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   ) 
Value:
{ \
  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.


Function Documentation

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 }


Variable Documentation

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 [

Id
calBddReorderTest.c,v 1.1.1.4 1998/05/04 00:58:52 hsv Exp

]

Definition at line 59 of file calBddReorderTest.c.


Generated on Tue Jan 12 13:57:10 2010 for glu-2.2 by  doxygen 1.6.1