Skip to content

Latest commit

 

History

History
47 lines (34 loc) · 2.25 KB

SDPB_input_format.md

File metadata and controls

47 lines (34 loc) · 2.25 KB

SDPB Input Format

SDPB takes preprocessed input generated by pmp2sdp. If you want to modify these files or generate your own input files with a separate tool, this documents the format you will need to follow.

pmp2sdp generates a directory containing multiple JSON/binary files. It may also generate zip archive instead of a directory, if you run it with --zip flag. This can be useful, e.g. to prevent running out of inodes error on some filesystems, when SDP contains large number of blocks. Also, the zip format has a built-in checksum to detect corruption. Note that pmp2sdp does not enable compression, because that can be quite slow.

SDPB can read SDP from plain directory or in any archive format supported by libarchive, including zip, tar, tar.gz, 7z.

Inside the SDP directory, SDPB expects to find control.json, objectives.json, and two files for every block: block_info_0.json, block_data_0.bin (or block_data_0.json), block_info_1.json, block_data_2.bin, ...

The main part of control.json is listing the number of blocks. pmp2sdp will also include a copy of the command used to create the files, but SDPB does not require that.

objectives.json includes the constant contribution to the objective, and 'b', the optimization vector.

block_info_XXX.json contains the dimension and number of points.

block_data_XXX.bin or block_data_XXX.json contains bilinear bases, the 'B' matrix, and the 'c' vector. Block data can be stored either in a human-readable JSON format, or in a more efficient binary format (which uses Boost.Serialization library, see write_block_data.cxx for details).

The JSON schema for these input files are in sdp_control_schema.json, sdp_objectives_schema.json, sdp_block_info_schema.json, sdp_block_data_schema.json. Running SDPB on the test example

pmp2sdp --precision 1024 -i test/data/end-to-end_tests/1d/input/pmp.json -o test/out/pmp2sdp/sdp

will generate a simple example you can look at.