You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							344 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							344 lines
						
					
					
						
							14 KiB
						
					
					
				| Release 3.0.0 of Cudd uses autotools for its build.  It can also | |
| produce a shared library.  The shared library contains the core CUDD | |
| functions, and, optionally, the dddmp functions and the C++ wrapper. | |
| It is now safe to use separate CUDD managers in different threads. | |
| 
 | |
| There are changes in the API, discussed later.  The documentation is | |
| now extracted from the code by Doxygen.  About a dozen bugs were fixed | |
| in seldom-used functions. | |
| 
 | |
| The switch to autotools means that one no longer needs to edit the | |
| configuration section of the main Makefile.  It was also instrumental | |
| in providing shared library support (via libtool) on multiple | |
| platforms and a "check" make target worth its name.  Initial support | |
| for cross compilation has been added. | |
| 
 | |
| Build time is significantly longer, especially the first time, and | |
| especially when shared libraries are enabled.  In return one gets | |
| dependency tracking, support for VPATH builds, packaging of | |
| distributions, and so on. | |
| 
 | |
| The CUDD package and its sub-packages now expose significantly fewer | |
| details of their implementations to the applications.  It is now | |
| possible to compile a CUDD-based application while including only the | |
| cudd.h header and linking only libcudd.a (or the equivalent shared | |
| library).  A few const type qualifiers have been added to APIs too. | |
| 
 | |
| Some macros have been turned into functions to improve encapsulation, | |
| namely Cudd_T, Cudd_E, Cudd_V, and Cudd_IsConstant.  Another API | |
| change brought about by this restructuring is that the digits of | |
| arbitrary-precision integers are now always 32-bit wide.  As a | |
| consequence, the function Cudd_ApaIntDivision is now deprecated. | |
| 
 | |
| The malloc/realloc/free wrappers in safe_mem.c have been simplified | |
| and made more consistent with the standard functions.  (The majority | |
| of what the wrappers did was supplying functionality that any modern | |
| compliant implementation of C would supply anyway.)  Some parts of the | |
| util library are no longer distributed with CUDD.  (They were never | |
| used by it.) | |
| 
 | |
| Applications that call functions from the mtr or epd packages now have | |
| to explicitly include their headers _before_ including cudd.h. | |
| Applications that access data structures that are no longer exposed | |
| should declare their close kinship with those data structure by | |
| including the internal headers. | |
| 
 | |
| There is a new function in the API, Cudd_PrintSummary, that is | |
| analogous to Cudd_PrintDebug, but only prints one line using | |
| arbitrary-precision arithmetic to compute the number of minterms.  The | |
| function Cudd_ApaPrintExponential now behaves like printf of glibc with | |
| a "g" conversion specifier.  These changes were motivated by the | |
| discrepancies between printfs on Linux and Windows that affected "make | |
| check." | |
| 
 | |
| CUDD now explicitly calls an implementation of qsort that is included | |
| in the util library.  While this version of qsort has been shipped | |
| with CUDD since Release 1.0.0, it was up to the application to decide | |
| whether to link it or not.  However, dynamic linking on Windows and OS | |
| X makes it difficult to replace the system qsort with a function of | |
| the same name; hence, there is now a util_qsort in the CUDD library. | |
| (The main reasons for not using the system qsort are repeatability and | |
| performance of variable reordering.)  To use the system qsort, | |
| configure CUDD with the --with-system-qsort option.  Keep in mind that | |
| some tests in "make check" may fail in this case by producing variable | |
| orders different from the reference ones. | |
| 
 | |
| The random number generator is now local to a manager.  The interface | |
| has changed accordingly.  The only global variable in the whole | |
| package is the one used to store the out-of-memory handler.  As long | |
| as it is not modified, distinct CUDD managers can be run in different | |
| threads. | |
| 
 | |
| Even with a portable sort routine and random number generator, CUDD | |
| does not guarantee the same output on all platforms.  For instance, | |
| the simulated annealing reordering algorithm uses floating-point | |
| arithmetic, and the results on i686 machines occasionally differ from | |
| those on x86_64 machines. | |
| 
 | |
| In the C++ wrapper, the default error handler now throws an exception | |
| instead of failing.  A new function helps in handling failed memory | |
| allocations: Cudd_InstallOutOfMemoryHandler; it can be used to modify | |
| the default behavior, which is to terminate the program.  There are a | |
| few new functions in the C++ API and a substantial clean-up has taken | |
| place.  Several functions have had some of their parameters given | |
| default values, and in a few cases the order of the parameters has | |
| been changed to improve consistency. | |
| 
 | |
| New functions: | |
| 
 | |
| DD_OOMFP Cudd_InstallOutOfMemoryHandler(DD_OOMFP newHandler); | |
| 
 | |
| DD_OOMFP Cudd_RegisterOutOfMemoryCallback(DdManager *unique, DD_OOMFP callback); | |
| 
 | |
| void Cudd_UnregisterOutOfMemoryCallback(DdManager *unique); | |
| 
 | |
| void Cudd_OutOfMemSilent(size_t size); | |
| 
 | |
| DdNode * Cudd_bddInterpolate(DdManager * dd, DdNode * l, DdNode * u); | |
| 
 | |
| int Cudd_VarsAreSymmetric(DdManager * dd, DdNode * f, int index1, int index2); | |
| 
 | |
| int Cudd_PrintSummary(DdManager * dd, DdNode * f, int n, int mode); | |
| 
 | |
| void Cudd_FreeApaNumber(DdApaNumber number); | |
| 
 | |
| char * Cudd_ApaStringDecimal(int digits, DdConstApaNumber number); | |
| 
 | |
| long double Cudd_LdblCountMinterm(DdManager const *manager, DdNode *node, | |
|     int nvars); | |
| 
 | |
| int Cudd_EpdPrintMinterm(DdManager const * dd, DdNode * node, int nvars); | |
| 
 | |
| st_table * st_init_table_with_params_and_arg(st_compare_arg_t, | |
|     st_hash_arg_t, void const *, int, int, double, int); | |
| 
 | |
| st_table * st_init_table_with_arg(st_compare_arg_t, st_hash_arg_t, | |
|     void const *); | |
| 
 | |
| void ABDD::summary(int nvars, int mode = 0) const; | |
| 
 | |
| DD_OOMFP Cudd::InstallOutOfMemoryHandler(DD_OOMFP newHandler) const; | |
| 
 | |
| DD_OOMFP RegisterOutOfMemoryCallback(DD_OOMFP callback) const; | |
| 
 | |
| void UnregisterOutOfMemoryCallback(void) const; | |
| 
 | |
| BDD computeCube(std::vector<BDD> const & vars) const; | |
| 
 | |
| ADD computeCube(std::vector<ADD> const & vars) const; | |
| 
 | |
| BDD BDD::Interpolate(const BDD& u) const; | |
| 
 | |
| bool BDD::VarAreSymmetric(int index1, int index2) const; | |
| 
 | |
| std::string ApaStringDecimal(int digits, DdApaNumber number) const; | |
| 
 | |
| void Cudd::ApaPrintExponential(int digits, DdApaNumber number, | |
|                                int precision = 6, FILE * fp = stdout) const; | |
| 
 | |
| void ApaPrintMintermExp(int nvars, int precision = 6, FILE * fp = stdout) const; | |
| 
 | |
| long double LdblCountMinterm(int nvars) const; | |
| 
 | |
| ADD Cudd::Harwell(FILE * fp, std::vector<ADD>& x, std::vector<ADD>& y, | |
|                   std::vector<ADD>& xn, std::vector<ADD>& yn_, | |
|                   int * m, int * n, int bx = 0, int sx = 2, int by = 1, | |
|                   int sy = 2, int pr = 0) const; | |
| 
 | |
| ADD Cudd::Read(FILE * fp, std::vector<ADD>& x, std::vector<ADD>& y, | |
|                std::vector<ADD>& xn, std::vector<ADD>& yn_, int * m, int * n, | |
|                int bx = 0, int sx = 2, int by = 1, int sy = 2) const; | |
| BDD Cudd::Read(FILE * fp, std::vector<BDD>& x, std::vector<BDD>& y, | |
|                int * m, int * n, int bx = 0, int sx = 2, int by = 1, | |
|                int sy = 2) const; | |
| 
 | |
| std::string Cudd::OrderString(void) const; | |
| 
 | |
| Special thanks go to Hubert Garavel for the many discussions that have | |
| greatly contributed to shaping this new CUDD release. | |
| 
 | |
| ---------------------------------------------------------------------- | |
| 
 | |
| Release 2.6.0 of Cudd is the first release to compile out of the box | |
| with MinGW-w64.  This is achieved primarily by using types and macros | |
| defined in inttypes.h.  The only visible changes in the API are some | |
| parameter types that are now "size_t" instead of "unsinged long." | |
| 
 | |
| Support for multi-threaded applications has been slightly enhanced. | |
| The Makefile has been slightly enhanced and finally supports creation | |
| of top-level tag files for both emacs and vi. | |
| 
 | |
| The code has been cleaned up a bit so that all warnings that would be | |
| produced by gcc with "-Wextra" have been removed.  The tests run by | |
| nanotrav/tst.sh and obj/testobj cover a bit more of the package's | |
| functionality. | |
| 
 | |
| ---------------------------------------------------------------------- | |
| 
 | |
| Release 2.5.1 of Cudd improves support for multi-threaded applications. | |
| Specifically, an application may now register a callback function that | |
| is called from time to time to check whether computation should be | |
| terminated because another thread has found the result. | |
| 
 | |
| The C++ interface allows the application to register variable names with | |
| the manager and implements operator<< for BDDs.  The interfaces of | |
| SolveEqn and VerifySol now take std::vectors instead of plain arrays. | |
| 
 | |
| Fixed a few bugs in CUDD and a bug in the mtr package. | |
| 
 | |
| Added const qualifiers to dumping function interfaces | |
| (Cudd_DumpDot,...). | |
| 
 | |
| The Makefile now supports gmake's -j option.  Change "@+" back to "@" if | |
| this causes problems with your make program. | |
| 
 | |
| Buggy documentation that was shipped with 2.5.0 has been fixed. | |
| 
 | |
| New functions: | |
| 
 | |
| int Cudd_bddIsVar(DdManager * dd, DdNode * f); | |
| 
 | |
| void Cudd_RegisterTerminationCallback(DdManager *unique, | |
| 
 | |
| void Cudd_UnregisterTerminationCallback(DdManager *unique); | |
| 
 | |
| void Cudd_SetApplicationHook(DdManager *dd, void * value); | |
| 
 | |
| void * Cudd_ReadApplicationHook(DdManager *dd); | |
| 
 | |
| char * Cudd_FactoredFormString(DdManager *dd, DdNode *f, | |
|     char const * const * inames); | |
| 
 | |
| ---------------------------------------------------------------------- | |
| 
 | |
| Releas 2.5.0 of Cudd introduces the ability to set timeouts.  The | |
| function that is interrupted returns NULL (which the application must | |
| be prepared to handle,) but the BDDs are uncorrupted and the invoking | |
| program can continue to use the manager. | |
| 
 | |
| In addition, reordering is now aware of timeouts, so that it gives up | |
| when a timeout is approaching to give the invoking program a chance to | |
| obtain some results. | |
| 
 | |
| The response time to the timeout is not immediate, though most of the time | |
| it is well below one second.  Checking for timeouts has a small overhead. | |
| In experiments, less than 1% has been observed on average. | |
| 
 | |
| Creation of BDD managers with many variables (e.g., tens or hundreds | |
| of thousands) is now much more efficient.  Computing small supports of | |
| BDDs when there are many variables is also much more efficient, but | |
| this has been at the cost of separating the function for BDDs and ADDs | |
| (Cudd_Support) from that for ZDDs (Cudd_zddSupport). | |
| 
 | |
| The C++ interface has undergone a major upgrade. | |
| 
 | |
| The handling of variable gruops in reordering has been much improved. | |
| (Thanks to Arie Gurfinkel for a very detailed bug report!)  A handful | |
| of other bugs have been fixed as well. | |
| 
 | |
| 
 | |
| New Functions: | |
| 
 | |
| unsigned long Cudd_ReadStartTime(DdManager *unique); | |
| 
 | |
| unsigned long Cudd_ReadElapsedTime(DdManager *unique); | |
| 
 | |
| void Cudd_SetStartTime(DdManager *unique, unsigned long st); | |
| 
 | |
| void Cudd_ResetStartTime(DdManager *unique); | |
| 
 | |
| unsigned long Cudd_ReadTimeLimit(DdManager *unique); | |
| 
 | |
| void Cudd_SetTimeLimit(DdManager *unique, unsigned long tl); | |
| 
 | |
| void Cudd_UpdateTimeLimit(DdManager * unique); | |
| 
 | |
| void Cudd_IncreaseTimeLimit(DdManager * unique, unsigned long increase); | |
| 
 | |
| void Cudd_UnsetTimeLimit(DdManager *unique); | |
| 
 | |
| int Cudd_TimeLimited(DdManager *unique); | |
| 
 | |
| unsigned int Cudd_ReadMaxReorderings (DdManager *dd); | |
| 
 | |
| void Cudd_SetMaxReorderings (DdManager *dd, unsigned int mr); | |
| 
 | |
| unsigned int Cudd_ReadOrderRandomization(DdManager * dd); | |
| 
 | |
| void Cudd_SetOrderRandomization(DdManager * dd, unsigned int factor); | |
| 
 | |
| int Cudd_PrintGroupedOrder(DdManager * dd, const char *str, void *data); | |
| 
 | |
| int Cudd_EnableOrderingMonitoring(DdManager *dd); | |
| 
 | |
| int Cudd_DisableOrderingMonitoring(DdManager *dd); | |
| 
 | |
| int Cudd_OrderingMonitoring(DdManager *dd); | |
| 
 | |
| DdNode * Cudd_bddExistAbstractLimit(DdManager * manager, DdNode * f, DdNode * cube, unsigned int limit); | |
| 
 | |
| DdNode * Cudd_bddIteLimit (DdManager *dd, DdNode *f, DdNode *g, DdNode *h, unsigned int limit); | |
| 
 | |
| DdNode * Cudd_bddOrLimit (DdManager *dd, DdNode *f, DdNode *g, unsigned int limit); | |
| 
 | |
| DdNode * Cudd_bddXnorLimit (DdManager *dd, DdNode *f, DdNode *g, unsigned int limit); | |
| 
 | |
| int Cudd_CheckCube (DdManager *dd, DdNode *g); | |
| 
 | |
| DdNode * Cudd_bddMaximallyExpand(DdManager *dd, DdNode *lb, DdNode *ub, DdNode *f); | |
| 
 | |
| DdNode * Cudd_bddLargestPrimeUnate(DdManager *dd , DdNode *f, DdNode *phaseBdd); | |
| 
 | |
| int Cudd_Reserve(DdManager *manager, int amount); | |
| 
 | |
| int Cudd_SupportIndices(DdManager * dd, DdNode * f, int **indices); | |
| 
 | |
| int Cudd_VectorSupportIndices(DdManager * dd, DdNode ** F, int n, int **indices); | |
| 
 | |
| DdNode * Cudd_zddSupport(DdManager * dd, DdNode * f); | |
| 
 | |
| 
 | |
| Changed prototypes: | |
| 
 | |
| unsigned int Cudd_ReadReorderings (DdManager *dd); | |
| 
 | |
| ---------------------------------------------------------------------- | |
| 
 | |
| Release 2.4.2 of Cudd features several bug fixes.  The most important | |
| are those that prevented Cudd from making full use of up to 4 GB of | |
| memory when using 32-bit pointers.  A handful of bugs were discovered by | |
| Coverity.  (Thanks to Christian Stangier!) | |
| 
 | |
| This release can be compiled with either 64-bit pointers or 32-bit | |
| pointers on x86_64 platforms if sizeof(long) = sizeof(void *) = 8 and | |
| sizeof(int) = 4.  This is known as the LP64 model.  For 32-bit pointers, | |
| one usually needs supplementary libraries.  On Ubuntu and Debian Linux, | |
| one needs g++-multilib, which can be installed with | |
| "apt-get install g++-multilib." | |
| 
 | |
| Added functions  | |
| 
 | |
| DdNode *Cudd_Inequality (DdManager * dd, int  N, int c, DdNode ** x, | |
| DdNode ** y); | |
| 
 | |
| DdNode * Cudd_Disequality (DdManager * dd, int  N, int c, DdNode ** x, | |
| DdNode ** y); | |
| 
 | |
| DdNode * Cudd_bddInterval (DdManager * dd, int  N, DdNode ** x, | |
| unsigned int lowerB, unsigned int upperB); | |
| 
 | |
| Changed prototypes: | |
| 
 | |
| int Cudd_DumpBlif (DdManager *dd, int n, DdNode **f, char | |
| **inames, char **onames, char *mname, FILE *fp, int mv); | |
| 
 | |
| int Cudd_DumpBlifBody (DdManager *dd, int n, DdNode **f, char | |
| **inames, char **onames, FILE *fp, int mv); | |
| 
 | |
| The additional parameter allows the caller to choose between plain blif | |
| and blif-MV. | |
| 
 | |
| ---------------------------------------------------------------------- | |
| 
 | |
| Release 2.4.1 of Cudd features one major change with respect to previous | |
| releases.  The licensing terms are now explicitly stated.
 |