Releases: dds-bridge/dds
v.2.9.0: Moving out of beta
v2.9.0-beta: Please provide feedback
Under the hood there are large changes vs. v2.8.4:
- The multi-threading support has been generalized and rewritten. It is now possible for a single DLL or library to contain many multi-threading implementations which can be selected dynamically via a new interface function. The user can compile with the desired options by configuring the Makefile. Currently supported options include Windows API, OpenMP, GDC, Boost, STL (both managed by DDS and managed by the host system), TBB, and PPL (managed by the host system).
- The Makefiles have become fewer as a result. The source and include files are now centralized in text files in the Makefiles directory that are loaded by each Makefile.
- The DLL or library now supports both the "large" and the "small" transition-table (TT) options dynamically. The threads with "small" TTs will run in a lot less memory, but a bit less slowly than the "large" ones. DDS will choose the best combination for you depending on the available memory, including mixtures.
If you use this beta version successfully, please let us know. We plan to turn it into a real release once we get enough feedback.
Binaries are only on Bo's website for now, http://privat.bahnhof.se/wb758135/.
Maintenance release
Added a lower-memory DLL version with a compile flag (SMALL_MEMORY_OPTION). This is about 11-14% slower, but uses a lot less memory. For example, for a single thread on one PC, the memory usage was 24 MB rather than 110 MB. For 12 threads, the numbers were 89 MB rather than 1.1 GB. You have to link against the right DLL for you -- you cannot make a given DLL behave in both ways. Get binaries from the DDS website, http://privat.bahnhof.se/wb758135/.
Added TDC 32-bit and 64-bit Makefiles contributed by Sergio Polini.
Made the SolveAllChunks functions aliases to SolveAllBoards.
v2.8.3: Maintenance update
Fixed bug in Scheduler that could cause a crash in case more than 128 very similar hands were solved in one invocation. If you didn't experience crashes, you don't have to upgrade for this bug fix.
Generalized the AnalysePlay functions. Previously they required a complete 13-trick hand with no cards played in a partial trick. Now they work for any number of remaining tricks and for partial tricks as well.
Included Pierre Cossard's code for using GDC multi-threading with Apple's LLVM compiler on the Mac.
Added a Makefile for compiling a shared library on the Mac.
Added a GetDDSInfo interface function that can be used to ask the DLL how it was compiled and how many threads it is using.
Modified the documentation names not to include the version number in the file names (easier to maintain).
Updated the documentation to fix an error (the playTracePBN structure uses an array of chars, not an array of ints; this was correct in dll.h). Also described pass as a valid par score.
v2.8.2
This is mainly a bug fix of the par contract calculation in v2.8.1 in certain rare cases. The par score calculation appears to have been correct. (The same fix was applied retroactively to v2.5.2 to create v2.5.3.)
In addition, a typo in one of the examples was fixed (CalcAllTablesPBN.cpp). And a comment was added to dll.h to explain parResultsDealer better.
Retroactive fix of par contract calculation
Around v2.8.1. it was discovered that the par contract calculation in some earlier releases was not always correct or complete. This affected about 0.4% of the cases. The par value calculation seems correct.
Since v2.5.2 was an important release and some users rely on it, we decide to publish a retroactive fix. This is a "dead end" for the code development, though, so please consider moving to later versions if you can. As of this writing, the most recent version is v2.8.1.
Formal release of v2.8.1
Fixed bug in initialization that affected some cases when initial moves were given.
Fixed bug that affected solutions of hands where only one trick was remaining at the time of the call.
Fixed bug in scheduler that caused some hands to be considered identical that weren't.
Added Makefiles kindly contributed by users for Linux shared libraries (as opposed to static libraries) and for Microsoft's make version.
Added Foppe Hemminga's DLL documentation written entirely in markup (.md) language.
v2.8.0
Introduction
v2.8.0 is the first DDS release that was developed on git and was not retro-fitted into git. Thanks to Brian Dickens (@hostilefork) for his tireless help!
Soren Hein officially became a co-author as of this release and is the person responsible day-to-day at the moment.
Contributions are welcome. Please follow this branching model. In particular, use branches for units of change (new features etc); don't merge them into your own develop branch but submit them; and then sync your develop to the DDS develop when it advances.
Speed
DDS v2.8.0 is about 15% faster than DDS v2.7.0 on one benchmark. Because of new functions and because of a dependence on input data, it is becoming increasingly difficult to quantify the speed with a single number.
Interface
- No changes to any of the bridge functions.
- SetMaxThreads() does not have to be called on Windows. On some Linux systems it is not necessary, but we recommend that you call it explicitly on all non-Windows systems to be on the safe side. You can use an argument of 0 for auto-configuration.
- ErrorMessage() was added for convenience. If you get a numerical error message from DDS, you can call this function to get a text message.
Functions and modes
- We now recommend that you use SolveAllBoards() and not SolveAllChunksBin(), SolveAllChunks() or SolveAllChunksBin(). See below for an explanation.
- The mode parameter in SolveBoard(), SolveBoardPBN() and in the boards and boardsPBN structs remains available, and DDS does broadly do what it used to do with this parameter. However, the transposition tables are now deemed an internal implementation issue that the user should not have to worry about. The mode parameter may stop working or may do something different in the future. It is recommended always to set it to 0. If you think you need it, please let us know why.
- CalcAllTables() now can be called with up to 32 DD tables in one batch, rather than 10. Please always use the largest batch size that you have available, for this and other functions.
Platforms
DDS now comes with Makefiles for six systems:
- The Microsoft Visual C++ compiler (we believe the 2010 and 2013 versions).
- The mingw compiler (on Windows).
- The cygwin g++ compiler (on Windows).
- The g++ compiler on Linux.
- The clang compiler on the Mac.
- The g++ compiler on the Mac.
The code has provisions for multi-threading using:
- The Windows API.
- OpenMP.
It can also be compiled single-threaded.
The Makefiles are set to have a very high level of warnings and to fail on warnings and not just on errors. This is easy enough to switch off, but we'd prefer if you let us know what needs to be fixed in the code to pass your system.
Binaries
An unofficial DLL for Windows is attached, compiled with the Microsoft Visual C++ compiler version 18.00.21005.1. The official and probably absolute fastest DLL is distributed on Bo Haglund's website.
Distribution structure
Please see the README.md file in the top directory. DDS is now distributed with a test program (including input files and expected results), a set of simple example programs for all major interface functions, and a documentation directory.
DDD is not a direct part of the distribution. DDD has not been updated for many years, but as part of this version, DDD was updated minimally in order to compile on the same six platforms as above (Makefiles supplied).
Internals
The move generation code has been re-implemented (as an object) and is much faster.
A scheduler object has been added which attempts to run the hands in a batch in an order that minimizes execution time. This requires predicting which hands are going to be hard, which turns out to be a difficult problem. We've made a start, and ideas are welcome.
The scheduler detects duplicate hands anywhere within a batch, and not just if they are perfectly aligned in groups as required by the chunk functions. Therefore there is little reason to use the chunk functions anymore.
The code for initialization and the SolveBoard() interface functions have been restructured. This led to a particular speed-up for the AnalysePlay function family which is now very fast indeed.
Bugs were fixed.
v2.7.0
(Note: This is a GitHub "releases" entry for Bo Haglund's 15-Oct-2014 distribution.)
- The transposition table solution has been replaced by one that is 8-15% faster. Many thanks to Soren Hein for writing this part of the code. (Soren has also improved the code at numerous places.)
- Additional Par functions have been added to ease the use of a DDS user specific format.
v2.6.0
- 2.6.0 is 2% faster than 2.5.2.
- The Par function has been corrected.
- The
DealerPar
and thePlayAnalyser
functions have been added (written by Soren Hein) who has contributed on numerous improvements.