Skip to content

Releases: davidsd/sdpb

3.0.0

07 May 05:23
0dc600b
Compare
Choose a tag to compare

Optimizations:

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.

See #142, #212.

image

New features:

  • 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 #230.

Other improvements:

  • Print iterations data and condition numbers to iterations.json in the output folder. See #228, #231, #232, #233.
  • 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.

New dependencies:

What's Changed

  • Fix #201 Graceful exit on SIGTERM + cosmetic fixes by @vasdommes in #208
  • Fix #207 bigint-syrk-blas: account for MPI shared memory limits (by splitting shared windows) by @vasdommes in #209
  • Calculate Q matrix using Chinese Remainder Theorem, FLINT and BLAS libraries by @vasdommes in #142
  • Fix #211 Optimize reduce-scatter for Q matrix by @vasdommes in #212
  • Fix #175 Debug mode: write profiling for actual run + misc improvements by @vasdommes in #215
  • Misc improvements: shared window warnings, openblas->cblas in waf configure, update dependencies in Dockerfile, add non-HPD to docs by @vasdommes in #217
  • Fix printing window size messages: input and output window were mixed up by @vasdommes in #218
  • Fix #219 Updating block_timings leads to checkpoint loading errors by @vasdommes in #220
  • Minor memory-related fixes and improvements: pretty-print bytes, by @vasdommes in #221
  • Build multiplatform Docker image (AMD64+ARM64) on CircleCI by @vasdommes in #225
  • Minor fixes and improvements by @vasdommes in #227
  • Print SDPB iterations to out/iterations.json, compute condition numbers for each step by @vasdommes in #228
  • Fix #206 Determine --maxSharedMemory automatically, if not set by user. by @vasdommes in #229
  • Add --verbosity=trace level by @vasdommes in #230
  • Minor improvements: full precision for iterations.json, print max MemUsed, improve test output by @vasdommes in #231
  • Minor fixes: fix compilation for Boost 1.81, fix precision for iterations.json by @vasdommes in #232
  • Compute R-err and print it to iterations.json by @vasdommes in #233
  • Minor fixes: UB in compute_block_grid_mapping(), tests for iterations.json, compilation by @vasdommes in #237
  • Update docs for FLINT + minor configuration changes by @vasdommes in #239
  • Update docs to 3.0.0 by @vasdommes in #240

Full Changelog: 2.7.0...3.0.0

2.7.0

21 Feb 01:39
a837094
Compare
Choose a tag to compare

What's new

Breaking changes:

  • New executable pmp2sdp instead of separate sdp2input and pvm2sdp. 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 alias WriteBootstrapSDP) 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.

New features:

  • Added sdpb option --writeSolution=z. Restores the vector z (see SDPB Manual, eq. 3.1) from the vector y (eq. 2.2) and sdp/normalization.json, and writes it to out/z.txt.
    See #191.
  • Added new field "block_path" to spectrum 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.

Other improvements:

  • 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 and DEBUG_STRING, new JSON parser, better GMP<->MPFR conversion, fix compiler warnings, refactor integration tests.
    See #180, #189, #196, #197.

List of merged PRs

  • Fix #164 Excessive IO and RAM usage when reading big SDP blocks by @vasdommes in #167
  • Fix #141 Determine --procsPerNode automatically, reuse shared memory communicator, improve output by @vasdommes in #169
  • Fix #166 Incorrect block mapping for cyclic MPI job distribution across nodes by @vasdommes in #170
  • EPIC sdp2input/pvm2sdp refactoring + parallel reading optimization by @vasdommes in #176
  • Print file and line number in exception, add ASSERT() and RUNTIME_ERROR() macros by @vasdommes in #180
  • New pmp2sdp executable instead of separate sdp2input and pvm2sdp by @vasdommes in #181
  • Fix #183 pmp2sdp options: --zip flag instead of --zip=(false|true) option by @vasdommes in #184
  • Internal improvements: ASSERT_EQUAL/DEBUG_STRING macros, new JSON parser, better GMP<->MPFR conversion by @vasdommes in #189
  • Fix #187 spectrum: write input file path for each block in the output JSON file by @vasdommes in #190
  • Fix #185 Add --writeSolution=z option to SDPB, write to output z.txt by @vasdommes in #191
  • Fix #194 [pmp2sdp with duplicate poles] ERROR: AddressSanitizer: stack-buffer-overflow in operator_plus_set_Derivative_Term.cxx by @vasdommes in #195
  • Fix compilation for gcc 9.2.0 + different warnings by @vasdommes in #196
  • Refactor integration tests by @vasdommes in #197
  • Universal JSON format for Polynomial Matrix Program + write JSON from SDPB.m + update SDPB Manual by @vasdommes in #199
  • Fix #115 Print exception stacktrace when SDPB fails by @vasdommes in #198
  • Update docs for 2.7.0 + fix compilation on Imperial HPC by @vasdommes in #200

Full Changelog: 2.6.1...2.7.0

2.6.1

20 Dec 00:58
7c93d9a
Compare
Choose a tag to compare

What's new

  • Fixed major memory leak in binary SDP deserialization. This may significantly reduce RAM usage compared to 2.6.0. See #160.
  • Improved debug output: print MemUsed and MemTotal for each node, print max MemUsed at the end,
    disable proc/self/statm. See #161.

List of merged PRs

  • Move common headers from src/ to src/sdpb_util/ or other projects by @vasdommes in #157
  • Fix #159 Memory leak in binary SDP deserialization by @vasdommes in #160
  • Improve debug mode output: print MemUsed and MemTotal for each node, disable proc/self/statm by @vasdommes in #161
  • Update docs to 2.6.1 by @vasdommes in #163

Full Changelog: 2.6.0...2.6.1

2.6.0

28 Nov 18:58
de39a62
Compare
Choose a tag to compare

Version 2.6.0

What's new

sdpb

  • New INCOMPATIBLE format for sdp.zip.
    Instead of a single block_XXX.json file now we use block_info_XXX.json and block_data_XXX.json (or block_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 by sdp2input or pvm2sdp, 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 default binary format since it is more compact and efficient than json. See #114, #128, #119, #149.

Tests and CI/CD

  • 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.
  • CI/CD pipelines on CircleCI.
    Tests are run for each git push to the repo and for each pull request. Docker images for the master branch and for each release starting from 2.6.0 are uploaded to Docker Hub automatically. See #133, #136.

Installations

List of merged PRs

New Contributors

Full Changelog: 2.5.1...2.6.0

2.5.1

26 Sep 03:43
Compare
Choose a tag to compare

Full Changelog: 2.5.0...2.5.1

Version 2.5.1

outer_limits

  • Treat the behavior near zero with special care. This means that
    input files now need to specify epsilon_value in addition to
    infinity_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 and pvm2functions programs to convert
    JSON and XML input files to the format that outer_limits expects.

  • Fix an uninitialized matrix bug.

  • Increase the maximum number of allowed SVD iterations because we are
    working at high precision.

spectrum

  • Initial release.