Implemented new distributed matrix multiplication algorithm for calculating Q matrix. It employs MPI shared windows, Chinese Remainder Theorem, FLINT and BLAS libraries.
Our benchmarks for large SDPB problems demonstrated more than ~2.5x overall program speedup and much better performance scaling with increasing number of CPUs and nodes, as compared to the 2.7.0 release. In addition, improved RAM usage in the new algorithm now allows to solve even larger problems where Q matrix does not fit into single node memory.
- New option
--maxSharedMemory
allowing to reduce memory usage in the new matrix multiplication algorithm. If the limit is not set, it is calculated automatically. See #209, #229. - Added new
--verbosity trace
level. See #230.
- Print iterations data and condition numbers to
iterations.json
in the output folder. See #228, #231, #232. - In debug mode, write profiling data for both timing run and actual run, see #215.
- In debug mode, print maximal memory usage #231.
- Graceful exit on SIGTERM, see #208.
- Build multiplatform Docker image (AMD64+ARM64) on CircleCI, see #225.
See https://github.com/davidsd/sdpb/releases/tag/3.0.0 for the full changelog.
- New executable
pmp2sdp
instead of separatesdp2input
andpvm2sdp
. Reads Polynomial Matrix Programs in JSON, Mathematica, or XML formats. We recommend using JSON since it is more compact, efficient and universal than Mathematica or XML. See #181, #184. Example:
pmp2sdp --precision 768 --input in/pmp.json --output out/sdp --verbosity regular
By default, pmp2sdp
writes sdp to plain directory (as in 2.4.0 and earlier). Run it with --zip
flag to write to zip archive instead (as in 2.5.0 - 2.6.1).
Note that writing to zip can be slow for large problems, see plots in #176.
sdp2input
and pvm2sdp
are deprecated and will be removed in future versions.
sdpb
option--procsPerNode
is deprecated and will be removed in future versions. Now MPI configuration is determined automatically. See #169.- Mathematica script SDPB.m now writes PMP in JSON format instead of XML. Use
WritePmpJson
(or its aliasWriteBootstrapSDP
) function.WritePmpXml
is left for backward compatibility. NB: you should also change PMP file extension from.xml
to.json
in your Mathematica scripts. Using JSON instead of XML results in ~x2 speedup when running Bootstrap2dExample.m script. See #199.
- Added
sdpb
option--writeSolution=z
. Restores the vectorz
(see SDPB Manual, eq. 3.1) from the vectory
(eq. 2.2) andsdp/normalization.json
, and writes it toout/z.txt
. See #191. - Added new field
"block_path"
tospectrum
JSON output. For each block,"block_path"
contains its path from the PMP input. See #190. - Added optional fields to
pmp.json
format:"samplePoints"
,"sampleScalings"
and"bilinearBasis"
, same as in the old XML format. See #199.
- Optimized IO and RAM usage when reading big SDP blocks, see #167.
- Optimized reading and writing for
pmp2sdp
, got order-of-magnitude speedup. See #176 and #181. - Fix undefined behaviour (sometimes leading to SEGFAULT) when reading PMP with a prefactor containing duplicate poles. See #195.
- Fix incorrect block mapping for cyclic MPI job distribution across nodes, see #170.
- Print number of MPI processes and nodes, print SDP dimensions and number of blocks. See #169.
- Print source code location and stacktrace for exceptions, see #180 and #198.
- Rewrote Section 3 of SDPB Manual, see #199.
- Internal improvements: new macros
RUNTIME_ERROR
,ASSERT
,ASSERT_EQUAL
andDEBUG_STRING
, new JSON parser, better GMP<->MPFR conversion, fix compiler warnings, refactor integration tests. See #180, #189, #196, #197.
See https://github.com/davidsd/sdpb/releases/tag/2.7.0 for the full changelog.
- Fixed major memory leak in binary SDP deserialization. See #160.
- Improve debug mode output: print
MemUsed
andMemTotal
for each node, printmax MemUsed
at the end, disableproc/self/statm
. See #161. - Refactoring: moved common headers to
sdpb_util
, simplified include paths. See #157. - Updated installations for BU, Caltech, Expanse, Harvard, and Imperial College clusters, with example scripts.
See https://github.com/davidsd/sdpb/releases/tag/2.6.1 for the full changelog.
-
New INCOMPATIBLE format for sdp.zip. Instead of a single
block_XXX.json
file now we useblock_info_XXX.json
andblock_data_XXX.json
( orblock_data_XXX.bin
), see SDPB_input_format.md. See #114. -
Compact binary format instead of JSON for
block_data_XXX
in sdp.zip. When generating sdp.zip bysdp2input
orpvm2sdp
, you can use optional command-line argument to choose between binary and JSON formats:
sdp2input --outputFormat FORMAT
pvm2sdp FORMAT PRECISION INPUT... OUTPUT
where FORMAT
is either bin
(used by default) or json
.
We recommend using the new binary format since it is more compact and efficient.
See #114, #128, #119, #149.
-
New lightweight Docker image does not contain
scalar_blocks
andblocks_3d
anymore. Separate images for sdpb, scalar_blocks and blocks_3d are now uploaded to https://hub.docker.com/u/bootstrapcollaboration. See #130. -
CI/CD pipelines on CircleCI. Tests are run for each
git push
to the repo and for each pull request. Docker images for themaster
branch and for each release starting from 2.6.0 are uploaded to Docker Hub automatically. See #133, #136. -
Tests are reorganized and rewritten from shell scripts to C++ Catch2 framework. Added unit tests and realistic end-to-end tests. See #91, #102, #109, #119.
-
Updated installations for BU, Caltech, Expanse, Harvard, and Imperial College clusters, with example scripts.
-
Added Apple MacBook installation instructions.
See https://github.com/davidsd/sdpb/releases/tag/2.6.0 for the full changelog.
-
Treat the behavior near zero with special care. This means that input files now need to specify
epsilon_value
in addition toinfinity_value
. -
Added the
--meshThreshold
option to customize how finely the mesh is divided when searching for negative regions. -
Added the
--useSVD
option to control whether to regularize the problem with an SVD. -
Added the
sdp2functions
andpvm2functions
programs to convert JSON and XML input files to the format thatouter_limits
expects. -
Fix an uninitialized matrix bug.
-
Increase the maximum number of allowed SVD iterations because we are working at high precision.
- Initial release.
-
Uses a new, INCOMPATIBLE JSON-based format for writing output. The output is written as a single zip file, with entries that are each zip files. This reduces problems with running out of inodes on some filesystems. The zip format also transparently catches file corruption. The format is documented in SDPB_input_format.md.
-
Mathematica polynomial input can now handle a plain 'x' as a polynomial term, rather than requiring '1.0*x'.
-
Fixed a bug causing incorrect results when poles are closer together than 1e-2.
-
Significantly reduced memory use when using multiple cores
-
Uses the new incompatible json-based format from pvm2sdp and sdp2input.
-
Can read input as a directory or a wide variety of archive formats (e.g. zip, tar, 7z). This requires a new dependency on the libarchive library.
-
Added the options --minPrimalStep and --minDualStep as stopping conditions.
-
Clean up output by only printing the Block Grid Mapping when verbosity=2.
- Initial release.
- Initial release.
-
Made checkpointing more robust. This required a modification to the checkpoint format. Old checkpoints can still be read in, but new checkpoints will be written out in the new format. Old checkpoints will not be automatically deleted.
-
Better handle errors when reading blocks. SDPB now gives informative error messages instead of inscrutable MPI crash reports.
- Added support for JSON input and removed support for XML input. Mathematica input is still supported. As a result, RapidJSON is now a build requirement.
-
Fixed a race condition when performing a timing run that caused incorrect answers.
-
Fixed leaks of MPI communicators SDPB and Elemental that caused crashes when running long jobs with Intel's MPI.
- Fixed a corner case when reading Mathematica files that do not have precision markers.
-
Replaced the option --writeMatrices with a more general option --writeSolution. This enables fine grained control over which output files to write.
-
Changed the default for --maxRuntime to effectively infinite (2^63 seconds)
-
Use matrix size as a heuristic when allocating cores for a timing run. This significantly decreases memory used during the timing run, making it more comparable to the regular solver run.
-
Write fewer files when there are constant constraints.
-
Fix a corner case when running a small problem on many cores
-
Implemented a better check for bad elements when reading in data. This also happened to speed it up by about 15%.
-
No longer needlessly promote constant constraints to linear constraints.
-
Fixed some race conditions when writing files and running on large numbers of cores.
-
Added a number of checks for errors when reading and writing files. This required modifying the text checkpoints format to include a newline at the end, so text checkpoint written with older versions of SDPB will not load with this new version. Binary checkpoints are unaffected and will continue to work.
-
Require a valid checkpoint if the initialCheckpointDir option is set.
-
Fixed a bug in load balancing that caused jobs to crash on some machines.
-
Made some very, very small problems run faster.
- Added the ability to read lists of input files from a file.
-
Added the ability to read lists of input files from a file.
-
Significantly reduced memory use for runs with many cores.
- Significantly reduced memory use for large runs with many cores.
- Fixed a bug that was erroneously rejecting options in parameter files.
-
Fixed the final solution output of the
x
vector, and enabled plain text output of theX
andY
diagonal block matrices with the new--writeMatrices
option. This required splitting up these vectors and matrices into separate files. So the optionoutFile
has been changed tooutDir
, and all of the plain text solution files go intooutDir
. -
Added the ability to restart from plain text output generated with
--writeMatrices
. This is useful if restarting using different precision or a different number of cores. Due to limitations in GMP, a few bits of precision are lost during the translation to and from plain text. So a run restarted from plain text will not be bitwise identical. -
Reorganized the options.
-
Significantly reduced memory usage for large parallel jobs. In addition to ordinary improvements in memory use, there is a new option: procGranularity. This option can further reduce memory use at the cost of slower performance.
-
Reordered how stopping conditions are checked. The most visible change is that SDPB now checks for primal solutions before primal jumps. This also fixes a bug where SDPB would hang with the option --findPrimalFeasible.
-
Changed the logic for how output and checkpoint directory names are generated. Instead of replacing any extension on sdpDir, sdpb now unconditionally adds ".out" or ".ck". This prevents problems when, for example, there is a decimal number in sdpDir.
-
Added a --version option.
- Significantly reduced memory usage.
- Fixed a corner case that was rejecting valid polynomials.
- Fix computation of the primal error
- Fix a bug that was erroneously writing checkpoints during timing runs
- Fix a bug when computing normalization
- Handle parsing of constant polynomials in Mathematica input
- Handle DampedRational's that are just a constant
- Include training time in maxRunttime
- Fix a corner case in boost autodetection
- Initial release.