# include "config.h"
#endif
+#ifdef ENABLE_MULTITHREADED_COMPRESSION
+
#include "wimlib/assert.h"
#include "wimlib/chunk_compressor.h"
#include "wimlib/error.h"
desired_num_threads = num_threads;
- chunks_per_msg = MAX_CHUNKS_PER_MSG;
- msgs_per_thread = 2;
+ if (out_chunk_size < ((u32)1 << 23)) {
+ chunks_per_msg = MAX_CHUNKS_PER_MSG;
+ msgs_per_thread = 2;
+ } else {
+ /* Big chunks: Just have one buffer per thread --- more would
+ * just waste memory. */
+ chunks_per_msg = 1;
+ msgs_per_thread = 1;
+ }
for (;;) {
approx_mem_required =
(u64)chunks_per_msg *
(u64)msgs_per_thread *
(u64)num_threads *
(u64)out_chunk_size
+ + out_chunk_size
+ 1000000
- + (out_chunk_size * num_threads * 4);
+ + num_threads * wimlib_get_compressor_needed_memory(out_ctype,
+ out_chunk_size,
+ NULL);
if (approx_mem_required <= max_memory)
break;
parallel_chunk_compressor_destroy(&ctx->base);
return ret;
}
+
+#endif /* ENABLE_MULTITHREADED_COMPRESSION */