I've updated the repo to have the code needed to dump the data to output files at
https://github.com/michaelmaniscalco/m99
This will allow you to experiment with other compression techniques. however, I did run fpaqc and it doesn't compress as well as fse in this case.
M99+FSE -> 171,266,345
M99+fpaqc -> 171,401,911
You need to define ENABLE_EXPERIMENTAL and recompile to enable this mode though. This will dump all values that m99 would normally pack (for all values if N < 256) to individual files named m99.experimental.N.dat. This mode will also produce a normal output.m99 file which contains all of the encoded data for cases where the value N to pack was >= 256. You need to add this data to the total compressed size to get the experimental compression size.
Here's the enwik9 output for M99+FSE
Code:
m99 e enwik9 ./enwik9.dat 8
m99 - high performance BWT compressor. Author: M.A. Maniscalco (1999 - 2017)
**** EXPERIMENTAL MODE ENABLED ****
**** This mode does not produce viable compressed data ****
compressed: 1000000000 -> 75673174 bytes. ratio = 7.56732%
This produces a series of m99.experimental.N.dat files which get compressed with fse:
Code:
for ((i=1; i<256; i++)); do echo $i; ./fse -e ./m99.experimental.$i.dat ./m99.experimental.$i.fse | grep "compressed"; done
du -hscb ./*.fse | grep "total"
output:
Code:
1
FSE : Finite State Entropy, 64-bits demo by Yann Collet (Nov 9 2018)
Compressed 0 bytes into 8 bytes ==> inf%
2
FSE : Finite State Entropy, 64-bits demo by Yann Collet (Nov 9 2018)
Compressed 130899222 bytes into 25091278 bytes ==> 19.17%
3
FSE : Finite State Entropy, 64-bits demo by Yann Collet (Nov 9 2018)
Compressed 58150706 bytes into 13913580 bytes ==> 23.93%
4
FSE : Finite State Entropy, 64-bits demo by Yann Collet (Nov 9 2018)
Compressed 30712600 bytes into 8484908 bytes ==> 27.63%
<SNIPPED>
FSE : Finite State Entropy, 64-bits demo by Yann Collet (Nov 9 2018)
Compressed 9650 bytes into 9396 bytes ==> 97.37%
255
FSE : Finite State Entropy, 64-bits demo by Yann Collet (Nov 9 2018)
Compressed 9535 bytes into 9368 bytes ==> 98.25%
95593171 total
Add the total FSE output with the total M99 output to get the M99+FSE compressed size:
95593171 + 75673174 = 171,266,345
result:
enwik9 1,000,000,000 -> 171,266,345