123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- 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.
|