Valid values: | 1 through 256 |
Default value: | 1 |
When compressing a large file, the LZMA2 compressor has the ability to divide its data into "blocks" and compress two or more of these blocks in parallel through the use of additional threads (provided sufficient processor power is available). This directive specifies the maximum number of threads to use -- that is, the maximum number of blocks that the LZMA2 compressor may compress in parallel. Using a high maximum requires a very large file before this maximum is fully utilized.
The memory required during compression when multiple block threads are used is roughly:
LZMANumBlockThreads * (Normal memory usage + (LZMABlockSize * 2))
Since LZMA2 (and LZMA) uses two threads for match-finding by default (see CompressionThreads), there ideally should be two processor cores available for each block thread. Thus, to see the maximum benefit from a value of 2, four cores are needed.
Dividing the data into multiple blocks can reduce the compression ratio, as the compressor cannot find matches across blocks. Using a large block size can help to mitigate this.
If an "Out of memory" error is seen when multiple block threads are enabled in combination with a compression level that uses a large dictionary size (such as ultra64), LZMAUseSeparateProcess may need to be set.
See also:
LZMABlockSize